xref: /illumos-gate/usr/src/uts/common/io/hxge/hxge_vmac_hw.h (revision 66e150d7d3c0cb2de3c45c74612784ffd3e73de6)
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