pbsmh.c (58921B)
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 * Utility routines for managing pbsmh headers 8 * These are mainly used for debug purposes 9 */ 10 11 #include <shared/bsl.h> 12 13 #include <assert.h> 14 #include <sal/core/libc.h> 15 #include <shared/bsl.h> 16 #include <soc/types.h> 17 #include <soc/drv.h> 18 #include <soc/pbsmh.h> 19 #include <soc/cm.h> 20 #include <soc/dcb.h> 21 #include <soc/debug.h> 22 23 #ifdef BCM_XGS3_SWITCH_SUPPORT 24 25 /* PBSMH field macros */ 26 27 #if defined(LE_HOST) 28 /* packet is in BE format */ 29 #define SOC_PBSMH_SWAP32(val) \ 30 ((uint32)( \ 31 (((uint32)(val) & (uint32)0x000000ffUL) << 24) | \ 32 (((uint32)(val) & (uint32)0x0000ff00UL) << 8) | \ 33 (((uint32)(val) & (uint32)0x00ff0000UL) >> 8) | \ 34 (((uint32)(val) & (uint32)0xff000000UL) >> 24) )) 35 36 #else /* !LE_HOST */ 37 38 #define SOC_PBSMH_SWAP32(val) val 39 40 #endif 41 42 /* SOC_PBSMH_GET_BIT_POS - converts HW regsfile bitoffset to SW 43 * assumption is that header is 4 word length - 128 bits ) 44 */ 45 #define SOC_PBSMH_GET_BIT_POS(pos) (3-((pos)/32))*32+((pos)%32) 46 47 #define SOC_PBSMH_GET_WORD(array,word) SOC_PBSMH_SWAP32((array)[word]) 48 #define SOC_PBSMH_SET_WORD(val,array,word) (array)[word]=SOC_PBSMH_SWAP32(val) 49 50 #define SOC_PBSMH_GET_MASK(size) ((1<<(size))-1) 51 #define SOC_PBSMH_SET_VALUE(val,array,word,pos,len)\ 52 val = SOC_PBSMH_GET_WORD (array,word);\ 53 val = (val) >> (pos);\ 54 val = (val) & SOC_PBSMH_GET_MASK ((len)) 55 56 #define SOC_PBSMH_SET_VALUE_IN(val,array,word,pos,len){\ 57 uint32 tmp;\ 58 tmp = SOC_PBSMH_GET_WORD (array,word);\ 59 tmp = (tmp) & ~(SOC_PBSMH_GET_MASK (len)<<pos);\ 60 tmp |= (((val) & SOC_PBSMH_GET_MASK (len))<<pos);\ 61 SOC_PBSMH_SET_WORD(tmp,array,word);\ 62 } 63 64 65 66 static char *soc_pbsmh_field_names[] = { 67 /* NOTE: strings must match soc_pbsmh_field_t */ 68 "start", 69 "src_mod", 70 "dst_port", 71 "cos", 72 "pri", 73 "l3pbm_sel", 74 "l2pbm_sel", 75 "unicast", 76 "tx_ts", 77 "spid_override", 78 "spid", 79 "spap", 80 "queue_num", 81 "osts", 82 "its_sign", 83 "hdr_offset", 84 "regen_udp_checksum", 85 "int_pri", 86 "nlf_port", 87 "lm_ctr_index", 88 "oam_replacement_type", 89 "oam_replacement_offset", 90 "ep_cpu_reasons", 91 "header_type", 92 "cell_error", 93 "ipcf_ptr", 94 "oam_ma_ptr", 95 "ts_action", 96 "sample_rdi", 97 "ctr1_action", 98 "lm_ctr1_index", 99 "ctr2_action", 100 "lm_ctr2_index", 101 "pp_port", 102 "amp_ts_act", 103 NULL 104 }; 105 106 /* The following array entries must have the same offset like soc_pbsmh_field_t */ 107 static soc_pbsmh_field_attr_t soc_pbsmh_v10_field_attr [ PBSMH_COUNT ] = { 108 /* PBSMH_start */{ SOC_PBSMH_GET_BIT_POS(126), 2 }, 109 /* PBSMH_src_mod, */{ SOC_PBSMH_GET_BIT_POS(32), 8 }, 110 /* PBSMH_dst_port, */{ SOC_PBSMH_GET_BIT_POS(66), 7 }, 111 /* PBSMH_cos, */{ SOC_PBSMH_GET_BIT_POS(58), 4 }, 112 /* PBSMH_pri, */{ SOC_PBSMH_GET_BIT_POS(62), 4 }, 113 /* PBSMH_l3pbm_sel, */{ SOC_PBSMH_GET_BIT_POS(82), 1 }, 114 /* PBSMH_l2pbm_sel, */{ SOC_PBSMH_GET_BIT_POS(73), 1 }, 115 /* PBSMH_unicast, */{ SOC_PBSMH_GET_BIT_POS(52), 1 }, 116 /* PBSMH_tx_ts, */{ SOC_PBSMH_GET_BIT_POS(83), 1 }, 117 /* PBSMH_spid_override, */{ SOC_PBSMH_GET_BIT_POS(57), 1 }, 118 /* PBSMH_spid, */{ SOC_PBSMH_GET_BIT_POS(55), 2 }, 119 /* PBSMH_spap, */{ SOC_PBSMH_GET_BIT_POS(52), 2 }, 120 /* PBSMH_queue_num, */{ SOC_PBSMH_GET_BIT_POS(40), 12 }, 121 /* PBSMH_osts, */{ SOC_PBSMH_GET_BIT_POS(86), 1 }, 122 /* PBSMH_its_sign, */{ SOC_PBSMH_GET_BIT_POS(84), 1 }, 123 /* PBSMH_hdr_offset, */{ SOC_PBSMH_GET_BIT_POS(74), 8 }, 124 /* PBSMH_regen_udp_checksum, */{ SOC_PBSMH_GET_BIT_POS(85), 1 }, 125 /* PBSMH_int_pri, */{ SOC_PBSMH_GET_BIT_POS(58), 4 }, 126 /* PBSMH_nlf_port, NOT USED */{ SOC_PBSMH_GET_BIT_POS(0), 0 }, 127 /* PBSMH_lm_ctr_index, */{ SOC_PBSMH_GET_BIT_POS(81), 15 }, 128 /* PBSMH_oam_replacement_type, NOT USED */{ SOC_PBSMH_GET_BIT_POS(0), 0 }, 129 /* PBSMH_oam_replacement_offset, */{ SOC_PBSMH_GET_BIT_POS(57), 6 }, 130 /* PBSMH_ep_cpu_reasons,NOT USED */{ SOC_PBSMH_GET_BIT_POS(0), 0 }, 131 /* PBSMH_header_type, */{ SOC_PBSMH_GET_BIT_POS(120), 6 }, 132 /* PBSMH_cell_error, */{ SOC_PBSMH_GET_BIT_POS(119), 1 }, 133 /* PBSMH_ipcf_ptr, NOT USED */{ SOC_PBSMH_GET_BIT_POS(24), 0 }, 134 /* PBSMH_oam_ma_ptr,NOT USED */{ SOC_PBSMH_GET_BIT_POS(0), 0 }, 135 /* PBSMH_ts_action, */{ SOC_PBSMH_GET_BIT_POS(99), 2 }, 136 /* PBSMH_sample_rdi, NOT USED */{ SOC_PBSMH_GET_BIT_POS(0), 0 }, 137 /* PBSMH_ctr1_action, */{ SOC_PBSMH_GET_BIT_POS(78), 2 }, 138 /* PBSMH_lm_ctr1_index, */{ SOC_PBSMH_GET_BIT_POS(63), 15 }, 139 /* PBSMH_ctr2_action, */{ SOC_PBSMH_GET_BIT_POS(96), 2 }, 140 /* PBSMH_lm_ctr2_index, */{ SOC_PBSMH_GET_BIT_POS(81), 15 }, 141 /* PBSMH_pp_port, NOT USED */{ SOC_PBSMH_GET_BIT_POS(0), 0 }, 142 }; 143 144 /* The following array entries must have the same offset like soc_pbsmh_field_t */ 145 /* Used for Chips: Apache */ 146 static soc_pbsmh_field_attr_t soc_pbsmh_v10_ap_field_attr [ PBSMH_COUNT ] = { 147 /* PBSMH_start */{ SOC_PBSMH_GET_BIT_POS(126), 2 }, 148 /* PBSMH_src_mod, */{ SOC_PBSMH_GET_BIT_POS(32), 8 }, 149 /* PBSMH_dst_port, */{ SOC_PBSMH_GET_BIT_POS(68), 7 }, 150 /* PBSMH_cos, */{ SOC_PBSMH_GET_BIT_POS(60), 4 }, 151 /* PBSMH_pri, */{ SOC_PBSMH_GET_BIT_POS(64), 4 }, 152 /* PBSMH_l3pbm_sel, */{ SOC_PBSMH_GET_BIT_POS(84), 1 }, 153 /* PBSMH_l2pbm_sel, */{ SOC_PBSMH_GET_BIT_POS(75), 1 }, 154 /* PBSMH_unicast, */{ SOC_PBSMH_GET_BIT_POS(54), 1 }, 155 /* PBSMH_tx_ts, */{ SOC_PBSMH_GET_BIT_POS(85), 1 }, 156 /* PBSMH_spid_override, */{ SOC_PBSMH_GET_BIT_POS(59), 1 }, 157 /* PBSMH_spid, */{ SOC_PBSMH_GET_BIT_POS(57), 2 }, 158 /* PBSMH_spap, */{ SOC_PBSMH_GET_BIT_POS(55), 2 }, 159 /* PBSMH_queue_num, */{ SOC_PBSMH_GET_BIT_POS(40), 14 }, 160 /* PBSMH_osts, */{ SOC_PBSMH_GET_BIT_POS(88), 1 }, 161 /* PBSMH_its_sign, */{ SOC_PBSMH_GET_BIT_POS(86), 1 }, 162 /* PBSMH_hdr_offset, */{ SOC_PBSMH_GET_BIT_POS(76), 8 }, 163 /* PBSMH_regen_udp_checksum, */{ SOC_PBSMH_GET_BIT_POS(87), 1 }, 164 /* PBSMH_int_pri, */{ SOC_PBSMH_GET_BIT_POS(60), 4 }, 165 /* PBSMH_nlf_port, NOT USED */{ SOC_PBSMH_GET_BIT_POS(0), 0 }, 166 /* PBSMH_lm_ctr_index, NOT USED */{ SOC_PBSMH_GET_BIT_POS(81), 15 }, 167 /* PBSMH_oam_replacement_type, NOT USED */{ SOC_PBSMH_GET_BIT_POS(0), 0 }, 168 /* PBSMH_oam_replacement_offset, */{ SOC_PBSMH_GET_BIT_POS(57), 6 }, 169 /* PBSMH_ep_cpu_reasons,NOT USED */{ SOC_PBSMH_GET_BIT_POS(0), 0 }, 170 /* PBSMH_header_type, */{ SOC_PBSMH_GET_BIT_POS(120), 6 }, 171 /* PBSMH_cell_error, */{ SOC_PBSMH_GET_BIT_POS(119), 1 }, 172 /* PBSMH_ipcf_ptr, NOT USED */{ SOC_PBSMH_GET_BIT_POS(24), 0 }, 173 /* PBSMH_oam_ma_ptr,NOT USED */{ SOC_PBSMH_GET_BIT_POS(0), 0 }, 174 /* PBSMH_ts_action, */{ SOC_PBSMH_GET_BIT_POS(99), 2 }, 175 /* PBSMH_sample_rdi, NOT USED */{ SOC_PBSMH_GET_BIT_POS(0), 0 }, 176 /* PBSMH_ctr1_action, */{ SOC_PBSMH_GET_BIT_POS(78), 2 }, 177 /* PBSMH_lm_ctr1_index, */{ SOC_PBSMH_GET_BIT_POS(63), 15 }, 178 /* PBSMH_ctr2_action, */{ SOC_PBSMH_GET_BIT_POS(96), 2 }, 179 /* PBSMH_lm_ctr2_index, */{ SOC_PBSMH_GET_BIT_POS(81), 15 }, 180 /* PBSMH_pp_port, NOT USED */{ SOC_PBSMH_GET_BIT_POS(0), 0 }, 181 182 }; 183 184 185 soc_pbsmh_field_t 186 soc_pbsmh_name_to_field(int unit, char *name) 187 { 188 soc_pbsmh_field_t f; 189 190 assert(COUNTOF(soc_pbsmh_field_names) - 1 == PBSMH_COUNT); 191 192 COMPILER_REFERENCE(unit); 193 194 for (f = 0; soc_pbsmh_field_names[f] != NULL; f++) { 195 if (sal_strcmp(name, soc_pbsmh_field_names[f]) == 0) { 196 return f; 197 } 198 } 199 200 return PBSMH_invalid; 201 } 202 203 char * 204 soc_pbsmh_field_to_name(int unit, soc_pbsmh_field_t field) 205 { 206 COMPILER_REFERENCE(unit); 207 208 assert(COUNTOF(soc_pbsmh_field_names) - 1 == PBSMH_COUNT); 209 210 if (field < 0 || field >= PBSMH_COUNT) { 211 return "??"; 212 } else { 213 return soc_pbsmh_field_names[field]; 214 } 215 } 216 217 STATIC uint32 218 soc_pbsmh_array_get(uint32 *array,int off,int len) 219 { 220 int word = off / 32; 221 int pos = off % 32; 222 uint32 val; 223 uint32 valhi; 224 uint32 wordhi, poshi, lenhi; 225 uint32 lenlo; 226 227 if ((pos + len) > 32) { 228 /* two words */ 229 wordhi = word + 1; 230 poshi = 0; 231 lenhi = len - (32 - pos); 232 lenlo = len - lenhi; 233 234 SOC_PBSMH_SET_VALUE(valhi, array, wordhi, poshi, lenhi); 235 SOC_PBSMH_SET_VALUE(val, array, word, pos, lenlo); 236 237 val = (valhi << lenlo) | val; 238 } else { 239 SOC_PBSMH_SET_VALUE(val, array, word, pos, len); 240 } 241 242 return val; 243 } 244 245 STATIC void 246 soc_pbsmh_array_set(uint32 value, uint32 *array,int off,int len) 247 { 248 int word = off / 32; 249 int pos = off % 32; 250 uint32 valhi; 251 uint32 wordhi, poshi, lenhi; 252 uint32 lenlo; 253 254 if ((pos + len) > 32) { 255 /* two words */ 256 wordhi = word + 1; 257 poshi = 0; 258 lenhi = len - (32 - pos); 259 lenlo = len - lenhi; 260 261 valhi = value >> lenlo; 262 263 SOC_PBSMH_SET_VALUE_IN(valhi, array, wordhi, poshi, lenhi); 264 SOC_PBSMH_SET_VALUE_IN(value, array, word, pos, lenlo); 265 } else { 266 SOC_PBSMH_SET_VALUE_IN(value, array, word, pos, len); 267 } 268 } 269 270 271 272 273 274 STATIC void 275 soc_pbsmh_v1_field_set(int unit, soc_pbsmh_hdr_t *mh, 276 soc_pbsmh_field_t field, uint32 val) 277 { 278 COMPILER_REFERENCE(unit); 279 280 switch (field) { 281 case PBSMH_start: mh->start = val; 282 mh->_rsvd0 = 0; 283 mh->_rsvd1 = 0; 284 mh->_rsvd2 = 0; 285 break; 286 case PBSMH_src_mod: mh->src_mod = val; break; 287 case PBSMH_dst_port:mh->dst_port = val;break; 288 case PBSMH_cos: mh->cos = val;break; 289 default: 290 LOG_WARN(BSL_LS_SOC_COMMON, 291 (BSL_META_U(unit, 292 "pbsmh_set: unit %d: Unknown pbsmh field=%s val=0x%x\n"), 293 unit, soc_pbsmh_field_to_name(unit, field), val)); 294 break; 295 } 296 } 297 298 STATIC uint32 299 soc_pbsmh_v1_field_get(int unit, soc_pbsmh_hdr_t *mh, soc_pbsmh_field_t field) 300 { 301 COMPILER_REFERENCE(unit); 302 303 switch (field) { 304 case PBSMH_start: return mh->start; 305 case PBSMH_src_mod: return mh->src_mod; 306 case PBSMH_dst_port: return mh->dst_port; 307 case PBSMH_cos: return mh->cos; 308 default: 309 LOG_WARN(BSL_LS_SOC_COMMON, 310 (BSL_META_U(unit, 311 "pbsmh_get: unit %d: Unknown pbsmh field=%d\n"), 312 unit, field)); 313 return 0; 314 } 315 } 316 317 STATIC void 318 soc_pbsmh_v2_field_set(int unit, soc_pbsmh_v2_hdr_t *mh, 319 soc_pbsmh_field_t field, uint32 val) 320 { 321 COMPILER_REFERENCE(unit); 322 323 switch (field) { 324 case PBSMH_start: mh->start = val; 325 mh->_rsvd0 = 0; 326 mh->_rsvd1 = 0; 327 mh->_rsvd2 = 0; 328 break; 329 case PBSMH_src_mod: mh->src_mod = val; break; 330 case PBSMH_dst_port: mh->dst_port = val; break; 331 case PBSMH_cos: mh->cos = val; break; 332 case PBSMH_pri: mh->pri = val; break; 333 case PBSMH_l3pbm_sel: mh->l3pbm_sel = val; break; 334 default: 335 LOG_WARN(BSL_LS_SOC_COMMON, 336 (BSL_META_U(unit, 337 "pbsmh_set: unit %d: Unknown pbsmh field=%d val=0x%x\n"), 338 unit, field, val)); 339 break; 340 } 341 } 342 343 STATIC uint32 344 soc_pbsmh_v2_field_get(int unit, 345 soc_pbsmh_v2_hdr_t *mh, 346 soc_pbsmh_field_t field) 347 { 348 COMPILER_REFERENCE(unit); 349 350 switch (field) { 351 case PBSMH_start: return mh->start; 352 case PBSMH_src_mod: return mh->src_mod; 353 case PBSMH_dst_port: return mh->dst_port; 354 case PBSMH_cos: return mh->cos; 355 case PBSMH_pri: return mh->pri; 356 case PBSMH_l3pbm_sel: return mh->l3pbm_sel; 357 default: 358 LOG_WARN(BSL_LS_SOC_COMMON, 359 (BSL_META_U(unit, 360 "pbsmh_get: unit %d: Unknown pbsmh field=%d\n"), 361 unit, field)); 362 return 0; 363 } 364 } 365 366 STATIC void 367 soc_pbsmh_v3_field_set(int unit, soc_pbsmh_v3_hdr_t *mh, 368 soc_pbsmh_field_t field, uint32 val) 369 { 370 COMPILER_REFERENCE(unit); 371 372 switch (field) { 373 case PBSMH_start: mh->start = val; 374 mh->_rsvd0 = 0; 375 mh->_rsvd1 = 0; 376 mh->_rsvd2 = 0; 377 break; 378 case PBSMH_src_mod: mh->src_mod_hi = (val >> 4); 379 mh->src_mod_lo = (val & 0xf); 380 break; 381 case PBSMH_dst_port: mh->dst_port = val; break; 382 case PBSMH_cos: mh->cos = val; break; 383 case PBSMH_pri: mh->pri = val; break; 384 case PBSMH_l3pbm_sel: mh->l3pbm_sel = val; break; 385 default: 386 LOG_WARN(BSL_LS_SOC_COMMON, 387 (BSL_META_U(unit, 388 "pbsmh_set: unit %d: Unknown pbsmh field=%d val=0x%x\n"), 389 unit, field, val)); 390 break; 391 } 392 } 393 394 STATIC uint32 395 soc_pbsmh_v3_field_get(int unit, 396 soc_pbsmh_v3_hdr_t *mh, 397 soc_pbsmh_field_t field) 398 { 399 COMPILER_REFERENCE(unit); 400 401 switch (field) { 402 case PBSMH_start: return mh->start; 403 case PBSMH_src_mod: return ((mh->src_mod_hi << 4) | (mh->src_mod_lo)); 404 case PBSMH_dst_port: return mh->dst_port; 405 case PBSMH_cos: return mh->cos; 406 case PBSMH_pri: return mh->pri; 407 case PBSMH_l3pbm_sel: return mh->l3pbm_sel; 408 default: 409 LOG_WARN(BSL_LS_SOC_COMMON, 410 (BSL_META_U(unit, 411 "pbsmh_get: unit %d: Unknown pbsmh field=%d\n"), 412 unit, field)); 413 return 0; 414 } 415 } 416 417 STATIC void 418 soc_pbsmh_v4_field_set(int unit, soc_pbsmh_v4_hdr_t *mh, 419 soc_pbsmh_field_t field, uint32 val) 420 { 421 COMPILER_REFERENCE(unit); 422 423 switch (field) { 424 case PBSMH_start: mh->start = val; 425 mh->_rsvd0 = 0; 426 mh->_rsvd1 = 0; 427 mh->_rsvd2 = 0; 428 break; 429 case PBSMH_src_mod: mh->src_mod_hi = (val >> 7); 430 mh->src_mod_lo = (val & 0x7f); 431 break; 432 case PBSMH_dst_port: mh->dst_port = val; break; 433 case PBSMH_cos: mh->cos = val; break; 434 case PBSMH_pri: mh->pri_hi = (val >> 3); 435 mh->pri_lo = (val & 0x7); 436 break; 437 case PBSMH_l3pbm_sel: mh->l3pbm_sel = val; break; 438 default: 439 LOG_WARN(BSL_LS_SOC_COMMON, 440 (BSL_META_U(unit, 441 "pbsmh_set: unit %d: Unknown pbsmh field=%d val=0x%x\n"), 442 unit, field, val)); 443 break; 444 } 445 } 446 447 STATIC uint32 448 soc_pbsmh_v4_field_get(int unit, 449 soc_pbsmh_v4_hdr_t *mh, 450 soc_pbsmh_field_t field) 451 { 452 COMPILER_REFERENCE(unit); 453 454 switch (field) { 455 case PBSMH_start: return mh->start; 456 case PBSMH_src_mod: return ((mh->src_mod_hi << 7) | (mh->src_mod_lo)); 457 case PBSMH_dst_port: return mh->dst_port; 458 case PBSMH_cos: return mh->cos; 459 case PBSMH_pri: return ((mh->pri_hi << 3) | (mh->pri_lo)); 460 case PBSMH_l3pbm_sel: return mh->l3pbm_sel; 461 default: 462 LOG_WARN(BSL_LS_SOC_COMMON, 463 (BSL_META_U(unit, 464 "pbsmh_get: unit %d: Unknown pbsmh field=%d\n"), 465 unit, field)); 466 return 0; 467 } 468 } 469 470 STATIC void 471 soc_pbsmh_v5_field_set(int unit, soc_pbsmh_v5_hdr_t *mh, 472 soc_pbsmh_field_t field, uint32 val) 473 { 474 COMPILER_REFERENCE(unit); 475 476 switch (field) { 477 case PBSMH_start: mh->start = val; 478 mh->_rsvd0 = 0; 479 mh->_rsvd1 = 0; 480 mh->_rsvd2 = 0; 481 mh->_rsvd3 = 0; 482 mh->_rsvd4 = 0; 483 mh->_rsvd5 = 0; 484 mh->_rsvd6 = 0; 485 mh->_rsvd7 = 0; 486 break; 487 case PBSMH_src_mod: mh->src_mod = val; break; 488 case PBSMH_dst_port: mh->dst_port = val; break; 489 case PBSMH_cos: mh->cos = val; break; 490 case PBSMH_pri: mh->input_pri = val; break; 491 case PBSMH_l3pbm_sel: mh->set_l3bm = val; break; 492 case PBSMH_l2pbm_sel: mh->set_l2bm = val; break; 493 case PBSMH_unicast: mh->unicast = val; break; 494 case PBSMH_tx_ts: mh->tx_ts = val; break; 495 case PBSMH_spid_override: mh->spid_override = val; break; 496 case PBSMH_spid: mh->spid = val; break; 497 case PBSMH_spap: mh->spap = val; break; 498 case PBSMH_queue_num: mh->queue_num = val; break; 499 default: 500 LOG_WARN(BSL_LS_SOC_COMMON, 501 (BSL_META_U(unit, 502 "pbsmh_set: unit %d: Unknown pbsmh field=%d val=0x%x\n"), 503 unit, field, val)); 504 break; 505 } 506 } 507 508 STATIC uint32 509 soc_pbsmh_v5_field_get(int unit, 510 soc_pbsmh_v5_hdr_t *mh, 511 soc_pbsmh_field_t field) 512 { 513 COMPILER_REFERENCE(unit); 514 515 switch (field) { 516 case PBSMH_start: return mh->start; 517 case PBSMH_src_mod: return mh->src_mod; 518 case PBSMH_dst_port: return mh->dst_port; 519 case PBSMH_cos: return mh->cos; 520 case PBSMH_pri: return mh->input_pri; 521 case PBSMH_l3pbm_sel: return mh->set_l3bm; 522 case PBSMH_l2pbm_sel: return mh->set_l2bm; 523 case PBSMH_unicast: return mh->unicast; 524 case PBSMH_tx_ts: return mh->tx_ts; 525 case PBSMH_spid_override: return mh->spid_override; 526 case PBSMH_spid: return mh->spid; 527 case PBSMH_spap: return mh->spap; 528 case PBSMH_queue_num: return mh->queue_num; 529 default: 530 LOG_WARN(BSL_LS_SOC_COMMON, 531 (BSL_META_U(unit, 532 "pbsmh_get: unit %d: Unknown pbsmh field=%d\n"), 533 unit, field)); 534 return 0; 535 } 536 } 537 538 539 STATIC void 540 soc_pbsmh_v6_field_set(int unit, soc_pbsmh_v6_hdr_t *mh, 541 soc_pbsmh_field_t field, uint32 val) 542 { 543 COMPILER_REFERENCE(unit); 544 545 switch (field) { 546 case PBSMH_start: mh->start = val; 547 mh->_rsvd0 = 0; 548 mh->_rsvd1 = 0; 549 mh->_rsvd2 = 0; 550 mh->_rsvd3 = 0; 551 mh->_rsvd4 = 0; 552 mh->_rsvd5 = 0; 553 break; 554 case PBSMH_src_mod: mh->src_mod = val; break; 555 case PBSMH_dst_port: mh->dst_port = val; break; 556 case PBSMH_cos: mh->cos = val; break; 557 case PBSMH_pri: mh->input_pri = val; break; 558 case PBSMH_l3pbm_sel: mh->set_l3bm = val; break; 559 case PBSMH_l2pbm_sel: mh->set_l2bm = val; break; 560 case PBSMH_unicast: mh->unicast = val; break; 561 case PBSMH_tx_ts: mh->tx_ts = val; break; 562 case PBSMH_spid_override: mh->spid_override = val; break; 563 case PBSMH_spid: mh->spid = val; break; 564 case PBSMH_spap: mh->spap = val; break; 565 case PBSMH_queue_num: 566 mh->queue_num_1 = val & 0x3; 567 mh->queue_num_2 = (val >> 2) & 0xff; 568 mh->queue_num_3 = (val >> 10) & 0x3; 569 break; 570 case PBSMH_osts: mh->osts = val; break; 571 case PBSMH_its_sign: mh->its_sign = val; break; 572 case PBSMH_hdr_offset: 573 mh->hdr_offset_1 = val & 0x1f; 574 mh->hdr_offset_2 = (val >> 5) & 0x7; 575 break; 576 case PBSMH_regen_udp_checksum: mh->regen_upd_chksum = val; break; 577 case PBSMH_ipcf_ptr: mh->ipcf_ptr = val; break; 578 default: 579 LOG_WARN(BSL_LS_SOC_COMMON, 580 (BSL_META_U(unit, 581 "pbsmh_set: unit %d: Unknown pbsmh field=%d val=0x%x\n"), 582 unit, field, val)); 583 break; 584 } 585 } 586 587 STATIC uint32 588 soc_pbsmh_v6_field_get(int unit, 589 soc_pbsmh_v6_hdr_t *mh, 590 soc_pbsmh_field_t field) 591 { 592 COMPILER_REFERENCE(unit); 593 594 switch (field) { 595 case PBSMH_start: return mh->start; 596 case PBSMH_src_mod: return mh->src_mod; 597 case PBSMH_dst_port: return mh->dst_port; 598 case PBSMH_cos: return mh->cos; 599 case PBSMH_pri: return mh->input_pri; 600 case PBSMH_l3pbm_sel: return mh->set_l3bm; 601 case PBSMH_l2pbm_sel: return mh->set_l2bm; 602 case PBSMH_unicast: return mh->unicast; 603 case PBSMH_tx_ts: return mh->tx_ts; 604 case PBSMH_spid_override: return mh->spid_override; 605 case PBSMH_spid: return mh->spid; 606 case PBSMH_spap: return mh->spap; 607 case PBSMH_queue_num: 608 return (mh->queue_num_1 | (mh->queue_num_2 << 2) | (mh->queue_num_3 << 10)); 609 case PBSMH_osts: return mh->osts; 610 case PBSMH_its_sign: return mh->its_sign; 611 case PBSMH_hdr_offset: 612 return (mh->hdr_offset_1 | (mh->hdr_offset_2 << 5)); 613 case PBSMH_regen_udp_checksum: return mh->regen_upd_chksum; 614 case PBSMH_ipcf_ptr: return mh->ipcf_ptr; 615 default: 616 LOG_WARN(BSL_LS_SOC_COMMON, 617 (BSL_META_U(unit, 618 "pbsmh_get: unit %d: Unknown pbsmh field=%d\n"), 619 unit, field)); 620 return 0; 621 } 622 } 623 624 STATIC void 625 soc_pbsmh_v7_field_set(int unit, soc_pbsmh_v7_hdr_t *mh, 626 soc_pbsmh_field_t field, uint32 val) 627 { 628 COMPILER_REFERENCE(unit); 629 630 switch (field) { 631 case PBSMH_start: mh->overlay1.start = val; 632 mh->overlay1.header_type = PBS_MH_V7_HDR_TYPE_FROM_CPU; 633 mh->overlay1.cell_error = 0; 634 mh->overlay1.oam_replacement_offset = 0; 635 mh->overlay1.oam_replacement_type = 0; 636 mh->overlay2._rsvd3 = 0; 637 break; 638 case PBSMH_src_mod: mh->overlay1.src_mod = val; break; 639 case PBSMH_dst_port: mh->overlay1.dst_port = val; break; 640 case PBSMH_cos: mh->overlay2.cos = val; break; 641 case PBSMH_pri: mh->overlay1.input_pri = val; break; 642 case PBSMH_l3pbm_sel: mh->overlay1.set_l3bm = val; break; 643 case PBSMH_l2pbm_sel: mh->overlay1.set_l2bm = val; break; 644 case PBSMH_unicast: mh->overlay2.unicast = val; break; 645 case PBSMH_tx_ts: mh->overlay1.tx_ts = val; break; 646 case PBSMH_spid_override: mh->overlay2.spid_override = val; break; 647 case PBSMH_spid: mh->overlay2.spid = val; break; 648 case PBSMH_spap: mh->overlay2.spap = val; break; 649 case PBSMH_queue_num: 650 mh->overlay1.queue_num_1 = val & 0xff; 651 mh->overlay1.queue_num_2 = (val >> 8) & 0x3; 652 if (SOC_DCB_TYPE(unit) == 26) { 653 mh->overlay1.queue_num_3 = (val >> 10) & 0x3; 654 } 655 break; 656 case PBSMH_osts: mh->overlay1.osts = val; break; 657 case PBSMH_its_sign: mh->overlay1.its_sign = val; break; 658 case PBSMH_hdr_offset: mh->overlay1.hdr_offset = val; break; 659 case PBSMH_regen_udp_checksum: mh->overlay1.regen_udp_checksum = val; break; 660 case PBSMH_int_pri: mh->overlay1.int_pri = val; break; 661 case PBSMH_nlf_port: mh->overlay1.nlf_port = val; break; 662 case PBSMH_lm_ctr_index: 663 mh->overlay2.lm_counter_index_1 = val & 0xff; 664 mh->overlay2.lm_counter_index_2 = (val >> 8) & 0xff; 665 mh->overlay2._rsvd3 = 0; 666 break; 667 case PBSMH_oam_replacement_type: 668 mh->overlay1.oam_replacement_type = val; 669 break; 670 case PBSMH_oam_replacement_offset: 671 mh->overlay1.oam_replacement_offset = val; 672 break; 673 case PBSMH_ep_cpu_reasons: 674 mh->overlay1._rsvd5 = 0; 675 mh->overlay1.ep_cpu_reason_code_1 = val & 0xff; 676 mh->overlay1.ep_cpu_reason_code_2 = (val >> 8) & 0xff; 677 mh->overlay1.ep_cpu_reason_code_3 = (val >> 16) & 0xf; 678 break; 679 case PBSMH_header_type: mh->overlay1.header_type = val; break; 680 case PBSMH_cell_error: mh->overlay1.cell_error = val; break; 681 default: 682 LOG_WARN(BSL_LS_SOC_COMMON, 683 (BSL_META_U(unit, 684 "pbsmh_set: unit %d: Unknown pbsmh field=%d val=0x%x\n"), 685 unit, field, val)); 686 break; 687 } 688 } 689 690 STATIC uint32 691 soc_pbsmh_v7_field_get(int unit, 692 soc_pbsmh_v7_hdr_t *mh, 693 soc_pbsmh_field_t field) 694 { 695 COMPILER_REFERENCE(unit); 696 697 switch (field) { 698 case PBSMH_start: return mh->overlay1.start; 699 case PBSMH_src_mod: return mh->overlay1.src_mod; 700 case PBSMH_dst_port: return mh->overlay1.dst_port; 701 case PBSMH_cos: return mh->overlay2.cos; 702 case PBSMH_pri: return mh->overlay1.input_pri; 703 case PBSMH_l3pbm_sel: return mh->overlay1.set_l3bm; 704 case PBSMH_l2pbm_sel: return mh->overlay1.set_l2bm; 705 case PBSMH_unicast: return mh->overlay2.unicast; 706 case PBSMH_tx_ts: return mh->overlay1.tx_ts; 707 case PBSMH_spid_override: return mh->overlay2.spid_override; 708 case PBSMH_spid: return mh->overlay2.spid; 709 case PBSMH_spap: return mh->overlay2.spap; 710 case PBSMH_queue_num: 711 if (SOC_DCB_TYPE(unit) == 26) { 712 return (mh->overlay1.queue_num_1 | 713 (mh->overlay1.queue_num_2 << 8) | 714 (mh->overlay1.queue_num_3 << 10)); 715 } else { 716 return (mh->overlay1.queue_num_1 | 717 (mh->overlay1.queue_num_2 << 8)); 718 } 719 case PBSMH_osts: return mh->overlay1.osts; 720 case PBSMH_its_sign: return mh->overlay1.its_sign; 721 case PBSMH_hdr_offset: return mh->overlay1.hdr_offset; 722 case PBSMH_regen_udp_checksum: return mh->overlay1.regen_udp_checksum; 723 case PBSMH_int_pri: return mh->overlay1.int_pri; 724 case PBSMH_nlf_port: return mh->overlay1.nlf_port; 725 case PBSMH_lm_ctr_index: 726 return (mh->overlay2.lm_counter_index_1 | 727 (mh->overlay2.lm_counter_index_2 << 8)); 728 case PBSMH_oam_replacement_type: 729 return mh->overlay1.oam_replacement_type; 730 case PBSMH_oam_replacement_offset: 731 return mh->overlay1.oam_replacement_offset; 732 case PBSMH_ep_cpu_reasons: 733 return (mh->overlay1.ep_cpu_reason_code_1 | 734 (mh->overlay1.ep_cpu_reason_code_2 << 8) | 735 (mh->overlay1.ep_cpu_reason_code_3 << 16)); 736 case PBSMH_header_type: return mh->overlay1.header_type; 737 case PBSMH_cell_error: return mh->overlay1.cell_error; 738 default: 739 LOG_WARN(BSL_LS_SOC_COMMON, 740 (BSL_META_U(unit, 741 "pbsmh_get: unit %d: Unknown pbsmh field=%d\n"), 742 unit, field)); 743 return 0; 744 } 745 } 746 747 STATIC void 748 soc_pbsmh_v8_field_set(int unit, soc_pbsmh_v8_hdr_t *mh, 749 soc_pbsmh_field_t field, uint32 val) 750 { 751 COMPILER_REFERENCE(unit); 752 753 switch (field) { 754 case PBSMH_start: mh->overlay1.start = val; 755 mh->overlay1.header_type = PBS_MH_V7_HDR_TYPE_FROM_CPU; 756 mh->overlay1.cell_error = 0; 757 mh->overlay1.oam_replacement_offset = 0; 758 mh->overlay1.oam_replacement_type = 0; 759 break; 760 case PBSMH_src_mod: mh->overlay1.src_mod = val; break; 761 case PBSMH_dst_port: mh->overlay1.dst_pp_port = val; break; 762 case PBSMH_cos: 763 mh->overlay1.cos_lsb = val & 0xf; 764 mh->overlay1.cos_msb_1 = (val >> 4) & 0x3; 765 mh->overlay1.cos_msb_2 = (val >> 6) & 0x3f; 766 break; 767 case PBSMH_pri: mh->overlay1.input_pri = val; break; 768 case PBSMH_l3pbm_sel: mh->overlay1.set_l3bm = val; break; 769 case PBSMH_l2pbm_sel: mh->overlay1.set_l2bm = val; break; 770 case PBSMH_unicast: mh->overlay1.unicast = val; break; 771 case PBSMH_tx_ts: mh->overlay1.tx_ts = val; break; 772 case PBSMH_spid_override: mh->overlay1.spid_override = val; break; 773 case PBSMH_spid: mh->overlay1.spid = val; break; 774 case PBSMH_spap: mh->overlay1.spap = val; break; 775 case PBSMH_queue_num: 776 mh->overlay1.queue_num_1 = val & 0xff; 777 #if defined (BCM_METROLITE_SUPPORT) 778 if(SOC_IS_METROLITE(unit)) { 779 mh->overlay1.queue_num_2 = (val >> 8) & 0x1; 780 } else 781 #endif 782 { 783 mh->overlay1.queue_num_2 = (val >> 8) & 0xf; 784 } 785 break; 786 case PBSMH_osts: mh->overlay1.osts = val; break; 787 case PBSMH_its_sign: mh->overlay1.its_sign = val; break; 788 case PBSMH_hdr_offset: mh->overlay1.hdr_offset = val; break; 789 case PBSMH_regen_udp_checksum: mh->overlay1.regen_udp_checksum = val; break; 790 case PBSMH_int_pri: mh->overlay4.int_pri = val; break; 791 case PBSMH_lm_ctr_index: 792 mh->overlay1.lm_counter_index_1 = val & 0x3f; 793 mh->overlay1.lm_counter_index_2 = (val >> 6) & 0x3f; 794 break; 795 case PBSMH_oam_replacement_type: 796 mh->overlay1.oam_replacement_type = val; 797 break; 798 case PBSMH_oam_replacement_offset: 799 mh->overlay1.oam_replacement_offset = val; 800 break; 801 case PBSMH_ep_cpu_reasons: 802 mh->overlay2.ep_cpu_reason_code_1 = val & 0x7f; 803 mh->overlay2.ep_cpu_reason_code_2 = (val >> 7) & 0xff; 804 mh->overlay2.ep_cpu_reason_code_3 = (val >> 15) & 0x1f; 805 break; 806 case PBSMH_header_type: mh->overlay1.header_type = val; break; 807 case PBSMH_cell_error: mh->overlay1.cell_error = val; break; 808 809 case PBSMH_oam_ma_ptr: 810 #if defined (BCM_METROLITE_SUPPORT) 811 if(SOC_IS_METROLITE(unit)) { 812 mh->overlay3.ma_ptr_2 = (val >> 7) & 0x7; 813 } else 814 #endif 815 { 816 mh->overlay3.ma_ptr_2 = (val >> 7) & 0xf; 817 } 818 mh->overlay3.ma_ptr_1 = val & 0x7f; 819 break; 820 821 case PBSMH_ts_action: 822 mh->overlay3.ts_action = val & 0x3; 823 break; 824 825 case PBSMH_sample_rdi: 826 mh->overlay3.sample_rdi = val & 0x1; 827 break; 828 829 case PBSMH_lm_ctr1_index: 830 831 #if defined (BCM_METROLITE_SUPPORT) 832 if(SOC_IS_METROLITE(unit)) { 833 mh->overlay5.ctr1_id_2 = (val >> 8) & 0x1; 834 mh->overlay5.ctr1_id_1 = val & 0xff; 835 }else 836 #endif 837 { 838 mh->overlay3.ctr1_id_2 = (val >> 8) & 0x7; 839 mh->overlay3.ctr1_id_1 = val & 0xff; 840 } 841 break; 842 843 case PBSMH_lm_ctr2_index: 844 #if defined (BCM_METROLITE_SUPPORT) 845 if(SOC_IS_METROLITE(unit)) { 846 mh->overlay5.ctr2_id_2 = (val >> 5) & 0xf; 847 mh->overlay5.ctr2_id_1 = val & 0x1f; 848 }else 849 #endif 850 { 851 mh->overlay3.ctr2_id_2 = (val >> 3) & 0xff; 852 mh->overlay3.ctr2_id_1 = val & 0x7; 853 } 854 break; 855 856 case PBSMH_ctr1_action: 857 #if defined (BCM_METROLITE_SUPPORT) 858 if(SOC_IS_METROLITE(unit)) { 859 mh->overlay5.ctr1_action = (val & 3); 860 }else 861 #endif 862 { 863 mh->overlay3.ctr1_action = (val & 3); 864 } 865 break; 866 867 case PBSMH_ctr2_action: 868 #if defined (BCM_METROLITE_SUPPORT) 869 if(SOC_IS_METROLITE(unit)) { 870 mh->overlay5.ctr2_action = (val & 3); 871 }else 872 #endif 873 { 874 mh->overlay3.ctr2_action = (val & 3); 875 } 876 break; 877 878 case PBSMH_pp_port: 879 #if defined (BCM_METROLITE_SUPPORT) 880 if(SOC_IS_METROLITE(unit)) { 881 mh->overlay5.pp_port = (val & 0x1f); 882 }else 883 #endif 884 { 885 mh->overlay3.pp_port = (val & 0xff); 886 } 887 break; 888 889 default: 890 LOG_WARN(BSL_LS_SOC_COMMON, 891 (BSL_META_U(unit, 892 "pbsmh_set: unit %d: Unknown pbsmh field=%d val=0x%x\n"), 893 unit, field, val)); 894 break; 895 } 896 } 897 898 STATIC uint32 899 soc_pbsmh_v8_field_get(int unit, 900 soc_pbsmh_v8_hdr_t *mh, 901 soc_pbsmh_field_t field) 902 { 903 COMPILER_REFERENCE(unit); 904 905 switch (field) { 906 case PBSMH_start: return mh->overlay1.start; 907 case PBSMH_src_mod: return mh->overlay1.src_mod; 908 case PBSMH_dst_port: return mh->overlay1.dst_pp_port; 909 case PBSMH_cos: 910 return (mh->overlay1.cos_lsb | 911 (mh->overlay1.cos_msb_1 << 4) | 912 (mh->overlay1.cos_msb_2 << 6)); 913 case PBSMH_pri: return mh->overlay1.input_pri; 914 case PBSMH_l3pbm_sel: return mh->overlay1.set_l3bm; 915 case PBSMH_l2pbm_sel: return mh->overlay1.set_l2bm; 916 case PBSMH_unicast: return mh->overlay1.unicast; 917 case PBSMH_tx_ts: return mh->overlay1.tx_ts; 918 case PBSMH_spid_override: return mh->overlay1.spid_override; 919 case PBSMH_spid: return mh->overlay1.spid; 920 case PBSMH_spap: return mh->overlay1.spap; 921 case PBSMH_queue_num: 922 return (mh->overlay1.queue_num_1 | 923 (mh->overlay1.queue_num_2 << 8)); 924 case PBSMH_osts: return mh->overlay1.osts; 925 case PBSMH_its_sign: return mh->overlay1.its_sign; 926 case PBSMH_hdr_offset: return mh->overlay1.hdr_offset; 927 case PBSMH_regen_udp_checksum: return mh->overlay1.regen_udp_checksum; 928 case PBSMH_int_pri: return mh->overlay4.int_pri; 929 case PBSMH_lm_ctr_index: 930 return (mh->overlay1.lm_counter_index_1 | 931 (mh->overlay1.lm_counter_index_2 << 6)); 932 case PBSMH_oam_replacement_type: 933 return mh->overlay1.oam_replacement_type; 934 case PBSMH_oam_replacement_offset: 935 return mh->overlay1.oam_replacement_offset; 936 case PBSMH_ep_cpu_reasons: 937 return (mh->overlay2.ep_cpu_reason_code_1 | 938 (mh->overlay2.ep_cpu_reason_code_2 << 7) | 939 (mh->overlay2.ep_cpu_reason_code_3 << 15)); 940 case PBSMH_header_type: return mh->overlay1.header_type; 941 case PBSMH_cell_error: return mh->overlay1.cell_error; 942 case PBSMH_oam_ma_ptr: return (mh->overlay3.ma_ptr_1 | 943 (mh->overlay3.ma_ptr_2 << 7)); 944 case PBSMH_ts_action: return (mh->overlay3.ts_action); 945 case PBSMH_sample_rdi: return (mh->overlay3.sample_rdi); 946 case PBSMH_lm_ctr1_index: 947 #if defined (BCM_METROLITE_SUPPORT) 948 if(SOC_IS_METROLITE(unit)) { 949 return (mh->overlay5.ctr1_id_1 | 950 (mh->overlay5.ctr1_id_2 << 8)); 951 }else 952 #endif 953 { 954 return (mh->overlay3.ctr1_id_1 | 955 (mh->overlay3.ctr1_id_2 << 8)); 956 } 957 case PBSMH_lm_ctr2_index: 958 #if defined (BCM_METROLITE_SUPPORT) 959 if(SOC_IS_METROLITE(unit)) { 960 return (mh->overlay5.ctr2_id_1 | 961 (mh->overlay5.ctr2_id_2 << 5)); 962 }else 963 #endif 964 { 965 return (mh->overlay3.ctr2_id_1 | 966 (mh->overlay3.ctr2_id_2 << 3)); 967 } 968 case PBSMH_ctr1_action: 969 #if defined (BCM_METROLITE_SUPPORT) 970 if(SOC_IS_METROLITE(unit)) { 971 return mh->overlay5.ctr1_action; 972 }else 973 #endif 974 { 975 return mh->overlay3.ctr1_action; 976 } 977 case PBSMH_ctr2_action: 978 #if defined (BCM_METROLITE_SUPPORT) 979 if(SOC_IS_METROLITE(unit)) { 980 return mh->overlay5.ctr2_action; 981 }else 982 #endif 983 { 984 return mh->overlay3.ctr2_action; 985 } 986 case PBSMH_pp_port: return mh->overlay3.pp_port; 987 988 default: 989 LOG_WARN(BSL_LS_SOC_COMMON, 990 (BSL_META_U(unit, 991 "pbsmh_get: unit %d: Unknown pbsmh field=%d\n"), 992 unit, field)); 993 return 0; 994 } 995 } 996 997 STATIC void 998 soc_pbsmh_v9_field_set(int unit, soc_pbsmh_v9_hdr_t *mh, 999 soc_pbsmh_field_t field, uint32 val) 1000 { 1001 1002 switch (field) { 1003 case PBSMH_start: mh->start = val; 1004 break; 1005 case PBSMH_src_mod: mh->src_mod = val; break; 1006 case PBSMH_dst_port: mh->dst_port = val; break; 1007 case PBSMH_cos: mh->cos = val; break; 1008 case PBSMH_pri: mh->input_pri = val; break; 1009 case PBSMH_l2pbm_sel: mh->set_l2bm = val; break; 1010 case PBSMH_queue_num: mh->rqe_q_num = val; break; 1011 case PBSMH_unicast: mh->unicast = val; break; 1012 case PBSMH_tx_ts: mh->tx_ts = val; break; 1013 case PBSMH_spid_override: mh->spid_override = val; break; 1014 case PBSMH_spid: mh->spid = val; break; 1015 case PBSMH_spap: mh->spap = val; break; 1016 case PBSMH_osts: mh->osts = val; break; 1017 case PBSMH_its_sign: mh->its_sign = val; break; 1018 case PBSMH_hdr_offset: mh->hdr_offset = val; break; 1019 case PBSMH_cell_error: mh->cell_error = val; break; 1020 case PBSMH_header_type: mh->header_type = val; break; 1021 case PBSMH_regen_udp_checksum: mh->regen_udp_checksum = val; break; 1022 1023 default: 1024 LOG_WARN(BSL_LS_SOC_COMMON, 1025 (BSL_META_U(unit, 1026 "pbsmh_set: unit %d: Unknown pbsmh field=%d val=0x%x\n"), 1027 unit, field, val)); 1028 break; 1029 } 1030 } 1031 1032 STATIC uint32 1033 soc_pbsmh_v9_field_get(int unit, 1034 soc_pbsmh_v9_hdr_t *mh, 1035 soc_pbsmh_field_t field) 1036 { 1037 1038 switch (field) { 1039 case PBSMH_start: return mh->start; 1040 case PBSMH_src_mod: return mh->src_mod; 1041 case PBSMH_dst_port: return mh->dst_port; 1042 case PBSMH_cos: return mh->cos; 1043 case PBSMH_pri: return mh->input_pri; 1044 case PBSMH_l2pbm_sel: return mh->set_l2bm; 1045 case PBSMH_queue_num: return mh->rqe_q_num; 1046 case PBSMH_unicast: return mh->unicast; 1047 case PBSMH_tx_ts: return mh->tx_ts; 1048 case PBSMH_spid_override: return mh->spid_override; 1049 case PBSMH_spid: return mh->spid; 1050 case PBSMH_spap: return mh->spap; 1051 case PBSMH_osts: return mh->osts; 1052 case PBSMH_its_sign: return mh->its_sign; 1053 case PBSMH_hdr_offset: return mh->hdr_offset; 1054 case PBSMH_cell_error: return mh->cell_error; 1055 case PBSMH_header_type: return mh->header_type; 1056 case PBSMH_regen_udp_checksum: return mh->regen_udp_checksum; 1057 default: 1058 LOG_WARN(BSL_LS_SOC_COMMON, 1059 (BSL_META_U(unit, 1060 "pbsmh_get: unit %d: Unknown pbsmh field=%d\n"), 1061 unit, field)); 1062 return 0; 1063 } 1064 } 1065 1066 STATIC void 1067 soc_pbsmh_v11_field_set(int unit, soc_pbsmh_v11_hdr_t *mh, 1068 soc_pbsmh_field_t field, uint32 val) 1069 { 1070 1071 switch (field) { 1072 case PBSMH_start: mh->start = val; 1073 break; 1074 case PBSMH_src_mod: 1075 mh->src_mod_1 = (val >> 7) & 0x1; 1076 mh->src_mod_7 = val & 0x3f; 1077 break; 1078 case PBSMH_dst_port: mh->dst_port = val; break; 1079 case PBSMH_cos: mh->cos = val; break; 1080 case PBSMH_pri: mh->input_pri = val; break; 1081 case PBSMH_l2pbm_sel: mh->set_l2bm = val; break; 1082 case PBSMH_unicast: mh->unicast = val; break; 1083 case PBSMH_tx_ts: mh->tx_ts = val; break; 1084 case PBSMH_spid_override: mh->spid_override = val; break; 1085 case PBSMH_spid: 1086 mh->spid_0 = (val >> 1) & 0x1; 1087 mh->spid_1 = val & 0x1; 1088 break; 1089 case PBSMH_spap: mh->spap = val; break; 1090 case PBSMH_osts: mh->osts = val; break; 1091 case PBSMH_its_sign: mh->its_sign = val; break; 1092 case PBSMH_hdr_offset: mh->hdr_offset = val; break; 1093 case PBSMH_cell_error: mh->cell_error = val; break; 1094 case PBSMH_header_type: mh->header_type = val; break; 1095 case PBSMH_regen_udp_checksum: mh->regen_udp_checksum = val; break; 1096 case PBSMH_amp_ts_act: mh->amp_ts_act = val; break; 1097 1098 default: 1099 LOG_WARN(BSL_LS_SOC_COMMON, 1100 (BSL_META_U(unit, 1101 "pbsmh_set: unit %d: Unknown pbsmh field=%d val=0x%x\n"), 1102 unit, field, val)); 1103 break; 1104 } 1105 } 1106 1107 STATIC uint32 1108 soc_pbsmh_v11_field_get(int unit, 1109 soc_pbsmh_v11_hdr_t *mh, 1110 soc_pbsmh_field_t field) 1111 { 1112 1113 switch (field) { 1114 case PBSMH_start: return mh->start; 1115 case PBSMH_src_mod: return mh->src_mod_1 << 7 | mh->src_mod_7; 1116 case PBSMH_dst_port: return mh->dst_port; 1117 case PBSMH_cos: return mh->cos; 1118 case PBSMH_pri: return mh->input_pri; 1119 case PBSMH_l2pbm_sel: return mh->set_l2bm; 1120 case PBSMH_unicast: return mh->unicast; 1121 case PBSMH_tx_ts: return mh->tx_ts; 1122 case PBSMH_spid_override: return mh->spid_override; 1123 case PBSMH_spid: return mh->spid_0 << 1 | mh->spid_1; 1124 case PBSMH_spap: return mh->spap; 1125 case PBSMH_osts: return mh->osts; 1126 case PBSMH_its_sign: return mh->its_sign; 1127 case PBSMH_hdr_offset: return mh->hdr_offset; 1128 case PBSMH_cell_error: return mh->cell_error; 1129 case PBSMH_header_type: return mh->header_type; 1130 case PBSMH_regen_udp_checksum: return mh->regen_udp_checksum; 1131 case PBSMH_amp_ts_act: return mh->amp_ts_act; 1132 default: 1133 LOG_WARN(BSL_LS_SOC_COMMON, 1134 (BSL_META_U(unit, 1135 "pbsmh_get: unit %d: Unknown pbsmh field=%d\n"), 1136 unit, field)); 1137 return 0; 1138 } 1139 } 1140 1141 STATIC uint32 1142 soc_pbsmh_common_field_get(int unit, soc_pbsmh_field_attr_t *field_attr, 1143 soc_pbsmh_v10_hdr_t *mh, 1144 soc_pbsmh_field_t field) 1145 { 1146 uint32 val = 0; 1147 1148 COMPILER_REFERENCE(unit); 1149 1150 if (field < PBSMH_COUNT) { 1151 if (field_attr [field].size) { 1152 val = soc_pbsmh_array_get(mh -> hdr, 1153 field_attr [field].off, 1154 field_attr [field].size); 1155 } 1156 } 1157 else { 1158 LOG_WARN(BSL_LS_SOC_COMMON, 1159 (BSL_META_U(unit, 1160 "pbsmh_common_field_get: unit %d: " 1161 "Unknown pbsmh field=%d\n"), 1162 unit, field)); 1163 } 1164 1165 return val; 1166 } 1167 1168 1169 STATIC void 1170 soc_pbsmh_common_field_set(int unit, soc_pbsmh_field_attr_t *field_attr, 1171 soc_pbsmh_v10_hdr_t *mh, 1172 soc_pbsmh_field_t field, uint32 val) 1173 { 1174 COMPILER_REFERENCE(unit); 1175 1176 if (field < PBSMH_COUNT) { 1177 if (field_attr [field].size) { 1178 soc_pbsmh_array_set(val, mh -> hdr, 1179 field_attr [field].off, 1180 field_attr [field].size); 1181 } else { 1182 LOG_WARN(BSL_LS_SOC_COMMON, 1183 (BSL_META_U(unit, 1184 "pbsmh_common_field_set: unit %d:" 1185 " Unknown size for pbsmh field=%d(%s)\n"), 1186 unit, field, soc_pbsmh_field_to_name(unit, field))); 1187 } 1188 } else { 1189 LOG_WARN(BSL_LS_SOC_COMMON, 1190 (BSL_META_U(unit, 1191 "pbsmh_common_field_set: unit %d:" 1192 " Unknown pbsmh field=%d\n"), 1193 unit, field)); 1194 } 1195 } 1196 1197 1198 void 1199 soc_pbsmh_field_set(int unit, soc_pbsmh_hdr_t *mh, 1200 soc_pbsmh_field_t field, uint32 val) 1201 { 1202 switch(SOC_DCB_TYPE(unit)) { 1203 case 9: 1204 case 10: 1205 case 13: 1206 soc_pbsmh_v1_field_set(unit, mh, field, val); 1207 break; 1208 case 11: 1209 case 12: 1210 case 15: 1211 case 17: 1212 case 18: 1213 { 1214 soc_pbsmh_v2_hdr_t *mhv2 = (soc_pbsmh_v2_hdr_t *)mh; 1215 soc_pbsmh_v2_field_set(unit, mhv2, field, val); 1216 break; 1217 } 1218 case 14: 1219 case 19: 1220 case 20: 1221 { 1222 soc_pbsmh_v3_hdr_t *mhv3 = (soc_pbsmh_v3_hdr_t *)mh; 1223 soc_pbsmh_v3_field_set(unit, mhv3, field, val); 1224 break; 1225 } 1226 case 16: 1227 case 22: 1228 { 1229 soc_pbsmh_v4_hdr_t *mhv4 = (soc_pbsmh_v4_hdr_t *)mh; 1230 soc_pbsmh_v4_field_set(unit, mhv4, field, val); 1231 break; 1232 } 1233 case 21: 1234 { 1235 soc_pbsmh_v5_hdr_t *mhv5 = (soc_pbsmh_v5_hdr_t *)mh; 1236 soc_pbsmh_v5_field_set(unit, mhv5, field, val); 1237 break; 1238 } 1239 case 24: 1240 { 1241 soc_pbsmh_v6_hdr_t *mhv6 = (soc_pbsmh_v6_hdr_t *)mh; 1242 soc_pbsmh_v6_field_set(unit, mhv6, field, val); 1243 break; 1244 } 1245 case 23: 1246 case 26: 1247 case 30: 1248 case 31: 1249 case 34: 1250 case 37: 1251 { 1252 soc_pbsmh_v7_hdr_t *mhv7 = (soc_pbsmh_v7_hdr_t *)mh; 1253 soc_pbsmh_v7_field_set(unit, mhv7, field, val); 1254 break; 1255 } 1256 case 29: 1257 { 1258 soc_pbsmh_v8_hdr_t *mhv8 = (soc_pbsmh_v8_hdr_t *)mh; 1259 soc_pbsmh_v8_field_set(unit, mhv8, field, val); 1260 break; 1261 } 1262 case 32: 1263 case 38: 1264 { 1265 soc_pbsmh_v9_hdr_t *mhv9 = (soc_pbsmh_v9_hdr_t *)mh; 1266 soc_pbsmh_v9_field_set(unit, mhv9, field, val); 1267 break; 1268 } 1269 case 36: 1270 { 1271 soc_pbsmh_v11_hdr_t *mhv11 = (soc_pbsmh_v11_hdr_t *)mh; 1272 soc_pbsmh_v11_field_set(unit, mhv11, field, val); 1273 break; 1274 } 1275 case 33: 1276 { 1277 soc_pbsmh_v10_hdr_t *mhv10 = (soc_pbsmh_v10_hdr_t *)mh; 1278 soc_pbsmh_common_field_set(unit, 1279 soc_pbsmh_v10_field_attr, mhv10, field, val); 1280 break; 1281 } 1282 case 35: 1283 { 1284 soc_pbsmh_v10_hdr_t *mhv10 = (soc_pbsmh_v10_hdr_t *)mh; 1285 soc_pbsmh_common_field_set(unit, 1286 soc_pbsmh_v10_ap_field_attr, mhv10, field, val); 1287 break; 1288 } 1289 default: 1290 break; 1291 } 1292 } 1293 1294 uint32 1295 soc_pbsmh_field_get(int unit, soc_pbsmh_hdr_t *mh, soc_pbsmh_field_t field) 1296 { 1297 switch(SOC_DCB_TYPE(unit)) { 1298 case 9: 1299 case 10: 1300 case 13: 1301 return soc_pbsmh_v1_field_get(unit, mh, field); 1302 break; 1303 case 11: 1304 case 12: 1305 case 15: 1306 case 17: 1307 case 18: 1308 { 1309 soc_pbsmh_v2_hdr_t *mhv2 = (soc_pbsmh_v2_hdr_t *)mh; 1310 return soc_pbsmh_v2_field_get(unit, mhv2, field); 1311 break; 1312 } 1313 case 14: 1314 case 19: 1315 case 20: 1316 { 1317 soc_pbsmh_v3_hdr_t *mhv3 = (soc_pbsmh_v3_hdr_t *)mh; 1318 return soc_pbsmh_v3_field_get(unit, mhv3, field); 1319 break; 1320 } 1321 case 16: 1322 case 22: 1323 { 1324 soc_pbsmh_v4_hdr_t *mhv4 = (soc_pbsmh_v4_hdr_t *)mh; 1325 return soc_pbsmh_v4_field_get(unit, mhv4, field); 1326 break; 1327 } 1328 case 21: 1329 { 1330 soc_pbsmh_v5_hdr_t *mhv5 = (soc_pbsmh_v5_hdr_t *)mh; 1331 return soc_pbsmh_v5_field_get(unit, mhv5, field); 1332 break; 1333 } 1334 case 24: 1335 { 1336 soc_pbsmh_v6_hdr_t *mhv6 = (soc_pbsmh_v6_hdr_t *)mh; 1337 return soc_pbsmh_v6_field_get(unit, mhv6, field); 1338 break; 1339 } 1340 case 23: 1341 case 26: 1342 case 30: 1343 case 31: 1344 case 34: 1345 case 37: 1346 { 1347 soc_pbsmh_v7_hdr_t *mhv7 = (soc_pbsmh_v7_hdr_t *)mh; 1348 return soc_pbsmh_v7_field_get(unit, mhv7, field); 1349 break; 1350 } 1351 case 29: 1352 { 1353 soc_pbsmh_v8_hdr_t *mhv8 = (soc_pbsmh_v8_hdr_t *)mh; 1354 return soc_pbsmh_v8_field_get(unit, mhv8, field); 1355 break; 1356 } 1357 case 32: 1358 case 38: 1359 { 1360 soc_pbsmh_v9_hdr_t *mhv9 = (soc_pbsmh_v9_hdr_t *)mh; 1361 return soc_pbsmh_v9_field_get(unit, mhv9, field); 1362 break; 1363 } 1364 case 36: 1365 { 1366 soc_pbsmh_v11_hdr_t *mhv11 = (soc_pbsmh_v11_hdr_t *)mh; 1367 return soc_pbsmh_v11_field_get(unit, mhv11, field); 1368 break; 1369 } 1370 case 33: 1371 { 1372 soc_pbsmh_v10_hdr_t *mhv10 = (soc_pbsmh_v10_hdr_t *)mh; 1373 return soc_pbsmh_common_field_get(unit, 1374 soc_pbsmh_v10_field_attr, mhv10, field); 1375 break; 1376 } 1377 case 35: 1378 { 1379 soc_pbsmh_v10_hdr_t *mhv10 = (soc_pbsmh_v10_hdr_t *)mh; 1380 return soc_pbsmh_common_field_get(unit, 1381 soc_pbsmh_v10_ap_field_attr, mhv10, field); 1382 break; 1383 } 1384 default: 1385 break; 1386 } 1387 return 0; 1388 } 1389 1390 void 1391 soc_pbsmh_dump(int unit, char *pfx, soc_pbsmh_hdr_t *mh) 1392 { 1393 int field; 1394 1395 switch(SOC_DCB_TYPE(unit)) { 1396 default: 1397 LOG_CLI((BSL_META_U(unit, 1398 "%s<START=0x%02x COS=%d PRI=%d L3PBM_SEL=%d " 1399 "SRC_MODID=%d DST_PORT=%d>\n"), 1400 pfx, 1401 soc_pbsmh_field_get(unit, mh, PBSMH_start), 1402 soc_pbsmh_field_get(unit, mh, PBSMH_cos), 1403 soc_pbsmh_field_get(unit, mh, PBSMH_pri), 1404 soc_pbsmh_field_get(unit, mh, PBSMH_l3pbm_sel), 1405 soc_pbsmh_field_get(unit, mh, PBSMH_src_mod), 1406 soc_pbsmh_field_get(unit, mh, PBSMH_dst_port))); 1407 break; 1408 case 21: 1409 LOG_CLI((BSL_META_U(unit, 1410 "%s0x%02x%02x%02x%02x " 1411 "<START=0x%02x>\n"), 1412 pfx, 1413 ((uint8 *)mh)[0], 1414 ((uint8 *)mh)[1], 1415 ((uint8 *)mh)[2], 1416 ((uint8 *)mh)[3], 1417 soc_pbsmh_field_get(unit, mh, PBSMH_start))); 1418 LOG_CLI((BSL_META_U(unit, 1419 "%s0x%02x%02x%02x%02x " 1420 "<TX_TX=%d SPID_OVERRIDE=%d SPID=%d SPAP=%d\n"), 1421 pfx, 1422 ((uint8 *)mh)[4], 1423 ((uint8 *)mh)[5], 1424 ((uint8 *)mh)[6], 1425 ((uint8 *)mh)[7], 1426 soc_pbsmh_field_get(unit, mh, PBSMH_tx_ts), 1427 soc_pbsmh_field_get(unit, mh, PBSMH_spid_override), 1428 soc_pbsmh_field_get(unit, mh, PBSMH_spid), 1429 soc_pbsmh_field_get(unit, mh, PBSMH_spap))); 1430 LOG_CLI((BSL_META_U(unit, 1431 "%s " 1432 "SET_L3BM=%d SET_L2BM=%d UNICAST=%d SRC_MODID=%d>\n"), 1433 pfx, 1434 soc_pbsmh_field_get(unit, mh, PBSMH_l3pbm_sel), 1435 soc_pbsmh_field_get(unit, mh, PBSMH_l2pbm_sel), 1436 soc_pbsmh_field_get(unit, mh, PBSMH_unicast), 1437 soc_pbsmh_field_get(unit, mh, PBSMH_src_mod))); 1438 LOG_CLI((BSL_META_U(unit, 1439 "%s0x%02x%02x%02x%02x " 1440 "<INPUT_PRI=%d QUEUE_NUM=%d COS=%d LOCAL_DEST_PORT=%d>\n"), 1441 pfx, 1442 ((uint8 *)mh)[8], 1443 ((uint8 *)mh)[9], 1444 ((uint8 *)mh)[10], 1445 ((uint8 *)mh)[11], 1446 soc_pbsmh_field_get(unit, mh, PBSMH_pri), 1447 soc_pbsmh_field_get(unit, mh, PBSMH_queue_num), 1448 soc_pbsmh_field_get(unit, mh, PBSMH_cos), 1449 soc_pbsmh_field_get(unit, mh, PBSMH_dst_port))); 1450 break; 1451 case 23: 1452 LOG_CLI((BSL_META_U(unit, 1453 "%s0x%02x%02x%02x%02x " 1454 "<START=0x%02x HEADER_TYPE=0x%02x\n"), 1455 pfx, 1456 ((uint8 *)mh)[0], 1457 ((uint8 *)mh)[1], 1458 ((uint8 *)mh)[2], 1459 ((uint8 *)mh)[3], 1460 soc_pbsmh_field_get(unit, mh, PBSMH_start), 1461 soc_pbsmh_field_get(unit, mh, PBSMH_header_type))); 1462 LOG_CLI((BSL_META_U(unit, 1463 "%s " 1464 "LM_COUNTER_INDEX=0x%02x EP_CPU_REASON_CODE=0x%03x>\n"), 1465 pfx, 1466 soc_pbsmh_field_get(unit, mh, PBSMH_lm_ctr_index), 1467 soc_pbsmh_field_get(unit, mh, PBSMH_ep_cpu_reasons))); 1468 LOG_CLI((BSL_META_U(unit, 1469 "%s0x%02x%02x%02x%02x " 1470 "<OAM_REPLACEMENT_OFFSET=0x%02x " 1471 "OAM_REPLACMENT_TYPE=%d\n"), 1472 pfx, 1473 ((uint8 *)mh)[4], 1474 ((uint8 *)mh)[5], 1475 ((uint8 *)mh)[6], 1476 ((uint8 *)mh)[7], 1477 soc_pbsmh_field_get(unit, mh, 1478 PBSMH_oam_replacement_offset), 1479 soc_pbsmh_field_get(unit, mh, 1480 PBSMH_oam_replacement_type))); 1481 LOG_CLI((BSL_META_U(unit, 1482 "%s " 1483 "OSTS=%d REGEN_UDP_CHECKSUM=%d ITS_SIGN=%d TX_TS=%d\n"), 1484 pfx, 1485 soc_pbsmh_field_get(unit, mh, PBSMH_osts), 1486 soc_pbsmh_field_get(unit, mh, PBSMH_regen_udp_checksum), 1487 soc_pbsmh_field_get(unit, mh, PBSMH_its_sign), 1488 soc_pbsmh_field_get(unit, mh, PBSMH_tx_ts))); 1489 LOG_CLI((BSL_META_U(unit, 1490 "%s " 1491 "SET_L3BM=%d TS_HDR_OFFSET=0x%02x " 1492 "SET_L2BM=%d\n"), 1493 pfx, 1494 soc_pbsmh_field_get(unit, mh, PBSMH_l3pbm_sel), 1495 soc_pbsmh_field_get(unit, mh, PBSMH_hdr_offset), 1496 soc_pbsmh_field_get(unit, mh, PBSMH_l2pbm_sel))); 1497 LOG_CLI((BSL_META_U(unit, 1498 "%s " 1499 "LOCAL_DEST_PORT=%d CELL_ERROR=%d>\n"), 1500 pfx, 1501 soc_pbsmh_field_get(unit, mh, PBSMH_dst_port), 1502 soc_pbsmh_field_get(unit, mh, PBSMH_cell_error))); 1503 1504 LOG_CLI((BSL_META_U(unit, 1505 "%s0x%02x%02x%02x%02x " 1506 "<INPUT_PRI=%d COS=%d SPID_OVERRIDE=%d " 1507 "SPID=%d SPAP=%d\n"), 1508 pfx, 1509 ((uint8 *)mh)[8], 1510 ((uint8 *)mh)[9], 1511 ((uint8 *)mh)[10], 1512 ((uint8 *)mh)[11], 1513 soc_pbsmh_field_get(unit, mh, PBSMH_pri), 1514 soc_pbsmh_field_get(unit, mh, PBSMH_cos), 1515 soc_pbsmh_field_get(unit, mh, PBSMH_spid_override), 1516 soc_pbsmh_field_get(unit, mh, PBSMH_spid), 1517 soc_pbsmh_field_get(unit, mh, PBSMH_spap))); 1518 LOG_CLI((BSL_META_U(unit, 1519 "%s " 1520 "UNICAST=%d QUEUE_NUM=%d SRC_MODID=%d\n"), 1521 pfx, 1522 soc_pbsmh_field_get(unit, mh, PBSMH_unicast), 1523 soc_pbsmh_field_get(unit, mh, PBSMH_queue_num), 1524 soc_pbsmh_field_get(unit, mh, PBSMH_src_mod))); 1525 LOG_CLI((BSL_META_U(unit, 1526 "%s " 1527 "NLF_PORT_NUMBER=%d>\n"), 1528 pfx, 1529 soc_pbsmh_field_get(unit, mh, PBSMH_nlf_port))); 1530 break; 1531 case 32: 1532 case 36: 1533 case 38: 1534 LOG_CLI((BSL_META_U(unit, 1535 "%s0x%02x%02x%02x%02x " 1536 "<START=0x%02x HEADER_TYPE=0x%02x>\n"), 1537 pfx, 1538 ((uint8 *)mh)[0], 1539 ((uint8 *)mh)[1], 1540 ((uint8 *)mh)[2], 1541 ((uint8 *)mh)[3], 1542 soc_pbsmh_field_get(unit, mh, PBSMH_start), 1543 soc_pbsmh_field_get(unit, mh, PBSMH_header_type))); 1544 LOG_CLI((BSL_META_U(unit, 1545 "%s0x%02x%02x%02x%02x " 1546 "<TX_TS=%d ITS_SIGN=%d REGEN_UDP_CHECKSUM=%d " 1547 "OSTS=%d\n"), 1548 pfx, 1549 ((uint8 *)mh)[4], 1550 ((uint8 *)mh)[5], 1551 ((uint8 *)mh)[6], 1552 ((uint8 *)mh)[7], 1553 soc_pbsmh_field_get(unit, mh, PBSMH_tx_ts), 1554 soc_pbsmh_field_get(unit, mh, PBSMH_its_sign), 1555 soc_pbsmh_field_get(unit, mh, PBSMH_regen_udp_checksum), 1556 soc_pbsmh_field_get(unit, mh, PBSMH_osts))); 1557 LOG_CLI((BSL_META_U(unit, 1558 "%s " 1559 "CELL_ERROR=%d TS_HDR_OFFSET=0x%2x " 1560 "LOCAL_DEST_PORT=%d>\n"), 1561 pfx, 1562 soc_pbsmh_field_get(unit, mh, PBSMH_cell_error), 1563 soc_pbsmh_field_get(unit, mh, PBSMH_hdr_offset), 1564 soc_pbsmh_field_get(unit, mh, PBSMH_dst_port))); 1565 LOG_CLI((BSL_META_U(unit, 1566 "%s0x%02x%02x%02x%02x " 1567 "<SPID_OVERRIDE=%d RQE_NUM=%d INPUT_PRI=%d SPAP=%d " 1568 "SPID=%d COS=%d\n"), 1569 pfx, 1570 ((uint8 *)mh)[8], 1571 ((uint8 *)mh)[9], 1572 ((uint8 *)mh)[10], 1573 ((uint8 *)mh)[11], 1574 soc_pbsmh_field_get(unit, mh, PBSMH_spid_override), 1575 soc_pbsmh_field_get(unit, mh, PBSMH_queue_num), 1576 soc_pbsmh_field_get(unit, mh, PBSMH_pri), 1577 soc_pbsmh_field_get(unit, mh, PBSMH_spap), 1578 soc_pbsmh_field_get(unit, mh, PBSMH_spid), 1579 soc_pbsmh_field_get(unit, mh, PBSMH_cos))); 1580 LOG_CLI((BSL_META_U(unit, 1581 "%s " 1582 "UNICAST=%d SET_L2BM=%d SRC_MODID=%d>\n"), 1583 pfx, 1584 soc_pbsmh_field_get(unit, mh, PBSMH_unicast), 1585 soc_pbsmh_field_get(unit, mh, PBSMH_l2pbm_sel), 1586 soc_pbsmh_field_get(unit, mh, PBSMH_src_mod))); 1587 break; 1588 1589 1590 case 33: 1591 case 35: 1592 for (field = 0; field < PBSMH_COUNT; ++field) { 1593 uint32 val = soc_pbsmh_field_get(unit, mh, (soc_pbsmh_field_t) field); 1594 LOG_CLI((BSL_META_U(unit, 1595 "%-25s=0x%X (%d)\n"), 1596 soc_pbsmh_field_to_name(unit, field), 1597 val, val)); 1598 } 1599 break; 1600 } 1601 } 1602 1603 1604 1605 1606 #endif /* BCM_XGS3_SWITCH_SUPPORT */