Home | History | Annotate | Download | only in hxge
      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