openbcm

Git mirror of https://github.com/Broadcom-Network-Switching-Software/OpenBCM
git clone git://git.finwo.net/mirror/broadcom/openbcm
Log | Files | Refs | README

error.h (11273B)


      1 /*
      2  * 
      3  * This license is set out in https://raw.githubusercontent.com/Broadcom-Network-Switching-Software/OpenBCM/master/Legal/LICENSE file.
      4  * 
      5  * Copyright 2007-2019 Broadcom Inc. All rights reserved.
      6  */
      7 
      8 #ifndef _SOC_ERROR_H
      9 #define _SOC_ERROR_H
     10 
     11 #include <shared/error.h>
     12 #include <soc/debug.h>
     13 #if defined(BCM_SAND_SUPPORT) && defined(BCM_GEN_ERR_MECHANISM)
     14 #include <soc/dcmn/dcmn_gen_err.h>
     15 #endif
     16 
     17 /*
     18  * Defines:	SOC_E_XXX
     19  * Purpose:	SOC API error codes
     20  * Notes:
     21  *      An error code may be converted to a string by passing
     22  *      the code to soc_errmsg().
     23  */
     24 
     25 typedef enum {
     26     SOC_E_NONE                  = _SHR_E_NONE,
     27     SOC_E_INTERNAL              = _SHR_E_INTERNAL,
     28     SOC_E_MEMORY                = _SHR_E_MEMORY,
     29     SOC_E_UNIT                  = _SHR_E_UNIT,
     30     SOC_E_PARAM                 = _SHR_E_PARAM,
     31     SOC_E_EMPTY                 = _SHR_E_EMPTY,
     32     SOC_E_FULL                  = _SHR_E_FULL,
     33     SOC_E_NOT_FOUND             = _SHR_E_NOT_FOUND,
     34     SOC_E_EXISTS                = _SHR_E_EXISTS,
     35     SOC_E_TIMEOUT               = _SHR_E_TIMEOUT,
     36     SOC_E_BUSY                  = _SHR_E_BUSY,
     37     SOC_E_FAIL                  = _SHR_E_FAIL,
     38     SOC_E_DISABLED              = _SHR_E_DISABLED,
     39     SOC_E_BADID                 = _SHR_E_BADID,
     40     SOC_E_RESOURCE              = _SHR_E_RESOURCE,
     41     SOC_E_CONFIG                = _SHR_E_CONFIG,
     42     SOC_E_UNAVAIL               = _SHR_E_UNAVAIL,
     43     SOC_E_INIT                  = _SHR_E_INIT,
     44     SOC_E_PORT                  = _SHR_E_PORT,
     45     SOC_E_LIMIT                 = _SHR_E_LIMIT
     46 } soc_error_t;
     47 
     48 #define SOC_SUCCESS(rv)         _SHR_E_SUCCESS(rv)
     49 #define SOC_FAILURE(rv)         _SHR_E_FAILURE(rv)
     50 #define SOC_IF_ERROR_RETURN(op) _SHR_E_IF_ERROR_RETURN(op)
     51 #define soc_errmsg(rv)          _SHR_ERRMSG(rv)
     52 #define SOC_IF_ERROR_CLEAN_RETURN(op,exop) _SHR_E_IF_ERROR_CLEAN_RETURN(op,exop)
     53 
     54 typedef enum {
     55     SOC_SWITCH_EVENT_IO_ERROR       = _SHR_SWITCH_EVENT_IO_ERROR,
     56     SOC_SWITCH_EVENT_PARITY_ERROR   = _SHR_SWITCH_EVENT_PARITY_ERROR,
     57     SOC_SWITCH_EVENT_THREAD_ERROR   = _SHR_SWITCH_EVENT_THREAD_ERROR,
     58     SOC_SWITCH_EVENT_ACCESS_ERROR   = _SHR_SWITCH_EVENT_ACCESS_ERROR,
     59     SOC_SWITCH_EVENT_ASSERT_ERROR   = _SHR_SWITCH_EVENT_ASSERT_ERROR,
     60     SOC_SWITCH_EVENT_MODID_CHANGE   = _SHR_SWITCH_EVENT_MODID_CHANGE,
     61     SOC_SWITCH_EVENT_DOS_ATTACK     = _SHR_SWITCH_EVENT_DOS_ATTACK,
     62     SOC_SWITCH_EVENT_STABLE_FULL    = _SHR_SWITCH_EVENT_STABLE_FULL,
     63     SOC_SWITCH_EVENT_STABLE_ERROR   = _SHR_SWITCH_EVENT_STABLE_ERROR,
     64     SOC_SWITCH_EVENT_UNCONTROLLED_SHUTDOWN   = _SHR_SWITCH_EVENT_UNCONTROLLED_SHUTDOWN,
     65     SOC_SWITCH_EVENT_WARM_BOOT_DOWNGRADE     = _SHR_SWITCH_EVENT_WARM_BOOT_DOWNGRADE,
     66     SOC_SWITCH_EVENT_TUNE_ERROR     = _SHR_SWITCH_EVENT_TUNE_ERROR,
     67     SOC_SWITCH_EVENT_DEVICE_INTERRUPT        = _SHR_SWITCH_EVENT_DEVICE_INTERRUPT,
     68     SOC_SWITCH_EVENT_ALARM          = _SHR_SWITCH_EVENT_ALARM, 
     69     SOC_SWITCH_EVENT_MMU_BST_TRIGGER = _SHR_SWITCH_EVENT_MMU_BST_TRIGGER,
     70     SOC_SWITCH_EVENT_EPON_ALARM     = _SHR_SWITCH_EVENT_EPON_ALARM,
     71     SOC_SWITCH_EVENT_RUNT_DETECT    = _SHR_SWITCH_EVENT_RUNT_DETECT,
     72     SOC_SWITCH_EVENT_AUTONEG_SPEED_ERROR = _SHR_SWITCH_EVENT_AUTONEG_SPEED_ERROR,
     73     SOC_SWITCH_EVENT_COUNT          = _SHR_SWITCH_EVENT_COUNT        /* last, as always */
     74 } soc_switch_event_t;
     75 
     76 /* Early demand request error event */
     77 #define SOC_SWITCH_EVENT_TUNE_ERROR_QM_BLOCK  1
     78 
     79 /* Top level parity error info returned in event callbacks */
     80 typedef enum {
     81     SOC_SWITCH_EVENT_DATA_ERROR_PARITY = 1,
     82     SOC_SWITCH_EVENT_DATA_ERROR_ECC,
     83     SOC_SWITCH_EVENT_DATA_ERROR_UNSPECIFIED,
     84     SOC_SWITCH_EVENT_DATA_ERROR_FATAL,
     85     SOC_SWITCH_EVENT_DATA_ERROR_CORRECTED,
     86     SOC_SWITCH_EVENT_DATA_ERROR_LOG,
     87     SOC_SWITCH_EVENT_DATA_ERROR_UNCORRECTABLE,
     88     SOC_SWITCH_EVENT_DATA_ERROR_AUTO_CORRECTED,
     89     SOC_SWITCH_EVENT_DATA_ERROR_FAILEDTOCORRECT,
     90     SOC_SWITCH_EVENT_DATA_ERROR_ECC_1BIT_CORRECTED, /* Single-bit ECC corrected, no traffic loss */
     91     SOC_SWITCH_EVENT_DATA_ERROR_ECC_2BIT_CORRECTED, /* Double-bit ECC corrected, potential traffic loss */
     92     SOC_SWITCH_EVENT_DATA_ERROR_PARITY_CORRECTED, /* Parity error correction */
     93     SOC_SWITCH_EVENT_DATA_ERROR_CFAP_MEM_FAIL
     94 } soc_switch_data_error_t;
     95 
     96 /* Top level switch event alarm info returned in event callbacks */
     97 typedef enum {
     98     SOC_SWITCH_EVENT_ALARM_HIGH_TEMP = 1,
     99     SOC_SWITCH_EVENT_ALARM_125C_TEMP = 2,
    100     SOC_SWITCH_EVENT_ALARM_COUNT = 3
    101 } bcm_switch_event_alarm_t;
    102 
    103 #define SOC_SER_ERROR_PIPE_BP              16
    104 #define SOC_SER_ERROR_DATA_ENCODING_BP     24
    105 #define SOC_SER_ERROR_DATA_FIELD_ID_OFFSET 1 /* Field id and index */
    106 #define SOC_SER_ERROR_DATA_REG_ID_OFFSET   2 /* Reg id and index */
    107 #define SOC_SER_ERROR_DATA_ID_OFFSET       3 /* Mem id and index */
    108 #define SOC_SER_ERROR_DATA_BLK_ADDR        4 /* Block, pipe and address */
    109 #define SOC_SER_ERROR_ENTRY_ID_MINFO_OFFSET 5 /* entry id, block,pipe and field info */
    110 #define SOC_SER_ERROR_DATA_FIELD_ID_OFFSET_SET \
    111         (SOC_SER_ERROR_DATA_FIELD_ID_OFFSET << SOC_SER_ERROR_DATA_ENCODING_BP)
    112 #define SOC_SER_ERROR_DATA_REG_ID_OFFSET_SET \
    113         (SOC_SER_ERROR_DATA_REG_ID_OFFSET << SOC_SER_ERROR_DATA_ENCODING_BP)
    114 #define SOC_SER_ERROR_DATA_ID_OFFSET_SET \
    115         (SOC_SER_ERROR_DATA_ID_OFFSET << SOC_SER_ERROR_DATA_ENCODING_BP)
    116 #define SOC_SER_ERROR_DATA_BLK_ADDR_SET \
    117         (SOC_SER_ERROR_DATA_BLK_ADDR << SOC_SER_ERROR_DATA_ENCODING_BP)
    118 #define SOC_SER_ERROR_ENTRY_ID_MINFO_SET \
    119         (SOC_SER_ERROR_ENTRY_ID_MINFO_OFFSET << SOC_SER_ERROR_DATA_ENCODING_BP)
    120 
    121 #define SOC_ERROR_BLK_BP                   24
    122 #define SOC_ERROR_PIPE_BP                  16
    123 #define SOC_ERROR_FIELD_ENUM_MASK          0xffff
    124 #define SOC_ERROR_MEM_ENUM_MASK            0xffff
    125 #define SOC_ERROR_REG_ENUM_MASK            0xffff
    126 
    127 typedef enum {
    128     SOC_SWITCH_EVENT_THREAD_L2X      = 1,
    129     SOC_SWITCH_EVENT_THREAD_COUNTER,
    130     SOC_SWITCH_EVENT_THREAD_MEMSCAN,
    131     SOC_SWITCH_EVENT_THREAD_L2MOD,
    132     SOC_SWITCH_EVENT_THREAD_L2MOD_DMA,
    133     SOC_SWITCH_EVENT_THREAD_IPFIX,
    134     SOC_SWITCH_EVENT_THREAD_LINKSCAN,
    135     SOC_SWITCH_EVENT_THREAD_REGEX_REPORT,
    136     SOC_SWITCH_EVENT_THREAD_HWDOS_MONITOR,
    137     SOC_SWITCH_EVENT_THREAD_CTR_EVICT_DMA,
    138     SOC_SWITCH_EVENT_THREAD_SRAMSCAN,
    139     SOC_SWITCH_EVENT_THREAD_L2X_LEARN
    140 } soc_switch_thread_id_t;
    141 
    142 
    143 /*Single point of exit*/
    144 #define SOC_EXIT goto exit
    145 
    146 /* Must appear at each function right after parameters definition */
    147 #define SOC_INIT_FUNC_DEFS \
    148     int _rv = SOC_E_NONE, _lock_taken = 0; \
    149     (void)_lock_taken; \
    150     LOG_DEBUG(_ERR_MSG_MODULE_NAME, (BSL_META("enter\n"))); 
    151 
    152 #define SOC_FUNC_ERROR \
    153     SOC_FAILURE(_rv)
    154 
    155 #define SOC_FUNC_RETURN \
    156     LOG_DEBUG(_ERR_MSG_MODULE_NAME, (BSL_META("exit\n"))); \
    157     return _rv;
    158 
    159 #define SOC_FUNC_RETURN_VOID \
    160     LOG_DEBUG(_ERR_MSG_MODULE_NAME, (BSL_META("exit\n")));\
    161         COMPILER_REFERENCE(_rv);
    162 
    163 #if defined(BCM_SAND_SUPPORT) && defined(BCM_GEN_ERR_MECHANISM)
    164 #define _SOC_IF_ERR_CONT(_rc) \
    165       do { \
    166         int __err__rc = _rc; \
    167         GEN_ERR_CHK(unit, GEN_ERR_TYPE_SOC, __err__rc); \
    168         if(__err__rc != SOC_E_NONE) { \
    169             LOG_ERROR(_ERR_MSG_MODULE_NAME, (BSL_META("%s\n"), soc_errmsg(__err__rc))); \
    170             _rv = __err__rc; \
    171         } \
    172       } while(0)
    173 
    174 #define _SOC_IF_ERR_EXIT(_rc) \
    175       do { \
    176         int __err__rc = _rc; \
    177         GEN_ERR_CHK(unit, GEN_ERR_TYPE_SOC, __err__rc); \
    178         if(__err__rc != SOC_E_NONE) { \
    179             LOG_ERROR(_ERR_MSG_MODULE_NAME, (BSL_META("%s\n"), soc_errmsg(__err__rc))); \
    180             _rv = __err__rc; \
    181             SOC_EXIT; \
    182         } \
    183       } while(0)
    184 #else
    185 #define _SOC_IF_ERR_CONT(_rc) \
    186       do { \
    187         int __err__rc = _rc; \
    188         if(__err__rc != SOC_E_NONE) { \
    189             LOG_ERROR(_ERR_MSG_MODULE_NAME, (BSL_META("%s\n"), soc_errmsg(__err__rc))); \
    190             _rv = __err__rc; \
    191         } \
    192       } while(0)
    193 
    194 #define _SOC_IF_ERR_EXIT(_rc) \
    195       do { \
    196         int __err__rc = _rc; \
    197         if(__err__rc != SOC_E_NONE) { \
    198             LOG_ERROR(_ERR_MSG_MODULE_NAME, (BSL_META("%s\n"), soc_errmsg(__err__rc))); \
    199             _rv = __err__rc; \
    200             SOC_EXIT; \
    201         } \
    202       } while(0)
    203 #endif
    204 
    205 #define _SOC_EXIT_WITH_ERR(_rc, stuff) \
    206       do { \
    207             LOG_ERROR(_ERR_MSG_MODULE_NAME, stuff); \
    208             _rv = _rc; \
    209             SOC_EXIT; \
    210       } while(0)
    211       
    212 
    213 #define SOC_NULL_CHECK(arg) \
    214     do {   \
    215         if ((arg) == NULL) \
    216         { _SOC_EXIT_WITH_ERR(SOC_E_PARAM,(BSL_META("null parameter\n"))); } \
    217     } while (0)
    218 
    219 #define SOC_FREE(arg)   \
    220   do {   \
    221       if(arg != NULL) \
    222       {sal_free(arg);} \
    223   } while (0)
    224 
    225 
    226 
    227 #define SOC_ALLOC(var, type, count,str)                                     \
    228   do {                                                                       \
    229     if(var != NULL)                                                       \
    230     {    \
    231       _SOC_EXIT_WITH_ERR(SOC_E_PARAM,(BSL_META("Trying to allocate to a non null ptr is forbidden"))); \
    232     }                                                                     \
    233     var = (type*)sal_alloc((count) * sizeof(type),str);                  \
    234     if (var == NULL)                                                      \
    235     {\
    236       _SOC_EXIT_WITH_ERR(SOC_E_MEMORY,(BSL_META("Allocating failed")));  \
    237     }                                                                     \
    238     sal_memset(                                                 \
    239         var,                                                          \
    240         0x0,                                                          \
    241         (size_t) ((count) * sizeof(type))                                        \
    242       );                                                    \
    243   } while(0)
    244 
    245 #define SOC_CLEAR(var_ptr, type, count)                                 \
    246   do {                                                                                 \
    247     sal_memset(                                                 \
    248         var_ptr,                                                      \
    249         0x0,                                                          \
    250         (size_t) ((count) * sizeof(type))                                  \
    251       );                                                              \
    252   } while(0)
    253 
    254 #define SOC_COPY(var_dest_ptr, var_src_ptr, type, count)                \
    255   do {                                                                     \
    256     sal_memcpy(                                                 \
    257         var_dest_ptr,                                                 \
    258         var_src_ptr,                                                  \
    259         (size_t) ((count) * sizeof(type))                             \
    260       );                                                             \
    261   }while(0)
    262 
    263 #define SOC_COMP(var_ptr1, var_ptr2, type, count, is_equal_res)         \
    264   do {         \
    265     assert(var_ptr1 != NULL && var_ptr2 != NULL);                         \
    266     is_equal_res = sal_memcmp(          \
    267             var_ptr1,                                                     \
    268             var_ptr2,   \
    269             (size_t) ((count) * sizeof(type)) \
    270           ) ? FALSE : TRUE;   \
    271   }while(0)
    272 
    273 #define _SOC_IF_ERROR_NOT_UNAVAIL_RETURN(op)  \
    274       _SHR_E_IF_ERROR_NOT_UNAVAIL_RETURN(op)
    275 
    276 #endif  /* !_SOC_ERROR_H */