stat_hg.c (29118B)
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 15 #include <bcm_int/esw/stat.h> 16 17 #include <bcm_int/esw_dispatch.h> 18 19 /* 20 * Function: 21 * _bcm_stat_hg_get 22 * Description: 23 * Get the specified statistic for a HG port on the StrataSwitch family 24 * of devices. 25 * Parameters: 26 * unit - StrataSwitch PCI device unit number (driver internal). 27 * port - zero-based port number 28 * sync_mode - if 1 read hw counter else sw accumualated counter 29 * type - SNMP statistics type (see stat.h) 30 * val - (OUT) 64 bit statistic counter value 31 * Returns: 32 * BCM_E_NONE - Success. 33 * BCM_E_PARAM - Illegal parameter. 34 * BCM_E_INTERNAL - Chip access failure. 35 */ 36 int 37 _bcm_stat_hg_get_set(int unit, bcm_port_t port, 38 int sync_mode, int stat_op, 39 bcm_stat_val_t type, uint64 *val) 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 case snmpIfInOctets: 52 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, IRBYTr, &count); 53 break; 54 case snmpIfInUcastPkts: 55 if (soc_feature(unit, soc_feature_hw_stats_calc)) { 56 if (SOC_REG_IS_VALID(unit, IRUCAr)) { 57 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, 58 IRUCAr, &count); 59 } else if (SOC_REG_IS_VALID(unit, IRUCr)) { 60 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, IRUCr, &count); 61 } else { 62 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, RUCr, &count); /* unicast pkts rcvd */ 63 } 64 } else { 65 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, IRPKTr, &count); 66 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_sub_op, 67 IRMCAr, &count); /* - multicast */ 68 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_sub_op, 69 IRBCAr, &count); /* - broadcast */ 70 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_sub_op, 71 IRFCSr, &count); /* - bad FCS */ 72 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_sub_op, 73 IRXCFr, &count); /* - good FCS, all MAC ctrl */ 74 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_sub_op, 75 IRJBRr, &count); /* - oversize, bad FCS */ 76 if (COUNT_OVR_ERRORS(unit)) { 77 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_sub_op, 78 IROVRr, &count); /* - oversize, good FCS */ 79 } 80 } 81 break; 82 case snmpIfInNUcastPkts: /* Multicast frames plus broadcast frames */ 83 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, 84 IRMCAr, &count); /* + multicast */ 85 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, 86 IRBCAr, &count); /* + broadcast */ 87 break; 88 case snmpIfInBroadcastPkts: /* broadcast frames */ 89 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, 90 IRBCAr, &count); /* + broadcast */ 91 break; 92 case snmpIfInMulticastPkts: /* Multicast frames */ 93 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, 94 IRMCAr, &count); /* + multicast */ 95 break; 96 case snmpIfInDiscards: /* Dropped packets including aborted */ 97 if (soc_feature(unit, soc_feature_stat_xgs3)) { 98 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, 99 RDBGC0r, &count); /* Ingress drop conditions */ 100 BCM_IF_ERROR_RETURN 101 (_bcm_stat_counter_non_dma_extra_get(unit, 102 SOC_COUNTER_NON_DMA_PORT_DROP_PKT_ING, 103 port, &count1)); 104 COMPILER_64_ADD_64(count, count1); 105 } 106 #ifdef BCM_HERCULES_SUPPORT 107 else { 108 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, IRDISCr, &count); 109 } 110 #endif 111 break; 112 case snmpIfInErrors: /* RX Errors or Receive packets - non-error frames */ 113 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, IRFCSr, &count); 114 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, IRJBRr, &count); 115 if (COUNT_OVR_ERRORS(unit)) { 116 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, IROVRr, &count); 117 } 118 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, IRUNDr, &count); 119 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, IRFRGr, &count); 120 break; 121 case snmpIfInUnknownProtos: /* Not supported */ 122 break; 123 case snmpIfOutOctets: /* TX bytes */ 124 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, ITBYTr, &count); 125 break; 126 case snmpIfOutUcastPkts: /* ALL - mcast - bcast */ 127 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, ITPKTr, &count); 128 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_sub_op, 129 ITMCAr, &count); /* - multicast */ 130 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_sub_op, 131 ITBCAr, &count); /* - broadcast */ 132 break; 133 case snmpIfOutNUcastPkts: /* broadcast frames plus multicast frames */ 134 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, 135 ITMCAr, &count); /* + multicast */ 136 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, 137 ITBCAr, &count); /* + broadcast */ 138 break; 139 case snmpIfOutBroadcastPkts: /* broadcast frames */ 140 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, 141 ITBCAr, &count); /* + broadcast */ 142 break; 143 case snmpIfOutMulticastPkts: /* multicast frames */ 144 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, 145 ITMCAr, &count); /* + multicast */ 146 break; 147 case snmpIfOutDiscards: /* Aged packet counter */ 148 if (SOC_REG_IS_VALID(unit, HOLDr)) { 149 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, 150 HOLDr, &count); /* L2 MTU drops */ 151 } else if (SOC_REG_IS_VALID(unit, HOL_DROPr)) { 152 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, 153 HOL_DROPr, &count); 154 } 155 #ifdef BCM_HERCULES_SUPPORT 156 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, ITAGEr, &count); 157 #endif 158 BCM_IF_ERROR_RETURN 159 (_bcm_stat_counter_extra_get(unit, EGRDROPPKTCOUNTr, 160 port, &count1)); 161 COMPILER_64_ADD_64(count, count1); 162 BCM_IF_ERROR_RETURN 163 (bcm_esw_cosq_stat_get(unit, port, BCM_COS_INVALID, 164 bcmCosqStatDroppedPackets, &count1)); 165 COMPILER_64_ADD_64(count, count1); 166 break; 167 case snmpIfOutErrors: /* Error packets could not be xmitted */ 168 /* XGS2 specific */ 169 break; 170 case snmpIfOutQLen: { 171 uint32 qcount; 172 if (bcm_esw_port_queued_count_get(unit, port, &qcount) >= 0) { 173 COMPILER_64_ADD_32(count, qcount); 174 } 175 } 176 break; 177 case snmpIpInReceives: 178 break; 179 case snmpIpInHdrErrors: 180 break; 181 case snmpIpForwDatagrams: 182 break; 183 case snmpIpInDiscards: 184 break; 185 186 /* *** RFC 1493 *** */ 187 188 case snmpDot1dBasePortDelayExceededDiscards: 189 break; 190 case snmpDot1dBasePortMtuExceededDiscards: 191 if (COUNT_OVR_ERRORS(unit)) { 192 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, IROVRr, &count); /* oversize pkts */ 193 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, ITOVRr, &count); /* oversize pkts */ 194 } 195 break; 196 case snmpDot1dTpPortInFrames: 197 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, IRPKTr, &count); 198 break; 199 case snmpDot1dTpPortOutFrames: 200 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, ITPKTr, &count); 201 break; 202 case snmpDot1dPortInDiscards: 203 if (soc_feature(unit, soc_feature_stat_xgs3)) { 204 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, RDISCr, &count); 205 } 206 #ifdef BCM_HERCULES_SUPPORT 207 else { 208 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, IRDISCr, &count); 209 } 210 #endif 211 break; 212 213 /* *** RFC 1757 *** */ 214 215 case snmpEtherStatsDropEvents: 216 if (soc_feature(unit, soc_feature_stat_xgs3)) { 217 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, RDISCr, &count); 218 } 219 #ifdef BCM_HERCULES_SUPPORT 220 else { 221 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, IRDISCr, &count); 222 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, ITAGEr, &count); 223 } 224 #endif 225 break; 226 case snmpEtherStatsOctets: 227 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, IRBYTr, &count); 228 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, ITBYTr, &count); 229 break; 230 case snmpEtherStatsPkts: 231 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, IRPKTr, &count); 232 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, ITPKTr, &count); 233 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, 234 IRUNDr, &count); /* Runts */ 235 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, 236 IRFRGr, &count); /* Fragments */ 237 break; 238 case snmpEtherStatsBroadcastPkts: /* Broadcast packets (RX/TX) */ 239 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, 240 IRBCAr, &count); /* + rx broadcast */ 241 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, 242 ITBCAr, &count); /* + tx broadcast */ 243 break; 244 case snmpEtherStatsMulticastPkts: /* Multicast packets (TX+RX) */ 245 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, 246 IRMCAr, &count); /* + rx multicast */ 247 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, 248 ITMCAr, &count); /* + tx multicast */ 249 break; 250 case snmpEtherStatsCRCAlignErrors: 251 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, IRFCSr, &count); 252 break; 253 case snmpEtherStatsUndersizePkts: /* Undersize frames */ 254 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, IRUNDr, &count); 255 break; 256 case snmpEtherStatsOversizePkts: 257 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, IROVRr, &count); 258 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, ITOVRr, &count); 259 break; 260 case snmpEtherRxOversizePkts: 261 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, IROVRr, &count); 262 break; 263 case snmpEtherTxOversizePkts: 264 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, ITOVRr, &count); 265 break; 266 case snmpEtherStatsFragments: 267 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, IRFRGr, &count); 268 break; 269 case snmpEtherStatsJabbers: 270 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, IRJBRr, &count); 271 break; 272 case snmpEtherStatsCollisions: 273 /* always 0 */ 274 break; 275 case snmpEtherStatsPkts64Octets: 276 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, IR64r, &count); 277 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, IT64r, &count); 278 break; 279 case snmpEtherStatsPkts65to127Octets: 280 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, IR127r, &count); 281 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, IT127r, &count); 282 break; 283 case snmpEtherStatsPkts128to255Octets: 284 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, IR255r, &count); 285 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, IT255r, &count); 286 break; 287 case snmpEtherStatsPkts256to511Octets: 288 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, IR511r, &count); 289 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, IT511r, &count); 290 break; 291 case snmpEtherStatsPkts512to1023Octets: 292 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, IR1023r, &count); 293 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, IT1023r, &count); 294 break; 295 case snmpEtherStatsPkts1024to1518Octets: 296 if (soc_feature(unit, soc_feature_stat_xgs3)) { 297 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, IR1518r, &count); 298 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, IT1518r, &count); 299 } else { 300 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, IR2047r, &count); 301 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, IT2047r, &count); 302 } 303 break; 304 305 /* *** not actually in rfc1757 *** */ 306 307 case snmpBcmEtherStatsPkts1519to1522Octets: 308 break; 309 case snmpBcmEtherStatsPkts1522to2047Octets: 310 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, IR2047r, &count); 311 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, IT2047r, &count); 312 break; 313 case snmpBcmEtherStatsPkts2048to4095Octets: 314 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, IR4095r, &count); 315 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, IT4095r, &count); 316 break; 317 case snmpBcmEtherStatsPkts4095to9216Octets: 318 if (soc_feature(unit, soc_feature_stat_xgs3)) { 319 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, IR9216r, &count); 320 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, IT9216r, &count); 321 } else { 322 #ifdef BCM_HERCULES_SUPPORT 323 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, IR8191r, &count); 324 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, IT8191r, &count); 325 #endif 326 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, IR16383r, &count); 327 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, IT16383r, &count); 328 } 329 break; 330 case snmpBcmEtherStatsPkts9217to16383Octets: 331 if (soc_feature(unit, soc_feature_stat_xgs3)) { 332 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, IR16383r, &count); 333 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, IT16383r, &count); 334 } 335 break; 336 337 case snmpBcmReceivedPkts64Octets: 338 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, IR64r, &count); 339 break; 340 case snmpBcmReceivedPkts65to127Octets: 341 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, IR127r, &count); 342 break; 343 case snmpBcmReceivedPkts128to255Octets: 344 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, IR255r, &count); 345 break; 346 case snmpBcmReceivedPkts256to511Octets: 347 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, IR511r, &count); 348 break; 349 case snmpBcmReceivedPkts512to1023Octets: 350 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, IR1023r, &count); 351 break; 352 case snmpBcmReceivedPkts1024to1518Octets: 353 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, IR1518r, &count); 354 break; 355 case snmpBcmReceivedPkts1519to2047Octets: 356 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, IR2047r, &count); 357 break; 358 case snmpBcmReceivedPkts2048to4095Octets: 359 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, IR4095r, &count); 360 break; 361 case snmpBcmReceivedPkts4095to9216Octets: 362 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, IR9216r, &count); 363 break; 364 case snmpBcmReceivedPkts9217to16383Octets: 365 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, IR16383r, &count); 366 break; 367 368 case snmpBcmTransmittedPkts64Octets: 369 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, IT64r, &count); 370 break; 371 case snmpBcmTransmittedPkts65to127Octets: 372 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, IT127r, &count); 373 break; 374 case snmpBcmTransmittedPkts128to255Octets: 375 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, IT255r, &count); 376 break; 377 case snmpBcmTransmittedPkts256to511Octets: 378 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, IT511r, &count); 379 break; 380 case snmpBcmTransmittedPkts512to1023Octets: 381 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, IT1023r, &count); 382 break; 383 case snmpBcmTransmittedPkts1024to1518Octets: 384 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, IT1518r, &count); 385 break; 386 case snmpBcmTransmittedPkts1519to2047Octets: 387 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, IT2047r, &count); 388 break; 389 case snmpBcmTransmittedPkts2048to4095Octets: 390 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, IT4095r, &count); 391 break; 392 case snmpBcmTransmittedPkts4095to9216Octets: 393 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, IT9216r, &count); 394 break; 395 case snmpBcmTransmittedPkts9217to16383Octets: 396 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, IT16383r, &count); 397 break; 398 399 case snmpEtherStatsTXNoErrors: 400 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, ITPKTr, &count); 401 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_sub_op, ITFRGr, &count); 402 if (COUNT_OVR_ERRORS(unit)) { 403 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_sub_op, 404 ITOVRr, &count); 405 } 406 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_sub_op, ITUFLr, &count); 407 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_sub_op, ITERRr, &count); 408 break; 409 case snmpEtherStatsRXNoErrors: /* RPKT - ( RFCS + RXUO + RFLR) */ 410 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, IRPKTr, &count); 411 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_sub_op, IRFCSr, &count); 412 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_sub_op, IRJBRr, &count); 413 if (COUNT_OVR_ERRORS(unit)) { 414 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_sub_op, 415 IROVRr, &count); 416 } 417 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_sub_op, IRUNDr, &count); 418 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_sub_op, IRFRGr, &count); 419 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_sub_op, IRERPKTr, &count); 420 break; 421 422 /* *** RFC 2665 *** */ 423 424 case snmpDot3StatsAlignmentErrors: 425 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, RALNr, &count); 426 break; 427 case snmpDot3StatsFCSErrors: 428 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, IRFCSr, &count); 429 break; 430 case snmpDot3StatsSingleCollisionFrames: 431 break; 432 case snmpDot3StatsMultipleCollisionFrames: 433 break; 434 case snmpDot3StatsSQETTestErrors: 435 /* always 0 */ 436 break; 437 case snmpDot3StatsDeferredTransmissions: 438 break; 439 case snmpDot3StatsLateCollisions: 440 break; 441 case snmpDot3StatsExcessiveCollisions: 442 break; 443 case snmpDot3StatsInternalMacTransmitErrors: 444 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, ITUFLr, &count); 445 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, ITERRr, &count); 446 break; 447 case snmpDot3StatsCarrierSenseErrors: 448 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, RFCRr, &count); 449 break; 450 case snmpDot3StatsFrameTooLongs: 451 if (SOC_REG_IS_VALID(unit, IRMEGr) && SOC_REG_IS_VALID(unit, IRMEBr)) { 452 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, IRMEGr, &count); 453 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, IRMEBr, &count); 454 } else { 455 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, IRJBRr, &count); 456 } 457 break; 458 case snmpDot3StatsInternalMacReceiveErrors: 459 break; 460 case snmpDot3StatsSymbolErrors: 461 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, IRERBYTr, &count); 462 break; 463 case snmpDot3ControlInUnknownOpcodes: 464 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, IRXUOr, &count); 465 break; 466 case snmpDot3InPauseFrames: 467 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, IRXPFr, &count); 468 break; 469 case snmpDot3OutPauseFrames: 470 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, ITXPFr, &count); 471 break; 472 473 /* *** RFC 2233 high capacity versions of RFC1213 objects *** */ 474 475 case snmpIfHCInOctets: 476 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, IRBYTr, &count); 477 break; 478 case snmpIfHCInUcastPkts: 479 if (soc_feature(unit, soc_feature_hw_stats_calc)) { 480 if (SOC_REG_IS_VALID(unit, IRUCAr)) { 481 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, 482 IRUCAr, &count); 483 } else if (SOC_REG_IS_VALID(unit, IRUCr)) { 484 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, IRUCr, &count); 485 } else { 486 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, RUCr, &count); /* unicast pkts rcvd */ 487 } 488 } else { 489 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, IRPKTr, &count); 490 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_sub_op, 491 IRMCAr, &count); 492 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_sub_op, 493 IRBCAr, &count); 494 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_sub_op, 495 IRFCSr, &count); /* - bad FCS */ 496 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_sub_op, 497 IRXCFr, &count); /* - good FCS, all MAC ctrl */ 498 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_sub_op, 499 IRJBRr, &count); /* - oversize, bad FCS */ 500 if (COUNT_OVR_ERRORS(unit)) { 501 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_sub_op, 502 IROVRr, &count); /* - oversize, good FCS */ 503 } 504 } 505 break; 506 case snmpIfHCInMulticastPkts: 507 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, IRMCAr, &count); 508 break; 509 case snmpIfHCInBroadcastPkts: 510 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, IRBCAr, &count); 511 break; 512 case snmpIfHCOutOctets: 513 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, ITBYTr, &count); 514 break; 515 case snmpIfHCOutUcastPkts: 516 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, ITPKTr, &count); 517 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_sub_op, ITMCAr, &count); 518 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_sub_op, ITBCAr, &count); 519 break; 520 case snmpIfHCOutMulticastPkts: 521 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, ITMCAr, &count); 522 break; 523 case snmpIfHCOutBroadcastPckts: 524 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, ITBCAr, &count); 525 break; 526 527 /* *** RFC 2465 *** */ 528 529 case snmpIpv6IfStatsInReceives: 530 if (soc_feature(unit, soc_feature_stat_xgs3)) { 531 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, RIPC6r, &count); 532 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, IMRP6r, &count); 533 } 534 break; 535 case snmpIpv6IfStatsInHdrErrors: 536 if (soc_feature(unit, soc_feature_stat_xgs3)) { 537 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, RIPD6r, &count); 538 } 539 break; 540 case snmpIpv6IfStatsInAddrErrors: 541 if (soc_feature(unit, soc_feature_stat_xgs3)) { 542 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, RIPHE6r, &count); 543 } 544 break; 545 case snmpIpv6IfStatsInDiscards: 546 if (soc_feature(unit, soc_feature_stat_xgs3)) { 547 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, RIPD6r, &count); 548 } 549 break; 550 case snmpIpv6IfStatsOutForwDatagrams: 551 if (soc_feature(unit, soc_feature_stat_xgs3)) { 552 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, TDBGC0r, &count); 553 } 554 break; 555 case snmpIpv6IfStatsOutDiscards: 556 if (soc_feature(unit, soc_feature_stat_xgs3)) { 557 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, TDBGC1r, &count); 558 } 559 break; 560 case snmpIpv6IfStatsInMcastPkts: 561 if (soc_feature(unit, soc_feature_stat_xgs3)) { 562 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, IMRP6r, &count); 563 } 564 break; 565 case snmpIpv6IfStatsOutMcastPkts: 566 if (soc_feature(unit, soc_feature_stat_xgs3)) { 567 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, TDBGC2r, &count); 568 } 569 break; 570 571 /* *** IEEE 802.1bb *** */ 572 case snmpIeee8021PfcRequests: 573 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, ITXPPr, &count); 574 break; 575 case snmpIeee8021PfcIndications: 576 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, IRXPPr, &count); 577 break; 578 579 /* IPMC counters (broadcom specific) */ 580 581 case snmpBcmIPMCBridgedPckts: 582 break; 583 case snmpBcmIPMCRoutedPckts: 584 break; 585 case snmpBcmIPMCInDroppedPckts: 586 break; 587 case snmpBcmIPMCOutDroppedPckts: 588 break; 589 590 /* *** RFC 1284 - unsupported in XGS *** */ 591 case snmpDot3StatsInRangeLengthError: 592 break; 593 594 /* *** RFC 4837 - unsupported in XGS *** */ 595 case snmpDot3OmpEmulationCRC8Errors: 596 case snmpDot3MpcpRxGate: 597 case snmpDot3MpcpRxRegister: 598 case snmpDot3MpcpTxRegRequest: 599 case snmpDot3MpcpTxRegAck: 600 case snmpDot3MpcpTxReport: 601 case snmpDot3EponFecCorrectedBlocks: 602 case snmpDot3EponFecUncorrectableBlocks: 603 break; 604 605 /* EA (broadcom specific) - unsupported in XGS */ 606 case snmpBcmPonInDroppedOctets: 607 case snmpBcmPonOutDroppedOctets: 608 case snmpBcmPonInDelayedOctets: 609 case snmpBcmPonOutDelayedOctets: 610 case snmpBcmPonInDelayedHundredUs: 611 case snmpBcmPonOutDelayedHundredUs: 612 case snmpBcmPonInFrameErrors: 613 case snmpBcmPonInOamFrames: 614 case snmpBcmPonOutOamFrames: 615 case snmpBcmPonOutUnusedOctets: 616 break; 617 618 case snmpFcmPortClass3RxFrames: 619 if (soc_feature(unit, soc_feature_fcoe)) { 620 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, RDBGC3r, &count); 621 } else { 622 return BCM_E_UNAVAIL; 623 } 624 break; 625 626 case snmpFcmPortClass3TxFrames: 627 if (soc_feature(unit, soc_feature_fcoe)) { 628 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, TDBGC6r, &count); 629 } else { 630 return BCM_E_UNAVAIL; 631 } 632 break; 633 634 case snmpFcmPortClass3Discards: 635 if (soc_feature(unit, soc_feature_fcoe)) { 636 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, RDBGC4r, &count); 637 } else { 638 return BCM_E_UNAVAIL; 639 } 640 break; 641 642 case snmpFcmPortClass2RxFrames: 643 if (soc_feature(unit, soc_feature_fcoe)) { 644 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, RDBGC5r, &count); 645 } else { 646 return BCM_E_UNAVAIL; 647 } 648 break; 649 650 case snmpFcmPortClass2TxFrames: 651 if (soc_feature(unit, soc_feature_fcoe)) { 652 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, TDBGC7r, &count); 653 } else { 654 return BCM_E_UNAVAIL; 655 } 656 break; 657 658 case snmpFcmPortClass2Discards: 659 if (soc_feature(unit, soc_feature_fcoe)) { 660 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, RDBGC6r, &count); 661 } else { 662 return BCM_E_UNAVAIL; 663 } 664 break; 665 666 case snmpFcmPortInvalidCRCs: 667 if (soc_feature(unit, soc_feature_fcoe)) { 668 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, 669 EGR_FCOE_INVALID_CRC_FRAMESr, &count); 670 } else { 671 return BCM_E_UNAVAIL; 672 } 673 break; 674 675 case snmpFcmPortDelimiterErrors: 676 if (soc_feature(unit, soc_feature_fcoe)) { 677 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, 678 EGR_FCOE_DELIMITER_ERROR_FRAMESr, &count); 679 } else { 680 return BCM_E_UNAVAIL; 681 } 682 break; 683 684 case snmpBcmTxE2ECCControlFrames: 685 if (SOC_REG_IS_VALID(unit, XTHOLr)) { 686 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, XTHOLr, 687 &count); 688 } 689 break; 690 691 case snmpBcmRxDot3LengthMismatches: 692 if (SOC_REG_IS_VALID(unit, IRFLRr)) { 693 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, 694 IRFLRr, &count); /* Good FCS, bad length */ 695 } else { 696 return BCM_E_UNAVAIL; 697 } 698 break; 699 700 default: 701 if (type < snmpValCount) { 702 return BCM_E_UNAVAIL; 703 } 704 LOG_VERBOSE(BSL_LS_SOC_COMMON, 705 (BSL_META_U(unit, 706 "_bcm_stat_hg_get: Statistic not supported: %d\n"), type)); 707 return BCM_E_PARAM; 708 } 709 710 if (stat_op == _BCM_STAT_GET) { 711 *val = count; 712 } 713 714 return BCM_E_NONE; 715 }