2 * Linux network driver for Brocade Converged Network Adapter.
4 * This program is free software; you can redistribute it and/or modify it
5 * under the terms of the GNU General Public License (GPL) Version 2 as
6 * published by the Free Software Foundation
8 * This program is distributed in the hope that it will be useful, but
9 * WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
11 * General Public License for more details.
14 * Copyright (c) 2005-2011 Brocade Communications Systems, Inc.
19 /* BNA Hardware and Firmware Interface */
21 /* Skipping statistics collection to avoid clutter.
22 * Command is no longer needed:
28 * HDS-off request is dynamic
29 * keep structures as multiple of 32-bit fields for alignment.
30 * All values must be written in big-endian.
32 #ifndef __BFI_ENET_H__
33 #define __BFI_ENET_H__
40 #define BFI_ENET_CFG_MAX 32 /* Max resources per PF */
42 #define BFI_ENET_TXQ_PRIO_MAX 8
43 #define BFI_ENET_RX_QSET_MAX 16
44 #define BFI_ENET_TXQ_WI_VECT_MAX 4
46 #define BFI_ENET_VLAN_ID_MAX 4096
47 #define BFI_ENET_VLAN_BLOCK_SIZE 512 /* in bits */
48 #define BFI_ENET_VLAN_BLOCKS_MAX \
49 (BFI_ENET_VLAN_ID_MAX / BFI_ENET_VLAN_BLOCK_SIZE)
50 #define BFI_ENET_VLAN_WORD_SIZE 32 /* in bits */
51 #define BFI_ENET_VLAN_WORDS_MAX \
52 (BFI_ENET_VLAN_BLOCK_SIZE / BFI_ENET_VLAN_WORD_SIZE)
54 #define BFI_ENET_RSS_RIT_MAX 64 /* entries */
55 #define BFI_ENET_RSS_KEY_LEN 10 /* 32-bit words */
59 u32 addr_hi
; /* Most Significant 32-bits */
60 u32 addr_lo
; /* Least Significant 32-Bits */
64 /* T X Q U E U E D E F I N E S */
65 /* TxQ Vector (a.k.a. Tx-Buffer Descriptor) */
66 /* TxQ Entry Opcodes */
67 #define BFI_ENET_TXQ_WI_SEND (0x402) /* Single Frame Transmission */
68 #define BFI_ENET_TXQ_WI_SEND_LSO (0x403) /* Multi-Frame Transmission */
69 #define BFI_ENET_TXQ_WI_EXTENSION (0x104) /* Extension WI */
71 /* TxQ Entry Control Flags */
72 #define BFI_ENET_TXQ_WI_CF_FCOE_CRC (1 << 8)
73 #define BFI_ENET_TXQ_WI_CF_IPID_MODE (1 << 5)
74 #define BFI_ENET_TXQ_WI_CF_INS_PRIO (1 << 4)
75 #define BFI_ENET_TXQ_WI_CF_INS_VLAN (1 << 3)
76 #define BFI_ENET_TXQ_WI_CF_UDP_CKSUM (1 << 2)
77 #define BFI_ENET_TXQ_WI_CF_TCP_CKSUM (1 << 1)
78 #define BFI_ENET_TXQ_WI_CF_IP_CKSUM (1 << 0)
80 struct bfi_enet_txq_wi_base
{
82 u8 num_vectors
; /* number of vectors present */
84 /* BFI_ENET_TXQ_WI_SEND or BFI_ENET_TXQ_WI_SEND_LSO */
85 u16 flags
; /* OR of all the flags */
86 u16 l4_hdr_size_n_offset
;
88 u16 lso_mss
; /* Only 14 LSB are valid */
89 u32 frame_length
; /* Only 24 LSB are valid */
92 struct bfi_enet_txq_wi_ext
{
94 u16 opcode
; /* BFI_ENET_TXQ_WI_EXTENSION */
98 struct bfi_enet_txq_wi_vector
{ /* Tx Buffer Descriptor */
100 u16 length
; /* Only 14 LSB are valid */
101 union bfi_addr_be_u addr
;
104 /* TxQ Entry Structure */
105 struct bfi_enet_txq_entry
{
107 struct bfi_enet_txq_wi_base base
;
108 struct bfi_enet_txq_wi_ext ext
;
110 struct bfi_enet_txq_wi_vector vector
[BFI_ENET_TXQ_WI_VECT_MAX
];
113 #define wi_hdr wi.base
114 #define wi_ext_hdr wi.ext
116 #define BFI_ENET_TXQ_WI_L4_HDR_N_OFFSET(_hdr_size, _offset) \
117 (((_hdr_size) << 10) | ((_offset) & 0x3FF))
119 /* R X Q U E U E D E F I N E S */
120 struct bfi_enet_rxq_entry
{
121 union bfi_addr_be_u rx_buffer
;
124 /* R X C O M P L E T I O N Q U E U E D E F I N E S */
126 #define BFI_ENET_CQ_EF_MAC_ERROR (1 << 0)
127 #define BFI_ENET_CQ_EF_FCS_ERROR (1 << 1)
128 #define BFI_ENET_CQ_EF_TOO_LONG (1 << 2)
129 #define BFI_ENET_CQ_EF_FC_CRC_OK (1 << 3)
131 #define BFI_ENET_CQ_EF_RSVD1 (1 << 4)
132 #define BFI_ENET_CQ_EF_L4_CKSUM_OK (1 << 5)
133 #define BFI_ENET_CQ_EF_L3_CKSUM_OK (1 << 6)
134 #define BFI_ENET_CQ_EF_HDS_HEADER (1 << 7)
136 #define BFI_ENET_CQ_EF_UDP (1 << 8)
137 #define BFI_ENET_CQ_EF_TCP (1 << 9)
138 #define BFI_ENET_CQ_EF_IP_OPTIONS (1 << 10)
139 #define BFI_ENET_CQ_EF_IPV6 (1 << 11)
141 #define BFI_ENET_CQ_EF_IPV4 (1 << 12)
142 #define BFI_ENET_CQ_EF_VLAN (1 << 13)
143 #define BFI_ENET_CQ_EF_RSS (1 << 14)
144 #define BFI_ENET_CQ_EF_RSVD2 (1 << 15)
146 #define BFI_ENET_CQ_EF_MCAST_MATCH (1 << 16)
147 #define BFI_ENET_CQ_EF_MCAST (1 << 17)
148 #define BFI_ENET_CQ_EF_BCAST (1 << 18)
149 #define BFI_ENET_CQ_EF_REMOTE (1 << 19)
151 #define BFI_ENET_CQ_EF_LOCAL (1 << 20)
153 /* CQ Entry Structure */
154 struct bfi_enet_cq_entry
{
165 /* E N E T C O N T R O L P A T H C O M M A N D S */
167 union bfi_addr_u pg_tbl
;
168 union bfi_addr_u first_entry
;
169 u16 pages
; /* # of pages */
173 struct bfi_enet_txq
{
179 struct bfi_enet_rxq
{
189 struct bfi_enet_ib_cfg
{
193 u8 continuous_coalescing
;
196 u32 coalescing_timeout
;
197 u32 inter_pkt_timeout
;
203 union bfi_addr_u index_addr
;
211 /* ENET command messages */
212 enum bfi_enet_h2i_msgs
{
214 BFI_ENET_H2I_RX_CFG_SET_REQ
= 1,
215 BFI_ENET_H2I_RX_CFG_CLR_REQ
= 2,
217 BFI_ENET_H2I_RIT_CFG_REQ
= 3,
218 BFI_ENET_H2I_RSS_CFG_REQ
= 4,
219 BFI_ENET_H2I_RSS_ENABLE_REQ
= 5,
220 BFI_ENET_H2I_RX_PROMISCUOUS_REQ
= 6,
221 BFI_ENET_H2I_RX_DEFAULT_REQ
= 7,
223 BFI_ENET_H2I_MAC_UCAST_SET_REQ
= 8,
224 BFI_ENET_H2I_MAC_UCAST_CLR_REQ
= 9,
225 BFI_ENET_H2I_MAC_UCAST_ADD_REQ
= 10,
226 BFI_ENET_H2I_MAC_UCAST_DEL_REQ
= 11,
228 BFI_ENET_H2I_MAC_MCAST_ADD_REQ
= 12,
229 BFI_ENET_H2I_MAC_MCAST_DEL_REQ
= 13,
230 BFI_ENET_H2I_MAC_MCAST_FILTER_REQ
= 14,
232 BFI_ENET_H2I_RX_VLAN_SET_REQ
= 15,
233 BFI_ENET_H2I_RX_VLAN_STRIP_ENABLE_REQ
= 16,
236 BFI_ENET_H2I_TX_CFG_SET_REQ
= 17,
237 BFI_ENET_H2I_TX_CFG_CLR_REQ
= 18,
240 BFI_ENET_H2I_PORT_ADMIN_UP_REQ
= 19,
241 BFI_ENET_H2I_SET_PAUSE_REQ
= 20,
242 BFI_ENET_H2I_DIAG_LOOPBACK_REQ
= 21,
244 /* Get Attributes Command */
245 BFI_ENET_H2I_GET_ATTR_REQ
= 22,
247 /* Statistics Commands */
248 BFI_ENET_H2I_STATS_GET_REQ
= 23,
249 BFI_ENET_H2I_STATS_CLR_REQ
= 24,
251 BFI_ENET_H2I_WOL_MAGIC_REQ
= 25,
252 BFI_ENET_H2I_WOL_FRAME_REQ
= 26,
254 BFI_ENET_H2I_MAX
= 27,
257 enum bfi_enet_i2h_msgs
{
259 BFI_ENET_I2H_RX_CFG_SET_RSP
=
260 BFA_I2HM(BFI_ENET_H2I_RX_CFG_SET_REQ
),
261 BFI_ENET_I2H_RX_CFG_CLR_RSP
=
262 BFA_I2HM(BFI_ENET_H2I_RX_CFG_CLR_REQ
),
264 BFI_ENET_I2H_RIT_CFG_RSP
=
265 BFA_I2HM(BFI_ENET_H2I_RIT_CFG_REQ
),
266 BFI_ENET_I2H_RSS_CFG_RSP
=
267 BFA_I2HM(BFI_ENET_H2I_RSS_CFG_REQ
),
268 BFI_ENET_I2H_RSS_ENABLE_RSP
=
269 BFA_I2HM(BFI_ENET_H2I_RSS_ENABLE_REQ
),
270 BFI_ENET_I2H_RX_PROMISCUOUS_RSP
=
271 BFA_I2HM(BFI_ENET_H2I_RX_PROMISCUOUS_REQ
),
272 BFI_ENET_I2H_RX_DEFAULT_RSP
=
273 BFA_I2HM(BFI_ENET_H2I_RX_DEFAULT_REQ
),
275 BFI_ENET_I2H_MAC_UCAST_SET_RSP
=
276 BFA_I2HM(BFI_ENET_H2I_MAC_UCAST_SET_REQ
),
277 BFI_ENET_I2H_MAC_UCAST_CLR_RSP
=
278 BFA_I2HM(BFI_ENET_H2I_MAC_UCAST_CLR_REQ
),
279 BFI_ENET_I2H_MAC_UCAST_ADD_RSP
=
280 BFA_I2HM(BFI_ENET_H2I_MAC_UCAST_ADD_REQ
),
281 BFI_ENET_I2H_MAC_UCAST_DEL_RSP
=
282 BFA_I2HM(BFI_ENET_H2I_MAC_UCAST_DEL_REQ
),
284 BFI_ENET_I2H_MAC_MCAST_ADD_RSP
=
285 BFA_I2HM(BFI_ENET_H2I_MAC_MCAST_ADD_REQ
),
286 BFI_ENET_I2H_MAC_MCAST_DEL_RSP
=
287 BFA_I2HM(BFI_ENET_H2I_MAC_MCAST_DEL_REQ
),
288 BFI_ENET_I2H_MAC_MCAST_FILTER_RSP
=
289 BFA_I2HM(BFI_ENET_H2I_MAC_MCAST_FILTER_REQ
),
291 BFI_ENET_I2H_RX_VLAN_SET_RSP
=
292 BFA_I2HM(BFI_ENET_H2I_RX_VLAN_SET_REQ
),
294 BFI_ENET_I2H_RX_VLAN_STRIP_ENABLE_RSP
=
295 BFA_I2HM(BFI_ENET_H2I_RX_VLAN_STRIP_ENABLE_REQ
),
298 BFI_ENET_I2H_TX_CFG_SET_RSP
=
299 BFA_I2HM(BFI_ENET_H2I_TX_CFG_SET_REQ
),
300 BFI_ENET_I2H_TX_CFG_CLR_RSP
=
301 BFA_I2HM(BFI_ENET_H2I_TX_CFG_CLR_REQ
),
304 BFI_ENET_I2H_PORT_ADMIN_RSP
=
305 BFA_I2HM(BFI_ENET_H2I_PORT_ADMIN_UP_REQ
),
307 BFI_ENET_I2H_SET_PAUSE_RSP
=
308 BFA_I2HM(BFI_ENET_H2I_SET_PAUSE_REQ
),
309 BFI_ENET_I2H_DIAG_LOOPBACK_RSP
=
310 BFA_I2HM(BFI_ENET_H2I_DIAG_LOOPBACK_REQ
),
312 /* Attributes Response */
313 BFI_ENET_I2H_GET_ATTR_RSP
=
314 BFA_I2HM(BFI_ENET_H2I_GET_ATTR_REQ
),
316 /* Statistics Responses */
317 BFI_ENET_I2H_STATS_GET_RSP
=
318 BFA_I2HM(BFI_ENET_H2I_STATS_GET_REQ
),
319 BFI_ENET_I2H_STATS_CLR_RSP
=
320 BFA_I2HM(BFI_ENET_H2I_STATS_CLR_REQ
),
322 BFI_ENET_I2H_WOL_MAGIC_RSP
=
323 BFA_I2HM(BFI_ENET_H2I_WOL_MAGIC_REQ
),
324 BFI_ENET_I2H_WOL_FRAME_RSP
=
325 BFA_I2HM(BFI_ENET_H2I_WOL_FRAME_REQ
),
328 BFI_ENET_I2H_LINK_DOWN_AEN
= BFA_I2HM(BFI_ENET_H2I_MAX
),
329 BFI_ENET_I2H_LINK_UP_AEN
= BFA_I2HM(BFI_ENET_H2I_MAX
+ 1),
331 BFI_ENET_I2H_PORT_ENABLE_AEN
= BFA_I2HM(BFI_ENET_H2I_MAX
+ 2),
332 BFI_ENET_I2H_PORT_DISABLE_AEN
= BFA_I2HM(BFI_ENET_H2I_MAX
+ 3),
334 BFI_ENET_I2H_BW_UPDATE_AEN
= BFA_I2HM(BFI_ENET_H2I_MAX
+ 4),
337 /* The following error codes can be returned by the enet commands */
340 BFI_ENET_CMD_FAIL
= 1,
341 BFI_ENET_CMD_DUP_ENTRY
= 2, /* !< Duplicate entry in CAM */
342 BFI_ENET_CMD_CAM_FULL
= 3, /* !< CAM is full */
343 BFI_ENET_CMD_NOT_OWNER
= 4, /* !< Not permitted, b'cos not owner */
344 BFI_ENET_CMD_NOT_EXEC
= 5, /* !< Was not sent to f/w at all */
345 BFI_ENET_CMD_WAITING
= 6, /* !< Waiting for completion */
346 BFI_ENET_CMD_PORT_DISABLED
= 7, /* !< port in disabled state */
351 * bfi_enet_req is used by:
352 * BFI_ENET_H2I_RX_CFG_CLR_REQ
353 * BFI_ENET_H2I_TX_CFG_CLR_REQ
355 struct bfi_enet_req
{
356 struct bfi_msgq_mhdr mh
;
359 /* Enable/Disable Request
361 * bfi_enet_enable_req is used by:
362 * BFI_ENET_H2I_RSS_ENABLE_REQ (enet_id must be zero)
363 * BFI_ENET_H2I_RX_PROMISCUOUS_REQ (enet_id must be zero)
364 * BFI_ENET_H2I_RX_DEFAULT_REQ (enet_id must be zero)
365 * BFI_ENET_H2I_RX_MAC_MCAST_FILTER_REQ
366 * BFI_ENET_H2I_PORT_ADMIN_UP_REQ (enet_id must be zero)
368 struct bfi_enet_enable_req
{
369 struct bfi_msgq_mhdr mh
;
370 u8 enable
; /* 1 = enable; 0 = disable */
374 /* Generic Response */
375 struct bfi_enet_rsp
{
376 struct bfi_msgq_mhdr mh
;
377 u8 error
; /*!< if error see cmd_offset */
379 u16 cmd_offset
; /*!< offset to invalid parameter */
382 /* GLOBAL CONFIGURATION */
384 /* bfi_enet_attr_req is used by:
385 * BFI_ENET_H2I_GET_ATTR_REQ
387 struct bfi_enet_attr_req
{
388 struct bfi_msgq_mhdr mh
;
391 /* bfi_enet_attr_rsp is used by:
392 * BFI_ENET_I2H_GET_ATTR_RSP
394 struct bfi_enet_attr_rsp
{
395 struct bfi_msgq_mhdr mh
;
396 u8 error
; /*!< if error see cmd_offset */
398 u16 cmd_offset
; /*!< offset to invalid parameter */
406 * bfi_enet_tx_cfg is used by:
407 * BFI_ENET_H2I_TX_CFG_SET_REQ
409 enum bfi_enet_tx_vlan_mode
{
410 BFI_ENET_TX_VLAN_NOP
= 0,
411 BFI_ENET_TX_VLAN_INS
= 1,
412 BFI_ENET_TX_VLAN_WI
= 2,
415 struct bfi_enet_tx_cfg
{
416 u8 vlan_mode
; /*!< processing mode */
419 u8 admit_tagged_frame
;
420 u8 apply_vlan_filter
;
425 struct bfi_enet_tx_cfg_req
{
426 struct bfi_msgq_mhdr mh
;
427 u8 num_queues
; /* # of Tx Queues */
431 struct bfi_enet_txq q
;
432 struct bfi_enet_ib ib
;
433 } q_cfg
[BFI_ENET_TXQ_PRIO_MAX
];
435 struct bfi_enet_ib_cfg ib_cfg
;
437 struct bfi_enet_tx_cfg tx_cfg
;
440 struct bfi_enet_tx_cfg_rsp
{
441 struct bfi_msgq_mhdr mh
;
443 u8 hw_id
; /* For debugging */
446 u32 q_dbell
; /* PCI base address offset */
447 u32 i_dbell
; /* PCI base address offset */
448 u8 hw_qid
; /* For debugging */
450 } q_handles
[BFI_ENET_TXQ_PRIO_MAX
];
455 * bfi_enet_rx_cfg is used by:
456 * BFI_ENET_H2I_RX_CFG_SET_REQ
458 enum bfi_enet_rxq_type
{
459 BFI_ENET_RXQ_SINGLE
= 1,
460 BFI_ENET_RXQ_LARGE_SMALL
= 2,
461 BFI_ENET_RXQ_HDS
= 3,
462 BFI_ENET_RXQ_HDS_OPT_BASED
= 4,
465 enum bfi_enet_hds_type
{
466 BFI_ENET_HDS_FORCED
= 0x01,
467 BFI_ENET_HDS_IPV6_UDP
= 0x02,
468 BFI_ENET_HDS_IPV6_TCP
= 0x04,
469 BFI_ENET_HDS_IPV4_TCP
= 0x08,
470 BFI_ENET_HDS_IPV4_UDP
= 0x10,
473 struct bfi_enet_rx_cfg
{
492 * Multicast frames are received on the ql of q-set index zero.
493 * On the completion queue. RxQ ID = even is for large/data buffer queues
494 * and RxQ ID = odd is for small/header buffer queues.
496 struct bfi_enet_rx_cfg_req
{
497 struct bfi_msgq_mhdr mh
;
498 u8 num_queue_sets
; /* # of Rx Queue Sets */
502 struct bfi_enet_rxq ql
; /* large/data/single buffers */
503 struct bfi_enet_rxq qs
; /* small/header buffers */
504 struct bfi_enet_cq cq
;
505 struct bfi_enet_ib ib
;
506 } q_cfg
[BFI_ENET_RX_QSET_MAX
];
508 struct bfi_enet_ib_cfg ib_cfg
;
510 struct bfi_enet_rx_cfg rx_cfg
;
513 struct bfi_enet_rx_cfg_rsp
{
514 struct bfi_msgq_mhdr mh
;
516 u8 hw_id
; /* For debugging */
519 u32 ql_dbell
; /* PCI base address offset */
520 u32 qs_dbell
; /* PCI base address offset */
521 u32 i_dbell
; /* PCI base address offset */
522 u8 hw_lqid
; /* For debugging */
523 u8 hw_sqid
; /* For debugging */
524 u8 hw_cqid
; /* For debugging */
526 } q_handles
[BFI_ENET_RX_QSET_MAX
];
531 * bfi_enet_rit_req is used by:
532 * BFI_ENET_H2I_RIT_CFG_REQ
534 struct bfi_enet_rit_req
{
535 struct bfi_msgq_mhdr mh
;
536 u16 size
; /* number of table-entries used */
538 u8 table
[BFI_ENET_RSS_RIT_MAX
];
543 * bfi_enet_rss_cfg_req is used by:
544 * BFI_ENET_H2I_RSS_CFG_REQ
546 enum bfi_enet_rss_type
{
547 BFI_ENET_RSS_IPV6
= 0x01,
548 BFI_ENET_RSS_IPV6_TCP
= 0x02,
549 BFI_ENET_RSS_IPV4
= 0x04,
550 BFI_ENET_RSS_IPV4_TCP
= 0x08
553 struct bfi_enet_rss_cfg
{
557 u32 key
[BFI_ENET_RSS_KEY_LEN
];
560 struct bfi_enet_rss_cfg_req
{
561 struct bfi_msgq_mhdr mh
;
562 struct bfi_enet_rss_cfg cfg
;
567 * bfi_enet_rx_vlan_req is used by:
568 * BFI_ENET_H2I_MAC_UCAST_SET_REQ
569 * BFI_ENET_H2I_MAC_UCAST_CLR_REQ
570 * BFI_ENET_H2I_MAC_UCAST_ADD_REQ
571 * BFI_ENET_H2I_MAC_UCAST_DEL_REQ
573 struct bfi_enet_ucast_req
{
574 struct bfi_msgq_mhdr mh
;
579 /* MAC Unicast + VLAN */
580 struct bfi_enet_mac_n_vlan_req
{
581 struct bfi_msgq_mhdr mh
;
588 * bfi_enet_mac_mfilter_add_req is used by:
589 * BFI_ENET_H2I_MAC_MCAST_ADD_REQ
591 struct bfi_enet_mcast_add_req
{
592 struct bfi_msgq_mhdr mh
;
597 /* bfi_enet_mac_mfilter_add_rsp is used by:
598 * BFI_ENET_I2H_MAC_MCAST_ADD_RSP
600 struct bfi_enet_mcast_add_rsp
{
601 struct bfi_msgq_mhdr mh
;
609 /* bfi_enet_mac_mfilter_del_req is used by:
610 * BFI_ENET_H2I_MAC_MCAST_DEL_REQ
612 struct bfi_enet_mcast_del_req
{
613 struct bfi_msgq_mhdr mh
;
620 * bfi_enet_rx_vlan_req is used by:
621 * BFI_ENET_H2I_RX_VLAN_SET_REQ
623 struct bfi_enet_rx_vlan_req
{
624 struct bfi_msgq_mhdr mh
;
627 u32 bit_mask
[BFI_ENET_VLAN_WORDS_MAX
];
632 * bfi_enet_set_pause_req is used by:
633 * BFI_ENET_H2I_SET_PAUSE_REQ
635 struct bfi_enet_set_pause_req
{
636 struct bfi_msgq_mhdr mh
;
638 u8 tx_pause
; /* 1 = enable; 0 = disable */
639 u8 rx_pause
; /* 1 = enable; 0 = disable */
644 * bfi_enet_diag_lb_req is used by:
645 * BFI_ENET_H2I_DIAG_LOOPBACK
647 struct bfi_enet_diag_lb_req
{
648 struct bfi_msgq_mhdr mh
;
650 u8 mode
; /* cable or Serdes */
651 u8 enable
; /* 1 = enable; 0 = disable */
654 /* enum for Loopback opmodes */
656 BFI_ENET_DIAG_LB_OPMODE_EXT
= 0,
657 BFI_ENET_DIAG_LB_OPMODE_CBL
= 1,
662 * bfi_enet_stats_req is used by:
663 * BFI_ENET_H2I_STATS_GET_REQ
664 * BFI_ENET_I2H_STATS_CLR_REQ
666 struct bfi_enet_stats_req
{
667 struct bfi_msgq_mhdr mh
;
672 union bfi_addr_u host_buffer
;
675 /* defines for "stats_mask" above. */
676 #define BFI_ENET_STATS_MAC (1 << 0) /* !< MAC Statistics */
677 #define BFI_ENET_STATS_BPC (1 << 1) /* !< Pause Stats from BPC */
678 #define BFI_ENET_STATS_RAD (1 << 2) /* !< Rx Admission Statistics */
679 #define BFI_ENET_STATS_RX_FC (1 << 3) /* !< Rx FC Stats from RxA */
680 #define BFI_ENET_STATS_TX_FC (1 << 4) /* !< Tx FC Stats from TxA */
682 #define BFI_ENET_STATS_ALL 0x1f
684 /* TxF Frame Statistics */
685 struct bfi_enet_stats_txf
{
699 u64 filter_vlan
; /* frames filtered due to VLAN */
700 u64 filter_mac_sa
; /* frames filtered due to SA check */
703 /* RxF Frame Statistics */
704 struct bfi_enet_stats_rxf
{
719 /* FC Tx Frame Statistics */
720 struct bfi_enet_stats_fc_tx
{
721 u64 txf_ucast_octets
;
725 u64 txf_mcast_octets
;
729 u64 txf_bcast_octets
;
733 u64 txf_parity_errors
;
735 u64 txf_fid_parity_errors
;
738 /* FC Rx Frame Statistics */
739 struct bfi_enet_stats_fc_rx
{
740 u64 rxf_ucast_octets
;
744 u64 rxf_mcast_octets
;
748 u64 rxf_bcast_octets
;
753 /* RAD Frame Statistics */
754 struct bfi_enet_stats_rad
{
774 /* BPC Tx Registers */
775 struct bfi_enet_stats_bpc
{
778 u64 tx_zero_pause
[8]; /*!< Pause cancellation */
779 /*!<Pause initiation rather than retention */
780 u64 tx_first_pause
[8];
784 u64 rx_zero_pause
[8]; /*!< Pause cancellation */
785 /*!<Pause initiation rather than retention */
786 u64 rx_first_pause
[8];
789 /* MAC Rx Statistics */
790 struct bfi_enet_stats_mac
{
791 u64 stats_clr_cnt
; /* times this stats cleared */
792 u64 frame_64
; /* both rx and tx counter */
793 u64 frame_65_127
; /* both rx and tx counter */
794 u64 frame_128_255
; /* both rx and tx counter */
795 u64 frame_256_511
; /* both rx and tx counter */
796 u64 frame_512_1023
; /* both rx and tx counter */
797 u64 frame_1024_1518
; /* both rx and tx counter */
798 u64 frame_1519_1522
; /* both rx and tx counter */
806 u64 rx_control_frames
;
808 u64 rx_unknown_opcode
;
809 u64 rx_alignment_error
;
810 u64 rx_frame_length_error
;
812 u64 rx_carrier_sense_error
;
826 u64 tx_excessive_deferral
;
827 u64 tx_single_collision
;
828 u64 tx_muliple_collision
;
829 u64 tx_late_collision
;
830 u64 tx_excessive_collision
;
831 u64 tx_total_collision
;
832 u64 tx_pause_honored
;
836 u64 tx_control_frame
;
842 /* Complete statistics, DMAed from fw to host followed by
843 * BFI_ENET_I2H_STATS_GET_RSP
845 struct bfi_enet_stats
{
846 struct bfi_enet_stats_mac mac_stats
;
847 struct bfi_enet_stats_bpc bpc_stats
;
848 struct bfi_enet_stats_rad rad_stats
;
849 struct bfi_enet_stats_rad rlb_stats
;
850 struct bfi_enet_stats_fc_rx fc_rx_stats
;
851 struct bfi_enet_stats_fc_tx fc_tx_stats
;
852 struct bfi_enet_stats_rxf rxf_stats
[BFI_ENET_CFG_MAX
];
853 struct bfi_enet_stats_txf txf_stats
[BFI_ENET_CFG_MAX
];
858 #endif /* __BFI_ENET_H__ */