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_mxq.c (29508B)


      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 
     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 #include <shared/bsl.h>
     17 
     18 /*
     19  * Function:
     20  *      _bcm_stat_mxq_get
     21  * Description:
     22  *      Get the specified statistic for a port with common counter shared
     23  *      by both XE and GE MAC.
     24  * Parameters:
     25  *      unit - PCI device unit number (driver internal)
     26  *      port - zero-based port number
     27  *      sync_mode, reg_op - if 1 read hw counter else sw accumualated counter
     28  *      type - SNMP statistics type (see 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 _bcm_stat_mxq_get_set(int unit, bcm_port_t port, 
     37                      int sync_mode, int stat_op,
     38                      bcm_stat_val_t type, uint64 *val)
     39 {
     40     uint64 count, count1;
     41     int value = 0;
     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 
     51     switch (type) {
     52         /* *** RFC 1213 *** */
     53     case snmpIfInOctets:
     54 
     55         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, MXQ_RBYTr, &count);
     56         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, MXQ_RRBYTr, &count);
     57         break;
     58     case snmpIfInUcastPkts:             /* Unicast frames */
     59         if (SOC_IS_SABER2(unit) && soc_feature(unit, soc_feature_olp)) {
     60             BCM_IF_ERROR_RETURN(
     61                 bcm_esw_port_control_get(unit, port, bcmPortControlOlpEnable,
     62                                          &value));
     63         }
     64         if (COUNT_OVR_ERRORS(unit) || value) {
     65             BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, MXQ_RUCAr, &count);
     66         } else {
     67             BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, RUCr, &count);
     68         }
     69         break;
     70     case snmpIfInNUcastPkts:             /* Non-unicast frames */
     71         if (COUNT_OVR_ERRORS(unit)) {
     72             BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, MXQ_RMCAr,
     73                                     &count); /* + multicast */
     74             BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, MXQ_RBCAr,
     75                                     &count); /* + broadcast */
     76 
     77         } else {
     78             BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, MXQ_RUCAr,
     79                                     &count); /* + unicast excl */
     80                                                           /*   oversize */
     81             BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, MXQ_RMCAr,
     82                                     &count); /* + multicast */
     83             BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, MXQ_RBCAr,
     84                                     &count); /* + broadcast */
     85             BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, MXQ_ROVRr,
     86                                     &count); /* + oversize */
     87             BCM_STAT_REG_OPER(unit, port, sync_mode, reg_sub_op, RUCr,
     88                                     &count); /* - unicast */
     89 
     90        }
     91         break;
     92     case snmpIfInBroadcastPkts:          /* Broadcast frames */
     93         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, MXQ_RBCAr, &count);
     94         break;
     95     case snmpIfInMulticastPkts:          /* Multicast frames */
     96         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, MXQ_RMCAr, &count);
     97         break;
     98     case snmpIfInDiscards:           /* Dropped packets including aborted */
     99         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op,
    100                                     RDBGC0r, &count); /* Ingress drop conditions */
    101         BCM_IF_ERROR_RETURN
    102             (_bcm_stat_counter_non_dma_extra_get(unit,
    103                                    SOC_COUNTER_NON_DMA_PORT_DROP_PKT_ING,
    104                                                  port, &count1));
    105         COMPILER_64_ADD_64(count, count1);
    106         break;
    107     case snmpIfInErrors: /* RX Errors or Receive packets - non-error frames */
    108         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, MXQ_RFCSr, &count);
    109         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, MXQ_RJBRr, &count);
    110         if (SOC_REG_IS_VALID(unit,RMTUEr)) {
    111            BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, MXQ_RMTUEr, &count);
    112         } else if (COUNT_OVR_ERRORS(unit)) {
    113             BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, MXQ_ROVRr, &count);
    114         }
    115         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, MXQ_RRPKTr, &count);
    116         break;
    117     case snmpIfInUnknownProtos:
    118         break;
    119     case snmpIfOutOctets:
    120         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, MXQ_TBYTr, &count);
    121         break;
    122     case snmpIfOutUcastPkts:             /* Unicast frames */
    123         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, MXQ_TUCAr, &count);
    124         if (!COUNT_OVR_ERRORS(unit)) {
    125             /* Add oversize packets if not considered as error */
    126             BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, MXQ_TOVRr, &count);
    127         }
    128         break;
    129     case snmpIfOutNUcastPkts:            /* Non-unicast frames */
    130         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, MXQ_TMCAr,
    131                                     &count); /* + multicast */
    132         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, MXQ_TBCAr,
    133                                     &count); /* + broadcast */
    134         break;
    135     case snmpIfOutBroadcastPkts:         /* Broadcast frames */
    136         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, MXQ_TBCAr, &count);
    137         break;
    138     case snmpIfOutMulticastPkts:         /* Multicast frames */
    139         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, MXQ_TMCAr, &count);
    140         break;
    141     case snmpIfOutDiscards:              /* Aged packet counter */
    142         if (SOC_REG_IS_VALID(unit, HOLDr)) {
    143             BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, HOLDr,
    144                                         &count);  /* L2 MTU drops */
    145         } else if (SOC_REG_IS_VALID(unit, HOL_DROPr)) {
    146             BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, HOL_DROPr, &count);
    147         }
    148         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, TDBGC3r, &count);
    149         BCM_IF_ERROR_RETURN(
    150             bcm_esw_cosq_stat_get(unit, port, BCM_COS_INVALID, bcmCosqStatDroppedPackets, &count1));
    151         COMPILER_64_ADD_64(count, count1);
    152         break;
    153     case snmpIfOutErrors:   /* Error packets could not be xmitted */
    154         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, MXQ_TERRr, &count);
    155         break;
    156     case snmpIfOutQLen:
    157         {
    158             uint32 qcount;
    159             if (bcm_esw_port_queued_count_get(unit, port, &qcount) >= 0) {
    160                 COMPILER_64_ADD_32(count, qcount);
    161             }
    162         }
    163         break;
    164     case snmpIpInReceives:
    165         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, RIPC4r, &count);
    166         break;
    167     case snmpIpInHdrErrors:
    168         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, RIPD4r, &count);
    169         break;
    170     case snmpIpForwDatagrams:
    171         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, TDBGC4r, &count);
    172         break;
    173     case snmpIpInDiscards:
    174         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, RIPHE4r, &count);
    175         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, RIPD4r, &count);
    176         break;
    177 
    178         /* *** RFC 1493 *** */
    179 
    180     case snmpDot1dBasePortDelayExceededDiscards:
    181         break;
    182     case snmpDot1dBasePortMtuExceededDiscards:
    183         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, MXQ_RMTUEr, &count);
    184         break;
    185     case snmpDot1dTpPortInFrames:
    186         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, MXQ_RPKTr, &count);
    187         break;
    188     case snmpDot1dTpPortOutFrames:
    189         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, MXQ_TPKTr, &count);
    190         break;
    191     case snmpDot1dPortInDiscards:
    192         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, RDISCr, &count);
    193         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, RIPD4r, &count);
    194         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, RIPD6r, &count);
    195         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, RPORTDr, &count);
    196         break;
    197 
    198         /* *** RFC 1757 *** */
    199 
    200     case snmpEtherStatsDropEvents:
    201         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, RDISCr, &count);
    202         break;
    203     case snmpEtherStatsOctets:
    204         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, MXQ_RBYTr, &count);
    205         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, MXQ_TBYTr, &count);
    206         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op,
    207                                  MXQ_RRBYTr, &count); /* Runts bytes */
    208         break;
    209     case snmpEtherStatsPkts:
    210         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, MXQ_RPKTr, &count);
    211         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, MXQ_TPKTr, &count);
    212         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op,
    213                                 MXQ_RRPKTr, &count); /* Runts */
    214         break;
    215     case snmpEtherStatsBroadcastPkts:
    216         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, MXQ_RBCAr, &count);
    217         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, MXQ_TBCAr, &count);
    218         break;
    219     case snmpEtherStatsMulticastPkts:
    220         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, MXQ_RMCAr, &count);
    221         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, MXQ_TMCAr, &count);
    222         break;
    223     case snmpEtherStatsCRCAlignErrors:
    224         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, MXQ_RFCSr, &count);
    225         break;
    226     case snmpEtherStatsUndersizePkts:
    227         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, MXQ_RUNDr, &count);
    228         break;
    229     case snmpEtherStatsOversizePkts:
    230         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, MXQ_ROVRr, &count);
    231         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, MXQ_TOVRr, &count);
    232         break;
    233     case snmpEtherRxOversizePkts:
    234         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, MXQ_ROVRr, &count);
    235         break;
    236     case snmpEtherTxOversizePkts:
    237         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, MXQ_TOVRr, &count);
    238         break;
    239     case snmpEtherStatsFragments:
    240         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, MXQ_RFRGr, &count);
    241         break;
    242     case snmpEtherStatsJabbers:
    243         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, MXQ_RJBRr, &count);
    244         break;
    245     case snmpEtherStatsCollisions:
    246         break;
    247 
    248         /* *** rfc1757 definition counts receive packet only *** */
    249 
    250     case snmpEtherStatsPkts64Octets:
    251         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, MXQ_R64r, &count);
    252         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, MXQ_T64r, &count);
    253         break;
    254     case snmpEtherStatsPkts65to127Octets:
    255         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, MXQ_R127r, &count);
    256         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, MXQ_T127r, &count);
    257         break;
    258     case snmpEtherStatsPkts128to255Octets:
    259         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, MXQ_R255r, &count);
    260         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, MXQ_T255r, &count);
    261         break;
    262     case snmpEtherStatsPkts256to511Octets:
    263         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, MXQ_R511r, &count);
    264         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, MXQ_T511r, &count);
    265         break;
    266     case snmpEtherStatsPkts512to1023Octets:
    267         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, MXQ_R1023r, &count);
    268         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, MXQ_T1023r, &count);
    269         break;
    270     case snmpEtherStatsPkts1024to1518Octets:
    271         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, MXQ_R1518r, &count);
    272         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, MXQ_T1518r, &count);
    273         break;
    274     case snmpBcmEtherStatsPkts1519to1522Octets: /* not in rfc1757 */
    275         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, MXQ_RMGVr, &count);
    276         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, MXQ_TMGVr, &count);
    277         break;
    278     case snmpBcmEtherStatsPkts1522to2047Octets: /* not in rfc1757 */
    279         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, MXQ_R2047r, &count);
    280         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_sub_op, MXQ_RMGVr, &count);
    281         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, MXQ_T2047r, &count);
    282         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_sub_op, MXQ_TMGVr, &count);
    283         break;
    284     case snmpBcmEtherStatsPkts2048to4095Octets: /* not in rfc1757 */
    285         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, MXQ_R4095r, &count);
    286         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, MXQ_T4095r, &count);
    287         break;
    288     case snmpBcmEtherStatsPkts4095to9216Octets: /* not in rfc1757 */
    289         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, MXQ_R9216r, &count);
    290         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, MXQ_T9216r, &count);
    291         break;
    292     case snmpBcmEtherStatsPkts9217to16383Octets: /* not in rfc1757 */
    293         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, MXQ_R16383r, &count);
    294         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, MXQ_T16383r, &count);
    295         break;
    296 
    297     case snmpBcmReceivedPkts64Octets:
    298         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, MXQ_R64r, &count);
    299         break;
    300     case snmpBcmReceivedPkts65to127Octets:
    301         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, MXQ_R127r, &count);
    302         break;
    303     case snmpBcmReceivedPkts128to255Octets:
    304         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, MXQ_R255r, &count);
    305         break;
    306     case snmpBcmReceivedPkts256to511Octets:
    307         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, MXQ_R511r, &count);
    308         break;
    309     case snmpBcmReceivedPkts512to1023Octets:
    310         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, MXQ_R1023r, &count);
    311         break;
    312     case snmpBcmReceivedPkts1024to1518Octets:
    313         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, MXQ_R1518r, &count);
    314         break;
    315     case snmpBcmReceivedPkts1519to2047Octets:
    316         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, MXQ_R2047r, &count);
    317         break;
    318     case snmpBcmReceivedPkts2048to4095Octets:
    319         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, MXQ_R4095r, &count);
    320         break;
    321     case snmpBcmReceivedPkts4095to9216Octets:
    322         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, MXQ_R9216r, &count);
    323         break;
    324     case snmpBcmReceivedPkts9217to16383Octets:
    325         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, MXQ_R16383r, &count);
    326         break;
    327 
    328     case snmpBcmTransmittedPkts64Octets:
    329         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, MXQ_T64r, &count);
    330         break;
    331     case snmpBcmTransmittedPkts65to127Octets:
    332         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, MXQ_T127r, &count);
    333         break;
    334     case snmpBcmTransmittedPkts128to255Octets:
    335         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, MXQ_T255r, &count);
    336         break;
    337     case snmpBcmTransmittedPkts256to511Octets:
    338         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, MXQ_T511r, &count);
    339         break;
    340     case snmpBcmTransmittedPkts512to1023Octets:
    341         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, MXQ_T1023r, &count);
    342         break;
    343     case snmpBcmTransmittedPkts1024to1518Octets:
    344         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, MXQ_T1518r, &count);
    345         break;
    346     case snmpBcmTransmittedPkts1519to2047Octets:
    347         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, MXQ_T2047r, &count);
    348         break;
    349     case snmpBcmTransmittedPkts2048to4095Octets:
    350         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, MXQ_T4095r, &count);
    351         break;
    352     case snmpBcmTransmittedPkts4095to9216Octets:
    353         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, MXQ_T9216r, &count);
    354         break;
    355     case snmpBcmTransmittedPkts9217to16383Octets:
    356         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, MXQ_T16383r, &count);
    357         break;
    358 
    359     case snmpEtherStatsTXNoErrors:
    360         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, MXQ_TPOKr, &count);
    361         break;
    362     case snmpEtherStatsRXNoErrors:
    363         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, MXQ_RPOKr, &count);
    364         break;
    365 
    366         /* *** RFC 2665 *** */
    367 
    368     case snmpDot3StatsAlignmentErrors:
    369         break;
    370     case snmpDot3StatsFCSErrors:
    371         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, MXQ_RFCSr, &count);
    372         break;
    373     case snmpDot3StatsSingleCollisionFrames:
    374         break;
    375     case snmpDot3StatsMultipleCollisionFrames:
    376         break;
    377     case snmpDot3StatsSQETTestErrors:
    378         break;
    379     case snmpDot3StatsDeferredTransmissions:
    380         break;
    381     case snmpDot3StatsLateCollisions:
    382         break;
    383     case snmpDot3StatsExcessiveCollisions:
    384         break;
    385     case snmpDot3StatsInternalMacTransmitErrors:
    386         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, MXQ_TUFLr, &count);
    387         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, MXQ_TERRr, &count);
    388         break;
    389     case snmpDot3StatsCarrierSenseErrors:
    390         break;
    391     case snmpDot3StatsFrameTooLongs:
    392         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, MXQ_RMTUEr, &count);
    393         break;
    394     case snmpDot3StatsInternalMacReceiveErrors:
    395         break;
    396     case snmpDot3StatsSymbolErrors:
    397         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, MXQ_RERPKTr, &count);
    398         break;
    399     case snmpDot3ControlInUnknownOpcodes:
    400         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, MXQ_RXUOr, &count);
    401         break;
    402     case snmpDot3InPauseFrames:
    403         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, MXQ_RXPFr, &count);
    404         break;
    405     case snmpDot3OutPauseFrames:
    406         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, MXQ_TXPFr, &count);
    407         break;
    408 
    409         /* *** RFC 2233 high capacity versions of RFC1213 objects *** */
    410 
    411     case snmpIfHCInOctets:
    412         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, MXQ_RBYTr, &count);
    413         break;
    414     case snmpIfHCInUcastPkts:
    415         if (SOC_IS_SABER2(unit) && soc_feature(unit, soc_feature_olp)) {
    416             BCM_IF_ERROR_RETURN(
    417                 bcm_esw_port_control_get(unit, port, bcmPortControlOlpEnable,
    418                                          &value));
    419         }
    420         if (COUNT_OVR_ERRORS(unit) || value) {
    421             BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op,
    422                                     MXQ_RUCAr, &count);  /* unicast pkts rcvd */
    423         } else {
    424             BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op,
    425                                     RUCr, &count);  /* unicast pkts rcvd */
    426         }
    427         break;
    428     case snmpIfHCInMulticastPkts:
    429         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, MXQ_RMCAr, &count);
    430         break;
    431     case snmpIfHCInBroadcastPkts:
    432         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, MXQ_RBCAr, &count);
    433         break;
    434     case snmpIfHCOutOctets:
    435         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, MXQ_TBYTr, &count);
    436         break;
    437     case snmpIfHCOutUcastPkts:
    438         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, MXQ_TUCAr, &count);
    439         break;
    440     case snmpIfHCOutMulticastPkts:
    441         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, MXQ_TMCAr, &count);
    442         break;
    443     case snmpIfHCOutBroadcastPckts:
    444         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, MXQ_TBCAr, &count);
    445         break;
    446 
    447         /* *** RFC 2465 *** */
    448 
    449     case snmpIpv6IfStatsInReceives:
    450         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, RIPC6r, &count);
    451         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, IMRP6r, &count);
    452         break;
    453     case snmpIpv6IfStatsInHdrErrors:
    454         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, RIPD6r, &count);
    455         break;
    456     case snmpIpv6IfStatsInAddrErrors:
    457         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, RIPHE6r, &count);
    458         break;
    459     case snmpIpv6IfStatsInDiscards:
    460         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, RIPHE6r, &count);
    461         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, RIPD6r, &count);
    462         break;
    463     case snmpIpv6IfStatsOutForwDatagrams:
    464         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, TDBGC0r, &count);
    465         break;
    466     case snmpIpv6IfStatsOutDiscards:
    467         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, TDBGC1r, &count);
    468         break;
    469     case snmpIpv6IfStatsInMcastPkts:
    470         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, IMRP6r, &count);
    471         break;
    472     case snmpIpv6IfStatsOutMcastPkts:
    473         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, TDBGC2r, &count);
    474         break;
    475 
    476         /* *** IEEE 802.1bb *** */
    477     case snmpIeee8021PfcRequests:
    478         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, MXQ_TXPPr, &count);
    479         break;
    480     case snmpIeee8021PfcIndications:
    481         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, MXQ_RXPPr, &count);
    482         break;
    483 
    484         /* *** RFC 1284 - unsupported in XGS *** */
    485     case snmpDot3StatsInRangeLengthError:
    486         break;
    487 
    488         /* *** RFC 4837 - unsupported in XGS *** */
    489     case snmpDot3OmpEmulationCRC8Errors:
    490     case snmpDot3MpcpRxGate:
    491     case snmpDot3MpcpRxRegister:
    492     case snmpDot3MpcpTxRegRequest:
    493     case snmpDot3MpcpTxRegAck:
    494     case snmpDot3MpcpTxReport:
    495     case snmpDot3EponFecCorrectedBlocks:
    496     case snmpDot3EponFecUncorrectableBlocks:
    497         break;
    498 
    499         /* IPMC counters (broadcom specific) */
    500 
    501     case snmpBcmIPMCBridgedPckts:
    502         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, RDBGC1r, &count);
    503         break;
    504     case snmpBcmIPMCRoutedPckts:
    505         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, IMRP4r, &count);
    506         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, IMRP6r, &count);
    507         break;
    508     case snmpBcmIPMCInDroppedPckts:
    509         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, RDBGC2r, &count);
    510         break;
    511     case snmpBcmIPMCOutDroppedPckts:
    512         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, TDBGC5r, &count);
    513         break;
    514 
    515         /* EA (broadcom specific) - unsupported in XGS */
    516     case snmpBcmPonInDroppedOctets:
    517     case snmpBcmPonOutDroppedOctets:
    518     case snmpBcmPonInDelayedOctets:
    519     case snmpBcmPonOutDelayedOctets:
    520     case snmpBcmPonInDelayedHundredUs:
    521     case snmpBcmPonOutDelayedHundredUs:
    522     case snmpBcmPonInFrameErrors:
    523     case snmpBcmPonInOamFrames:
    524     case snmpBcmPonOutOamFrames:
    525     case snmpBcmPonOutUnusedOctets:
    526 	break;
    527 
    528     /* Vlan Tag Frame Counters */
    529     case snmpBcmRxVlanTagFrame:
    530         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, MXQ_RVLNr, &count);
    531         break;
    532     case snmpBcmRxDoubleVlanTagFrame:
    533         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, MXQ_RDVLNr, &count);
    534         break;
    535     case snmpBcmTxVlanTagFrame:
    536         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, MXQ_TVLNr, &count);
    537         break;
    538     case snmpBcmTxDoubleVlanTagFrame:
    539         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, MXQ_TDVLNr, &count);
    540         break;
    541 
    542     /* PFC Control Frame Counters */
    543     case snmpBcmRxPFCControlFrame:
    544         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, MXQ_RXPPr, &count);
    545         break;
    546 
    547     case snmpBcmTxPFCControlFrame:
    548         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, MXQ_TXPPr, &count);
    549         break;
    550 
    551     /* Receive PFC Frame Priority 0 XON to XOFF */
    552     case snmpBcmRxPFCFrameXonPriority0:
    553         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, MXQ_RPFCOFF0r, &count);
    554         break;
    555 
    556     case snmpBcmRxPFCFrameXonPriority1:
    557         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, MXQ_RPFCOFF1r, &count);
    558         break;
    559 
    560     case snmpBcmRxPFCFrameXonPriority2:
    561         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, MXQ_RPFCOFF2r, &count);
    562         break;
    563 
    564     case snmpBcmRxPFCFrameXonPriority3:
    565         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, MXQ_RPFCOFF3r, &count);
    566         break;
    567 
    568     case snmpBcmRxPFCFrameXonPriority4:
    569         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, MXQ_RPFCOFF4r, &count);
    570         break;
    571 
    572     case snmpBcmRxPFCFrameXonPriority5:
    573         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, MXQ_RPFCOFF5r, &count);
    574         break;
    575 
    576     case snmpBcmRxPFCFrameXonPriority6:
    577         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, MXQ_RPFCOFF6r, &count);
    578         break;
    579 
    580     case snmpBcmRxPFCFrameXonPriority7:
    581         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, MXQ_RPFCOFF7r, &count);
    582         break;
    583 
    584     /* Receive PFC Frame Priority */
    585     case snmpBcmRxPFCFramePriority0:
    586         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, MXQ_RPFC0r, &count);
    587         break;
    588 
    589     case snmpBcmRxPFCFramePriority1:
    590         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, MXQ_RPFC1r, &count);
    591         break;
    592 
    593     case snmpBcmRxPFCFramePriority2:
    594         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, MXQ_RPFC2r, &count);
    595         break;
    596 
    597     case snmpBcmRxPFCFramePriority3:
    598         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, MXQ_RPFC3r, &count);
    599         break;
    600 
    601     case snmpBcmRxPFCFramePriority4:
    602         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, MXQ_RPFC4r, &count);
    603         break;
    604 
    605     case snmpBcmRxPFCFramePriority5:
    606         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, MXQ_RPFC5r, &count);
    607         break;
    608 
    609     case snmpBcmRxPFCFramePriority6:
    610         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, MXQ_RPFC6r, &count);
    611         break;
    612 
    613     case snmpBcmRxPFCFramePriority7:
    614         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, MXQ_RPFC7r, &count);
    615         break;
    616 
    617     /* Transmit PFC Frame Priority */
    618     case snmpBcmTxPFCFramePriority0:
    619         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, MXQ_TPFC0r, &count);
    620         break;
    621 
    622     case snmpBcmTxPFCFramePriority1:
    623         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, MXQ_TPFC1r, &count);
    624         break;
    625 
    626     case snmpBcmTxPFCFramePriority2:
    627         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, MXQ_TPFC2r, &count);
    628         break;
    629 
    630     case snmpBcmTxPFCFramePriority3:
    631         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, MXQ_TPFC3r, &count);
    632         break;
    633 
    634     case snmpBcmTxPFCFramePriority4:
    635         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, MXQ_TPFC4r, &count);
    636         break;
    637 
    638     case snmpBcmTxPFCFramePriority5:
    639         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, MXQ_TPFC5r, &count);
    640         break;
    641 
    642     case snmpBcmTxPFCFramePriority6:
    643         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, MXQ_TPFC6r, &count);
    644         break;
    645 
    646     case snmpBcmTxPFCFramePriority7:
    647         BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, MXQ_TPFC7r, &count);
    648         break;
    649 
    650     case snmpFcmPortClass3RxFrames:
    651         if (soc_feature(unit, soc_feature_fcoe)) {
    652             BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, RDBGC3r, &count);
    653         } else {
    654             return BCM_E_UNAVAIL;
    655         }
    656         break;
    657 
    658     case snmpFcmPortClass3TxFrames:
    659         if (soc_feature(unit, soc_feature_fcoe)) {
    660             BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, TDBGC6r, &count);
    661         } else {
    662             return BCM_E_UNAVAIL;
    663         }
    664         break;
    665 
    666     case snmpFcmPortClass3Discards:
    667         if (soc_feature(unit, soc_feature_fcoe)) {
    668             BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, RDBGC4r, &count);
    669         } else {
    670             return BCM_E_UNAVAIL;
    671         }
    672         break;
    673 
    674     case snmpFcmPortClass2RxFrames:
    675         if (soc_feature(unit, soc_feature_fcoe)) {
    676             BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, RDBGC5r, &count);
    677         } else {
    678             return BCM_E_UNAVAIL;
    679         }
    680         break;
    681 
    682     case snmpFcmPortClass2TxFrames:
    683         if (soc_feature(unit, soc_feature_fcoe)) {
    684             BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, TDBGC7r, &count);
    685         } else {
    686             return BCM_E_UNAVAIL;
    687         }
    688         break;
    689 
    690     case snmpFcmPortClass2Discards:
    691         if (soc_feature(unit, soc_feature_fcoe)) {
    692             BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, RDBGC6r, &count);
    693         } else {
    694             return BCM_E_UNAVAIL;
    695         }
    696         break;
    697 
    698     case snmpFcmPortInvalidCRCs:
    699         if (soc_feature(unit, soc_feature_fcoe)) {
    700             BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, 
    701                      EGR_FCOE_INVALID_CRC_FRAMESr, &count);
    702         } else {
    703             return BCM_E_UNAVAIL;
    704         }
    705         break;
    706 
    707     case snmpFcmPortDelimiterErrors:
    708         if (soc_feature(unit, soc_feature_fcoe)) {
    709             BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op,
    710              EGR_FCOE_DELIMITER_ERROR_FRAMESr, 
    711                     &count);
    712         } else {
    713             return BCM_E_UNAVAIL;
    714         }
    715         break;
    716 
    717     case snmpBcmRxDot3LengthMismatches:
    718         if (SOC_REG_IS_VALID(unit, MXQ_RFLRr)) {
    719             BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op,
    720                               MXQ_RFLRr, &count); /* Good FCS, bad length */
    721         } else {
    722             return BCM_E_UNAVAIL;
    723         }
    724         break;
    725 
    726     default:
    727         if (type < snmpValCount) {
    728             return BCM_E_UNAVAIL;
    729         }
    730         LOG_VERBOSE(BSL_LS_BCM_STAT,  
    731                     (BSL_META_U(unit, 
    732                    "_bcm_stat_mxq_get: Statistic not supported: %d\n"), type));
    733         return BCM_E_PARAM;
    734     }
    735 
    736     if (stat_op == _BCM_STAT_GET) {
    737         *val = count;
    738     }
    739     return BCM_E_NONE;
    740 }