flex_ctr.h (92062B)
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-2020 Broadcom Inc. All rights reserved. 6 * 7 * File: flex_ctr.h 8 * Purpose: Contains all internal function and structure required for 9 * flex counter. 10 */ 11 12 #ifndef __BCM_FLEX_CTR_H__ 13 #define __BCM_FLEX_CTR_H__ 14 15 #include <sal/core/libc.h> 16 #include <soc/mem.h> 17 #include <soc/debug.h> 18 #include <soc/drv.h> 19 #include <soc/l2x.h> 20 #include <bcm/l2.h> 21 #include <bcm/error.h> 22 #include <bcm_int/esw/mbcm.h> 23 #include <bcm_int/esw/l2.h> 24 #include <bcm_int/esw/vlan.h> 25 #include <bcm_int/esw/trunk.h> 26 #include <bcm_int/esw/stack.h> 27 #include <bcm_int/esw/mpls.h> 28 #include <bcm_int/esw/mim.h> 29 #include <bcm_int/esw_dispatch.h> 30 #include <bcm_int/esw/trident.h> 31 #include <soc/firebolt6.h> 32 #include <bcm_int/esw/stat.h> 33 34 /* 35 ADDITIONAL INFO 36 Packet attributes are of three types 37 1) Packet Attributes i.e. uncompressed mode 38 2) UDF attributes i.e. udf mode 39 3) Compressed Packet Attributes i.e. compressed mode 40 */ 41 42 typedef enum bcm_stat_flex_packet_attr_type_e { 43 bcmStatFlexPacketAttrTypeUncompressed=0, 44 bcmStatFlexPacketAttrTypeCompressed=1, 45 bcmStatFlexPacketAttrTypeUdf=2 46 }bcm_stat_flex_packet_attr_type_t; 47 48 /* 49 ======================================================================== 50 Total 12 packets attributes are supported in ingress packet flow direction 51 This includes 52 53 1) cng (2b: Pre FP packet color) 54 2) IFP_CNG (2b: Post FP packet color) 55 3) INT_PRI (4b: Packet internal priority) 56 57 ###################################################################### 58 ****** In compressed mode, attributes(cng,IFP_CNG,INT_PRI) are 59 ****** grouped into PRI_CNG_MAP map table. 60 ###################################################################### 61 62 4) VLAN_FORMAT (2b:Incoming PacketInner&Outer Vlan tag present indicators) 63 5) OUTER_DOT1P (3b: Incoming packet outer vlan tag priority.) 64 6) INNER_DOT1P (3b: Incoming packet inner vlan tag priority.) 65 ###################################################################### 66 ****** In compressed mode, attributes(VLAN_FORMAT,OUTER_DOT1P,INNER_DOT1P) are 67 ****** grouped into PKT_PRI_MAP map table 68 ###################################################################### 69 70 7) INGRESS_PORT (6b: Packet local ingress port.) 71 ###################################################################### 72 ****** In compressed mode, attributes(INGRESS_PORT) are 73 ****** grouped into PORT_MAP map table 74 ###################################################################### 75 76 8) TOS (8b: Incoming IP packet TOS byte.) 77 ###################################################################### 78 ****** In compressed mode, attributes(TOS) are 79 ****** grouped into TOS_MAP map table 80 ###################################################################### 81 82 9) PACKET_RESOLUTION(6b: IFP packet resolution vector.) 83 10)SVP_TYPE (1b:SVP(SourceVirtualPortNumber)is network port indication) 84 11)DROP (1b: Drop indication.) 85 ###################################################################### 86 ****** In compressed mode, attributes(PACKET_RESOLUTION,SVP_TYPE,DROP) are 87 ****** grouped into PKT_RES_MAP map table 88 ###################################################################### 89 90 12)IP Packet (1b: Packet is IP.) 91 Total 12 Packet attributes with 39 bits 92 ======================================================================== 93 */ 94 95 typedef struct bcm_stat_flex_ing_pkt_attr_bits_s { 96 /* 2 bits for Flow control packet type */ 97 uint8 fc_type; 98 uint8 fc_type_pos; 99 uint8 fc_type_mask; 100 101 /* Addition of TCP Flags and Internal Congestion selectors 102 * Total additional Bits : 8 + 2 103 * : 10 bits 104 */ 105 uint8 int_cn; 106 uint8 int_cn_pos; 107 uint8 int_cn_mask; 108 109 uint8 tcp_flags; 110 uint8 tcp_flags_pos; 111 uint8 tcp_flags_mask; 112 113 /* 114 Below are default bits for uncompressed format. 115 Need to be set for compressed format 116 Total Bits :(2+2+4)+(2+3+3)+(6)+(8)+(6+1+1) + (1) 117 : 8 + 8 + 6 + 8 + 8 + 1 118 : 39 bits 119 */ 120 /* 121 * APACHE has Extended Flex Counter Packet Attributes 122 * Total Bits : (4+4+4+4+4+4) + Existing as above 123 * : 24 + 39 124 * : 63 bits 125 */ 126 uint8 cng_3; /* 2 for uncompressed frmt */ 127 uint8 cng_3_pos; 128 uint8 cng_3_mask; 129 130 uint8 phb_3; /* 4 for uncompressed frmt */ 131 uint8 phb_3_pos; 132 uint8 phb_3_mask; 133 134 uint8 cng_2; /* 2 for uncompressed frmt */ 135 uint8 cng_2_pos; 136 uint8 cng_2_mask; 137 138 uint8 phb_2; /* 4 for uncompressed frmt */ 139 uint8 phb_2_pos; 140 uint8 phb_2_mask; 141 142 uint8 cng_1; /* 2 for uncompressed frmt */ 143 uint8 cng_1_pos; 144 uint8 cng_1_mask; 145 146 uint8 phb_1; /* 4 for uncompressed frmt */ 147 uint8 phb_1_pos; 148 uint8 phb_1_mask; 149 /* PRI_CNF Group for compressed format */ 150 uint8 cng; /* 2 for uncompressed frmt */ 151 uint8 cng_pos; 152 uint8 cng_mask; 153 154 uint8 ifp_cng; /* 2 for uncompressed format */ 155 uint8 ifp_cng_pos; 156 uint8 ifp_cng_mask; 157 158 uint8 int_pri; /* 4 for uncompressed format */ 159 uint8 int_pri_pos; 160 uint8 int_pri_mask; 161 162 /* PKT_PRI vlan Group for compressed format */ 163 uint8 vlan_format; /* 2 for uncompressed format */ 164 uint8 vlan_format_pos; 165 uint8 vlan_format_mask; 166 uint8 outer_dot1p; /* 3 for uncompressed format */ 167 uint8 outer_dot1p_pos; 168 uint8 outer_dot1p_mask; 169 uint8 inner_dot1p; /* 3 for uncompressed format */ 170 uint8 inner_dot1p_pos; 171 uint8 inner_dot1p_mask; 172 173 /* Port Group for compressed format */ 174 uint8 ing_port; /* 6 for uncompressed format */ 175 uint8 ing_port_pos; 176 uint8 ing_port_mask; 177 178 /* TOS Group for compressed format */ 179 uint8 tos_dscp; /* 8 for uncompressed format */ 180 uint8 tos_dscp_pos; 181 uint8 tos_dscp_mask; 182 uint8 tos_ecn; /* 8 for uncompressed format */ 183 uint8 tos_ecn_pos; 184 uint8 tos_ecn_mask; 185 /* PKT_RESOLTION Group for compressed format */ 186 uint8 pkt_resolution; /* 6 for uncompressed format */ 187 uint8 pkt_resolution_pos; 188 uint8 pkt_resolution_mask; 189 190 uint8 svp_type; /* 1 for uncompressed format */ 191 uint8 svp_type_pos; 192 uint8 svp_type_mask; 193 194 uint8 drop; /* 1 for uncompressed format */ 195 uint8 drop_pos; 196 uint8 drop_mask; 197 198 uint8 ip_pkt; /* 1 for uncompressed format */ 199 uint8 ip_pkt_pos; 200 uint8 ip_pkt_mask; 201 }bcm_stat_flex_ing_pkt_attr_bits_t; 202 203 204 /* 205 ======================================================================== 206 Total 12 packets attributes are supported in egress packet flow direction 207 This includes 208 209 1) cng (2b: Post FP packet color) 210 2) INT_PRI (4b: Packet internal priority) 211 ###################################################################### 212 ****** In compressed mode, attributes(cng,INT_PRI) are 213 ****** grouped into PRI_CNG_MAP map table. 214 ###################################################################### 215 216 3) VLAN_FORMAT (2b: OutgoingPacketInner&Outer Vlan tag present indicators.) 217 4) OUTER_DOT1P (3b: Incoming packet outer vlan tag priority.) 218 5) INNER_DOT1P (3b: Incoming packet inner vlan tag priority.) 219 ###################################################################### 220 ****** In compressed mode, attributes(VLAN_FORMAT,OUTER_DOT1P,INNER_DOT1P) are 221 ****** grouped into PKT_PRI_MAP map table 222 ###################################################################### 223 224 6) EGRESS_PORT (6b: Packet local egress port.) 225 ###################################################################### 226 ****** In compressed mode, attributes(EGRESS_PORT) are 227 ****** grouped into PORT_MAP map table 228 ###################################################################### 229 230 7) TOS (8b: Outgoing IP packet TOS byte.) 231 ###################################################################### 232 ****** In compressed mode, attributes(TOS) are 233 ****** grouped into TOS_MAP map table 234 ###################################################################### 235 236 8) PACKET_RESOLUTION(1b: IFP packet resolution vector.) 237 9)SVP_TYPE (1b: SVP(SourceVirtualPortNumber) is NetworkPortindication) 238 10)DVP_TYPE (1b: DVP(DestinationVirtualPortNumber) is 239 NetworkPortIndication.) 240 11)DROP (1b: Drop indication.) 241 ###################################################################### 242 ****** In compressed mode, attributes(PACKET_RESOLUTION,SVP_TYPE,DVP,DROP) are 243 ****** grouped into PKT_RES_MAP map table 244 12)IP Packet (1b: Packet is IP.) 245 Total 12 Packet attributes with 33 bits 246 ======================================================================== 247 */ 248 typedef struct bcm_stat_flex_egr_pkt_attr_bits_s { 249 /* Addition of Internal Congestion selectors 250 * Total additional Bits : 2 bits 251 */ 252 uint8 int_cn; 253 uint8 int_cn_pos; 254 uint8 int_cn_mask; 255 256 /* 257 Below are default bits for uncompressed 258 format. Need to be set for compressed format 259 Total Bits :(2+4)+(2+3+3)+(6)+(8)+(1+1+1+1) + (1) 260 : 6 + 8 + 6 + 8 + 4 + 1 261 : 33 bits 262 */ 263 uint8 mmu_cos; 264 uint8 mmu_cos_pos; 265 uint8 mmu_cos_mask; 266 267 uint8 uc_queueing; 268 uint8 uc_queueing_pos; 269 uint8 uc_queueing_mask; 270 271 uint8 congestion_marked; 272 uint8 congestion_marked_pos; 273 uint8 congestion_marked_mask; 274 275 /* 276 * APACHE has Extended Flex Counter Packet Attributes 277 * Total Bits : (4+4+4+4+4+4) + Existing as above 278 * : 24 + 39 279 * : 63 bits 280 */ 281 uint8 cng_3; /* 2 for uncompressed frmt */ 282 uint8 cng_3_pos; 283 uint8 cng_3_mask; 284 285 uint8 phb_3; /* 4 for uncompressed frmt */ 286 uint8 phb_3_pos; 287 uint8 phb_3_mask; 288 289 uint8 cng_2; /* 2 for uncompressed frmt */ 290 uint8 cng_2_pos; 291 uint8 cng_2_mask; 292 293 uint8 phb_2; /* 4 for uncompressed frmt */ 294 uint8 phb_2_pos; 295 uint8 phb_2_mask; 296 297 uint8 cng_1; /* 2 for uncompressed frmt */ 298 uint8 cng_1_pos; 299 uint8 cng_1_mask; 300 301 uint8 phb_1; /* 4 for uncompressed frmt */ 302 uint8 phb_1_pos; 303 uint8 phb_1_mask; 304 /* PRI_CNF Group for compressed format */ 305 uint8 cng; /* 2 for uncompressed frmt */ 306 uint8 cng_pos; 307 uint8 cng_mask; 308 309 uint8 int_pri; /* 4 for uncompressed format */ 310 uint8 int_pri_pos; 311 uint8 int_pri_mask; 312 313 /* PKT_PRI vlan Group for compressed format */ 314 uint8 vlan_format; /* 2 for uncompressed format */ 315 uint8 vlan_format_pos; 316 uint8 vlan_format_mask; 317 318 uint8 outer_dot1p; /* 3 for uncompressed format */ 319 uint8 outer_dot1p_pos; 320 uint8 outer_dot1p_mask; 321 322 uint8 inner_dot1p; /* 3 for uncompressed format */ 323 uint8 inner_dot1p_pos; 324 uint8 inner_dot1p_mask; 325 326 /* Port Group for compressed format */ 327 uint8 egr_port; /* 6 for uncompressed format */ 328 uint8 egr_port_pos; 329 uint8 egr_port_mask; 330 331 /* TOS Group for compressed format */ 332 uint8 tos_dscp; /* 8 for uncompressed format */ 333 uint8 tos_dscp_pos; 334 uint8 tos_dscp_mask; 335 uint8 tos_ecn; /* 8 for uncompressed format */ 336 uint8 tos_ecn_pos; 337 uint8 tos_ecn_mask; 338 339 /* PKT_RESOLTION Group for compressed format */ 340 uint8 pkt_resolution; /* 1 for uncompressed format */ 341 uint8 pkt_resolution_pos; 342 uint8 pkt_resolution_mask; 343 344 uint8 svp_type; /* 1 for uncompressed format */ 345 uint8 svp_type_pos; 346 uint8 svp_type_mask; 347 348 uint8 dvp_type; /* 1 for uncompressed format */ 349 uint8 dvp_type_pos; 350 uint8 dvp_type_mask; 351 352 uint8 drop; /* 1 for uncompressed format */ 353 uint8 drop_pos; 354 uint8 drop_mask; 355 356 uint8 ip_pkt; /* 1 for uncompressed format */ 357 uint8 ip_pkt_pos; 358 uint8 ip_pkt_mask; 359 }bcm_stat_flex_egr_pkt_attr_bits_t; 360 361 /* 362 There are two UDF (UserDefinedFields) chunks each contains one 16-bit UDF bit. 363 Each UDF chunk has a valid bit associated with it. UDF attributes are 35-bits 364 and contains following fields 365 1) UDF0 (16-bits) 366 2) UDF1 (16-bits) 367 3) UDF_VALID0 (1-bit) 368 4) UDF_VALID1 (1-bit) 369 5) Drop (1-bit) 370 For a packet, one or both of the udf valid bits might be invalid.. 371 372 UDF configuration happens separately and for configuring flex-counter we need 373 below two udf(16b) masks only 374 */ 375 376 377 typedef struct bcm_stat_flex_udf_pkt_attr_bits_s { 378 uint16 udf0; 379 uint16 udf1; 380 }bcm_stat_flex_udf_pkt_attr_bits_t; 381 382 /* For UncompressedIngressMode,PacketAttributes bits are fixed i.e.cng 2 bits */ 383 #define BCM_STAT_FLEX_ING_UNCOMPRESSED_USE_CNG_ATTR_BITS 0x1 384 #define BCM_STAT_FLEX_ING_UNCOMPRESSED_USE_IFP_CNG_ATTR_BITS 0x2 385 #define BCM_STAT_FLEX_ING_UNCOMPRESSED_USE_INT_PRI_ATTR_BITS 0x4 386 #define BCM_STAT_FLEX_ING_UNCOMPRESSED_USE_VLAN_FORMAT_ATTR_BITS 0x8 387 #define BCM_STAT_FLEX_ING_UNCOMPRESSED_USE_OUTER_DOT1P_ATTR_BITS 0x10 388 #define BCM_STAT_FLEX_ING_UNCOMPRESSED_USE_INNER_DOT1P_ATTR_BITS 0x20 389 #define BCM_STAT_FLEX_ING_UNCOMPRESSED_USE_INGRESS_PORT_ATTR_BITS 0x40 390 #define BCM_STAT_FLEX_ING_UNCOMPRESSED_USE_TOS_DSCP_ATTR_BITS 0x80 391 #define BCM_STAT_FLEX_ING_UNCOMPRESSED_USE_TOS_ECN_ATTR_BITS 0x100 392 #define BCM_STAT_FLEX_ING_UNCOMPRESSED_USE_PKT_RESOLUTION_ATTR_BITS 0x200 393 #define BCM_STAT_FLEX_ING_UNCOMPRESSED_USE_SVP_TYPE_ATTR_BITS 0x400 394 #define BCM_STAT_FLEX_ING_UNCOMPRESSED_USE_DROP_ATTR_BITS 0x800 395 #define BCM_STAT_FLEX_ING_UNCOMPRESSED_USE_IP_PKT_ATTR_BITS 0x1000 396 #define BCM_STAT_FLEX_ING_UNCOMPRESSED_USE_CNG_3_ATTR_BITS 0x2000 397 #define BCM_STAT_FLEX_ING_UNCOMPRESSED_USE_PHB_3_ATTR_BITS 0x4000 398 #define BCM_STAT_FLEX_ING_UNCOMPRESSED_USE_CNG_2_ATTR_BITS 0x8000 399 #define BCM_STAT_FLEX_ING_UNCOMPRESSED_USE_PHB_2_ATTR_BITS 0x10000 400 #define BCM_STAT_FLEX_ING_UNCOMPRESSED_USE_CNG_1_ATTR_BITS 0x20000 401 #define BCM_STAT_FLEX_ING_UNCOMPRESSED_USE_PHB_1_ATTR_BITS 0x40000 402 #define BCM_STAT_FLEX_ING_UNCOMPRESSED_USE_TCP_FLAG_ATTR_BITS 0x80000 403 #define BCM_STAT_FLEX_ING_UNCOMPRESSED_USE_INT_CN_ATTR_BITS 0x100000 404 #define BCM_STAT_FLEX_ING_UNCOMPRESSED_USE_FC_TYPE_ATTR_BITS 0x200000 405 406 /* For UncompressedEgressMode,PacketAttributes bits are fixed i.e.cng 2 bits */ 407 408 #define BCM_STAT_FLEX_EGR_UNCOMPRESSED_USE_CNG_ATTR_BITS 0x1 409 #define BCM_STAT_FLEX_EGR_UNCOMPRESSED_USE_INT_PRI_ATTR_BITS 0x2 410 #define BCM_STAT_FLEX_EGR_UNCOMPRESSED_USE_VLAN_FORMAT_ATTR_BITS 0x4 411 #define BCM_STAT_FLEX_EGR_UNCOMPRESSED_USE_OUTER_DOT1P_ATTR_BITS 0x8 412 #define BCM_STAT_FLEX_EGR_UNCOMPRESSED_USE_INNER_DOT1P_ATTR_BITS 0x10 413 #define BCM_STAT_FLEX_EGR_UNCOMPRESSED_USE_EGRESS_PORT_ATTR_BITS 0x20 414 #define BCM_STAT_FLEX_EGR_UNCOMPRESSED_USE_TOS_DSCP_ATTR_BITS 0x40 415 #define BCM_STAT_FLEX_EGR_UNCOMPRESSED_USE_TOS_ECN_ATTR_BITS 0x80 416 #define BCM_STAT_FLEX_EGR_UNCOMPRESSED_USE_PKT_RESOLUTION_ATTR_BITS 0x100 417 #define BCM_STAT_FLEX_EGR_UNCOMPRESSED_USE_SVP_TYPE_ATTR_BITS 0x200 418 #define BCM_STAT_FLEX_EGR_UNCOMPRESSED_USE_DVP_TYPE_ATTR_BITS 0x400 419 #define BCM_STAT_FLEX_EGR_UNCOMPRESSED_USE_DROP_ATTR_BITS 0x800 420 #define BCM_STAT_FLEX_EGR_UNCOMPRESSED_USE_IP_PKT_ATTR_BITS 0x1000 421 #define BCM_STAT_FLEX_EGR_UNCOMPRESSED_USE_CNG_3_ATTR_BITS 0x2000 422 #define BCM_STAT_FLEX_EGR_UNCOMPRESSED_USE_PHB_3_ATTR_BITS 0x4000 423 #define BCM_STAT_FLEX_EGR_UNCOMPRESSED_USE_CNG_2_ATTR_BITS 0x8000 424 #define BCM_STAT_FLEX_EGR_UNCOMPRESSED_USE_PHB_2_ATTR_BITS 0x10000 425 #define BCM_STAT_FLEX_EGR_UNCOMPRESSED_USE_CNG_1_ATTR_BITS 0x20000 426 #define BCM_STAT_FLEX_EGR_UNCOMPRESSED_USE_PHB_1_ATTR_BITS 0x40000 427 #define BCM_STAT_FLEX_EGR_UNCOMPRESSED_USE_MMU_COS_ATTR_BITS 0x80000 428 #define BCM_STAT_FLEX_EGR_UNCOMPRESSED_USE_UC_QUEUEING_ATTR_BITS 0x100000 429 #define BCM_STAT_FLEX_EGR_UNCOMPRESSED_USE_CONGESTION_MARKED_ATTR_BITS 0x200000 430 #define BCM_STAT_FLEX_EGR_UNCOMPRESSED_USE_INT_CN_ATTR_BITS 0x400000 431 432 /* Packet attributes are mapped down to an 8 bit key before being used 433 * to index the counter offset table 434 */ 435 #define BCM_STAT_FLEX_MAX_PKT_ATTR_SEL_KEY_SIZE 8 436 437 438 typedef struct bcm_stat_flex_offset_table_entry_s { 439 uint8 offset; 440 uint8 count_enable; 441 }bcm_stat_flex_offset_table_entry_t; 442 443 typedef struct bcm_stat_flex_ing_uncmprsd_attr_selectors_s { 444 uint32 uncmprsd_attr_bits_selector; 445 uint16 total_counters; 446 bcm_stat_flex_offset_table_entry_t offset_table_map[256]; 447 }bcm_stat_flex_ing_uncmprsd_attr_selectors_t; 448 449 typedef struct bcm_stat_flex_egr_uncmprsd_attr_selectors_s { 450 uint32 uncmprsd_attr_bits_selector; 451 uint16 total_counters; 452 bcm_stat_flex_offset_table_entry_t offset_table_map[256]; 453 }bcm_stat_flex_egr_uncmprsd_attr_selectors_t; 454 455 456 /* 457 ################################################### 458 Ingress side compressed mode maps 459 ################################################### 460 461 PRI_CNG_MAP[2^(cng:2b + ifp_cng:2b +int_pri:4b=8)=256] * 8 462 PKT_PRI_MAP[2^(VLAN_FORMAT:2b + OUTER_DOT1P:3b + INNER_DOT1P:3b=8)=256] * 8 463 PORT_MAP[2^(INGRESS_PORT:6b=6)=64] * 8 464 TOS_MAP[2^(TOS:8b=8)=256] * 8 465 PKT_RES_MAP[2^(PACKET_RESOLUTION:6b + SVP_TYPE:1b + DROP:1b=8)=256] * 8 466 467 */ 468 typedef uint8 bcm_stat_flex_ing_cmprsd_pri_cnf_attr_map_t[256]; /*256 * 8 */ 469 typedef uint8 bcm_stat_flex_ing_cmprsd_pkt_pri_attr_map_t[256]; /*256 * 8 */ 470 typedef uint8 bcm_stat_flex_ing_cmprsd_port_attr_map_t[512]; /*64 * 8 */ 471 /*TD2:128*8 */ 472 /*KT2:170*8 */ 473 typedef uint8 bcm_stat_flex_ing_cmprsd_tos_attr_map_t[256]; /*256 * 8 */ 474 /* KT:256 KT2:1024 */ 475 typedef uint8 bcm_stat_flex_ing_cmprsd_pkt_res_attr_map_t[1024]; /*256 * 8 */ 476 477 typedef struct bcm_stat_flex_ing_cmprsd_attr_selectors_s { 478 uint8 cng_3; 479 uint8 phb_3; 480 uint8 cng_2; 481 uint8 phb_2; 482 uint8 cng_1; 483 uint8 phb_1; 484 bcm_stat_flex_ing_pkt_attr_bits_t pkt_attr_bits; 485 bcm_stat_flex_ing_cmprsd_pri_cnf_attr_map_t pri_cnf_attr_map; 486 bcm_stat_flex_ing_cmprsd_pkt_pri_attr_map_t pkt_pri_attr_map; 487 bcm_stat_flex_ing_cmprsd_port_attr_map_t port_attr_map; 488 bcm_stat_flex_ing_cmprsd_tos_attr_map_t tos_attr_map; 489 bcm_stat_flex_ing_cmprsd_pkt_res_attr_map_t pkt_res_attr_map; 490 uint8 total_counters; 491 bcm_stat_flex_offset_table_entry_t offset_table_map[256]; 492 }bcm_stat_flex_ing_cmprsd_attr_selectors_t; 493 494 /* 495 ################################################### 496 Egress side compressed mode maps 497 ################################################### 498 499 PRI_CNG_MAP[2^(cng:2b + int_pri:4b=6)=64] * 8 500 PKT_PRI_MAP[2^(VLAN_FORMAT:2b + OUTER_DOT1P:3b + INNER_DOT1P:3b=8)=256] * 8 501 PORT_MAP[2^(EGRESS_PORT:6b=6)=64] * 8 502 TOS_MAP[2^(TOS:8b=8)=256] * 8 503 PKT_RES_MAP[2^(PACKET_RESOLUTION:1b + 504 SVP_TYPE:1b + 505 DVP_TYPE:1b + 506 DROP:1b=4)=16] * 8 507 */ 508 typedef uint8 bcm_stat_flex_egr_cmprsd_pri_cnf_attr_map_t[64]; 509 typedef uint8 bcm_stat_flex_egr_cmprsd_pkt_pri_attr_map_t[256]; 510 typedef uint8 bcm_stat_flex_egr_cmprsd_port_attr_map_t[170]; /* KT:64,KT2:169 */ 511 typedef uint8 bcm_stat_flex_egr_cmprsd_tos_attr_map_t[256]; 512 typedef uint8 bcm_stat_flex_egr_cmprsd_pkt_res_attr_map_t[256]; 513 typedef uint8 bcm_stat_flex_egr_cmprsd_cos_uc_attr_map_t[64]; 514 515 typedef struct bcm_stat_flex_egr_cmprsd_attr_selectors_s { 516 uint8 cng_3; 517 uint8 phb_3; 518 uint8 cng_2; 519 uint8 phb_2; 520 uint8 cng_1; 521 uint8 phb_1; 522 bcm_stat_flex_egr_pkt_attr_bits_t pkt_attr_bits; 523 bcm_stat_flex_egr_cmprsd_pri_cnf_attr_map_t pri_cnf_attr_map; 524 bcm_stat_flex_egr_cmprsd_pkt_pri_attr_map_t pkt_pri_attr_map; 525 bcm_stat_flex_egr_cmprsd_port_attr_map_t port_attr_map; 526 bcm_stat_flex_egr_cmprsd_tos_attr_map_t tos_attr_map; 527 bcm_stat_flex_egr_cmprsd_pkt_res_attr_map_t pkt_res_attr_map; 528 bcm_stat_flex_egr_cmprsd_cos_uc_attr_map_t cos_uc_attr_map; 529 uint8 total_counters; 530 bcm_stat_flex_offset_table_entry_t offset_table_map[256]; 531 }bcm_stat_flex_egr_cmprsd_attr_selectors_t; 532 533 typedef struct bcm_stat_flex_udf_pkt_attr_selectors_s { 534 bcm_stat_flex_udf_pkt_attr_bits_t udf_pkt_attr_bits; 535 uint32 drop_enable; 536 uint8 total_counters; 537 }bcm_stat_flex_udf_pkt_attr_selectors_t; 538 539 540 typedef struct bcm_stat_flex_ing_attr_s { 541 bcm_stat_flex_packet_attr_type_t packet_attr_type; 542 /* union of all possible ingress packet attributes selectors 543 i.e. uncompressed,compressed and udf */ 544 bcm_stat_flex_ing_uncmprsd_attr_selectors_t uncmprsd_attr_selectors; 545 bcm_stat_flex_ing_cmprsd_attr_selectors_t cmprsd_attr_selectors; 546 bcm_stat_flex_udf_pkt_attr_selectors_t udf_pkt_attr_selectors; 547 }bcm_stat_flex_ing_attr_t; 548 549 typedef struct bcm_stat_flex_egr_attr_s { 550 bcm_stat_flex_packet_attr_type_t packet_attr_type; 551 /* union of all possible egress packet attributes selectors i.e. 552 uncompressed,compressed and udf */ 553 bcm_stat_flex_egr_uncmprsd_attr_selectors_t uncmprsd_attr_selectors; 554 bcm_stat_flex_egr_cmprsd_attr_selectors_t cmprsd_attr_selectors; 555 bcm_stat_flex_udf_pkt_attr_selectors_t udf_pkt_attr_selectors; 556 }bcm_stat_flex_egr_attr_t; 557 558 typedef struct bcm_stat_flex_attr_s { 559 bcm_stat_flex_direction_t direction; 560 bcm_stat_flex_ing_attr_t ing_attr; 561 bcm_stat_flex_egr_attr_t egr_attr; 562 }bcm_stat_flex_attr_t; 563 564 /* flex counter mode. */ 565 /* MSB bit will indicate ingress or egress mode. */ 566 typedef uint32 bcm_stat_flex_mode_t; 567 568 569 typedef struct bcm_stat_flex_counter_value_s { 570 uint32 pkt_counter_value; 571 uint64 byte_counter_value; 572 uint64 pkt64_counter_value; 573 }bcm_stat_flex_counter_value_t; 574 575 typedef struct bcm_stat_flex_ctr_offset_info_s { 576 uint8 all_counters_flag; 577 uint32 offset_index; /* Valid only when all_counters_flag is false=0*/ 578 }bcm_stat_flex_ctr_offset_info_t; 579 580 581 /* FLEX COUNTER COMMON DECLARATION */ 582 583 #define BCM_STAT_FLEX_COUNTER_MAX_DIRECTION 2 584 #define BCM_STAT_FLEX_COUNTER_MAX_MODE 4 585 #define BCM_STAT_FLEX_COUNTER_MAX_POOL 16 586 #define BCM_STAT_FLEX_COUNTER_MAX_INGRESS_TABLE 16 587 #define BCM_STAT_FLEX_COUNTER_MAX_TH_IFP_INGRESS_TABLE 20 588 #define BCM_STAT_FLEX_COUNTER_MAX_EGRESS_TABLE 8 589 #define BCM_STAT_FLEX_COUNTER_MAX_SCACHE_SIZE 32 590 #define BCM_STAT_FLEX_COUNTER_MAX_TOTAL_BITS 8 591 #define BCM_STAT_FLEX_COUNTER_POOLS_PER_GROUP 4 592 #define BCM_STAT_FLEX_COUNTER_MAX_GROUPS (BCM_STAT_FLEX_COUNTER_MAX_POOL/ \ 593 BCM_STAT_FLEX_COUNTER_POOLS_PER_GROUP) 594 #define BCM_STAT_TH_FLEX_COUNTER_MAX_POOL 20 595 #define BCM_STAT_AP_FLEX_COUNTER_MAX_PKT_ATTR_SEL 32 596 597 598 #define BCM_STAT_DEF_FLEX_COUNTER_MAX_GROUPS 1 599 #define BCM_STAT_TR3_FLEX_COUNTER_MAX_GROUPS 2 600 #define BCM_STAT_TD2_FLEX_COUNTER_MAX_GROUPS 2 601 602 #define BCM_STAT_AP_FLEX_COUNTER_MAX_GROUPS 8 603 604 605 /* Tomahawk has 4 additional pools */ 606 #define BCM_STAT_TH_FLEX_COUNTER_MAX_GROUPS (BCM_STAT_TH_FLEX_COUNTER_MAX_POOL/ \ 607 BCM_STAT_FLEX_COUNTER_POOLS_PER_GROUP) 608 609 #define BCM_STAT_GROUP_MODE_ID_OAM_SUFFIX 0x10000000 /* Suffix for Stat Group Mode With OAM */ 610 #define BCM_STAT_GROUP_MODE_ID_OAM_MASK 0xF0000000 /* Mask for Stat Group Mode With OAM */ 611 612 613 614 #define BCM_STAT_FLEX_COUNTER_MAX_ATTR_SEL_BITS 8 615 #define BCM_STAT_FLEX_MAX_COUNTERS_PER_MODE 256 616 #define BCM_FLEX_STAT_TH_RSVD_IFP_POOL_MIN 12 617 #define BCM_FLEX_STAT_TH_RSVD_IFP_POOL_MAX 19 618 619 #define BCM_FLEX_STAT_HX5_RSVD_IFP_POOL_MIN 8 620 621 #define BCM_STAT_TD3_FLEX_COUNTER_MAX_EGR_POOL 4 622 623 typedef struct bcm_stat_flex_table_mode_info_t { 624 soc_mem_t soc_mem_v; 625 bcm_stat_flex_mode_t mode; 626 }bcm_stat_flex_table_mode_info_t; 627 628 629 /* POOL NUMBERS for INGRESS Tables */ 630 631 632 #define FLEX_COUNTER_DEFAULT_PORT_TABLE_POOL_NUMBER 0 633 #define FLEX_COUNTER_DEFAULT_VFP_POLICY_TABLE_POOL_NUMBER 1 634 /* VFI and VLAN sharing same pool id */ 635 #define FLEX_COUNTER_DEFAULT_VFI_TABLE_POOL_NUMBER 2 636 #define FLEX_COUNTER_DEFAULT_VLAN_TABLE_POOL_NUMBER 2 637 #define FLEX_COUNTER_DEFAULT_VXLAN_TABLE_POOL_NUMBER 2 638 639 /* VLAN_XLATE and MPLS_TUNNEL_LABEL sharing same pool id */ 640 #define FLEX_COUNTER_DEFAULT_VLAN_XLATE_TABLE_POOL_NUMBER 3 641 #define FLEX_COUNTER_DEFAULT_MPLS_ENTRY_TABLE_POOL_NUMBER 3 642 643 /* MPLS_ENTRY_VC_LABEL and VRF can share same pool */ 644 #define FLEX_COUNTER_DEFAULT_VRF_TABLE_POOL_NUMBER 4 645 #define FLEX_COUNTER_DEFAULT_AGM_MONITOR_TABLE_POOL_NUMBER 4 646 647 #if defined(BCM_TRIDENT2PLUS_SUPPORT) 648 #define FLEX_COUNTER_DEFAULT_VLAN_XLATE_SCND_LKUP_TABLE_POOL_NUMBER 4 649 #endif /* BCM_TRIDENT2PLUS_SUPPORT */ 650 651 /* Source VP and L3_iif sharing same pool id */ 652 #define FLEX_COUNTER_DEFAULT_L3_IIF_TABLE_POOL_NUMBER 5 653 #define FLEX_COUNTER_DEFAULT_SOURCE_VP_TABLE_POOL_NUMBER 5 654 #define FLEX_COUNTER_DEFAULT_AGM_MONITOR_TABLE_SCND_LKUP_POOL_NUMBER 5 655 656 #if defined(BCM_APACHE_SUPPORT) 657 #define FLEX_COUNTER_DEFAULT_MPLS_ENTRY_SCND_LKUP_TABLE_POOL_NUMBER 5 658 #endif /* BCM_APACHE_SUPPORT */ 659 660 661 #define FLEX_COUNTER_DEFAULT_L3_TUNNEL_TABLE_POOL_NUMBER 6 662 #define FLEX_COUNTER_DEFAULT_FCOE_TABLE_POOL_NUMBER 6 663 664 /* L3_ENTRY_2/4 + EXT_IPV4_UCAST_WIDE/EXT_IPV6_UCAST_WIDE share same pool id */ 665 #define FLEX_COUNTER_DEFAULT_L3_ENTRY_TABLE_POOL_NUMBER 7 666 #define FLEX_COUNTER_DEFAULT_L3_ROUTE_TABLE_POOL_NUMBER 7 667 668 #define FLEX_COUNTER_DEFAULT_EXT_FP_POLICY_TABLE_POOL_NUMBER 8 669 #define FLEX_COUNTER_DEFAULT_IFP_POLICY_TABLE_POOL_NUMBER 8 670 671 #define FLEX_COUNTER_DEFAULT_EM_POLICY_TABLE_POOL_NUMBER 9 672 673 #ifdef BCM_HELIX5_SUPPORT 674 #define FLEX_COUNTER_HX5_DEFAULT_EM_POLICY_TABLE_POOL_NUMBER 7 675 #define FLEX_COUNTER_HX5_EXT_FP_POLICY_TABLE_POOL_NUMBER 7 676 #endif 677 678 /* Support for MetroLite*/ 679 #if defined(BCM_METROLITE_SUPPORT) 680 #define FLEX_COUNTER_ML_DEFAULT_VRF_TABLE_POOL_NUMBER 2 681 #define FLEX_COUNTER_ML_DEFAULT_AGM_MONITOR_TABLE_POOL_NUMBER 2 682 683 #define FLEX_COUNTER_ML_DEFAULT_L3_IIF_TABLE_POOL_NUMBER 3 684 #define FLEX_COUNTER_ML_DEFAULT_SOURCE_VP_TABLE_POOL_NUMBER 3 685 686 #define FLEX_COUNTER_ML_DEFAULT_L3_TUNNEL_TABLE_POOL_NUMBER 2 687 #define FLEX_COUNTER_ML_DEFAULT_FCOE_TABLE_POOL_NUMBER 2 688 689 /* L3_ENTRY_2/4 + EXT_IPV4_UCAST_WIDE/EXT_IPV6_UCAST_WIDE share same pool id */ 690 #define FLEX_COUNTER_ML_DEFAULT_L3_ENTRY_TABLE_POOL_NUMBER 3 691 #define FLEX_COUNTER_ML_DEFAULT_L3_ROUTE_TABLE_POOL_NUMBER 3 692 693 #define FLEX_COUNTER_ML_DEFAULT_EXT_FP_POLICY_TABLE_POOL_NUMBER 2 694 #define FLEX_COUNTER_ML_DEFAULT_IFP_POLICY_TABLE_POOL_NUMBER 2 695 696 #define FLEX_COUNTER_ML_DEFAULT_EM_POLICY_TABLE_POOL_NUMBER 2 697 #endif /* BCM_METROLITE_SUPPORT */ 698 699 700 /* POOL MASKS for INGRESS Tables */ 701 #define FLEX_COUNTER_POOL_USED_BY_PORT_TABLE 0x1 702 #define FLEX_COUNTER_POOL_USED_BY_VFP_POLICY_TABLE 0x2 703 #define FLEX_COUNTER_POOL_USED_BY_VLAN_TABLE 0x4 704 #define FLEX_COUNTER_POOL_USED_BY_VFI_TABLE 0x8 705 #define FLEX_COUNTER_POOL_USED_BY_VLAN_XLATE_TABLE 0x10 706 #define FLEX_COUNTER_POOL_USED_BY_MPLS_ENTRY_TABLE 0x20 707 #define FLEX_COUNTER_POOL_USED_BY_VRF_TABLE 0x40 708 #define FLEX_COUNTER_POOL_USED_BY_L3_IIF_TABLE 0x80 709 #define FLEX_COUNTER_POOL_USED_BY_SOURCE_VP_TABLE 0x100 710 #define FLEX_COUNTER_POOL_USED_BY_L3_TUNNEL_TABLE 0x200 711 #define FLEX_COUNTER_POOL_USED_BY_L3_ENTRY_TABLE 0x400 712 #define FLEX_COUNTER_POOL_USED_BY_EXT_FP_POLICY_TABLE 0x800 713 #define FLEX_COUNTER_POOL_USED_BY_VXLAN_TABLE 0x1000 714 #define FLEX_COUNTER_POOL_USED_BY_FCOE_TABLE 0x2000 715 #define FLEX_COUNTER_POOL_USED_BY_VSAN_TABLE 0x4000 716 #define FLEX_COUNTER_POOL_USED_BY_L3_ROUTE_TABLE 0x8000 717 #define FLEX_COUNTER_POOL_USED_BY_IFP_POLICY_TABLE 0x10000 718 #define FLEX_COUNTER_POOL_USED_BY_AGM_MONITOR_TABLE 0x20000 719 #define FLEX_COUNTER_POOL_USED_BY_EM_POLICY_TABLE 0x40000 720 #define FLEX_COUNTER_POOL_USED_BY_VLAN_XLATE_TABLE_FOR_SCND_LKUP 0x80000 721 #define FLEX_COUNTER_POOL_USED_BY_MPLS_ENTRY_TABLE_FOR_SCND_LKUP 0x100000 722 #define FLEX_COUNTER_POOL_USED_BY_AGM_MONITOR_TABLE_FOR_SCND_LKUP 0x200000 723 724 /* POOL NUMBERS for EGRESS Tables */ 725 #define FLEX_COUNTER_DEFAULT_EGR_L3_NEXT_HOP_TABLE_POOL_NUMBER 0 726 #define FLEX_COUNTER_DEFAULT_EGR_VFI_TABLE_POOL_NUMBER 1 727 #define FLEX_COUNTER_DEFAULT_EGR_PORT_TABLE_POOL_NUMBER 2 728 #define FLEX_COUNTER_DEFAULT_EGR_VLAN_TABLE_POOL_NUMBER 3 729 #define FLEX_COUNTER_DEFAULT_EGR_VLAN_XLATE_TABLE_POOL_NUMBER 4 730 #define FLEX_COUNTER_DEFAULT_EGR_DVP_ATTRIBUTE_1_TABLE_POOL_NUMBER 5 731 #define FLEX_COUNTER_DEFAULT_L3_NAT_TABLE_POOL_NUMBER 7 732 #if defined(BCM_TOMAHAWK3_SUPPORT) 733 #define FLEX_COUNTER_DEFAULT_LATENCY_MONITOR_POOL_NUMBER 3 734 #endif 735 736 #if defined(BCM_TRIDENT2_SUPPORT) || defined(BCM_METROLITE_SUPPORT) 737 #define FLEX_COUNTER_TD2_DEFAULT_EGR_VLAN_XLATE_TABLE_POOL_NUMBER 0 738 #define FLEX_COUNTER_TD2_DEFAULT_EGR_DVP_ATTRIBUTE_1_TABLE_POOL_NUMBER 1 739 #define FLEX_COUNTER_TD2_DEFAULT_L3_NAT_TABLE_POOL_NUMBER 2 740 #endif 741 742 #if defined(BCM_TRIDENT2PLUS_SUPPORT) 743 #define FLEX_COUNTER_DEFAULT_EGR_IP_TUNNEL_MPLS_POOL_NUMBER 2 744 #define FLEX_COUNTER_DEFAULT_EGR_IP_TUNNEL_MPLS_SCND_LBL_POOL_NUMBER 3 745 #define FLEX_COUNTER_DEFAULT_EGR_EFP_POLICY_TABLE_POOL_NUMBER 3 746 #endif /* BCM_TRIDENT2PLUS_SUPPORT */ 747 748 #if defined(BCM_APACHE_SUPPORT) || defined(BCM_TRIDENT3_SUPPORT) 749 #define FLEX_COUNTER_DEFAULT_EGR_VLAN_XLATE_SCND_LKUP_POOL_NUMBER 2 750 #endif /* BCM_APACHE_SUPPORT */ 751 752 /* POOL MASKS for EGRESS Tables */ 753 #define FLEX_COUNTER_POOL_USED_BY_EGR_L3_NEXT_HOP_TABLE 0x1 754 #define FLEX_COUNTER_POOL_USED_BY_EGR_VFI_TABLE 0x2 755 #define FLEX_COUNTER_POOL_USED_BY_EGR_PORT_TABLE 0x4 756 #define FLEX_COUNTER_POOL_USED_BY_EGR_VLAN_TABLE 0x8 757 #define FLEX_COUNTER_POOL_USED_BY_EGR_VLAN_XLATE_TABLE 0x10 758 #define FLEX_COUNTER_POOL_USED_BY_EGR_DVP_ATTRIBUTE_1_TABLE 0x20 759 #define FLEX_COUNTER_POOL_USED_BY_EGR_L3_NAT_TABLE 0x40 760 #define FLEX_COUNTER_POOL_USED_BY_EGR_EFP_POLICY_TABLE 0x80 761 #define FLEX_COUNTER_POOL_USED_BY_EGR_IP_TUNNEL_MPLS_TABLE 0x100 762 #define FLEX_COUNTER_POOL_USED_BY_EGR_VLAN_XLATE_TABLE_FOR_SCND_LKUP 0x200 763 #define FLEX_COUNTER_POOL_USED_BY_EGR_IP_TUNNEL_MPLS_SCND_LBL_TABLE 0x400 764 #define FLEX_COUNTER_POOL_USED_BY_LATENCY_MONITOR_TABLE 0x800 765 766 767 #define TABLE_INDEPENDENT_POOL_MASK 0x80000000 768 769 /* ================================================================= */ 770 /* Pkt Resolution bits for Triumph3 is 6 bits so max value is 64 */ 771 /* Below values are just index and nothing to do with actual value */ 772 /* Actual chip specific values will be determined in init function */ 773 /* ================================================================= */ 774 #define _UNKNOWN_PKT 0 /* unknown packet */ 775 #define _CONTROL_PKT 1 /* pkt(12, 13) == 0x8808 */ 776 #define _BPDU_PKT 2 /* L2 USER ENTRY table BPDU bit */ 777 #define _L2BC_PKT 3 /* L2 Broadcast pkt */ 778 #define _L2UC_PKT 4 /* L2 Unicast pkt */ 779 #define _L2DLF_PKT 5 /* L2 destination lookup failure */ 780 #define _UNKNOWN_IPMC_PKT 6 /* Unknown IP Multicast pkt */ 781 #define _KNOWN_IPMC_PKT 7 /* Known IP Multicast pkt */ 782 #define _KNOWN_L2MC_PKT 8 /* Known L2 multicast pkt */ 783 #define _UNKNOWN_L2MC_PKT 9 /* Unknown L2 multicast pkt */ 784 #define _KNOWN_L3UC_PKT 10 /* Known L3 Unicast pkt */ 785 #define _UNKNOWN_L3UC_PKT 11 /* Unknown L3 Unicast pkt */ 786 #define _KNOWN_MPLS_PKT 12 /* Known MPLS pkt */ 787 #define _KNOWN_MPLS_L3_PKT 13 /* Known L3 MPLS pkt */ 788 #define _KNOWN_MPLS_L2_PKT 14 /* Known L2 MPLS pkt */ 789 #define _UNKNOWN_MPLS_PKT 15 /* Unknown MPLS pkt */ 790 #define _KNOWN_MIM_PKT 16 /* Known MIM pkt */ 791 #define _UNKNOWN_MIM_PKT 17 /* Unknown MIM pkt */ 792 #define _KNOWN_MPLS_MULTICAST_PKT 18 /* Known MPLS multicast pkt */ 793 794 /* Additional Control Packets */ 795 #define _OAM_PKT 19 /* OAM packet that needs to be 796 terminated locally */ 797 #define _BFD_PKT 20 /* BFD packet that needs to be 798 terminated locally */ 799 #define _ICNM_PKT 21 /* ICNM packet that needs to be 800 terminated locally */ 801 #define _1588_PKT 22 /* ICNM packet that needs to be 802 terminated locally */ 803 #define _KNOWN_TRILL_PKT 23 /* Known EgressRbridgeTRILL transit pkt */ 804 #define _UNKNOWN_TRILL_PKT 24 /* UnKnown EgressRbridgeTRILL transit pkt */ 805 #define _KNOWN_NIV_PKT 25 /* Known DestinationVifDownstream pkt */ 806 #define _UNKNOWN_NIV_PKT 26 /* UnKnown DestinationVifDownstream pkt */ 807 #define _KNOWN_L2GRE_PKT 27 /* Known L2 Gre pkt */ 808 #define _KNOWN_VXLAN_PKT 28 /* Known VXLAN pkt */ 809 #define _KNOWN_FCOE_PKT 29 /* Known FCoE pkt */ 810 #define _UNKNOWN_FCOE_PKT 30 /* UnKnown FCoE pkt */ 811 812 813 814 #define _UNKNOWN_PKT_KATANA 0x00 /* unknown packet */ 815 #define _CONTROL_PKT_KATANA 0x01 /* pkt(12, 13) == 0x8808 */ 816 #define _BPDU_PKT_KATANA 0x02 /* L2 USER ENTRY table BPDU bit */ 817 #define _L2BC_PKT_KATANA 0x03 /* L2 Broadcast pkt */ 818 #define _L2UC_PKT_KATANA 0x04 /* L2 Unicast pkt */ 819 #define _L2DLF_PKT_KATANA 0x05 /* L2 destination lookup failure */ 820 #define _UNKNOWN_IPMC_PKT_KATANA 0x06 /* Unknown IP Multicast pkt */ 821 #define _KNOWN_IPMC_PKT_KATANA 0x07 /* Known IP Multicast pkt */ 822 #define _KNOWN_L2MC_PKT_KATANA 0x08 /* Known L2 multicast pkt */ 823 #define _UNKNOWN_L2MC_PKT_KATANA 0x09 /* Unknown L2 multicast pkt */ 824 #define _KNOWN_L3UC_PKT_KATANA 0x0a /* Known L3 Unicast pkt */ 825 #define _UNKNOWN_L3UC_PKT_KATANA 0x0b /* Unknown L3 Unicast pkt */ 826 #define _KNOWN_MPLS_PKT_KATANA 0x0c /* Known MPLS pkt */ 827 #define _KNOWN_MPLS_L3_PKT_KATANA 0x0d /* Known L3 MPLS pkt */ 828 #define _KNOWN_MPLS_L2_PKT_KATANA 0x0e /* Known L2 MPLS pkt */ 829 #define _UNKNOWN_MPLS_PKT_KATANA 0x0f /* Unknown MPLS pkt */ 830 #define _KNOWN_MIM_PKT_KATANA 0x10 /* Known MIM pkt */ 831 #define _UNKNOWN_MIM_PKT_KATANA 0x11 /* Unknown MIM pkt */ 832 #define _KNOWN_MPLS_MULTICAST_PKT_KATANA 0x12 /* Known MPLS multicast pkt */ 833 834 #define _UNKNOWN_PKT_TR3 0 /* unknown packet */ 835 #define _CONTROL_PKT_TR3 1 /* pkt(12, 13) == 0x8808 */ 836 #define _OAM_PKT_TR3 2 /* OAM packet */ 837 #define _BFD_PKT_TR3 3 /* BFD packet */ 838 #define _BPDU_PKT_TR3 4 /* L2 USER ENTRY table BPDU bit */ 839 #define _ICNM_PKT_TR3 5 /* ICNM packet */ 840 #define _1588_PKT_TR3 6 /* 1588 packet */ 841 #define _KNOWN_L2UC_PKT_TR3 8 /* Known destination L2 unicast packet*/ 842 #define _L2UC_PKT_TR3 _KNOWN_L2UC_PKT_TR3 843 /* L2UC_PKT_TR3: L2 Unicast pkt */ 844 #define _UNKNOWN_L2UC_PKT_TR 9 /* Unknown destination L2 UnicastPacket*/ 845 #define _L2DLF_PKT_TR3 _UNKNOWN_L2UC_PKT_TR 846 /* L2 destination lookup failure */ 847 #define _KNOWN_L2MC_PKT_TR3 10 /* Known L2 multicast pkt */ 848 #define _UNKNOWN_L2MC_PKT_TR3 11 /* Unknown L2 multicast pkt */ 849 #define _L2BC_PKT_TR3 12 /* L2 Broadcast pkt */ 850 #define _KNOWN_L3UC_PKT_TR3 16 /* Known L3 Unicast pkt */ 851 #define _UNKNOWN_L3UC_PKT_TR3 17 /* Unknown L3 Unicast pkt */ 852 #define _KNOWN_IPMC_PKT_TR3 18 /* Known IP Multicast pkt */ 853 #define _UNKNOWN_IPMC_PKT_TR3 19 /* Unknown IP Multicast pkt */ 854 #define _KNOWN_MPLS_L2_PKT_TR3 24 /* Known L2 MPLS pkt */ 855 #define _UNKNOWN_MPLS_PKT_TR3 25 /* Unknown MPLS pkt */ 856 #define _KNOWN_MPLS_L3_PKT_TR3 26 /* Known L3 MPLS pkt */ 857 #define _KNOWN_MPLS_PKT_TR3 28 /* Known MPLS pkt */ 858 #define _KNOWN_MPLS_MULTICAST_PKT_TR3 29 /* Known MPLS multicast pkt */ 859 #define _KNOWN_MIM_PKT_TR3 32 /* Known MIM pkt */ 860 #define _UNKNOWN_MIM_PKT_TR3 33 /* Unknown MIM pkt */ 861 #define _KNOWN_TRILL_PKT_TR3 40 /* Known EgressRbridgeTRILL Transit 862 pkt */ 863 #define _UNKNOWN_TRILL_PKT_TR3 41 /* UnKnown EgressRbridgeTRILL Transit 864 Pkt */ 865 #define _KNOWN_NIV_PKT_TR3 48 /* Known DestinationVifDownstream pkt */ 866 #define _UNKNOWN_NIV_PKT_TR3 49 /* UnKnown DestinationVifDownstream 867 pkt */ 868 /* added in TD2 */ 869 #define _KNOWN_L2GRE_PKT_TD2 50 /* Known L2 Gre pkt */ 870 #define _KNOWN_VXLAN_PKT_TD2 51 /* Known VXLAN pkt */ 871 #define _KNOWN_FCOE_PKT_TD2 52 /* Known FCoE pkt */ 872 #define _UNKNOWN_FCOE_PKT_TD2 53 /* Unknown FCoE pkt */ 873 874 /* Egress packet types */ 875 #define _L2_UC_PKT_EGR 0 /* Egr L2 UC pkt */ 876 #define _L2_NON_UC_PKT_EGR 1 /* Egr L2 Non UC pkt */ 877 878 879 #define BCM_FLEX_INGRESS_POOL 0x1 880 #define BCM_FLEX_EGRESS_POOL 0x2 881 #define BCM_FLEX_ALLOCATE_POOL 0x4 882 #define BCM_FLEX_DEALLOCATE_POOL 0x8 883 #define BCM_FLEX_SHARED_POOL 0x10 884 #define BCM_FLEX_NOT_SHARED_POOL 0x20 885 886 /* For internal use only */ 887 typedef enum bcm_int_stat_object_e { 888 bcmIntStatObjectIngAgm = bcmStatObjectMaxValue, 889 bcmIntStatObjectIngAgmSecondLookup, 890 bcmIntStatObjectEgrLatencyMonitor0, 891 bcmIntStatObjectEgrLatencyMonitor1, 892 bcmIntStatObjectEgrLatencyMonitor2, 893 bcmIntStatObjectEgrLatencyMonitor3, 894 bcmIntStatObjectMaxValue 895 } bcm_int_stat_object_t; 896 897 typedef enum bcm_int_stat_group_mode_e { 898 bcmIntStatGroupModeLatencyMonitor = bcmStatGroupModeCount 899 } bcm_int_stat_group_mode_t; 900 901 typedef enum bcm_int_stat_group_mode_hint_type_e { 902 bcmIntStatGroupAllocHintIngressAgmGroup = bcmStatGroupAllocHintCount, 903 bcmIntStatGroupAllocHintCount 904 } bcm_int_stat_group_mode_hint_type_t; 905 906 typedef struct bcm_stat_flex_pool_stat_s { 907 uint32 used_by_tables; 908 SHR_BITDCL used_by_objects[_SHR_BITDCLSIZE(bcmIntStatObjectMaxValue)]; 909 uint32 used_entries; 910 uint32 attached_entries; 911 } bcm_stat_flex_pool_stat_t; 912 913 #define BCM_FLEX_POOL_GROUP_USED_BY_NONE 0 914 #define BCM_FLEX_POOL_GROUP_USED_BY_OAM 1 915 #define BCM_FLEX_POOL_GROUP_USED_BY_OTHER 2 916 917 typedef struct bcm_stat_flex_pool_group_s { 918 uint32 group_type; 919 uint32 free_pools; 920 uint32 base_pool; 921 }bcm_stat_flex_pool_group_t; 922 923 924 925 /* ******************************************************************* */ 926 /* counter-id-specific reference count will be added later i.e. after 927 basic functionality starts working */ 928 /* ******************************************************************* */ 929 typedef struct bcm_stat_flex_ingress_mode_s { 930 uint32 available; 931 uint32 reference_count; 932 uint32 total_counters; 933 bcm_stat_group_mode_t group_mode; 934 uint32 flags; 935 uint32 oam_flags; 936 uint32 num_selectors; 937 bcm_stat_group_mode_attr_selector_t *attr_selectors; 938 bcm_stat_flex_ing_attr_t ing_attr; 939 }bcm_stat_flex_ingress_mode_t; 940 941 #define BCM_CUSTOM_INGRESS_MODE_START (16) 942 #define BCM_CUSTOM_INGRESS_MODE_MAX_COUNT (152*1024) 943 #define BCM_STAT_FLEX_CUSTOM_INGRESS_COUNTER_MAX_MODE (BCM_CUSTOM_INGRESS_MODE_MAX_COUNT + BCM_CUSTOM_INGRESS_MODE_START) /*152K custom modes to handle maximum possible */ 944 945 #define BCM_CUSTOM_EGRESS_MODE_START (BCM_STAT_FLEX_CUSTOM_INGRESS_COUNTER_MAX_MODE) 946 #define BCM_CUSTOM_EGRESS_MODE_MAX_COUNT (32*1024) 947 #define BCM_STAT_FLEX_CUSTOM_EGRESS_COUNTER_MAX_MODE (BCM_CUSTOM_EGRESS_MODE_START + BCM_CUSTOM_EGRESS_MODE_MAX_COUNT) 948 949 typedef struct _bcm_stat_counter_map { 950 uint32 mode; 951 uint32 pool; 952 uint32 base_idx; 953 bcm_stat_object_t object; 954 bcm_stat_group_mode_t group; 955 uint8 pipe; 956 int used; 957 }bcm_stat_counter_map_t; 958 959 /*"Wrapper" Modes for custom IFP stats*/ 960 typedef struct bcm_stat_flex_custom_ingress_mode_s { 961 uint8 used; 962 uint8 offset_mode; 963 int8 AllocPool; /* Pool actually allocated for IFP. Group ID cannot identify the exact pool */ 964 bcm_stat_group_mode_hint_t hint; 965 uint32 num_selectors; 966 bcm_stat_group_mode_attr_selector_t *attr_selectors; 967 uint32 total_counters; 968 }bcm_stat_flex_custom_ingress_mode_t; 969 970 #if defined(BCM_TRIDENT3_SUPPORT) || defined(BCM_TOMAHAWK3_SUPPORT) 971 /*"Wrapper" Modes for custom EFP stats*/ 972 typedef struct bcm_stat_flex_custom_egress_mode_s { 973 uint8 used; 974 uint8 offset_mode; 975 int8 AllocPool; 976 bcm_stat_group_mode_hint_t hint; 977 uint32 num_selectors; 978 bcm_stat_group_mode_attr_selector_t *attr_selectors; 979 uint32 total_counters; 980 }bcm_stat_flex_custom_egress_mode_t; 981 982 #ifdef BCM_WARM_BOOT_SUPPORT 983 typedef struct bcm_stat_flex_custom_mode_info_s { 984 uint32 custom_mode; 985 uint8 offset_mode; 986 uint8 AllocPool; 987 uint32 fg_id; /*field group id - 0xffffffff means invalid */ 988 }bcm_stat_flex_custom_mode_info_t; 989 990 typedef struct bcm_stat_flex_counter_id_info_s { 991 uint32 mode; 992 uint8 pool; 993 uint8 used; 994 uint32 base_idx; 995 uint16 object; 996 uint16 group; 997 }bcm_stat_flex_counter_id_info_t; 998 #endif 999 #endif 1000 1001 typedef struct bcm_stat_flex_egress_mode_s { 1002 uint32 available; 1003 uint32 reference_count; 1004 uint32 total_counters; 1005 uint32 group_mode; 1006 uint32 flags; 1007 uint32 num_selectors; 1008 bcm_stat_group_mode_attr_selector_t *attr_selectors; 1009 bcm_stat_flex_egr_attr_t egr_attr; 1010 }bcm_stat_flex_egress_mode_t; 1011 1012 typedef struct bcm_stat_flex_table_info_s { 1013 soc_mem_t table; 1014 uint32 index; 1015 bcm_stat_flex_direction_t direction; 1016 }bcm_stat_flex_table_info_t; 1017 1018 typedef struct bcm_stat_flex_pool_attribute_t { 1019 int module_type; 1020 int pool_size; 1021 uint32 flags ; 1022 int pool_id; 1023 int offset; 1024 }bcm_stat_flex_pool_attribute_t; 1025 1026 typedef enum bcm_stat_flex_group_mode_e { 1027 bcmStatGroupModeFlex1 = bcmStatGroupModeCount, 1028 bcmStatGroupModeFlex2, 1029 bcmStatGroupModeFlex3, 1030 bcmStatGroupModeFlex4 1031 }bcm_stat_flex_group_mode_t; 1032 1033 /* BEGIN: NEW FLEX FEATURE RELATED STUFF */ 1034 #define BCM_STAT_FLEX_MAX_COUNTER 256 1035 #define BCM_STAT_FLEX_MAX_SELECTORS 512 1036 1037 #define SHR_BITWID 32 1038 #define BCM_STAT_FLEX_VALUE_SET(_array, _value) \ 1039 (((_array)[(_value) / SHR_BITWID]) |= (1U << ((_value) % SHR_BITWID))) 1040 1041 #define BCM_STAT_FLEX_VALUE_GET(_array, _value) \ 1042 (((_array)[(_value) / SHR_BITWID]) & (1U << ((_value) % SHR_BITWID))) 1043 1044 #define BCM_STAT_FLEX_BIT_ARRAY_SIZE 32 1045 1046 #define BCM_STAT_FLEX_DETACH_RV_SET(rv, _array) \ 1047 if (BCM_E_NONE == (_array)[bcmStatFlexDirectionIngress]) { \ 1048 if (BCM_E_NOT_FOUND == \ 1049 (_array)[bcmStatFlexDirectionEgress]) { \ 1050 rv = BCM_E_NONE; \ 1051 } else { \ 1052 rv = (_array)[bcmStatFlexDirectionEgress]; \ 1053 } \ 1054 } else if (BCM_E_NOT_FOUND == \ 1055 (_array)[bcmStatFlexDirectionIngress]){ \ 1056 rv = (_array)[bcmStatFlexDirectionEgress]; \ 1057 } else { \ 1058 rv = (_array)[bcmStatFlexDirectionIngress]; \ 1059 } 1060 1061 1062 #define BCM_STAT_FLEX_DETACH_RETURN(_array) \ 1063 if (BCM_E_NONE == (_array)[bcmStatFlexDirectionIngress]) { \ 1064 if (BCM_E_NOT_FOUND == \ 1065 (_array)[bcmStatFlexDirectionEgress]) { \ 1066 return BCM_E_NONE; \ 1067 } else { \ 1068 return (_array)[bcmStatFlexDirectionEgress]; \ 1069 } \ 1070 } else if (BCM_E_NOT_FOUND == \ 1071 (_array)[bcmStatFlexDirectionIngress]){ \ 1072 return (_array)[bcmStatFlexDirectionEgress]; \ 1073 } else { \ 1074 return (_array)[bcmStatFlexDirectionIngress]; \ 1075 } 1076 1077 typedef enum bcm_stat_flex_attr_with_value_e { 1078 bcmStatFlexAttrPort = 0, 1079 bcmStatFlexAttrTosDscp = 1, 1080 bcmStatFlexAttrTosEcn = 2, 1081 bcmStatFlexAttrSvp = 3, 1082 bcmStatFlexAttrDvp = 4, 1083 bcmStatFlexAttrUdf = 5, 1084 bcmStatFlexAttrComb = 6, 1085 bcmStatFlexAttrMax = 7 1086 }bcm_stat_flex_attr_with_value_t; 1087 1088 #define BCM_MAX_IFP_COLOR_COUNTERS 3 1089 #define BCM_MAX_IFP_COLORS 3 1090 1091 typedef struct _bcm_ifp_color_map_s { 1092 uint8 map[BCM_MAX_IFP_COLOR_COUNTERS]; 1093 } _bcm_ifp_color_map_t; 1094 1095 typedef struct bcm_stat_flex_combine_attr_counter_s { 1096 uint32 fc_type; 1097 1098 #define BCM_STAT_FLEX_TCP_FLAG_TYPE_FIN 0x00000001 1099 #define BCM_STAT_FLEX_TCP_FLAG_TYPE_SYN 0x00000002 1100 #define BCM_STAT_FLEX_TCP_FLAG_TYPE_RST 0x00000004 1101 #define BCM_STAT_FLEX_TCP_FLAG_TYPE_PSH 0x00000008 1102 #define BCM_STAT_FLEX_TCP_FLAG_TYPE_ACK 0x00000010 1103 #define BCM_STAT_FLEX_TCP_FLAG_TYPE_URG 0x00000020 1104 #define BCM_STAT_FLEX_TCP_FLAG_TYPE_ECE 0x00000040 1105 #define BCM_STAT_FLEX_TCP_FLAG_TYPE_CWR 0x00000080 1106 uint32 tcp_flags; 1107 1108 #define BCM_STAT_FLEX_INT_CN0 0x00000001 1109 #define BCM_STAT_FLEX_INT_CN1 0x00000002 1110 #define BCM_STAT_FLEX_INT_CN2 0x00000004 1111 #define BCM_STAT_FLEX_INT_CN3 0x00000008 1112 uint32 int_cn; 1113 1114 #define BCM_STAT_FLEX_COS0 0x00000001 1115 #define BCM_STAT_FLEX_COS1 0x00000002 1116 #define BCM_STAT_FLEX_COS2 0x00000004 1117 #define BCM_STAT_FLEX_COS3 0x00000008 1118 #define BCM_STAT_FLEX_COS4 0x00000010 1119 #define BCM_STAT_FLEX_COS5 0x00000020 1120 #define BCM_STAT_FLEX_COS6 0x00000040 1121 #define BCM_STAT_FLEX_COS7 0x00000080 1122 #define BCM_STAT_FLEX_COS8 0x00000100 1123 #define BCM_STAT_FLEX_COS9 0x00000200 1124 #define BCM_STAT_FLEX_COS10 0x00000400 1125 #define BCM_STAT_FLEX_COS11 0x00000800 1126 #define BCM_STAT_FLEX_COS12 0x00001000 1127 #define BCM_STAT_FLEX_COS13 0x00002000 1128 #define BCM_STAT_FLEX_COS14 0x00004000 1129 #define BCM_STAT_FLEX_COS15 0x00008000 1130 uint32 mmu_cos_flags; 1131 1132 #define BCM_STAT_FLEX_UC_QUEUEING_ENABLE 0x00000001 1133 #define BCM_STAT_FLEX_UC_QUEUEING_DISABLE 0x00000002 1134 uint32 uc_queueing_flags; 1135 1136 #define BCM_STAT_FLEX_CONGESTION_MARKED_ENABLE 0x00000001 1137 #define BCM_STAT_FLEX_CONGESTION_MARKED_DISABLE 0x00000002 1138 uint32 congestion_marked_flags; 1139 1140 #define BCM_STAT_FLEX_COLOR_GREEN 0x00000001 1141 #define BCM_STAT_FLEX_COLOR_YELLOW 0x00000002 1142 #define BCM_STAT_FLEX_COLOR_RED 0x00000004 1143 uint32 pre_ifp_color_flags; 1144 uint32 ifp_color_flags; 1145 uint32 pre_ifp_color_mpls_label3_flags; 1146 uint32 pre_ifp_color_mpls_label2_flags; 1147 uint32 pre_ifp_color_mpls_label1_flags; 1148 1149 #define BCM_STAT_FLEX_PRI0 0x00000001 1150 #define BCM_STAT_FLEX_PRI1 0x00000002 1151 #define BCM_STAT_FLEX_PRI2 0x00000004 1152 #define BCM_STAT_FLEX_PRI3 0x00000008 1153 #define BCM_STAT_FLEX_PRI4 0x00000010 1154 #define BCM_STAT_FLEX_PRI5 0x00000020 1155 #define BCM_STAT_FLEX_PRI6 0x00000040 1156 #define BCM_STAT_FLEX_PRI7 0x00000080 1157 #define BCM_STAT_FLEX_PRI8 0x00000100 1158 #define BCM_STAT_FLEX_PRI9 0x00000200 1159 #define BCM_STAT_FLEX_PRI10 0x00000400 1160 #define BCM_STAT_FLEX_PRI11 0x00000800 1161 #define BCM_STAT_FLEX_PRI12 0x00001000 1162 #define BCM_STAT_FLEX_PRI13 0x00002000 1163 #define BCM_STAT_FLEX_PRI14 0x00004000 1164 #define BCM_STAT_FLEX_PRI15 0x00008000 1165 uint32 int_pri_flags; 1166 uint32 int_pri_mpls_label3_flags; 1167 uint32 int_pri_mpls_label2_flags; 1168 uint32 int_pri_mpls_label1_flags; 1169 1170 #define BCM_STAT_FLEX_VLAN_FORMAT_UNTAGGED 0x00000001 1171 #define BCM_STAT_FLEX_VLAN_FORMAT_INNER 0x00000002 1172 #define BCM_STAT_FLEX_VLAN_FORMAT_OUTER 0x00000004 1173 #define BCM_STAT_FLEX_VLAN_FORMAT_BOTH 0x00000008 1174 uint32 vlan_format_flags; 1175 1176 /* #define BCM_STAT_FLEX_PRI0..7 */ 1177 uint32 outer_dot1p_flags; 1178 uint32 inner_dot1p_flags; 1179 1180 #define BCM_STAT_FLEX_PKT_TYPE_UNKNOWN_PKT 0x00000001 1181 #define BCM_STAT_FLEX_PKT_TYPE_CONTROL_PKT 0x00000002 1182 #define BCM_STAT_FLEX_PKT_TYPE_OAM_PKT 0x00000004 1183 #define BCM_STAT_FLEX_PKT_TYPE_BFD_PKT 0x00000008 1184 #define BCM_STAT_FLEX_PKT_TYPE_BPDU_PKT 0x00000010 1185 #define BCM_STAT_FLEX_PKT_TYPE_ICNM_PKT 0x00000020 1186 #define BCM_STAT_FLEX_PKT_TYPE_PKT_IS_1588 0x00000040 1187 #define BCM_STAT_FLEX_PKT_TYPE_KNOWN_L2UC_PKT 0x00000080 1188 #define BCM_STAT_FLEX_PKT_TYPE_UNKNOWN_L2UC_PKT 0x00000100 1189 #define BCM_STAT_FLEX_PKT_TYPE_L2BC_PKT 0x00000200 1190 #define BCM_STAT_FLEX_PKT_TYPE_KNOWN_L2MC_PKT 0x00000400 1191 #define BCM_STAT_FLEX_PKT_TYPE_UNKNOWN_L2MC_PKT 0x00000800 1192 #define BCM_STAT_FLEX_PKT_TYPE_KNOWN_L3UC_PKT 0x00001000 1193 #define BCM_STAT_FLEX_PKT_TYPE_UNKNOWN_L3UC_PKT 0x00002000 1194 #define BCM_STAT_FLEX_PKT_TYPE_KNOWN_IPMC_PKT 0x00004000 1195 #define BCM_STAT_FLEX_PKT_TYPE_UNKNOWN_IPMC_PKT 0x00008000 1196 #define BCM_STAT_FLEX_PKT_TYPE_KNOWN_MPLS_L2_PKT 0x00010000 1197 #define BCM_STAT_FLEX_PKT_TYPE_KNOWN_MPLS_L3_PKT 0x00020000 1198 #define BCM_STAT_FLEX_PKT_TYPE_KNOWN_MPLS_PKT 0x00040000 1199 #define BCM_STAT_FLEX_PKT_TYPE_UNKNOWN_MPLS_PKT 0x00080000 1200 #define BCM_STAT_FLEX_PKT_TYPE_KNOWN_MPLS_MULTICAST_PKT 0x00100000 1201 #define BCM_STAT_FLEX_PKT_TYPE_KNOWN_MIM_PKT 0x00200000 1202 #define BCM_STAT_FLEX_PKT_TYPE_UNKNOWN_MIM_PKT 0x00400000 1203 #define BCM_STAT_FLEX_PKT_TYPE_KNOWN_TRILL_PKT 0x00800000 1204 #define BCM_STAT_FLEX_PKT_TYPE_UNKNOWN_TRILL_PKT 0x01000000 1205 #define BCM_STAT_FLEX_PKT_TYPE_KNOWN_NIV_PKT 0x02000000 1206 #define BCM_STAT_FLEX_PKT_TYPE_UNKNOWN_NIV_PKT 0x04000000 1207 #define BCM_STAT_FLEX_PKT_TYPE_KNOWN_L2GRE_PKT 0x08000000 1208 #define BCM_STAT_FLEX_PKT_TYPE_KNOWN_VXLAN_PKT 0x10000000 1209 #define BCM_STAT_FLEX_PKT_TYPE_KNOWN_FCOE_PKT 0x20000000 1210 #define BCM_STAT_FLEX_PKT_TYPE_UNKNOWN_FCOE_PKT 0x40000000 1211 1212 uint32 pkt_resolution_flags; 1213 1214 /* These new defines go into pkt_resolution_high_flags */ 1215 #define BCM_STAT_FLEX_PKT_TYPE_2_L2_UC_PKT 0x00000001 1216 #define BCM_STAT_FLEX_PKT_TYPE_2_L2_NON_UC_PKT 0x00000002 1217 1218 uint32 pkt_resolution_high_flags; 1219 1220 #define BCM_STAT_FLEX_DROP_ENABLE 0x00000001 1221 #define BCM_STAT_FLEX_DROP_DISABLE 0x00000002 1222 uint32 drop_flags; 1223 #define BCM_STAT_FLEX_IP_PKT_ENABLE 0x00000001 1224 #define BCM_STAT_FLEX_IP_PKT_DISABLE 0x00000002 1225 uint32 ip_pkt_flags; 1226 /* Bit Value array for port,tos,svp & dvp considering max value as 1024 1227 =uint32=32 bits * size=BCM_STAT_FLEX_BIT_ARRAY_SIZE)*/ 1228 uint32 value_array[bcmStatFlexAttrMax][BCM_STAT_FLEX_BIT_ARRAY_SIZE]; 1229 1230 }bcm_stat_flex_combine_attr_counter_t ; 1231 1232 typedef struct bcm_stat_flex_attribute_s { 1233 uint32 fc_type; 1234 uint32 tcp_flags; 1235 uint32 int_cn; 1236 uint32 mmu_cos; 1237 uint32 uc_queueing; 1238 uint32 congestion_marked; 1239 uint32 cng_3; 1240 uint32 phb_3; 1241 uint32 cng_2; 1242 uint32 phb_2; 1243 uint32 cng_1; 1244 uint32 phb_1; 1245 uint32 pre_ifp_color; 1246 uint32 ifp_color; 1247 uint32 int_pri; 1248 uint32 vlan_format; 1249 uint32 outer_dot1p; 1250 uint32 inner_dot1p; 1251 uint32 port; 1252 uint32 tos_dscp; 1253 uint32 tos_ecn; 1254 uint32 pkt_resolution; 1255 uint32 svp; 1256 uint32 dvp; 1257 uint32 drop; 1258 uint32 ip_pkt; 1259 uint32 udf; 1260 uint32 udf_bitmap; 1261 uint32 subport; 1262 uint32 total_counters; 1263 uint32 total_selectors; 1264 uint32 combine_mmu_cos_flags; 1265 uint32 combine_uc_queueing_flags; 1266 uint32 combine_congestion_marked_flags; 1267 uint32 combine_pre_ifp_color_flags; 1268 uint32 combine_ifp_color_flags; 1269 uint32 combine_int_pri_flags; 1270 uint32 combine_vlan_format_flags; 1271 uint32 combine_outer_dot1p_flags; 1272 uint32 combine_inner_dot1p_flags; 1273 uint32 combine_pkt_resolution_flags; 1274 uint32 combine_drop_flags; 1275 uint32 combine_ip_pkt_flags; 1276 uint32 combine_value_array[bcmStatFlexAttrMax][BCM_STAT_FLEX_BIT_ARRAY_SIZE]; 1277 bcm_stat_flex_combine_attr_counter_t *combine_attr_counter; 1278 /* combine_pkt_resolution_flags is expanded with 'high below */ 1279 uint32 combine_pkt_resolution_high_flags; 1280 }bcm_stat_flex_attribute_t; 1281 1282 typedef enum pkt_cmprsd_attr_map_e { 1283 ing_pkt_attr_pri_cng_map = 0, /* ING_FLEX_CTR_PRI_CNG_MAPm*/ 1284 ing_pkt_attr_pkt_pri_map = 1, /* ING_FLEX_CTR_PKT_PRI_MAPm */ 1285 ing_pkt_attr_port_map = 2, /* ING_FLEX_CTR_PORT_MAPm */ 1286 ing_pkt_attr_tos_map = 3, /* ING_FLEX_CTR_TOS_MAPm */ 1287 ing_pkt_attr_pkt_res_map = 4, /* ING_FLEX_CTR_PKT_RES_MAPm */ 1288 ing_pkt_attr_ip_pkt_map = 5, /* no map for IP_PKT in h/w */ 1289 egr_pkt_attr_pri_cng_map = 6,/* EGR_FLEX_CTR_PRI_CNG_MAP */ 1290 egr_pkt_attr_pkt_pri_map = 7,/* EGR_FLEX_CTR_PKT_PRI_MAP */ 1291 egr_pkt_attr_port_map = 8, /* EGR_FLEX_CTR_PORT_MAPm */ 1292 egr_pkt_attr_tos_map = 9, /* EGR_FLEX_CTR_TOS_MAPm */ 1293 egr_pkt_attr_pkt_res_map = 10,/* EGR_FLEX_CTR_PKT_RES_MAPm */ 1294 pkt_attr_map_count = 11 1295 } pkt_cmprsd_attrs_map_t; 1296 1297 /* Structure for global compression table attribute selectors map */ 1298 typedef struct _bcm_stat_flex_compressed_mode_attr_sel_map_s { 1299 uint8 ref_counts[12]; 1300 uint32 direction; 1301 uint32 combine_mmu_cos_flags; 1302 uint32 combine_uc_queueing_flags; 1303 uint32 combine_congestion_marked_flags; 1304 uint32 cng; 1305 uint32 ifp_cng; 1306 uint32 pre_ifp_color; 1307 uint32 ifp_color; 1308 uint32 combine_pre_ifp_color_flags; 1309 uint32 combine_ifp_color_flags; 1310 uint32 int_pri; 1311 uint32 combine_int_pri_flags; 1312 uint32 vlan_format; 1313 uint32 combine_vlan_format_flags; 1314 uint32 outer_dot1p; 1315 uint32 combine_outer_dot1p_flags; 1316 uint32 inner_dot1p; 1317 uint32 combine_inner_dot1p_flags; 1318 uint32 port; 1319 uint32 tos_dscp; 1320 uint32 tos_ecn; 1321 uint32 pkt_resolution; 1322 uint32 combine_pkt_resolution_flags; 1323 uint32 svp_type; 1324 uint32 dvp_type; 1325 uint32 drop; 1326 uint32 combine_drop_flags; 1327 uint32 ip_pkt; 1328 uint32 combine_ip_pkt_flags; 1329 uint32 combine_value_array[bcmStatFlexAttrMax][BCM_STAT_FLEX_BIT_ARRAY_SIZE]; 1330 uint32 combine_pkt_resolution_high_flags; 1331 } _bcm_stat_flex_compressed_mode_attr_sel_map_t; 1332 1333 #ifdef BCM_WARM_BOOT_SUPPORT 1334 /* Stat Flex Group Attribute Selector info that needs level 2 WB*/ 1335 typedef struct bcm_stat_group_mode_attr_selector_wb_s { 1336 uint32 counter_offset; /* Counter Offset */ 1337 bcm_stat_group_mode_attr_t attr; /* Attribute Selector */ 1338 uint32 attr_value; /* Attribute Values */ 1339 }bcm_stat_group_mode_attr_selector_wb_t; 1340 typedef struct bcm_stat_flex_group_mode_related_info_s { 1341 uint32 flags; 1342 uint32 total_counters; 1343 uint32 num_selectors; 1344 bcm_stat_group_mode_attr_selector_wb_t attr_selectors 1345 [BCM_STAT_FLEX_MAX_SELECTORS]; 1346 }bcm_stat_flex_group_mode_related_info_t; 1347 1348 typedef struct bcm_stat_flex_group_mode_related_info_old_s { 1349 uint32 flags; 1350 uint32 total_counters; 1351 uint32 num_selectors; 1352 bcm_stat_group_mode_attr_selector_wb_t attr_selectors 1353 [256]; 1354 }bcm_stat_flex_group_mode_related_info_old_t; 1355 typedef struct bcm_stat_flex_custom_mode_related_info_s { 1356 uint16 custom_mode; 1357 uint8 offset_mode; 1358 uint8 AllocPool; 1359 uint32 fg_id; /*field group id - 0xffffffff means invalid */ 1360 }bcm_stat_flex_custom_mode_related_info_t; 1361 1362 typedef struct bcm_stat_flex_counter_id_related_info_s { 1363 uint16 mode; 1364 uint8 pool; 1365 uint8 used; 1366 uint32 base_idx; 1367 uint16 object; 1368 uint16 group; 1369 }bcm_stat_flex_counter_id_related_info_t; 1370 1371 #endif 1372 #define BCM_MAX_STAT_COUNTER_IDS (152*1024) 1373 1374 typedef struct bcm_stat_flex_flowtracker_pool_info_s { 1375 uint8 pool_id; 1376 uint32 start_idx; 1377 uint32 end_idx; 1378 }bcm_stat_flex_flowtracker_pool_info_t; 1379 1380 typedef struct bcm_stat_flex_flowtracker_counter_info_s { 1381 uint8 offset_mode; 1382 uint8 pool_num; 1383 bcm_stat_flex_flowtracker_pool_info_t pool_info[BCM_STAT_TH_FLEX_COUNTER_MAX_POOL]; 1384 }bcm_stat_flex_flowtracker_counter_info_t; 1385 1386 1387 #ifdef BCM_WARM_BOOT_SUPPORT 1388 #include <bcm_int/esw/switch.h> 1389 #define BCM_STAT_WB_VERSION_1_3 SOC_SCACHE_VERSION(1,3) 1390 #define BCM_STAT_WB_VERSION_1_4 SOC_SCACHE_VERSION(1,4) 1391 #define BCM_STAT_WB_VERSION_1_5 SOC_SCACHE_VERSION(1,5) 1392 #define BCM_STAT_WB_VERSION_1_6 SOC_SCACHE_VERSION(1,6) 1393 #define BCM_STAT_WB_VERSION_1_7 SOC_SCACHE_VERSION(1,7) 1394 #define BCM_STAT_WB_VERSION_1_8 SOC_SCACHE_VERSION(1,8) 1395 #define BCM_STAT_WB_VERSION_1_9 SOC_SCACHE_VERSION(1,9) 1396 #define BCM_STAT_WB_VERSION_1_10 SOC_SCACHE_VERSION(1,10) 1397 #define BCM_STAT_WB_VERSION_1_11 SOC_SCACHE_VERSION(1,11) 1398 #define BCM_STAT_WB_VERSION_1_12 SOC_SCACHE_VERSION(1,12) 1399 #define BCM_STAT_WB_DEFAULT_VERSION BCM_STAT_WB_VERSION_1_12 1400 #endif 1401 1402 /* END: NEW FLEX FEATURE RELATED STUFF */ 1403 1404 extern bcm_error_t _bcm_esw_stat_group_create ( 1405 int unit, 1406 bcm_stat_object_t object, 1407 bcm_stat_group_mode_t group_mode, 1408 uint32 *stat_counter_id, 1409 uint32 *num_entries); 1410 extern bcm_error_t _bcm_esw_stat_group_destroy( 1411 int unit, 1412 uint32 stat_counter_id); 1413 extern bcm_error_t _bcm_esw_stat_flex_get_ingress_mode_info( 1414 int unit, 1415 bcm_stat_flex_mode_t mode, 1416 bcm_stat_flex_ingress_mode_t *ingress_mode); 1417 extern bcm_error_t _bcm_esw_stat_flex_get_custom_ingress_mode_info( 1418 int unit, 1419 bcm_stat_flex_mode_t mode, 1420 bcm_stat_flex_custom_ingress_mode_t *flex_ingress_mode); 1421 1422 extern bcm_error_t _bcm_esw_stat_flex_update_custom_ingress_mode_info( 1423 int unit, 1424 bcm_stat_flex_mode_t mode, 1425 bcm_stat_flex_custom_ingress_mode_t *flex_ingress_mode); 1426 1427 extern bcm_error_t _bcm_esw_stat_flex_get_egress_mode_info( 1428 int unit, 1429 bcm_stat_flex_mode_t mode, 1430 bcm_stat_flex_egress_mode_t *egress_mode); 1431 extern bcm_error_t _bcm_esw_stat_flex_get_available_mode( 1432 int unit, 1433 bcm_stat_flex_direction_t direction, 1434 bcm_stat_flex_mode_t *mode); 1435 extern bcm_error_t _bcm_esw_stat_flex_update_selector_keys_enable_fields( 1436 int unit, 1437 soc_reg_t pkt_attr_selector_key_reg, 1438 uint64 *pkt_attr_selector_key_reg_value, 1439 uint32 ctr_pkt_attr_bit_position, 1440 uint32 ctr_pkt_attr_total_bits, 1441 uint8 pkt_attr_field_mask_v, 1442 uint8 *ctr_current_bit_selector_position); 1443 extern bcm_error_t _bcm_esw_stat_flex_update_offset_table( 1444 int unit, 1445 bcm_stat_flex_direction_t direction, 1446 soc_mem_t flex_ctr_offset_table_mem, 1447 bcm_stat_flex_mode_t mode, 1448 uint32 total_counters, 1449 bcm_stat_flex_offset_table_entry_t offset_table_map[256]); 1450 extern bcm_error_t _bcm_esw_stat_flex_egress_reserve_mode( 1451 int unit, 1452 bcm_stat_flex_mode_t mode, 1453 uint32 total_counters, 1454 bcm_stat_flex_egr_attr_t *egr_attr); 1455 extern bcm_error_t _bcm_esw_stat_flex_ingress_reserve_mode( 1456 int unit, 1457 bcm_stat_flex_mode_t mode, 1458 uint32 total_counters, 1459 bcm_stat_flex_ing_attr_t *ing_attr); 1460 extern bcm_error_t _bcm_esw_stat_flex_unreserve_mode( 1461 int unit, 1462 bcm_stat_flex_direction_t direction, 1463 bcm_stat_flex_mode_t mode); 1464 extern bcm_error_t _bcm_esw_stat_flex_unreserve_flags( 1465 int unit, 1466 bcm_stat_flex_mode_t mode, 1467 uint32 flags); 1468 extern 1469 bcm_error_t _bcm_esw_stat_flex_update_udf_selector_keys( 1470 int unit, 1471 bcm_stat_flex_direction_t direction, 1472 soc_reg_t pkt_attr_selector_key_reg, 1473 bcm_stat_flex_udf_pkt_attr_selectors_t *udf_pkt_attr_selectors, 1474 uint32 *total_udf_bits); 1475 extern bcm_error_t _bcm_esw_stat_flex_init(int unit); 1476 extern bcm_error_t _bcm_esw_stat_flex_cleanup(int unit); 1477 extern bcm_error_t _bcm_esw_stat_flex_sync(int unit); 1478 extern void _bcm_esw_stat_flex_callback(int unit); 1479 #if defined(BCM_TOMAHAWK_SUPPORT) 1480 extern bcm_error_t 1481 bcm_flex_ctr_field_stat_types_get(int unit, uint32 flex_sid, 1482 bcm_stat_group_mode_attr_selector_t *attr_selectors, 1483 uint32 *num_selectors); 1484 extern bcm_stat_counter_map_t *stat_counter_map[SOC_MAX_NUM_DEVICES]; /* Stat counter IDs start from 1 */ 1485 1486 extern void 1487 _bcm_fill_stat_counter_map(int unit, int id, uint32 mode, uint32 pool, uint32 base_idx, 1488 bcm_stat_object_t object, bcm_stat_group_mode_t group); 1489 extern void 1490 _bcm_get_stat_counter_map(int unit, int id, bcm_stat_counter_map_t *stat_ctr_map); 1491 1492 #endif 1493 #if defined(BCM_TRIUMPH2_SUPPORT) && defined(INCLUDE_L3) 1494 /* Need to remove it later */ 1495 extern int _bcm_tr2_subport_gport_used(int unit, bcm_gport_t port); 1496 #endif 1497 1498 extern bcm_error_t _bcm_esw_stat_flex_create_egress_mode ( 1499 int unit, 1500 bcm_stat_flex_egr_attr_t *egr_attr, 1501 bcm_stat_flex_mode_t *mode, 1502 bcm_stat_flex_attribute_t *flex_attribute); 1503 extern bcm_error_t _bcm_esw_stat_flex_create_ingress_mode ( 1504 int unit, 1505 bcm_stat_flex_ing_attr_t *ing_attr, 1506 bcm_stat_flex_mode_t *mode, 1507 bcm_stat_flex_attribute_t *flex_attribute); 1508 extern bcm_error_t _bcm_esw_stat_flex_delete_egress_mode( 1509 int unit, 1510 bcm_stat_flex_mode_t mode); 1511 extern bcm_error_t _bcm_esw_stat_flex_delete_ingress_flags( 1512 int unit, 1513 bcm_stat_flex_mode_t mode, 1514 uint32 flags); 1515 extern bcm_error_t _bcm_esw_stat_flex_delete_egress_flags( 1516 int unit, 1517 bcm_stat_flex_mode_t mode, 1518 uint32 flags); 1519 extern bcm_error_t _bcm_esw_stat_flex_delete_ingress_mode( 1520 int unit, 1521 bcm_stat_flex_mode_t mode); 1522 1523 1524 extern bcm_error_t _bcm_esw_stat_flex_destroy_egress_table_counters( 1525 int unit, 1526 soc_mem_t egress_table, 1527 int lookup, 1528 bcm_stat_object_t object, 1529 bcm_stat_flex_mode_t offset_mode, 1530 uint32 base_idx, 1531 uint32 pool_number); 1532 extern bcm_error_t _bcm_esw_stat_flex_detach_egress_table_counters( 1533 int unit, 1534 bcm_stat_object_t object_id, 1535 soc_mem_t egress_table, 1536 uint32 index); 1537 extern bcm_error_t _bcm_esw_stat_flex_destroy_ingress_table_counters( 1538 int unit, 1539 soc_mem_t ingress_table, 1540 int lookup, 1541 bcm_stat_object_t object, 1542 bcm_stat_flex_mode_t offset_mode, 1543 uint32 base_idx, 1544 uint32 pool_number); 1545 extern bcm_error_t _bcm_esw_stat_flex_detach_ingress_table_counters1( 1546 int unit, 1547 soc_mem_t ingress_table, 1548 uint32 index, 1549 bcm_stat_object_t object); 1550 extern bcm_error_t _bcm_esw_stat_flex_detach_ingress_table_counters( 1551 int unit, 1552 soc_mem_t ingress_table, 1553 uint32 index); 1554 extern bcm_error_t _bcm_esw_stat_flex_detach_ingress_table_counters_sw( 1555 int unit, 1556 soc_mem_t ingress_table, 1557 uint32 index, 1558 bcm_stat_flex_mode_t offset_mode, 1559 uint32 base_idx, 1560 uint32 pool_number); 1561 extern bcm_error_t _bcm_esw_stat_flex_attach_egress_table_counters1( 1562 int unit, 1563 soc_mem_t egress_table, 1564 uint32 index, 1565 bcm_stat_flex_mode_t mode, 1566 uint32 base_idx, 1567 uint32 pool_number, 1568 void *egress_entry_data1); 1569 extern bcm_error_t _bcm_esw_stat_flex_attach_egress_table_counters( 1570 int unit, 1571 soc_mem_t egress_table, 1572 uint32 index, 1573 bcm_stat_object_t object_id, 1574 bcm_stat_flex_mode_t mode, 1575 uint32 base_idx, 1576 uint32 pool_number); 1577 extern bcm_error_t _bcm_esw_stat_flex_create_egress_table_counters( 1578 int unit, 1579 soc_mem_t egress_table, 1580 int lookup, 1581 bcm_stat_object_t object, 1582 bcm_stat_flex_mode_t mode, 1583 uint32 *base_idx, 1584 uint32 *pool_number); 1585 extern bcm_error_t _bcm_esw_stat_flex_attach_ingress_table_counters_update( 1586 int unit, 1587 uint32 pool_number, 1588 uint32 pipe_num, 1589 uint32 base_idx, 1590 bcm_stat_flex_mode_t mode); 1591 extern bcm_error_t _bcm_esw_stat_flex_detach_ingress_table_counters_update( 1592 int unit, 1593 uint32 pool_number, 1594 uint32 base_idx, 1595 bcm_stat_flex_mode_t mode); 1596 extern bcm_error_t _bcm_esw_stat_flex_attach_ingress_table_counters2( 1597 int unit, 1598 soc_mem_t ingress_table, 1599 uint32 index, 1600 bcm_stat_flex_mode_t mode, 1601 uint32 base_idx, 1602 uint32 pool_number, 1603 bcm_stat_object_t object, 1604 void *ingress_entry_data1); 1605 extern bcm_error_t _bcm_esw_stat_flex_attach_ingress_table_counters1( 1606 int unit, 1607 soc_mem_t ingress_table, 1608 uint32 index, 1609 bcm_stat_flex_mode_t mode, 1610 uint32 base_idx, 1611 uint32 pool_number, 1612 void *ingress_entry_data1); 1613 extern bcm_error_t _bcm_esw_stat_flex_attach_ingress_table_counters( 1614 int unit, 1615 soc_mem_t ingress_table, 1616 uint32 index, 1617 bcm_stat_flex_mode_t mode, 1618 uint32 base_idx, 1619 uint32 pool_number); 1620 extern bcm_error_t _bcm_esw_stat_flex_create_ingress_table_counters( 1621 int unit, 1622 soc_mem_t ingress_table, 1623 int lookup, 1624 bcm_stat_object_t object, 1625 bcm_stat_flex_mode_t mode, 1626 uint32 *base_idx, 1627 uint32 *pool_number); 1628 extern bcm_error_t _bcm_esw_stat_counter_get( 1629 int unit, 1630 int sync_mode, 1631 uint32 index, 1632 soc_mem_t table, 1633 bcm_stat_object_t object, 1634 uint32 byte_flag, 1635 uint32 counter_index, 1636 bcm_stat_value_t *value); 1637 extern bcm_error_t _bcm_esw_stat_counter_set( 1638 int unit, 1639 uint32 index, 1640 soc_mem_t table, 1641 bcm_stat_object_t object, 1642 uint32 byte_flag, 1643 uint32 counter_index, 1644 bcm_stat_value_t *value); 1645 extern bcm_error_t _bcm_esw_stat_counter_raw_get( 1646 int unit, 1647 int sync_mode, 1648 uint32 stat_counter_id, 1649 uint32 byte_flag, 1650 uint32 counter_index, 1651 bcm_stat_value_t *value); 1652 extern bcm_error_t _bcm_esw_stat_counter_raw_set( 1653 int unit, 1654 uint32 stat_counter_id, 1655 uint32 byte_flag, 1656 uint32 counter_index, 1657 bcm_stat_value_t *value); 1658 extern bcm_error_t _bcm_esw_stat_flex_get_table_info( 1659 int unit, 1660 bcm_stat_object_t object, 1661 uint32 expected_num_tables, 1662 uint32 *actual_num_tables, 1663 soc_mem_t *table, 1664 bcm_stat_flex_direction_t *direction); 1665 extern bcm_error_t _bcm_esw_stat_flex_reset_group_mode( 1666 int unit, 1667 bcm_stat_flex_direction_t direction, 1668 uint32 offset_mode, 1669 bcm_stat_group_mode_t group_mode); 1670 extern bcm_error_t _bcm_esw_stat_flex_set_group_mode( 1671 int unit, 1672 bcm_stat_flex_direction_t direction, 1673 uint32 offset_mode, 1674 bcm_stat_group_mode_t group_mode); 1675 extern void _bcm_esw_stat_flex_show_mode_info(int unit); 1676 extern bcm_error_t _bcm_esw_stat_flex_get_ingress_object( 1677 int unit, 1678 soc_mem_t ingress_table, 1679 uint32 table_index, 1680 void *ingress_entry, 1681 bcm_stat_object_t *object); 1682 extern bcm_error_t _bcm_esw_stat_flex_get_egress_object( 1683 int unit, 1684 soc_mem_t egress_table, 1685 uint32 table_index, 1686 void *ingress_entry, 1687 bcm_stat_object_t *object); 1688 extern bcm_error_t _bcm_esw_stat_flex_get_counter_id( 1689 int unit, 1690 uint32 num_of_tables, 1691 bcm_stat_flex_table_info_t *table_info, 1692 uint32 *num_stat_counter_ids, 1693 uint32 *stat_counter_id); 1694 #if defined(BCM_TRIDENT2PLUS_SUPPORT) && defined (INCLUDE_L3) 1695 extern bcm_error_t _bcm_esw_stat_flex_get_multi_counter_id( 1696 int unit, 1697 bcm_stat_flex_table_info_t *table_info, 1698 int *num_stat_counter_ids, 1699 uint32 *stat_counter_id); 1700 #endif 1701 extern void _bcm_esw_stat_group_dump_info( 1702 int unit, 1703 int all_flag, 1704 bcm_stat_object_t object, 1705 bcm_stat_group_mode_t group); 1706 extern void _bcm_esw_stat_get_counter_id( 1707 int unit, 1708 bcm_stat_group_mode_t group, 1709 bcm_stat_object_t object, 1710 uint32 mode, 1711 uint32 pool_number, 1712 uint32 base_idx, 1713 uint32 *stat_counter_id); 1714 extern void _bcm_esw_stat_counter_id_retrieve( 1715 int unit, 1716 bcm_stat_group_mode_t group, 1717 bcm_stat_object_t object, 1718 uint32 mode, 1719 uint32 pool_number, 1720 uint32 base_idx, 1721 uint32 *stat_counter_id); 1722 extern void _bcm_esw_stat_get_counter_id_info( 1723 int unit, 1724 uint32 stat_counter_id, 1725 bcm_stat_group_mode_t *group, 1726 bcm_stat_object_t *object, 1727 uint32 *mode, 1728 uint32 *pool_number, 1729 uint32 *base_idx); 1730 1731 extern bcm_error_t _bcm_esw_stat_id_validate(int unit, uint32 stat_counter_id); 1732 1733 extern bcm_error_t _bcm_esw_stat_total_counters_get(int unit, uint32 stat_counter_id, uint32 *total_counters); 1734 1735 extern bcm_error_t _bcm_flex_ctr_field_stat_types_get(int unit, uint32 flex_sid, 1736 bcm_stat_group_mode_attr_selector_t *attr_selectors, 1737 uint32 *num_selectors); 1738 1739 extern void _bcm_esw_stat_flex_init_pkt_attr_bits(int unit); 1740 extern void _bcm_esw_stat_flex_init_pkt_res_fields(int unit); 1741 extern uint32 _bcm_esw_stat_flex_get_pkt_res_value( 1742 int unit, 1743 uint32 pkt_res_field); 1744 extern bcm_error_t _bcm_esw_get_flex_counter_fields_values(int unit, 1745 uint32 index, 1746 soc_mem_t table, 1747 void *data, 1748 bcm_stat_object_t object, 1749 uint32 *offset_mode, 1750 uint32 *pool_number, 1751 uint32 *base_idx); 1752 extern bcm_error_t _bcm_esw_set_flex_counter_fields_values(int unit, 1753 uint32 index, 1754 soc_mem_t table, 1755 void *data, 1756 bcm_stat_object_t object, 1757 uint32 offset_mode, 1758 uint32 pool_number, 1759 uint32 base_idx 1760 ); 1761 extern bcm_error_t _bcm_esw_stat_validate_object( 1762 int unit, 1763 bcm_stat_object_t object, 1764 bcm_stat_flex_direction_t *direction); 1765 extern bcm_error_t _bcm_esw_stat_validate_group( 1766 int unit, 1767 bcm_stat_group_mode_t group); 1768 extern bcm_error_t _bcm_esw_stat_flex_pool_operation( 1769 int unit, 1770 bcm_stat_flex_pool_attribute_t *flex_pool_attribute); 1771 1772 extern bcm_error_t _bcm_esw_stat_id_get_all( int unit, bcm_stat_object_t object, 1773 int stat_max, uint32 *stat_array, 1774 int *stat_count); 1775 1776 extern bcm_error_t _bcm_esw_stat_object_pool_num_get( int unit, 1777 bcm_stat_object_t object, uint32 *pool_num); 1778 1779 /* Retrieves the flex counter details for a given direction and pipe */ 1780 extern int _bcm_esw_stat_flex_pipe_pool_info_multi_get( 1781 int unit, 1782 bcm_stat_flex_direction_t direction, 1783 uint32 pipe_num, 1784 uint32 num_pools, 1785 bcm_stat_flex_pool_stat_info_t *flex_pool_stat_info, 1786 uint32 *actual_num_pools); 1787 1788 extern int _bcm_esw_stat_flex_pool_info_multi_get( 1789 int unit, 1790 bcm_stat_flex_direction_t direction, 1791 uint32 num_pools, 1792 bcm_stat_flex_pool_stat_info_t *flex_pool_stat, 1793 uint32 *actual_num_pools); 1794 /* Create Customized Stat Group mode for given Counter Attributes */ 1795 extern int _bcm_esw_stat_group_mode_id_create( 1796 int unit, 1797 uint32 flags, 1798 uint32 total_counters, 1799 uint32 num_selectors, 1800 bcm_stat_group_mode_attr_selector_t *attr_selectors, 1801 uint32 *mode_id); 1802 1803 /* Retrieves Customized Stat Group mode Attributes for given mode_id */ 1804 extern int _bcm_esw_stat_group_mode_id_get( 1805 int unit, 1806 uint32 mode_id, 1807 uint32 *flags, 1808 uint32 *total_counters, 1809 uint32 num_selectors, 1810 bcm_stat_group_mode_attr_selector_t *attr_selectors, 1811 uint32 *actual_num_selectors); 1812 1813 /* Destroys Customized Group mode */ 1814 extern int _bcm_esw_stat_group_mode_id_destroy( 1815 int unit, 1816 uint32 mode_id); 1817 1818 /* Associate an accounting object to customized group mode */ 1819 extern int _bcm_esw_stat_custom_group_create( 1820 int unit, 1821 uint32 mode_id, 1822 bcm_stat_object_t object, 1823 uint32 *stat_counter_id, 1824 uint32 *num_entries); 1825 1826 extern int _bcm_esw_stat_group_mode_id_config_create( 1827 int unit, 1828 uint32 options, 1829 bcm_stat_group_mode_id_config_t *stat_config, 1830 uint32 num_selectors, 1831 bcm_stat_group_mode_attr_selector_t *attr_sel, 1832 uint32 *mode_id); 1833 1834 bcm_error_t 1835 _bcm_esw_stat_group_mode_id_config_get( 1836 int unit, 1837 uint32 mode_id, 1838 bcm_stat_group_mode_id_config_t *stat_config, 1839 uint32 num_selectors, 1840 bcm_stat_group_mode_attr_selector_t *attr_sel, 1841 uint32 *actual_num_selectors); 1842 1843 extern bcm_stat_flex_ing_pkt_attr_bits_t ing_pkt_attr_uncmprsd_bits_g[BCM_MAX_NUM_UNITS]; 1844 extern bcm_stat_flex_ing_pkt_attr_bits_t ing_pkt_attr_cmprsd_bits_g[BCM_MAX_NUM_UNITS]; 1845 extern bcm_stat_flex_egr_pkt_attr_bits_t egr_pkt_attr_uncmprsd_bits_g[BCM_MAX_NUM_UNITS]; 1846 extern bcm_stat_flex_egr_pkt_attr_bits_t egr_pkt_attr_cmprsd_bits_g[BCM_MAX_NUM_UNITS]; 1847 extern bcm_error_t _bcm_esw_stat_flex_update_ingress_flex_info( 1848 int unit, 1849 bcm_stat_flex_mode_t mode, 1850 uint32 flags, 1851 uint32 num_selectors, 1852 bcm_stat_group_mode_attr_selector_t *attr_selectors); 1853 extern bcm_error_t _bcm_esw_stat_flex_update_egress_flex_info( 1854 int unit, 1855 bcm_stat_flex_mode_t mode, 1856 uint32 flags, 1857 uint32 num_selectors, 1858 bcm_stat_group_mode_attr_selector_t *attr_selectors); 1859 1860 extern void _bcm_esw_stat_flex_check_egress_mpls_tunnel_table(int unit); 1861 1862 extern 1863 int _bcm_esw_stat_flex_compress_mode_id_compare( 1864 int unit, 1865 bcm_stat_flex_direction_t direction, 1866 bcm_stat_flex_mode_t *mode, 1867 bcm_stat_flex_attribute_t *flex_attribute); 1868 1869 extern 1870 int _bcm_stat_flex_compressed_attr_tbl_write(int unit, 1871 bcm_stat_flex_direction_t direction, 1872 bcm_stat_flex_ing_cmprsd_attr_selectors_t *cmprsd_attr_selectors, 1873 bcm_stat_flex_egr_cmprsd_attr_selectors_t *egr_cmprsd_attr_selectors); 1874 extern 1875 int _bcm_stat_flex_compressed_attr_tbl_clear(int unit, 1876 bcm_stat_flex_direction_t direction, 1877 bcm_stat_flex_ing_cmprsd_attr_selectors_t *cmprsd_attr_selectors, 1878 bcm_stat_flex_egr_cmprsd_attr_selectors_t *egr_cmprsd_attr_selectors); 1879 1880 extern 1881 int _bcm_esw_stat_flex_compressed_shared_attr_map_init(int unit,int alloc); 1882 1883 extern 1884 int _bcm_esw_stat_flex_compressed_attr_flags_recover(int unit, 1885 uint8 **scache_position); 1886 1887 extern 1888 int _bcm_esw_stat_flex_compressed_attr_flags_sync(int unit, 1889 uint8 **scache_position); 1890 1891 /* FLEX COUNTER FLEXIBLE POOL ALLOCATION AND 1892 * COMPACTION SUPPORT 1893 */ 1894 typedef struct compaction_status_s { 1895 uint32 pool_number; 1896 uint32 base_idx; 1897 int in_progress; 1898 }compaction_status_t; 1899 1900 extern 1901 int _bcm_esw_stat_custom_group_id_create(int unit, 1902 uint32 mode_id, 1903 bcm_stat_object_t object, 1904 uint32 pool_id, 1905 uint32 base_idx, 1906 bcm_stat_custom_counter_info_t *counter_info); 1907 1908 extern 1909 int _bcm_stat_flex_reserve_base_index(int unit, 1910 bcm_stat_flex_direction_t direction, 1911 uint32 pool_number_l, uint32 total_counters, 1912 uint32 base_idx, uint32 used_by_table, 1913 uint32 pipe_num, bcm_stat_object_t object); 1914 1915 extern 1916 int _bcm_stat_flex_counter_id_move (int unit, 1917 bcm_stat_custom_base_index_action_t idx_action, 1918 bcm_stat_custom_counter_info_t counter_info_old, 1919 bcm_stat_custom_counter_info_t *counter_info_new); 1920 1921 extern 1922 int _bcm_stat_flex_counter_base_idx_move(int unit, 1923 bcm_stat_custom_counter_info_t counter_info_old, 1924 bcm_stat_custom_counter_info_t *counter_info_new); 1925 extern 1926 int _bcm_stat_flex_dump_pool_info(int unit); 1927 1928 extern 1929 int _bcm_esw_stat_validate_counter_info(int unit, 1930 bcm_stat_custom_counter_info_t counter_info_old, 1931 bcm_stat_custom_counter_info_t *counter_info_new); 1932 #if defined(BCM_TOMAHAWK_SUPPORT) 1933 /* Accessor functions to set/get ifp color map database */ 1934 extern bcm_error_t _bcm_esw_ifp_color_map_set( 1935 int unit, 1936 uint32 stat_counter_id, 1937 _bcm_ifp_color_map_t *color_map); 1938 extern bcm_error_t _bcm_esw_ifp_color_map_get( 1939 int unit, 1940 uint32 stat_counter_id, 1941 _bcm_ifp_color_map_t *color_map); 1942 bcm_error_t _bcm_esw_get_fp_pipe_from_mode(int unit, int offset_mode, bcm_field_qualify_t stage, int *pipe); 1943 int _bcm_esw_get_fp_mode_global(int unit, bcm_field_qualify_t stage); 1944 bcm_field_qualify_t _bcm_esw_stat_get_field_stage_from_stat_ctr(int unit, 1945 uint32 stat_counter_id); 1946 bcm_error_t _bcm_esw_stat_flex_get_hw_mode(int unit, uint32 mode_id, uint32 *hw_mode_id); 1947 bcm_error_t _bcm_esw_stat_flex_check_ingress_em_table_entry( 1948 int unit, 1949 soc_mem_t ingress_table, 1950 _field_stage_id_t field_stage, 1951 uint32 offset_mode, 1952 uint32 pool_number, 1953 uint32 base_idx); 1954 void stat_ctr_map_init(int unit); 1955 void stat_ctr_map_deinit(int unit); 1956 int _bcm_esw_stat_pool_reserved(int unit, 1957 bcm_stat_flex_direction_t direction, int pool); 1958 int _bcm_esw_stat_mod_reserved(int unit, int mode_id); 1959 extern bcm_error_t _bcm_stat_flex_flowtracker_counter_info_get(int unit, 1960 bcm_stat_flex_flowtracker_counter_info_t *info); 1961 #endif /* BCM_TOMAHAWK_SUPPORT */ 1962 #if defined(BCM_TOMAHAWK_SUPPORT) || defined(BCM_TRIDENT2PLUS_SUPPORT) 1963 bcm_field_qualify_t _bcm_esw_stat_get_field_stage_from_table(soc_mem_t ingress_table); 1964 #if defined(BCM_TRIDENT3_SUPPORT) || defined(BCM_TOMAHAWK3_SUPPORT) 1965 extern bcm_error_t _bcm_esw_stat_flex_get_custom_egress_mode_info( 1966 int unit, 1967 bcm_stat_flex_mode_t mode, 1968 bcm_stat_flex_custom_egress_mode_t *flex_egress_mode); 1969 1970 extern bcm_error_t _bcm_esw_stat_flex_update_custom_egress_mode_info( 1971 int unit, 1972 bcm_stat_flex_mode_t mode, 1973 bcm_stat_flex_custom_egress_mode_t *flex_egress_mode); 1974 #endif 1975 1976 #endif 1977 1978 #if defined(BCM_KATANA2_SUPPORT) 1979 1980 typedef struct class_attr_combine_s { 1981 uint32 **class_pkt_attr_comb; 1982 }class_attr_combine_t; 1983 1984 extern int _bcm_esw_stat_group_mode_attr_class_id_create( 1985 int unit, 1986 bcm_stat_group_mode_attr_t attr, 1987 int num_of_attr_values, 1988 uint32 *attr_values, 1989 bcm_stat_group_mode_attr_class_id_t *attr_class_id); 1990 1991 extern int _bcm_esw_stat_group_mode_attr_class_id_destroy( 1992 int unit, 1993 bcm_stat_group_mode_attr_class_id_t attr_class_id); 1994 1995 extern int _bcm_esw_stat_group_mode_attr_class_id_cleanup(int unit); 1996 1997 extern int _bcm_esw_stat_combine_attr_matrix_init(int unit, 1998 int *size); 1999 2000 extern int _bcm_esw_stat_flex_compressed_attr_matrix_sync(int unit, 2001 uint8 **scache_position); 2002 2003 extern int _bcm_esw_stat_flex_compressed_attr_matrix_recover(int unit, 2004 uint8 **scache_position); 2005 2006 #endif 2007 2008 #if defined(BCM_TRIDENT3_SUPPORT) || defined(BCM_APACHE_SUPPORT) 2009 typedef struct stat_port_group_s { 2010 pbmp_t port_grp_id_bmap; 2011 pbmp_t *port_grp_bmap; 2012 }stat_port_group_t; 2013 2014 extern int 2015 _bcm_esw_stat_combine_port_bitmap_cleanup(int unit); 2016 2017 extern int 2018 _bcm_esw_stat_combine_port_bitmap_init(int unit, 2019 int *size); 2020 2021 extern int 2022 _bcm_esw_stat_port_group_create(int unit, 2023 uint32 num_gports, 2024 bcm_gport_t *gport, 2025 uint32 *group_id); 2026 2027 extern int 2028 _bcm_esw_stat_port_group_destroy(int unit, 2029 uint32 group_id); 2030 2031 extern int 2032 _bcm_esw_stat_combine_port_bitmap_sync(int unit, 2033 uint8 **scache_position); 2034 2035 extern int 2036 _bcm_esw_stat_combine_port_bitmap_recover(int unit, 2037 uint8 **scache_position); 2038 2039 extern int 2040 bcmi_flex_ctr_update_portmap(int unit, int mode, int valid, int dir); 2041 2042 extern int 2043 bcmi_flex_ctr_cmpsd_port_sanitize(int unit, int mode, int dir, 2044 bcm_stat_flex_ing_cmprsd_attr_selectors_t *icmprsd_attr_selectors, 2045 bcm_stat_flex_egr_cmprsd_attr_selectors_t *ecmprsd_attr_selectors, 2046 int match); 2047 2048 extern int 2049 _bcm_esw_stat_attr_subport_only(int unit, 2050 bcm_stat_group_mode_attr_selector_t *attr_selectors, 2051 int num_selectors); 2052 2053 #if defined(BCM_CHANNELIZED_SWITCHING_SUPPORT) 2054 /* FlexCounter Related */ 2055 typedef struct bcmi_flex_ctr_subport_info_s { 2056 int port_map_valid; 2057 int pool; 2058 uint8 portmap[FB6_TOTAL_NUM_SUBPORT]; 2059 } bcmi_flex_ctr_subport_info_t; 2060 2061 /* ING and EGR portmap for 4 modes */ 2062 extern bcmi_flex_ctr_subport_info_t ing_port_map_info[BCM_MAX_NUM_UNITS][BCM_STAT_FLEX_COUNTER_MAX_MODE]; 2063 extern bcmi_flex_ctr_subport_info_t egr_port_map_info[BCM_MAX_NUM_UNITS][BCM_STAT_FLEX_COUNTER_MAX_MODE]; 2064 2065 extern void 2066 bcmi_flex_ctr_portmap_info_init(int unit); 2067 #endif 2068 2069 #endif 2070 #endif /* __BCM_FLEX_CTR_H__ */