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 */