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 }