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

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