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 }