stat_generic.c (44487B)
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 * Function: 19 * _bcm_stat_generic_get 20 * Description: 21 * Get the specified statistic for a port with common counter shared 22 * by both XE and GE MAC. 23 * Parameters: 24 * unit - PCI device unit number (driver internal) 25 * port - zero-based port number 26 * sync_mode - if 1 read hw counter else sw accumualated counter 27 * type - SNMP statistics type (see stat.h) 28 * val - (OUT) 64 bit statistic counter value 29 * Returns: 30 * BCM_E_NONE - Success. 31 * BCM_E_PARAM - Illegal parameter. 32 * BCM_E_INTERNAL - Chip access failure. 33 */ 34 int 35 _bcm_stat_generic_get_set(int unit, bcm_port_t port, 36 int sync_mode, int stat_op, 37 bcm_stat_val_t type, uint64 *val) 38 { 39 uint64 count, count1; 40 int reg_valid; 41 int reg_op = (stat_op == _BCM_STAT_GET)? _BCM_STAT_REG_ADD: 42 _BCM_STAT_REG_CLEAR; 43 int reg_sub_op = (stat_op == _BCM_STAT_GET)? _BCM_STAT_REG_SUB: 44 _BCM_STAT_REG_CLEAR; 45 46 #ifdef BCM_TOMAHAWK_SUPPORT 47 soc_ctr_control_info_t ctrl_info; 48 ctrl_info.instance = -1; 49 #endif /* BCM_TOMAHAWK_SUPPORT */ 50 51 COMPILER_REFERENCE(&count); /* Work around PPC compiler bug */ 52 COMPILER_64_ZERO(count); 53 54 switch (type) { 55 /* *** RFC 1213 *** */ 56 case snmpIfInOctets: 57 BCM_STAT_GENERIC_REG_OPER(unit, port, sync_mode, reg_op, RBYT, &count); 58 BCM_STAT_GENERIC_REG_OPER(unit, port, sync_mode, reg_op, RRBYT, &count); 59 break; 60 case snmpIfInUcastPkts: /* Unicast frames */ 61 if (soc_feature(unit, soc_feature_hw_stats_calc)) { 62 if (COUNT_OVR_ERRORS(unit)) { 63 BCM_STAT_GENERIC_REG_OPER(unit, port, sync_mode, reg_op, 64 RUCA, &count); /*unicast pkts rcvd */ 65 } else { 66 if (SOC_REG_IS_VALID(unit, RUC_64r)) { 67 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, 68 RUC_64r, &count); /* unicast pkts rcvd */ 69 } else { 70 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, 71 RUCr, &count); /* unicast pkts rcvd */ 72 } 73 } 74 } else { 75 BCM_STAT_GENERIC_REG_OPER(unit, port, sync_mode, reg_op, RPKT, &count); 76 77 BCM_STAT_GENERIC_REG_OPER(unit, port, sync_mode, reg_sub_op, 78 RMCA, &count); /* - multicast */ 79 BCM_STAT_GENERIC_REG_OPER(unit, port, sync_mode, reg_sub_op, 80 RBCA, &count); /* - broadcast */ 81 BCM_STAT_GENERIC_REG_OPER(unit, port, sync_mode, reg_sub_op, 82 RFCS, &count); /* - bad FCS */ 83 BCM_STAT_GENERIC_REG_OPER(unit, port, sync_mode, reg_sub_op, 84 RFLR, &count); /* - good FCS, bad length */ 85 BCM_STAT_GENERIC_REG_OPER(unit, port, sync_mode, reg_sub_op, 86 RXCF, &count); /* - good FCS, all MAC ctrl */ 87 BCM_STAT_GENERIC_REG_OPER(unit, port, sync_mode, reg_sub_op, 88 RJBR, &count); /* - oversize, bad FCS */ 89 if (COUNT_OVR_ERRORS(unit)) { 90 BCM_STAT_GENERIC_REG_OPER(unit, port, sync_mode, reg_sub_op, 91 ROVR, &count); /* - oversize, good FCS */ 92 } 93 BCM_STAT_GENERIC_REG_OPER(unit, port, sync_mode, reg_sub_op, 94 RMTUE, &count); /* - MTU errors */ 95 } 96 break; 97 case snmpIfInNUcastPkts: /* Non-unicast frames */ 98 if (COUNT_OVR_ERRORS(unit)) { 99 BCM_STAT_GENERIC_REG_OPER(unit, port, sync_mode, reg_op, 100 RMCA, &count); /* + multicast */ 101 BCM_STAT_GENERIC_REG_OPER(unit, port, sync_mode, reg_op, 102 RBCA, &count); /* + broadcast */ 103 } else { 104 BCM_STAT_GENERIC_REG_OPER(unit, port, sync_mode, reg_op, 105 RUCA, &count); /* + unicast excl */ 106 /* oversize */ 107 BCM_STAT_GENERIC_REG_OPER(unit, port, sync_mode, reg_op, 108 RMCA, &count); /* + multicast */ 109 BCM_STAT_GENERIC_REG_OPER(unit, port, sync_mode, reg_op, 110 RBCA, &count); /* + broadcast */ 111 BCM_STAT_GENERIC_REG_OPER(unit, port, sync_mode, reg_op, 112 ROVR, &count); /* + oversize */ 113 if (SOC_REG_IS_VALID(unit, RUC_64r)) { 114 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_sub_op, 115 RUC_64r, &count); /* - unicast */ 116 } else { 117 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_sub_op, 118 RUCr, &count); /* - unicast */ 119 } 120 } 121 break; 122 case snmpIfInBroadcastPkts: /* Broadcast frames */ 123 BCM_STAT_GENERIC_REG_OPER(unit, port, sync_mode, reg_op, RBCA, &count); 124 break; 125 case snmpIfInMulticastPkts: /* Multicast frames */ 126 BCM_STAT_GENERIC_REG_OPER(unit, port, sync_mode, reg_op, RMCA, &count); 127 break; 128 case snmpIfInDiscards: /* Dropped packets including aborted */ 129 if (SOC_REG_IS_VALID(unit, RDBGC0_64r)) { 130 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, RDBGC0_64r, &count); 131 } else { 132 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, 133 RDBGC0r, &count); /* Ingress drop conditions */ 134 } 135 BCM_IF_ERROR_RETURN 136 (_bcm_stat_counter_non_dma_extra_get(unit, 137 SOC_COUNTER_NON_DMA_PORT_DROP_PKT_ING, 138 port, &count1)); 139 COMPILER_64_ADD_64(count, count1); 140 break; 141 case snmpIfInErrors: /* RX Errors or Receive packets - non-error frames */ 142 BCM_STAT_GENERIC_REG_OPER(unit, port, sync_mode, reg_op, RFCS, &count); 143 BCM_STAT_GENERIC_REG_OPER(unit, port, sync_mode, reg_op, RJBR, &count); 144 BCM_STAT_GENERIC_REG_OPER(unit, port, sync_mode, reg_op, RRPKT, &count); 145 146 BCM_STAT_GENERIC_REG_VALIDATE(unit, port, RMTUE, reg_valid); 147 if (reg_valid) { 148 BCM_STAT_GENERIC_REG_OPER(unit, port, sync_mode, reg_op, RMTUE, &count); 149 } else if (COUNT_OVR_ERRORS(unit)) { 150 BCM_STAT_GENERIC_REG_OPER(unit, port, sync_mode, reg_op, ROVR, &count); 151 } 152 break; 153 case snmpIfInUnknownProtos: 154 break; 155 case snmpIfOutOctets: 156 BCM_STAT_GENERIC_REG_OPER(unit, port, sync_mode, reg_op, TBYT, &count); 157 break; 158 case snmpIfOutUcastPkts: /* Unicast frames */ 159 BCM_STAT_GENERIC_REG_OPER(unit, port, sync_mode, reg_op, TUCA, &count); 160 if (!COUNT_OVR_ERRORS(unit)) { 161 BCM_STAT_GENERIC_REG_OPER(unit, port, sync_mode, reg_op, 162 TOVR, &count); /* + oversized pkts */ 163 } 164 break; 165 case snmpIfOutNUcastPkts: /* Non-unicast frames */ 166 BCM_STAT_GENERIC_REG_OPER(unit, port, sync_mode, reg_op, 167 TMCA, &count); /* + multicast */ 168 BCM_STAT_GENERIC_REG_OPER(unit, port, sync_mode, reg_op, 169 TBCA, &count); /* + broadcast */ 170 break; 171 case snmpIfOutBroadcastPkts: /* Broadcast frames */ 172 BCM_STAT_GENERIC_REG_OPER(unit, port, sync_mode, reg_op, TBCA, &count); 173 break; 174 case snmpIfOutMulticastPkts: /* Multicast frames */ 175 BCM_STAT_GENERIC_REG_OPER(unit, port, sync_mode, reg_op, TMCA, &count); 176 break; 177 case snmpIfOutDiscards: /* Aged packet counter */ 178 if (SOC_REG_IS_VALID(unit, HOLDr)) { 179 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, 180 HOLDr, &count); /* L2 MTU drops */ 181 } else if (SOC_REG_IS_VALID(unit, HOL_DROPr)) { 182 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, HOL_DROPr, &count); 183 } 184 if (SOC_REG_IS_VALID(unit, TDBGC3_64r)) { 185 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, TDBGC3_64r, &count); 186 } else { 187 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, TDBGC3r, &count); 188 } 189 BCM_IF_ERROR_RETURN( 190 bcm_esw_cosq_stat_get(unit, port, BCM_COS_INVALID, 191 bcmCosqStatDroppedPackets, &count1)); 192 COMPILER_64_ADD_64(count, count1); 193 break; 194 case snmpIfOutErrors: /* Error packets could not be xmitted */ 195 BCM_STAT_GENERIC_REG_OPER(unit, port, sync_mode, reg_op, TERR, &count); 196 break; 197 case snmpIfOutQLen: 198 { 199 uint32 qcount; 200 if (bcm_esw_port_queued_count_get(unit, port, &qcount) >= 0) { 201 COMPILER_64_ADD_32(count, qcount); 202 } 203 } 204 break; 205 case snmpIpInReceives: 206 if (SOC_REG_IS_VALID(unit, RIPC4_64r)) { 207 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, RIPC4_64r, &count); 208 } else { 209 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, RIPC4r, &count); 210 } 211 break; 212 case snmpIpInHdrErrors: 213 if (SOC_REG_IS_VALID(unit, RIPD4_64r)) { 214 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, RIPD4_64r, &count); 215 } else { 216 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, RIPD4r, &count); 217 } 218 break; 219 case snmpIpForwDatagrams: 220 if (SOC_REG_IS_VALID(unit, TDBGC4_64r)) { 221 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, TDBGC4_64r, &count); 222 } else { 223 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, TDBGC4r, &count); 224 } 225 break; 226 case snmpIpInDiscards: 227 if (SOC_REG_IS_VALID(unit, RIPHE4_64r)) { 228 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, RIPHE4_64r, &count); 229 } else { 230 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, RIPHE4r, &count); 231 } 232 if (SOC_REG_IS_VALID(unit, RIPD4_64r)) { 233 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, RIPD4_64r, &count); 234 } else { 235 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, RIPD4r, &count); 236 } 237 break; 238 239 /* *** RFC 1493 *** */ 240 241 case snmpDot1dBasePortDelayExceededDiscards: 242 break; 243 case snmpDot1dBasePortMtuExceededDiscards: 244 BCM_STAT_GENERIC_REG_OPER(unit, port, sync_mode, reg_op, RMTUE, &count); 245 break; 246 case snmpDot1dTpPortInFrames: 247 BCM_STAT_GENERIC_REG_OPER(unit, port, sync_mode, reg_op, RPKT, &count); 248 break; 249 case snmpDot1dTpPortOutFrames: 250 BCM_STAT_GENERIC_REG_OPER(unit, port, sync_mode, reg_op, TPKT, &count); 251 break; 252 case snmpDot1dPortInDiscards: 253 if (SOC_REG_IS_VALID(unit, RDISC_64r)) { 254 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, RDISC_64r, &count); 255 } else { 256 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, RDISCr, &count); 257 } 258 if (SOC_REG_IS_VALID(unit, RIPD4_64r)) { 259 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, RIPD4_64r, &count); 260 } else { 261 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, RIPD4r, &count); 262 } 263 if (SOC_REG_IS_VALID(unit, RIPD6_64r)) { 264 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, RIPD6_64r, &count); 265 } else { 266 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, RIPD6r, &count); 267 } 268 if (SOC_REG_IS_VALID(unit, RPORTD_64r)) { 269 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, RPORTD_64r, &count); 270 } else { 271 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, RPORTDr, &count); 272 } 273 break; 274 275 /* *** RFC 1757 *** */ 276 277 case snmpEtherStatsDropEvents: 278 if (SOC_REG_IS_VALID(unit, RDISC_64r)) { 279 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, RDISC_64r, &count); 280 } else { 281 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, RDISCr, &count); 282 } 283 break; 284 case snmpEtherStatsOctets: 285 BCM_STAT_GENERIC_REG_OPER(unit, port, sync_mode, reg_op, RBYT, &count); 286 BCM_STAT_GENERIC_REG_OPER(unit, port, sync_mode, reg_op, TBYT, &count); 287 BCM_STAT_GENERIC_REG_OPER(unit, port, sync_mode, reg_op, 288 RRBYT, &count); /* Runts bytes */ 289 break; 290 case snmpEtherStatsPkts: 291 BCM_STAT_GENERIC_REG_OPER(unit, port, sync_mode, reg_op, RPKT, &count); 292 BCM_STAT_GENERIC_REG_OPER(unit, port, sync_mode, reg_op, TPKT, &count); 293 BCM_STAT_GENERIC_REG_OPER(unit, port, sync_mode, reg_op, 294 RRPKT, &count); /* Runts */ 295 break; 296 case snmpEtherStatsBroadcastPkts: 297 BCM_STAT_GENERIC_REG_OPER(unit, port, sync_mode, reg_op, RBCA, &count); 298 BCM_STAT_GENERIC_REG_OPER(unit, port, sync_mode, reg_op, TBCA, &count); 299 break; 300 case snmpEtherStatsMulticastPkts: 301 BCM_STAT_GENERIC_REG_OPER(unit, port, sync_mode, reg_op, RMCA, &count); 302 BCM_STAT_GENERIC_REG_OPER(unit, port, sync_mode, reg_op, TMCA, &count); 303 break; 304 case snmpEtherStatsCRCAlignErrors: 305 BCM_STAT_GENERIC_REG_OPER(unit, port, sync_mode, reg_op, RFCS, &count); 306 break; 307 case snmpEtherStatsUndersizePkts: 308 BCM_STAT_GENERIC_REG_OPER(unit, port, sync_mode, reg_op, RUND, &count); 309 break; 310 case snmpEtherStatsOversizePkts: 311 BCM_STAT_GENERIC_REG_OPER(unit, port, sync_mode, reg_op, ROVR, &count); 312 BCM_STAT_GENERIC_REG_OPER(unit, port, sync_mode, reg_op, TOVR, &count); 313 break; 314 case snmpEtherRxOversizePkts: 315 BCM_STAT_GENERIC_REG_OPER(unit, port, sync_mode, reg_op, ROVR, &count); 316 break; 317 case snmpEtherTxOversizePkts: 318 BCM_STAT_GENERIC_REG_OPER(unit, port, sync_mode, reg_op, TOVR, &count); 319 break; 320 case snmpEtherStatsFragments: 321 BCM_STAT_GENERIC_REG_OPER(unit, port, sync_mode, reg_op, RFRG, &count); 322 break; 323 case snmpEtherStatsJabbers: 324 BCM_STAT_GENERIC_REG_OPER(unit, port, sync_mode, reg_op, RJBR, &count); 325 break; 326 case snmpEtherStatsCollisions: 327 break; 328 329 /* *** rfc1757 definition counts receive packet only *** */ 330 331 case snmpEtherStatsPkts64Octets: 332 BCM_STAT_GENERIC_REG_OPER(unit, port, sync_mode, reg_op, R64, &count); 333 BCM_STAT_GENERIC_REG_OPER(unit, port, sync_mode, reg_op, T64, &count); 334 break; 335 case snmpEtherStatsPkts65to127Octets: 336 BCM_STAT_GENERIC_REG_OPER(unit, port, sync_mode, reg_op, R127, &count); 337 BCM_STAT_GENERIC_REG_OPER(unit, port, sync_mode, reg_op, T127, &count); 338 break; 339 case snmpEtherStatsPkts128to255Octets: 340 BCM_STAT_GENERIC_REG_OPER(unit, port, sync_mode, reg_op, R255, &count); 341 BCM_STAT_GENERIC_REG_OPER(unit, port, sync_mode, reg_op, T255, &count); 342 break; 343 case snmpEtherStatsPkts256to511Octets: 344 BCM_STAT_GENERIC_REG_OPER(unit, port, sync_mode, reg_op, R511, &count); 345 BCM_STAT_GENERIC_REG_OPER(unit, port, sync_mode, reg_op, T511, &count); 346 break; 347 case snmpEtherStatsPkts512to1023Octets: 348 BCM_STAT_GENERIC_REG_OPER(unit, port, sync_mode, reg_op, R1023, &count); 349 BCM_STAT_GENERIC_REG_OPER(unit, port, sync_mode, reg_op, T1023, &count); 350 break; 351 case snmpEtherStatsPkts1024to1518Octets: 352 BCM_STAT_GENERIC_REG_OPER(unit, port, sync_mode, reg_op, R1518, &count); 353 BCM_STAT_GENERIC_REG_OPER(unit, port, sync_mode, reg_op, T1518, &count); 354 break; 355 case snmpBcmEtherStatsPkts1519to1522Octets: /* not in rfc1757 */ 356 BCM_STAT_GENERIC_REG_OPER(unit, port, sync_mode, reg_op, RMGV, &count); 357 BCM_STAT_GENERIC_REG_OPER(unit, port, sync_mode, reg_op, TMGV, &count); 358 break; 359 case snmpBcmEtherStatsPkts1522to2047Octets: /* not in rfc1757 */ 360 BCM_STAT_GENERIC_REG_OPER(unit, port, sync_mode, reg_op, R2047, &count); 361 BCM_STAT_GENERIC_REG_OPER(unit, port, sync_mode, reg_sub_op, RMGV, &count); 362 BCM_STAT_GENERIC_REG_OPER(unit, port, sync_mode, reg_op, T2047, &count); 363 BCM_STAT_GENERIC_REG_OPER(unit, port, sync_mode, reg_sub_op, TMGV, &count); 364 break; 365 case snmpBcmEtherStatsPkts2048to4095Octets: /* not in rfc1757 */ 366 BCM_STAT_GENERIC_REG_OPER(unit, port, sync_mode, reg_op, R4095, &count); 367 BCM_STAT_GENERIC_REG_OPER(unit, port, sync_mode, reg_op, T4095, &count); 368 break; 369 case snmpBcmEtherStatsPkts4095to9216Octets: /* not in rfc1757 */ 370 BCM_STAT_GENERIC_REG_OPER(unit, port, sync_mode, reg_op, R9216, &count); 371 BCM_STAT_GENERIC_REG_OPER(unit, port, sync_mode, reg_op, T9216, &count); 372 break; 373 case snmpBcmEtherStatsPkts9217to16383Octets: /* not in rfc1757 */ 374 BCM_STAT_GENERIC_REG_OPER(unit, port, sync_mode, reg_op, R16383, &count); 375 BCM_STAT_GENERIC_REG_OPER(unit, port, sync_mode, reg_op, T16383, &count); 376 break; 377 378 case snmpBcmReceivedPkts64Octets: 379 BCM_STAT_GENERIC_REG_OPER(unit, port, sync_mode, reg_op, R64, &count); 380 break; 381 case snmpBcmReceivedPkts65to127Octets: 382 BCM_STAT_GENERIC_REG_OPER(unit, port, sync_mode, reg_op, R127, &count); 383 break; 384 case snmpBcmReceivedPkts128to255Octets: 385 BCM_STAT_GENERIC_REG_OPER(unit, port, sync_mode, reg_op, R255, &count); 386 break; 387 case snmpBcmReceivedPkts256to511Octets: 388 BCM_STAT_GENERIC_REG_OPER(unit, port, sync_mode, reg_op, R511, &count); 389 break; 390 case snmpBcmReceivedPkts512to1023Octets: 391 BCM_STAT_GENERIC_REG_OPER(unit, port, sync_mode, reg_op, R1023, &count); 392 break; 393 case snmpBcmReceivedPkts1024to1518Octets: 394 BCM_STAT_GENERIC_REG_OPER(unit, port, sync_mode, reg_op, R1518, &count); 395 break; 396 case snmpBcmReceivedPkts1519to2047Octets: 397 BCM_STAT_GENERIC_REG_OPER(unit, port, sync_mode, reg_op, R2047, &count); 398 break; 399 case snmpBcmReceivedPkts2048to4095Octets: 400 BCM_STAT_GENERIC_REG_OPER(unit, port, sync_mode, reg_op, R4095, &count); 401 break; 402 case snmpBcmReceivedPkts4095to9216Octets: 403 BCM_STAT_GENERIC_REG_OPER(unit, port, sync_mode, reg_op, R9216, &count); 404 break; 405 case snmpBcmReceivedPkts9217to16383Octets: 406 BCM_STAT_GENERIC_REG_OPER(unit, port, sync_mode, reg_op, R16383, &count); 407 break; 408 409 case snmpBcmTransmittedPkts64Octets: 410 BCM_STAT_GENERIC_REG_OPER(unit, port, sync_mode, reg_op, T64, &count); 411 break; 412 case snmpBcmTransmittedPkts65to127Octets: 413 BCM_STAT_GENERIC_REG_OPER(unit, port, sync_mode, reg_op, T127, &count); 414 break; 415 case snmpBcmTransmittedPkts128to255Octets: 416 BCM_STAT_GENERIC_REG_OPER(unit, port, sync_mode, reg_op, T255, &count); 417 break; 418 case snmpBcmTransmittedPkts256to511Octets: 419 BCM_STAT_GENERIC_REG_OPER(unit, port, sync_mode, reg_op, T511, &count); 420 break; 421 case snmpBcmTransmittedPkts512to1023Octets: 422 BCM_STAT_GENERIC_REG_OPER(unit, port, sync_mode, reg_op, T1023, &count); 423 break; 424 case snmpBcmTransmittedPkts1024to1518Octets: 425 BCM_STAT_GENERIC_REG_OPER(unit, port, sync_mode, reg_op, T1518, &count); 426 break; 427 case snmpBcmTransmittedPkts1519to2047Octets: 428 BCM_STAT_GENERIC_REG_OPER(unit, port, sync_mode, reg_op, T2047, &count); 429 break; 430 case snmpBcmTransmittedPkts2048to4095Octets: 431 BCM_STAT_GENERIC_REG_OPER(unit, port, sync_mode, reg_op, T4095, &count); 432 break; 433 case snmpBcmTransmittedPkts4095to9216Octets: 434 BCM_STAT_GENERIC_REG_OPER(unit, port, sync_mode, reg_op, T9216, &count); 435 break; 436 case snmpBcmTransmittedPkts9217to16383Octets: 437 BCM_STAT_GENERIC_REG_OPER(unit, port, sync_mode, reg_op, T16383, &count); 438 break; 439 440 case snmpEtherStatsTXNoErrors: 441 BCM_STAT_GENERIC_REG_OPER(unit, port, sync_mode, reg_op, TPOK, &count); 442 break; 443 case snmpEtherStatsRXNoErrors: 444 BCM_STAT_GENERIC_REG_OPER(unit, port, sync_mode, reg_op, RPOK, &count); 445 break; 446 447 /* *** RFC 2665 *** */ 448 449 case snmpDot3StatsAlignmentErrors: 450 /* SDK-133312: 451 lack of CDMIB_RALNf, can't use BCM_STAT_GENERIC_REG_OPER */ 452 if (soc_feature(unit, soc_feature_cxl_mib)) { 453 int phy_port; 454 soc_reg_t ctr_reg_adj = RALNr; 455 456 if (soc_feature(unit, soc_feature_logical_port_num)) { 457 phy_port = SOC_INFO(unit).port_l2p_mapping[port]; 458 } else { 459 phy_port = port; 460 } 461 if (SOC_BLOCK_IS_CMP(unit, SOC_PORT_BLOCK(unit, phy_port), 462 SOC_BLK_CLPORT)) { 463 if (SOC_REG_IS_VALID(unit, CLMIB_RALNr)) { 464 ctr_reg_adj = CLMIB_RALNr; 465 } 466 } else if (SOC_BLOCK_IS_CMP(unit, SOC_PORT_BLOCK(unit, phy_port), 467 SOC_BLK_XLPORT)) { 468 if (SOC_REG_IS_VALID(unit, XLMIB_RALNr)) { 469 ctr_reg_adj = XLMIB_RALNr; 470 } 471 } 472 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, ctr_reg_adj, val); 473 } else { 474 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, RALNr, val); 475 } 476 break; 477 case snmpDot3StatsFCSErrors: 478 BCM_STAT_GENERIC_REG_OPER(unit, port, sync_mode, reg_op, RFCS, &count); 479 break; 480 case snmpDot3StatsSingleCollisionFrames: 481 break; 482 case snmpDot3StatsMultipleCollisionFrames: 483 break; 484 case snmpDot3StatsSQETTestErrors: 485 break; 486 case snmpDot3StatsDeferredTransmissions: 487 break; 488 case snmpDot3StatsLateCollisions: 489 break; 490 case snmpDot3StatsExcessiveCollisions: 491 break; 492 case snmpDot3StatsInternalMacTransmitErrors: 493 BCM_STAT_GENERIC_REG_OPER(unit, port, sync_mode, reg_op, TUFL, &count); 494 BCM_STAT_GENERIC_REG_OPER(unit, port, sync_mode, reg_op, TERR, &count); 495 break; 496 case snmpDot3StatsCarrierSenseErrors: 497 /* SDK-133312: 498 lack of CDMIB_RFCRf, can't use BCM_STAT_GENERIC_REG_OPER */ 499 if (soc_feature(unit, soc_feature_cxl_mib)) { 500 int phy_port; 501 soc_reg_t ctr_reg_adj = RFCRr; 502 503 if (soc_feature(unit, soc_feature_logical_port_num)) { 504 phy_port = SOC_INFO(unit).port_l2p_mapping[port]; 505 } else { 506 phy_port = port; 507 } 508 if (SOC_BLOCK_IS_CMP(unit, SOC_PORT_BLOCK(unit, phy_port), 509 SOC_BLK_CLPORT)) { 510 if (SOC_REG_IS_VALID(unit, CLMIB_RFCRr)) { 511 ctr_reg_adj = CLMIB_RFCRr; 512 } 513 } else if (SOC_BLOCK_IS_CMP(unit, SOC_PORT_BLOCK(unit, phy_port), 514 SOC_BLK_XLPORT)) { 515 if (SOC_REG_IS_VALID(unit, XLMIB_RFCRr)) { 516 ctr_reg_adj = XLMIB_RFCRr; 517 } 518 } 519 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, ctr_reg_adj, val); 520 } else { 521 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, RFCRr, val); 522 } 523 break; 524 case snmpDot3StatsFrameTooLongs: 525 BCM_STAT_GENERIC_REG_OPER(unit, port, sync_mode, reg_op, RMTUE, &count); 526 break; 527 case snmpDot3StatsInternalMacReceiveErrors: 528 break; 529 case snmpDot3StatsSymbolErrors: 530 BCM_STAT_GENERIC_REG_OPER(unit, port, sync_mode, reg_op, RERPKT, &count); 531 break; 532 case snmpDot3ControlInUnknownOpcodes: 533 BCM_STAT_GENERIC_REG_OPER(unit, port, sync_mode, reg_op, RXUO, &count); 534 break; 535 case snmpDot3InPauseFrames: 536 BCM_STAT_GENERIC_REG_OPER(unit, port, sync_mode, reg_op, RXPF, &count); 537 break; 538 case snmpDot3OutPauseFrames: 539 BCM_STAT_GENERIC_REG_OPER(unit, port, sync_mode, reg_op, TXPF, &count); 540 break; 541 542 /* *** RFC 2233 high capacity versions of RFC1213 objects *** */ 543 544 case snmpIfHCInOctets: 545 BCM_STAT_GENERIC_REG_OPER(unit, port, sync_mode, reg_op, RBYT, &count); 546 BCM_STAT_GENERIC_REG_OPER(unit, port, sync_mode, reg_op, RRBYT, &count); 547 break; 548 case snmpIfHCInUcastPkts: 549 if (soc_feature(unit, soc_feature_hw_stats_calc)) { 550 if (COUNT_OVR_ERRORS(unit)) { 551 BCM_STAT_GENERIC_REG_OPER(unit, port, sync_mode, reg_op, 552 RUCA, &count); /* unicast pkts rcvd */ 553 } else { 554 if (SOC_REG_IS_VALID(unit, RUC_64r)) { 555 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, 556 RUC_64r, &count); /* unicast pkts rcvd */ 557 } else { 558 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, 559 RUCr, &count); /* unicast pkts rcvd */ 560 } 561 } 562 } else { 563 BCM_STAT_GENERIC_REG_OPER(unit, port, sync_mode, reg_op, RPKT, &count); 564 BCM_STAT_GENERIC_REG_OPER(unit, port, sync_mode, reg_sub_op, 565 RMCA, &count); 566 BCM_STAT_GENERIC_REG_OPER(unit, port, sync_mode, reg_sub_op, 567 RBCA, &count); 568 BCM_STAT_GENERIC_REG_OPER(unit, port, sync_mode, reg_sub_op, 569 RFCS, &count); /* - bad FCS */ 570 BCM_STAT_GENERIC_REG_OPER(unit, port, sync_mode, reg_sub_op, 571 RFLR, &count); /* - good FCS, bad length */ 572 BCM_STAT_GENERIC_REG_OPER(unit, port, sync_mode, reg_sub_op, 573 RXCF, &count); /* - good FCS, all MAC ctrl */ 574 BCM_STAT_GENERIC_REG_OPER(unit, port, sync_mode, reg_sub_op, 575 RXPF, &count); /* - not included in RXCFr */ 576 BCM_STAT_GENERIC_REG_OPER(unit, port, sync_mode, reg_sub_op, 577 RJBR, &count); /* - oversize, bad FCS */ 578 if (COUNT_OVR_ERRORS(unit)) { 579 BCM_STAT_GENERIC_REG_OPER(unit, port, sync_mode, reg_sub_op, 580 ROVR, &count); /* - oversize, good FCS */ 581 } 582 BCM_STAT_GENERIC_REG_OPER(unit, port, sync_mode, reg_sub_op, 583 RMTUE, &count); /* - MTU errors */ 584 } 585 break; 586 case snmpIfHCInMulticastPkts: 587 BCM_STAT_GENERIC_REG_OPER(unit, port, sync_mode, reg_op, RMCA, &count); 588 break; 589 case snmpIfHCInBroadcastPkts: 590 BCM_STAT_GENERIC_REG_OPER(unit, port, sync_mode, reg_op, RBCA, &count); 591 break; 592 case snmpIfHCOutOctets: 593 BCM_STAT_GENERIC_REG_OPER(unit, port, sync_mode, reg_op, TBYT, &count); 594 break; 595 case snmpIfHCOutUcastPkts: 596 BCM_STAT_GENERIC_REG_OPER(unit, port, sync_mode, reg_op, TUCA, &count); 597 if (!COUNT_OVR_ERRORS(unit)) { 598 BCM_STAT_GENERIC_REG_OPER(unit, port, sync_mode, reg_op, 599 TOVR, &count); /* + oversized pkts */ 600 } 601 break; 602 case snmpIfHCOutMulticastPkts: 603 BCM_STAT_GENERIC_REG_OPER(unit, port, sync_mode, reg_op, TMCA, &count); 604 break; 605 case snmpIfHCOutBroadcastPckts: 606 BCM_STAT_GENERIC_REG_OPER(unit, port, sync_mode, reg_op, TBCA, &count); 607 break; 608 609 /* *** RFC 2465 *** */ 610 611 case snmpIpv6IfStatsInReceives: 612 if (SOC_REG_IS_VALID(unit, RIPC6_64r)) { 613 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, RIPC6_64r, &count); 614 } else { 615 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, RIPC6r, &count); 616 } 617 if (SOC_REG_IS_VALID(unit, IMRP6_64r)) { 618 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, IMRP6_64r, &count); 619 } else { 620 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, IMRP6r, &count); 621 } 622 break; 623 case snmpIpv6IfStatsInHdrErrors: 624 if (SOC_REG_IS_VALID(unit, RIPD6_64r)) { 625 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, RIPD6_64r, &count); 626 } else { 627 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, RIPD6r, &count); 628 } 629 break; 630 case snmpIpv6IfStatsInAddrErrors: 631 if (SOC_REG_IS_VALID(unit, RIPHE6_64r)) { 632 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, RIPHE6_64r, &count); 633 } else { 634 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, RIPHE6r, &count); 635 } 636 break; 637 case snmpIpv6IfStatsInDiscards: 638 if (SOC_REG_IS_VALID(unit, RIPHE6_64r)) { 639 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, RIPHE6_64r, &count); 640 } else { 641 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, RIPHE6r, &count); 642 } 643 if (SOC_REG_IS_VALID(unit, RIPD6_64r)) { 644 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, RIPD6_64r, &count); 645 } else { 646 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, RIPD6r, &count); 647 } 648 break; 649 case snmpIpv6IfStatsOutForwDatagrams: 650 if (SOC_REG_IS_VALID(unit, TDBGC0_64r)) { 651 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, TDBGC0_64r, &count); 652 } else { 653 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, TDBGC0r, &count); 654 } 655 break; 656 case snmpIpv6IfStatsOutDiscards: 657 if (SOC_REG_IS_VALID(unit, TDBGC1_64r)) { 658 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, TDBGC1_64r, &count); 659 } else { 660 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, TDBGC1r, &count); 661 } 662 break; 663 case snmpIpv6IfStatsInMcastPkts: 664 if (SOC_REG_IS_VALID(unit, IMRP6_64r)) { 665 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, IMRP6_64r, &count); 666 } else { 667 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, IMRP6r, &count); 668 } 669 break; 670 case snmpIpv6IfStatsOutMcastPkts: 671 if (SOC_REG_IS_VALID(unit, TDBGC2_64r)) { 672 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, TDBGC2_64r, &count); 673 } else { 674 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, TDBGC2r, &count); 675 } 676 break; 677 678 /* *** IEEE 802.1bb *** */ 679 case snmpIeee8021PfcRequests: 680 BCM_STAT_GENERIC_REG_OPER(unit, port, sync_mode, reg_op, TXPP, &count); 681 break; 682 case snmpIeee8021PfcIndications: 683 BCM_STAT_GENERIC_REG_OPER(unit, port, sync_mode, reg_op, RXPP, &count); 684 break; 685 686 /* *** RFC 1284 - unsupported in XGS *** */ 687 case snmpDot3StatsInRangeLengthError: 688 break; 689 690 /* *** RFC 4837 - unsupported in XGS *** */ 691 case snmpDot3OmpEmulationCRC8Errors: 692 case snmpDot3MpcpRxGate: 693 case snmpDot3MpcpRxRegister: 694 case snmpDot3MpcpTxRegRequest: 695 case snmpDot3MpcpTxRegAck: 696 case snmpDot3MpcpTxReport: 697 case snmpDot3EponFecCorrectedBlocks: 698 case snmpDot3EponFecUncorrectableBlocks: 699 break; 700 701 /* IPMC counters (broadcom specific) */ 702 703 case snmpBcmIPMCBridgedPckts: 704 if (SOC_REG_IS_VALID(unit, RDBGC1_64r)) { 705 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, RDBGC1_64r, &count); 706 } else { 707 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, RDBGC1r, &count); 708 } 709 break; 710 case snmpBcmIPMCRoutedPckts: 711 if (SOC_REG_IS_VALID(unit, IMRP4_64r)) { 712 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, IMRP4_64r, &count); 713 } else { 714 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, IMRP4r, &count); 715 } 716 if (SOC_REG_IS_VALID(unit, IMRP6_64r)) { 717 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, IMRP6_64r, &count); 718 } else { 719 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, IMRP6r, &count); 720 } 721 break; 722 case snmpBcmIPMCInDroppedPckts: 723 if (SOC_REG_IS_VALID(unit, RDBGC2_64r)) { 724 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, RDBGC2_64r, &count); 725 } else { 726 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, RDBGC2r, &count); 727 } 728 break; 729 case snmpBcmIPMCOutDroppedPckts: 730 if (SOC_REG_IS_VALID(unit, TDBGC5_64r)) { 731 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, TDBGC5_64r, &count); 732 } else { 733 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, TDBGC5r, &count); 734 } 735 break; 736 737 /* EA (broadcom specific) - unsupported in XGS */ 738 case snmpBcmPonInDroppedOctets: 739 case snmpBcmPonOutDroppedOctets: 740 case snmpBcmPonInDelayedOctets: 741 case snmpBcmPonOutDelayedOctets: 742 case snmpBcmPonInDelayedHundredUs: 743 case snmpBcmPonOutDelayedHundredUs: 744 case snmpBcmPonInFrameErrors: 745 case snmpBcmPonInOamFrames: 746 case snmpBcmPonOutOamFrames: 747 case snmpBcmPonOutUnusedOctets: 748 break; 749 750 /* Vlan Tag Frame Counters */ 751 case snmpBcmRxVlanTagFrame: 752 BCM_STAT_GENERIC_REG_OPER(unit, port, sync_mode, reg_op, RVLN, &count); 753 break; 754 case snmpBcmRxDoubleVlanTagFrame: 755 BCM_STAT_GENERIC_REG_OPER(unit, port, sync_mode, reg_op, RDVLN, &count); 756 break; 757 case snmpBcmTxVlanTagFrame: 758 BCM_STAT_GENERIC_REG_OPER(unit, port, sync_mode, reg_op, TVLN, &count); 759 break; 760 case snmpBcmTxDoubleVlanTagFrame: 761 BCM_STAT_GENERIC_REG_OPER(unit, port, sync_mode, reg_op, TDVLN, &count); 762 break; 763 764 /* PFC Control Frame Counters */ 765 case snmpBcmRxPFCControlFrame: 766 BCM_STAT_GENERIC_REG_OPER(unit, port, sync_mode, reg_op, RXPP, &count); 767 break; 768 769 case snmpBcmTxPFCControlFrame: 770 BCM_STAT_GENERIC_REG_OPER(unit, port, sync_mode, reg_op, TXPP, &count); 771 break; 772 773 /* Receive PFC Frame Priority 0 XON to XOFF */ 774 case snmpBcmRxPFCFrameXonPriority0: 775 BCM_STAT_GENERIC_REG_OPER(unit, port, sync_mode, reg_op, RPFCOFF0, &count); 776 break; 777 778 case snmpBcmRxPFCFrameXonPriority1: 779 BCM_STAT_GENERIC_REG_OPER(unit, port, sync_mode, reg_op, RPFCOFF1, &count); 780 break; 781 782 case snmpBcmRxPFCFrameXonPriority2: 783 BCM_STAT_GENERIC_REG_OPER(unit, port, sync_mode, reg_op, RPFCOFF2, &count); 784 break; 785 786 case snmpBcmRxPFCFrameXonPriority3: 787 BCM_STAT_GENERIC_REG_OPER(unit, port, sync_mode, reg_op, RPFCOFF3, &count); 788 break; 789 790 case snmpBcmRxPFCFrameXonPriority4: 791 BCM_STAT_GENERIC_REG_OPER(unit, port, sync_mode, reg_op, RPFCOFF4, &count); 792 break; 793 794 case snmpBcmRxPFCFrameXonPriority5: 795 BCM_STAT_GENERIC_REG_OPER(unit, port, sync_mode, reg_op, RPFCOFF5, &count); 796 break; 797 798 case snmpBcmRxPFCFrameXonPriority6: 799 BCM_STAT_GENERIC_REG_OPER(unit, port, sync_mode, reg_op, RPFCOFF6, &count); 800 break; 801 802 case snmpBcmRxPFCFrameXonPriority7: 803 BCM_STAT_GENERIC_REG_OPER(unit, port, sync_mode, reg_op, RPFCOFF7, &count); 804 break; 805 806 /* Receive PFC Frame Priority */ 807 case snmpBcmRxPFCFramePriority0: 808 BCM_STAT_GENERIC_REG_OPER(unit, port, sync_mode, reg_op, RPFC0, &count); 809 break; 810 811 case snmpBcmRxPFCFramePriority1: 812 BCM_STAT_GENERIC_REG_OPER(unit, port, sync_mode, reg_op, RPFC1, &count); 813 break; 814 815 case snmpBcmRxPFCFramePriority2: 816 BCM_STAT_GENERIC_REG_OPER(unit, port, sync_mode, reg_op, RPFC2, &count); 817 break; 818 819 case snmpBcmRxPFCFramePriority3: 820 BCM_STAT_GENERIC_REG_OPER(unit, port, sync_mode, reg_op, RPFC3, &count); 821 break; 822 823 case snmpBcmRxPFCFramePriority4: 824 BCM_STAT_GENERIC_REG_OPER(unit, port, sync_mode, reg_op, RPFC4, &count); 825 break; 826 827 case snmpBcmRxPFCFramePriority5: 828 BCM_STAT_GENERIC_REG_OPER(unit, port, sync_mode, reg_op, RPFC5, &count); 829 break; 830 831 case snmpBcmRxPFCFramePriority6: 832 BCM_STAT_GENERIC_REG_OPER(unit, port, sync_mode, reg_op, RPFC6, &count); 833 break; 834 835 case snmpBcmRxPFCFramePriority7: 836 BCM_STAT_GENERIC_REG_OPER(unit, port, sync_mode, reg_op, RPFC7, &count); 837 break; 838 839 /* Transmit PFC Frame Priority */ 840 case snmpBcmTxPFCFramePriority0: 841 BCM_STAT_GENERIC_REG_OPER(unit, port, sync_mode, reg_op, TPFC0, &count); 842 break; 843 844 case snmpBcmTxPFCFramePriority1: 845 BCM_STAT_GENERIC_REG_OPER(unit, port, sync_mode, reg_op, TPFC1, &count); 846 break; 847 848 case snmpBcmTxPFCFramePriority2: 849 BCM_STAT_GENERIC_REG_OPER(unit, port, sync_mode, reg_op, TPFC2, &count); 850 break; 851 852 case snmpBcmTxPFCFramePriority3: 853 BCM_STAT_GENERIC_REG_OPER(unit, port, sync_mode, reg_op, TPFC3, &count); 854 break; 855 856 case snmpBcmTxPFCFramePriority4: 857 BCM_STAT_GENERIC_REG_OPER(unit, port, sync_mode, reg_op, TPFC4, &count); 858 break; 859 860 case snmpBcmTxPFCFramePriority5: 861 BCM_STAT_GENERIC_REG_OPER(unit, port, sync_mode, reg_op, TPFC5, &count); 862 break; 863 864 case snmpBcmTxPFCFramePriority6: 865 BCM_STAT_GENERIC_REG_OPER(unit, port, sync_mode, reg_op, TPFC6, &count); 866 break; 867 868 case snmpBcmTxPFCFramePriority7: 869 BCM_STAT_GENERIC_REG_OPER(unit, port, sync_mode, reg_op, TPFC7, &count); 870 break; 871 872 case snmpFcmPortClass3RxFrames: 873 if (soc_feature(unit, soc_feature_fcoe)) { 874 if (SOC_REG_IS_VALID(unit, RDBGC3_64r)) { 875 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, RDBGC3_64r, &count); 876 } else { 877 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, RDBGC3r, &count); 878 } 879 } else { 880 return BCM_E_UNAVAIL; 881 } 882 break; 883 884 case snmpFcmPortClass3TxFrames: 885 if (soc_feature(unit, soc_feature_fcoe)) { 886 if (SOC_REG_IS_VALID(unit, TDBGC6_64r)) { 887 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, TDBGC6_64r, &count); 888 } else { 889 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, TDBGC6r, &count); 890 } 891 } else { 892 return BCM_E_UNAVAIL; 893 } 894 break; 895 896 case snmpFcmPortClass3Discards: 897 if (soc_feature(unit, soc_feature_fcoe)) { 898 if (SOC_REG_IS_VALID(unit, RDBGC4_64r)) { 899 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, RDBGC4_64r, &count); 900 } else { 901 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, RDBGC4r, &count); 902 } 903 } else { 904 return BCM_E_UNAVAIL; 905 } 906 break; 907 908 case snmpFcmPortClass2RxFrames: 909 if (soc_feature(unit, soc_feature_fcoe)) { 910 if (SOC_REG_IS_VALID(unit, RDBGC5_64r)) { 911 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, RDBGC5_64r, &count); 912 } else { 913 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, RDBGC5r, &count); 914 } 915 } else { 916 return BCM_E_UNAVAIL; 917 } 918 break; 919 920 case snmpFcmPortClass2TxFrames: 921 if (soc_feature(unit, soc_feature_fcoe)) { 922 if (SOC_REG_IS_VALID(unit, TDBGC7_64r)) { 923 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, TDBGC7_64r, &count); 924 } else { 925 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, TDBGC7r, &count); 926 } 927 } else { 928 return BCM_E_UNAVAIL; 929 } 930 break; 931 932 case snmpFcmPortClass2Discards: 933 if (soc_feature(unit, soc_feature_fcoe)) { 934 if (SOC_REG_IS_VALID(unit, RDBGC6_64r)) { 935 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, RDBGC6_64r, &count); 936 } else { 937 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, RDBGC6r, &count); 938 } 939 } else { 940 return BCM_E_UNAVAIL; 941 } 942 break; 943 944 case snmpFcmPortInvalidCRCs: 945 if (soc_feature(unit, soc_feature_fcoe)) { 946 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, 947 EGR_FCOE_INVALID_CRC_FRAMESr, &count); 948 } else { 949 return BCM_E_UNAVAIL; 950 } 951 break; 952 953 case snmpFcmPortDelimiterErrors: 954 if (soc_feature(unit, soc_feature_fcoe)) { 955 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, 956 EGR_FCOE_DELIMITER_ERROR_FRAMESr, &count); 957 } else { 958 return BCM_E_UNAVAIL; 959 } 960 break; 961 #ifdef BCM_TOMAHAWK_SUPPORT 962 case snmpBcmSampleIngressPkts: 963 case snmpBcmSampleIngressSnapshotPkts: 964 case snmpBcmSampleIngressSampledPkts: 965 if (soc_feature(unit, soc_feature_sflow_counters)) { 966 ctrl_info.instance_type = SOC_CTR_INSTANCE_TYPE_SFLOW; 967 968 if (type == snmpBcmSampleIngressPkts) { 969 ctrl_info.instance = SOC_SFLOW_CTR_TYPE_SAMPLE_POOL; 970 } else if (type == snmpBcmSampleIngressSnapshotPkts) { 971 ctrl_info.instance = SOC_SFLOW_CTR_TYPE_SAMPLE_POOL_SNAPSHOT; 972 } else { /* snmpBcmSampleIngressSampledPkts */ 973 ctrl_info.instance = SOC_SFLOW_CTR_TYPE_SAMPLE_COUNT; 974 } 975 976 if (stat_op == _BCM_STAT_GET) { 977 BCM_IF_ERROR_RETURN 978 (soc_counter_generic_get(unit, 979 SOC_COUNTER_NON_DMA_SFLOW_ING_PKT, 980 ctrl_info, sync_mode, port, 981 &count)); 982 } else { /* _BCM_STAT_CLEAR */ 983 BCM_IF_ERROR_RETURN 984 (soc_counter_generic_set(unit, 985 SOC_COUNTER_NON_DMA_SFLOW_ING_PKT, 986 ctrl_info, 0, port, count)); 987 } 988 } 989 break; 990 case snmpBcmSampleFlexPkts: 991 case snmpBcmSampleFlexSnapshotPkts: 992 case snmpBcmSampleFlexSampledPkts: 993 if (soc_feature(unit, soc_feature_sflow_counters)) { 994 ctrl_info.instance_type = SOC_CTR_INSTANCE_TYPE_SFLOW; 995 996 if (type == snmpBcmSampleFlexPkts) { 997 ctrl_info.instance = SOC_SFLOW_CTR_TYPE_SAMPLE_POOL; 998 } else if (type == snmpBcmSampleFlexSnapshotPkts) { 999 ctrl_info.instance = SOC_SFLOW_CTR_TYPE_SAMPLE_POOL_SNAPSHOT; 1000 } else { /* snmpBcmSampleFlexSampledPkts */ 1001 ctrl_info.instance = SOC_SFLOW_CTR_TYPE_SAMPLE_COUNT; 1002 } 1003 1004 if (stat_op == _BCM_STAT_GET) { 1005 BCM_IF_ERROR_RETURN 1006 (soc_counter_generic_get(unit, 1007 SOC_COUNTER_NON_DMA_SFLOW_FLEX_PKT, 1008 ctrl_info, sync_mode, port, &count)); 1009 } else { /* _BCM_STAT_CLEAR */ 1010 BCM_IF_ERROR_RETURN 1011 (soc_counter_generic_set(unit, 1012 SOC_COUNTER_NON_DMA_SFLOW_FLEX_PKT, 1013 ctrl_info, 0, port, count)); 1014 } 1015 } 1016 break; 1017 #endif /* BCM_TOMAHAWK_SUPPORT */ 1018 1019 case snmpBcmTxE2ECCControlFrames: 1020 if (SOC_REG_IS_VALID(unit, XTHOLr)) { 1021 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, XTHOLr, 1022 &count); 1023 } 1024 break; 1025 1026 case snmpBcmTxEcnErrors: 1027 if (SOC_REG_IS_VALID(unit, EGR_ECN_COUNTER_64r)) { 1028 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, EGR_ECN_COUNTER_64r, &count); 1029 } else if (SOC_REG_IS_VALID(unit, EGR_ECN_COUNTERr)) { 1030 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, EGR_ECN_COUNTERr, &count); 1031 } else { 1032 return BCM_E_UNAVAIL; 1033 } 1034 break; 1035 1036 case snmpBcmRxDot3LengthMismatches: 1037 if (SOC_REG_IS_VALID(unit, RFLRr)) { 1038 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, 1039 RFLRr, &count); /* Good FCS, bad length */ 1040 } else { 1041 return BCM_E_UNAVAIL; 1042 } 1043 break; 1044 1045 default: 1046 if (type < snmpValCount) { 1047 return BCM_E_UNAVAIL; 1048 } 1049 LOG_VERBOSE(BSL_LS_SOC_COMMON, 1050 (BSL_META_U(unit, 1051 "_bcm_stat_generic_get: Statistic not supported: %d\n"), type)); 1052 return BCM_E_PARAM; 1053 } 1054 1055 if (stat_op == _BCM_STAT_GET) { 1056 *val = count; 1057 } 1058 1059 return BCM_E_NONE; 1060 }