1 /* 2 * CDDL HEADER START 3 * 4 * The contents of this file are subject to the terms of the 5 * Common Development and Distribution License (the "License"). 6 * You may not use this file except in compliance with the License. 7 * 8 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE 9 * or http://www.opensolaris.org/os/licensing. 10 * See the License for the specific language governing permissions 11 * and limitations under the License. 12 * 13 * When distributing Covered Code, include this CDDL HEADER in each 14 * file and include the License file at usr/src/OPENSOLARIS.LICENSE. 15 * If applicable, add the following below this CDDL HEADER, with the 16 * fields enclosed by brackets "[]" replaced with your own identifying 17 * information: Portions Copyright [yyyy] [name of copyright owner] 18 * 19 * CDDL HEADER END 20 */ 21 /* 22 * Copyright 2008 Sun Microsystems, Inc. All rights reserved. 23 * Use is subject to license terms. 24 */ 25 26 #ifndef _HXGE_PFC_HW_H 27 #define _HXGE_PFC_HW_H 28 29 #pragma ident "%Z%%M% %I% %E% SMI" 30 31 #ifdef __cplusplus 32 extern "C" { 33 #endif 34 35 #define PFC_BASE_ADDR 0X0200000 36 37 #define PFC_VLAN_TABLE (PFC_BASE_ADDR + 0x0) 38 #define PFC_VLAN_CTRL (PFC_BASE_ADDR + 0x9000) 39 #define PFC_MAC_ADDR (PFC_BASE_ADDR + 0x10000) 40 #define PFC_MAC_ADDR_MASK (PFC_BASE_ADDR + 0x10080) 41 #define PFC_HASH_TABLE (PFC_BASE_ADDR + 0x10100) 42 #define PFC_L2_CLASS_CONFIG (PFC_BASE_ADDR + 0x20000) 43 #define PFC_L3_CLASS_CONFIG (PFC_BASE_ADDR + 0x20030) 44 #define PFC_TCAM_KEY0 (PFC_BASE_ADDR + 0x20090) 45 #define PFC_TCAM_KEY1 (PFC_BASE_ADDR + 0x20098) 46 #define PFC_TCAM_MASK0 (PFC_BASE_ADDR + 0x200B0) 47 #define PFC_TCAM_MASK1 (PFC_BASE_ADDR + 0x200B8) 48 #define PFC_TCAM_CTRL (PFC_BASE_ADDR + 0x200D0) 49 #define PFC_CONFIG (PFC_BASE_ADDR + 0x20100) 50 #define TCP_CTRL_MASK (PFC_BASE_ADDR + 0x20108) 51 #define SRC_HASH_VAL (PFC_BASE_ADDR + 0x20110) 52 #define PFC_INT_STATUS (PFC_BASE_ADDR + 0x30000) 53 #define PFC_DBG_INT_STATUS (PFC_BASE_ADDR + 0x30008) 54 #define PFC_INT_MASK (PFC_BASE_ADDR + 0x30100) 55 #define PFC_DROP_LOG (PFC_BASE_ADDR + 0x30200) 56 #define PFC_DROP_LOG_MASK (PFC_BASE_ADDR + 0x30208) 57 #define PFC_VLAN_PAR_ERR_LOG (PFC_BASE_ADDR + 0x30210) 58 #define PFC_TCAM_PAR_ERR_LOG (PFC_BASE_ADDR + 0x30218) 59 #define PFC_BAD_CS_COUNTER (PFC_BASE_ADDR + 0x30220) 60 #define PFC_DROP_COUNTER (PFC_BASE_ADDR + 0x30228) 61 #define PFC_AUTO_INIT (PFC_BASE_ADDR + 0x30300) 62 63 64 /* 65 * Register: PfcVlanTable 66 * VLAN Table Registers 67 * Description: VLAN membership table. CPU programs in the VLANs that 68 * it wants to belong to. A blade may be a member of multiple VLANs. 69 * Bits [31:0] of the first entry corresponds to vlan members [31:0], 70 * bits [31:0] of the second entry corresponds to vlan members 71 * [63:32] and so on. 72 * Fields: 73 * Odd parities of member[31:24], member[23:16], member[17:8], 74 * member[7:0]. These parity bits are ignored when parEn in the 75 * VLAN Control register is set to '0'. 76 * Set to 1 to indicate that blade is a member of the VLAN IDs 77 * (32 to 0) * entry number 78 */ 79 typedef union { 80 uint64_t value; 81 struct { 82 #if defined(_BIG_ENDIAN) 83 uint32_t rsrvd:28; 84 uint32_t parity:4; 85 uint32_t member:32; 86 #else 87 uint32_t member:32; 88 uint32_t parity:4; 89 uint32_t rsrvd:28; 90 #endif 91 } bits; 92 } pfc_vlan_table_t; 93 94 95 /* 96 * Register: PfcVlanCtrl 97 * VLAN Control Register 98 * Description: VLAN control register. Controls VLAN table properties 99 * and implicit VLAN properties for non-VLAN tagged packets. 100 * Fields: 101 * VLAN table parity debug write enable. When set to 1, software 102 * writes the parity bits together with the data during a VLAN 103 * table write. Otherwise, hardware automatically generates the 104 * parity bits from the data. 105 * Set to 1 to indicate the implicit VLAN ID is valid for use in 106 * non-VLAN tagged packets filtering 107 * Implicit VLAN ID for non-VLAN tagged packets 108 */ 109 typedef union { 110 uint64_t value; 111 struct { 112 #if defined(_BIG_ENDIAN) 113 uint32_t rsrvd:32; 114 uint32_t rsrvd_l:18; 115 uint32_t par_en:1; 116 uint32_t valid:1; 117 uint32_t id:12; 118 #else 119 uint32_t id:12; 120 uint32_t valid:1; 121 uint32_t par_en:1; 122 uint32_t rsrvd_l:18; 123 uint32_t rsrvd:32; 124 #endif 125 } bits; 126 } pfc_vlan_ctrl_t; 127 128 129 /* 130 * Register: PfcMacAddr 131 * MAC Address 132 * Description: MAC Address - Contains a station's 48 bit MAC 133 * address. The first register corresponds to MAC address 0, the 134 * second register corresponds to MAC address 1 and so on. For a MAC 135 * address of format aa-bb-cc-dd-ee-ff, addr[47:0] corresponds to 136 * "aabbccddeeff". When used in conjunction with the MAC address 137 * filter mask registers, these registers can be used to construct 138 * either a unicast or multicast address. An address is considered 139 * matched if (DA & ~mask) == (MAC address & ~mask) 140 * Fields: 141 * 48 bits of stations's MAC address 142 */ 143 typedef union { 144 uint64_t value; 145 struct { 146 #if defined(_BIG_ENDIAN) 147 uint32_t rsrvd:16; 148 uint32_t addr:16; 149 uint32_t addr_l:32; 150 #else 151 uint32_t addr_l:32; 152 uint32_t addr:16; 153 uint32_t rsrvd:16; 154 #endif 155 } bits; 156 } pfc_mac_addr_t; 157 158 159 /* 160 * Register: PfcMacAddrMask 161 * MAC Address Filter 162 * Description: MAC Address Filter Mask - Contains the station's 48 163 * bit MAC address filter mask. The first register corresponds to MAC 164 * address 0 filter mask, the second register corresponds to MAC 165 * address 1 filter mask and so on. These filter masks cover MAC 166 * address bits 47:0 in the same order as the address registers 167 * Fields: 168 * 48 bits of stations's MAC address filter mask 169 */ 170 typedef union { 171 uint64_t value; 172 struct { 173 #if defined(_BIG_ENDIAN) 174 uint32_t rsrvd:16; 175 uint32_t mask:16; 176 uint32_t mask_l:32; 177 #else 178 uint32_t mask_l:32; 179 uint32_t mask:16; 180 uint32_t rsrvd:16; 181 #endif 182 } bits; 183 } pfc_mac_addr_mask_t; 184 185 186 /* 187 * Register: PfcHashTable 188 * MAC Multicast Hash Filter 189 * Description: MAC multicast hash table filter. The multicast 190 * destination address is used to perform Ethernet CRC-32 hashing 191 * with seed value 0xffffFfff. Bits 47:40 of the hash result are used 192 * to index one bit of this multicast hash table. If the bit is '1', 193 * the multicast hash matches. 194 * Fields: 195 * 16 bits of 256 bit hash table. First entry contains bits 196 * [15:0], last entry contains bits [255:240] 197 */ 198 typedef union { 199 uint64_t value; 200 struct { 201 #if defined(_BIG_ENDIAN) 202 uint32_t rsrvd:32; 203 uint32_t rsrvd_l:16; 204 uint32_t hash_val:16; 205 #else 206 uint32_t hash_val:16; 207 uint32_t rsrvd_l:16; 208 uint32_t rsrvd:32; 209 #endif 210 } bits; 211 } pfc_hash_table_t; 212 213 214 /* 215 * Register: PfcL2ClassConfig 216 * L2 Class Configuration 217 * Description: Programmable EtherType for class codes 2 and 3. The 218 * first register is class 2, and the second class 3 219 * Fields: 220 * Set to 1 to indicate that the entry is valid for use in 221 * classification 222 * EtherType value 223 */ 224 typedef union { 225 uint64_t value; 226 struct { 227 #if defined(_BIG_ENDIAN) 228 uint32_t rsrvd:32; 229 uint32_t rsrvd_l:15; 230 uint32_t valid:1; 231 uint32_t etype:16; 232 #else 233 uint32_t etype:16; 234 uint32_t valid:1; 235 uint32_t rsrvd_l:15; 236 uint32_t rsrvd:32; 237 #endif 238 } bits; 239 } pfc_l2_class_config_t; 240 241 242 /* 243 * Register: PfcL3ClassConfig 244 * L3 Class Configuration 245 * Description: Configuration for class codes 0x8-0xF. PFC can be set 246 * to discard certain classes of traffic, or to not initiate a TCAM 247 * match for that class 248 * Fields: 249 * Set to 1 to discard all packets of this class code 250 * Set to 1 to indicate that packets of this class should be sent 251 * to the TCAM for perfect match 252 */ 253 typedef union { 254 uint64_t value; 255 struct { 256 #if defined(_BIG_ENDIAN) 257 uint32_t rsrvd:32; 258 uint32_t rsrvd_l:28; 259 uint32_t discard:1; 260 uint32_t tsel:1; 261 uint32_t rsrvd1:2; 262 #else 263 uint32_t rsrvd1:2; 264 uint32_t tsel:1; 265 uint32_t discard:1; 266 uint32_t rsrvd_l:28; 267 uint32_t rsrvd:32; 268 #endif 269 } bits; 270 } pfc_l3_class_config_t; 271 272 273 /* 274 * Register: PfcTcamKey0 275 * TCAM Key 0 276 * Description: TCAM key value. Holds bit 63:0 of the TCAM key 277 * Fields: 278 * bits 63:0 of tcam key 279 */ 280 typedef union { 281 uint64_t value; 282 struct { 283 #if defined(_BIG_ENDIAN) 284 uint32_t key:32; 285 uint32_t key_l:32; 286 #else 287 uint32_t key_l:32; 288 uint32_t key:32; 289 #endif 290 } bits; 291 } pfc_tcam_key0_t; 292 293 294 /* 295 * Register: PfcTcamKey1 296 * TCAM Key 1 297 * Description: TCAM key value. Holds bit 99:64 of the TCAM key 298 * Fields: 299 * bits 99:64 of tcam key 300 */ 301 typedef union { 302 uint64_t value; 303 struct { 304 #if defined(_BIG_ENDIAN) 305 uint32_t rsrvd:28; 306 uint32_t key:4; 307 uint32_t key_l:32; 308 #else 309 uint32_t key_l:32; 310 uint32_t key:4; 311 uint32_t rsrvd:28; 312 #endif 313 } bits; 314 } pfc_tcam_key1_t; 315 316 317 /* 318 * Register: PfcTcamMask0 319 * TCAM Mask 0 320 * Description: TCAM mask value. Holds bit 63:0 of the TCAM mask 321 * Fields: 322 * bits 63:0 of tcam mask 323 */ 324 typedef union { 325 uint64_t value; 326 struct { 327 #if defined(_BIG_ENDIAN) 328 uint32_t mask:32; 329 uint32_t mask_l:32; 330 #else 331 uint32_t mask_l:32; 332 uint32_t mask:32; 333 #endif 334 } bits; 335 } pfc_tcam_mask0_t; 336 337 338 /* 339 * Register: PfcTcamMask1 340 * TCAM Mask 1 341 * Description: TCAM mask value. Holds bit 99:64 of the TCAM mask 342 * Fields: 343 * bits 99:64 of tcam mask 344 */ 345 typedef union { 346 uint64_t value; 347 struct { 348 #if defined(_BIG_ENDIAN) 349 uint32_t rsrvd:28; 350 uint32_t mask:4; 351 uint32_t mask_l:32; 352 #else 353 uint32_t mask_l:32; 354 uint32_t mask:4; 355 uint32_t rsrvd:28; 356 #endif 357 } bits; 358 } pfc_tcam_mask1_t; 359 360 361 /* 362 * Register: PfcTcamCtrl 363 * TCAM Control 364 * Description: TCAM and TCAM lookup memory access control register. 365 * Controls how TCAM and result lookup table are accessed by blade 366 * CPU. For a TCAM write, the data in the TCAM key and mask registers 367 * will be written to the TCAM. A compare will initiate a TCAM match 368 * with the data stored in the TCAM key register. The match bit is 369 * toggled, and the matching address is reported in the addr field. 370 * For an access to the TCAM result lookup memory, the TCAM 0 key 371 * register is used for the read/write data. 372 * Fields: 373 * TCAM lookup table debug parity bit write enable. When a '1' is 374 * written, software writes the parity bit together with the data 375 * during a TCAM result lookup write. Otherwise, hardware 376 * automatically generates the parity bit from the data. 377 * 3'b000 = TCAM write 3'b001 = reserved 3'b010 = TCAM compare 378 * 3'b011 = reserved 3'b100 = TCAM result lookup write 3'b101 = 379 * TCAM result lookup read 3'b110 = reserved 3'b111 = reserved 380 * Status of read/write/compare operation. When a zero is 381 * written, hardware initiates access. Hardware writes a '1' to 382 * the bit when it completes 383 * Set to 1 if there is a TCAM match for compare command. Zero 384 * otherwise 385 * Address location for access of TCAM or RAM (valid values 386 * 0-42). For a compare, the location of the match is written 387 * here by hardware. 388 */ 389 typedef union { 390 uint64_t value; 391 struct { 392 #if defined(_BIG_ENDIAN) 393 uint32_t rsrvd:32; 394 uint32_t rsrvd_l:13; 395 uint32_t par_en:1; 396 uint32_t cmd:3; 397 uint32_t status:1; 398 uint32_t match:1; 399 uint32_t rsrvd1:5; 400 uint32_t addr:8; 401 #else 402 uint32_t addr:8; 403 uint32_t rsrvd1:5; 404 uint32_t match:1; 405 uint32_t status:1; 406 uint32_t cmd:3; 407 uint32_t par_en:1; 408 uint32_t rsrvd_l:13; 409 uint32_t rsrvd:32; 410 #endif 411 } bits; 412 } pfc_tcam_ctrl_t; 413 414 415 /* 416 * Register: PfcConfig 417 * PFC General Configuration 418 * Description: PFC configuration options that are under the control 419 * of a blade CPU 420 * Fields: 421 * MAC address enable mask. Each bit corresponds to one MAC 422 * adress (lsb = addr0). With 16 MAC addresses, only the lower 16 423 * bits are valid. 424 * default DMA channel number 425 * force TCP/UDP checksum result to always match 426 * Enable for TCP/UDP checksum. If not enabled, the result will 427 * never match. 428 * Enable TCAM matching. If TCAM matching is not enabled, traffic 429 * will be sent to the default DMA channel. 430 * Enable L2 Multicast hash 431 */ 432 typedef union { 433 uint64_t value; 434 struct { 435 #if defined(_BIG_ENDIAN) 436 uint32_t rsrvd:24; 437 uint32_t mac_addr_en:8; 438 uint32_t mac_addr_en_l:24; 439 uint32_t default_dma:4; 440 uint32_t force_cs_en:1; 441 uint32_t tcp_cs_en:1; 442 uint32_t tcam_en:1; 443 uint32_t l2_hash_en:1; 444 #else 445 uint32_t l2_hash_en:1; 446 uint32_t tcam_en:1; 447 uint32_t tcp_cs_en:1; 448 uint32_t force_cs_en:1; 449 uint32_t default_dma:4; 450 uint32_t mac_addr_en_l:24; 451 uint32_t mac_addr_en:8; 452 uint32_t rsrvd:24; 453 #endif 454 } bits; 455 } pfc_config_t; 456 457 458 /* 459 * Register: TcpCtrlMask 460 * TCP control bits mask 461 * Description: Mask of TCP control bits to forward onto downstream 462 * blocks The TCP packet's control bits are masked, and then bitwise 463 * OR'd to produce a signal to the Rx DMA. Normally, all bits are 464 * masked off except the TCP SYN bit. The Rx DMA uses this bitwise OR 465 * for statistics. When discard = 1, the packet will be dropped if 466 * the bitwise OR = 1. 467 * Fields: 468 * Drop the packet if bitwise OR of the TCP control bits masked 469 * on = 1 470 * TCP end of data flag 471 * TCP SYN flag 472 * TCP reset flag 473 * TCP push flag 474 * TCP ack flag 475 * TCP urgent flag 476 */ 477 typedef union { 478 uint64_t value; 479 struct { 480 #if defined(_BIG_ENDIAN) 481 uint32_t rsrvd:32; 482 uint32_t rsrvd_l:25; 483 uint32_t discard:1; 484 uint32_t fin:1; 485 uint32_t syn:1; 486 uint32_t rst:1; 487 uint32_t psh:1; 488 uint32_t ack:1; 489 uint32_t urg:1; 490 #else 491 uint32_t urg:1; 492 uint32_t ack:1; 493 uint32_t psh:1; 494 uint32_t rst:1; 495 uint32_t syn:1; 496 uint32_t fin:1; 497 uint32_t discard:1; 498 uint32_t rsrvd_l:25; 499 uint32_t rsrvd:32; 500 #endif 501 } bits; 502 } tcp_ctrl_mask_t; 503 504 505 /* 506 * Register: SrcHashVal 507 * Source hash Seed Value 508 * Hash CRC seed value 509 */ 510 typedef union { 511 uint64_t value; 512 struct { 513 #if defined(_BIG_ENDIAN) 514 uint32_t rsrvd:32; 515 uint32_t seed:32; 516 #else 517 uint32_t seed:32; 518 uint32_t rsrvd:32; 519 #endif 520 } bits; 521 } src_hash_val_t; 522 523 524 /* 525 * Register: PfcIntStatus 526 * PFC Interrupt Status 527 * Description: PFC interrupt status register 528 * Fields: 529 * triggered when packet drop log captured a drop. Part of LDF 0. 530 * Write 1 to clear. 531 * TCAM result lookup table parity error. Part of LDF 0. Write 1 532 * to clear. 533 * VLAN table parity error. Part of LDF 0. Write 1 to clear. 534 */ 535 typedef union { 536 uint64_t value; 537 struct { 538 #if defined(_BIG_ENDIAN) 539 uint32_t rsrvd:32; 540 uint32_t rsrvd_l:29; 541 uint32_t pkt_drop:1; 542 uint32_t tcam_parity_err:1; 543 uint32_t vlan_parity_err:1; 544 #else 545 uint32_t vlan_parity_err:1; 546 uint32_t tcam_parity_err:1; 547 uint32_t pkt_drop:1; 548 uint32_t rsrvd_l:29; 549 uint32_t rsrvd:32; 550 #endif 551 } bits; 552 } pfc_int_status_t; 553 554 555 /* 556 * Register: PfcDbgIntStatus 557 * PFC Debug Interrupt Status 558 * Description: PFC debug interrupt status mirror register. This 559 * debug register triggers the same interrupts as those in the PFC 560 * Interrupt Status register. Interrupts in this mirror register are 561 * subject to the filtering of the PFC Interrupt Mask register. 562 * Fields: 563 * Packet drop. Part of LDF 0. 564 * TCAM result lookup table parity error. Part of LDF 0. 565 * VLAN table parity error. Part of LDF 0. 566 */ 567 typedef union { 568 uint64_t value; 569 struct { 570 #if defined(_BIG_ENDIAN) 571 uint32_t rsrvd:32; 572 uint32_t rsrvd_l:29; 573 uint32_t pkt_drop:1; 574 uint32_t tcam_parity_err:1; 575 uint32_t vlan_parity_err:1; 576 #else 577 uint32_t vlan_parity_err:1; 578 uint32_t tcam_parity_err:1; 579 uint32_t pkt_drop:1; 580 uint32_t rsrvd_l:29; 581 uint32_t rsrvd:32; 582 #endif 583 } bits; 584 } pfc_dbg_int_status_t; 585 586 587 /* 588 * Register: PfcIntMask 589 * PFC Interrupt Mask 590 * Description: PFC interrupt status mask register 591 * Fields: 592 * mask for pktDrop capture; 593 * TCAM result lookup table parity error mask; 594 * VLAN table parity error mask; 595 */ 596 typedef union { 597 uint64_t value; 598 struct { 599 #if defined(_BIG_ENDIAN) 600 uint32_t rsrvd:32; 601 uint32_t rsrvd_l:29; 602 uint32_t pkt_drop_mask:1; 603 uint32_t tcam_parity_err_mask:1; 604 uint32_t vlan_parity_err_mask:1; 605 #else 606 uint32_t vlan_parity_err_mask:1; 607 uint32_t tcam_parity_err_mask:1; 608 uint32_t pkt_drop_mask:1; 609 uint32_t rsrvd_l:29; 610 uint32_t rsrvd:32; 611 #endif 612 } bits; 613 } pfc_int_mask_t; 614 615 616 /* 617 * Register: PfcDropLog 618 * Packet Drop Log 619 * Description: Packet drop log. Log for capturing packet drops. Log 620 * is re-armed when associated interrupt bit is cleared. 621 * Fields: 622 * drop because bitwise OR of the tcp control bits masked on = 1 623 * drop because L2 address did not match 624 * drop because class code indicated drop 625 * drop because TCAM result indicated drop 626 * drop because blade was not a member of VLAN 627 */ 628 typedef union { 629 uint64_t value; 630 struct { 631 #if defined(_BIG_ENDIAN) 632 uint32_t rsrvd:32; 633 uint32_t rsrvd_l:27; 634 uint32_t tcp_ctrl_drop:1; 635 uint32_t l2_addr_drop:1; 636 uint32_t class_code_drop:1; 637 uint32_t tcam_drop:1; 638 uint32_t vlan_drop:1; 639 #else 640 uint32_t vlan_drop:1; 641 uint32_t tcam_drop:1; 642 uint32_t class_code_drop:1; 643 uint32_t l2_addr_drop:1; 644 uint32_t tcp_ctrl_drop:1; 645 uint32_t rsrvd_l:27; 646 uint32_t rsrvd:32; 647 #endif 648 } bits; 649 } pfc_drop_log_t; 650 651 652 /* 653 * Register: PfcDropLogMask 654 * Packet Drop Log Mask 655 * Description: Mask for logging packet drop. If the drop type is 656 * masked off, it will not trigger the drop log to capture the packet 657 * drop 658 * Fields: 659 * mask drop because bitwise OR of the tcp control bits masked on 660 * = 1 661 * mask drop because L2 address did not match 662 * mask drop because class code indicated 663 * mask drop because TCAM result indicated drop 664 * mask drop because blade was not a member of VLAN 665 */ 666 typedef union { 667 uint64_t value; 668 struct { 669 #if defined(_BIG_ENDIAN) 670 uint32_t rsrvd:32; 671 uint32_t rsrvd_l:27; 672 uint32_t tcp_ctrl_drop_mask:1; 673 uint32_t l2_addr_drop_mask:1; 674 uint32_t class_code_drop_mask:1; 675 uint32_t tcam_drop_mask:1; 676 uint32_t vlan_drop_mask:1; 677 #else 678 uint32_t vlan_drop_mask:1; 679 uint32_t tcam_drop_mask:1; 680 uint32_t class_code_drop_mask:1; 681 uint32_t l2_addr_drop_mask:1; 682 uint32_t tcp_ctrl_drop_mask:1; 683 uint32_t rsrvd_l:27; 684 uint32_t rsrvd:32; 685 #endif 686 } bits; 687 } pfc_drop_log_mask_t; 688 689 690 /* 691 * Register: PfcVlanParErrLog 692 * VLAN Parity Error Log 693 * Description: Log of parity errors in VLAN table. 694 * Fields: 695 * address of parity error. Log is cleared when corresponding 696 * interrupt bit is cleared by writing '1'. 697 */ 698 typedef union { 699 uint64_t value; 700 struct { 701 #if defined(_BIG_ENDIAN) 702 uint32_t rsrvd:32; 703 uint32_t rsrvd_l:20; 704 uint32_t addr:12; 705 #else 706 uint32_t addr:12; 707 uint32_t rsrvd_l:20; 708 uint32_t rsrvd:32; 709 #endif 710 } bits; 711 } pfc_vlan_par_err_log_t; 712 713 714 /* 715 * Register: PfcTcamParErrLog 716 * TCAM Parity Error Log 717 * Description: Log of parity errors in TCAM result lookup table. 718 * Fields: 719 * address of parity error. Log is cleared when corresponding 720 * interrupt bit is cleared by writing '1'. 721 */ 722 typedef union { 723 uint64_t value; 724 struct { 725 #if defined(_BIG_ENDIAN) 726 uint32_t rsrvd:32; 727 uint32_t rsrvd_l:24; 728 uint32_t addr:8; 729 #else 730 uint32_t addr:8; 731 uint32_t rsrvd_l:24; 732 uint32_t rsrvd:32; 733 #endif 734 } bits; 735 } pfc_tcam_par_err_log_t; 736 737 738 /* 739 * Register: PfcBadCsCounter 740 * PFC Bad Checksum Counter 741 * Description: Count number of bad TCP/UDP checksum. Only counted if 742 * L2 adddress matched 743 * Fields: 744 * count of number of bad TCP/UDP checksums received. Clear on 745 * read 746 */ 747 typedef union { 748 uint64_t value; 749 struct { 750 #if defined(_BIG_ENDIAN) 751 uint32_t rsrvd:32; 752 uint32_t bad_cs_count:32; 753 #else 754 uint32_t bad_cs_count:32; 755 uint32_t rsrvd:32; 756 #endif 757 } bits; 758 } pfc_bad_cs_counter_t; 759 760 761 /* 762 * Register: PfcDropCounter 763 * PFC Drop Counter 764 * Description: Count number of packets dropped due to VLAN 765 * membership, class code, TCP control bits, or TCAM results Only 766 * counted if L2 address matched. 767 * Fields: 768 * Count of number of packets dropped due to VLAN, TCAM results. 769 * Clear on read 770 */ 771 typedef union { 772 uint64_t value; 773 struct { 774 #if defined(_BIG_ENDIAN) 775 uint32_t rsrvd:32; 776 uint32_t drop_count:32; 777 #else 778 uint32_t drop_count:32; 779 uint32_t rsrvd:32; 780 #endif 781 } bits; 782 } pfc_drop_counter_t; 783 784 785 /* 786 * Register: PfcAutoInit 787 * PFC Auto Init 788 * Description: PFC Auto Initialization. Writing to this register 789 * triggers the auto initialization of the blade's TCAM entries with 790 * 100 bits of '0' for both key and mask. TCAM lookup is disabled 791 * during auto initialization. 792 * Fields: 793 * TCAM auto initialization status. 0=busy, 1=done. 794 */ 795 typedef union { 796 uint64_t value; 797 struct { 798 #if defined(_BIG_ENDIAN) 799 uint32_t rsrvd:32; 800 uint32_t rsrvd_l:31; 801 uint32_t auto_init_status:1; 802 #else 803 uint32_t auto_init_status:1; 804 uint32_t rsrvd_l:31; 805 uint32_t rsrvd:32; 806 #endif 807 } bits; 808 } pfc_auto_init_t; 809 810 811 #ifdef __cplusplus 812 } 813 #endif 814 815 #endif /* _HXGE_PFC_HW_H */ 816