field_reg_mem.c (11886B)
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 * File: field_reg_mem.c 8 * Purpose: Field Processor module routines specific to BCM56960 registers 9 * and memories 10 */ 11 12 #include <shared/bsl.h> 13 #include <soc/defs.h> 14 #if defined(BCM_FIELD_SUPPORT) 15 #include <soc/drv.h> 16 #include <bcm/error.h> 17 #include <bcm/field.h> 18 #include <bcm_int/esw/field.h> 19 20 /* 21 * Function: _bcm_field_reg_instance_get 22 * 23 * Purpose: 24 * To get the hardware register for the pipe instance mentioned. 25 * 26 * Parameters: 27 * unit - (IN)BCM device number 28 * reg - (IN)Register name 29 * inst - (IN)Pipe instance 30 * reg_out - (OUT)Register instance 31 * 32 * Returns: 33 * BCM_E_XXX 34 * 35 * Notes: 36 * This function takes the register name and pipe number as input and 37 * converts to the right register instance for the pipe given. 38 * Number of instances depends on number of pipes supported on the device. 39 * For any register access for a pipe we need to call this way of getting the 40 * register instance and add required case in this function. 41 */ 42 43 int 44 _bcm_field_reg_instance_get(int unit, soc_reg_t reg, int inst, soc_reg_t *reg_out) 45 { 46 47 switch(reg) { 48 49 case EFP_CLASSID_B_SELECTOR_KEY_TYPEr: 50 _FP_2PIPE_REG_IDENTIFIER_GET(*reg_out, EFP_CLASSID_B_SELECTOR_KEY_TYPE, 51 PIPE, inst); 52 break; 53 case VFP_KEY_CONTROL_1r: 54 _FP_8PIPE_REG_IDENTIFIER_GET(*reg_out, VFP_KEY_CONTROL_1, PIPE, inst); 55 break; 56 case VFP_KEY_CONTROL_2r: 57 _FP_8PIPE_REG_IDENTIFIER_GET(*reg_out, VFP_KEY_CONTROL_2, PIPE, inst); 58 break; 59 case EFP_CLASSID_SELECTORr: 60 _FP_8PIPE_REG_IDENTIFIER_GET(*reg_out, EFP_CLASSID_SELECTOR, PIPE, inst); 61 break; 62 case EFP_CLASSID_SELECTOR_Ar: 63 _FP_2PIPE_REG_IDENTIFIER_GET(*reg_out, EFP_CLASSID_SELECTOR_A, 64 PIPE, inst); 65 break; 66 case EFP_KEY4_DVP_SELECTORr: 67 _FP_4PIPE_REG_IDENTIFIER_GET(*reg_out, EFP_KEY4_DVP_SELECTOR, 68 PIPE, inst); 69 break; 70 case EFP_KEY4_MDL_SELECTORr: 71 _FP_8PIPE_REG_IDENTIFIER_GET(*reg_out, EFP_KEY4_MDL_SELECTOR, 72 PIPE, inst); 73 break; 74 case EFP_KEY8_DVP_SELECTORr: 75 _FP_4PIPE_REG_IDENTIFIER_GET(*reg_out, EFP_KEY8_DVP_SELECTOR, 76 PIPE, inst); 77 break; 78 case VFP_SLICE_MAPr: 79 _FP_8PIPE_REG_IDENTIFIER_GET(*reg_out, VFP_SLICE_MAP, PIPE, inst); 80 break; 81 case EFP_SLICE_MAPr: 82 _FP_8PIPE_REG_IDENTIFIER_GET(*reg_out, EFP_SLICE_MAP, PIPE, inst); 83 break; 84 case EFP_SLICE_CONTROLr: 85 _FP_8PIPE_REG_IDENTIFIER_GET(*reg_out, EFP_SLICE_CONTROL, PIPE, inst); 86 break; 87 case VFP_SLICE_CONTROLr: 88 _FP_8PIPE_REG_IDENTIFIER_GET(*reg_out, VFP_SLICE_CONTROL, PIPE, inst); 89 break; 90 case IFP_CONFIGr: 91 _FP_8PIPE_REG_IDENTIFIER_GET(*reg_out, IFP_CONFIG, PIPE, inst); 92 break; 93 case AUX_ARB_CONTROLr: 94 _FP_8PIPE_REG_IDENTIFIER_GET(*reg_out, AUX_ARB_CONTROL, PIPE, inst); 95 break; 96 case IFP_LOGICAL_TABLE_SELECT_CONFIGr: 97 _FP_8PIPE_REG_IDENTIFIER_GET(*reg_out, IFP_LOGICAL_TABLE_SELECT_CONFIG, 98 PIPE, inst); 99 break; 100 case EXACT_MATCH_LOGICAL_TABLE_SELECT_CONFIGr: 101 _FP_8PIPE_REG_IDENTIFIER_GET(*reg_out, EXACT_MATCH_LOGICAL_TABLE_SELECT_CONFIG, 102 PIPE, inst); 103 break; 104 case IFP_LOGICAL_TABLE_CONFIGr: 105 _FP_8PIPE_REG_IDENTIFIER_GET(*reg_out, IFP_LOGICAL_TABLE_CONFIG, 106 PIPE, inst); 107 break; 108 case L4_SRC_PORT_MAPr: 109 _FP_4PIPE_REG_IDENTIFIER_GET(*reg_out, L4_SRC_PORT_MAP, 110 PIPE, inst); 111 break; 112 case ETHERTYPE_MAPr: 113 _FP_8PIPE_REG_IDENTIFIER_GET(*reg_out, ETHERTYPE_MAP, 114 PIPE, inst); 115 break; 116 case L4_DST_PORT_MAPr: 117 _FP_4PIPE_REG_IDENTIFIER_GET(*reg_out, L4_DST_PORT_MAP, 118 PIPE, inst); 119 break; 120 case EFP_DEST_PORT_SELECTORr: 121 _FP_2PIPE_REG_IDENTIFIER_GET(*reg_out, EFP_DEST_PORT_SELECTOR, 122 PIPE, inst); 123 break; 124 case EFP_KEY4_L3_CLASSID_SELECTORr: 125 _FP_8PIPE_REG_IDENTIFIER_GET(*reg_out, EFP_KEY4_L3_CLASSID_SELECTOR, 126 PIPE, inst); 127 break; 128 case EFP_KEY8_L3_CLASSID_SELECTORr: 129 _FP_8PIPE_REG_IDENTIFIER_GET(*reg_out, EFP_KEY8_L3_CLASSID_SELECTOR, 130 PIPE, inst); 131 break; 132 default: 133 return BCM_E_INTERNAL; 134 } 135 return BCM_E_NONE; 136 } 137 138 /* 139 * Function: _bcm_field_mem_instance_get 140 * 141 * Purpose: 142 * To get the hardware memory for the pipe instance mentioned. 143 * 144 * Parameters: 145 * unit - (IN)BCM device number 146 * mem - (IN)Memory name 147 * inst - (IN)Pipe instance 148 * mem_out - (OUT)Memory instance 149 * 150 * Returns: 151 * BCM_E_XXX 152 * 153 * Notes: 154 * This function takes the memory name and pipe number as input and 155 * converts to the right memory instance for the pipe given. 156 * Number of instances depends on number of pipes supported on the device. 157 * For any memory access for a pipe we need to call this way of getting the 158 * memory instance and add required case in this function. 159 */ 160 161 int 162 _bcm_field_mem_instance_get(int unit, soc_mem_t mem, int inst, soc_mem_t *mem_out) 163 { 164 switch(mem) { 165 case VFP_TCAMm: 166 _FP_8PIPE_MEM_IDENTIFIER_GET(*mem_out, VFP_TCAM, PIPE, inst); 167 break; 168 case VFP_POLICY_TABLEm: 169 _FP_8PIPE_MEM_IDENTIFIER_GET(*mem_out, VFP_POLICY_TABLE, PIPE, inst); 170 break; 171 case EFP_TCAMm: 172 _FP_8PIPE_MEM_IDENTIFIER_GET(*mem_out, EFP_TCAM, PIPE, inst); 173 break; 174 case EFP_POLICY_TABLEm: 175 _FP_8PIPE_MEM_IDENTIFIER_GET(*mem_out, EFP_POLICY_TABLE, PIPE, inst); 176 break; 177 case IFP_TCAM_WIDEm: 178 _FP_4PIPE_MEM_IDENTIFIER_GET(*mem_out, IFP_TCAM_WIDE, PIPE, inst); 179 break; 180 case IFP_TCAMm: 181 _FP_8PIPE_MEM_IDENTIFIER_GET(*mem_out, IFP_TCAM, PIPE, inst); 182 break; 183 case IFP_POLICY_TABLE_WIDEm: 184 _FP_2PIPE_MEM_IDENTIFIER_GET(*mem_out, IFP_POLICY_TABLE_WIDE, PIPE, inst); 185 break; 186 case IFP_POLICY_TABLEm: 187 _FP_8PIPE_MEM_IDENTIFIER_GET(*mem_out, IFP_POLICY_TABLE, PIPE, inst); 188 break; 189 case EXACT_MATCH_4m: 190 _FP_4PIPE_MEM_IDENTIFIER_GET(*mem_out, EXACT_MATCH_4, PIPE, inst); 191 break; 192 case EXACT_MATCH_2m: 193 _FP_4PIPE_MEM_IDENTIFIER_GET(*mem_out, EXACT_MATCH_2, PIPE, inst); 194 break; 195 case IFP_KEY_GEN_PROGRAM_PROFILEm: 196 _FP_8PIPE_MEM_IDENTIFIER_GET(*mem_out, IFP_KEY_GEN_PROGRAM_PROFILE, PIPE, inst); 197 break; 198 case IFP_KEY_GEN_PROGRAM_PROFILE2m: 199 _FP_8PIPE_MEM_IDENTIFIER_GET(*mem_out, IFP_KEY_GEN_PROGRAM_PROFILE2, PIPE, inst); 200 break; 201 case EXACT_MATCH_KEY_GEN_PROGRAM_PROFILEm: 202 _FP_8PIPE_MEM_IDENTIFIER_GET(*mem_out, EXACT_MATCH_KEY_GEN_PROGRAM_PROFILE, PIPE, 203 inst); 204 break; 205 case EXACT_MATCH_KEY_GEN_MASKm: 206 _FP_8PIPE_MEM_IDENTIFIER_GET(*mem_out, EXACT_MATCH_KEY_GEN_MASK, PIPE, inst); 207 break; 208 case IFP_RANGE_CHECKm: 209 _FP_8PIPE_MEM_IDENTIFIER_GET(*mem_out, IFP_RANGE_CHECK, PIPE, inst); 210 break; 211 case IFP_LOGICAL_TABLE_SELECTm: 212 _FP_8PIPE_MEM_IDENTIFIER_GET(*mem_out, IFP_LOGICAL_TABLE_SELECT, PIPE, inst); 213 break; 214 case IFP_LOGICAL_TABLE_SELECT_TCAM_ONLYm: 215 _FP_8PIPE_MEM_IDENTIFIER_GET(*mem_out, IFP_LOGICAL_TABLE_SELECT_TCAM_ONLY, PIPE, 216 inst); 217 break; 218 case IFP_LOGICAL_TABLE_SELECT_DATA_ONLYm: 219 _FP_8PIPE_MEM_IDENTIFIER_GET(*mem_out, IFP_LOGICAL_TABLE_SELECT_DATA_ONLY, PIPE, 220 inst); 221 break; 222 case EXACT_MATCH_LOGICAL_TABLE_SELECTm: 223 _FP_8PIPE_MEM_IDENTIFIER_GET(*mem_out, EXACT_MATCH_LOGICAL_TABLE_SELECT, PIPE, 224 inst); 225 break; 226 case EXACT_MATCH_LOGICAL_TABLE_SELECT_TCAM_ONLYm: 227 _FP_8PIPE_MEM_IDENTIFIER_GET(*mem_out, EXACT_MATCH_LOGICAL_TABLE_SELECT_TCAM_ONLY, 228 PIPE, inst); 229 break; 230 case EXACT_MATCH_LOGICAL_TABLE_SELECT_DATA_ONLYm: 231 _FP_8PIPE_MEM_IDENTIFIER_GET(*mem_out, EXACT_MATCH_LOGICAL_TABLE_SELECT_DATA_ONLY, 232 PIPE, inst); 233 break; 234 case IFP_METER_TABLEm: 235 _FP_8PIPE_MEM_IDENTIFIER_GET(*mem_out, IFP_METER_TABLE, PIPE, inst); 236 break; 237 case EFP_METER_TABLEm: 238 _FP_4PIPE_MEM_IDENTIFIER_GET(*mem_out, EFP_METER_TABLE, PIPE, inst); 239 break; 240 case EFP_COUNTER_TABLEm: 241 _FP_8PIPE_MEM_IDENTIFIER_GET(*mem_out, EFP_COUNTER_TABLE, PIPE, inst); 242 break; 243 case IFP_LOGICAL_TABLE_ACTION_PRIORITYm: 244 _FP_8PIPE_MEM_IDENTIFIER_GET(*mem_out, IFP_LOGICAL_TABLE_ACTION_PRIORITY, PIPE, 245 inst); 246 break; 247 case TTL_FNm: 248 _FP_8PIPE_MEM_IDENTIFIER_GET(*mem_out, TTL_FN, PIPE, inst); 249 break; 250 case TOS_FNm: 251 _FP_8PIPE_MEM_IDENTIFIER_GET(*mem_out, TOS_FN, PIPE, inst); 252 break; 253 case TCP_FNm: 254 _FP_8PIPE_MEM_IDENTIFIER_GET(*mem_out, TCP_FN, PIPE, inst); 255 break; 256 case IP_PROTO_MAPm: 257 _FP_8PIPE_MEM_IDENTIFIER_GET(*mem_out, IP_PROTO_MAP, PIPE, inst); 258 break; 259 case SRC_COMPRESSIONm: 260 _FP_4PIPE_MEM_IDENTIFIER_GET(*mem_out, SRC_COMPRESSION, PIPE, inst); 261 break; 262 case DST_COMPRESSIONm: 263 _FP_4PIPE_MEM_IDENTIFIER_GET(*mem_out, DST_COMPRESSION, PIPE, inst); 264 break; 265 case EXACT_MATCH_DEFAULT_POLICYm: 266 _FP_8PIPE_MEM_IDENTIFIER_GET(*mem_out, EXACT_MATCH_DEFAULT_POLICY, PIPE, inst); 267 break; 268 case EXACT_MATCH_ACTION_PROFILEm: 269 _FP_8PIPE_MEM_IDENTIFIER_GET(*mem_out, EXACT_MATCH_ACTION_PROFILE, PIPE, inst); 270 break; 271 case EXACT_MATCH_QOS_ACTIONS_PROFILEm: 272 _FP_8PIPE_MEM_IDENTIFIER_GET(*mem_out, EXACT_MATCH_QOS_ACTIONS_PROFILE, PIPE, 273 inst); 274 break; 275 case EXACT_MATCH_KEY_ATTRIBUTESm: 276 _FP_2PIPE_MEM_IDENTIFIER_GET(*mem_out, EXACT_MATCH_KEY_ATTRIBUTES, PIPE, 277 inst); 278 break; 279 case IFP_POLICY_ACTION_PROFILEm: 280 _FP_2PIPE_MEM_IDENTIFIER_GET(*mem_out, IFP_POLICY_ACTION_PROFILE, PIPE, 281 inst); 282 break; 283 case IFP_RANGE_CHECK_MASK_Am: 284 _FP_8PIPE_MEM_IDENTIFIER_GET(*mem_out, IFP_RANGE_CHECK_MASK_A, PIPE, inst); 285 break; 286 case IFP_RANGE_CHECK_MASK_Bm: 287 _FP_8PIPE_MEM_IDENTIFIER_GET(*mem_out, IFP_RANGE_CHECK_MASK_B, PIPE, inst); 288 break; 289 default: 290 return BCM_E_INTERNAL; 291 } 292 293 return BCM_E_NONE; 294 295 } 296 #endif /* BCM_FIELD_SUPPORT */