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