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

higig.c (38267B)


      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 Higig headers
      8  */
      9 
     10 #include <shared/bsl.h>
     11 
     12 #include <assert.h>
     13 #include <sal/core/libc.h>
     14 #include <shared/bsl.h>
     15 
     16 #include <soc/drv.h>
     17 #include <soc/types.h>
     18 #include <soc/higig.h>
     19 #include <soc/enet.h>
     20 #include <soc/cm.h>
     21 #include <soc/debug.h>
     22 
     23 #if defined(BCM_XGS_SUPPORT) || defined(BCM_PETRA_SUPPORT) || defined(BCM_DNX_SUPPORT)
     24 
     25 static char *soc_higig_field_names[] = {
     26     SOC_HIGIG_FIELD_NAMES_INIT
     27 };
     28 
     29 soc_higig_field_t
     30 soc_higig_name_to_field(int unit, char *name)
     31 {
     32     soc_higig_field_t		f;
     33 
     34     assert(COUNTOF(soc_higig_field_names) - 1 == HG_COUNT);
     35 
     36     COMPILER_REFERENCE(unit);
     37 
     38     for (f = 0; soc_higig_field_names[f] != NULL; f++) {
     39 	if (sal_strcmp(name, soc_higig_field_names[f]) == 0) {
     40 	    return f;
     41 	}
     42     }
     43 
     44     return HG_invalid;
     45 }
     46 
     47 char *
     48 soc_higig_field_to_name(int unit, soc_higig_field_t field)
     49 {
     50     COMPILER_REFERENCE(unit);
     51 
     52     assert(COUNTOF(soc_higig_field_names) == HG_COUNT);
     53 
     54     if (field < 0 || field >= HG_COUNT) {
     55 	return "??";
     56     } else {
     57 	return soc_higig_field_names[field];
     58     }
     59 }
     60 
     61 #ifdef BCM_HIGIG2_SUPPORT
     62 void
     63 soc_higig2_field_set(int unit, soc_higig2_hdr_t *hg2,
     64                       soc_higig_field_t field, uint32 val)
     65 {
     66     COMPILER_REFERENCE(unit);
     67 
     68     switch (field) {
     69         /* FRC fields are the same for all HG2 overlays */
     70     case HG_start:
     71         hg2->ppd_overlay1.start = val;
     72         break;
     73     case HG_hgi:
     74         /* Silently accept */
     75         break;
     76     case HG_mcst:
     77         hg2->ppd_overlay1.mcst = val;
     78         break;
     79     case HG_cos:
     80     case HG_tc:
     81         hg2->ppd_overlay1.tc = val;
     82         break;
     83     case HG_dst_mod:
     84         hg2->ppd_overlay1.dst_mod = val;
     85         break;
     86     case HG_dst_port:
     87         hg2->ppd_overlay1.dst_port = val;
     88         break;
     89     case HG_l2mc_ptr:
     90     case HG_mgid:
     91         hg2->ppd_overlay1.dst_mod = val >> 8;
     92         hg2->ppd_overlay1.dst_port = val & 0xff;
     93 	break;
     94     case HG_src_mod:
     95         hg2->ppd_overlay1.src_mod = val;
     96         break;
     97     case HG_src_port:
     98     case HG_tgid:
     99         hg2->ppd_overlay1.src_port = val;
    100         break;
    101     case HG_lbid:
    102         hg2->ppd_overlay1.lbid = val;
    103         break;
    104     case HG_cng:
    105     case HG_dp:
    106         hg2->ppd_overlay1.dp = val;
    107         break;
    108     case HG_ehv:
    109         hg2->ppd_overlay1.ehv = val;
    110         break;
    111     case HG_hdr_format:
    112     case HG_ppd_type:
    113         hg2->ppd_overlay1.ppd_type = val;
    114         break;
    115 
    116     /* All other elements may depend upon the PPD_TYPE, so set it first */
    117     /* PPD_TYPE = 0 */
    118     case HG_dst_t:
    119         hg2->ppd_overlay1.dst_t = val;
    120         break;
    121     case HG_ingress_tagged:
    122 	hg2->ppd_overlay1.ingress_tagged = val;
    123 	break;
    124     case HG_mirror_only:
    125 	hg2->ppd_overlay1.mirror_only = val;
    126         break;
    127     case HG_mirror_done:
    128 	hg2->ppd_overlay1.mirror_done = val;
    129         break;
    130     case HG_mirror:
    131         switch (hg2->ppd_overlay1.ppd_type) {
    132         case 0: 
    133             hg2->ppd_overlay1.mirror = val;
    134             break;
    135         case 2: 
    136             hg2->ppd_overlay3.mirror = val;
    137             break;
    138         default:
    139             break;
    140         }
    141         break;
    142      case HG_label_overlay_type:
    143         hg2->ppd_overlay1.label_overlay_type = val;
    144         break;
    145     case HG_l3:
    146         hg2->ppd_overlay1.l3 = val;
    147         break;
    148      case HG_label_present:
    149         hg2->ppd_overlay1.label_present = val;
    150         break;
    151     case HG_vc_label:
    152         hg2->ppd_overlay1.vc_label_19_16 = (val >> 16) & 0xF;
    153         hg2->ppd_overlay1.vc_label_15_8 = (val >> 8) & 0xFF;
    154         hg2->ppd_overlay1.vc_label_7_0 = (val >> 0) & 0xFF;
    155         break;
    156     case HG_replication_id:
    157         switch (hg2->ppd_overlay1.ppd_type) {
    158         case 0: 
    159             hg2->ppd_overlay1.vc_label_19_16 = (val >> 16) & 0x3;
    160             hg2->ppd_overlay1.vc_label_15_8 = (val >> 8) & 0xFF;
    161             hg2->ppd_overlay1.vc_label_7_0 = (val >> 0) & 0xFF;
    162             break;
    163         case 2: 
    164             hg2->ppd_overlay3.opcode = (val >> 16) & 0x3;
    165             hg2->ppd_overlay3.dst_vp_high = (val >> 8) & 0xFF;
    166             hg2->ppd_overlay3.dst_vp_low = (val >> 0) & 0xFF;
    167             break;
    168         default:
    169             break;
    170         }
    171         break;
    172     case HG_vlan_tag: /* Same posistion in PPD 0 & 1 */
    173         hg2->ppd_overlay1.vlan_pri = (val >> 13) & 7;
    174         hg2->ppd_overlay1.vlan_cfi = (val >> 12) & 1;
    175         hg2->ppd_overlay1.vlan_id_hi = (val >> 8) & 0xf;
    176         hg2->ppd_overlay1.vlan_id_lo = val & 0xff;
    177 	break;
    178     case HG_vlan_pri: /* Same posistion in PPD 0 & 1 */
    179         hg2->ppd_overlay1.vlan_pri = val;
    180         break;
    181     case HG_vlan_cfi: /* Same posistion in PPD 0 & 1 */
    182         hg2->ppd_overlay1.vlan_cfi = val;
    183         break;
    184     case HG_vlan_id: /* Same posistion in PPD 0 & 1 */
    185         hg2->ppd_overlay1.vlan_id_hi = val >> 8;
    186         hg2->ppd_overlay1.vlan_id_lo = val & 0xff;
    187 	break;
    188     case HG_pfm: /* Same posistion in PPD 0 & 1 */
    189         hg2->ppd_overlay1.pfm = val;
    190         break;
    191     case HG_src_t: /* Same posistion in PPD 0 & 1 */
    192         hg2->ppd_overlay1.src_t = val;
    193         break;
    194     case HG_preserve_dscp:
    195         switch (hg2->ppd_overlay1.ppd_type) {
    196         case 0: 
    197             hg2->ppd_overlay1.preserve_dscp = val;
    198             break;
    199         case 2: 
    200             hg2->ppd_overlay3.preserve_dscp = val;
    201             break;
    202         case 3: 
    203             hg2->ppd_overlay4.preserve_dscp = val;
    204             break;
    205         default:
    206             break;
    207         }
    208         break;
    209     case HG_preserve_dot1p:
    210         switch (hg2->ppd_overlay1.ppd_type) {
    211         case 0: 
    212             hg2->ppd_overlay1.preserve_dot1p = val;
    213             break;
    214         case 2: 
    215             hg2->ppd_overlay3.preserve_dot1p = val;
    216             break;
    217         case 3: 
    218             hg2->ppd_overlay4.preserve_dot1p = val;
    219             break;
    220         default:
    221             break;
    222         }
    223         break;
    224     case HG_opcode: /* Same posistion in all PPDs */
    225         hg2->ppd_overlay1.opcode = val;
    226         break;
    227     case HG_hdr_ext_len: /* Same posistion in PPD 0 & 1 */
    228         hg2->ppd_overlay1.hdr_ext_len = val;
    229         break;
    230 
    231     /* PPD_TYPE = 1 */
    232     case HG_ctag: /* Same posistion in PPD 1 & 3 (offload) */
    233         hg2->ppd_overlay2.ctag_hi = val >> 8;
    234         hg2->ppd_overlay2.ctag_lo = val & 0xff;
    235 	break;
    236 
    237     /* PPD_TYPE = 2 */
    238     case HG_multipoint:
    239         hg2->ppd_overlay3.multipoint = val;
    240         break;
    241     case HG_fwd_type:
    242         hg2->ppd_overlay3.fwd_type = val;
    243         break;
    244     case HG_vni:
    245         hg2->ppd_overlay3.vni_high = (val >> 10) & 0xF;
    246         hg2->ppd_overlay3.vni_mid = (val >> 8) & 0x3;
    247         hg2->ppd_overlay3.vni_low = val & 0xff;
    248         break;
    249     case HG_dst_vp:
    250         hg2->ppd_overlay3.dst_vp_high = (val >> 8) & 0xFF;
    251         hg2->ppd_overlay3.dst_vp_low = (val >> 0) & 0xFF;
    252         break;
    253     case HG_src_vp: /* Same posistion in PPD 2 & 3 */
    254         hg2->ppd_overlay3.src_vp_high = (val >> 8) & 0xFF;
    255         hg2->ppd_overlay3.src_vp_low = (val >> 0) & 0xFF;
    256         break;
    257     case HG_donot_modify:
    258         switch (hg2->ppd_overlay1.ppd_type) {
    259         case 0:
    260             hg2->ppd_overlay1.donot_modify = val;
    261             break;
    262         case 2:
    263             hg2->ppd_overlay3.donot_modify = val;
    264             break;
    265         default:
    266             break;
    267         }
    268         break;
    269     case HG_donot_learn:
    270         switch (hg2->ppd_overlay1.ppd_type) {
    271         case 0:
    272             hg2->ppd_overlay1.donot_learn = val;
    273             break;
    274         case 2:
    275         case 3: /* Same posistion in PPD 2 & 3 */
    276             hg2->ppd_overlay3.donot_learn = val;
    277             break;
    278         default:
    279             break;
    280         }
    281         break;
    282     case HG_lag_failover:
    283         switch (hg2->ppd_overlay1.ppd_type) {
    284         case 0:
    285             hg2->ppd_overlay1.lag_failover = val;
    286             break;
    287         case 2:
    288             hg2->ppd_overlay3.lag_failover = val;
    289             break;
    290         default:
    291             break;
    292         }
    293         break;
    294     case HG_protection_status:
    295         hg2->ppd_overlay3.protection_status = val;
    296         break;
    297     case HG_dst_type:
    298         hg2->ppd_overlay3.dest_type = val;
    299         break;
    300     case HG_src_type:
    301         switch (hg2->ppd_overlay1.ppd_type) {
    302         case 2:
    303             hg2->ppd_overlay3.source_type = val;
    304             break;
    305         case 3:
    306             hg2->ppd_overlay4.source_type = val;
    307         default:
    308             break;
    309         }
    310         break;
    311 
    312     /* PPD_TYPE = 3 */
    313     case HG_data_container_type:
    314         hg2->ppd_overlay4.data_container_type = val;
    315         break;
    316     case HG_data_container:
    317         hg2->ppd_overlay4.data_container.abstract.bytes[0] =
    318             (val >> 24) & 0xFF;
    319         hg2->ppd_overlay4.data_container.abstract.bytes[1] =
    320             (val >> 16) & 0xFF;
    321         hg2->ppd_overlay4.data_container.abstract.bytes[2] =
    322             (val >> 8) & 0xFF;
    323         hg2->ppd_overlay4.data_container.abstract.bytes[3] =
    324             val & 0xFF;
    325         break;
    326 
    327     /* PPD_TYPE = 3, offload container */
    328     case HG_deferred_drop:
    329         hg2->ppd_overlay4.data_container.offload_engine.deferred_drop = val;
    330         break;
    331     case HG_vxlt_done:
    332         hg2->ppd_overlay4.data_container.offload_engine.vxlt_done = val;
    333         break;
    334     case HG_deferred_change_pkt_pri:
    335         hg2->ppd_overlay4.data_container.offload_engine.deferred_change_pkt_pri = val;
    336         break;
    337     case HG_new_pkt_pri:
    338         hg2->ppd_overlay4.data_container.offload_engine.new_pkt_pri = val;
    339         break;
    340     case HG_deferred_change_dscp:
    341         hg2->ppd_overlay4.data_container.offload_engine.deferred_change_dscp = val;
    342         break;
    343     case HG_new_dscp:
    344         hg2->ppd_overlay4.data_container.offload_engine.new_dscp = val;
    345         break;
    346 
    347     default:
    348 	LOG_WARN(BSL_LS_SOC_COMMON,
    349                  (BSL_META_U(unit,
    350                              "hg_set: unit %d: Unknown higig2 field=%d val=0x%x\n"),
    351                   unit, field, val));
    352 	break;
    353     }
    354 }
    355 
    356 uint32
    357 soc_higig2_field_get(int unit, soc_higig2_hdr_t *hg2,
    358                       soc_higig_field_t field)
    359 {
    360     COMPILER_REFERENCE(unit);
    361 
    362     switch (field) {
    363     case HG_start:
    364         return hg2->ppd_overlay1.start;
    365     case HG_hgi:
    366         return 2;
    367     case HG_mcst:
    368         return hg2->ppd_overlay1.mcst;
    369     case HG_cos:
    370     case HG_tc:
    371         return hg2->ppd_overlay1.tc;
    372     case HG_dst_mod:
    373         return hg2->ppd_overlay1.dst_mod;
    374     case HG_dst_port:
    375         return hg2->ppd_overlay1.dst_port;
    376     case HG_l2mc_ptr:
    377     case HG_mgid:
    378         return ((hg2->ppd_overlay1.dst_mod << 8) |
    379                 (hg2->ppd_overlay1.dst_port));
    380     case HG_src_mod:
    381         return hg2->ppd_overlay1.src_mod;
    382     case HG_tgid:
    383     case HG_src_port:
    384         return hg2->ppd_overlay1.src_port;
    385     case HG_lbid:
    386         return hg2->ppd_overlay1.lbid;
    387     case HG_cng:
    388     case HG_dp:
    389         return hg2->ppd_overlay1.dp;
    390     case HG_ehv:
    391         return hg2->ppd_overlay1.ehv;
    392     case HG_hdr_format:
    393     case HG_ppd_type:
    394         return hg2->ppd_overlay1.ppd_type;
    395 
    396     /* PPD_TYPE = 0 */
    397     case HG_dst_t:
    398         return hg2->ppd_overlay1.dst_t;
    399     case HG_ingress_tagged:
    400 	return hg2->ppd_overlay1.ingress_tagged;
    401     case HG_mirror_only:
    402 	return hg2->ppd_overlay1.mirror_only;
    403     case HG_mirror_done:
    404 	return hg2->ppd_overlay1.mirror_done;
    405     case HG_mirror:
    406         switch (hg2->ppd_overlay1.ppd_type) {
    407         case 0: 
    408             return hg2->ppd_overlay1.mirror;
    409         case 2: 
    410             return hg2->ppd_overlay3.mirror;
    411         default:
    412             return 0;
    413         }
    414     case HG_label_overlay_type:
    415         return hg2->ppd_overlay1.label_overlay_type;
    416     case HG_l3:
    417         return hg2->ppd_overlay1.l3;
    418     case HG_label_present:
    419         return hg2->ppd_overlay1.label_present;
    420     case HG_vc_label:
    421         return ((hg2->ppd_overlay1.vc_label_19_16 << 16) |
    422                 (hg2->ppd_overlay1.vc_label_15_8 << 8) |
    423                 (hg2->ppd_overlay1.vc_label_7_0)); 
    424     case HG_replication_id:
    425         switch (hg2->ppd_overlay1.ppd_type) {
    426         case 0: 
    427             return (((hg2->ppd_overlay1.vc_label_19_16 & 0x3) << 16) |
    428                     (hg2->ppd_overlay1.vc_label_15_8 << 8) |
    429                     (hg2->ppd_overlay1.vc_label_7_0)); 
    430         case 2: 
    431             return (((hg2->ppd_overlay3.opcode & 0x3) << 16) |
    432                     (hg2->ppd_overlay3.dst_vp_high << 8) |
    433                     (hg2->ppd_overlay3.dst_vp_low)); 
    434         default:
    435             return 0;
    436         }
    437     case HG_vlan_tag:
    438         return ((hg2->ppd_overlay1.vlan_pri << 13) |
    439                 (hg2->ppd_overlay1.vlan_cfi << 12) |
    440                 (hg2->ppd_overlay1.vlan_id_hi << 8) |
    441                 (hg2->ppd_overlay1.vlan_id_lo));
    442     case HG_vlan_pri:
    443         return hg2->ppd_overlay1.vlan_pri;
    444     case HG_vlan_cfi:
    445         return hg2->ppd_overlay1.vlan_cfi;
    446     case HG_vlan_id:
    447         return ((hg2->ppd_overlay1.vlan_id_hi << 8) |
    448                 (hg2->ppd_overlay1.vlan_id_lo));
    449     case HG_pfm:
    450         return hg2->ppd_overlay1.pfm;
    451     case HG_src_t:
    452         return hg2->ppd_overlay1.src_t;
    453     case HG_preserve_dscp:
    454         switch (hg2->ppd_overlay1.ppd_type) {
    455         case 0: 
    456             return hg2->ppd_overlay1.preserve_dscp;
    457         case 2: 
    458             return hg2->ppd_overlay3.preserve_dscp;
    459         case 3: 
    460             return hg2->ppd_overlay4.preserve_dscp;
    461         default:
    462             return 0;
    463         }
    464     case HG_preserve_dot1p:
    465         switch (hg2->ppd_overlay1.ppd_type) {
    466         case 0: 
    467             return hg2->ppd_overlay1.preserve_dot1p;
    468         case 2: 
    469             return hg2->ppd_overlay3.preserve_dot1p;
    470         case 3: 
    471             return hg2->ppd_overlay4.preserve_dot1p;
    472         default:
    473             return 0;
    474         }
    475    case HG_opcode:
    476         return hg2->ppd_overlay1.opcode;
    477     case HG_hdr_ext_len:
    478         return hg2->ppd_overlay1.hdr_ext_len;
    479 
    480     /* PPD_TYPE = 1 */
    481     case HG_ctag:
    482         return ((hg2->ppd_overlay2.ctag_hi << 8) |
    483                 (hg2->ppd_overlay2.ctag_lo));
    484 
    485     /* PPD_TYPE = 2 */
    486     case HG_multipoint:
    487         return hg2->ppd_overlay3.multipoint;
    488     case HG_fwd_type:
    489         return hg2->ppd_overlay3.fwd_type;
    490     case HG_vni:
    491         return ((hg2->ppd_overlay3.vni_high << 10) |
    492                 (hg2->ppd_overlay3.vni_mid << 8) |
    493                 (hg2->ppd_overlay3.vni_low));
    494     case HG_dst_vp:
    495         return ((hg2->ppd_overlay3.dst_vp_high << 8) |
    496                 (hg2->ppd_overlay3.dst_vp_low));
    497     case HG_src_vp:
    498         return ((hg2->ppd_overlay3.src_vp_high << 8) |
    499                 (hg2->ppd_overlay3.src_vp_low));
    500     case HG_donot_modify:
    501         switch (hg2->ppd_overlay1.ppd_type) {
    502         case 0:
    503             return hg2->ppd_overlay1.donot_modify;
    504         case 2:
    505             return hg2->ppd_overlay3.donot_modify;
    506         default:
    507             return 0;
    508         }
    509     case HG_donot_learn:
    510         switch (hg2->ppd_overlay1.ppd_type) {
    511         case 0:
    512             return hg2->ppd_overlay1.donot_learn;
    513         case 2:
    514         case 3: /* Same posistion in PPD 2 & 3 */
    515             return hg2->ppd_overlay3.donot_learn;
    516         default:
    517             return 0;
    518         }
    519     case HG_lag_failover:
    520         switch (hg2->ppd_overlay1.ppd_type) {
    521         case 0:
    522             return hg2->ppd_overlay1.lag_failover;
    523         case 2:
    524             return hg2->ppd_overlay3.lag_failover;
    525         default:
    526             return 0;
    527         }
    528     case HG_protection_status:
    529         return hg2->ppd_overlay3.protection_status;
    530     case HG_dst_type:
    531         return hg2->ppd_overlay3.dest_type;
    532     case HG_src_type:
    533         switch (hg2->ppd_overlay1.ppd_type) {
    534         case 2:
    535             return hg2->ppd_overlay3.source_type;
    536         case 3:
    537             return hg2->ppd_overlay4.source_type;
    538         default:
    539             return 0;
    540         }
    541 
    542     /* PPD_TYPE = 3 */
    543     case HG_data_container_type:
    544         return hg2->ppd_overlay4.data_container_type;
    545     case HG_data_container:
    546         return ((hg2->ppd_overlay4.data_container.abstract.bytes[0] << 24) |
    547                 (hg2->ppd_overlay4.data_container.abstract.bytes[1] << 16) |
    548                 (hg2->ppd_overlay4.data_container.abstract.bytes[2] << 8) |
    549                 (hg2->ppd_overlay4.data_container.abstract.bytes[3]));
    550 
    551     /* PPD_TYPE = 3, offload container */
    552     case HG_deferred_drop:
    553         return hg2->ppd_overlay4.data_container.offload_engine.deferred_drop;
    554     case HG_vxlt_done:
    555         return hg2->ppd_overlay4.data_container.offload_engine.vxlt_done;
    556     case HG_deferred_change_pkt_pri:
    557         return hg2->ppd_overlay4.data_container.offload_engine.deferred_change_pkt_pri;
    558     case HG_new_pkt_pri:
    559         return hg2->ppd_overlay4.data_container.offload_engine.new_pkt_pri;
    560     case HG_deferred_change_dscp:
    561         return hg2->ppd_overlay4.data_container.offload_engine.deferred_change_dscp;
    562     case HG_new_dscp:
    563         return hg2->ppd_overlay4.data_container.offload_engine.new_dscp;
    564     default:
    565 	LOG_WARN(BSL_LS_SOC_COMMON,
    566                  (BSL_META_U(unit,
    567                              "hg_get: unit %d: Unknown higig2 field=%d\n"),
    568                   unit, field));
    569 	return 0;
    570     }
    571 }
    572 
    573 void
    574 soc_higig2_dump(int unit, char *pfx, soc_higig2_hdr_t *hg2)
    575 {
    576     LOG_CLI((BSL_META_U(unit,
    577                         "%s0x%02x%02x%02x%02x "
    578              "<START=0x%x MCST=0x%x TC=%d DST_MOD=%d DST_PORT=%d\n"),
    579              pfx,
    580              hg2->overlay0.bytes[0],
    581              hg2->overlay0.bytes[1],
    582              hg2->overlay0.bytes[2],
    583              hg2->overlay0.bytes[3],
    584              soc_higig2_field_get(unit, hg2, HG_start),
    585              soc_higig2_field_get(unit, hg2, HG_mcst),
    586              soc_higig2_field_get(unit, hg2, HG_tc),
    587              soc_higig2_field_get(unit, hg2, HG_dst_mod),
    588              soc_higig2_field_get(unit, hg2, HG_dst_port)));
    589     LOG_CLI((BSL_META_U(unit,
    590                         "%s            OVERLAY: MGID=%d>\n"),
    591              pfx,
    592              soc_higig2_field_get(unit, hg2, HG_mgid)));
    593     LOG_CLI((BSL_META_U(unit,
    594                         "%s0x%02x%02x%02x%02x "
    595              "<SRC_MOD=%d SRC_PORT=%d LBID=%d DP=%d EHV=%d PPD_TYPE=%d>\n"),
    596              pfx,
    597              hg2->overlay0.bytes[4],
    598              hg2->overlay0.bytes[5],
    599              hg2->overlay0.bytes[6],
    600              hg2->overlay0.bytes[7],
    601              soc_higig2_field_get(unit, hg2, HG_src_mod),
    602              soc_higig2_field_get(unit, hg2, HG_src_port),
    603              soc_higig2_field_get(unit, hg2, HG_lbid),
    604              soc_higig2_field_get(unit, hg2, HG_dp),
    605              soc_higig2_field_get(unit, hg2, HG_ehv),
    606              soc_higig2_field_get(unit, hg2, HG_ppd_type)));
    607     if (soc_higig2_field_get(unit, hg2, HG_ppd_type) == 0) {
    608         LOG_CLI((BSL_META_U(unit,
    609                             "%s0x%02x%02x%02x%02x "
    610                  "<DST_T=%d DONOT_MODIFY=%d DONOT_LEARN=%d\n"),
    611                  pfx,
    612                  hg2->overlay0.bytes[8],
    613                  hg2->overlay0.bytes[9],
    614                  hg2->overlay0.bytes[10],
    615                  hg2->overlay0.bytes[11],
    616                  soc_higig2_field_get(unit, hg2, HG_dst_t),
    617                  soc_higig2_field_get(unit, hg2, HG_donot_modify),
    618                  soc_higig2_field_get(unit, hg2, HG_donot_learn)));
    619         LOG_CLI((BSL_META_U(unit,
    620                             "%s             LEG_FAILOVER=%d IT=%d MO=%d MD=%d M=%d "
    621                  "L3=%d\n"),
    622                  pfx,
    623                  soc_higig2_field_get(unit, hg2, HG_lag_failover),
    624                  soc_higig2_field_get(unit, hg2, HG_ingress_tagged),
    625                  soc_higig2_field_get(unit, hg2, HG_mirror_only),
    626                  soc_higig2_field_get(unit, hg2, HG_mirror_done),
    627                  soc_higig2_field_get(unit, hg2, HG_mirror),
    628                  soc_higig2_field_get(unit, hg2, HG_l3)));
    629         LOG_CLI((BSL_META_U(unit,
    630                             "%s            LP=%d LABEL_TYPE=%d VC_LABEL=0x%05x\n"),
    631                  pfx,
    632                  soc_higig2_field_get(unit, hg2, HG_label_present),
    633                  soc_higig2_field_get(unit, hg2, HG_label_overlay_type),
    634                  soc_higig2_field_get(unit, hg2, HG_vc_label)));
    635         LOG_CLI((BSL_META_U(unit,
    636                             "%s            REPLICATION_ID=0x%x>\n"),
    637                  pfx,
    638                  soc_higig2_field_get(unit, hg2, HG_replication_id)));
    639         LOG_CLI((BSL_META_U(unit,
    640                             "%s0x%02x%02x%02x%02x "
    641                  "<VLAN_PRI=%d VLAN_CFI=%d VLAN_ID=%d\n"),
    642                  pfx,
    643                  hg2->overlay0.bytes[12],
    644                  hg2->overlay0.bytes[13],
    645                  hg2->overlay0.bytes[14],
    646                  hg2->overlay0.bytes[15],
    647                  soc_higig2_field_get(unit, hg2, HG_vlan_pri),
    648                  soc_higig2_field_get(unit, hg2, HG_vlan_cfi),
    649                  soc_higig2_field_get(unit, hg2, HG_vlan_id)));
    650         LOG_CLI((BSL_META_U(unit,
    651                             "%s            PFM=%d SRC_T=%d PRESERVE_DSCP=%d\n"),
    652                  pfx,
    653                  soc_higig2_field_get(unit, hg2, HG_pfm),
    654                  soc_higig2_field_get(unit, hg2, HG_src_t),
    655                  soc_higig2_field_get(unit, hg2, HG_preserve_dscp)));
    656         LOG_CLI((BSL_META_U(unit,
    657                             "%s            PRESERVE_DOT1P=%d OPCODE=%d HXL=%d>\n"),
    658                  pfx,
    659                  soc_higig2_field_get(unit, hg2, HG_preserve_dot1p),
    660                  soc_higig2_field_get(unit, hg2, HG_opcode),
    661                  soc_higig2_field_get(unit, hg2, HG_hdr_ext_len)));
    662     } else if (soc_higig2_field_get(unit, hg2, HG_ppd_type) == 1) {
    663         LOG_CLI((BSL_META_U(unit,
    664                             "%s0x%02x%02x%02x%02x "
    665                  "<CTAG=0x%x>\n"),
    666                  pfx,
    667                  hg2->overlay0.bytes[8],
    668                  hg2->overlay0.bytes[9],
    669                  hg2->overlay0.bytes[10],
    670                  hg2->overlay0.bytes[11],
    671                  soc_higig2_field_get(unit, hg2, HG_ctag)));
    672         LOG_CLI((BSL_META_U(unit,
    673                             "%s0x%02x%02x%02x%02x "
    674                  "<VLAN_PRI=%d VLAN_CFI=%d VLAN_ID=%d\n"),
    675                  pfx,
    676                  hg2->overlay0.bytes[12],
    677                  hg2->overlay0.bytes[13],
    678                  hg2->overlay0.bytes[14],
    679                  hg2->overlay0.bytes[15],
    680                  soc_higig2_field_get(unit, hg2, HG_vlan_pri),
    681                  soc_higig2_field_get(unit, hg2, HG_vlan_cfi),
    682                  soc_higig2_field_get(unit, hg2, HG_vlan_id)));
    683         LOG_CLI((BSL_META_U(unit,
    684                             "%s            PFM=%d SRC_T=%d OPCODE=%d HXL=%d>\n"),
    685                  pfx,
    686                  soc_higig2_field_get(unit, hg2, HG_pfm),
    687                  soc_higig2_field_get(unit, hg2, HG_src_t),
    688                  soc_higig2_field_get(unit, hg2, HG_opcode),
    689                  soc_higig2_field_get(unit, hg2, HG_hdr_ext_len)));
    690     } else if (soc_higig2_field_get(unit, hg2, HG_ppd_type) == 2) {
    691         LOG_CLI((BSL_META_U(unit,
    692                             "%s0x%02x%02x%02x%02x "
    693                  "<MULTIPOINT=%d FWD_TYPE=0x%x VNI=0x%x DST_VP=0x%x>\n"),
    694                  pfx,
    695                  hg2->overlay0.bytes[8],
    696                  hg2->overlay0.bytes[9],
    697                  hg2->overlay0.bytes[10],
    698                  hg2->overlay0.bytes[11],
    699                  soc_higig2_field_get(unit, hg2, HG_multipoint),
    700                  soc_higig2_field_get(unit, hg2, HG_fwd_type),
    701                  soc_higig2_field_get(unit, hg2, HG_vni),
    702                  soc_higig2_field_get(unit, hg2, HG_dst_vp)));
    703         LOG_CLI((BSL_META_U(unit,
    704                             "%s0x%02x%02x%02x%02x "
    705                  "<SRC_VP=0x%x MIRROR=%d DONOT_MODIFY=%d DONOT_LEARN=%d\n"),
    706                  pfx,
    707                  hg2->overlay0.bytes[12],
    708                  hg2->overlay0.bytes[13],
    709                  hg2->overlay0.bytes[14],
    710                  hg2->overlay0.bytes[15],
    711                  soc_higig2_field_get(unit, hg2, HG_src_vp),
    712                  soc_higig2_field_get(unit, hg2, HG_mirror),
    713                  soc_higig2_field_get(unit, hg2, HG_donot_modify),
    714                  soc_higig2_field_get(unit, hg2, HG_donot_learn)));
    715         LOG_CLI((BSL_META_U(unit,
    716                             "%s             LAG_FAILOVER=%d OPCODE=%d PRESERVE_DSCP=%d\n"),
    717                  pfx,
    718                  soc_higig2_field_get(unit, hg2, HG_lag_failover),
    719                  soc_higig2_field_get(unit, hg2, HG_opcode),
    720                  soc_higig2_field_get(unit, hg2, HG_preserve_dscp)));
    721         LOG_CLI((BSL_META_U(unit,
    722                             "%s             REPLICATION_ID=0x%x PROTECTION_STATUS=%d\n"),
    723                  pfx,
    724                  soc_higig2_field_get(unit, hg2, HG_replication_id),
    725                  soc_higig2_field_get(unit, hg2, HG_protection_status)));
    726         LOG_CLI((BSL_META_U(unit,
    727                             "%s             PRESERVE_DOT1P=%d DST_TYPE=%d SRC_TYPE=%d>\n"),
    728                  pfx,
    729                  soc_higig2_field_get(unit, hg2, HG_preserve_dot1p),
    730                  soc_higig2_field_get(unit, hg2, HG_dst_type),
    731                  soc_higig2_field_get(unit, hg2, HG_src_type)));
    732     } else if (soc_higig2_field_get(unit, hg2, HG_ppd_type) == 3) {
    733         if (soc_higig2_field_get(unit, hg2, HG_data_container_type) == 1) {
    734             LOG_CLI((BSL_META_U(unit,
    735                                 "%s0x%02x%02x%02x%02x "
    736                      "<CTAG=0x%x DEFERRED_DROP=%d VXLT_DONE=%d\n"),
    737                      pfx,
    738                      hg2->overlay0.bytes[8],
    739                      hg2->overlay0.bytes[9],
    740                      hg2->overlay0.bytes[10],
    741                      hg2->overlay0.bytes[11],
    742                      soc_higig2_field_get(unit, hg2, HG_ctag),
    743                      soc_higig2_field_get(unit, hg2, HG_deferred_drop),
    744                      soc_higig2_field_get(unit, hg2, HG_vxlt_done)));
    745             LOG_CLI((BSL_META_U(unit,
    746                                 "%s             DEFERRED_CHANGE_PKT_PRI=%d, NEW_PKT_PRI=%d\n"),
    747                      pfx,
    748                      soc_higig2_field_get(unit, hg2, HG_deferred_change_pkt_pri),
    749                      soc_higig2_field_get(unit, hg2, HG_new_pkt_pri)));
    750             LOG_CLI((BSL_META_U(unit,
    751                                 "%s             DEFERRED_CHANGE_DSCP=%d, NEW_DSCP=%d>\n"),
    752                      pfx,
    753                      soc_higig2_field_get(unit, hg2, HG_deferred_change_dscp),
    754                      soc_higig2_field_get(unit, hg2, HG_new_dscp)));
    755         } else {
    756             LOG_CLI((BSL_META_U(unit,
    757                                 "%s0x%02x%02x%02x%02x "
    758                      "<DATA_CONTAINER=0x%08x>\n"),
    759                      pfx,
    760                      hg2->overlay0.bytes[8],
    761                      hg2->overlay0.bytes[9],
    762                      hg2->overlay0.bytes[10],
    763                      hg2->overlay0.bytes[11],
    764                      soc_higig2_field_get(unit, hg2,
    765                      HG_data_container)));
    766         }
    767         LOG_CLI((BSL_META_U(unit,
    768                             "%s0x%02x%02x%02x%02x "
    769                  "<SOURCE_TYPE=%d SOURCE_VP=0x%x PRESERVE_DSCP=%d\n"),
    770                  pfx,
    771                  hg2->overlay0.bytes[12],
    772                  hg2->overlay0.bytes[13],
    773                  hg2->overlay0.bytes[14],
    774                  hg2->overlay0.bytes[15],
    775                  soc_higig2_field_get(unit, hg2, HG_src_type),
    776                  soc_higig2_field_get(unit, hg2, HG_src_vp),
    777                  soc_higig2_field_get(unit, hg2, HG_preserve_dscp)));
    778         LOG_CLI((BSL_META_U(unit,
    779                             "%s             PRESERVE_DOT1P=%d DONOT_LEARN=%d\n"),
    780                  pfx,
    781                  soc_higig2_field_get(unit, hg2, HG_preserve_dot1p),
    782                  soc_higig2_field_get(unit, hg2, HG_donot_learn)));
    783         LOG_CLI((BSL_META_U(unit,
    784                             "%s             OPCODE=%d CONTAINER_TYPE=%d>\n"),
    785                  pfx,
    786                  soc_higig2_field_get(unit, hg2, HG_opcode),
    787                  soc_higig2_field_get(unit, hg2, HG_data_container_type)));
    788     }
    789 }
    790 #endif /* BCM_HIGIG2_SUPPORT */
    791 
    792 
    793 /*
    794  *      HG_start should always be set first before settings any other fields. 
    795  */
    796 void
    797 soc_higig_field_set(int unit, soc_higig_hdr_t *hg,
    798 		    soc_higig_field_t field, uint32 val)
    799 {
    800     COMPILER_REFERENCE(unit);
    801 
    802 #ifdef BCM_HIGIG2_SUPPORT
    803     if ((hg->overlay1.start == SOC_HIGIG2_START) ||
    804         (SOC_IS_RAPTOR(unit)) || (SOC_IS_RAVEN(unit))) {
    805         soc_higig2_field_set(unit, (soc_higig2_hdr_t *)hg, field, val);
    806         return;
    807     }
    808 #endif /* BCM_HIGIG2_SUPPORT */
    809 
    810     switch (field) {
    811     case HG_start:		hg->overlay1.start = val;		break;
    812     case HG_hgi:		hg->overlay1.hgi = val & SOC_HIGIG_HGI_MASK; break;
    813     case HG_vlan_tag:		hg->overlay1.vlan_pri = (val >> 13) & 7;
    814 				hg->overlay1.vlan_cfi = (val >> 12) & 1;
    815 				hg->overlay1.vlan_id_hi = (val >> 8) & 0xf;
    816 				hg->overlay1.vlan_id_lo = val & 0xff;	break;
    817     case HG_vlan_pri:		hg->overlay1.vlan_pri = val;		break;
    818     case HG_vlan_cfi:		hg->overlay1.vlan_cfi = val;		break;
    819     case HG_vlan_id:		hg->overlay1.vlan_id_hi = val >> 8;
    820 				hg->overlay1.vlan_id_lo = val & 0xff;	break;
    821     case HG_src_mod:		hg->overlay1.src_mod = val & 0x1f;
    822                                 hg->hgp_overlay1.src_mod_5 = (val >> 5) & 1;
    823                                 hg->hgp_overlay1.src_mod_6 = (val >> 6) & 1;break;
    824     case HG_opcode:		hg->overlay1.opcode = val;		break;
    825     case HG_pfm:		hg->overlay1.pfm = val;			break;
    826     case HG_src_port:		hg->overlay1.src_port = val;		break;
    827     case HG_dst_port:		hg->overlay1.dst_port = val;		break;
    828     case HG_cos:		hg->overlay1.cos = val;			break;
    829     case HG_hdr_format:		hg->overlay1.hdr_format = val;		break;
    830     case HG_cng:		hg->overlay1.cng = val & 1;
    831                                 hg->hgp_overlay1.cng_hi = (val >> 1) & 1;break;
    832     case HG_dst_mod:		hg->overlay1.dst_mod = val & 0x1f;
    833                                 hg->hgp_overlay1.dst_mod_5 = (val >> 5) & 1;
    834                                 hg->hgp_overlay1.dst_mod_6 = (val >> 6) & 1;break;
    835     case HG_dst_t:		hg->overlay1.dst_t = val;		break;
    836     case HG_dst_tgid:		hg->overlay1.dst_tgid = val;		break;
    837     case HG_donot_modify:       hg->hgp_overlay2.donot_modify = val;    break;
    838     case HG_donot_learn:        hg->hgp_overlay2.donot_learn = val;     break;
    839     case HG_lag_failover:       hg->hgp_overlay2.lag_failover = val;    break;
    840     case HG_ingress_tagged:	hg->overlay1.ingress_tagged = val;	break;
    841     case HG_mirror_only:	hg->overlay1.mirror_only = val;		break;
    842     case HG_mirror_done:	hg->overlay1.mirror_done = val;		break;
    843     case HG_mirror:		hg->overlay1.mirror = val;		break;
    844     case HG_tgid:		hg->overlay2.tgid = val;		break;
    845     case HG_l2mc_ptr:		hg->hgp_overlay2.dst_mod_6 = (val >> 12) & 1;
    846 				hg->hgp_overlay2.dst_t = (val >> 11) & 1;
    847 				hg->hgp_overlay2.dst_mod_5 = (val >> 10) & 1;
    848 				hg->overlay2.l2mc_ptr_hi = (val >> 5) & 0x1f;
    849 				hg->overlay2.l2mc_ptr_lo = val & 0x1f;	break;
    850     case HG_ctag:		hg->overlay2.ctag_hi = val >> 8;
    851 				hg->overlay2.ctag_lo = val & 0xff;	break;
    852     case HG_hdr_ext_len:        hg->hgp_overlay1.hdr_ext_len = val; break;
    853     case HG_l3:                 hg->hgp_overlay1.l3 = val; break;
    854     case HG_label_present:      hg->hgp_overlay1.label_present = val; break;
    855     case HG_vc_label:           hg->hgp_overlay1.vc_label_19_16
    856                                                         = (val >> 16) & 0xF;
    857                                 hg->hgp_overlay1.vc_label_15_8
    858                                                         = (val >> 8) & 0xFF;
    859                                 hg->hgp_overlay1.vc_label_7_0
    860                                                         = (val >> 0) & 0xFF;
    861                                 break;
    862     default:
    863 	LOG_WARN(BSL_LS_SOC_COMMON,
    864                  (BSL_META_U(unit,
    865                              "hg_set: unit %d: Unknown higig field=%d val=0x%x\n"),
    866                   unit, field, val));
    867 	break;
    868     }
    869 }
    870 
    871 uint32
    872 soc_higig_field_get(int unit, soc_higig_hdr_t *hg,
    873 		    soc_higig_field_t field)
    874 {
    875     COMPILER_REFERENCE(unit);
    876 
    877 #ifdef BCM_HIGIG2_SUPPORT
    878     if ((hg->overlay1.start == SOC_HIGIG2_START) ||
    879         (SOC_IS_RAPTOR(unit)) || (SOC_IS_RAVEN(unit))) {
    880         return soc_higig2_field_get(unit, (soc_higig2_hdr_t *)hg, field);
    881     }
    882 #endif /* BCM_HIGIG2_SUPPORT */
    883 
    884     switch (field) {
    885     case HG_start:		return hg->overlay1.start;
    886     case HG_hgi:		return hg->overlay1.hgi & SOC_HIGIG_HGI_MASK;
    887     case HG_vlan_tag:		return (hg->overlay1.vlan_pri << 13 |
    888 					hg->overlay1.vlan_cfi << 12 |
    889 					hg->overlay1.vlan_id_hi << 8 |
    890 					hg->overlay1.vlan_id_lo);
    891     case HG_vlan_pri:		return hg->overlay1.vlan_pri;
    892     case HG_vlan_cfi:		return hg->overlay1.vlan_cfi;
    893     case HG_vlan_id:		return (hg->overlay1.vlan_id_hi << 8 |
    894 					hg->overlay1.vlan_id_lo);
    895     case HG_src_mod:		return (hg->overlay1.src_mod |
    896                                    (hg->hgp_overlay1.src_mod_5 << 5) |
    897                                    (hg->hgp_overlay1.src_mod_6 << 6));
    898     case HG_opcode:		return hg->overlay1.opcode;
    899     case HG_pfm:		return hg->overlay1.pfm;
    900     case HG_src_port:		return hg->overlay1.src_port;
    901     case HG_dst_port:		return hg->overlay1.dst_port;
    902     case HG_cos:		return hg->overlay1.cos;
    903     case HG_hdr_format:		return hg->overlay1.hdr_format;
    904     case HG_cng:		return hg->overlay1.cng |
    905                                    (hg->hgp_overlay1.cng_hi << 1);
    906     case HG_dst_mod:		return (hg->overlay1.dst_mod |
    907                                    (hg->hgp_overlay1.dst_mod_5 << 5) |
    908                                    (hg->hgp_overlay1.dst_mod_6 << 6));
    909     case HG_dst_t:		return hg->overlay1.dst_t;
    910     case HG_dst_tgid:		return hg->overlay1.dst_tgid;
    911     case HG_donot_modify:       return hg->hgp_overlay2.donot_modify;
    912     case HG_donot_learn:        return hg->hgp_overlay2.donot_learn;
    913     case HG_lag_failover:       return hg->hgp_overlay2.lag_failover;
    914     case HG_ingress_tagged:	return hg->overlay1.ingress_tagged;
    915     case HG_mirror_only:	return hg->overlay1.mirror_only;
    916     case HG_mirror_done:	return hg->overlay1.mirror_done;
    917     case HG_mirror:		return hg->overlay1.mirror;
    918     case HG_tgid:		return hg->overlay2.tgid;
    919     case HG_l2mc_ptr:		return (hg->hgp_overlay2.dst_mod_6 << 12 |
    920 					hg->hgp_overlay2.dst_t << 11 |
    921 					hg->hgp_overlay2.dst_mod_5 << 10 |
    922 					hg->overlay2.l2mc_ptr_hi << 5 |
    923 					hg->overlay2.l2mc_ptr_lo);
    924     case HG_ctag:		return (hg->overlay2.ctag_hi << 8 |
    925 					hg->overlay2.ctag_lo);
    926     case HG_hdr_ext_len:        return hg->hgp_overlay1.hdr_ext_len;
    927     case HG_l3:                 return hg->hgp_overlay1.l3;
    928     case HG_label_present:      return hg->hgp_overlay1.label_present;
    929     case HG_vc_label:           return ((hg->hgp_overlay1.vc_label_19_16 << 16) |
    930                                         (hg->hgp_overlay1.vc_label_15_8 << 8) |
    931                                         (hg->hgp_overlay1.vc_label_7_0)); 
    932     default:
    933 	LOG_WARN(BSL_LS_SOC_COMMON,
    934                  (BSL_META_U(unit,
    935                              "hg_get: unit %d: Unknown higig field=%d\n"),
    936                   unit, field));
    937 	return 0;
    938     }
    939 }
    940 
    941 void
    942 soc_higig_dump(int unit, char *pfx, soc_higig_hdr_t *hg)
    943 {
    944     LOG_CLI((BSL_META_U(unit,
    945                         "%s0x%02x%02x%02x%02x "
    946              "<START=0x%x HXL=%d "
    947                         "VLAN_PRI=%d VLAN_CFI=%d VLAN_ID=%d>\n"),
    948              pfx,
    949              hg->overlay0.bytes[0],
    950              hg->overlay0.bytes[1],
    951              hg->overlay0.bytes[2],
    952              hg->overlay0.bytes[3],
    953              soc_higig_field_get(unit, hg, HG_start),
    954              soc_higig_field_get(unit, hg, HG_hdr_ext_len),
    955              soc_higig_field_get(unit, hg, HG_vlan_pri),
    956              soc_higig_field_get(unit, hg, HG_vlan_cfi),
    957              soc_higig_field_get(unit, hg, HG_vlan_id)));
    958     LOG_CLI((BSL_META_U(unit,
    959                         "%s0x%02x%02x%02x%02x "
    960              "<SRC_MOD=%d OPCODE=%d PFM=%d SRC_PORT=%d\n"),
    961              pfx,
    962              hg->overlay0.bytes[4],
    963              hg->overlay0.bytes[5],
    964              hg->overlay0.bytes[6],
    965              hg->overlay0.bytes[7],
    966              soc_higig_field_get(unit, hg, HG_src_mod),
    967              soc_higig_field_get(unit, hg, HG_opcode),
    968              soc_higig_field_get(unit, hg, HG_pfm),
    969              soc_higig_field_get(unit, hg, HG_src_port)));
    970     LOG_CLI((BSL_META_U(unit,
    971                         "%s            DST_PORT=%d COS=%d HDR_FMT=%d "
    972              "CNG=%d DST_MOD=%d\n"),
    973              pfx,
    974              soc_higig_field_get(unit, hg, HG_dst_port),
    975              soc_higig_field_get(unit, hg, HG_cos),
    976              soc_higig_field_get(unit, hg, HG_hdr_format),
    977              soc_higig_field_get(unit, hg, HG_cng),
    978              soc_higig_field_get(unit, hg, HG_dst_mod)));
    979     LOG_CLI((BSL_META_U(unit,
    980                         "%s            OVERLAY: TGID=%d L2MC_PTR=0x%x>\n"),
    981              pfx,
    982              soc_higig_field_get(unit, hg, HG_tgid),
    983              soc_higig_field_get(unit, hg, HG_l2mc_ptr)));
    984     LOG_CLI((BSL_META_U(unit,
    985                         "%s0x%02x%02x%02x%02x "
    986              "<DST_T=%d DST_TGID=%d IT=%d MO=%d MD=%d M=%d L3=%d\n"),
    987              pfx,
    988              hg->overlay0.bytes[8],
    989              hg->overlay0.bytes[9],
    990              hg->overlay0.bytes[10],
    991              hg->overlay0.bytes[11],
    992              soc_higig_field_get(unit, hg, HG_dst_t),
    993              soc_higig_field_get(unit, hg, HG_dst_tgid),
    994              soc_higig_field_get(unit, hg, HG_ingress_tagged),
    995              soc_higig_field_get(unit, hg, HG_mirror_only),
    996              soc_higig_field_get(unit, hg, HG_mirror_done),
    997              soc_higig_field_get(unit, hg, HG_mirror),
    998              soc_higig_field_get(unit, hg, HG_l3)));
    999     LOG_CLI((BSL_META_U(unit,
   1000                         "%s            LP=%d VC_LABEL=0x%05x\n"),
   1001              pfx,
   1002              soc_higig_field_get(unit, hg, HG_label_present),
   1003              soc_higig_field_get(unit, hg, HG_vc_label)));
   1004     LOG_CLI((BSL_META_U(unit,
   1005                         "%s            OVERLAY: CTAG=0x%x>\n"),
   1006              pfx,
   1007              soc_higig_field_get(unit, hg, HG_ctag)));
   1008 }
   1009 
   1010 
   1011 #endif /* BCM_XGS_SUPPORT */