These changes are the raw update to linux-4.4.6-rt14. Kernel sources
[kvmfornfv.git] / kernel / drivers / net / ethernet / brocade / bna / bfi_enet.h
1 /*
2  * Linux network driver for QLogic BR-series Converged Network Adapter.
3  *
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
7  *
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.
12  */
13 /*
14  * Copyright (c) 2005-2014 Brocade Communications Systems, Inc.
15  * Copyright (c) 2014-2015 QLogic Corporation
16  * All rights reserved
17  * www.qlogic.com
18  */
19
20 /* BNA Hardware and Firmware Interface */
21
22 /* Skipping statistics collection to avoid clutter.
23  * Command is no longer needed:
24  *      MTU
25  *      TxQ Stop
26  *      RxQ Stop
27  *      RxF Enable/Disable
28  *
29  * HDS-off request is dynamic
30  * keep structures as multiple of 32-bit fields for alignment.
31  * All values must be written in big-endian.
32  */
33 #ifndef __BFI_ENET_H__
34 #define __BFI_ENET_H__
35
36 #include "bfa_defs.h"
37 #include "bfi.h"
38
39 #define BFI_ENET_CFG_MAX                32      /* Max resources per PF */
40
41 #define BFI_ENET_TXQ_PRIO_MAX           8
42 #define BFI_ENET_RX_QSET_MAX            16
43 #define BFI_ENET_TXQ_WI_VECT_MAX        4
44
45 #define BFI_ENET_VLAN_ID_MAX            4096
46 #define BFI_ENET_VLAN_BLOCK_SIZE        512     /* in bits */
47 #define BFI_ENET_VLAN_BLOCKS_MAX                                        \
48         (BFI_ENET_VLAN_ID_MAX / BFI_ENET_VLAN_BLOCK_SIZE)
49 #define BFI_ENET_VLAN_WORD_SIZE         32      /* in bits */
50 #define BFI_ENET_VLAN_WORDS_MAX                                         \
51         (BFI_ENET_VLAN_BLOCK_SIZE / BFI_ENET_VLAN_WORD_SIZE)
52
53 #define BFI_ENET_RSS_RIT_MAX            64      /* entries */
54 #define BFI_ENET_RSS_KEY_LEN            10      /* 32-bit words */
55
56 union bfi_addr_be_u {
57         struct {
58                 u32     addr_hi;        /* Most Significant 32-bits */
59                 u32     addr_lo;        /* Least Significant 32-Bits */
60         } __packed a32;
61 } __packed;
62
63 /*      T X   Q U E U E   D E F I N E S      */
64 /* TxQ Vector (a.k.a. Tx-Buffer Descriptor) */
65 /* TxQ Entry Opcodes */
66 #define BFI_ENET_TXQ_WI_SEND            (0x402) /* Single Frame Transmission */
67 #define BFI_ENET_TXQ_WI_SEND_LSO        (0x403) /* Multi-Frame Transmission */
68 #define BFI_ENET_TXQ_WI_EXTENSION       (0x104) /* Extension WI */
69
70 /* TxQ Entry Control Flags */
71 #define BFI_ENET_TXQ_WI_CF_FCOE_CRC     BIT(8)
72 #define BFI_ENET_TXQ_WI_CF_IPID_MODE    BIT(5)
73 #define BFI_ENET_TXQ_WI_CF_INS_PRIO     BIT(4)
74 #define BFI_ENET_TXQ_WI_CF_INS_VLAN     BIT(3)
75 #define BFI_ENET_TXQ_WI_CF_UDP_CKSUM    BIT(2)
76 #define BFI_ENET_TXQ_WI_CF_TCP_CKSUM    BIT(1)
77 #define BFI_ENET_TXQ_WI_CF_IP_CKSUM     BIT(0)
78
79 struct bfi_enet_txq_wi_base {
80         u8                      reserved;
81         u8                      num_vectors;    /* number of vectors present */
82         u16                     opcode;
83                         /* BFI_ENET_TXQ_WI_SEND or BFI_ENET_TXQ_WI_SEND_LSO */
84         u16                     flags;          /* OR of all the flags */
85         u16                     l4_hdr_size_n_offset;
86         u16                     vlan_tag;
87         u16                     lso_mss;        /* Only 14 LSB are valid */
88         u32                     frame_length;   /* Only 24 LSB are valid */
89 } __packed;
90
91 struct bfi_enet_txq_wi_ext {
92         u16                     reserved;
93         u16                     opcode;         /* BFI_ENET_TXQ_WI_EXTENSION */
94         u32                     reserved2[3];
95 } __packed;
96
97 struct bfi_enet_txq_wi_vector {                 /* Tx Buffer Descriptor */
98         u16                     reserved;
99         u16                     length;         /* Only 14 LSB are valid */
100         union bfi_addr_be_u     addr;
101 } __packed;
102
103 /*  TxQ Entry Structure  */
104 struct bfi_enet_txq_entry {
105         union {
106                 struct bfi_enet_txq_wi_base     base;
107                 struct bfi_enet_txq_wi_ext      ext;
108         } __packed wi;
109         struct bfi_enet_txq_wi_vector vector[BFI_ENET_TXQ_WI_VECT_MAX];
110 } __packed;
111
112 #define wi_hdr          wi.base
113 #define wi_ext_hdr      wi.ext
114
115 #define BFI_ENET_TXQ_WI_L4_HDR_N_OFFSET(_hdr_size, _offset) \
116                 (((_hdr_size) << 10) | ((_offset) & 0x3FF))
117
118 /*   R X   Q U E U E   D E F I N E S   */
119 struct bfi_enet_rxq_entry {
120         union bfi_addr_be_u  rx_buffer;
121 } __packed;
122
123 /*   R X   C O M P L E T I O N   Q U E U E   D E F I N E S   */
124 /* CQ Entry Flags */
125 #define BFI_ENET_CQ_EF_MAC_ERROR        BIT(0)
126 #define BFI_ENET_CQ_EF_FCS_ERROR        BIT(1)
127 #define BFI_ENET_CQ_EF_TOO_LONG         BIT(2)
128 #define BFI_ENET_CQ_EF_FC_CRC_OK        BIT(3)
129
130 #define BFI_ENET_CQ_EF_RSVD1            BIT(4)
131 #define BFI_ENET_CQ_EF_L4_CKSUM_OK      BIT(5)
132 #define BFI_ENET_CQ_EF_L3_CKSUM_OK      BIT(6)
133 #define BFI_ENET_CQ_EF_HDS_HEADER       BIT(7)
134
135 #define BFI_ENET_CQ_EF_UDP              BIT(8)
136 #define BFI_ENET_CQ_EF_TCP              BIT(9)
137 #define BFI_ENET_CQ_EF_IP_OPTIONS       BIT(10)
138 #define BFI_ENET_CQ_EF_IPV6             BIT(11)
139
140 #define BFI_ENET_CQ_EF_IPV4             BIT(12)
141 #define BFI_ENET_CQ_EF_VLAN             BIT(13)
142 #define BFI_ENET_CQ_EF_RSS              BIT(14)
143 #define BFI_ENET_CQ_EF_RSVD2            BIT(15)
144
145 #define BFI_ENET_CQ_EF_MCAST_MATCH      BIT(16)
146 #define BFI_ENET_CQ_EF_MCAST            BIT(17)
147 #define BFI_ENET_CQ_EF_BCAST            BIT(18)
148 #define BFI_ENET_CQ_EF_REMOTE           BIT(19)
149
150 #define BFI_ENET_CQ_EF_LOCAL            BIT(20)
151
152 /* CQ Entry Structure */
153 struct bfi_enet_cq_entry {
154         u32 flags;
155         u16     vlan_tag;
156         u16     length;
157         u32     rss_hash;
158         u8      valid;
159         u8      reserved1;
160         u8      reserved2;
161         u8      rxq_id;
162 } __packed;
163
164 /*   E N E T   C O N T R O L   P A T H   C O M M A N D S   */
165 struct bfi_enet_q {
166         union bfi_addr_u        pg_tbl;
167         union bfi_addr_u        first_entry;
168         u16             pages;  /* # of pages */
169         u16             page_sz;
170 } __packed;
171
172 struct bfi_enet_txq {
173         struct bfi_enet_q       q;
174         u8                      priority;
175         u8                      rsvd[3];
176 } __packed;
177
178 struct bfi_enet_rxq {
179         struct bfi_enet_q       q;
180         u16             rx_buffer_size;
181         u16             rsvd;
182 } __packed;
183
184 struct bfi_enet_cq {
185         struct bfi_enet_q       q;
186 } __packed;
187
188 struct bfi_enet_ib_cfg {
189         u8              int_pkt_dma;
190         u8              int_enabled;
191         u8              int_pkt_enabled;
192         u8              continuous_coalescing;
193         u8              msix;
194         u8              rsvd[3];
195         u32     coalescing_timeout;
196         u32     inter_pkt_timeout;
197         u8              inter_pkt_count;
198         u8              rsvd1[3];
199 } __packed;
200
201 struct bfi_enet_ib {
202         union bfi_addr_u        index_addr;
203         union {
204                 u16     msix_index;
205                 u16     intx_bitmask;
206         } __packed intr;
207         u16             rsvd;
208 } __packed;
209
210 /* ENET command messages */
211 enum bfi_enet_h2i_msgs {
212         /* Rx Commands */
213         BFI_ENET_H2I_RX_CFG_SET_REQ = 1,
214         BFI_ENET_H2I_RX_CFG_CLR_REQ = 2,
215
216         BFI_ENET_H2I_RIT_CFG_REQ = 3,
217         BFI_ENET_H2I_RSS_CFG_REQ = 4,
218         BFI_ENET_H2I_RSS_ENABLE_REQ = 5,
219         BFI_ENET_H2I_RX_PROMISCUOUS_REQ = 6,
220         BFI_ENET_H2I_RX_DEFAULT_REQ = 7,
221
222         BFI_ENET_H2I_MAC_UCAST_SET_REQ = 8,
223         BFI_ENET_H2I_MAC_UCAST_CLR_REQ = 9,
224         BFI_ENET_H2I_MAC_UCAST_ADD_REQ = 10,
225         BFI_ENET_H2I_MAC_UCAST_DEL_REQ = 11,
226
227         BFI_ENET_H2I_MAC_MCAST_ADD_REQ = 12,
228         BFI_ENET_H2I_MAC_MCAST_DEL_REQ = 13,
229         BFI_ENET_H2I_MAC_MCAST_FILTER_REQ = 14,
230
231         BFI_ENET_H2I_RX_VLAN_SET_REQ = 15,
232         BFI_ENET_H2I_RX_VLAN_STRIP_ENABLE_REQ = 16,
233
234         /* Tx Commands */
235         BFI_ENET_H2I_TX_CFG_SET_REQ = 17,
236         BFI_ENET_H2I_TX_CFG_CLR_REQ = 18,
237
238         /* Port Commands */
239         BFI_ENET_H2I_PORT_ADMIN_UP_REQ = 19,
240         BFI_ENET_H2I_SET_PAUSE_REQ = 20,
241         BFI_ENET_H2I_DIAG_LOOPBACK_REQ = 21,
242
243         /* Get Attributes Command */
244         BFI_ENET_H2I_GET_ATTR_REQ = 22,
245
246         /*  Statistics Commands */
247         BFI_ENET_H2I_STATS_GET_REQ = 23,
248         BFI_ENET_H2I_STATS_CLR_REQ = 24,
249
250         BFI_ENET_H2I_WOL_MAGIC_REQ = 25,
251         BFI_ENET_H2I_WOL_FRAME_REQ = 26,
252
253         BFI_ENET_H2I_MAX = 27,
254 };
255
256 enum bfi_enet_i2h_msgs {
257         /* Rx Responses */
258         BFI_ENET_I2H_RX_CFG_SET_RSP =
259                 BFA_I2HM(BFI_ENET_H2I_RX_CFG_SET_REQ),
260         BFI_ENET_I2H_RX_CFG_CLR_RSP =
261                 BFA_I2HM(BFI_ENET_H2I_RX_CFG_CLR_REQ),
262
263         BFI_ENET_I2H_RIT_CFG_RSP =
264                 BFA_I2HM(BFI_ENET_H2I_RIT_CFG_REQ),
265         BFI_ENET_I2H_RSS_CFG_RSP =
266                 BFA_I2HM(BFI_ENET_H2I_RSS_CFG_REQ),
267         BFI_ENET_I2H_RSS_ENABLE_RSP =
268                 BFA_I2HM(BFI_ENET_H2I_RSS_ENABLE_REQ),
269         BFI_ENET_I2H_RX_PROMISCUOUS_RSP =
270                 BFA_I2HM(BFI_ENET_H2I_RX_PROMISCUOUS_REQ),
271         BFI_ENET_I2H_RX_DEFAULT_RSP =
272                 BFA_I2HM(BFI_ENET_H2I_RX_DEFAULT_REQ),
273
274         BFI_ENET_I2H_MAC_UCAST_SET_RSP =
275                 BFA_I2HM(BFI_ENET_H2I_MAC_UCAST_SET_REQ),
276         BFI_ENET_I2H_MAC_UCAST_CLR_RSP =
277                 BFA_I2HM(BFI_ENET_H2I_MAC_UCAST_CLR_REQ),
278         BFI_ENET_I2H_MAC_UCAST_ADD_RSP =
279                 BFA_I2HM(BFI_ENET_H2I_MAC_UCAST_ADD_REQ),
280         BFI_ENET_I2H_MAC_UCAST_DEL_RSP =
281                 BFA_I2HM(BFI_ENET_H2I_MAC_UCAST_DEL_REQ),
282
283         BFI_ENET_I2H_MAC_MCAST_ADD_RSP =
284                 BFA_I2HM(BFI_ENET_H2I_MAC_MCAST_ADD_REQ),
285         BFI_ENET_I2H_MAC_MCAST_DEL_RSP =
286                 BFA_I2HM(BFI_ENET_H2I_MAC_MCAST_DEL_REQ),
287         BFI_ENET_I2H_MAC_MCAST_FILTER_RSP =
288                 BFA_I2HM(BFI_ENET_H2I_MAC_MCAST_FILTER_REQ),
289
290         BFI_ENET_I2H_RX_VLAN_SET_RSP =
291                 BFA_I2HM(BFI_ENET_H2I_RX_VLAN_SET_REQ),
292
293         BFI_ENET_I2H_RX_VLAN_STRIP_ENABLE_RSP =
294                 BFA_I2HM(BFI_ENET_H2I_RX_VLAN_STRIP_ENABLE_REQ),
295
296         /* Tx Responses */
297         BFI_ENET_I2H_TX_CFG_SET_RSP =
298                 BFA_I2HM(BFI_ENET_H2I_TX_CFG_SET_REQ),
299         BFI_ENET_I2H_TX_CFG_CLR_RSP =
300                 BFA_I2HM(BFI_ENET_H2I_TX_CFG_CLR_REQ),
301
302         /* Port Responses */
303         BFI_ENET_I2H_PORT_ADMIN_RSP =
304                 BFA_I2HM(BFI_ENET_H2I_PORT_ADMIN_UP_REQ),
305
306         BFI_ENET_I2H_SET_PAUSE_RSP =
307                 BFA_I2HM(BFI_ENET_H2I_SET_PAUSE_REQ),
308         BFI_ENET_I2H_DIAG_LOOPBACK_RSP =
309                 BFA_I2HM(BFI_ENET_H2I_DIAG_LOOPBACK_REQ),
310
311         /*  Attributes Response */
312         BFI_ENET_I2H_GET_ATTR_RSP =
313                 BFA_I2HM(BFI_ENET_H2I_GET_ATTR_REQ),
314
315         /* Statistics Responses */
316         BFI_ENET_I2H_STATS_GET_RSP =
317                 BFA_I2HM(BFI_ENET_H2I_STATS_GET_REQ),
318         BFI_ENET_I2H_STATS_CLR_RSP =
319                 BFA_I2HM(BFI_ENET_H2I_STATS_CLR_REQ),
320
321         BFI_ENET_I2H_WOL_MAGIC_RSP =
322                 BFA_I2HM(BFI_ENET_H2I_WOL_MAGIC_REQ),
323         BFI_ENET_I2H_WOL_FRAME_RSP =
324                 BFA_I2HM(BFI_ENET_H2I_WOL_FRAME_REQ),
325
326         /* AENs */
327         BFI_ENET_I2H_LINK_DOWN_AEN = BFA_I2HM(BFI_ENET_H2I_MAX),
328         BFI_ENET_I2H_LINK_UP_AEN = BFA_I2HM(BFI_ENET_H2I_MAX + 1),
329
330         BFI_ENET_I2H_PORT_ENABLE_AEN = BFA_I2HM(BFI_ENET_H2I_MAX + 2),
331         BFI_ENET_I2H_PORT_DISABLE_AEN = BFA_I2HM(BFI_ENET_H2I_MAX + 3),
332
333         BFI_ENET_I2H_BW_UPDATE_AEN = BFA_I2HM(BFI_ENET_H2I_MAX + 4),
334 };
335
336 /* The following error codes can be returned by the enet commands */
337 enum bfi_enet_err {
338         BFI_ENET_CMD_OK         = 0,
339         BFI_ENET_CMD_FAIL       = 1,
340         BFI_ENET_CMD_DUP_ENTRY  = 2,    /* !< Duplicate entry in CAM */
341         BFI_ENET_CMD_CAM_FULL   = 3,    /* !< CAM is full */
342         BFI_ENET_CMD_NOT_OWNER  = 4,    /* !< Not permitted, b'cos not owner */
343         BFI_ENET_CMD_NOT_EXEC   = 5,    /* !< Was not sent to f/w at all */
344         BFI_ENET_CMD_WAITING    = 6,    /* !< Waiting for completion */
345         BFI_ENET_CMD_PORT_DISABLED = 7, /* !< port in disabled state */
346 };
347
348 /* Generic Request
349  *
350  * bfi_enet_req is used by:
351  *      BFI_ENET_H2I_RX_CFG_CLR_REQ
352  *      BFI_ENET_H2I_TX_CFG_CLR_REQ
353  */
354 struct bfi_enet_req {
355         struct bfi_msgq_mhdr mh;
356 } __packed;
357
358 /* Enable/Disable Request
359  *
360  * bfi_enet_enable_req is used by:
361  *      BFI_ENET_H2I_RSS_ENABLE_REQ     (enet_id must be zero)
362  *      BFI_ENET_H2I_RX_PROMISCUOUS_REQ (enet_id must be zero)
363  *      BFI_ENET_H2I_RX_DEFAULT_REQ     (enet_id must be zero)
364  *      BFI_ENET_H2I_RX_MAC_MCAST_FILTER_REQ
365  *      BFI_ENET_H2I_PORT_ADMIN_UP_REQ  (enet_id must be zero)
366  */
367 struct bfi_enet_enable_req {
368         struct          bfi_msgq_mhdr mh;
369         u8              enable;         /* 1 = enable;  0 = disable */
370         u8              rsvd[3];
371 } __packed;
372
373 /* Generic Response */
374 struct bfi_enet_rsp {
375         struct bfi_msgq_mhdr mh;
376         u8              error;          /*!< if error see cmd_offset */
377         u8              rsvd;
378         u16             cmd_offset;     /*!< offset to invalid parameter */
379 } __packed;
380
381 /* GLOBAL CONFIGURATION */
382
383 /* bfi_enet_attr_req is used by:
384  *      BFI_ENET_H2I_GET_ATTR_REQ
385  */
386 struct bfi_enet_attr_req {
387         struct bfi_msgq_mhdr    mh;
388 } __packed;
389
390 /* bfi_enet_attr_rsp is used by:
391  *      BFI_ENET_I2H_GET_ATTR_RSP
392  */
393 struct bfi_enet_attr_rsp {
394         struct bfi_msgq_mhdr mh;
395         u8              error;          /*!< if error see cmd_offset */
396         u8              rsvd;
397         u16             cmd_offset;     /*!< offset to invalid parameter */
398         u32             max_cfg;
399         u32             max_ucmac;
400         u32             rit_size;
401 } __packed;
402
403 /* Tx Configuration
404  *
405  * bfi_enet_tx_cfg is used by:
406  *      BFI_ENET_H2I_TX_CFG_SET_REQ
407  */
408 enum bfi_enet_tx_vlan_mode {
409         BFI_ENET_TX_VLAN_NOP    = 0,
410         BFI_ENET_TX_VLAN_INS    = 1,
411         BFI_ENET_TX_VLAN_WI     = 2,
412 };
413
414 struct bfi_enet_tx_cfg {
415         u8              vlan_mode;      /*!< processing mode */
416         u8              rsvd;
417         u16             vlan_id;
418         u8              admit_tagged_frame;
419         u8              apply_vlan_filter;
420         u8              add_to_vswitch;
421         u8              rsvd1[1];
422 } __packed;
423
424 struct bfi_enet_tx_cfg_req {
425         struct bfi_msgq_mhdr mh;
426         u8                      num_queues;     /* # of Tx Queues */
427         u8                      rsvd[3];
428
429         struct {
430                 struct bfi_enet_txq     q;
431                 struct bfi_enet_ib      ib;
432         } __packed q_cfg[BFI_ENET_TXQ_PRIO_MAX];
433
434         struct bfi_enet_ib_cfg  ib_cfg;
435
436         struct bfi_enet_tx_cfg  tx_cfg;
437 };
438
439 struct bfi_enet_tx_cfg_rsp {
440         struct          bfi_msgq_mhdr mh;
441         u8              error;
442         u8              hw_id;          /* For debugging */
443         u8              rsvd[2];
444         struct {
445                 u32     q_dbell;        /* PCI base address offset */
446                 u32     i_dbell;        /* PCI base address offset */
447                 u8      hw_qid;         /* For debugging */
448                 u8      rsvd[3];
449         } __packed q_handles[BFI_ENET_TXQ_PRIO_MAX];
450 };
451
452 /* Rx Configuration
453  *
454  * bfi_enet_rx_cfg is used by:
455  *      BFI_ENET_H2I_RX_CFG_SET_REQ
456  */
457 enum bfi_enet_rxq_type {
458         BFI_ENET_RXQ_SINGLE             = 1,
459         BFI_ENET_RXQ_LARGE_SMALL        = 2,
460         BFI_ENET_RXQ_HDS                = 3,
461         BFI_ENET_RXQ_HDS_OPT_BASED      = 4,
462 };
463
464 enum bfi_enet_hds_type {
465         BFI_ENET_HDS_FORCED     = 0x01,
466         BFI_ENET_HDS_IPV6_UDP   = 0x02,
467         BFI_ENET_HDS_IPV6_TCP   = 0x04,
468         BFI_ENET_HDS_IPV4_TCP   = 0x08,
469         BFI_ENET_HDS_IPV4_UDP   = 0x10,
470 };
471
472 struct bfi_enet_rx_cfg {
473         u8              rxq_type;
474         u8              rsvd[1];
475         u16             frame_size;
476
477         struct {
478                 u8                      max_header_size;
479                 u8                      force_offset;
480                 u8                      type;
481                 u8                      rsvd1;
482         } __packed hds;
483
484         u8              multi_buffer;
485         u8              strip_vlan;
486         u8              drop_untagged;
487         u8              rsvd2;
488 } __packed;
489
490 /*
491  * Multicast frames are received on the ql of q-set index zero.
492  * On the completion queue.  RxQ ID = even is for large/data buffer queues
493  * and RxQ ID = odd is for small/header buffer queues.
494  */
495 struct bfi_enet_rx_cfg_req {
496         struct bfi_msgq_mhdr mh;
497         u8                      num_queue_sets; /* # of Rx Queue Sets */
498         u8                      rsvd[3];
499
500         struct {
501                 struct bfi_enet_rxq     ql;     /* large/data/single buffers */
502                 struct bfi_enet_rxq     qs;     /* small/header buffers */
503                 struct bfi_enet_cq      cq;
504                 struct bfi_enet_ib      ib;
505         } __packed q_cfg[BFI_ENET_RX_QSET_MAX];
506
507         struct bfi_enet_ib_cfg  ib_cfg;
508
509         struct bfi_enet_rx_cfg  rx_cfg;
510 } __packed;
511
512 struct bfi_enet_rx_cfg_rsp {
513         struct bfi_msgq_mhdr mh;
514         u8              error;
515         u8              hw_id;   /* For debugging */
516         u8              rsvd[2];
517         struct {
518                 u32     ql_dbell; /* PCI base address offset */
519                 u32     qs_dbell; /* PCI base address offset */
520                 u32     i_dbell;  /* PCI base address offset */
521                 u8              hw_lqid;  /* For debugging */
522                 u8              hw_sqid;  /* For debugging */
523                 u8              hw_cqid;  /* For debugging */
524                 u8              rsvd;
525         } __packed q_handles[BFI_ENET_RX_QSET_MAX];
526 } __packed;
527
528 /* RIT
529  *
530  * bfi_enet_rit_req is used by:
531  *      BFI_ENET_H2I_RIT_CFG_REQ
532  */
533 struct bfi_enet_rit_req {
534         struct  bfi_msgq_mhdr mh;
535         u16     size;                   /* number of table-entries used */
536         u8      rsvd[2];
537         u8      table[BFI_ENET_RSS_RIT_MAX];
538 } __packed;
539
540 /* RSS
541  *
542  * bfi_enet_rss_cfg_req is used by:
543  *      BFI_ENET_H2I_RSS_CFG_REQ
544  */
545 enum bfi_enet_rss_type {
546         BFI_ENET_RSS_IPV6       = 0x01,
547         BFI_ENET_RSS_IPV6_TCP   = 0x02,
548         BFI_ENET_RSS_IPV4       = 0x04,
549         BFI_ENET_RSS_IPV4_TCP   = 0x08
550 };
551
552 struct bfi_enet_rss_cfg {
553         u8      type;
554         u8      mask;
555         u8      rsvd[2];
556         u32     key[BFI_ENET_RSS_KEY_LEN];
557 } __packed;
558
559 struct bfi_enet_rss_cfg_req {
560         struct bfi_msgq_mhdr    mh;
561         struct bfi_enet_rss_cfg cfg;
562 } __packed;
563
564 /* MAC Unicast
565  *
566  * bfi_enet_rx_vlan_req is used by:
567  *      BFI_ENET_H2I_MAC_UCAST_SET_REQ
568  *      BFI_ENET_H2I_MAC_UCAST_CLR_REQ
569  *      BFI_ENET_H2I_MAC_UCAST_ADD_REQ
570  *      BFI_ENET_H2I_MAC_UCAST_DEL_REQ
571  */
572 struct bfi_enet_ucast_req {
573         struct bfi_msgq_mhdr    mh;
574         u8                      mac_addr[ETH_ALEN];
575         u8                      rsvd[2];
576 } __packed;
577
578 /* MAC Unicast + VLAN */
579 struct bfi_enet_mac_n_vlan_req {
580         struct bfi_msgq_mhdr    mh;
581         u16                     vlan_id;
582         u8                      mac_addr[ETH_ALEN];
583 } __packed;
584
585 /* MAC Multicast
586  *
587  * bfi_enet_mac_mfilter_add_req is used by:
588  *      BFI_ENET_H2I_MAC_MCAST_ADD_REQ
589  */
590 struct bfi_enet_mcast_add_req {
591         struct bfi_msgq_mhdr    mh;
592         u8                      mac_addr[ETH_ALEN];
593         u8                      rsvd[2];
594 } __packed;
595
596 /* bfi_enet_mac_mfilter_add_rsp is used by:
597  *      BFI_ENET_I2H_MAC_MCAST_ADD_RSP
598  */
599 struct bfi_enet_mcast_add_rsp {
600         struct bfi_msgq_mhdr    mh;
601         u8                      error;
602         u8                      rsvd;
603         u16                     cmd_offset;
604         u16                     handle;
605         u8                      rsvd1[2];
606 } __packed;
607
608 /* bfi_enet_mac_mfilter_del_req is used by:
609  *      BFI_ENET_H2I_MAC_MCAST_DEL_REQ
610  */
611 struct bfi_enet_mcast_del_req {
612         struct bfi_msgq_mhdr    mh;
613         u16                     handle;
614         u8                      rsvd[2];
615 } __packed;
616
617 /* VLAN
618  *
619  * bfi_enet_rx_vlan_req is used by:
620  *      BFI_ENET_H2I_RX_VLAN_SET_REQ
621  */
622 struct bfi_enet_rx_vlan_req {
623         struct bfi_msgq_mhdr    mh;
624         u8                      block_idx;
625         u8                      rsvd[3];
626         u32                     bit_mask[BFI_ENET_VLAN_WORDS_MAX];
627 } __packed;
628
629 /* PAUSE
630  *
631  * bfi_enet_set_pause_req is used by:
632  *      BFI_ENET_H2I_SET_PAUSE_REQ
633  */
634 struct bfi_enet_set_pause_req {
635         struct bfi_msgq_mhdr    mh;
636         u8                      rsvd[2];
637         u8                      tx_pause;       /* 1 = enable;  0 = disable */
638         u8                      rx_pause;       /* 1 = enable;  0 = disable */
639 } __packed;
640
641 /* DIAGNOSTICS
642  *
643  * bfi_enet_diag_lb_req is used by:
644  *      BFI_ENET_H2I_DIAG_LOOPBACK
645  */
646 struct bfi_enet_diag_lb_req {
647         struct bfi_msgq_mhdr    mh;
648         u8                      rsvd[2];
649         u8                      mode;           /* cable or Serdes */
650         u8                      enable;         /* 1 = enable;  0 = disable */
651 } __packed;
652
653 /* enum for Loopback opmodes */
654 enum {
655         BFI_ENET_DIAG_LB_OPMODE_EXT = 0,
656         BFI_ENET_DIAG_LB_OPMODE_CBL = 1,
657 };
658
659 /* STATISTICS
660  *
661  * bfi_enet_stats_req is used by:
662  *    BFI_ENET_H2I_STATS_GET_REQ
663  *    BFI_ENET_I2H_STATS_CLR_REQ
664  */
665 struct bfi_enet_stats_req {
666         struct bfi_msgq_mhdr    mh;
667         u16                     stats_mask;
668         u8                      rsvd[2];
669         u32                     rx_enet_mask;
670         u32                     tx_enet_mask;
671         union bfi_addr_u        host_buffer;
672 } __packed;
673
674 /* defines for "stats_mask" above. */
675 #define BFI_ENET_STATS_MAC    BIT(0)    /* !< MAC Statistics */
676 #define BFI_ENET_STATS_BPC    BIT(1)    /* !< Pause Stats from BPC */
677 #define BFI_ENET_STATS_RAD    BIT(2)    /* !< Rx Admission Statistics */
678 #define BFI_ENET_STATS_RX_FC  BIT(3)    /* !< Rx FC Stats from RxA */
679 #define BFI_ENET_STATS_TX_FC  BIT(4)    /* !< Tx FC Stats from TxA */
680
681 #define BFI_ENET_STATS_ALL    0x1f
682
683 /* TxF Frame Statistics */
684 struct bfi_enet_stats_txf {
685         u64 ucast_octets;
686         u64 ucast;
687         u64 ucast_vlan;
688
689         u64 mcast_octets;
690         u64 mcast;
691         u64 mcast_vlan;
692
693         u64 bcast_octets;
694         u64 bcast;
695         u64 bcast_vlan;
696
697         u64 errors;
698         u64 filter_vlan;      /* frames filtered due to VLAN */
699         u64 filter_mac_sa;    /* frames filtered due to SA check */
700 } __packed;
701
702 /* RxF Frame Statistics */
703 struct bfi_enet_stats_rxf {
704         u64 ucast_octets;
705         u64 ucast;
706         u64 ucast_vlan;
707
708         u64 mcast_octets;
709         u64 mcast;
710         u64 mcast_vlan;
711
712         u64 bcast_octets;
713         u64 bcast;
714         u64 bcast_vlan;
715         u64 frame_drops;
716 } __packed;
717
718 /* FC Tx Frame Statistics */
719 struct bfi_enet_stats_fc_tx {
720         u64 txf_ucast_octets;
721         u64 txf_ucast;
722         u64 txf_ucast_vlan;
723
724         u64 txf_mcast_octets;
725         u64 txf_mcast;
726         u64 txf_mcast_vlan;
727
728         u64 txf_bcast_octets;
729         u64 txf_bcast;
730         u64 txf_bcast_vlan;
731
732         u64 txf_parity_errors;
733         u64 txf_timeout;
734         u64 txf_fid_parity_errors;
735 } __packed;
736
737 /* FC Rx Frame Statistics */
738 struct bfi_enet_stats_fc_rx {
739         u64 rxf_ucast_octets;
740         u64 rxf_ucast;
741         u64 rxf_ucast_vlan;
742
743         u64 rxf_mcast_octets;
744         u64 rxf_mcast;
745         u64 rxf_mcast_vlan;
746
747         u64 rxf_bcast_octets;
748         u64 rxf_bcast;
749         u64 rxf_bcast_vlan;
750 } __packed;
751
752 /* RAD Frame Statistics */
753 struct bfi_enet_stats_rad {
754         u64 rx_frames;
755         u64 rx_octets;
756         u64 rx_vlan_frames;
757
758         u64 rx_ucast;
759         u64 rx_ucast_octets;
760         u64 rx_ucast_vlan;
761
762         u64 rx_mcast;
763         u64 rx_mcast_octets;
764         u64 rx_mcast_vlan;
765
766         u64 rx_bcast;
767         u64 rx_bcast_octets;
768         u64 rx_bcast_vlan;
769
770         u64 rx_drops;
771 } __packed;
772
773 /* BPC Tx Registers */
774 struct bfi_enet_stats_bpc {
775         /* transmit stats */
776         u64 tx_pause[8];
777         u64 tx_zero_pause[8];   /*!< Pause cancellation */
778         /*!<Pause initiation rather than retention */
779         u64 tx_first_pause[8];
780
781         /* receive stats */
782         u64 rx_pause[8];
783         u64 rx_zero_pause[8];   /*!< Pause cancellation */
784         /*!<Pause initiation rather than retention */
785         u64 rx_first_pause[8];
786 } __packed;
787
788 /* MAC Rx Statistics */
789 struct bfi_enet_stats_mac {
790         u64 stats_clr_cnt;      /* times this stats cleared */
791         u64 frame_64;           /* both rx and tx counter */
792         u64 frame_65_127;               /* both rx and tx counter */
793         u64 frame_128_255;              /* both rx and tx counter */
794         u64 frame_256_511;              /* both rx and tx counter */
795         u64 frame_512_1023;     /* both rx and tx counter */
796         u64 frame_1024_1518;    /* both rx and tx counter */
797         u64 frame_1519_1522;    /* both rx and tx counter */
798
799         /* receive stats */
800         u64 rx_bytes;
801         u64 rx_packets;
802         u64 rx_fcs_error;
803         u64 rx_multicast;
804         u64 rx_broadcast;
805         u64 rx_control_frames;
806         u64 rx_pause;
807         u64 rx_unknown_opcode;
808         u64 rx_alignment_error;
809         u64 rx_frame_length_error;
810         u64 rx_code_error;
811         u64 rx_carrier_sense_error;
812         u64 rx_undersize;
813         u64 rx_oversize;
814         u64 rx_fragments;
815         u64 rx_jabber;
816         u64 rx_drop;
817
818         /* transmit stats */
819         u64 tx_bytes;
820         u64 tx_packets;
821         u64 tx_multicast;
822         u64 tx_broadcast;
823         u64 tx_pause;
824         u64 tx_deferral;
825         u64 tx_excessive_deferral;
826         u64 tx_single_collision;
827         u64 tx_muliple_collision;
828         u64 tx_late_collision;
829         u64 tx_excessive_collision;
830         u64 tx_total_collision;
831         u64 tx_pause_honored;
832         u64 tx_drop;
833         u64 tx_jabber;
834         u64 tx_fcs_error;
835         u64 tx_control_frame;
836         u64 tx_oversize;
837         u64 tx_undersize;
838         u64 tx_fragments;
839 } __packed;
840
841 /* Complete statistics, DMAed from fw to host followed by
842  * BFI_ENET_I2H_STATS_GET_RSP
843  */
844 struct bfi_enet_stats {
845         struct bfi_enet_stats_mac       mac_stats;
846         struct bfi_enet_stats_bpc       bpc_stats;
847         struct bfi_enet_stats_rad       rad_stats;
848         struct bfi_enet_stats_rad       rlb_stats;
849         struct bfi_enet_stats_fc_rx     fc_rx_stats;
850         struct bfi_enet_stats_fc_tx     fc_tx_stats;
851         struct bfi_enet_stats_rxf       rxf_stats[BFI_ENET_CFG_MAX];
852         struct bfi_enet_stats_txf       txf_stats[BFI_ENET_CFG_MAX];
853 } __packed;
854
855 #endif  /* __BFI_ENET_H__ */