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_VMAC_HW_H
     27 #define	_HXGE_VMAC_HW_H
     28 
     29 #pragma ident	"%Z%%M%	%I%	%E% SMI"
     30 
     31 #ifdef	__cplusplus
     32 extern "C" {
     33 #endif
     34 
     35 #define	VMAC_BASE_ADDR				0X00100000
     36 
     37 #define	VMAC_RST				(VMAC_BASE_ADDR + 0x0)
     38 #define	VMAC_TX_CFG				(VMAC_BASE_ADDR + 0x8)
     39 #define	VMAC_RX_CFG				(VMAC_BASE_ADDR + 0x10)
     40 #define	VMAC_TX_STAT				(VMAC_BASE_ADDR + 0x20)
     41 #define	VMAC_TX_MSK				(VMAC_BASE_ADDR + 0x28)
     42 #define	VMAC_RX_STAT				(VMAC_BASE_ADDR + 0x30)
     43 #define	VMAC_RX_MSK				(VMAC_BASE_ADDR + 0x38)
     44 #define	VMAC_TX_STAT_MIRROR			(VMAC_BASE_ADDR + 0x40)
     45 #define	VMAC_RX_STAT_MIRROR			(VMAC_BASE_ADDR + 0x48)
     46 #define	VMAC_TX_FRAME_CNT			(VMAC_BASE_ADDR + 0x100)
     47 #define	VMAC_TX_BYTE_CNT			(VMAC_BASE_ADDR + 0x108)
     48 #define	VMAC_RX_FRAME_CNT			(VMAC_BASE_ADDR + 0x120)
     49 #define	VMAC_RX_BYTE_CNT			(VMAC_BASE_ADDR + 0x128)
     50 #define	VMAC_RX_DROP_FR_CNT			(VMAC_BASE_ADDR + 0x130)
     51 #define	VMAC_RX_DROP_BYTE_CNT			(VMAC_BASE_ADDR + 0x138)
     52 #define	VMAC_RX_CRC_CNT				(VMAC_BASE_ADDR + 0x140)
     53 #define	VMAC_RX_PAUSE_CNT			(VMAC_BASE_ADDR + 0x148)
     54 #define	VMAC_RX_BCAST_FR_CNT			(VMAC_BASE_ADDR + 0x150)
     55 #define	VMAC_RX_MCAST_FR_CNT			(VMAC_BASE_ADDR + 0x158)
     56 
     57 
     58 /*
     59  * Register: VmacRst
     60  * VMAC Software Reset Command
     61  * Description:
     62  * Fields:
     63  *     Write a '1' to reset Rx VMAC; auto clears. This brings rx vmac
     64  *     to power on reset state.
     65  *     Write a '1' to reset Tx VMAC; auto clears. This brings tx vmac
     66  *     to power on reset state.
     67  */
     68 typedef union {
     69 	uint64_t value;
     70 	struct {
     71 #if defined(_BIG_ENDIAN)
     72 		uint32_t	rsrvd:32;
     73 		uint32_t	rsrvd_l:23;
     74 		uint32_t	rx_reset:1;
     75 		uint32_t	rsrvd1:7;
     76 		uint32_t	tx_reset:1;
     77 #else
     78 		uint32_t	tx_reset:1;
     79 		uint32_t	rsrvd1:7;
     80 		uint32_t	rx_reset:1;
     81 		uint32_t	rsrvd_l:23;
     82 		uint32_t	rsrvd:32;
     83 #endif
     84 	} bits;
     85 } vmac_rst_t;
     86 
     87 
     88 /*
     89  * Register: VmacTxCfg
     90  * Tx VMAC Configuration
     91  * Description:
     92  * Fields:
     93  *     Maximum length of any total transfer gathered by Tx VMAC,
     94  *     including packet data, header, crc, transmit header and any
     95  *     pad bytes. Default value of 0x2422 represents 9220 bytes of
     96  *     packet data, ethernet header, and crc, 14 bytes maximum pad,
     97  *     and 16 bytes transmit header = 9250 (0x2422).
     98  *     Enable padding of short packet to meet minimum frame length of
     99  *     64 bytes. Software should note that if txPad functionality is
    100  *     used to pad runt packets to minimum length, that crcInsert
    101  *     functionality (below) must also be used to provide the packet
    102  *     with correct L2 crc.
    103  *     1: Enable generation and appending of FCS to the packets. 0:
    104  *     Disable generation and appending of FCS to the packets.
    105  *     Enable Tx VMAC. Write a '1' to enable Tx VMAC; write a '0' to
    106  *     disable it. This bit also propagates as vmacTdcEn to the TDC
    107  *     block. In TDC, the vmacTdcEn bit disables the RTab state
    108  *     machine. Hence, the transmission from that blade would be
    109  *     stopped and be queued, but no packets would be dropped. Thus,
    110  *     the VMAC can only be enabled/disabled at packet boundary. The
    111  *     VMAC will not send out portion of a packet. The currently
    112  *     processed packet will continue to be sent out when Tx VMAC is
    113  *     disabled.
    114  */
    115 typedef union {
    116 	uint64_t value;
    117 	struct {
    118 #if defined(_BIG_ENDIAN)
    119 		uint32_t	rsrvd:32;
    120 		uint32_t	tx_max_frame_length:14;
    121 		uint32_t	rsrvd1:15;
    122 		uint32_t	tx_pad:1;
    123 		uint32_t	crc_insert:1;
    124 		uint32_t	tx_en:1;
    125 #else
    126 		uint32_t	tx_en:1;
    127 		uint32_t	crc_insert:1;
    128 		uint32_t	tx_pad:1;
    129 		uint32_t	rsrvd1:15;
    130 		uint32_t	tx_max_frame_length:14;
    131 		uint32_t	rsrvd:32;
    132 #endif
    133 	} bits;
    134 } vmac_tx_cfg_t;
    135 
    136 
    137 /*
    138  * Register: VmacRxCfg
    139  * Rx VMAC Configuration
    140  * Description: MAC address and length in Type/Length field are
    141  * checked in PFC.
    142  * Fields:
    143  *     Maximum length of a frame accepted by Rx/Tx VMAC. Only packets
    144  *     with length between 64 bytes and maxFrameLength will be
    145  *     accepted by Rx/Tx VMAC. This length indicates just the packet
    146  *     length excluding the packet header, crc, and any pad bytes.
    147  *     Maximum value is 9K (9*1024)
    148  *     enable packets from the same blade to loopback
    149  *     Enable acceptance of all Unicast packets for L2 destination
    150  *     address, ie, allow all Unicast packets to pass the L2
    151  *     filtering.
    152  *     Enable acceptance of all multi-cast packets, ie, allow all
    153  *     multi-cast packets to pass the L2 filtering.
    154  *     Enable the passing through of flow control frames.
    155  *     Enable the stripping of FCS field in the packets.
    156  *     Disable of FCS checking. When enable, packets with incorrect
    157  *     FCS value are dropped by Rx VMAC.
    158  *     Enable rx VMAC. Write a '1' to enable rx VMAC; write a '0' to
    159  *     disable it. The VMAC will begin to accept packet at the
    160  *     detection of the SOP (start of packet). When disable, the
    161  *     currently processed packet will continue to be accepted.
    162  */
    163 typedef union {
    164 	uint64_t value;
    165 	struct {
    166 #if defined(_BIG_ENDIAN)
    167 		uint32_t	rsrvd:32;
    168 		uint32_t	rx_max_frame_length:14;
    169 		uint32_t	reserved:11;
    170 		uint32_t	loopback:1;
    171 		uint32_t	promiscuous_mode:1;
    172 		uint32_t	promiscuous_group:1;
    173 		uint32_t	pass_flow_ctrl_fr:1;
    174 		uint32_t	strip_crc:1;
    175 		uint32_t	crc_check_disable:1;
    176 		uint32_t	rx_en:1;
    177 #else
    178 		uint32_t	rx_en:1;
    179 		uint32_t	crc_check_disable:1;
    180 		uint32_t	strip_crc:1;
    181 		uint32_t	pass_flow_ctrl_fr:1;
    182 		uint32_t	promiscuous_group:1;
    183 		uint32_t	promiscuous_mode:1;
    184 		uint32_t	loopback:1;
    185 		uint32_t	reserved:11;
    186 		uint32_t	rx_max_frame_length:14;
    187 		uint32_t	rsrvd:32;
    188 #endif
    189 	} bits;
    190 } vmac_rx_cfg_t;
    191 
    192 
    193 /*
    194  * Register: VmacTxStat
    195  * Tx VMAC Status Register
    196  * Description: A new interrupt will be generated only if Tx VMAC is
    197  * enabled by vmacTxCfg::txEn=1. Disabling Tx VMAC does not affect
    198  * currently-existing Ldf state. Writing this register affects
    199  * vmacTxStatMirror register bits also the same way.
    200  * Fields:
    201  *     Indicates that counter of byte transmitted has exceeded the
    202  *     max value.
    203  *     Indicates that counter of frame transmitted has exceeded the
    204  *     max value.
    205  *     A frame has been successfully transmitted.
    206  */
    207 typedef union {
    208 	uint64_t value;
    209 	struct {
    210 #if defined(_BIG_ENDIAN)
    211 		uint32_t	rsrvd:32;
    212 		uint32_t	rsrvd_l:29;
    213 		uint32_t	tx_byte_cnt_overflow:1;
    214 		uint32_t	tx_frame_cnt_overflow:1;
    215 		uint32_t	frame_tx:1;
    216 #else
    217 		uint32_t	frame_tx:1;
    218 		uint32_t	tx_frame_cnt_overflow:1;
    219 		uint32_t	tx_byte_cnt_overflow:1;
    220 		uint32_t	rsrvd_l:29;
    221 		uint32_t	rsrvd:32;
    222 #endif
    223 	} bits;
    224 } vmac_tx_stat_t;
    225 
    226 
    227 /*
    228  * Register: VmacTxMsk
    229  * Tx VMAC Status Mask
    230  * Description: masking vmacTxStat from interrupt.
    231  * Fields:
    232  *     1: mask interrupt due to overflow of counter of byte
    233  *     transmitted
    234  *     1: mask interrupt due to overflow of counter of frame
    235  *     transmitted
    236  *     1: mask interrupt due to successful transmition of frame.
    237  */
    238 typedef union {
    239 	uint64_t value;
    240 	struct {
    241 #if defined(_BIG_ENDIAN)
    242 		uint32_t	rsrvd:32;
    243 		uint32_t	rsrvd_l:29;
    244 		uint32_t	tx_byte_cnt_overflow_msk:1;
    245 		uint32_t	tx_frame_cnt_overflow_msk:1;
    246 		uint32_t	frame_tx_msk:1;
    247 #else
    248 		uint32_t	frame_tx_msk:1;
    249 		uint32_t	tx_frame_cnt_overflow_msk:1;
    250 		uint32_t	tx_byte_cnt_overflow_msk:1;
    251 		uint32_t	rsrvd_l:29;
    252 		uint32_t	rsrvd:32;
    253 #endif
    254 	} bits;
    255 } vmac_tx_msk_t;
    256 
    257 
    258 /*
    259  * Register: VmacRxStat
    260  * Rx VMAC Status Register
    261  * Description: Overflow indicators are read-only registers; Read off
    262  * the counters to clear. A new interrupt will be generated only if
    263  * Rx VMAC is enabled by vmacRxCfg::rxEn=1. Disabling Rx VMAC does
    264  * not affect currently-existing Ldf state. Writing this register
    265  * affects vmacRxStatMirror register bits also the same way.
    266  * Fields:
    267  *     Indicates that the counter for broadcast packets has exceeded
    268  *     the max value.
    269  *     Indicates that the counter for multicast packets has exceeded
    270  *     the max value.
    271  *     Indicates that the counter for pause packets has exceeded the
    272  *     max value.
    273  *     Indicates that the counter for packets with mismatched FCS has
    274  *     exceeded the max value.
    275  *     Indicates that counter of dropped byte has exceeded the max
    276  *     value.
    277  *     Indicates that counter of dropped frame has exceeded the max
    278  *     value.
    279  *     Indicates that counter of byte received has exceeded the max
    280  *     value.
    281  *     Indicates that counter of frame received has exceeded the max
    282  *     value.
    283  *     A valid frame has been successfully received.
    284  */
    285 typedef union {
    286 	uint64_t value;
    287 	struct {
    288 #if defined(_BIG_ENDIAN)
    289 		uint32_t	rsrvd:32;
    290 		uint32_t	rsrvd_l:23;
    291 		uint32_t	bcast_cnt_overflow:1;
    292 		uint32_t	mcast_cnt_overflow:1;
    293 		uint32_t	pause_cnt_overflow:1;
    294 		uint32_t	crc_err_cnt_overflow:1;
    295 		uint32_t	rx_drop_byte_cnt_overflow:1;
    296 		uint32_t	rx_drop_frame_cnt_overflow:1;
    297 		uint32_t	rx_byte_cnt_overflow:1;
    298 		uint32_t	rx_frame_cnt_overflow:1;
    299 		uint32_t	frame_rx:1;
    300 #else
    301 		uint32_t	frame_rx:1;
    302 		uint32_t	rx_frame_cnt_overflow:1;
    303 		uint32_t	rx_byte_cnt_overflow:1;
    304 		uint32_t	rx_drop_frame_cnt_overflow:1;
    305 		uint32_t	rx_drop_byte_cnt_overflow:1;
    306 		uint32_t	crc_err_cnt_overflow:1;
    307 		uint32_t	pause_cnt_overflow:1;
    308 		uint32_t	mcast_cnt_overflow:1;
    309 		uint32_t	bcast_cnt_overflow:1;
    310 		uint32_t	rsrvd_l:23;
    311 		uint32_t	rsrvd:32;
    312 #endif
    313 	} bits;
    314 } vmac_rx_stat_t;
    315 
    316 
    317 /*
    318  * Register: VmacRxMsk
    319  * Rx VMAC Status Mask
    320  * Description:
    321  * Fields:
    322  *     1: mask interrupt due to overflow of the counter for broadcast
    323  *     packets
    324  *     1: mask interrupt due to overflow of the counter for multicast
    325  *     packets
    326  *     1: mask interrupt due to overflow of the counter for pause
    327  *     packets
    328  *     1: mask interrupt due to overflow of the counter for packets
    329  *     with mismatched FCS the max value.
    330  *     1: mask interrupt due to overflow of dropped byte counter
    331  *     1: mask interrupt due to overflow of dropped frame counter
    332  *     1: mask interrupt due to overflow of received byte counter
    333  *     1: mask interrupt due to overflow of received frame counter
    334  *     1: mask interrupt due to a valid frame has been successfully
    335  *     received.
    336  */
    337 typedef union {
    338 	uint64_t value;
    339 	struct {
    340 #if defined(_BIG_ENDIAN)
    341 		uint32_t	rsrvd:32;
    342 		uint32_t	rsrvd_l:23;
    343 		uint32_t	bcast_cnt_overflow_msk:1;
    344 		uint32_t	mcast_cnt_overflow_msk:1;
    345 		uint32_t	pause_cnt_overflow_msk:1;
    346 		uint32_t	crc_err_cnt_overflow_msk:1;
    347 		uint32_t	rx_drop_byte_cnt_overflow_msk:1;
    348 		uint32_t	rx_drop_frame_cnt_overflow_msk:1;
    349 		uint32_t	rx_byte_cnt_overflow_msk:1;
    350 		uint32_t	rx_frame_cnt_overflow_msk:1;
    351 		uint32_t	frame_rx_msk:1;
    352 #else
    353 		uint32_t	frame_rx_msk:1;
    354 		uint32_t	rx_frame_cnt_overflow_msk:1;
    355 		uint32_t	rx_byte_cnt_overflow_msk:1;
    356 		uint32_t	rx_drop_frame_cnt_overflow_msk:1;
    357 		uint32_t	rx_drop_byte_cnt_overflow_msk:1;
    358 		uint32_t	crc_err_cnt_overflow_msk:1;
    359 		uint32_t	pause_cnt_overflow_msk:1;
    360 		uint32_t	mcast_cnt_overflow_msk:1;
    361 		uint32_t	bcast_cnt_overflow_msk:1;
    362 		uint32_t	rsrvd_l:23;
    363 		uint32_t	rsrvd:32;
    364 #endif
    365 	} bits;
    366 } vmac_rx_msk_t;
    367 
    368 
    369 /*
    370  * Register: VmacTxStatMirror
    371  * Tx VMAC Status Mirror Register
    372  * Description: Write a 1 to this register to force the corresponding
    373  * interrupt. Reading this register returns the current Tx interrupt
    374  * status which would be the same as reading the vmacTxStat register.
    375  * The bits are cleared by writing 1 to the corresponding register
    376  * bit in the vmacTxStat register. ie, bit 0 of this register is
    377  * cleared by writing 1 to bit 0 in the vmacTxStat register.
    378  *
    379  * Fields:
    380  *     1 : Force tx byte counter overflow interrupt generation
    381  *     1 : Force tx frame counter overflow interrupt generation
    382  *     1 : Force frame transmitted interrupt generation
    383  */
    384 typedef union {
    385 	uint64_t value;
    386 	struct {
    387 #if defined(_BIG_ENDIAN)
    388 		uint32_t	rsrvd:32;
    389 		uint32_t	rsrvd_l:29;
    390 		uint32_t	force_tx_byte_cnt_overflow:1;
    391 		uint32_t	force_tx_frame_cnt_overflow:1;
    392 		uint32_t	force_frame_tx:1;
    393 #else
    394 		uint32_t	force_frame_tx:1;
    395 		uint32_t	force_tx_frame_cnt_overflow:1;
    396 		uint32_t	force_tx_byte_cnt_overflow:1;
    397 		uint32_t	rsrvd_l:29;
    398 		uint32_t	rsrvd:32;
    399 #endif
    400 	} bits;
    401 } vmac_tx_stat_mirror_t;
    402 
    403 
    404 /*
    405  * Register: VmacRxStatMirror
    406  * Rx VMAC Status Mirror Register
    407  * Description: Write a 1 to this register to force the corresponding
    408  * interrupt. Reading this register returns the current Rx interrupt
    409  * status which would be the same as reading the vmacRxStat register.
    410  * The bits are cleared by writing 1 to the corresponding register
    411  * bit in the vmacRxStat register. ie, bit 0 of this register is
    412  * cleared by writing 1 to bit 0 in the vmacRxStat register.
    413  * Fields:
    414  *     1 : Force broadcast frame counter overflow interrupt
    415  *     generation
    416  *     1 : Force multicast frame counter overflow interrupt
    417  *     generation
    418  *     1 : Force pause frame counter overflow interrupt generation
    419  *     1 : Force crc error counter overflow interrupt generation
    420  *     1 : Force dropped frames byte counter overflow interrupt
    421  *     generation
    422  *     1 : Force dropped frame counter overflow interrupt generation
    423  *     1 : Force rx byte counter overflow interrupt generation
    424  *     1 : Force rx frame counter overflow interrupt generation
    425  *     1 : Force frame received interrupt generation
    426  */
    427 typedef union {
    428 	uint64_t value;
    429 	struct {
    430 #if defined(_BIG_ENDIAN)
    431 		uint32_t	rsrvd:32;
    432 		uint32_t	rsrvd_l:23;
    433 		uint32_t	force_bcast_cnt_overflow:1;
    434 		uint32_t	force_mcast_cnt_overflow:1;
    435 		uint32_t	force_pause_cnt_overflow:1;
    436 		uint32_t	force_crc_err_cnt_overflow:1;
    437 		uint32_t	force_rx_drop_byte_cnt_overflow:1;
    438 		uint32_t	force_rx_drop_frame_cnt_overflow:1;
    439 		uint32_t	force_rx_byte_cnt_overflow:1;
    440 		uint32_t	force_rx_frame_cnt_overflow:1;
    441 		uint32_t	force_frame_rx:1;
    442 #else
    443 		uint32_t	force_frame_rx:1;
    444 		uint32_t	force_rx_frame_cnt_overflow:1;
    445 		uint32_t	force_rx_byte_cnt_overflow:1;
    446 		uint32_t	force_rx_drop_frame_cnt_overflow:1;
    447 		uint32_t	force_rx_drop_byte_cnt_overflow:1;
    448 		uint32_t	force_crc_err_cnt_overflow:1;
    449 		uint32_t	force_pause_cnt_overflow:1;
    450 		uint32_t	force_mcast_cnt_overflow:1;
    451 		uint32_t	force_bcast_cnt_overflow:1;
    452 		uint32_t	rsrvd_l:23;
    453 		uint32_t	rsrvd:32;
    454 #endif
    455 	} bits;
    456 } vmac_rx_stat_mirror_t;
    457 
    458 
    459 /*
    460  * Register: VmacTxFrameCnt
    461  * VMAC transmitted frame counter
    462  * Description:
    463  * Fields:
    464  *     Indicates the number of frames transmitted by Tx VMAC. The
    465  *     counter will saturate at max value. The counter is stalled
    466  *     when Tx VMAC is disabled by vmacTxCfg::txEn=0
    467  */
    468 typedef union {
    469 	uint64_t value;
    470 	struct {
    471 #if defined(_BIG_ENDIAN)
    472 		uint32_t	rsrvd:32;
    473 		uint32_t	tx_frame_cnt:32;
    474 #else
    475 		uint32_t	tx_frame_cnt:32;
    476 		uint32_t	rsrvd:32;
    477 #endif
    478 	} bits;
    479 } vmac_tx_frame_cnt_t;
    480 
    481 
    482 /*
    483  * Register: VmacTxByteCnt
    484  * VMAC transmitted byte counter
    485  * Description:
    486  * Fields:
    487  *     Indicates the number of byte (octet) of data transmitted by Tx
    488  *     VMAC. This counter counts all the bytes of the incoming data
    489  *     including packet header, packet data, crc, and pad bytes. The
    490  *     counter will saturate at max value. The counter is stalled
    491  *     when Tx VMAC is disabled by vmacTxCfg::txEn=0
    492  */
    493 typedef union {
    494 	uint64_t value;
    495 	struct {
    496 #if defined(_BIG_ENDIAN)
    497 		uint32_t	rsrvd:32;
    498 		uint32_t	tx_byte_cnt:32;
    499 #else
    500 		uint32_t	tx_byte_cnt:32;
    501 		uint32_t	rsrvd:32;
    502 #endif
    503 	} bits;
    504 } vmac_tx_byte_cnt_t;
    505 
    506 
    507 /*
    508  * Register: VmacRxFrameCnt
    509  * VMAC received frame counter
    510  * Description:
    511  * Fields:
    512  *     Indicates the number of frame received by Rx VMAC. The counter
    513  *     will saturate at max value. The counter is stalled when Rx
    514  *     VMAC is disabled by vmacRxCfg::rxEn=0.
    515  */
    516 typedef union {
    517 	uint64_t value;
    518 	struct {
    519 #if defined(_BIG_ENDIAN)
    520 		uint32_t	rsrvd:32;
    521 		uint32_t	rx_frame_cnt:32;
    522 #else
    523 		uint32_t	rx_frame_cnt:32;
    524 		uint32_t	rsrvd:32;
    525 #endif
    526 	} bits;
    527 } vmac_rx_frame_cnt_t;
    528 
    529 
    530 /*
    531  * Register: VmacRxByteCnt
    532  * VMAC received byte counter
    533  * Description:
    534  * Fields:
    535  *     Indicates the number of bytes (octet) of data received by Rx
    536  *     VMAC including any error frames. The counter will saturate at
    537  *     max value. The counter is stalled when Rx VMAC is disabled by
    538  *     vmacRxCfg::rxEn=0.
    539  */
    540 typedef union {
    541 	uint64_t value;
    542 	struct {
    543 #if defined(_BIG_ENDIAN)
    544 		uint32_t	rsrvd:32;
    545 		uint32_t	rx_byte_cnt:32;
    546 #else
    547 		uint32_t	rx_byte_cnt:32;
    548 		uint32_t	rsrvd:32;
    549 #endif
    550 	} bits;
    551 } vmac_rx_byte_cnt_t;
    552 
    553 
    554 /*
    555  * Register: VmacRxDropFrCnt
    556  * VMAC dropped frame counter
    557  * Description:
    558  * Fields:
    559  *     Indicates the number of frame dropped by Rx VMAC. The counter
    560  *     will This counter increments for every frame dropped for the
    561  *     following: - crc mismatch & crc check is enabled - failed the
    562  *     L2 address match & Vmac is not in promiscuous mode - pause
    563  *     packet & Vmac is not programmed to pass these frames The
    564  *     counter will saturate at max value. The counter is stalled
    565  *     when Rx VMAC is disabled by vmacRxCfg::rxEn=0.
    566  */
    567 typedef union {
    568 	uint64_t value;
    569 	struct {
    570 #if defined(_BIG_ENDIAN)
    571 		uint32_t	rsrvd:32;
    572 		uint32_t	rx_drop_frame_cnt:32;
    573 #else
    574 		uint32_t	rx_drop_frame_cnt:32;
    575 		uint32_t	rsrvd:32;
    576 #endif
    577 	} bits;
    578 } vmac_rx_drop_fr_cnt_t;
    579 
    580 
    581 /*
    582  * Register: VmacRxDropByteCnt
    583  * VMAC dropped byte counter
    584  * Description:
    585  * Fields:
    586  *     Indicates the number of byte of data dropped by Rx VMAC.
    587  *     Frames are dropped for one of the follg conditions : - crc
    588  *     mismatch & crc check is enabled - failed the L2 address match
    589  *     & Vmac is not in promiscuous mode - pause packet & Vmac is not
    590  *     programmed to pass these frames The counter will saturate at
    591  *     max value. The counter is stalled when Rx VMAC is disabled by
    592  *     vmacRxCfg::rxEn=0.
    593  */
    594 typedef union {
    595 	uint64_t value;
    596 	struct {
    597 #if defined(_BIG_ENDIAN)
    598 		uint32_t	rsrvd:32;
    599 		uint32_t	rx_drop_byte_cnt:32;
    600 #else
    601 		uint32_t	rx_drop_byte_cnt:32;
    602 		uint32_t	rsrvd:32;
    603 #endif
    604 	} bits;
    605 } vmac_rx_drop_byte_cnt_t;
    606 
    607 
    608 /*
    609  * Register: VmacRxCrcCnt
    610  * VMAC received CRC error frame counter
    611  * Description:
    612  * Fields:
    613  *     Indicates the number of frames with invalid CRC. When NMAC
    614  *     truncates a packet, it asserts crcError indication to VMAC
    615  *     which then counts it towards CRC error. Thus the VMAC crc
    616  *     error counter reflects the CRC mismatches on all the packets
    617  *     going out of RxMAC while the NMAC crc error counter reflects
    618  *     the CRC mismatches on all the packets coming into RxMAC. The
    619  *     counter will saturate at max value The counter is stalled when
    620  *     Rx VMAC is disabled by vmacRxCfg::rxEn=0.
    621  */
    622 typedef union {
    623 	uint64_t value;
    624 	struct {
    625 #if defined(_BIG_ENDIAN)
    626 		uint32_t	rsrvd:32;
    627 		uint32_t	rx_crc_cnt:32;
    628 #else
    629 		uint32_t	rx_crc_cnt:32;
    630 		uint32_t	rsrvd:32;
    631 #endif
    632 	} bits;
    633 } vmac_rx_crc_cnt_t;
    634 
    635 
    636 /*
    637  * Register: VmacRxPauseCnt
    638  * VMAC received pause frame counter
    639  * Description:
    640  * Fields:
    641  *     Count the number of pause frames received by Rx VMAC. The
    642  *     counter is stalled when Rx VMAC is disabled by
    643  *     vmacRxCfg::rxEn=0.
    644  */
    645 typedef union {
    646 	uint64_t value;
    647 	struct {
    648 #if defined(_BIG_ENDIAN)
    649 		uint32_t	rsrvd:32;
    650 		uint32_t	rx_pause_cnt:32;
    651 #else
    652 		uint32_t	rx_pause_cnt:32;
    653 		uint32_t	rsrvd:32;
    654 #endif
    655 	} bits;
    656 } vmac_rx_pause_cnt_t;
    657 
    658 
    659 /*
    660  * Register: VmacRxBcastFrCnt
    661  * VMAC received broadcast frame counter
    662  * Description:
    663  * Fields:
    664  *     Indicates the number of broadcast frames received The counter
    665  *     is stalled when Rx VMAC is disabled by vmacRxCfg::rxEn=0.
    666  */
    667 typedef union {
    668 	uint64_t value;
    669 	struct {
    670 #if defined(_BIG_ENDIAN)
    671 		uint32_t	rsrvd:32;
    672 		uint32_t	rx_bcast_fr_cnt:32;
    673 #else
    674 		uint32_t	rx_bcast_fr_cnt:32;
    675 		uint32_t	rsrvd:32;
    676 #endif
    677 	} bits;
    678 } vmac_rx_bcast_fr_cnt_t;
    679 
    680 
    681 /*
    682  * Register: VmacRxMcastFrCnt
    683  * VMAC received multicast frame counter
    684  * Description:
    685  * Fields:
    686  *     Indicates the number of multicast frames received The counter
    687  *     is stalled when Rx VMAC is disabled by vmacRxCfg::rxEn=0.
    688  */
    689 typedef union {
    690 	uint64_t value;
    691 	struct {
    692 #if defined(_BIG_ENDIAN)
    693 		uint32_t	rsrvd:32;
    694 		uint32_t	rx_mcast_fr_cnt:32;
    695 #else
    696 		uint32_t	rx_mcast_fr_cnt:32;
    697 		uint32_t	rsrvd:32;
    698 #endif
    699 	} bits;
    700 } vmac_rx_mcast_fr_cnt_t;
    701 
    702 
    703 #ifdef	__cplusplus
    704 }
    705 #endif
    706 
    707 #endif	/* _HXGE_VMAC_HW_H */
    708