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

stat_preempt.c (151547B)


      1 /*
      2  * 
      3  * This license is set out in https://raw.githubusercontent.com/Broadcom-Network-Switching-Software/OpenBCM/master/Legal/LICENSE file.
      4  * 
      5  * Copyright 2007-2019 Broadcom Inc. All rights reserved.
      6  */
      7 
      8 #include <soc/drv.h>
      9 #include <soc/counter.h>
     10 #include <soc/debug.h>
     11 #include <shared/bsl.h>
     12 #include <bcm/stat.h>
     13 #include <bcm/error.h>
     14 #include <bcm_int/esw/stat.h>
     15 #include <bcm_int/esw_dispatch.h>
     16 
     17 
     18 /*
     19  * Function:
     20  *      bcmi_stat_preempt_ge_get_set
     21  * Description:
     22  *      Get the specified statistic for a port with preempt mib counter support shared
     23  *      by unimac.
     24  * Parameters:
     25  *      unit - StrataSwitch PCI device unit number (driver internal).
     26  *      port - zero-based port number
     27  *      sync_mode - if 1 read hw counter else sw accumualated counter
     28  *      type - SNMP statistics type (see bcm/stat.h)
     29  *      val  - (OUT) 64 bit statistic counter value
     30  * Returns:
     31  *      BCM_E_NONE - Success.
     32  *      BCM_E_PARAM - Illegal parameter.
     33  *      BCM_E_INTERNAL - Chip access failure.
     34  */
     35 int
     36 bcmi_stat_preempt_ge_get_set(int unit, bcm_port_t port,
     37                              int sync_mode, int stat_op,
     38                              bcm_stat_val_t type, uint64 *val,
     39                              int incl_non_ge_stat)
     40 {
     41     uint64 count, count1;
     42     int reg_op = (stat_op == _BCM_STAT_GET)? _BCM_STAT_REG_ADD:
     43                                              _BCM_STAT_REG_CLEAR;
     44     int reg_sub_op = (stat_op == _BCM_STAT_GET)? _BCM_STAT_REG_SUB:
     45                                                  _BCM_STAT_REG_CLEAR;
     46 
     47     COMPILER_REFERENCE(&count);  /* Work around PPC compiler bug */
     48     COMPILER_64_ZERO(count);
     49 
     50     switch (type) {
     51         /* *** RFC 1213 *** */
     52 
     53     case snmpIfInOctets:
     54         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op,
     55                           GRBYTr, &count);  /* bytes rcvd */
     56         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op,
     57                           GRRBYTr, &count); /* Runt bytes */
     58         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op,
     59                           GRBYTPr, &count);  /* bytes rcvd (preempt counter) */
     60         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op,
     61                           GRRBYTPr, &count); /* Runt bytes (preempt counter) */
     62         break;
     63     case snmpIfInUcastPkts:    /* Unicast packets received */
     64         if (soc_feature(unit, soc_feature_hw_stats_calc)) {
     65             if (COUNT_OVR_ERRORS(unit)) {
     66                 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op,
     67                                   GRUCr, &count);
     68                 /* preempt counter */
     69                     BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op,
     70                                   GRUCPr, &count);
     71                 /* + oversize, good FCS */
     72                     BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op,
     73                                   GROVRr, &count);
     74                 /* + oversize, good FCS (preempt counter) */
     75                 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op,
     76                                   GROVRPr, &count);
     77             } else {
     78                 if (incl_non_ge_stat) {
     79                     /* RUC switch register has the count of all received packets,
     80                      * add the count when incl_non_ge_stat flag is set.
     81                      */
     82                     BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, RUCr,
     83                                       &count);  /* unicast pkts rcvd */
     84                 }
     85             }
     86         } else {
     87             BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op,
     88                               GRPKTr, &count); /* all pkts rcvd */
     89             BCM_STAT_REG_OPER(unit, port, sync_mode, reg_sub_op,
     90                               GRMCAr, &count); /* - multicast */
     91             BCM_STAT_REG_OPER(unit, port, sync_mode, reg_sub_op,
     92                               GRBCAr, &count); /* - broadcast */
     93             BCM_STAT_REG_OPER(unit, port, sync_mode, reg_sub_op,
     94                               GRALNr, &count); /* - bad FCS, dribble bit  */
     95             BCM_STAT_REG_OPER(unit, port, sync_mode, reg_sub_op,
     96                               GRFCSr, &count); /* - bad FCS, no dribble bit */
     97             BCM_STAT_REG_OPER(unit, port, sync_mode, reg_sub_op,
     98                               GRJBRr, &count); /* - oversize, bad FCS */
     99 
    100             BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op,
    101                               GRPKTPr, &count); /* all pkts rcvd (preempt counter) */
    102             BCM_STAT_REG_OPER(unit, port, sync_mode, reg_sub_op,
    103                               GRMCAPr, &count); /* - multicast (preempt counter) */
    104             BCM_STAT_REG_OPER(unit, port, sync_mode, reg_sub_op,
    105                               GRBCAPr, &count); /* - broadcast (preempt counter) */
    106             BCM_STAT_REG_OPER(unit, port, sync_mode, reg_sub_op,
    107                               GRALNPr, &count); /* - bad FCS, dribble bit (preempt counter) */
    108             BCM_STAT_REG_OPER(unit, port, sync_mode, reg_sub_op,
    109                               GRFCSPr, &count); /* - bad FCS, no dribble bit (preempt counter) */
    110             BCM_STAT_REG_OPER(unit, port, sync_mode, reg_sub_op,
    111                               GRJBRPr, &count); /* - oversize, bad FCS (preempt counter) */
    112             if (SOC_REG_IS_VALID(unit, GRMTUEr)) {
    113                 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_sub_op, GRMTUEr,
    114                                   &count); /* - mtu exceeded, good FCS */
    115                 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_sub_op, GRMTUEPr,
    116                                   &count); /* - mtu exceeded, good FCS (preempt counter) */
    117             }
    118 
    119             if ((SOC_REG_IS_VALID(unit, GROVRr)) && (COUNT_OVR_ERRORS(unit))) {
    120                 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_sub_op, GROVRr,
    121                                   &count); /* - oversize, good FCS */
    122                 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_sub_op, GROVRPr,
    123                                   &count); /* - oversize, good FCS (preempt counter) */
    124             }
    125         }
    126         break;
    127     case snmpIfInNUcastPkts:    /* Non Unicast packets received */
    128         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op,
    129                           GRMCAr, &count); /* multicast pkts rcvd */
    130         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op,
    131                           GRBCAr, &count); /* broadcast pkts rcvd */
    132         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op,
    133                           GRMCAPr, &count); /* multicast pkts rcvd (preempt counter) */
    134         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op,
    135                           GRBCAPr, &count); /* broadcast pkts rcvd (preempt counter) */
    136         break;
    137     case snmpIfInBroadcastPkts: /* Broadcast packets received */
    138         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op,
    139                           GRBCAr, &count);  /* broadcast pkts rcvd */
    140         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op,
    141                           GRBCAPr, &count);  /* broadcast pkts rcvd (preempt counter) */
    142         break;
    143     case snmpIfInMulticastPkts:  /* Multicast packets received */
    144         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op,
    145                           GRMCAr, &count);  /* multicast pkts rcvd */
    146         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op,
    147                           GRMCAPr, &count);  /* multicast pkts rcvd (preempt counter) */
    148         break;
    149     case snmpIfInDiscards:    /* Dropped packets including aborted */
    150         if (soc_feature(unit, soc_feature_stat_xgs3)) {
    151             if (incl_non_ge_stat) {
    152                 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op,
    153                                   RDBGC0r, &count); /* Ingress drop conditions */
    154                 BCM_IF_ERROR_RETURN
    155                     (_bcm_stat_counter_non_dma_extra_get(unit,
    156                                                          SOC_COUNTER_NON_DMA_PORT_DROP_PKT_ING,
    157                                                          port, &count1));
    158                 COMPILER_64_ADD_64(count, count1);
    159             }
    160         }
    161         break;
    162     case snmpIfInErrors:    /* Receive packets containing errors */
    163         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op,
    164                           GRUNDr, &count);  /* undersize pkts, good FCS */
    165         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op,
    166                           GRFRGr, &count);  /* undersize pkts, bad FCS */
    167         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op,
    168                           GRFCSr, &count);  /* FCS errors */
    169 
    170         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op,
    171                           GRUNDPr, &count);  /* undersize pkts, good FCS (preempt counter) */
    172         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op,
    173                           GRFRGPr, &count);  /* undersize pkts, bad FCS (preempt counter) */
    174         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op,
    175                           GRFCSPr, &count);  /* FCS errors (preempt counter) */
    176         if (SOC_REG_IS_VALID(unit, GRMTUEr)) {
    177             BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op,
    178                               GRMTUEr, &count); /* mtu exceeded pkts, good FCS */
    179             BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op,
    180                               GRMTUEPr, &count); /* mtu exceeded pkts, good FCS (preempt counter) */
    181         } else if (COUNT_OVR_ERRORS(unit)) {
    182             BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op,
    183                               GROVRr, &count);    /* oversize pkts, good FCS */
    184             BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op,
    185                               GROVRPr, &count);    /* oversize pkts, good FCS (preempt counter) */
    186         }
    187         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op,
    188                           GRJBRr, &count);  /* oversize pkts, bad FCS */
    189         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op,
    190                           GRJBRPr, &count);  /* oversize pkts, bad FCS (preempt counter) */
    191         break;
    192     case snmpIfInUnknownProtos:
    193         break;
    194     case snmpIfOutOctets:
    195         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op,
    196                           GTBYTr, &count);  /* transmit bytes */
    197         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op,
    198                           GTBYTPr, &count);  /* transmit bytes (preempt counter) */
    199         break;
    200     case snmpIfOutUcastPkts:
    201         if (soc_feature(unit, soc_feature_hw_stats_calc)) {
    202             BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op,
    203                               GTUCr, &count);  /* unicast pkts sent */
    204             BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op,
    205                               GTUCPr, &count);  /* unicast pkts sent (preempt counter) */
    206             if (!COUNT_OVR_ERRORS(unit)) {
    207                 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op,
    208                                   GTOVRr, &count); /* + oversize, good FCS */
    209                 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op,
    210                                   GTOVRPr, &count); /* + oversize, good FCS (preempt counter) */
    211             }
    212         } else {
    213             BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op,
    214                               GTPKTr, &count); /* all pkts xmited */
    215             BCM_STAT_REG_OPER(unit, port, sync_mode, reg_sub_op,
    216                               GTMCAr, &count); /* - multicast */
    217             BCM_STAT_REG_OPER(unit, port, sync_mode, reg_sub_op,
    218                               GTBCAr, &count); /* - broadcast */
    219             BCM_STAT_REG_OPER(unit, port, sync_mode, reg_sub_op,
    220                               GTFCSr, &count); /* - bad FCS */
    221             BCM_STAT_REG_OPER(unit, port, sync_mode, reg_sub_op,
    222                               GTJBRr, &count); /* - oversize, bad FCS */
    223 
    224             BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op,
    225                               GTPKTPr, &count); /* all pkts xmited (preempt counter) */
    226             BCM_STAT_REG_OPER(unit, port, sync_mode, reg_sub_op,
    227                               GTMCAPr, &count); /* - multicast (preempt counter) */
    228             BCM_STAT_REG_OPER(unit, port, sync_mode, reg_sub_op,
    229                               GTBCAPr, &count); /* - broadcast (preempt counter) */
    230             BCM_STAT_REG_OPER(unit, port, sync_mode, reg_sub_op,
    231                               GTFCSPr, &count); /* - bad FCS (preempt counter) */
    232             BCM_STAT_REG_OPER(unit, port, sync_mode, reg_sub_op,
    233                               GTJBRPr, &count); /* - oversize, bad FCS (preempt counter) */
    234             if (COUNT_OVR_ERRORS(unit)) {
    235                 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_sub_op,
    236                                   GTOVRr, &count); /* - oversize, good FCS */
    237                 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_sub_op,
    238                                   GTOVRPr, &count); /* - oversize, good FCS (preempt counter) */
    239             }
    240         }
    241         break;
    242     case snmpIfOutNUcastPkts:
    243         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op,
    244                           GTMCAr, &count);  /* multicast pkts */
    245         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op,
    246                           GTBCAr, &count);  /* broadcast pkts */
    247         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op,
    248                           GTMCAPr, &count);  /* multicast pkts (preempt counter) */
    249         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op,
    250                           GTBCAPr, &count);  /* broadcast pkts (preempt counter) */
    251         break;
    252     case snmpIfOutBroadcastPkts:
    253         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op,
    254                           GTBCAr, &count);  /* broadcast pkts */
    255         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op,
    256                           GTBCAPr, &count);  /* broadcast pkts (preempt counter) */
    257         break;
    258     case snmpIfOutMulticastPkts:
    259         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op,
    260                           GTMCAr, &count);  /* multicast pkts */
    261         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op,
    262                           GTMCAPr, &count);  /* multicast pkts (preempt counter) */
    263         break;
    264     case snmpIfOutDiscards:
    265         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op,
    266                           GTEDFr, &count);  /* multiple deferral */
    267         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op,
    268                           GTEDFPr, &count);  /* multiple deferral (preempt counter) */
    269         if (soc_feature(unit, soc_feature_stat_xgs3)) {
    270             if (incl_non_ge_stat) {
    271                 if (SOC_REG_IS_VALID(unit, HOLDr)) {  /* L2 MTU drops */
    272                     BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op,
    273                                       HOLDr, &count);
    274                 } else if (SOC_REG_IS_VALID(unit, HOL_DROPr)) {
    275                     BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op,
    276                                       HOL_DROPr, &count);
    277                 }
    278                 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op,
    279                                   TDBGC3r, &count);
    280                 BCM_IF_ERROR_RETURN
    281                     (_bcm_stat_counter_extra_get(unit, EGRDROPPKTCOUNTr,
    282                                                  port, &count1));
    283                 COMPILER_64_ADD_64(count, count1);
    284                 BCM_IF_ERROR_RETURN
    285                     (bcm_esw_cosq_stat_get(unit, port, BCM_COS_INVALID,
    286                                            bcmCosqStatDroppedPackets, &count1));
    287                 COMPILER_64_ADD_64(count, count1);
    288             }
    289         }
    290         /* other causes of discards? */
    291         break;
    292     case snmpIfOutErrors:
    293         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op,
    294                           GTXCLr, &count);  /* excessive collisions */
    295         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op,
    296                           GTXCLPr, &count);  /* excessive collisions (preempt counter) */
    297         break;
    298     case snmpIfOutQLen:
    299         {
    300             uint32 qcount;
    301             if (bcm_esw_port_queued_count_get(unit, port, &qcount) >= 0) {
    302                 COMPILER_64_ADD_32(count, qcount);
    303             }
    304         }
    305         break;
    306     case snmpIpInReceives:
    307         if (soc_feature(unit, soc_feature_stat_xgs3)) {
    308             if (incl_non_ge_stat) {
    309                 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op,
    310                                   RIPC4r, &count);
    311             }
    312         }
    313         break;
    314     case snmpIpInHdrErrors:
    315         if (soc_feature(unit, soc_feature_stat_xgs3)) {
    316             if (incl_non_ge_stat) {
    317                 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op,
    318                                   RIPD4r, &count);
    319             }
    320         }
    321         break;
    322 /* ipInAddrErrors */
    323     case snmpIpForwDatagrams:
    324         if (soc_feature(unit, soc_feature_stat_xgs3)) {
    325             if (incl_non_ge_stat) {
    326                 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op,
    327                                   TDBGC4r, &count);
    328             }
    329         }
    330         break;
    331 /* ipInUnknownProtos */
    332     case snmpIpInDiscards:
    333         if (soc_feature(unit, soc_feature_stat_xgs3)) {
    334             if (incl_non_ge_stat) {
    335                 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op,
    336                                   RIPHE4r, &count);
    337                 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op,
    338                                   RIPD4r, &count);
    339             }
    340         }
    341         break;
    342 /* ipInDelivers */
    343 /* ipOutRequests */
    344 /* ipOutDiscards */
    345 /* ipOutNoRoutes */
    346 
    347         /* *** RFC 1493 *** */
    348 
    349     case snmpDot1dBasePortDelayExceededDiscards:
    350         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op,
    351                           GTEDFr, &count);  /* multiple deferral */
    352         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op,
    353                           GTEDFPr, &count);  /* multiple deferral (preempt counter) */
    354         break;
    355     case snmpDot1dBasePortMtuExceededDiscards:
    356         if (SOC_REG_IS_VALID(unit, GRMTUEr)) {
    357             BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op,
    358                               GRMTUEr, &count); /* mtu exceeded pkts */
    359             BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op,
    360                               GRMTUEPr, &count); /* mtu exceeded pkts (preempt counter) */
    361         } else if (COUNT_OVR_ERRORS(unit)) {
    362             BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op,
    363                               GROVRr, &count);  /* oversize pkts */
    364             BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op,
    365                               GROVRPr, &count);  /* oversize pkts (preempt counter) */
    366         }
    367         break;
    368     case snmpDot1dTpPortInFrames:  /* should be only bridge mgmt */
    369         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, GRPKTr, &count);
    370         /* preempt counter */
    371         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, GRPKTPr, &count);
    372         break;
    373     case snmpDot1dTpPortOutFrames:  /* should be only bridge mgmt */
    374         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, GTPKTr, &count);
    375         /* preempt counter */
    376         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, GTPKTPr, &count);
    377         break;
    378     case snmpDot1dPortInDiscards:
    379         if (soc_feature(unit, soc_feature_stat_xgs3)) {
    380             if (incl_non_ge_stat) {
    381                 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, RDISCr, &count);
    382                 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, RIPD4r, &count);
    383                 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, RIPD6r, &count);
    384                 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, RPORTDr, &count);
    385             }
    386         }
    387         break;
    388 
    389         /* *** RFC 1757 *** */
    390 
    391     case snmpEtherStatsDropEvents:
    392         if (soc_feature(unit, soc_feature_stat_xgs3)) {
    393             if (incl_non_ge_stat) {
    394                 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, RDISCr, &count);
    395             }
    396         }
    397         break;
    398     case snmpEtherStatsOctets:
    399         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, GRBYTr, &count);
    400         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, GTBYTr, &count);
    401         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op,
    402                           GRRBYTr, &count); /* Runt bytes */
    403 
    404         /* preempt counter */
    405         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, GRBYTPr, &count);
    406         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, GTBYTPr, &count);
    407         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op,
    408                           GRRBYTPr, &count); /* Runt bytes */
    409         break;
    410     case snmpEtherStatsPkts:
    411         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, GRPKTr, &count);
    412         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, GTPKTr, &count);
    413         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op,
    414                           GRRPKTr, &count); /* Runt packets */
    415 
    416         /* preempt counter */
    417         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, GRPKTPr, &count);
    418         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, GTPKTPr, &count);
    419         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op,
    420                           GRRPKTPr, &count); /* Runt packets */
    421         break;
    422     case snmpEtherStatsBroadcastPkts:
    423         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, GRBCAr, &count);
    424         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, GTBCAr, &count);
    425         /* preempt counter */
    426         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, GRBCAPr, &count);
    427         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, GTBCAPr, &count);
    428         break;
    429     case snmpEtherStatsMulticastPkts:
    430         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, GRMCAr, &count);
    431         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, GTMCAr, &count);
    432         /* preempt counter */
    433         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, GRMCAPr, &count);
    434         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, GTMCAPr, &count);
    435         break;
    436     case snmpEtherStatsCRCAlignErrors:  /* CRC errors + alignment errors */
    437         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, GRFCSr, &count);
    438         /* preempt counter */
    439         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, GRFCSPr, &count);
    440         break;
    441     case snmpEtherStatsUndersizePkts:  /* Undersize frames */
    442         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, GRUNDr, &count);
    443         /* preempt counter */
    444         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, GRUNDPr, &count);
    445         break;
    446     case snmpEtherStatsOversizePkts:
    447         if (soc_feature(unit, soc_feature_stat_jumbo_adj)) {
    448             BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, GROVRr, &count);
    449             BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, GTOVRr, &count);
    450             /* preempt counter */
    451             BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, GROVRPr, &count);
    452             BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, GTOVRPr, &count);
    453         } else {
    454             BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, GRJBRr, &count);
    455             BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, GTJBRr, &count);
    456             /* preempt counter */
    457             BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, GRJBRPr, &count);
    458             BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, GTJBRPr, &count);
    459         }
    460         break;
    461     case snmpEtherRxOversizePkts:
    462         if (soc_feature(unit, soc_feature_stat_jumbo_adj)) {
    463             BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, GROVRr, &count);
    464             /* preempt counter */
    465             BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, GROVRPr, &count);
    466         }
    467         break;
    468     case snmpEtherTxOversizePkts:
    469         if (soc_feature(unit, soc_feature_stat_jumbo_adj)) {
    470             BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, GTOVRr, &count);
    471             /* preempt counter */
    472             BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, GTOVRPr, &count);
    473         }
    474         break;
    475     case snmpEtherStatsFragments:
    476         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, GRFRGr, &count);
    477         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, GTFRGr, &count);
    478         /* preempt counter */
    479         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, GRFRGPr, &count);
    480         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, GTFRGPr, &count);
    481         break;
    482     case snmpEtherStatsJabbers:
    483         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, GRJBRr, &count);
    484         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, GTJBRr, &count);
    485         /* preempt counter */
    486         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, GRJBRPr, &count);
    487         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, GTJBRPr, &count);
    488         break;
    489     case snmpEtherStatsCollisions:
    490         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, GTNCLr, &count);
    491         /* preempt counter */
    492         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, GTNCLPr, &count);
    493         break;
    494     case snmpEtherStatsPkts64Octets:
    495         if (soc_feature(unit, soc_feature_stat_xgs3)) {
    496             BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, GR64r, &count);
    497             BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, GT64r, &count);
    498             /* preempt counter */
    499             BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, GR64Pr, &count);
    500             BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, GT64Pr, &count);
    501         }
    502         break;
    503     case snmpEtherStatsPkts65to127Octets:
    504         if (soc_feature(unit, soc_feature_stat_xgs3)) {
    505             BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, GR127r, &count);
    506             BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, GT127r, &count);
    507             /* preempt counter */
    508             BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, GR127Pr, &count);
    509             BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, GT127Pr, &count);
    510         }
    511         break;
    512     case snmpEtherStatsPkts128to255Octets:
    513         if (soc_feature(unit, soc_feature_stat_xgs3)) {
    514             BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, GR255r, &count);
    515             BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, GT255r, &count);
    516             /* preempt counter */
    517             BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, GR255Pr, &count);
    518             BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, GT255Pr, &count);
    519         }
    520         break;
    521     case snmpEtherStatsPkts256to511Octets:
    522         if (soc_feature(unit, soc_feature_stat_xgs3)) {
    523             BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, GR511r, &count);
    524             BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, GT511r, &count);
    525             /* preempt counter */
    526             BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, GR511Pr, &count);
    527             BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, GT511Pr, &count);
    528         }
    529         break;
    530     case snmpEtherStatsPkts512to1023Octets:
    531         if (soc_feature(unit, soc_feature_stat_xgs3)) {
    532             BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, GR1023r, &count);
    533             BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, GT1023r, &count);
    534             /* preempt counter */
    535             BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, GR1023Pr, &count);
    536             BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, GT1023Pr, &count);
    537         }
    538         break;
    539     case snmpEtherStatsPkts1024to1518Octets:
    540         if (soc_feature(unit, soc_feature_stat_xgs3)) {
    541             BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, GR1518r, &count);
    542             BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, GT1518r, &count);
    543             /* preempt counter */
    544             BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, GR1518Pr, &count);
    545             BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, GT1518Pr, &count);
    546         }
    547         break;
    548 
    549         /* *** not actually in rfc1757 *** */
    550 
    551     case snmpBcmEtherStatsPkts1519to1522Octets:
    552         if (soc_feature(unit, soc_feature_stat_xgs3)) {
    553             BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, GRMGVr, &count);
    554             BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, GTMGVr, &count);
    555             /* preempt counter */
    556             BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, GRMGVPr, &count);
    557             BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, GTMGVPr, &count);
    558         }
    559         break;
    560     case snmpBcmEtherStatsPkts1522to2047Octets:
    561         if (soc_feature(unit, soc_feature_stat_xgs3)) {
    562             BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, GR2047r, &count);
    563             BCM_STAT_REG_OPER(unit, port, sync_mode, reg_sub_op, GRMGVr, &count);
    564 
    565             BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, GT2047r, &count);
    566             BCM_STAT_REG_OPER(unit, port, sync_mode, reg_sub_op, GTMGVr, &count);
    567 
    568             /* preempt counter */
    569             BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, GR2047Pr, &count);
    570             BCM_STAT_REG_OPER(unit, port, sync_mode, reg_sub_op, GRMGVPr, &count);
    571 
    572             BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, GT2047Pr, &count);
    573             BCM_STAT_REG_OPER(unit, port, sync_mode, reg_sub_op, GTMGVPr, &count);
    574         }
    575         break;
    576     case snmpBcmEtherStatsPkts2048to4095Octets:
    577         if (soc_feature(unit, soc_feature_stat_xgs3)) {
    578             BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, GR4095r, &count);
    579             BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, GT4095r, &count);
    580             /* preempt counter */
    581             BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, GR4095Pr, &count);
    582             BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, GT4095Pr, &count);
    583         }
    584         break;
    585     case snmpBcmEtherStatsPkts4095to9216Octets:
    586         if (soc_feature(unit, soc_feature_stat_xgs3)) {
    587             BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, GR9216r, &count);
    588             BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, GT9216r, &count);
    589             /* preempt counter */
    590             BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, GR9216Pr, &count);
    591             BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, GT9216Pr, &count);
    592         }
    593         break;
    594     case snmpBcmReceivedPkts64Octets:
    595         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, GR64r, &count);
    596         /* preempt counter */
    597         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, GR64Pr, &count);
    598         break;
    599     case snmpBcmReceivedPkts65to127Octets:
    600         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, GR127r, &count);
    601         /* preempt counter */
    602         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, GR127Pr, &count);
    603         break;
    604     case snmpBcmReceivedPkts128to255Octets:
    605         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, GR255r, &count);
    606         /* preempt counter */
    607         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, GR255Pr, &count);
    608         break;
    609     case snmpBcmReceivedPkts256to511Octets:
    610         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, GR511r, &count);
    611         /* preempt counter */
    612         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, GR511Pr, &count);
    613         break;
    614     case snmpBcmReceivedPkts512to1023Octets:
    615         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, GR1023r, &count);
    616         /* preempt counter */
    617         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, GR1023Pr, &count);
    618         break;
    619     case snmpBcmReceivedPkts1024to1518Octets:
    620         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, GR1518r, &count);
    621         /* preempt counter */
    622         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, GR1518Pr, &count);
    623         break;
    624     case snmpBcmReceivedPkts1519to2047Octets:
    625         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, GR2047r, &count);
    626         /* preempt counter */
    627         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, GR2047Pr, &count);
    628         break;
    629     case snmpBcmReceivedPkts2048to4095Octets:
    630         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, GR4095r, &count);
    631         /* preempt counter */
    632         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, GR4095Pr, &count);
    633         break;
    634     case snmpBcmReceivedPkts4095to9216Octets:
    635         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, GR9216r, &count);
    636         /* preempt counter */
    637         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, GR9216Pr, &count);
    638         break;
    639 
    640     case snmpBcmTransmittedPkts64Octets:
    641         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, GT64r, &count);
    642         /* preempt counter */
    643         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, GT64Pr, &count);
    644         break;
    645     case snmpBcmTransmittedPkts65to127Octets:
    646         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, GT127r, &count);
    647         /* preempt counter */
    648         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, GT127Pr, &count);
    649         break;
    650     case snmpBcmTransmittedPkts128to255Octets:
    651         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, GT255r, &count);
    652         /* preempt counter */
    653         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, GT255Pr, &count);
    654         break;
    655     case snmpBcmTransmittedPkts256to511Octets:
    656         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, GT511r, &count);
    657         /* preempt counter */
    658         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, GT511Pr, &count);
    659         break;
    660     case snmpBcmTransmittedPkts512to1023Octets:
    661         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, GT1023r, &count);
    662         /* preempt counter */
    663         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, GT1023Pr, &count);
    664         break;
    665     case snmpBcmTransmittedPkts1024to1518Octets:
    666         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, GT1518r, &count);
    667         /* preempt counter */
    668         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, GT1518Pr, &count);
    669         break;
    670     case snmpBcmTransmittedPkts1519to2047Octets:
    671         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, GT2047r, &count);
    672         /* preempt counter */
    673         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, GT2047Pr, &count);
    674         break;
    675     case snmpBcmTransmittedPkts2048to4095Octets:
    676         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, GT4095r, &count);
    677         /* preempt counter */
    678         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, GT4095Pr, &count);
    679         break;
    680     case snmpBcmTransmittedPkts4095to9216Octets:
    681         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, GT9216r, &count);
    682         /* preempt counter */
    683         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, GT9216Pr, &count);
    684         break;
    685     case snmpEtherStatsTXNoErrors:
    686         /* FE = TPKT - (TNCL + TOVR + TFRG + TUND) */
    687         /* GE = GTPKT - (GTOVR + GTIPD + GTABRT) */
    688         if (soc_feature(unit, soc_feature_hw_stats_calc)) {
    689             BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, 
    690                               GTPOKr, &count); /* All good packets */
    691             BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, 
    692                               GTPOKPr, &count); /* All good packets (preempt counter) */
    693         } else {
    694             BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, 
    695                               GTPKTr, &count); /* All Packets */
    696             BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, 
    697                               GTPKTPr, &count); /* All Packets (preempt counter) */
    698             if (COUNT_OVR_ERRORS(unit)) {
    699                 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_sub_op, 
    700                                   GTOVRr, &count); /* Oversize */
    701                 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_sub_op, 
    702                                   GTOVRPr, &count); /* Oversize (preempt counter) */
    703             }
    704         }
    705         break;
    706     case snmpEtherStatsRXNoErrors:
    707         /* Some chips have a dedicated register for this stat */
    708         if (soc_feature(unit, soc_feature_hw_stats_calc)) {
    709             BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, GRPOKr, &count);
    710             /* preempt counter */
    711             BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, GRPOKPr, &count);
    712         } else {
    713             /*
    714              * GE = GRPKT - (GRFCS + GRXUO + GRFLR + GRCDE + GRFCR +
    715              *                GRUND + GROVR + GRJBR + GRIPCHK/GRIPHE)
    716              */
    717 
    718             BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, GRPKTr, &count);
    719             BCM_STAT_REG_OPER(unit, port, sync_mode, reg_sub_op, GRFCSr, &count);
    720             BCM_STAT_REG_OPER(unit, port, sync_mode, reg_sub_op, GRXUOr, &count);
    721             BCM_STAT_REG_OPER(unit, port, sync_mode, reg_sub_op, GRCDEr, &count);
    722             BCM_STAT_REG_OPER(unit, port, sync_mode, reg_sub_op, GRFCRr, &count);
    723             BCM_STAT_REG_OPER(unit, port, sync_mode, reg_sub_op, GRUNDr, &count);
    724             /* preempt counter */
    725             BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, GRPKTPr, &count);
    726             BCM_STAT_REG_OPER(unit, port, sync_mode, reg_sub_op, GRFCSPr, &count);
    727             BCM_STAT_REG_OPER(unit, port, sync_mode, reg_sub_op, GRCDEPr, &count);
    728             BCM_STAT_REG_OPER(unit, port, sync_mode, reg_sub_op, GRFCRPr, &count);
    729             BCM_STAT_REG_OPER(unit, port, sync_mode, reg_sub_op, GRUNDPr, &count);
    730             if (SOC_REG_IS_VALID(unit, GRMTUEr)) {
    731                 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_sub_op,
    732                                   GRMTUEr, &count); /* mtu exceeded pkts */
    733                 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_sub_op,
    734                                   GRMTUEPr, &count); /* mtu exceeded pkts (preempt counter) */
    735             } else if (COUNT_OVR_ERRORS(unit)) {
    736                 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_sub_op,
    737                                   GROVRr, &count);  /* oversize pkts */
    738                 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_sub_op,
    739                                   GROVRPr, &count);  /* oversize pkts (preempt counter) */
    740             }
    741             BCM_STAT_REG_OPER(unit, port, sync_mode, reg_sub_op, GRJBRr, &count);
    742         }
    743         break;
    744         /* *** RFC 2665 *** */
    745 
    746     case snmpDot3StatsAlignmentErrors:
    747         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, GRALNr, &count);
    748         /* preempt counter */
    749         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, GRALNPr, &count);
    750         break;
    751     case snmpDot3StatsFCSErrors:
    752         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, GRFCSr, &count);
    753         /* preempt counter */
    754         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, GRFCSPr, &count);
    755         break;
    756     case snmpDot3StatsSingleCollisionFrames:
    757         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, GTSCLr, &count);
    758         /* preempt counter */
    759         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, GTSCLPr, &count);
    760         break;
    761     case snmpDot3StatsMultipleCollisionFrames:
    762         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, GTMCLr, &count);
    763         /* preempt counter */
    764         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, GTMCLPr, &count);
    765         break;
    766     case snmpDot3StatsSQETTestErrors:
    767         /* always 0 */
    768         break;
    769     case snmpDot3StatsDeferredTransmissions:
    770         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, GTDFRr, &count);
    771         /* preempt counter */
    772         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, GTDFRPr, &count);
    773         break;
    774     case snmpDot3StatsLateCollisions:
    775         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, GTLCLr, &count);
    776         /* preempt counter */
    777         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, GTLCLPr, &count);
    778         break;
    779     case snmpDot3StatsExcessiveCollisions:
    780         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, GTXCLr, &count);
    781         /* preempt counter */
    782         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, GTXCLPr, &count);
    783         break;
    784     case snmpDot3StatsInternalMacTransmitErrors:
    785         /* always 0 */
    786         break;
    787     case snmpDot3StatsCarrierSenseErrors:
    788         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, GRFCRr, &count);
    789         /* preempt counter */
    790         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, GRFCRPr, &count);
    791         break;
    792     case snmpDot3StatsFrameTooLongs:
    793         if (soc_feature(unit, soc_feature_stat_jumbo_adj)) {
    794             if (SOC_REG_IS_VALID(unit, GRMTUEr)) {
    795                 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op,
    796                                   GRMTUEr, &count); /* mtu exceeded pkts */
    797                 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op,
    798                                   GRMTUEPr, &count); /* mtu exceeded pkts (preempt counter) */
    799             } else {
    800                 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op,
    801                                   GROVRr, &count); /* oversized pkts */
    802                 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op,
    803                                   GROVRPr, &count); /* oversized pkts (preempt counter) */
    804             }
    805         } else {
    806             BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, GRJBRr, &count);
    807             /* preempt counter */
    808             BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, GRJBRPr, &count);
    809         }
    810         break;
    811     case snmpDot3StatsInternalMacReceiveErrors:
    812         /* always 0 */
    813         break;
    814     case snmpDot3StatsSymbolErrors:
    815         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, GRCDEr, &count);
    816         /* preempt counter */
    817         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, GRCDEPr, &count);
    818         break;
    819     case snmpDot3ControlInUnknownOpcodes:
    820         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, GRXUOr, &count);
    821         break;
    822     case snmpDot3InPauseFrames:
    823         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, GRXPFr, &count);
    824         break;
    825     case snmpDot3OutPauseFrames:
    826         if (incl_non_ge_stat) {
    827             BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, GTXPFr, &count);
    828         } /* Else avoid double-counting of pause frames on GXMACs */
    829         break;
    830 
    831         /* *** RFC 2233 high capacity versions of RFC1213 objects *** */
    832 
    833     case snmpIfHCInOctets:
    834         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op,
    835                           GRBYTr, &count);  /* bytes rcvd */
    836         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op,
    837                           GRRBYTr, &count); /* Runt bytes */
    838         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op,
    839                           GRBYTPr, &count);  /* bytes rcvd (preempt counter) */
    840         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op,
    841                           GRRBYTPr, &count); /* Runt bytes (preempt counter) */
    842         break;
    843     case snmpIfHCInUcastPkts:
    844         if (soc_feature(unit, soc_feature_hw_stats_calc)) {
    845             if (SOC_REG_IS_VALID(unit, GRUCr) && !SOC_IS_STACK_PORT(unit, port)) {
    846                 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op,
    847                                   GRUCr, &count);
    848                 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op,
    849                                   GRUCPr, &count); /* preempt counter */
    850                 if (!COUNT_OVR_ERRORS(unit)) {
    851                     BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op,
    852                                       GROVRr, &count);  /* + oversize pkts */
    853                     BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op,
    854                                       GROVRPr, &count);  /* + oversize pkts (preempt counter) */
    855                 }
    856             } else {
    857                 if (incl_non_ge_stat) {
    858                     /* RUC switch register has the count of all received packets,
    859                      * add the count when incl_non_ge_stat flag is set.
    860                      */
    861                     BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op,
    862                                       RUCr, &count);  /* unicast pkts rcvd */
    863                 }
    864             }
    865         } else {
    866             BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op,
    867                               GRPKTr, &count); /* all pkts rcvd */
    868             BCM_STAT_REG_OPER(unit, port, sync_mode, reg_sub_op,
    869                               GRMCAr, &count); /* - multicast */
    870             BCM_STAT_REG_OPER(unit, port, sync_mode, reg_sub_op,
    871                               GRBCAr, &count); /* - broadcast */
    872             BCM_STAT_REG_OPER(unit, port, sync_mode, reg_sub_op,
    873                               GRALNr, &count); /* - bad FCS, dribble bit  */
    874             BCM_STAT_REG_OPER(unit, port, sync_mode, reg_sub_op,
    875                               GRFCSr, &count); /* - bad FCS, no dribble bit */
    876             BCM_STAT_REG_OPER(unit, port, sync_mode, reg_sub_op,
    877                               GRJBRr, &count); /* - oversize, bad FCS */
    878 
    879             BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op,
    880                               GRPKTPr, &count); /* all pkts rcvd (preempt counter) */
    881             BCM_STAT_REG_OPER(unit, port, sync_mode, reg_sub_op,
    882                               GRMCAPr, &count); /* - multicast (preempt counter) */
    883             BCM_STAT_REG_OPER(unit, port, sync_mode, reg_sub_op,
    884                               GRBCAPr, &count); /* - broadcast (preempt counter) */
    885             BCM_STAT_REG_OPER(unit, port, sync_mode, reg_sub_op,
    886                               GRALNPr, &count); /* - bad FCS, dribble bit (preempt counter) */
    887             BCM_STAT_REG_OPER(unit, port, sync_mode, reg_sub_op,
    888                               GRFCSPr, &count); /* - bad FCS, no dribble bit (preempt counter) */
    889             BCM_STAT_REG_OPER(unit, port, sync_mode, reg_sub_op,
    890                               GRJBRPr, &count); /* - oversize, bad FCS (preempt counter) */
    891             if (SOC_REG_IS_VALID(unit, GRMTUEr)) {
    892                 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_sub_op,
    893                                   GRMTUEr, &count); /* mtu exceeded pkts */
    894                 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_sub_op,
    895                                   GRMTUEPr, &count); /* mtu exceeded pkts (preempt counter) */
    896             } else if (COUNT_OVR_ERRORS(unit)) {
    897                 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_sub_op,
    898                                   GROVRr, &count);  /* oversize pkts */
    899                 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_sub_op,
    900                                   GROVRPr, &count);  /* oversize pkts (preempt counter) */
    901             }
    902         }
    903         break;
    904     case snmpIfHCInMulticastPkts:
    905         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op,
    906                           GRMCAr, &count);  /* multicast */
    907         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op,
    908                           GRMCAPr, &count);  /* multicast (preempt counter) */
    909         break;
    910     case snmpIfHCInBroadcastPkts:
    911         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op,
    912                           GRBCAr, &count);  /* broadcast */
    913         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op,
    914                           GRBCAPr, &count);  /* broadcast (preempt counter) */
    915         break;
    916     case snmpIfHCOutOctets:
    917         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op,
    918                           GTBYTr, &count);  /* transmit bytes */
    919         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op,
    920                           GTBYTPr, &count);  /* transmit bytes (preempt counter) */
    921         break;
    922     case snmpIfHCOutUcastPkts:
    923         if (soc_feature(unit, soc_feature_hw_stats_calc)) {
    924             BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op,
    925                               GTUCr, &count); /* All good packets */
    926             BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op,
    927                               GTUCPr, &count); /* All good packets (preempt counter) */
    928             if (!COUNT_OVR_ERRORS(unit)) {
    929                 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op,
    930                                   GTOVRr, &count);  /* + oversize pkts */
    931                 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op,
    932                                   GTOVRPr, &count);  /* + oversize pkts (preempt counter) */
    933             }
    934         } else {
    935             BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op,
    936                               GTPKTr, &count); /* all pkts xmited */
    937             BCM_STAT_REG_OPER(unit, port, sync_mode, reg_sub_op,
    938                               GTMCAr, &count); /* - multicast */
    939             BCM_STAT_REG_OPER(unit, port, sync_mode, reg_sub_op,
    940                               GTBCAr, &count); /* - broadcast */
    941             BCM_STAT_REG_OPER(unit, port, sync_mode, reg_sub_op,
    942                               GTFCSr, &count); /* - bad FCS */
    943             BCM_STAT_REG_OPER(unit, port, sync_mode, reg_sub_op,
    944                               GTJBRr, &count); /* - oversize, bad FCS */
    945 
    946             BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op,
    947                               GTPKTPr, &count); /* all pkts xmited (preempt counter) */
    948             BCM_STAT_REG_OPER(unit, port, sync_mode, reg_sub_op,
    949                               GTMCAPr, &count); /* - multicast (preempt counter) */
    950             BCM_STAT_REG_OPER(unit, port, sync_mode, reg_sub_op,
    951                               GTBCAPr, &count); /* - broadcast (preempt counter) */
    952             BCM_STAT_REG_OPER(unit, port, sync_mode, reg_sub_op,
    953                               GTFCSPr, &count); /* - bad FCS (preempt counter) */
    954             BCM_STAT_REG_OPER(unit, port, sync_mode, reg_sub_op,
    955                               GTJBRPr, &count); /* - oversize, bad FCS (preempt counter) */
    956             if (COUNT_OVR_ERRORS(unit)) {
    957                 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_sub_op,
    958                                   GTOVRr, &count); /* - oversize, good FCS */
    959                 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_sub_op,
    960                                   GTOVRPr, &count); /* - oversize, good FCS (preempt counter) */
    961             }
    962         }
    963         break;
    964     case snmpIfHCOutMulticastPkts:
    965         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op,
    966                           GTMCAr, &count);  /* multicast xmited */
    967         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op,
    968                           GTMCAPr, &count);  /* multicast xmited (preempt counter) */
    969         break;
    970     case snmpIfHCOutBroadcastPckts:
    971         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op,
    972                           GTBCAr, &count);  /* broadcast xmited */
    973         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op,
    974                           GTBCAPr, &count);  /* broadcast xmited (preempt counter) */
    975         break;
    976 
    977         /* *** RFC 2465 *** */
    978 
    979     case snmpIpv6IfStatsInReceives:
    980         if (soc_feature(unit, soc_feature_stat_xgs3)) {
    981             if (incl_non_ge_stat) {
    982                 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, RIPC6r, &count);
    983                 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, IMRP6r, &count);
    984             }
    985         }
    986         break;
    987     case snmpIpv6IfStatsInHdrErrors:
    988         if (soc_feature(unit, soc_feature_stat_xgs3)) {
    989             if (incl_non_ge_stat) {
    990                 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, RIPD6r, &count);
    991             }
    992         }
    993         break;
    994     case snmpIpv6IfStatsInAddrErrors:
    995         if (soc_feature(unit, soc_feature_stat_xgs3)) {
    996             if (incl_non_ge_stat) {
    997                 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op,
    998                                   RIPHE6r, &count);
    999             }
   1000         }
   1001         break;
   1002     case snmpIpv6IfStatsInDiscards:
   1003         if (soc_feature(unit, soc_feature_stat_xgs3)) {
   1004             if (incl_non_ge_stat) {
   1005                 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op,
   1006                                   RIPHE6r, &count);
   1007                 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op,
   1008                                   RIPD6r, &count);
   1009             }
   1010         }
   1011         break;
   1012     case snmpIpv6IfStatsOutForwDatagrams:
   1013         if (soc_feature(unit, soc_feature_stat_xgs3)) {
   1014             if (incl_non_ge_stat) {
   1015                 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op,
   1016                                   TDBGC0r, &count);
   1017             }
   1018         }
   1019         break;
   1020     case snmpIpv6IfStatsOutDiscards:
   1021         if (soc_feature(unit, soc_feature_stat_xgs3)) {
   1022             if (incl_non_ge_stat) {
   1023                 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op,
   1024                                   TDBGC1r, &count);
   1025             }
   1026         }
   1027         break;
   1028     case snmpIpv6IfStatsInMcastPkts:
   1029         if (soc_feature(unit, soc_feature_stat_xgs3)) {
   1030             if (incl_non_ge_stat) {
   1031                 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op,
   1032                                   IMRP6r, &count);
   1033             }
   1034         }
   1035         break;
   1036     case snmpIpv6IfStatsOutMcastPkts:
   1037         if (soc_feature(unit, soc_feature_stat_xgs3)) {
   1038             if (incl_non_ge_stat) {
   1039                 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op,
   1040                                   TDBGC2r, &count);
   1041             }
   1042         }
   1043         break;
   1044 
   1045         /* *** IEEE 802.1bb *** */
   1046     case snmpIeee8021PfcRequests:
   1047         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, GTXPPr, &count);
   1048         break;
   1049     case snmpIeee8021PfcIndications:
   1050         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, GRXPPr, &count);
   1051         break;
   1052 
   1053         /* *** RFC 1284 - unsupported in XGS *** */
   1054     case snmpDot3StatsInRangeLengthError:
   1055         break;
   1056 
   1057         /* *** RFC 4837 - unsupported in XGS *** */
   1058     case snmpDot3OmpEmulationCRC8Errors:
   1059     case snmpDot3MpcpRxGate:
   1060     case snmpDot3MpcpRxRegister:
   1061     case snmpDot3MpcpTxRegRequest:
   1062     case snmpDot3MpcpTxRegAck:
   1063     case snmpDot3MpcpTxReport:
   1064     case snmpDot3EponFecCorrectedBlocks:
   1065     case snmpDot3EponFecUncorrectableBlocks:
   1066         break;
   1067 
   1068         /* IPMC counters (broadcom specific) */
   1069 
   1070     case snmpBcmIPMCBridgedPckts:
   1071         if (soc_feature(unit, soc_feature_ip_mcast)) {
   1072             if (soc_feature(unit, soc_feature_stat_xgs3)) {
   1073                 if (incl_non_ge_stat) {
   1074                     BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op,
   1075                                       RDBGC1r, &count);
   1076                 }
   1077             }
   1078         }
   1079         break;
   1080     case snmpBcmIPMCRoutedPckts:
   1081         if (soc_feature(unit, soc_feature_ip_mcast)) {
   1082             if (soc_feature(unit, soc_feature_stat_xgs3)) {
   1083                 if (incl_non_ge_stat) {
   1084                     BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op,
   1085                                       IMRP4r, &count);
   1086                     BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op,
   1087                                       IMRP6r, &count);
   1088                 }
   1089             }
   1090         }
   1091         break;
   1092     case snmpBcmIPMCInDroppedPckts:
   1093         if (soc_feature(unit, soc_feature_ip_mcast)) {
   1094             if (soc_feature(unit, soc_feature_stat_xgs3)) {
   1095                 if (incl_non_ge_stat) {
   1096                     BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op,
   1097                                       RDBGC2r, &count);
   1098                 }
   1099             }
   1100         }
   1101         break;
   1102     case snmpBcmIPMCOutDroppedPckts:
   1103         if (soc_feature(unit, soc_feature_ip_mcast)) {
   1104             if (soc_feature(unit, soc_feature_stat_xgs3)) {
   1105                 if (incl_non_ge_stat) {
   1106                     BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op,
   1107                                       TDBGC5r, &count);
   1108                 }
   1109             }
   1110         }
   1111         break;
   1112 
   1113         /* EA (broadcom specific) - unsupported in XGS */
   1114     case snmpBcmPonInDroppedOctets:
   1115     case snmpBcmPonOutDroppedOctets:
   1116     case snmpBcmPonInDelayedOctets:
   1117     case snmpBcmPonOutDelayedOctets:
   1118     case snmpBcmPonInDelayedHundredUs:
   1119     case snmpBcmPonOutDelayedHundredUs:
   1120     case snmpBcmPonInFrameErrors:
   1121     case snmpBcmPonInOamFrames:
   1122     case snmpBcmPonOutOamFrames:
   1123     case snmpBcmPonOutUnusedOctets:
   1124         break;
   1125 
   1126     case snmpFcmPortClass3RxFrames:
   1127     case snmpFcmPortClass3TxFrames:
   1128     case snmpFcmPortClass3Discards:
   1129     case snmpFcmPortClass2RxFrames:
   1130     case snmpFcmPortClass2TxFrames:
   1131     case snmpFcmPortClass2Discards:
   1132     case snmpFcmPortInvalidCRCs:
   1133     case snmpFcmPortDelimiterErrors:
   1134         if (!soc_feature(unit, soc_feature_fcoe)) {
   1135             return BCM_E_UNAVAIL;
   1136         }
   1137         break;
   1138 
   1139     case snmpBcmMacMergeTxFrag:
   1140         if (soc_feature(unit, soc_feature_preemption)) {
   1141             BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op,
   1142                               GTNFFPr, &count);
   1143         } else {
   1144             return BCM_E_UNAVAIL;
   1145         }
   1146         break;
   1147 
   1148     case snmpBcmMacMergeTxVerifyFrame:
   1149         if (soc_feature(unit, soc_feature_preemption)) {
   1150             BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op,
   1151                               GTVMFPr, &count);
   1152         } else {
   1153             return BCM_E_UNAVAIL;
   1154         }
   1155         break;
   1156 
   1157     case snmpBcmMacMergeTxReplyFrame:
   1158         if (soc_feature(unit, soc_feature_preemption)) {
   1159             BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op,
   1160                               GTRMFPr, &count);
   1161         } else {
   1162             return BCM_E_UNAVAIL;
   1163         }
   1164         break;
   1165 
   1166     case snmpBcmMacMergeRxFrameAssErrors:
   1167         if (soc_feature(unit, soc_feature_preemption)) {
   1168             BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op,
   1169                               GTMFAEPr, &count);
   1170         } else {
   1171             return BCM_E_UNAVAIL;
   1172         }
   1173         break;
   1174 
   1175     case snmpBcmMacMergeRxFrameSmdErrors:
   1176         if (soc_feature(unit, soc_feature_preemption)) {
   1177             BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op,
   1178                               GRMSEPr, &count);
   1179         } else {
   1180             return BCM_E_UNAVAIL;
   1181         }
   1182         break;
   1183 
   1184     case snmpBcmMacMergeRxFrameAss:
   1185         if (soc_feature(unit, soc_feature_preemption)) {
   1186             BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op,
   1187                               GRMFAOPr, &count);
   1188         } else {
   1189             return BCM_E_UNAVAIL;
   1190         }
   1191         break;
   1192 
   1193     case snmpBcmMacMergeRxFrag:
   1194         if (soc_feature(unit, soc_feature_preemption)) {
   1195             BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op,
   1196                               GRNFFPr, &count);
   1197         } else {
   1198             return BCM_E_UNAVAIL;
   1199         }
   1200         break;
   1201 
   1202     case snmpBcmMacMergeRxVerifyFrame:
   1203         if (soc_feature(unit, soc_feature_preemption)) {
   1204             BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op,
   1205                               GRVMFPr, &count);
   1206         } else {
   1207             return BCM_E_UNAVAIL;
   1208         }
   1209         break;
   1210 
   1211     case snmpBcmMacMergeRxReplyFrame:
   1212         if (soc_feature(unit, soc_feature_preemption)) {
   1213             BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op,
   1214                               GRRMFPr, &count);
   1215         } else {
   1216             return BCM_E_UNAVAIL;
   1217         }
   1218         break;
   1219 
   1220     case snmpBcmMacMergeRxFinalFragSizeError:
   1221         if (soc_feature(unit, soc_feature_preemption)) {
   1222             BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op,
   1223                               GRFFSEPr, &count);
   1224         } else {
   1225             return BCM_E_UNAVAIL;
   1226         }
   1227         break;
   1228 
   1229     case snmpBcmMacMergeRxFragSizeError:
   1230         if (soc_feature(unit, soc_feature_preemption)) {
   1231             BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op,
   1232                               GRNFSEPr, &count);
   1233         } else {
   1234             return BCM_E_UNAVAIL;
   1235         }
   1236         break;
   1237 
   1238     case snmpBcmMacMergeRxDiscard:
   1239         if (soc_feature(unit, soc_feature_preemption)) {
   1240             BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op,
   1241                               GRDMFPr, &count);
   1242         } else {
   1243             return BCM_E_UNAVAIL;
   1244         }
   1245         break;
   1246 
   1247     case snmpBcmMacMergeHoldCount:
   1248         if (soc_feature(unit, soc_feature_preemption)) {
   1249             BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op,
   1250                               MACMERGERHOLDCOUNTr, &count);
   1251         } else {
   1252             return BCM_E_UNAVAIL;
   1253         }
   1254         break;
   1255 
   1256     /* Receive PFC Frame PriorityX XON to XOFF */
   1257     case snmpBcmRxPFCFrameXonPriority0:
   1258         if (SOC_REG_IS_VALID(unit, GRPFCOFF0r)) {
   1259             BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op,
   1260                               GRPFCOFF0r, &count);
   1261         }
   1262         break;
   1263 
   1264     case snmpBcmRxPFCFrameXonPriority1:
   1265         if (SOC_REG_IS_VALID(unit, GRPFCOFF1r)) {
   1266             BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op,
   1267                               GRPFCOFF1r, &count);
   1268         }
   1269         break;
   1270 
   1271     case snmpBcmRxPFCFrameXonPriority2:
   1272         if (SOC_REG_IS_VALID(unit, GRPFCOFF2r)) {
   1273             BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op,
   1274                               GRPFCOFF2r, &count);
   1275         }
   1276         break;
   1277 
   1278     case snmpBcmRxPFCFrameXonPriority3:
   1279         if (SOC_REG_IS_VALID(unit, GRPFCOFF3r)) {
   1280             BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op,
   1281                               GRPFCOFF3r, &count);
   1282         }
   1283         break;
   1284 
   1285     case snmpBcmRxPFCFrameXonPriority4:
   1286         if (SOC_REG_IS_VALID(unit, GRPFCOFF4r)) {
   1287             BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op,
   1288                               GRPFCOFF4r, &count);
   1289         }
   1290         break;
   1291 
   1292     case snmpBcmRxPFCFrameXonPriority5:
   1293         if (SOC_REG_IS_VALID(unit, GRPFCOFF5r)) {
   1294             BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op,
   1295                               GRPFCOFF5r, &count);
   1296         }
   1297         break;
   1298 
   1299     case snmpBcmRxPFCFrameXonPriority6:
   1300         if (SOC_REG_IS_VALID(unit, GRPFCOFF6r)) {
   1301             BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op,
   1302                               GRPFCOFF6r, &count);
   1303         }
   1304         break;
   1305 
   1306     case snmpBcmRxPFCFrameXonPriority7:
   1307         if (SOC_REG_IS_VALID(unit, GRPFCOFF7r)) {
   1308             BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op,
   1309                               GRPFCOFF7r, &count);
   1310         }
   1311         break;
   1312 
   1313     /* Receive PFC Frame Priority */
   1314     case snmpBcmRxPFCFramePriority0:
   1315         if (SOC_REG_IS_VALID(unit, GRPFC0r)) {
   1316             BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, GRPFC0r, &count);
   1317         }
   1318         break;
   1319 
   1320     case snmpBcmRxPFCFramePriority1:
   1321         if (SOC_REG_IS_VALID(unit, GRPFC1r)) {
   1322             BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, GRPFC1r, &count);
   1323         }
   1324         break;
   1325 
   1326     case snmpBcmRxPFCFramePriority2:
   1327         if (SOC_REG_IS_VALID(unit, GRPFC2r)) {
   1328             BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, GRPFC2r, &count);
   1329         }
   1330         break;
   1331 
   1332     case snmpBcmRxPFCFramePriority3:
   1333         if (SOC_REG_IS_VALID(unit, GRPFC3r)) {
   1334             BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, GRPFC3r, &count);
   1335         }
   1336         break;
   1337 
   1338     case snmpBcmRxPFCFramePriority4:
   1339         if (SOC_REG_IS_VALID(unit, GRPFC4r)) {
   1340             BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, GRPFC4r, &count);
   1341         }
   1342         break;
   1343 
   1344     case snmpBcmRxPFCFramePriority5:
   1345         if (SOC_REG_IS_VALID(unit, GRPFC5r)) {
   1346             BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, GRPFC5r, &count);
   1347         }
   1348         break;
   1349 
   1350     case snmpBcmRxPFCFramePriority6:
   1351         if (SOC_REG_IS_VALID(unit, GRPFC6r)) {
   1352             BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, GRPFC6r, &count);
   1353         }
   1354         break;
   1355 
   1356     case snmpBcmRxPFCFramePriority7:
   1357         if (SOC_REG_IS_VALID(unit, GRPFC7r)) {
   1358             BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, GRPFC7r, &count);
   1359         }
   1360         break;
   1361 
   1362     case snmpBcmRxDot3LengthMismatches:
   1363         if (SOC_REG_IS_VALID(unit, GRFLRr)) {
   1364             BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op,
   1365                               GRFLRr, &count); /* Good FCS, bad length */
   1366         } else {
   1367             return BCM_E_UNAVAIL;
   1368         }
   1369 
   1370         /* Preempt counter */
   1371         if (SOC_REG_IS_VALID(unit, GRFLRPr)) {
   1372             BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op,
   1373                               GRFLRPr, &count); /* Good FCS, bad length */
   1374         } else {
   1375             return BCM_E_UNAVAIL;
   1376         }
   1377         break;
   1378 
   1379     default:
   1380         if (type < snmpValCount) {
   1381             return BCM_E_UNAVAIL;
   1382         }
   1383         LOG_VERBOSE(BSL_LS_SOC_COMMON,
   1384                     (BSL_META_U(unit,
   1385                                 "bcmi_stat_preempt_ge_get_set: Statistic not supported: %d\n"), \
   1386                                 type));
   1387         return BCM_E_PARAM;
   1388     }
   1389 
   1390     if (stat_op == _BCM_STAT_GET) {
   1391         *val = count;
   1392     }
   1393 
   1394     return BCM_E_NONE;
   1395 }
   1396 
   1397 /*
   1398  * Function:
   1399  *      bcmi_stat_preempt_get_set
   1400  * Description:
   1401  *      Get the specified statistic for a port with preempt mib counter support shared
   1402  *      by XL/CL MAC.
   1403  * Parameters:
   1404  *      unit - PCI device unit number (driver internal)
   1405  *      port - zero-based port number
   1406  *      sync_mode - if 1 read hw counter else sw accumualated counter
   1407  *      type - SNMP statistics type (see stat.h)
   1408  *      val  - (OUT) 64 bit statistic counter value
   1409  * Returns:
   1410  *      BCM_E_NONE - Success.
   1411  *      BCM_E_PARAM - Illegal parameter.
   1412  *      BCM_E_INTERNAL - Chip access failure.
   1413  */
   1414 int
   1415 bcmi_stat_preempt_get_set(int unit, bcm_port_t port,
   1416                              int sync_mode, int stat_op,
   1417                              bcm_stat_val_t type, uint64 *val)
   1418 {
   1419     uint64 count, count1;
   1420     int reg_op = (stat_op == _BCM_STAT_GET)? _BCM_STAT_REG_ADD:
   1421                                              _BCM_STAT_REG_CLEAR;
   1422     int reg_sub_op = (stat_op == _BCM_STAT_GET)? _BCM_STAT_REG_SUB:
   1423                                                  _BCM_STAT_REG_CLEAR;
   1424 
   1425     COMPILER_REFERENCE(&count);  /* Work around PPC compiler bug */
   1426     COMPILER_64_ZERO(count);
   1427 
   1428     switch (type) {
   1429         /* *** RFC 1213 *** */
   1430     case snmpIfInOctets:
   1431         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, RBYTr, &count);
   1432         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, RRBYTr, &count);
   1433         /* preempt counter */
   1434         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, P_RBYTr, &count);
   1435         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, P_RRBYTr, &count);
   1436         break;
   1437     case snmpIfInUcastPkts:             /* Unicast frames */
   1438         if (COUNT_OVR_ERRORS(unit)) {
   1439             BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op,
   1440                               RUCAr, &count); /*unicast pkts rcvd */
   1441             BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op,
   1442                               P_RUCAr, &count); /*unicast pkts rcvd (preempt counter) */
   1443         } else {
   1444             BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op,
   1445                               RUCr, &count); /* unicast pkts rcvd */
   1446         }
   1447         break;
   1448     case snmpIfInNUcastPkts:             /* Non-unicast frames */
   1449         if (COUNT_OVR_ERRORS(unit)) {
   1450             BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op,
   1451                               RMCAr, &count); /* + multicast */
   1452             BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op,
   1453                               RBCAr, &count); /* + broadcast */
   1454             BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op,
   1455                               P_RMCAr, &count); /* + multicast (preempt counter) */
   1456             BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op,
   1457                               P_RBCAr, &count); /* + broadcast (preempt counter) */
   1458         } else {
   1459             BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op,
   1460                               RUCAr, &count); /* + unicast excl */
   1461             BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op,
   1462                               RMCAr, &count); /* + multicast */
   1463             BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op,
   1464                               RBCAr, &count); /* + broadcast */
   1465             BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op,
   1466                               ROVRr, &count); /* + oversize */
   1467             BCM_STAT_REG_OPER(unit, port, sync_mode, reg_sub_op,
   1468                               RUCr, &count); /* - unicast */
   1469 
   1470             BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op,
   1471                               P_RUCAr, &count); /* + unicast excl (preempt counter) */
   1472             BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op,
   1473                               P_RMCAr, &count); /* + multicast (preempt counter) */
   1474             BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op,
   1475                               P_RBCAr, &count); /* + broadcast (preempt counter) */
   1476             BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op,
   1477                               P_ROVRr, &count); /* + oversize (preempt counter) */
   1478         }
   1479         break;
   1480     case snmpIfInBroadcastPkts:          /* Broadcast frames */
   1481         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, RBCAr, &count);
   1482         /* preempt counter */
   1483         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, P_RBCAr, &count);
   1484         break;
   1485     case snmpIfInMulticastPkts:          /* Multicast frames */
   1486         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, RMCAr, &count);
   1487         /* preempt counter */
   1488         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, P_RMCAr, &count);
   1489         break;
   1490     case snmpIfInDiscards:           /* Dropped packets including aborted */
   1491         if (SOC_REG_IS_VALID(unit, RDBGC0r)) {
   1492             BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op,
   1493                           RDBGC0r, &count); /* Ingress drop conditions */
   1494         }
   1495         BCM_IF_ERROR_RETURN
   1496             (_bcm_stat_counter_non_dma_extra_get(unit,
   1497                                    SOC_COUNTER_NON_DMA_PORT_DROP_PKT_ING,
   1498                                                  port, &count1));
   1499         COMPILER_64_ADD_64(count, count1);
   1500         break;
   1501     case snmpIfInErrors: /* RX Errors or Receive packets - non-error frames */
   1502         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, RFCSr, &count);
   1503         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, RJBRr, &count);
   1504         /* preempt counter */
   1505         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, P_RFCSr, &count);
   1506         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, P_RJBRr, &count);
   1507         if (SOC_REG_IS_VALID(unit, RMTUEr)) {
   1508             BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, RMTUEr, &count);
   1509             /* preempt counter */
   1510             BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, P_RMTUEr, &count);
   1511         } else if (COUNT_OVR_ERRORS(unit)) {
   1512             BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, ROVRr, &count);
   1513             /* preempt counter */
   1514             BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, P_ROVRr, &count);
   1515         }
   1516         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, RRPKTr, &count);
   1517         /* preempt counter */
   1518         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, P_RRPKTr, &count);
   1519         break;
   1520     case snmpIfInUnknownProtos:
   1521         break;
   1522     case snmpIfOutOctets:
   1523         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, TBYTr, &count);
   1524         /* preempt counter */
   1525         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, P_TBYTr, &count);
   1526         break;
   1527     case snmpIfOutUcastPkts:             /* Unicast frames */
   1528         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, TUCAr, &count);
   1529         /* preempt counter */
   1530         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, P_TUCAr, &count);
   1531         break;
   1532     case snmpIfOutNUcastPkts:            /* Non-unicast frames */
   1533         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op,
   1534                           TMCAr, &count); /* + multicast */
   1535         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op,
   1536                           TBCAr, &count); /* + broadcast */
   1537         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op,
   1538                           P_TMCAr, &count); /* + multicast (preempt counter) */
   1539         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op,
   1540                           P_TBCAr, &count); /* + broadcast (preempt counter) */
   1541         break;
   1542     case snmpIfOutBroadcastPkts:         /* Broadcast frames */
   1543         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, TBCAr, &count);
   1544         /* preempt counter */
   1545         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, P_TBCAr, &count);
   1546         break;
   1547     case snmpIfOutMulticastPkts:         /* Multicast frames */
   1548         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, TMCAr, &count);
   1549         /* preempt counter */
   1550         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, P_TMCAr, &count);
   1551         break;
   1552     case snmpIfOutDiscards:              /* Aged packet counter */
   1553         if (SOC_REG_IS_VALID(unit, HOLDr)) {
   1554             BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op,
   1555                               HOLDr, &count);  /* L2 MTU drops */
   1556         } else if (SOC_REG_IS_VALID(unit, HOL_DROPr)) {
   1557             BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, HOL_DROPr, &count);
   1558         }
   1559         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, TDBGC3r, &count);
   1560         BCM_IF_ERROR_RETURN(
   1561             bcm_esw_cosq_stat_get(unit, port, BCM_COS_INVALID,
   1562                                   bcmCosqStatDroppedPackets, &count1));
   1563         COMPILER_64_ADD_64(count, count1);
   1564         break;
   1565     case snmpIfOutErrors:   /* Error packets could not be xmitted */
   1566         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, TERRr, &count);
   1567         /* preempt counter */
   1568         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, P_TERRr, &count);
   1569         break;
   1570     case snmpIfOutQLen:
   1571         {
   1572             uint32 qcount;
   1573             if (bcm_esw_port_queued_count_get(unit, port, &qcount) >= 0) {
   1574                 COMPILER_64_ADD_32(count, qcount);
   1575             }
   1576         }
   1577         break;
   1578     case snmpIpInReceives:
   1579         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, RIPC4r, &count);
   1580         break;
   1581     case snmpIpInHdrErrors:
   1582         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, RIPD4r, &count);
   1583         break;
   1584     case snmpIpForwDatagrams:
   1585         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, TDBGC4r, &count);
   1586         break;
   1587     case snmpIpInDiscards:
   1588         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, RIPHE4r, &count);
   1589         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, RIPD4r, &count);
   1590         break;
   1591 
   1592         /* *** RFC 1493 *** */
   1593 
   1594     case snmpDot1dBasePortDelayExceededDiscards:
   1595         break;
   1596     case snmpDot1dBasePortMtuExceededDiscards:
   1597         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, RMTUEr, &count);
   1598         /* preempt counter */
   1599         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, P_RMTUEr, &count);
   1600         break;
   1601     case snmpDot1dTpPortInFrames:
   1602         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, RPKTr, &count);
   1603         /* preempt counter */
   1604         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, P_RPKTr, &count);
   1605         break;
   1606     case snmpDot1dTpPortOutFrames:
   1607         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, TPKTr, &count);
   1608         /* preempt counter */
   1609         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, P_TPKTr, &count);
   1610         break;
   1611     case snmpDot1dPortInDiscards:
   1612         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, RDISCr, &count);
   1613         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, RIPD4r, &count);
   1614         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, RIPD6r, &count);
   1615         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, RPORTDr, &count);
   1616         break;
   1617 
   1618         /* *** RFC 1757 *** */
   1619 
   1620     case snmpEtherStatsDropEvents:
   1621         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, RDISCr, &count);
   1622         break;
   1623     case snmpEtherStatsOctets:
   1624         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, RBYTr, &count);
   1625         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, P_TBYTr, &count);
   1626         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op,
   1627                           RRBYTr, &count); /* Runts bytes */
   1628 
   1629         /* preempt counter */
   1630         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, RBYTr, &count);
   1631         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, P_TBYTr, &count);
   1632         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op,
   1633                           P_RRBYTr, &count); /* Runts bytes */
   1634         break;
   1635     case snmpEtherStatsPkts:
   1636         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, RPKTr, &count);
   1637         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, P_TPKTr, &count);
   1638         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op,
   1639                           XLMIB_RRPKTr, &count); /* Runts */
   1640 
   1641         /* preempt counter */
   1642         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, RPKTr, &count);
   1643         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, P_TPKTr, &count);
   1644         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op,
   1645                           XLPMIB_RRPKTr, &count); /* Runts */
   1646         break;
   1647     case snmpEtherStatsBroadcastPkts:
   1648         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, RBCAr, &count);
   1649         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, TBCAr, &count);
   1650         /* preempt counter */
   1651         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, P_RBCAr, &count);
   1652         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, P_TBCAr, &count);
   1653         break;
   1654     case snmpEtherStatsMulticastPkts:
   1655         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, RMCAr, &count);
   1656         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, TMCAr, &count);
   1657         /* preempt counter */
   1658         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, P_RMCAr, &count);
   1659         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, P_TMCAr, &count);
   1660         break;
   1661     case snmpEtherStatsCRCAlignErrors:
   1662         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, RFCSr, &count);
   1663         /* preempt counter */
   1664         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, P_RFCSr, &count);
   1665         break;
   1666     case snmpEtherStatsUndersizePkts:
   1667         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, RUNDr, &count);
   1668         /* preempt counter */
   1669         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, P_RUNDr, &count);
   1670         break;
   1671     case snmpEtherStatsOversizePkts:
   1672         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, ROVRr, &count);
   1673         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, TOVRr, &count);
   1674         /* preempt counter */
   1675         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, P_ROVRr, &count);
   1676         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, P_TOVRr, &count);
   1677         break;
   1678     case snmpEtherRxOversizePkts:
   1679         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, ROVRr, &count);
   1680         /* preempt counter */
   1681         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, P_ROVRr, &count);
   1682         break;
   1683     case snmpEtherTxOversizePkts:
   1684         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, TOVRr, &count);
   1685         /* preempt counter */
   1686         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, P_TOVRr, &count);
   1687         break;
   1688     case snmpEtherStatsFragments:
   1689         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, RFRGr, &count);
   1690         /* preempt counter */
   1691         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, P_RFRGr, &count);
   1692         break;
   1693     case snmpEtherStatsJabbers:
   1694         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, RJBRr, &count);
   1695         /* preempt counter */
   1696         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, P_RJBRr, &count);
   1697         break;
   1698     case snmpEtherStatsCollisions:
   1699         break;
   1700 
   1701         /* *** rfc1757 definition counts receive packet only *** */
   1702 
   1703     case snmpEtherStatsPkts64Octets:
   1704         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, R64r, &count);
   1705         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, T64r, &count);
   1706         /* preempt counter */
   1707         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, P_R64r, &count);
   1708         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, P_T64r, &count);
   1709         break;
   1710     case snmpEtherStatsPkts65to127Octets:
   1711         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, R127r, &count);
   1712         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, T127r, &count);
   1713         /* preempt counter */
   1714         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, P_R127r, &count);
   1715         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, P_T127r, &count);
   1716         break;
   1717     case snmpEtherStatsPkts128to255Octets:
   1718         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, R255r, &count);
   1719         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, T255r, &count);
   1720         /* preempt counter */
   1721         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, P_R255r, &count);
   1722         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, P_T255r, &count);
   1723         break;
   1724     case snmpEtherStatsPkts256to511Octets:
   1725         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, R511r, &count);
   1726         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, T511r, &count);
   1727         /* preempt counter */
   1728         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, P_R511r, &count);
   1729         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, P_T511r, &count);
   1730         break;
   1731     case snmpEtherStatsPkts512to1023Octets:
   1732         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, R1023r, &count);
   1733         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, T1023r, &count);
   1734         /* preempt counter */
   1735         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, P_R1023r, &count);
   1736         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, P_T1023r, &count);
   1737         break;
   1738     case snmpEtherStatsPkts1024to1518Octets:
   1739         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, R1518r, &count);
   1740         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, T1518r, &count);
   1741         /* preempt counter */
   1742         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, P_R1518r, &count);
   1743         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, P_T1518r, &count);
   1744         break;
   1745     case snmpBcmEtherStatsPkts1519to1522Octets: /* not in rfc1757 */
   1746         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, RMGVr, &count);
   1747         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, TMGVr, &count);
   1748         /* preempt counter */
   1749         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, P_RMGVr, &count);
   1750         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, P_TMGVr, &count);
   1751         break;
   1752     case snmpBcmEtherStatsPkts1522to2047Octets: /* not in rfc1757 */
   1753         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, R2047r, &count);
   1754         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_sub_op, RMGVr, &count);
   1755         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, T2047r, &count);
   1756         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_sub_op, TMGVr, &count);
   1757 
   1758         /* preempt counter */
   1759         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, P_R2047r, &count);
   1760         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_sub_op, P_RMGVr, &count);
   1761         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, P_T2047r, &count);
   1762         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_sub_op, P_TMGVr, &count);
   1763         break;
   1764     case snmpBcmEtherStatsPkts2048to4095Octets: /* not in rfc1757 */
   1765         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, R4095r, &count);
   1766         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, T4095r, &count);
   1767         /* preempt counter */
   1768         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, P_R4095r, &count);
   1769         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, P_T4095r, &count);
   1770         break;
   1771     case snmpBcmEtherStatsPkts4095to9216Octets: /* not in rfc1757 */
   1772         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, R9216r, &count);
   1773         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, T9216r, &count);
   1774         /* preempt counter */
   1775         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, P_R9216r, &count);
   1776         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, P_T9216r, &count);
   1777         break;
   1778     case snmpBcmEtherStatsPkts9217to16383Octets: /* not in rfc1757 */
   1779         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, R16383r, &count);
   1780         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, T16383r, &count);
   1781         /* preempt counter */
   1782         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, P_R16383r, &count);
   1783         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, P_T16383r, &count);
   1784         break;
   1785 
   1786     case snmpBcmReceivedPkts64Octets:
   1787         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, R64r, &count);
   1788         /* preempt counter*/
   1789         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, P_R64r, &count);
   1790         break;
   1791     case snmpBcmReceivedPkts65to127Octets:
   1792         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, R127r, &count);
   1793         /* preempt counter */
   1794         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, P_R127r, &count);
   1795         break;
   1796     case snmpBcmReceivedPkts128to255Octets:
   1797         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, R255r, &count);
   1798         /* preempt counter */
   1799         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, P_R255r, &count);
   1800         break;
   1801     case snmpBcmReceivedPkts256to511Octets:
   1802         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, R511r, &count);
   1803         /* preempt counter*/ 
   1804         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, P_R511r, &count);
   1805         break;
   1806     case snmpBcmReceivedPkts512to1023Octets:
   1807         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, R1023r, &count);
   1808         /* preempt counter */
   1809         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, P_R1023r, &count);
   1810         break;
   1811     case snmpBcmReceivedPkts1024to1518Octets:
   1812         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, R1518r, &count);
   1813         /* preempt counter */
   1814         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, P_R1518r, &count);
   1815         break;
   1816     case snmpBcmReceivedPkts1519to2047Octets:
   1817         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, R2047r, &count);
   1818         /* preempt counter */
   1819         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, P_R2047r, &count);
   1820         break;
   1821     case snmpBcmReceivedPkts2048to4095Octets:
   1822         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, R4095r, &count);
   1823         /* preempt counter */
   1824         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, P_R4095r, &count);
   1825         break;
   1826     case snmpBcmReceivedPkts4095to9216Octets:
   1827         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, R9216r, &count);
   1828         /* preempt counter */
   1829         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, P_R9216r, &count);
   1830         break;
   1831     case snmpBcmReceivedPkts9217to16383Octets:
   1832         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, R16383r, &count);
   1833         /* preempt counter */
   1834         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, P_R16383r, &count);
   1835         break;
   1836 
   1837     case snmpBcmTransmittedPkts64Octets:
   1838         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, T64r, &count);
   1839         /* preempt counter */
   1840         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, P_T64r, &count);
   1841         break;
   1842     case snmpBcmTransmittedPkts65to127Octets:
   1843         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, T127r, &count);
   1844         /* preempt counter */
   1845         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, P_T127r, &count);
   1846         break;
   1847     case snmpBcmTransmittedPkts128to255Octets:
   1848         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, T255r, &count);
   1849         /* preempt counter */
   1850         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, P_T255r, &count);
   1851         break;
   1852     case snmpBcmTransmittedPkts256to511Octets:
   1853         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, T511r, &count);
   1854         /* preempt counter */
   1855         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, P_T511r, &count);
   1856         break;
   1857     case snmpBcmTransmittedPkts512to1023Octets:
   1858         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, T1023r, &count);
   1859         /* preempt counter */
   1860         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, P_T1023r, &count);
   1861         break;
   1862     case snmpBcmTransmittedPkts1024to1518Octets:
   1863         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, T1518r, &count);
   1864         /* preempt counter */
   1865         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, P_T1518r, &count);
   1866         break;
   1867     case snmpBcmTransmittedPkts1519to2047Octets:
   1868         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, T2047r, &count);
   1869         /* preempt counter */
   1870         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, P_T2047r, &count);
   1871         break;
   1872     case snmpBcmTransmittedPkts2048to4095Octets:
   1873         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, T4095r, &count);
   1874         /* preempt counter */
   1875         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, P_T4095r, &count);
   1876         break;
   1877     case snmpBcmTransmittedPkts4095to9216Octets:
   1878         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, T9216r, &count);
   1879         /* preempt counter */
   1880         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, P_T9216r, &count);
   1881         break;
   1882     case snmpBcmTransmittedPkts9217to16383Octets:
   1883         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, T16383r, &count);
   1884         /* preempt counter */
   1885         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, P_T16383r, &count);
   1886         break;
   1887 
   1888     case snmpEtherStatsTXNoErrors:
   1889         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, TPOKr, &count);
   1890         /* preempt counter */
   1891         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, P_TPOKr, &count);
   1892         break;
   1893     case snmpEtherStatsRXNoErrors:
   1894         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, RPOKr, &count);
   1895         /* preempt counter */
   1896         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, P_RPOKr, &count);
   1897         break;
   1898 
   1899         /* *** RFC 2665 *** */
   1900 
   1901     case snmpDot3StatsAlignmentErrors:
   1902         break;
   1903     case snmpDot3StatsFCSErrors:
   1904         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, XLMIB_RFCSr, &count);
   1905         /* preempt counter */
   1906         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, XLPMIB_RFCSr, &count);
   1907         break;
   1908     case snmpDot3StatsSingleCollisionFrames:
   1909     case snmpDot3StatsMultipleCollisionFrames:
   1910     case snmpDot3StatsSQETTestErrors:
   1911     case snmpDot3StatsDeferredTransmissions:
   1912     case snmpDot3StatsLateCollisions:
   1913     case snmpDot3StatsExcessiveCollisions:
   1914         break;
   1915     case snmpDot3StatsInternalMacTransmitErrors:
   1916         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, TUFLr, &count);
   1917         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, TERRr, &count);
   1918         /* preempt counter */
   1919         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, P_TUFLr, &count);
   1920         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, P_TERRr, &count);
   1921         break;
   1922     case snmpDot3StatsCarrierSenseErrors:
   1923         break;
   1924     case snmpDot3StatsFrameTooLongs:
   1925         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, RMTUEr, &count);
   1926         /* preempt counter */
   1927         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, P_RMTUEr, &count);
   1928         break;
   1929     case snmpDot3StatsInternalMacReceiveErrors:
   1930         break;
   1931     case snmpDot3StatsSymbolErrors:
   1932         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, RERPKTr, &count);
   1933         /* preempt counter */
   1934         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, P_RERPKTr, &count);
   1935         break;
   1936     case snmpDot3ControlInUnknownOpcodes:
   1937         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, RXUOr, &count);
   1938         /* preempt counter */
   1939         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, P_RXUOr, &count);
   1940         break;
   1941     case snmpDot3InPauseFrames:
   1942         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, RXPFr, &count);
   1943         /* preempt counter */
   1944         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, P_RXPFr, &count);
   1945         break;
   1946     case snmpDot3OutPauseFrames:
   1947         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, TXPFr, &count);
   1948         /* preempt counter */
   1949         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, P_TXPFr, &count);
   1950         break;
   1951 
   1952         /* *** RFC 2233 high capacity versions of RFC1213 objects *** */
   1953 
   1954     case snmpIfHCInOctets:
   1955         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, RBYTr, &count);
   1956         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, RRBYTr, &count);
   1957         /* preempt counter */
   1958         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, P_RBYTr, &count);
   1959         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, P_RRBYTr, &count);
   1960         break;
   1961     case snmpIfHCInUcastPkts:
   1962         if (COUNT_OVR_ERRORS(unit)) {
   1963             BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op,
   1964                               RUCAr, &count);  /* unicast pkts rcvd */
   1965             BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op,
   1966                               P_RUCAr, &count);  /* unicast pkts rcvd (preempt counter) */
   1967         } else {
   1968             BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op,
   1969                               RUCr, &count);  /* unicast pkts rcvd */
   1970         }
   1971         break;
   1972     case snmpIfHCInMulticastPkts:
   1973         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, RMCAr, &count);
   1974         /* preempt counter */
   1975         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, P_RMCAr, &count);
   1976         break;
   1977     case snmpIfHCInBroadcastPkts:
   1978         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, RBCAr, &count);
   1979         /* preempt counter */
   1980         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, P_RBCAr, &count);
   1981         break;
   1982     case snmpIfHCOutOctets:
   1983         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, TBYTr, &count);
   1984         /* preempt counter */
   1985         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, P_TBYTr, &count);
   1986         break;
   1987     case snmpIfHCOutUcastPkts:
   1988         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, TUCAr, &count);
   1989         /* preempt counter */
   1990         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, P_TUCAr, &count);
   1991         break;
   1992     case snmpIfHCOutMulticastPkts:
   1993         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, TMCAr, &count);
   1994         /* preempt counter */
   1995         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, P_TMCAr, &count);
   1996         break;
   1997     case snmpIfHCOutBroadcastPckts:
   1998         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, TBCAr, &count);
   1999         /* preempt counter */
   2000         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, P_TBCAr, &count);
   2001         break;
   2002 
   2003         /* *** RFC 2465 *** */
   2004 
   2005     case snmpIpv6IfStatsInReceives:
   2006         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, RIPC6r, &count);
   2007         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, IMRP6r, &count);
   2008         break;
   2009     case snmpIpv6IfStatsInHdrErrors:
   2010         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, RIPD6r, &count);
   2011         break;
   2012     case snmpIpv6IfStatsInAddrErrors:
   2013         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, RIPHE6r, &count);
   2014         break;
   2015     case snmpIpv6IfStatsInDiscards:
   2016         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, RIPHE6r, &count);
   2017         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, RIPD6r, &count);
   2018         break;
   2019     case snmpIpv6IfStatsOutForwDatagrams:
   2020         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, TDBGC0r, &count);
   2021         break;
   2022     case snmpIpv6IfStatsOutDiscards:
   2023         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, TDBGC1r, &count);
   2024         break;
   2025     case snmpIpv6IfStatsInMcastPkts:
   2026         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, IMRP6r, &count);
   2027         break;
   2028     case snmpIpv6IfStatsOutMcastPkts:
   2029         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, TDBGC2r, &count);
   2030         break;
   2031 
   2032         /* *** IEEE 802.1bb *** */
   2033     case snmpIeee8021PfcRequests:
   2034         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, TXPPr, &count);
   2035         /* preempt counter */
   2036         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, P_TXPPr, &count);
   2037         break;
   2038     case snmpIeee8021PfcIndications:
   2039         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, RXPPr, &count);
   2040         /* preempt counter */
   2041         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, P_RXPPr, &count);
   2042         break;
   2043 
   2044         /* *** RFC 1284 - unsupported in XGS *** */
   2045     case snmpDot3StatsInRangeLengthError:
   2046         break;
   2047 
   2048         /* *** RFC 4837 - unsupported in XGS *** */
   2049     case snmpDot3OmpEmulationCRC8Errors:
   2050     case snmpDot3MpcpRxGate:
   2051     case snmpDot3MpcpRxRegister:
   2052     case snmpDot3MpcpTxRegRequest:
   2053     case snmpDot3MpcpTxRegAck:
   2054     case snmpDot3MpcpTxReport:
   2055     case snmpDot3EponFecCorrectedBlocks:
   2056     case snmpDot3EponFecUncorrectableBlocks:
   2057         break;
   2058 
   2059         /* IPMC counters (broadcom specific) */
   2060 
   2061     case snmpBcmIPMCBridgedPckts:
   2062         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, RDBGC1r, &count);
   2063         break;
   2064     case snmpBcmIPMCRoutedPckts:
   2065         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, IMRP4r, &count);
   2066         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, IMRP6r, &count);
   2067         break;
   2068     case snmpBcmIPMCInDroppedPckts:
   2069         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, RDBGC2r, &count);
   2070         break;
   2071     case snmpBcmIPMCOutDroppedPckts:
   2072         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, TDBGC5r, &count);
   2073         break;
   2074 
   2075         /* EA (broadcom specific) - unsupported in XGS */
   2076     case snmpBcmPonInDroppedOctets:
   2077     case snmpBcmPonOutDroppedOctets:
   2078     case snmpBcmPonInDelayedOctets:
   2079     case snmpBcmPonOutDelayedOctets:
   2080     case snmpBcmPonInDelayedHundredUs:
   2081     case snmpBcmPonOutDelayedHundredUs:
   2082     case snmpBcmPonInFrameErrors:
   2083     case snmpBcmPonInOamFrames:
   2084     case snmpBcmPonOutOamFrames:
   2085     case snmpBcmPonOutUnusedOctets:
   2086         break;
   2087 
   2088     /* Vlan Tag Frame Counters */
   2089     case snmpBcmRxVlanTagFrame:
   2090         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, RVLNr, &count);
   2091         break;
   2092     case snmpBcmRxDoubleVlanTagFrame:
   2093         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, RDVLNr, &count);
   2094         break;
   2095     case snmpBcmTxVlanTagFrame:
   2096         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, TVLNr, &count);
   2097         break;
   2098     case snmpBcmTxDoubleVlanTagFrame:
   2099         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, TDVLNr, &count);
   2100         break;
   2101 
   2102     /* PFC Control Frame Counters */
   2103     case snmpBcmRxPFCControlFrame:
   2104         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, RXPPr, &count);
   2105         /* preempt counter */
   2106         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, P_RXPPr, &count);
   2107         break;
   2108 
   2109     case snmpBcmTxPFCControlFrame:
   2110         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, TXPPr, &count);
   2111         /* preempt counter */
   2112         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, P_TXPPr, &count);
   2113         break;
   2114 
   2115     /* Receive PFC Frame Priority 0 XON to XOFF */
   2116     case snmpBcmRxPFCFrameXonPriority0:
   2117         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, RPFCOFF0r, &count);
   2118         break;
   2119 
   2120     case snmpBcmRxPFCFrameXonPriority1:
   2121         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, RPFCOFF1r, &count);
   2122         break;
   2123 
   2124     case snmpBcmRxPFCFrameXonPriority2:
   2125         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, RPFCOFF2r, &count);
   2126         break;
   2127 
   2128     case snmpBcmRxPFCFrameXonPriority3:
   2129         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, RPFCOFF3r, &count);
   2130         break;
   2131 
   2132     case snmpBcmRxPFCFrameXonPriority4:
   2133         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, RPFCOFF4r, &count);
   2134         break;
   2135 
   2136     case snmpBcmRxPFCFrameXonPriority5:
   2137         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, RPFCOFF5r, &count);
   2138         break;
   2139 
   2140     case snmpBcmRxPFCFrameXonPriority6:
   2141         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, RPFCOFF6r, &count);
   2142         break;
   2143 
   2144     case snmpBcmRxPFCFrameXonPriority7:
   2145         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, RPFCOFF7r, &count);
   2146         break;
   2147 
   2148     /* Receive PFC Frame Priority */
   2149     case snmpBcmRxPFCFramePriority0:
   2150         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, RPFC0r, &count);
   2151         /* preempt counter */
   2152         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, P_RPFC0r, &count);
   2153         break;
   2154 
   2155     case snmpBcmRxPFCFramePriority1:
   2156         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, RPFC1r, &count);
   2157         /* preempt counter */
   2158         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, P_RPFC1r, &count);
   2159         break;
   2160 
   2161     case snmpBcmRxPFCFramePriority2:
   2162         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, RPFC2r, &count);
   2163         /* preempt counter */
   2164         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, P_RPFC2r, &count);
   2165         break;
   2166 
   2167     case snmpBcmRxPFCFramePriority3:
   2168         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, RPFC3r, &count);
   2169         /* preempt counter */
   2170         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, P_RPFC3r, &count);
   2171         break;
   2172 
   2173     case snmpBcmRxPFCFramePriority4:
   2174         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, RPFC4r, &count);
   2175         /* preempt counter */
   2176         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, P_RPFC4r, &count);
   2177         break;
   2178 
   2179     case snmpBcmRxPFCFramePriority5:
   2180         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, RPFC5r, &count);
   2181         /* preempt counter */
   2182         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, P_RPFC5r, &count);
   2183         break;
   2184 
   2185     case snmpBcmRxPFCFramePriority6:
   2186         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, RPFC6r, &count);
   2187         /* preempt counter */
   2188         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, P_RPFC6r, &count);
   2189         break;
   2190 
   2191     case snmpBcmRxPFCFramePriority7:
   2192         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, RPFC7r, &count);
   2193         /* preempt counter */
   2194         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, P_RPFC7r, &count);
   2195         break;
   2196 
   2197     /* Transmit PFC Frame Priority */
   2198     case snmpBcmTxPFCFramePriority0:
   2199         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, TPFC0r, &count);
   2200         /* preempt counter */
   2201         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, P_TPFC0r, &count);
   2202         break;
   2203 
   2204     case snmpBcmTxPFCFramePriority1:
   2205         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, TPFC1r, &count);
   2206         /* preempt counter */
   2207         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, XLPMIB_TPFC1r, &count);
   2208         break;
   2209 
   2210     case snmpBcmTxPFCFramePriority2:
   2211         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, TPFC2r, &count);
   2212         /* preempt counter */
   2213         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, P_TPFC2r, &count);
   2214         break;
   2215 
   2216     case snmpBcmTxPFCFramePriority3:
   2217         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, TPFC3r, &count);
   2218         /* preempt counter */
   2219         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, P_TPFC3r, &count);
   2220         break;
   2221 
   2222     case snmpBcmTxPFCFramePriority4:
   2223         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, TPFC4r, &count);
   2224         /* preempt counter */
   2225         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, P_TPFC4r, &count);
   2226         break;
   2227 
   2228     case snmpBcmTxPFCFramePriority5:
   2229         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, TPFC5r, &count);
   2230         /* preempt counter */
   2231         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, P_TPFC5r, &count);
   2232         break;
   2233 
   2234     case snmpBcmTxPFCFramePriority6:
   2235         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, TPFC6r, &count);
   2236         /* preempt counter */
   2237         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, P_TPFC6r, &count);
   2238         break;
   2239 
   2240     case snmpBcmTxPFCFramePriority7:
   2241         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, TPFC7r, &count);
   2242         /* preempt counter */
   2243         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, P_TPFC7r, &count);
   2244         break;
   2245 
   2246     case snmpFcmPortClass3RxFrames:
   2247     case snmpFcmPortClass3TxFrames:
   2248     case snmpFcmPortClass3Discards:
   2249     case snmpFcmPortClass2RxFrames:
   2250     case snmpFcmPortClass2TxFrames:
   2251     case snmpFcmPortClass2Discards:
   2252     case snmpFcmPortInvalidCRCs:
   2253     case snmpFcmPortDelimiterErrors:
   2254         if (!soc_feature(unit, soc_feature_fcoe)) {
   2255             return BCM_E_UNAVAIL;
   2256         }
   2257         break;
   2258 
   2259     case snmpBcmMacMergeTxFrag:
   2260         if (soc_feature(unit, soc_feature_preemption)) {
   2261             BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op,
   2262                               P_TMFCr, &count);
   2263         } else {
   2264             return BCM_E_UNAVAIL;
   2265         }
   2266         break;
   2267 
   2268     case snmpBcmMacMergeTxVerifyFrame:
   2269         if (soc_feature(unit, soc_feature_preemption)) {
   2270             BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op,
   2271                               TVERIFYr, &count);
   2272         } else {
   2273             return BCM_E_UNAVAIL;
   2274         }
   2275         break;
   2276 
   2277     case snmpBcmMacMergeTxReplyFrame:
   2278         if (soc_feature(unit, soc_feature_preemption)) {
   2279             BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op,
   2280                               TVERIFYr, &count);
   2281         } else {
   2282             return BCM_E_UNAVAIL;
   2283         }
   2284         break;
   2285 
   2286     case snmpBcmMacMergeRxFrameAssErrors:
   2287         if (soc_feature(unit, soc_feature_preemption)) {
   2288             BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op,
   2289                               P_RMFAEr, &count);
   2290         } else {
   2291             return BCM_E_UNAVAIL;
   2292         }
   2293         break;
   2294 
   2295     case snmpBcmMacMergeRxFrameSmdErrors:
   2296         if (soc_feature(unit, soc_feature_preemption)) {
   2297             BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op,
   2298                               P_RMFSEr, &count);
   2299         } else {
   2300             return BCM_E_UNAVAIL;
   2301         }
   2302         break;
   2303 
   2304     case snmpBcmMacMergeRxFrameAss:
   2305         if (soc_feature(unit, soc_feature_preemption)) {
   2306             BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op,
   2307                               P_RMFAOr, &count);
   2308         } else {
   2309             return BCM_E_UNAVAIL;
   2310         }
   2311         break;
   2312 
   2313     case snmpBcmMacMergeRxFrag:
   2314         if (soc_feature(unit, soc_feature_preemption)) {
   2315             BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op,
   2316                               P_RMFCr, &count);
   2317         } else {
   2318             return BCM_E_UNAVAIL;
   2319         }
   2320         break;
   2321 
   2322     case snmpBcmMacMergeRxVerifyFrame:
   2323         if (soc_feature(unit, soc_feature_preemption)) {
   2324             BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op,
   2325                               RVERIFYr, &count);
   2326         } else {
   2327             return BCM_E_UNAVAIL;
   2328         }
   2329         break;
   2330 
   2331     case snmpBcmMacMergeRxReplyFrame:
   2332         if (soc_feature(unit, soc_feature_preemption)) {
   2333             BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op,
   2334                               RREPLYr, &count);
   2335         } else {
   2336             return BCM_E_UNAVAIL;
   2337         }
   2338         break;
   2339 
   2340     case snmpBcmMacMergeRxFinalFragSizeError:
   2341         if (soc_feature(unit, soc_feature_preemption)) {
   2342             BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op,
   2343                               P_RFFMSEr, &count);
   2344         } else {
   2345             return BCM_E_UNAVAIL;
   2346         }
   2347         break;
   2348 
   2349     case snmpBcmMacMergeRxFragSizeError:
   2350         if (soc_feature(unit, soc_feature_preemption)) {
   2351             BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op,
   2352                               P_RNFFMSEr, &count);
   2353         } else {
   2354             return BCM_E_UNAVAIL;
   2355         }
   2356         break;
   2357 
   2358     case snmpBcmMacMergeRxDiscard:
   2359         if (soc_feature(unit, soc_feature_preemption)) {
   2360             BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op,
   2361                               P_RMDISr, &count);
   2362         } else {
   2363             return BCM_E_UNAVAIL;
   2364         }
   2365         break;
   2366 
   2367     case snmpBcmMacMergeHoldCount:
   2368             return BCM_E_UNAVAIL;
   2369         break;
   2370 
   2371     case snmpBcmRxDot3LengthMismatches:
   2372         if (SOC_REG_IS_VALID(unit, P_RFLRr)) {
   2373             BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op,
   2374                               P_RFLRr, &count); /* Good FCS, bad length */
   2375         } else {
   2376             return BCM_E_UNAVAIL;
   2377         }
   2378         break;
   2379 
   2380     default:
   2381         if (type < snmpValCount) {
   2382             return BCM_E_UNAVAIL;
   2383         }
   2384         LOG_VERBOSE(BSL_LS_SOC_COMMON,
   2385                     (BSL_META_U(unit,
   2386                                 "bcmi_stat_preempt_xl_get_set: Statistic not supported: %d\n"), \
   2387                                 type));
   2388         return BCM_E_PARAM;
   2389     }
   2390 
   2391     if (stat_op == _BCM_STAT_GET) {
   2392         *val = count;
   2393     }
   2394 
   2395     return BCM_E_NONE;
   2396 }
   2397 /*
   2398  * Function:
   2399  *      bcmi_stat_preempt_xl_get_set
   2400  * Description:
   2401  *      Get the specified statistic for a port with preempt mib counter support shared
   2402  *      by XL MAC.
   2403  * Parameters:
   2404  *      unit - PCI device unit number (driver internal)
   2405  *      port - zero-based port number
   2406  *      sync_mode - if 1 read hw counter else sw accumualated counter
   2407  *      type - SNMP statistics type (see stat.h)
   2408  *      val  - (OUT) 64 bit statistic counter value
   2409  * Returns:
   2410  *      BCM_E_NONE - Success.
   2411  *      BCM_E_PARAM - Illegal parameter.
   2412  *      BCM_E_INTERNAL - Chip access failure.
   2413  */
   2414 int
   2415 bcmi_stat_preempt_xl_get_set(int unit, bcm_port_t port,
   2416                              int sync_mode, int stat_op,
   2417                              bcm_stat_val_t type, uint64 *val)
   2418 {
   2419     uint64 count, count1;
   2420     int reg_op = (stat_op == _BCM_STAT_GET)? _BCM_STAT_REG_ADD:
   2421                                              _BCM_STAT_REG_CLEAR;
   2422     int reg_sub_op = (stat_op == _BCM_STAT_GET)? _BCM_STAT_REG_SUB:
   2423                                                  _BCM_STAT_REG_CLEAR;
   2424 
   2425     COMPILER_REFERENCE(&count);  /* Work around PPC compiler bug */
   2426     COMPILER_64_ZERO(count);
   2427 
   2428     switch (type) {
   2429         /* *** RFC 1213 *** */
   2430     case snmpIfInOctets:
   2431         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, XLMIB_RBYTr, &count);
   2432         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, XLMIB_RRBYTr, &count);
   2433         /* preempt counter */
   2434         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, XLPMIB_RBYTr, &count);
   2435         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, XLPMIB_RRBYTr, &count);
   2436         break;
   2437     case snmpIfInUcastPkts:             /* Unicast frames */
   2438         if (COUNT_OVR_ERRORS(unit)) {
   2439             BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op,
   2440                               XLMIB_RUCAr, &count); /*unicast pkts rcvd */
   2441             BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op,
   2442                               XLPMIB_RUCAr, &count); /*unicast pkts rcvd (preempt counter) */
   2443         } else {
   2444             BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op,
   2445                               RUCr, &count); /* unicast pkts rcvd */
   2446         }
   2447         break;
   2448     case snmpIfInNUcastPkts:             /* Non-unicast frames */
   2449         if (COUNT_OVR_ERRORS(unit)) {
   2450             BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op,
   2451                               XLMIB_RMCAr, &count); /* + multicast */
   2452             BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op,
   2453                               XLMIB_RBCAr, &count); /* + broadcast */
   2454             BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op,
   2455                               XLPMIB_RMCAr, &count); /* + multicast (preempt counter) */
   2456             BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op,
   2457                               XLPMIB_RBCAr, &count); /* + broadcast (preempt counter) */
   2458         } else {
   2459             BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op,
   2460                               XLMIB_RUCAr, &count); /* + unicast excl */
   2461             BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op,
   2462                               XLMIB_RMCAr, &count); /* + multicast */
   2463             BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op,
   2464                               XLMIB_RBCAr, &count); /* + broadcast */
   2465             BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op,
   2466                               XLMIB_ROVRr, &count); /* + oversize */
   2467             BCM_STAT_REG_OPER(unit, port, sync_mode, reg_sub_op,
   2468                               RUCr, &count); /* - unicast */
   2469 
   2470             BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op,
   2471                               XLPMIB_RUCAr, &count); /* + unicast excl (preempt counter) */
   2472             BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op,
   2473                               XLPMIB_RMCAr, &count); /* + multicast (preempt counter) */
   2474             BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op,
   2475                               XLPMIB_RBCAr, &count); /* + broadcast (preempt counter) */
   2476             BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op,
   2477                               XLPMIB_ROVRr, &count); /* + oversize (preempt counter) */
   2478         }
   2479         break;
   2480     case snmpIfInBroadcastPkts:          /* Broadcast frames */
   2481         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, XLMIB_RBCAr, &count);
   2482         /* preempt counter */
   2483         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, XLPMIB_RBCAr, &count);
   2484         break;
   2485     case snmpIfInMulticastPkts:          /* Multicast frames */
   2486         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, XLMIB_RMCAr, &count);
   2487         /* preempt counter */
   2488         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, XLPMIB_RMCAr, &count);
   2489         break;
   2490     case snmpIfInDiscards:           /* Dropped packets including aborted */
   2491         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op,
   2492                           RDBGC0r, &count); /* Ingress drop conditions */
   2493         BCM_IF_ERROR_RETURN
   2494             (_bcm_stat_counter_non_dma_extra_get(unit,
   2495                                    SOC_COUNTER_NON_DMA_PORT_DROP_PKT_ING,
   2496                                                  port, &count1));
   2497         COMPILER_64_ADD_64(count, count1);
   2498         break;
   2499     case snmpIfInErrors: /* RX Errors or Receive packets - non-error frames */
   2500         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, XLMIB_RFCSr, &count);
   2501         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, XLMIB_RJBRr, &count);
   2502         /* preempt counter */
   2503         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, XLPMIB_RFCSr, &count);
   2504         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, XLPMIB_RJBRr, &count);
   2505         if (SOC_REG_IS_VALID(unit, XLMIB_RMTUEr)) {
   2506             BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, XLMIB_RMTUEr, &count);
   2507             /* preempt counter */
   2508             BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, XLPMIB_RMTUEr, &count);
   2509         } else if (COUNT_OVR_ERRORS(unit)) {
   2510             BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, XLMIB_ROVRr, &count);
   2511             /* preempt counter */
   2512             BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, XLPMIB_ROVRr, &count);
   2513         }
   2514         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, XLMIB_RRPKTr, &count);
   2515         /* preempt counter */
   2516         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, XLPMIB_RRPKTr, &count);
   2517         break;
   2518     case snmpIfInUnknownProtos:
   2519         break;
   2520     case snmpIfOutOctets:
   2521         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, XLMIB_TBYTr, &count);
   2522         /* preempt counter */
   2523         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, XLPMIB_TBYTr, &count);
   2524         break;
   2525     case snmpIfOutUcastPkts:             /* Unicast frames */
   2526         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, XLMIB_TUCAr, &count);
   2527         /* preempt counter */
   2528         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, XLPMIB_TUCAr, &count);
   2529         break;
   2530     case snmpIfOutNUcastPkts:            /* Non-unicast frames */
   2531         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op,
   2532                           XLMIB_TMCAr, &count); /* + multicast */
   2533         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op,
   2534                           XLMIB_TBCAr, &count); /* + broadcast */
   2535         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op,
   2536                           XLPMIB_TMCAr, &count); /* + multicast (preempt counter) */
   2537         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op,
   2538                           XLPMIB_TBCAr, &count); /* + broadcast (preempt counter) */
   2539         break;
   2540     case snmpIfOutBroadcastPkts:         /* Broadcast frames */
   2541         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, XLMIB_TBCAr, &count);
   2542         /* preempt counter */
   2543         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, XLPMIB_TBCAr, &count);
   2544         break;
   2545     case snmpIfOutMulticastPkts:         /* Multicast frames */
   2546         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, XLMIB_TMCAr, &count);
   2547         /* preempt counter */
   2548         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, XLPMIB_TMCAr, &count);
   2549         break;
   2550     case snmpIfOutDiscards:              /* Aged packet counter */
   2551         if (SOC_REG_IS_VALID(unit, HOLDr)) {
   2552             BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op,
   2553                               HOLDr, &count);  /* L2 MTU drops */
   2554         } else if (SOC_REG_IS_VALID(unit, HOL_DROPr)) {
   2555             BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, HOL_DROPr, &count);
   2556         }
   2557         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, TDBGC3r, &count);
   2558         BCM_IF_ERROR_RETURN(
   2559             bcm_esw_cosq_stat_get(unit, port, BCM_COS_INVALID,
   2560                                   bcmCosqStatDroppedPackets, &count1));
   2561         COMPILER_64_ADD_64(count, count1);
   2562         break;
   2563     case snmpIfOutErrors:   /* Error packets could not be xmitted */
   2564         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, XLMIB_TERRr, &count);
   2565         /* preempt counter */
   2566         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, XLPMIB_TERRr, &count);
   2567         break;
   2568     case snmpIfOutQLen:
   2569         {
   2570             uint32 qcount;
   2571             if (bcm_esw_port_queued_count_get(unit, port, &qcount) >= 0) {
   2572                 COMPILER_64_ADD_32(count, qcount);
   2573             }
   2574         }
   2575         break;
   2576     case snmpIpInReceives:
   2577         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, RIPC4r, &count);
   2578         break;
   2579     case snmpIpInHdrErrors:
   2580         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, RIPD4r, &count);
   2581         break;
   2582     case snmpIpForwDatagrams:
   2583         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, TDBGC4r, &count);
   2584         break;
   2585     case snmpIpInDiscards:
   2586         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, RIPHE4r, &count);
   2587         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, RIPD4r, &count);
   2588         break;
   2589 
   2590         /* *** RFC 1493 *** */
   2591 
   2592     case snmpDot1dBasePortDelayExceededDiscards:
   2593         break;
   2594     case snmpDot1dBasePortMtuExceededDiscards:
   2595         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, XLMIB_RMTUEr, &count);
   2596         /* preempt counter */
   2597         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, XLPMIB_RMTUEr, &count);
   2598         break;
   2599     case snmpDot1dTpPortInFrames:
   2600         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, XLMIB_RPKTr, &count);
   2601         /* preempt counter */
   2602         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, XLPMIB_RPKTr, &count);
   2603         break;
   2604     case snmpDot1dTpPortOutFrames:
   2605         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, XLMIB_TPKTr, &count);
   2606         /* preempt counter */
   2607         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, XLPMIB_TPKTr, &count);
   2608         break;
   2609     case snmpDot1dPortInDiscards:
   2610         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, RDISCr, &count);
   2611         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, RIPD4r, &count);
   2612         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, RIPD6r, &count);
   2613         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, RPORTDr, &count);
   2614         break;
   2615 
   2616         /* *** RFC 1757 *** */
   2617 
   2618     case snmpEtherStatsDropEvents:
   2619         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, RDISCr, &count);
   2620         break;
   2621     case snmpEtherStatsOctets:
   2622         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, XLMIB_RBYTr, &count);
   2623         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, XLMIB_TBYTr, &count);
   2624         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op,
   2625                           XLMIB_RRBYTr, &count); /* Runts bytes */
   2626 
   2627         /* preempt counter */
   2628         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, XLPMIB_RBYTr, &count);
   2629         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, XLPMIB_TBYTr, &count);
   2630         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op,
   2631                           XLPMIB_RRBYTr, &count); /* Runts bytes */
   2632         break;
   2633     case snmpEtherStatsPkts:
   2634         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, XLMIB_RPKTr, &count);
   2635         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, XLMIB_TPKTr, &count);
   2636         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op,
   2637                           XLMIB_RRPKTr, &count); /* Runts */
   2638 
   2639         /* preempt counter */
   2640         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, XLPMIB_RPKTr, &count);
   2641         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, XLPMIB_TPKTr, &count);
   2642         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op,
   2643                           XLPMIB_RRPKTr, &count); /* Runts */
   2644         break;
   2645     case snmpEtherStatsBroadcastPkts:
   2646         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, XLMIB_RBCAr, &count);
   2647         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, XLMIB_TBCAr, &count);
   2648         /* preempt counter */
   2649         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, XLPMIB_RBCAr, &count);
   2650         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, XLPMIB_TBCAr, &count);
   2651         break;
   2652     case snmpEtherStatsMulticastPkts:
   2653         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, XLMIB_RMCAr, &count);
   2654         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, XLMIB_TMCAr, &count);
   2655         /* preempt counter */
   2656         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, XLPMIB_RMCAr, &count);
   2657         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, XLPMIB_TMCAr, &count);
   2658         break;
   2659     case snmpEtherStatsCRCAlignErrors:
   2660         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, XLMIB_RFCSr, &count);
   2661         /* preempt counter */
   2662         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, XLPMIB_RFCSr, &count);
   2663         break;
   2664     case snmpEtherStatsUndersizePkts:
   2665         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, XLMIB_RUNDr, &count);
   2666         /* preempt counter */
   2667         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, XLPMIB_RUNDr, &count);
   2668         break;
   2669     case snmpEtherStatsOversizePkts:
   2670         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, XLMIB_ROVRr, &count);
   2671         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, XLMIB_TOVRr, &count);
   2672         /* preempt counter */
   2673         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, XLPMIB_ROVRr, &count);
   2674         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, XLPMIB_TOVRr, &count);
   2675         break;
   2676     case snmpEtherRxOversizePkts:
   2677         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, XLMIB_ROVRr, &count);
   2678         /* preempt counter */
   2679         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, XLPMIB_ROVRr, &count);
   2680         break;
   2681     case snmpEtherTxOversizePkts:
   2682         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, XLMIB_TOVRr, &count);
   2683         /* preempt counter */
   2684         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, XLPMIB_TOVRr, &count);
   2685         break;
   2686     case snmpEtherStatsFragments:
   2687         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, XLMIB_RFRGr, &count);
   2688         /* preempt counter */
   2689         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, XLPMIB_RFRGr, &count);
   2690         break;
   2691     case snmpEtherStatsJabbers:
   2692         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, XLMIB_RJBRr, &count);
   2693         /* preempt counter */
   2694         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, XLPMIB_RJBRr, &count);
   2695         break;
   2696     case snmpEtherStatsCollisions:
   2697         break;
   2698 
   2699         /* *** rfc1757 definition counts receive packet only *** */
   2700 
   2701     case snmpEtherStatsPkts64Octets:
   2702         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, XLMIB_R64r, &count);
   2703         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, XLMIB_T64r, &count);
   2704         /* preempt counter */
   2705         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, XLPMIB_R64r, &count);
   2706         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, XLPMIB_T64r, &count);
   2707         break;
   2708     case snmpEtherStatsPkts65to127Octets:
   2709         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, XLMIB_R127r, &count);
   2710         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, XLMIB_T127r, &count);
   2711         /* preempt counter */
   2712         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, XLPMIB_R127r, &count);
   2713         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, XLPMIB_T127r, &count);
   2714         break;
   2715     case snmpEtherStatsPkts128to255Octets:
   2716         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, XLMIB_R255r, &count);
   2717         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, XLMIB_T255r, &count);
   2718         /* preempt counter */
   2719         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, XLPMIB_R255r, &count);
   2720         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, XLPMIB_T255r, &count);
   2721         break;
   2722     case snmpEtherStatsPkts256to511Octets:
   2723         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, XLMIB_R511r, &count);
   2724         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, XLMIB_T511r, &count);
   2725         /* preempt counter */
   2726         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, XLPMIB_R511r, &count);
   2727         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, XLPMIB_T511r, &count);
   2728         break;
   2729     case snmpEtherStatsPkts512to1023Octets:
   2730         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, XLMIB_R1023r, &count);
   2731         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, XLMIB_T1023r, &count);
   2732         /* preempt counter */
   2733         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, XLPMIB_R1023r, &count);
   2734         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, XLPMIB_T1023r, &count);
   2735         break;
   2736     case snmpEtherStatsPkts1024to1518Octets:
   2737         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, XLMIB_R1518r, &count);
   2738         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, XLMIB_T1518r, &count);
   2739         /* preempt counter */
   2740         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, XLPMIB_R1518r, &count);
   2741         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, XLPMIB_T1518r, &count);
   2742         break;
   2743     case snmpBcmEtherStatsPkts1519to1522Octets: /* not in rfc1757 */
   2744         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, XLMIB_RMGVr, &count);
   2745         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, XLMIB_TMGVr, &count);
   2746         /* preempt counter */
   2747         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, XLPMIB_RMGVr, &count);
   2748         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, XLPMIB_TMGVr, &count);
   2749         break;
   2750     case snmpBcmEtherStatsPkts1522to2047Octets: /* not in rfc1757 */
   2751         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, XLMIB_R2047r, &count);
   2752         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_sub_op, XLMIB_RMGVr, &count);
   2753         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, XLMIB_T2047r, &count);
   2754         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_sub_op, XLMIB_TMGVr, &count);
   2755 
   2756         /* preempt counter */
   2757         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, XLPMIB_R2047r, &count);
   2758         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_sub_op, XLPMIB_RMGVr, &count);
   2759         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, XLPMIB_T2047r, &count);
   2760         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_sub_op, XLPMIB_TMGVr, &count);
   2761         break;
   2762     case snmpBcmEtherStatsPkts2048to4095Octets: /* not in rfc1757 */
   2763         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, XLMIB_R4095r, &count);
   2764         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, XLMIB_T4095r, &count);
   2765         /* preempt counter */
   2766         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, XLPMIB_R4095r, &count);
   2767         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, XLPMIB_T4095r, &count);
   2768         break;
   2769     case snmpBcmEtherStatsPkts4095to9216Octets: /* not in rfc1757 */
   2770         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, XLMIB_R9216r, &count);
   2771         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, XLMIB_T9216r, &count);
   2772         /* preempt counter */
   2773         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, XLPMIB_R9216r, &count);
   2774         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, XLPMIB_T9216r, &count);
   2775         break;
   2776     case snmpBcmEtherStatsPkts9217to16383Octets: /* not in rfc1757 */
   2777         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, XLMIB_R16383r, &count);
   2778         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, XLMIB_T16383r, &count);
   2779         /* preempt counter */
   2780         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, XLPMIB_R16383r, &count);
   2781         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, XLPMIB_T16383r, &count);
   2782         break;
   2783 
   2784     case snmpBcmReceivedPkts64Octets:
   2785         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, XLMIB_R64r, &count);
   2786         /* preempt counter */
   2787         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, XLPMIB_R64r, &count);
   2788         break;
   2789     case snmpBcmReceivedPkts65to127Octets:
   2790         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, XLMIB_R127r, &count);
   2791         /* preempt counter */
   2792         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, XLPMIB_R127r, &count);
   2793         break;
   2794     case snmpBcmReceivedPkts128to255Octets:
   2795         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, XLMIB_R255r, &count);
   2796         /* preempt counter */
   2797         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, XLPMIB_R255r, &count);
   2798         break;
   2799     case snmpBcmReceivedPkts256to511Octets:
   2800         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, XLMIB_R511r, &count);
   2801         /* preempt counter */
   2802         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, XLPMIB_R511r, &count);
   2803         break;
   2804     case snmpBcmReceivedPkts512to1023Octets:
   2805         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, XLMIB_R1023r, &count);
   2806         /* preempt counter */
   2807         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, XLPMIB_R1023r, &count);
   2808         break;
   2809     case snmpBcmReceivedPkts1024to1518Octets:
   2810         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, XLMIB_R1518r, &count);
   2811         /* preempt counter */
   2812         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, XLPMIB_R1518r, &count);
   2813         break;
   2814     case snmpBcmReceivedPkts1519to2047Octets:
   2815         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, XLMIB_R2047r, &count);
   2816         /* preempt counter */
   2817         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, XLPMIB_R2047r, &count);
   2818         break;
   2819     case snmpBcmReceivedPkts2048to4095Octets:
   2820         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, XLMIB_R4095r, &count);
   2821         /* preempt counter */
   2822         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, XLPMIB_R4095r, &count);
   2823         break;
   2824     case snmpBcmReceivedPkts4095to9216Octets:
   2825         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, XLMIB_R9216r, &count);
   2826         /* preempt counter */
   2827         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, XLPMIB_R9216r, &count);
   2828         break;
   2829     case snmpBcmReceivedPkts9217to16383Octets:
   2830         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, XLMIB_R16383r, &count);
   2831         /* preempt counter */
   2832         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, XLPMIB_R16383r, &count);
   2833         break;
   2834 
   2835     case snmpBcmTransmittedPkts64Octets:
   2836         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, XLMIB_T64r, &count);
   2837         /* preempt counter */
   2838         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, XLPMIB_T64r, &count);
   2839         break;
   2840     case snmpBcmTransmittedPkts65to127Octets:
   2841         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, XLMIB_T127r, &count);
   2842         /* preempt counter */
   2843         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, XLPMIB_T127r, &count);
   2844         break;
   2845     case snmpBcmTransmittedPkts128to255Octets:
   2846         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, XLMIB_T255r, &count);
   2847         /* preempt counter */
   2848         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, XLPMIB_T255r, &count);
   2849         break;
   2850     case snmpBcmTransmittedPkts256to511Octets:
   2851         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, XLMIB_T511r, &count);
   2852         /* preempt counter */
   2853         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, XLPMIB_T511r, &count);
   2854         break;
   2855     case snmpBcmTransmittedPkts512to1023Octets:
   2856         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, XLMIB_T1023r, &count);
   2857         /* preempt counter */
   2858         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, XLPMIB_T1023r, &count);
   2859         break;
   2860     case snmpBcmTransmittedPkts1024to1518Octets:
   2861         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, XLMIB_T1518r, &count);
   2862         /* preempt counter */
   2863         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, XLPMIB_T1518r, &count);
   2864         break;
   2865     case snmpBcmTransmittedPkts1519to2047Octets:
   2866         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, XLMIB_T2047r, &count);
   2867         /* preempt counter */
   2868         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, XLPMIB_T2047r, &count);
   2869         break;
   2870     case snmpBcmTransmittedPkts2048to4095Octets:
   2871         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, XLMIB_T4095r, &count);
   2872         /* preempt counter */
   2873         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, XLPMIB_T4095r, &count);
   2874         break;
   2875     case snmpBcmTransmittedPkts4095to9216Octets:
   2876         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, XLMIB_T9216r, &count);
   2877         /* preempt counter */
   2878         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, XLPMIB_T9216r, &count);
   2879         break;
   2880     case snmpBcmTransmittedPkts9217to16383Octets:
   2881         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, XLMIB_T16383r, &count);
   2882         /* preempt counter */
   2883         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, XLPMIB_T16383r, &count);
   2884         break;
   2885 
   2886     case snmpEtherStatsTXNoErrors:
   2887         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, XLMIB_TPOKr, &count);
   2888         /* preempt counter */
   2889         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, XLPMIB_TPOKr, &count);
   2890         break;
   2891     case snmpEtherStatsRXNoErrors:
   2892         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, XLMIB_RPOKr, &count);
   2893         /* preempt counter */
   2894         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, XLPMIB_RPOKr, &count);
   2895         break;
   2896 
   2897         /* *** RFC 2665 *** */
   2898 
   2899     case snmpDot3StatsAlignmentErrors:
   2900         break;
   2901     case snmpDot3StatsFCSErrors:
   2902         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, XLMIB_RFCSr, &count);
   2903         /* preempt counter */
   2904         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, XLPMIB_RFCSr, &count);
   2905         break;
   2906     case snmpDot3StatsSingleCollisionFrames:
   2907     case snmpDot3StatsMultipleCollisionFrames:
   2908     case snmpDot3StatsSQETTestErrors:
   2909     case snmpDot3StatsDeferredTransmissions:
   2910     case snmpDot3StatsLateCollisions:
   2911     case snmpDot3StatsExcessiveCollisions:
   2912         break;
   2913     case snmpDot3StatsInternalMacTransmitErrors:
   2914         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, XLMIB_TUFLr, &count);
   2915         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, XLMIB_TERRr, &count);
   2916         /* preempt counter */
   2917         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, XLPMIB_TUFLr, &count);
   2918         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, XLPMIB_TERRr, &count);
   2919         break;
   2920     case snmpDot3StatsCarrierSenseErrors:
   2921         break;
   2922     case snmpDot3StatsFrameTooLongs:
   2923         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, XLMIB_RMTUEr, &count);
   2924         /* preempt counter */
   2925         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, XLPMIB_RMTUEr, &count);
   2926         break;
   2927     case snmpDot3StatsInternalMacReceiveErrors:
   2928         break;
   2929     case snmpDot3StatsSymbolErrors:
   2930         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, XLMIB_RERPKTr, &count);
   2931         /* preempt counter */
   2932         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, XLPMIB_RERPKTr, &count);
   2933         break;
   2934     case snmpDot3ControlInUnknownOpcodes:
   2935         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, XLMIB_RXUOr, &count);
   2936         /* preempt counter */
   2937         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, XLPMIB_RXUOr, &count);
   2938         break;
   2939     case snmpDot3InPauseFrames:
   2940         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, XLMIB_RXPFr, &count);
   2941         /* preempt counter */
   2942         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, XLPMIB_RXPFr, &count);
   2943         break;
   2944     case snmpDot3OutPauseFrames:
   2945         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, XLMIB_TXPFr, &count);
   2946         /* preempt counter */
   2947         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, XLPMIB_TXPFr, &count);
   2948         break;
   2949 
   2950         /* *** RFC 2233 high capacity versions of RFC1213 objects *** */
   2951 
   2952     case snmpIfHCInOctets:
   2953         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, XLMIB_RBYTr, &count);
   2954         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, XLMIB_RRBYTr, &count);
   2955         /* preempt counter */
   2956         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, XLPMIB_RBYTr, &count);
   2957         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, XLPMIB_RRBYTr, &count);
   2958         break;
   2959     case snmpIfHCInUcastPkts:
   2960         if (COUNT_OVR_ERRORS(unit)) {
   2961             BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op,
   2962                               XLMIB_RUCAr, &count);  /* unicast pkts rcvd */
   2963             BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op,
   2964                               XLPMIB_RUCAr, &count);  /* unicast pkts rcvd (preempt counter) */
   2965         } else {
   2966             BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op,
   2967                               RUCr, &count);  /* unicast pkts rcvd */
   2968         }
   2969         break;
   2970     case snmpIfHCInMulticastPkts:
   2971         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, XLMIB_RMCAr, &count);
   2972         /* preempt counter */
   2973         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, XLPMIB_RMCAr, &count);
   2974         break;
   2975     case snmpIfHCInBroadcastPkts:
   2976         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, XLMIB_RBCAr, &count);
   2977         /* preempt counter */
   2978         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, XLPMIB_RBCAr, &count);
   2979         break;
   2980     case snmpIfHCOutOctets:
   2981         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, XLMIB_TBYTr, &count);
   2982         /* preempt counter */
   2983         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, XLPMIB_TBYTr, &count);
   2984         break;
   2985     case snmpIfHCOutUcastPkts:
   2986         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, XLMIB_TUCAr, &count);
   2987         /* preempt counter */
   2988         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, XLPMIB_TUCAr, &count);
   2989         break;
   2990     case snmpIfHCOutMulticastPkts:
   2991         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, XLMIB_TMCAr, &count);
   2992         /* preempt counter */
   2993         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, XLPMIB_TMCAr, &count);
   2994         break;
   2995     case snmpIfHCOutBroadcastPckts:
   2996         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, XLMIB_TBCAr, &count);
   2997         /* preempt counter */
   2998         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, XLPMIB_TBCAr, &count);
   2999         break;
   3000 
   3001         /* *** RFC 2465 *** */
   3002 
   3003     case snmpIpv6IfStatsInReceives:
   3004         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, RIPC6r, &count);
   3005         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, IMRP6r, &count);
   3006         break;
   3007     case snmpIpv6IfStatsInHdrErrors:
   3008         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, RIPD6r, &count);
   3009         break;
   3010     case snmpIpv6IfStatsInAddrErrors:
   3011         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, RIPHE6r, &count);
   3012         break;
   3013     case snmpIpv6IfStatsInDiscards:
   3014         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, RIPHE6r, &count);
   3015         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, RIPD6r, &count);
   3016         break;
   3017     case snmpIpv6IfStatsOutForwDatagrams:
   3018         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, TDBGC0r, &count);
   3019         break;
   3020     case snmpIpv6IfStatsOutDiscards:
   3021         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, TDBGC1r, &count);
   3022         break;
   3023     case snmpIpv6IfStatsInMcastPkts:
   3024         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, IMRP6r, &count);
   3025         break;
   3026     case snmpIpv6IfStatsOutMcastPkts:
   3027         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, TDBGC2r, &count);
   3028         break;
   3029 
   3030         /* *** IEEE 802.1bb *** */
   3031     case snmpIeee8021PfcRequests:
   3032         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, XLMIB_TXPPr, &count);
   3033         /* preempt counter */
   3034         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, XLPMIB_TXPPr, &count);
   3035         break;
   3036     case snmpIeee8021PfcIndications:
   3037         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, XLMIB_RXPPr, &count);
   3038         /* preempt counter */
   3039         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, XLPMIB_RXPPr, &count);
   3040         break;
   3041 
   3042         /* *** RFC 1284 - unsupported in XGS *** */
   3043     case snmpDot3StatsInRangeLengthError:
   3044         break;
   3045 
   3046         /* *** RFC 4837 - unsupported in XGS *** */
   3047     case snmpDot3OmpEmulationCRC8Errors:
   3048     case snmpDot3MpcpRxGate:
   3049     case snmpDot3MpcpRxRegister:
   3050     case snmpDot3MpcpTxRegRequest:
   3051     case snmpDot3MpcpTxRegAck:
   3052     case snmpDot3MpcpTxReport:
   3053     case snmpDot3EponFecCorrectedBlocks:
   3054     case snmpDot3EponFecUncorrectableBlocks:
   3055         break;
   3056 
   3057         /* IPMC counters (broadcom specific) */
   3058 
   3059     case snmpBcmIPMCBridgedPckts:
   3060         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, RDBGC1r, &count);
   3061         break;
   3062     case snmpBcmIPMCRoutedPckts:
   3063         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, IMRP4r, &count);
   3064         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, IMRP6r, &count);
   3065         break;
   3066     case snmpBcmIPMCInDroppedPckts:
   3067         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, RDBGC2r, &count);
   3068         break;
   3069     case snmpBcmIPMCOutDroppedPckts:
   3070         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, TDBGC5r, &count);
   3071         break;
   3072 
   3073         /* EA (broadcom specific) - unsupported in XGS */
   3074     case snmpBcmPonInDroppedOctets:
   3075     case snmpBcmPonOutDroppedOctets:
   3076     case snmpBcmPonInDelayedOctets:
   3077     case snmpBcmPonOutDelayedOctets:
   3078     case snmpBcmPonInDelayedHundredUs:
   3079     case snmpBcmPonOutDelayedHundredUs:
   3080     case snmpBcmPonInFrameErrors:
   3081     case snmpBcmPonInOamFrames:
   3082     case snmpBcmPonOutOamFrames:
   3083     case snmpBcmPonOutUnusedOctets:
   3084         break;
   3085 
   3086     /* Vlan Tag Frame Counters */
   3087     case snmpBcmRxVlanTagFrame:
   3088         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, RVLNr, &count);
   3089         break;
   3090     case snmpBcmRxDoubleVlanTagFrame:
   3091         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, RDVLNr, &count);
   3092         break;
   3093     case snmpBcmTxVlanTagFrame:
   3094         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, TVLNr, &count);
   3095         break;
   3096     case snmpBcmTxDoubleVlanTagFrame:
   3097         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, TDVLNr, &count);
   3098         break;
   3099 
   3100     /* PFC Control Frame Counters */
   3101     case snmpBcmRxPFCControlFrame:
   3102         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, XLMIB_RXPPr, &count);
   3103         /* preempt counter */
   3104         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, XLPMIB_RXPPr, &count);
   3105         break;
   3106 
   3107     case snmpBcmTxPFCControlFrame:
   3108         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, XLMIB_TXPPr, &count);
   3109         /* preempt counter */
   3110         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, XLPMIB_TXPPr, &count);
   3111         break;
   3112 
   3113     /* Receive PFC Frame Priority 0 XON to XOFF */
   3114     case snmpBcmRxPFCFrameXonPriority0:
   3115         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, XLMIB_RPFCOFF0r, &count);
   3116         break;
   3117 
   3118     case snmpBcmRxPFCFrameXonPriority1:
   3119         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, XLMIB_RPFCOFF1r, &count);
   3120         break;
   3121 
   3122     case snmpBcmRxPFCFrameXonPriority2:
   3123         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, XLMIB_RPFCOFF2r, &count);
   3124         break;
   3125 
   3126     case snmpBcmRxPFCFrameXonPriority3:
   3127         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, XLMIB_RPFCOFF3r, &count);
   3128         break;
   3129 
   3130     case snmpBcmRxPFCFrameXonPriority4:
   3131         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, XLMIB_RPFCOFF4r, &count);
   3132         break;
   3133 
   3134     case snmpBcmRxPFCFrameXonPriority5:
   3135         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, XLMIB_RPFCOFF5r, &count);
   3136         break;
   3137 
   3138     case snmpBcmRxPFCFrameXonPriority6:
   3139         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, XLMIB_RPFCOFF6r, &count);
   3140         break;
   3141 
   3142     case snmpBcmRxPFCFrameXonPriority7:
   3143         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, XLMIB_RPFCOFF7r, &count);
   3144         break;
   3145 
   3146     /* Receive PFC Frame Priority */
   3147     case snmpBcmRxPFCFramePriority0:
   3148         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, XLMIB_RPFC0r, &count);
   3149         /* preempt counter */
   3150         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, XLPMIB_RPFC0r, &count);
   3151         break;
   3152 
   3153     case snmpBcmRxPFCFramePriority1:
   3154         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, XLMIB_RPFC1r, &count);
   3155         /* preempt counter */
   3156         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, XLPMIB_RPFC1r, &count);
   3157         break;
   3158 
   3159     case snmpBcmRxPFCFramePriority2:
   3160         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, XLMIB_RPFC2r, &count);
   3161         /* preempt counter */
   3162         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, XLPMIB_RPFC2r, &count);
   3163         break;
   3164 
   3165     case snmpBcmRxPFCFramePriority3:
   3166         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, XLMIB_RPFC3r, &count);
   3167         /* preempt counter */
   3168         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, XLPMIB_RPFC3r, &count);
   3169         break;
   3170 
   3171     case snmpBcmRxPFCFramePriority4:
   3172         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, XLMIB_RPFC4r, &count);
   3173         /* preempt counter */
   3174         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, XLPMIB_RPFC4r, &count);
   3175         break;
   3176 
   3177     case snmpBcmRxPFCFramePriority5:
   3178         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, XLMIB_RPFC5r, &count);
   3179         /* preempt counter */
   3180         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, XLPMIB_RPFC5r, &count);
   3181         break;
   3182 
   3183     case snmpBcmRxPFCFramePriority6:
   3184         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, XLMIB_RPFC6r, &count);
   3185         /* preempt counter */
   3186         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, XLPMIB_RPFC6r, &count);
   3187         break;
   3188 
   3189     case snmpBcmRxPFCFramePriority7:
   3190         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, XLMIB_RPFC7r, &count);
   3191         /* preempt counter */
   3192         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, XLPMIB_RPFC7r, &count);
   3193         break;
   3194 
   3195     /* Transmit PFC Frame Priority */
   3196     case snmpBcmTxPFCFramePriority0:
   3197         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, XLMIB_TPFC0r, &count);
   3198         /* preempt counter */
   3199         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, XLPMIB_TPFC0r, &count);
   3200         break;
   3201 
   3202     case snmpBcmTxPFCFramePriority1:
   3203         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, XLMIB_TPFC1r, &count);
   3204         /* preempt counter */
   3205         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, XLPMIB_TPFC1r, &count);
   3206         break;
   3207 
   3208     case snmpBcmTxPFCFramePriority2:
   3209         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, XLMIB_TPFC2r, &count);
   3210         /* preempt counter */
   3211         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, XLPMIB_TPFC2r, &count);
   3212         break;
   3213 
   3214     case snmpBcmTxPFCFramePriority3:
   3215         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, XLMIB_TPFC3r, &count);
   3216         /* preempt counter */
   3217         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, XLPMIB_TPFC3r, &count);
   3218         break;
   3219 
   3220     case snmpBcmTxPFCFramePriority4:
   3221         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, XLMIB_TPFC4r, &count);
   3222         /* preempt counter */
   3223         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, XLPMIB_TPFC4r, &count);
   3224         break;
   3225 
   3226     case snmpBcmTxPFCFramePriority5:
   3227         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, XLMIB_TPFC5r, &count);
   3228         /* preempt counter */
   3229         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, XLPMIB_TPFC5r, &count);
   3230         break;
   3231 
   3232     case snmpBcmTxPFCFramePriority6:
   3233         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, XLMIB_TPFC6r, &count);
   3234         /* preempt counter */
   3235         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, XLPMIB_TPFC6r, &count);
   3236         break;
   3237 
   3238     case snmpBcmTxPFCFramePriority7:
   3239         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, XLMIB_TPFC7r, &count);
   3240         /* preempt counter */
   3241         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, XLPMIB_TPFC7r, &count);
   3242         break;
   3243 
   3244     case snmpFcmPortClass3RxFrames:
   3245     case snmpFcmPortClass3TxFrames:
   3246     case snmpFcmPortClass3Discards:
   3247     case snmpFcmPortClass2RxFrames:
   3248     case snmpFcmPortClass2TxFrames:
   3249     case snmpFcmPortClass2Discards:
   3250     case snmpFcmPortInvalidCRCs:
   3251     case snmpFcmPortDelimiterErrors:
   3252         if (!soc_feature(unit, soc_feature_fcoe)) {
   3253             return BCM_E_UNAVAIL;
   3254         }
   3255         break;
   3256 
   3257     case snmpBcmMacMergeTxFrag:
   3258         if (soc_feature(unit, soc_feature_preemption)) {
   3259             BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op,
   3260                               XLPMIB_TMFCr, &count);
   3261         } else {
   3262             return BCM_E_UNAVAIL;
   3263         }
   3264         break;
   3265 
   3266     case snmpBcmMacMergeTxVerifyFrame:
   3267         if (soc_feature(unit, soc_feature_preemption)) {
   3268             BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op,
   3269                               XLMIB_TVERIFYr, &count);
   3270         } else {
   3271             return BCM_E_UNAVAIL;
   3272         }
   3273         break;
   3274 
   3275     case snmpBcmMacMergeTxReplyFrame:
   3276         if (soc_feature(unit, soc_feature_preemption)) {
   3277             BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op,
   3278                               XLMIB_TREPLYr, &count);
   3279         } else {
   3280             return BCM_E_UNAVAIL;
   3281         }
   3282         break;
   3283 
   3284     case snmpBcmMacMergeRxFrameAssErrors:
   3285         if (soc_feature(unit, soc_feature_preemption)) {
   3286             BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op,
   3287                               XLPMIB_RMFAEr, &count);
   3288         } else {
   3289             return BCM_E_UNAVAIL;
   3290         }
   3291         break;
   3292 
   3293     case snmpBcmMacMergeRxFrameSmdErrors:
   3294         if (soc_feature(unit, soc_feature_preemption)) {
   3295             BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op,
   3296                               XLPMIB_RMFSEr, &count);
   3297         } else {
   3298             return BCM_E_UNAVAIL;
   3299         }
   3300         break;
   3301 
   3302     case snmpBcmMacMergeRxFrameAss:
   3303         if (soc_feature(unit, soc_feature_preemption)) {
   3304             BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op,
   3305                               XLPMIB_RMFAOr, &count);
   3306         } else {
   3307             return BCM_E_UNAVAIL;
   3308         }
   3309         break;
   3310 
   3311     case snmpBcmMacMergeRxFrag:
   3312         if (soc_feature(unit, soc_feature_preemption)) {
   3313             BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op,
   3314                               XLPMIB_RMFCr, &count);
   3315         } else {
   3316             return BCM_E_UNAVAIL;
   3317         }
   3318         break;
   3319 
   3320     case snmpBcmMacMergeRxVerifyFrame:
   3321         if (soc_feature(unit, soc_feature_preemption)) {
   3322             BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op,
   3323                               XLMIB_RVERIFYr, &count);
   3324         } else {
   3325             return BCM_E_UNAVAIL;
   3326         }
   3327         break;
   3328 
   3329     case snmpBcmMacMergeRxReplyFrame:
   3330         if (soc_feature(unit, soc_feature_preemption)) {
   3331             BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op,
   3332                               XLMIB_RREPLYr, &count);
   3333         } else {
   3334             return BCM_E_UNAVAIL;
   3335         }
   3336         break;
   3337 
   3338     case snmpBcmMacMergeRxFinalFragSizeError:
   3339         if (soc_feature(unit, soc_feature_preemption)) {
   3340             BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op,
   3341                               XLPMIB_RFFMSEr, &count);
   3342         } else {
   3343             return BCM_E_UNAVAIL;
   3344         }
   3345         break;
   3346 
   3347     case snmpBcmMacMergeRxFragSizeError:
   3348         if (soc_feature(unit, soc_feature_preemption)) {
   3349             BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op,
   3350                               XLPMIB_RNFFMSEr, &count);
   3351         } else {
   3352             return BCM_E_UNAVAIL;
   3353         }
   3354         break;
   3355 
   3356     case snmpBcmMacMergeRxDiscard:
   3357         if (soc_feature(unit, soc_feature_preemption)) {
   3358             BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op,
   3359                               XLPMIB_RMDISr, &count);
   3360         } else {
   3361             return BCM_E_UNAVAIL;
   3362         }
   3363         break;
   3364 
   3365     case snmpBcmMacMergeHoldCount:
   3366         if (soc_feature(unit, soc_feature_preemption)) {
   3367             BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op,
   3368                               MACMERGERHOLDCOUNTr, &count);
   3369         } else {
   3370             return BCM_E_UNAVAIL;
   3371         }
   3372         break;
   3373 
   3374     case snmpBcmRxDot3LengthMismatches:
   3375         if (SOC_REG_IS_VALID(unit, XLMIB_RFLRr)) {
   3376             BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op,
   3377                               XLMIB_RFLRr, &count); /* Good FCS, bad length */
   3378         } else {
   3379             return BCM_E_UNAVAIL;
   3380         }
   3381 
   3382         /* Preempt counter */
   3383         if (SOC_REG_IS_VALID(unit, XLPMIB_RFLRr)) {
   3384             BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op,
   3385                               XLPMIB_RFLRr, &count); /* Good FCS, bad length */
   3386         } else {
   3387             return BCM_E_UNAVAIL;
   3388         }
   3389         break;
   3390 
   3391     default:
   3392         if (type < snmpValCount) {
   3393             return BCM_E_UNAVAIL;
   3394         }
   3395         LOG_VERBOSE(BSL_LS_SOC_COMMON,
   3396                     (BSL_META_U(unit,
   3397                                 "bcmi_stat_preempt_xl_get_set: Statistic not supported: %d\n"), \
   3398                                 type));
   3399         return BCM_E_PARAM;
   3400     }
   3401 
   3402     if (stat_op == _BCM_STAT_GET) {
   3403         *val = count;
   3404     }
   3405 
   3406     return BCM_E_NONE;
   3407   }