]>
Commit | Line | Data |
---|---|---|
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 | ||
58 | union 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 | ||
81 | struct 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 | ||
93 | struct bfi_enet_txq_wi_ext { | |
94 | u16 reserved; | |
95 | u16 opcode; /* BFI_ENET_TXQ_WI_EXTENSION */ | |
96 | u32 reserved2[3]; | |
97 | }; | |
98 | ||
99 | struct 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 |
106 | struct 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 |
121 | struct 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 */ | |
155 | struct 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 |
167 | struct 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 | ||
174 | struct bfi_enet_txq { | |
175 | struct bfi_enet_q q; | |
176 | u8 priority; | |
177 | u8 rsvd[3]; | |
178 | }; | |
179 | ||
180 | struct bfi_enet_rxq { | |
181 | struct bfi_enet_q q; | |
182 | u16 rx_buffer_size; | |
183 | u16 rsvd; | |
184 | }; | |
185 | ||
186 | struct bfi_enet_cq { | |
187 | struct bfi_enet_q q; | |
188 | }; | |
189 | ||
190 | struct 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 | ||
203 | struct 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 |
213 | enum 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 | ||
258 | enum 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 |
339 | enum 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 | */ | |
356 | struct 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 | */ | |
369 | struct 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 |
376 | struct 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 | */ | |
388 | struct 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 | */ | |
395 | struct 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 | */ | |
410 | enum 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 | ||
416 | struct 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 | ||
426 | struct 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 | ||
441 | struct 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 | */ | |
459 | enum 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 | ||
466 | enum 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 | ||
474 | struct 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 | */ | |
497 | struct 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 | ||
514 | struct 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 | */ | |
535 | struct 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 | */ | |
547 | enum 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 | ||
554 | struct bfi_enet_rss_cfg { | |
555 | u8 type; | |
556 | u8 mask; | |
557 | u8 rsvd[2]; | |
558 | u32 key[BFI_ENET_RSS_KEY_LEN]; | |
559 | }; | |
560 | ||
561 | struct 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 | */ | |
574 | struct bfi_enet_ucast_req { | |
575 | struct bfi_msgq_mhdr mh; | |
576 | mac_t mac_addr; | |
577 | u8 rsvd[2]; | |
578 | }; | |
579 | ||
1aa8b471 | 580 | /* MAC Unicast + VLAN */ |
45979c1e RM |
581 | struct bfi_enet_mac_n_vlan_req { |
582 | struct bfi_msgq_mhdr mh; | |
583 | u16 vlan_id; | |
584 | mac_t mac_addr; | |
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 | */ | |
592 | struct bfi_enet_mcast_add_req { | |
593 | struct bfi_msgq_mhdr mh; | |
594 | mac_t mac_addr; | |
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 | */ | |
601 | struct 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 | */ | |
613 | struct 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 | */ | |
624 | struct 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 | */ | |
636 | struct 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 | */ | |
648 | struct 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 |
656 | enum { |
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 | */ | |
667 | struct 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 */ | |
686 | struct 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 */ | |
705 | struct 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 */ | |
721 | struct 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 */ | |
740 | struct 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 */ | |
755 | struct 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 */ | |
776 | struct 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 */ | |
791 | struct 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 | */ | |
846 | struct 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__ */ |