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