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