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