iPXE
bnxt.h
Go to the documentation of this file.
1 /*
2  * Copyright © 2018 Broadcom. All Rights Reserved.
3  * The term “Broadcom” refers to Broadcom Inc. and/or its subsidiaries.
4 
5  * This program is free software; you can redistribute it and/or modify it under
6  * the terms of version 2 of the GNU General Public License as published by the
7  * Free Software Foundation.
8 
9  * This program is distributed in the hope that it will be useful.
10  * ALL EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES, INCLUDING
11  * ANY IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, OR
12  * NON-INFRINGEMENT, ARE DISCLAIMED, EXCEPT TO THE EXTENT THAT SUCH DISCLAIMERS
13  * ARE HELD TO BE LEGALLY INVALID. See the GNU General Public License for more
14  * details, a copy of which can be found in the file COPYING included with this
15  * package.
16  */
17 
18 #undef ERRFILE
19 #define ERRFILE ERRFILE_tg3
20 
21 #define __le16 u16
22 #define __le32 u32
23 #define __le64 u64
24 #define __be16 u16
25 #define __be32 u32
26 #define __be64 u64
27 
28 #define dma_addr_t unsigned long
29 
30 union dma_addr64_t {
33 };
34 
35 #include "bnxt_hsi.h"
36 
37 #define DRV_MODULE_NAME "bnxt"
38 #define IPXE_VERSION_MAJOR 1
39 #define IPXE_VERSION_MINOR 0
40 #define IPXE_VERSION_UPDATE 0
41 
42 /*
43  * Broadcom ethernet driver defines.
44  */
45 #define FLAG_SET(f, b) ((f) |= (b))
46 #define FLAG_TEST(f, b) ((f) & (b))
47 #define FLAG_RESET(f, b) ((f) &= ~(b))
48 #define BNXT_FLAG_HWRM_SHORT_CMD_SUPP 0x0001
49 #define BNXT_FLAG_HWRM_SHORT_CMD_REQ 0x0002
50 #define BNXT_FLAG_RESOURCE_QCAPS_SUPPORT 0x0004
51 #define BNXT_FLAG_MULTI_HOST 0x0008
52 #define BNXT_FLAG_NPAR_MODE 0x0010
53 #define BNXT_FLAG_ATOMICS_ENABLE 0x0020
54 #define BNXT_FLAG_PCI_VF 0x0040
55 /*******************************************************************************
56  * Status codes.
57  ******************************************************************************/
58 #define STATUS_SUCCESS 0
59 #define STATUS_FAILURE 1
60 #define STATUS_NO_RESOURCE 2
61 #define STATUS_INVALID_PARAMETER 3
62 #define STATUS_LINK_ACTIVE 4
63 #define STATUS_LINK_DOWN 5
64 #define STATUS_LINK_SETTING_MISMATCH 6
65 #define STATUS_TOO_MANY_FRAGMENTS 7
66 #define STATUS_TRANSMIT_ABORTED 8
67 #define STATUS_TRANSMIT_ERROR 9
68 #define STATUS_RECEIVE_ABORTED 10
69 #define STATUS_RECEIVE_ERROR 11
70 #define STATUS_INVALID_PACKET_SIZE 12
71 #define STATUS_NO_MAP_REGISTER 13
72 #define STATUS_UNKNOWN_ADAPTER 14
73 #define STATUS_NO_COALESCE_BUFFER 15
74 #define STATUS_UNKNOWN_PHY 16
75 #define STATUS_PENDING 17
76 #define STATUS_NO_TX_DESC 18
77 #define STATUS_NO_TX_BD 19
78 #define STATUS_UNKNOWN_MEDIUM 20
79 #define STATUS_RESOURCE 21
80 #define STATUS_ABORT_REASON_DISCONNECT 22
81 #define STATUS_ABORT_REASON_UPLOAD 23
82 #define STATUS_TIMEOUT 0xffff
83 /*******************************************************************************
84  * Receive filter masks.
85  ******************************************************************************/
86 #define RX_MASK_ACCEPT_NONE 0x0000
87 #define RX_MASK_ACCEPT_UNICAST 0x0001
88 #define RX_MASK_ACCEPT_MULTICAST 0x0002
89 #define RX_MASK_ACCEPT_ALL_MULTICAST 0x0004
90 #define RX_MASK_ACCEPT_BROADCAST 0x0008
91 #define RX_MASK_ACCEPT_ERROR_PACKET 0x0010
92 #define RX_MASK_PROMISCUOUS_MODE 0x10000
93 /*******************************************************************************
94  * media speed.
95  ******************************************************************************/
96 #define MEDIUM_SPEED_AUTONEG 0x0000L
97 #define MEDIUM_SPEED_UNKNOWN 0x0000L
98 #define MEDIUM_SPEED_10MBPS 0x0100L
99 #define MEDIUM_SPEED_100MBPS 0x0200L
100 #define MEDIUM_SPEED_1000MBPS 0x0300L
101 #define MEDIUM_SPEED_2500MBPS 0x0400L
102 #define MEDIUM_SPEED_10GBPS 0x0600L
103 #define MEDIUM_SPEED_20GBPS 0x0700L
104 #define MEDIUM_SPEED_25GBPS 0x0800L
105 #define MEDIUM_SPEED_40GBPS 0x0900L
106 #define MEDIUM_SPEED_50GBPS 0x0a00L
107 #define MEDIUM_SPEED_100GBPS 0x0b00L
108 #define MEDIUM_SPEED_200GBPS 0x0c00L
109 #define MEDIUM_SPEED_AUTONEG_1G_FALLBACK 0x8000L /* Serdes */
110 #define MEDIUM_SPEED_AUTONEG_2_5G_FALLBACK 0x8100L /* Serdes */
111 #define MEDIUM_SPEED_HARDWARE_DEFAULT 0xff00L /* Serdes nvram def.*/
112 #define MEDIUM_SPEED_MASK 0xff00L
113 #define GET_MEDIUM_SPEED(m) ((m) & MEDIUM_SPEED_MASK)
114 #define SET_MEDIUM_SPEED(bp, s) ((bp->medium & ~MEDIUM_SPEED_MASK) | s)
115 #define MEDIUM_UNKNOWN_DUPLEX 0x00000L
116 #define MEDIUM_FULL_DUPLEX 0x00000L
117 #define MEDIUM_HALF_DUPLEX 0x10000L
118 #define GET_MEDIUM_DUPLEX(m) ((m) & MEDIUM_HALF_DUPLEX)
119 #define SET_MEDIUM_DUPLEX(bp, d) ((bp->medium & ~MEDIUM_HALF_DUPLEX) | d)
120 #define MEDIUM_SELECTIVE_AUTONEG 0x01000000L
121 #define GET_MEDIUM_AUTONEG_MODE(m) ((m) & 0xff000000L)
122 #define PCICFG_ME_REGISTER 0x98
123 #define GRC_COM_CHAN_BASE 0
124 #define GRC_COM_CHAN_TRIG 0x100
125 #define GRC_IND_BAR_0_ADDR 0x78
126 #define GRC_IND_BAR_1_ADDR 0x7C
127 #define GRC_IND_BAR_0_DATA 0x80
128 #define GRC_IND_BAR_1_DATA 0x84
129 #define GRC_BASE_WIN_0 0x400
130 #define GRC_DATA_WIN_0 0x1000
131 #define HWRM_CMD_DEFAULT_TIMEOUT 500 /* in Miliseconds */
132 #define HWRM_CMD_POLL_WAIT_TIME 100 /* In MicroeSconds */
133 #define HWRM_CMD_DEFAULT_MULTIPLAYER(a) ((a) * 10)
134 #define HWRM_CMD_FLASH_MULTIPLAYER(a) ((a) * 100)
135 #define HWRM_CMD_FLASH_ERASE_MULTIPLAYER(a) ((a) * 1000)
136 #define HWRM_CMD_WAIT(b) ((bp->hwrm_cmd_timeout) * (b))
137 #define MAX_ETHERNET_PACKET_BUFFER_SIZE 1536
138 #define DEFAULT_NUMBER_OF_CMPL_RINGS 0x01
139 #define DEFAULT_NUMBER_OF_TX_RINGS 0x01
140 #define DEFAULT_NUMBER_OF_RX_RINGS 0x01
141 #define DEFAULT_NUMBER_OF_RING_GRPS 0x01
142 #define DEFAULT_NUMBER_OF_STAT_CTXS 0x01
143 #define NUM_RX_BUFFERS 8
144 #define MAX_RX_DESC_CNT 16
145 #define MAX_TX_DESC_CNT 16
146 #define MAX_CQ_DESC_CNT 64
147 #define TX_RING_BUFFER_SIZE (MAX_TX_DESC_CNT * sizeof(struct tx_bd_short))
148 #define RX_RING_BUFFER_SIZE \
149  (MAX_RX_DESC_CNT * sizeof(struct rx_prod_pkt_bd))
150 #define CQ_RING_BUFFER_SIZE (MAX_CQ_DESC_CNT * sizeof(struct cmpl_base))
151 #define BNXT_DMA_ALIGNMENT 256 //64
152 #define DMA_ALIGN_4K 4096 //thor tx & rx
153 #define REQ_BUFFER_SIZE 1024
154 #define RESP_BUFFER_SIZE 1024
155 #define DMA_BUFFER_SIZE 1024
156 #define LM_PAGE_BITS(a) (a)
157 #define BNXT_RX_STD_DMA_SZ (1536 + 64 + 2)
158 #define NEXT_IDX(N, S) (((N) + 1) & ((S) - 1))
159 #define BD_NOW(bd, entry, len) (&((u8 *)(bd))[(entry) * (len)])
160 #define BNXT_CQ_INTR_MODE(vf) (\
161  ((vf) ? RING_ALLOC_REQ_INT_MODE_MSIX : RING_ALLOC_REQ_INT_MODE_POLL))
162 /* Set default link timeout period to 1 second */
163 #define LINK_DEFAULT_TIMEOUT 1000
164 #define LINK_POLL_WAIT_TIME 100 /* In Miliseconds */
165 #define RX_MASK (\
166  RX_MASK_ACCEPT_BROADCAST | \
167  RX_MASK_ACCEPT_ALL_MULTICAST | \
168  RX_MASK_ACCEPT_MULTICAST)
169 #define MAX_NQ_DESC_CNT 64
170 #define NQ_RING_BUFFER_SIZE (MAX_NQ_DESC_CNT * sizeof(struct cmpl_base))
171 #define TX_RING_QID (bp->thor ? (u16)bp->queue_id : ((u16)bp->port_idx * 10))
172 #define RX_RING_QID (bp->thor ? bp->queue_id : 0)
173 #define STAT_CTX_ID ((bp->vf || bp->thor) ? bp->stat_ctx_id : 0)
174 #define TX_AVAIL(r) (r - 1)
175 #define TX_IN_USE(a, b, c) ((a - b) & (c - 1))
176 #define NO_MORE_NQ_BD_TO_SERVICE 1
177 #define SERVICE_NEXT_NQ_BD 0
178 #define NO_MORE_CQ_BD_TO_SERVICE 1
179 #define SERVICE_NEXT_CQ_BD 0
180 #define MAC_HDR_SIZE 12
181 #define VLAN_HDR_SIZE 4
182 #define ETHERTYPE_VLAN 0x8100
183 #define BYTE_SWAP_S(w) (\
184  (((w) & 0xff00) >> 8) | \
185  (((w) & 0x00ff) << 8))
186 #define DB_OFFSET_PF 0x10000
187 #define DB_OFFSET_VF 0x4000
188 #define DBC_MSG_IDX(idx) (\
189  ((idx) << DBC_DBC_INDEX_SFT) & DBC_DBC_INDEX_MASK)
190 #define DBC_MSG_XID(xid, flg) (\
191  (((xid) << DBC_DBC_XID_SFT) & DBC_DBC_XID_MASK) | \
192  DBC_DBC_PATH_L2 | (flg))
193 #define PHY_STATUS 0x0001
194 #define PHY_SPEED 0x0002
195 #define DETECT_MEDIA 0x0004
196 #define SUPPORT_SPEEDS 0x0008
197 #define QCFG_PHY_ALL (\
198  SUPPORT_SPEEDS | DETECT_MEDIA | PHY_SPEED | PHY_STATUS)
199 #define str_mbps "Mbps"
200 #define str_gbps "Gbps"
201 /*
202  * Broadcom ethernet driver nvm defines.
203  */
204 /* nvm cfg 203 - u32 link_settings */
205 #define LINK_SPEED_DRV_NUM 203
206 #define LINK_SPEED_DRV_MASK 0x0000000F
207 #define LINK_SPEED_DRV_SHIFT 0
208 #define LINK_SPEED_DRV_AUTONEG 0x0
209 #define NS_LINK_SPEED_DRV_AUTONEG 0x0
210 #define LINK_SPEED_DRV_1G 0x1
211 #define NS_LINK_SPEED_DRV_1G 0x1
212 #define LINK_SPEED_DRV_10G 0x2
213 #define NS_LINK_SPEED_DRV_10G 0x2
214 #define LINK_SPEED_DRV_25G 0x3
215 #define NS_LINK_SPEED_DRV_25G 0x3
216 #define LINK_SPEED_DRV_40G 0x4
217 #define NS_LINK_SPEED_DRV_40G 0x4
218 #define LINK_SPEED_DRV_50G 0x5
219 #define NS_LINK_SPEED_DRV_50G 0x5
220 #define LINK_SPEED_DRV_100G 0x6
221 #define NS_LINK_SPEED_DRV_100G 0x6
222 #define LINK_SPEED_DRV_200G 0x7
223 #define NS_LINK_SPEED_DRV_200G 0x7
224 #define LINK_SPEED_DRV_2_5G 0xE
225 #define NS_LINK_SPEED_DRV_2_5G 0xE
226 #define LINK_SPEED_DRV_100M 0xF
227 #define NS_LINK_SPEED_DRV_100M 0xF
228 /* nvm cfg 201 - u32 speed_cap_mask */
229 #define SPEED_CAPABILITY_DRV_MASK 0x0000FFFF
230 #define SPEED_CAPABILITY_DRV_SHIFT 0
231 #define SPEED_CAPABILITY_DRV_1G 0x1
232 #define NS_SPEED_CAPABILITY_DRV_1G 0x1
233 #define SPEED_CAPABILITY_DRV_10G 0x2
234 #define NS_SPEED_CAPABILITY_DRV_10G 0x2
235 #define SPEED_CAPABILITY_DRV_25G 0x4
236 #define NS_SPEED_CAPABILITY_DRV_25G 0x4
237 #define SPEED_CAPABILITY_DRV_40G 0x8
238 #define NS_SPEED_CAPABILITY_DRV_40G 0x8
239 #define SPEED_CAPABILITY_DRV_50G 0x10
240 #define NS_SPEED_CAPABILITY_DRV_50G 0x10
241 #define SPEED_CAPABILITY_DRV_100G 0x20
242 #define NS_SPEED_CAPABILITY_DRV_100G 0x20
243 #define SPEED_CAPABILITY_DRV_200G 0x40
244 #define NS_SPEED_CAPABILITY_DRV_200G 0x40
245 #define SPEED_CAPABILITY_DRV_2_5G 0x4000
246 #define NS_SPEED_CAPABILITY_DRV_2_5G 0x4000
247 #define SPEED_CAPABILITY_DRV_100M 0x8000
248 #define NS_SPEED_CAPABILITY_DRV_100M 0x8000
249 /* nvm cfg 202 */
250 #define SPEED_CAPABILITY_FW_MASK 0xFFFF0000
251 #define SPEED_CAPABILITY_FW_SHIFT 16
252 #define SPEED_CAPABILITY_FW_1G (0x1L << 16)
253 #define NS_SPEED_CAPABILITY_FW_1G (0x1)
254 #define SPEED_CAPABILITY_FW_10G (0x2L << 16)
255 #define NS_SPEED_CAPABILITY_FW_10G (0x2)
256 #define SPEED_CAPABILITY_FW_25G (0x4L << 16)
257 #define NS_SPEED_CAPABILITY_FW_25G (0x4)
258 #define SPEED_CAPABILITY_FW_40G (0x8L << 16)
259 #define NS_SPEED_CAPABILITY_FW_40G (0x8)
260 #define SPEED_CAPABILITY_FW_50G (0x10L << 16)
261 #define NS_SPEED_CAPABILITY_FW_50G (0x10)
262 #define SPEED_CAPABILITY_FW_100G (0x20L << 16)
263 #define NS_SPEED_CAPABILITY_FW_100G (0x20)
264 #define SPEED_CAPABILITY_FW_200G (0x40L << 16)
265 #define NS_SPEED_CAPABILITY_FW_200G (0x40)
266 #define SPEED_CAPABILITY_FW_2_5G (0x4000L << 16)
267 #define NS_SPEED_CAPABILITY_FW_2_5G (0x4000)
268 #define SPEED_CAPABILITY_FW_100M (0x8000UL << 16)
269 #define NS_SPEED_CAPABILITY_FW_100M (0x8000)
270 /* nvm cfg 205 */
271 #define LINK_SPEED_FW_NUM 205
272 #define LINK_SPEED_FW_MASK 0x00000780
273 #define LINK_SPEED_FW_SHIFT 7
274 #define LINK_SPEED_FW_AUTONEG (0x0L << 7)
275 #define NS_LINK_SPEED_FW_AUTONEG (0x0)
276 #define LINK_SPEED_FW_1G (0x1L << 7)
277 #define NS_LINK_SPEED_FW_1G (0x1)
278 #define LINK_SPEED_FW_10G (0x2L << 7)
279 #define NS_LINK_SPEED_FW_10G (0x2)
280 #define LINK_SPEED_FW_25G (0x3L << 7)
281 #define NS_LINK_SPEED_FW_25G (0x3)
282 #define LINK_SPEED_FW_40G (0x4L << 7)
283 #define NS_LINK_SPEED_FW_40G (0x4)
284 #define LINK_SPEED_FW_50G (0x5L << 7)
285 #define NS_LINK_SPEED_FW_50G (0x5)
286 #define LINK_SPEED_FW_100G (0x6L << 7)
287 #define NS_LINK_SPEED_FW_100G (0x6)
288 #define LINK_SPEED_FW_200G (0x7L << 7)
289 #define NS_LINK_SPEED_FW_200G (0x7)
290 #define LINK_SPEED_FW_2_5G (0xEL << 7)
291 #define NS_LINK_SPEED_FW_2_5G (0xE)
292 #define LINK_SPEED_FW_100M (0xFL << 7)
293 #define NS_LINK_SPEED_FW_100M (0xF)
294 /* nvm cfg 210 */
295 #define D3_LINK_SPEED_FW_NUM 210
296 #define D3_LINK_SPEED_FW_MASK 0x000F0000
297 #define D3_LINK_SPEED_FW_SHIFT 16
298 #define D3_LINK_SPEED_FW_AUTONEG (0x0L << 16)
299 #define NS_D3_LINK_SPEED_FW_AUTONEG (0x0)
300 #define D3_LINK_SPEED_FW_1G (0x1L << 16)
301 #define NS_D3_LINK_SPEED_FW_1G (0x1)
302 #define D3_LINK_SPEED_FW_10G (0x2L << 16)
303 #define NS_D3_LINK_SPEED_FW_10G (0x2)
304 #define D3_LINK_SPEED_FW_25G (0x3L << 16)
305 #define NS_D3_LINK_SPEED_FW_25G (0x3)
306 #define D3_LINK_SPEED_FW_40G (0x4L << 16)
307 #define NS_D3_LINK_SPEED_FW_40G (0x4)
308 #define D3_LINK_SPEED_FW_50G (0x5L << 16)
309 #define NS_D3_LINK_SPEED_FW_50G (0x5)
310 #define D3_LINK_SPEED_FW_100G (0x6L << 16)
311 #define NS_D3_LINK_SPEED_FW_100G (0x6)
312 #define D3_LINK_SPEED_FW_200G (0x7L << 16)
313 #define NS_D3_LINK_SPEED_FW_200G (0x7)
314 #define D3_LINK_SPEED_FW_2_5G (0xEL << 16)
315 #define NS_D3_LINK_SPEED_FW_2_5G (0xE)
316 #define D3_LINK_SPEED_FW_100M (0xFL << 16)
317 #define NS_D3_LINK_SPEED_FW_100M (0xF)
318 /* nvm cfg 211 */
319 #define D3_FLOW_CONTROL_FW_NUM 211
320 #define D3_FLOW_CONTROL_FW_MASK 0x00700000
321 #define D3_FLOW_CONTROL_FW_SHIFT 20
322 #define D3_FLOW_CONTROL_FW_AUTO (0x0L << 20)
323 #define NS_D3_FLOW_CONTROL_FW_AUTO (0x0)
324 #define D3_FLOW_CONTROL_FW_TX (0x1L << 20)
325 #define NS_D3_FLOW_CONTROL_FW_TX (0x1)
326 #define D3_FLOW_CONTROL_FW_RX (0x2L << 20)
327 #define NS_D3_FLOW_CONTROL_FW_RX (0x2)
328 #define D3_FLOW_CONTROL_FW_BOTH (0x3L << 20)
329 #define NS_D3_FLOW_CONTROL_FW_BOTH (0x3)
330 #define D3_FLOW_CONTROL_FW_NONE (0x4L << 20)
331 #define NS_D3_FLOW_CONTROL_FW_NONE (0x4)
332 /* nvm cfg 213 */
333 #define PORT_CFG_LINK_SETTINGS_MEDIA_AUTO_DETECT_NUM 213
334 #define PORT_CFG_LINK_SETTINGS_MEDIA_AUTO_DETECT_MASK 0x02000000
335 #define PORT_CFG_LINK_SETTINGS_MEDIA_AUTO_DETECT_SHIFT 25
336 #define PORT_CFG_LINK_SETTINGS_MEDIA_AUTO_DETECT_DISABLED (0x0L << 25)
337 #define NS_PORT_CFG_LINK_SETTINGS_MEDIA_AUTO_DETECT_DISABLED (0x0)
338 #define PORT_CFG_LINK_SETTINGS_MEDIA_AUTO_DETECT_ENABLED (0x1L << 25)
339 #define NS_PORT_CFG_LINK_SETTINGS_MEDIA_AUTO_DETECT_ENABLED (0x1)
340 /* nvm cfg 357 - u32 mba_cfg2 */
341 #define FUNC_CFG_PRE_BOOT_MBA_VLAN_VALUE_NUM 357
342 #define FUNC_CFG_PRE_BOOT_MBA_VLAN_VALUE_MASK 0x0000FFFF
343 #define FUNC_CFG_PRE_BOOT_MBA_VLAN_VALUE_SHIFT 0
344 /* nvm cfg 358 - u32 mba_cfg2 */
345 #define FUNC_CFG_PRE_BOOT_MBA_VLAN_NUM 358
346 #define FUNC_CFG_PRE_BOOT_MBA_VLAN_MASK 0x00010000
347 #define FUNC_CFG_PRE_BOOT_MBA_VLAN_SHIFT 16
348 #define FUNC_CFG_PRE_BOOT_MBA_VLAN_DISABLED (0x0L << 16)
349 #define NS_FUNC_CFG_PRE_BOOT_MBA_VLAN_DISABLED (0x0)
350 #define FUNC_CFG_PRE_BOOT_MBA_VLAN_ENABLED (0x1L << 16)
351 #define NS_FUNC_CFG_PRE_BOOT_MBA_VLAN_ENABLED (0x1)
352 
353 struct tx_doorbell {
355 #define TX_DOORBELL_IDX_MASK 0xffffffUL
356 #define TX_DOORBELL_IDX_SFT 0
357 #define TX_DOORBELL_KEY_MASK 0xf0000000UL
358 #define TX_DOORBELL_KEY_SFT 28
359  #define TX_DOORBELL_KEY_TX (0x0UL << 28)
360  #define TX_DOORBELL_KEY_LAST TX_DOORBELL_KEY_TX
361 };
362 
363 struct rx_doorbell {
365 #define RX_DOORBELL_IDX_MASK 0xffffffUL
366 #define RX_DOORBELL_IDX_SFT 0
367 #define RX_DOORBELL_KEY_MASK 0xf0000000UL
368 #define RX_DOORBELL_KEY_SFT 28
369  #define RX_DOORBELL_KEY_RX (0x1UL << 28)
370  #define RX_DOORBELL_KEY_LAST RX_DOORBELL_KEY_RX
371 };
372 
375 #define CMPL_DOORBELL_IDX_MASK 0xffffffUL
376 #define CMPL_DOORBELL_IDX_SFT 0
377 #define CMPL_DOORBELL_IDX_VALID 0x4000000UL
378 #define CMPL_DOORBELL_MASK 0x8000000UL
379 #define CMPL_DOORBELL_KEY_MASK 0xf0000000UL
380 #define CMPL_DOORBELL_KEY_SFT 28
381  #define CMPL_DOORBELL_KEY_CMPL (0x2UL << 28)
382  #define CMPL_DOORBELL_KEY_LAST CMPL_DOORBELL_KEY_CMPL
383 };
384 
385 /* dbc_dbc (size:64b/8B) */
386 struct dbc_dbc {
388  #define DBC_DBC_INDEX_MASK 0xffffffUL
389  #define DBC_DBC_INDEX_SFT 0
391  #define DBC_DBC_XID_MASK 0xfffffUL
392  #define DBC_DBC_XID_SFT 0
393  #define DBC_DBC_PATH_MASK 0x3000000UL
394  #define DBC_DBC_PATH_SFT 24
395  #define DBC_DBC_PATH_ROCE (0x0UL << 24)
396  #define DBC_DBC_PATH_L2 (0x1UL << 24)
397  #define DBC_DBC_PATH_ENGINE (0x2UL << 24)
398  #define DBC_DBC_PATH_LAST DBC_DBC_PATH_ENGINE
399  #define DBC_DBC_DEBUG_TRACE 0x8000000UL
400  #define DBC_DBC_TYPE_MASK 0xf0000000UL
401  #define DBC_DBC_TYPE_SFT 28
402  #define DBC_DBC_TYPE_SQ (0x0UL << 28)
403  #define DBC_DBC_TYPE_RQ (0x1UL << 28)
404  #define DBC_DBC_TYPE_SRQ (0x2UL << 28)
405  #define DBC_DBC_TYPE_SRQ_ARM (0x3UL << 28)
406  #define DBC_DBC_TYPE_CQ (0x4UL << 28)
407  #define DBC_DBC_TYPE_CQ_ARMSE (0x5UL << 28)
408  #define DBC_DBC_TYPE_CQ_ARMALL (0x6UL << 28)
409  #define DBC_DBC_TYPE_CQ_ARMENA (0x7UL << 28)
410  #define DBC_DBC_TYPE_SRQ_ARMENA (0x8UL << 28)
411  #define DBC_DBC_TYPE_CQ_CUTOFF_ACK (0x9UL << 28)
412  #define DBC_DBC_TYPE_NQ (0xaUL << 28)
413  #define DBC_DBC_TYPE_NQ_ARM (0xbUL << 28)
414  #define DBC_DBC_TYPE_NULL (0xfUL << 28)
415  #define DBC_DBC_TYPE_LAST DBC_DBC_TYPE_NULL
416 };
417 
418 /*******************************************************************************
419  * Transmit info.
420  *****************************************************************************/
421 struct tx_bd_short {
423 #define TX_BD_SHORT_TYPE_MASK 0x3fUL
424 #define TX_BD_SHORT_TYPE_SFT 0
425 #define TX_BD_SHORT_TYPE_TX_BD_SHORT 0x0UL
426 #define TX_BD_SHORT_TYPE_LAST TX_BD_SHORT_TYPE_TX_BD_SHORT
427 #define TX_BD_SHORT_FLAGS_MASK 0xffc0UL
428 #define TX_BD_SHORT_FLAGS_SFT 6
429 #define TX_BD_SHORT_FLAGS_PACKET_END 0x40UL
430 #define TX_BD_SHORT_FLAGS_NO_CMPL 0x80UL
431 #define TX_BD_SHORT_FLAGS_BD_CNT_MASK 0x1f00UL
432 #define TX_BD_SHORT_FLAGS_BD_CNT_SFT 8
433 #define TX_BD_SHORT_FLAGS_LHINT_MASK 0x6000UL
434 #define TX_BD_SHORT_FLAGS_LHINT_SFT 13
435 #define TX_BD_SHORT_FLAGS_LHINT_LT512 (0x0UL << 13)
436 #define TX_BD_SHORT_FLAGS_LHINT_LT1K (0x1UL << 13)
437 #define TX_BD_SHORT_FLAGS_LHINT_LT2K (0x2UL << 13)
438 #define TX_BD_SHORT_FLAGS_LHINT_GTE2K (0x3UL << 13)
439 #define TX_BD_SHORT_FLAGS_LHINT_LAST TX_BD_SHORT_FLAGS_LHINT_GTE2K
440 #define TX_BD_SHORT_FLAGS_COAL_NOW 0x8000UL
444 };
445 
446 struct tx_cmpl {
448 #define TX_CMPL_TYPE_MASK 0x3fUL
449 #define TX_CMPL_TYPE_SFT 0
450 #define TX_CMPL_TYPE_TX_L2 0x0UL
451 #define TX_CMPL_TYPE_LAST TX_CMPL_TYPE_TX_L2
452 #define TX_CMPL_FLAGS_MASK 0xffc0UL
453 #define TX_CMPL_FLAGS_SFT 6
454 #define TX_CMPL_FLAGS_ERROR 0x40UL
455 #define TX_CMPL_FLAGS_PUSH 0x80UL
459 #define TX_CMPL_V 0x1UL
460 #define TX_CMPL_ERRORS_MASK 0xfffeUL
461 #define TX_CMPL_ERRORS_SFT 1
462 #define TX_CMPL_ERRORS_BUFFER_ERROR_MASK 0xeUL
463 #define TX_CMPL_ERRORS_BUFFER_ERROR_SFT 1
464 #define TX_CMPL_ERRORS_BUFFER_ERROR_NO_ERROR (0x0UL << 1)
465 #define TX_CMPL_ERRORS_BUFFER_ERROR_BAD_FMT (0x2UL << 1)
466 #define TX_CMPL_ERRORS_BUFFER_ERROR_LAST TX_CMPL_ERRORS_BUFFER_ERROR_BAD_FMT
467 #define TX_CMPL_ERRORS_ZERO_LENGTH_PKT 0x10UL
468 #define TX_CMPL_ERRORS_EXCESSIVE_BD_LENGTH 0x20UL
469 #define TX_CMPL_ERRORS_DMA_ERROR 0x40UL
470 #define TX_CMPL_ERRORS_HINT_TOO_SHORT 0x80UL
471 #define TX_CMPL_ERRORS_POISON_TLP_ERROR 0x100UL
474 };
475 
476 struct tx_info {
477  void *bd_virt;
479  u16 prod_id; /* Tx producer index. */
482  u32 cnt; /* Tx statistics. */
484 };
485 
486 struct cmpl_base {
488 #define CMPL_BASE_TYPE_MASK 0x3fUL
489 #define CMPL_BASE_TYPE_SFT 0
490 #define CMPL_BASE_TYPE_TX_L2 0x0UL
491 #define CMPL_BASE_TYPE_RX_L2 0x11UL
492 #define CMPL_BASE_TYPE_RX_AGG 0x12UL
493 #define CMPL_BASE_TYPE_RX_TPA_START 0x13UL
494 #define CMPL_BASE_TYPE_RX_TPA_END 0x15UL
495 #define CMPL_BASE_TYPE_STAT_EJECT 0x1aUL
496 #define CMPL_BASE_TYPE_HWRM_DONE 0x20UL
497 #define CMPL_BASE_TYPE_HWRM_FWD_REQ 0x22UL
498 #define CMPL_BASE_TYPE_HWRM_FWD_RESP 0x24UL
499 #define CMPL_BASE_TYPE_HWRM_ASYNC_EVENT 0x2eUL
500 #define CMPL_BASE_TYPE_CQ_NOTIFICATION 0x30UL
501 #define CMPL_BASE_TYPE_SRQ_EVENT 0x32UL
502 #define CMPL_BASE_TYPE_DBQ_EVENT 0x34UL
503 #define CMPL_BASE_TYPE_QP_EVENT 0x38UL
504 #define CMPL_BASE_TYPE_FUNC_EVENT 0x3aUL
505 #define CMPL_BASE_TYPE_LAST CMPL_BASE_TYPE_FUNC_EVENT
509 #define CMPL_BASE_V 0x1UL
510 #define CMPL_BASE_INFO3_MASK 0xfffffffeUL
511 #define CMPL_BASE_INFO3_SFT 1
513 };
514 
515 struct cmp_info {
516  void *bd_virt;
520  u8 res[3];
521 };
522 
523 /* Completion Queue Notification */
524 /* nq_cn (size:128b/16B) */
525 struct nq_base {
527 /*
528  * This field indicates the exact type of the completion.
529  * By convention, the LSB identifies the length of the
530  * record in 16B units. Even values indicate 16B
531  * records. Odd values indicate 32B
532  * records.
533  */
534 #define NQ_CN_TYPE_MASK 0x3fUL
535 #define NQ_CN_TYPE_SFT 0
536 /* CQ Notification */
537  #define NQ_CN_TYPE_CQ_NOTIFICATION 0x30UL
538  #define NQ_CN_TYPE_LAST NQ_CN_TYPE_CQ_NOTIFICATION
540 /*
541  * This is an application level ID used to identify the
542  * CQ. This field carries the lower 32b of the value.
543  */
546 /*
547  * This value is written by the NIC such that it will be different
548  * for each pass through the completion queue. The even passes
549  * will write 1. The odd passes will write 0.
550  */
551 #define NQ_CN_V 0x1UL
552 /*
553  * This is an application level ID used to identify the
554  * CQ. This field carries the upper 32b of the value.
555  */
557 };
558 
559 struct nq_info {
560  void *bd_virt;
564  u8 res[3];
565 };
566 
567 struct rx_pkt_cmpl {
569 #define RX_PKT_CMPL_TYPE_MASK 0x3fUL
570 #define RX_PKT_CMPL_TYPE_SFT 0
571 #define RX_PKT_CMPL_TYPE_RX_L2 0x11UL
572 #define RX_PKT_CMPL_TYPE_LAST RX_PKT_CMPL_TYPE_RX_L2
573 #define RX_PKT_CMPL_FLAGS_MASK 0xffc0UL
574 #define RX_PKT_CMPL_FLAGS_SFT 6
575 #define RX_PKT_CMPL_FLAGS_ERROR 0x40UL
576 #define RX_PKT_CMPL_FLAGS_PLACEMENT_MASK 0x380UL
577 #define RX_PKT_CMPL_FLAGS_PLACEMENT_SFT 7
578 #define RX_PKT_CMPL_FLAGS_PLACEMENT_NORMAL (0x0UL << 7)
579 #define RX_PKT_CMPL_FLAGS_PLACEMENT_JUMBO (0x1UL << 7)
580 #define RX_PKT_CMPL_FLAGS_PLACEMENT_HDS (0x2UL << 7)
581 #define RX_PKT_CMPL_FLAGS_PLACEMENT_LAST RX_PKT_CMPL_FLAGS_PLACEMENT_HDS
582 #define RX_PKT_CMPL_FLAGS_RSS_VALID 0x400UL
583 #define RX_PKT_CMPL_FLAGS_UNUSED 0x800UL
584 #define RX_PKT_CMPL_FLAGS_ITYPE_MASK 0xf000UL
585 #define RX_PKT_CMPL_FLAGS_ITYPE_SFT 12
586 #define RX_PKT_CMPL_FLAGS_ITYPE_NOT_KNOWN (0x0UL << 12)
587 #define RX_PKT_CMPL_FLAGS_ITYPE_IP (0x1UL << 12)
588 #define RX_PKT_CMPL_FLAGS_ITYPE_TCP (0x2UL << 12)
589 #define RX_PKT_CMPL_FLAGS_ITYPE_UDP (0x3UL << 12)
590 #define RX_PKT_CMPL_FLAGS_ITYPE_FCOE (0x4UL << 12)
591 #define RX_PKT_CMPL_FLAGS_ITYPE_ROCE (0x5UL << 12)
592 #define RX_PKT_CMPL_FLAGS_ITYPE_ICMP (0x7UL << 12)
593 #define RX_PKT_CMPL_FLAGS_ITYPE_PTP_WO_TIMESTAMP (0x8UL << 12)
594 #define RX_PKT_CMPL_FLAGS_ITYPE_PTP_W_TIMESTAMP (0x9UL << 12)
595 #define RX_PKT_CMPL_FLAGS_ITYPE_LAST RX_PKT_CMPL_FLAGS_ITYPE_PTP_W_TIMESTAMP
599 #define RX_PKT_CMPL_V1 0x1UL
600 #define RX_PKT_CMPL_AGG_BUFS_MASK 0x3eUL
601 #define RX_PKT_CMPL_AGG_BUFS_SFT 1
602 #define RX_PKT_CMPL_UNUSED1_MASK 0xc0UL
603 #define RX_PKT_CMPL_UNUSED1_SFT 6
608 };
609 
612 #define RX_PKT_CMPL_FLAGS2_IP_CS_CALC 0x1UL
613 #define RX_PKT_CMPL_FLAGS2_L4_CS_CALC 0x2UL
614 #define RX_PKT_CMPL_FLAGS2_T_IP_CS_CALC 0x4UL
615 #define RX_PKT_CMPL_FLAGS2_T_L4_CS_CALC 0x8UL
616 #define RX_PKT_CMPL_FLAGS2_META_FORMAT_MASK 0xf0UL
617 #define RX_PKT_CMPL_FLAGS2_META_FORMAT_SFT 4
618 #define RX_PKT_CMPL_FLAGS2_META_FORMAT_NONE (0x0UL << 4)
619 #define RX_PKT_CMPL_FLAGS2_META_FORMAT_VLAN (0x1UL << 4)
620 #define RX_PKT_CMPL_FLAGS2_META_FORMAT_LAST \
621  RX_PKT_CMPL_FLAGS2_META_FORMAT_VLAN
622 #define RX_PKT_CMPL_FLAGS2_IP_TYPE 0x100UL
624 #define RX_PKT_CMPL_METADATA_VID_MASK 0xfffUL
625 #define RX_PKT_CMPL_METADATA_VID_SFT 0
626 #define RX_PKT_CMPL_METADATA_DE 0x1000UL
627 #define RX_PKT_CMPL_METADATA_PRI_MASK 0xe000UL
628 #define RX_PKT_CMPL_METADATA_PRI_SFT 13
629 #define RX_PKT_CMPL_METADATA_TPID_MASK 0xffff0000UL
630 #define RX_PKT_CMPL_METADATA_TPID_SFT 16
632 #define RX_PKT_CMPL_V2 0x1UL
633 #define RX_PKT_CMPL_ERRORS_MASK 0xfffeUL
634 #define RX_PKT_CMPL_ERRORS_SFT 1
635 #define RX_PKT_CMPL_ERRORS_BUFFER_ERROR_MASK 0xeUL
636 #define RX_PKT_CMPL_ERRORS_BUFFER_ERROR_SFT 1
637 #define RX_PKT_CMPL_ERRORS_BUFFER_ERROR_NO_BUFFER (0x0UL << 1)
638 #define RX_PKT_CMPL_ERRORS_BUFFER_ERROR_DID_NOT_FIT (0x1UL << 1)
639 #define RX_PKT_CMPL_ERRORS_BUFFER_ERROR_NOT_ON_CHIP (0x2UL << 1)
640 #define RX_PKT_CMPL_ERRORS_BUFFER_ERROR_BAD_FORMAT (0x3UL << 1)
641 #define RX_PKT_CMPL_ERRORS_BUFFER_ERROR_LAST \
642  RX_PKT_CMPL_ERRORS_BUFFER_ERROR_BAD_FORMAT
643 #define RX_PKT_CMPL_ERRORS_IP_CS_ERROR 0x10UL
644 #define RX_PKT_CMPL_ERRORS_L4_CS_ERROR 0x20UL
645 #define RX_PKT_CMPL_ERRORS_T_IP_CS_ERROR 0x40UL
646 #define RX_PKT_CMPL_ERRORS_T_L4_CS_ERROR 0x80UL
647 #define RX_PKT_CMPL_ERRORS_CRC_ERROR 0x100UL
648 #define RX_PKT_CMPL_ERRORS_T_PKT_ERROR_MASK 0xe00UL
649 #define RX_PKT_CMPL_ERRORS_T_PKT_ERROR_SFT 9
650 #define RX_PKT_CMPL_ERRORS_T_PKT_ERROR_NO_ERROR (0x0UL << 9)
651 #define RX_PKT_CMPL_ERRORS_T_PKT_ERROR_T_L3_BAD_VERSION (0x1UL << 9)
652 #define RX_PKT_CMPL_ERRORS_T_PKT_ERROR_T_L3_BAD_HDR_LEN (0x2UL << 9)
653 #define RX_PKT_CMPL_ERRORS_T_PKT_ERROR_TUNNEL_TOTAL_ERROR (0x3UL << 9)
654 #define RX_PKT_CMPL_ERRORS_T_PKT_ERROR_T_IP_TOTAL_ERROR (0x4UL << 9)
655 #define RX_PKT_CMPL_ERRORS_T_PKT_ERROR_T_UDP_TOTAL_ERROR (0x5UL << 9)
656 #define RX_PKT_CMPL_ERRORS_T_PKT_ERROR_T_L3_BAD_TTL (0x6UL << 9)
657 #define RX_PKT_CMPL_ERRORS_T_PKT_ERROR_LAST \
658  RX_PKT_CMPL_ERRORS_T_PKT_ERROR_T_L3_BAD_TTL
659 #define RX_PKT_CMPL_ERRORS_PKT_ERROR_MASK 0xf000UL
660 #define RX_PKT_CMPL_ERRORS_PKT_ERROR_SFT 12
661 #define RX_PKT_CMPL_ERRORS_PKT_ERROR_NO_ERROR (0x0UL << 12)
662 #define RX_PKT_CMPL_ERRORS_PKT_ERROR_L3_BAD_VERSION (0x1UL << 12)
663 #define RX_PKT_CMPL_ERRORS_PKT_ERROR_L3_BAD_HDR_LEN (0x2UL << 12)
664 #define RX_PKT_CMPL_ERRORS_PKT_ERROR_L3_BAD_TTL (0x3UL << 12)
665 #define RX_PKT_CMPL_ERRORS_PKT_ERROR_IP_TOTAL_ERROR (0x4UL << 12)
666 #define RX_PKT_CMPL_ERRORS_PKT_ERROR_UDP_TOTAL_ERROR (0x5UL << 12)
667 #define RX_PKT_CMPL_ERRORS_PKT_ERROR_L4_BAD_HDR_LEN (0x6UL << 12)
668 #define RX_PKT_CMPL_ERRORS_PKT_ERROR_L4_BAD_HDR_LEN_TOO_SMALL (0x7UL << 12)
669 #define RX_PKT_CMPL_ERRORS_PKT_ERROR_L4_BAD_OPT_LEN (0x8UL << 12)
670 #define RX_PKT_CMPL_ERRORS_PKT_ERROR_LAST \
671  RX_PKT_CMPL_ERRORS_PKT_ERROR_L4_BAD_OPT_LEN
674 #define RX_PKT_CMPL_REORDER_MASK 0xffffffUL
675 #define RX_PKT_CMPL_REORDER_SFT 0
676 };
677 
680 #define RX_PROD_PKT_BD_TYPE_MASK 0x3fUL
681 #define RX_PROD_PKT_BD_TYPE_SFT 0
682 #define RX_PROD_PKT_BD_TYPE_RX_PROD_PKT 0x4UL
683 #define RX_PROD_PKT_BD_TYPE_LAST RX_PROD_PKT_BD_TYPE_RX_PROD_PKT
684 #define RX_PROD_PKT_BD_FLAGS_MASK 0xffc0UL
685 #define RX_PROD_PKT_BD_FLAGS_SFT 6
686 #define RX_PROD_PKT_BD_FLAGS_SOP_PAD 0x40UL
687 #define RX_PROD_PKT_BD_FLAGS_EOP_PAD 0x80UL
688 #define RX_PROD_PKT_BD_FLAGS_BUFFERS_MASK 0x300UL
689 #define RX_PROD_PKT_BD_FLAGS_BUFFERS_SFT 8
693 };
694 
695 struct rx_info {
696  void *bd_virt;
699  u16 buf_cnt; /* Total Rx buffer descriptors. */
701  u16 cons_id; /* Last processed consumer index. */
702 /* Receive statistics. */
708 };
709 
710 #define VALID_DRIVER_REG 0x0001
711 #define VALID_STAT_CTX 0x0002
712 #define VALID_RING_CQ 0x0004
713 #define VALID_RING_TX 0x0008
714 #define VALID_RING_RX 0x0010
715 #define VALID_RING_GRP 0x0020
716 #define VALID_VNIC_ID 0x0040
717 #define VALID_RX_IOB 0x0080
718 #define VALID_L2_FILTER 0x0100
719 #define VALID_RING_NQ 0x0200
720 
721 struct bnxt {
722 /* begin "general, frequently-used members" cacheline section */
723 /* If the IRQ handler (which runs lockless) needs to be
724  * quiesced, the following bitmask state is used. The
725  * SYNC flag is set by non-IRQ context code to initiate
726  * the quiescence.
727  *
728  * When the IRQ handler notices that SYNC is set, it
729  * disables interrupts and returns.
730  *
731  * When all outstanding IRQ handlers have returned after
732  * the SYNC flag has been set, the setter can be assured
733  * that interrupts will no longer get run.
734  *
735  * In this way all SMP driver locks are never acquired
736  * in hw IRQ context, only sw IRQ context or lower.
737  */
738  unsigned int irq_sync;
739  struct net_device *dev;
740  struct pci_device *pdev;
747  struct tx_info tx; /* Tx info. */
748  struct rx_info rx; /* Rx info. */
749  struct cmp_info cq; /* completion info. */
750  struct nq_info nq; /* completion info. */
758 /* PCI info. */
762  u8 pf_num; /* absolute PF number */
764  void *bar0;
765  void *bar1;
766  void *bar2;
767 /* Device info. */
769 /* chip num:16-31, rev:12-15, metal:4-11, bond_id:0-3 */
775  u8 mac_addr[ETH_ALEN]; /* HW MAC address */
822 };
823 
824 /* defines required to rsolve checkpatch errors / warnings */
825 #define test_if if
826 #define write32 writel
827 #define write64 writeq
828 #define pci_read_byte pci_read_config_byte
829 #define pci_read_word16 pci_read_config_word
830 #define pci_write_word pci_write_config_word
831 #define SHORT_CMD_SUPPORTED VER_GET_RESP_DEV_CAPS_CFG_SHORT_CMD_SUPPORTED
832 #define SHORT_CMD_REQUIRED VER_GET_RESP_DEV_CAPS_CFG_SHORT_CMD_REQUIRED
833 #define CQ_DOORBELL_KEY_MASK(a) (\
834  CMPL_DOORBELL_KEY_CMPL | \
835  CMPL_DOORBELL_IDX_VALID | \
836  CMPL_DOORBELL_MASK | \
837  (u32)(a))
838 #define CQ_DOORBELL_KEY_IDX(a) (\
839  CMPL_DOORBELL_KEY_CMPL | \
840  CMPL_DOORBELL_IDX_VALID | \
841  (u32)(a))
842 #define TX_BD_FLAGS (\
843  TX_BD_SHORT_TYPE_TX_BD_SHORT |\
844  TX_BD_SHORT_FLAGS_COAL_NOW |\
845  TX_BD_SHORT_FLAGS_PACKET_END |\
846  (1 << TX_BD_SHORT_FLAGS_BD_CNT_SFT))
847 #define PORT_PHY_FLAGS (\
848  BNXT_FLAG_NPAR_MODE | \
849  BNXT_FLAG_MULTI_HOST)
850 #define RING_FREE(bp, rid, flag) bnxt_hwrm_ring_free(bp, rid, flag)
851 #define SET_LINK(p, m, s) ((p & (m >> s)) << s)
852 #define SET_MBA(p, m, s) ((p & (m >> s)) << s)
853 #define SPEED_DRV_MASK LINK_SPEED_DRV_MASK
854 #define SPEED_DRV_SHIFT LINK_SPEED_DRV_SHIFT
855 #define SPEED_FW_MASK LINK_SPEED_FW_MASK
856 #define SPEED_FW_SHIFT LINK_SPEED_FW_SHIFT
857 #define D3_SPEED_FW_MASK D3_LINK_SPEED_FW_MASK
858 #define D3_SPEED_FW_SHIFT D3_LINK_SPEED_FW_SHIFT
859 #define MEDIA_AUTO_DETECT_MASK PORT_CFG_LINK_SETTINGS_MEDIA_AUTO_DETECT_MASK
860 #define MEDIA_AUTO_DETECT_SHIFT PORT_CFG_LINK_SETTINGS_MEDIA_AUTO_DETECT_SHIFT
861 #define VLAN_MASK FUNC_CFG_PRE_BOOT_MBA_VLAN_MASK
862 #define VLAN_SHIFT FUNC_CFG_PRE_BOOT_MBA_VLAN_SHIFT
863 #define VLAN_VALUE_MASK FUNC_CFG_PRE_BOOT_MBA_VLAN_VALUE_MASK
864 #define VLAN_VALUE_SHIFT FUNC_CFG_PRE_BOOT_MBA_VLAN_VALUE_SHIFT
865 #define VF_CFG_ENABLE_FLAGS (\
866  FUNC_VF_CFG_REQ_ENABLES_MTU | \
867  FUNC_VF_CFG_REQ_ENABLES_GUEST_VLAN | \
868  FUNC_VF_CFG_REQ_ENABLES_ASYNC_EVENT_CR | \
869  FUNC_VF_CFG_REQ_ENABLES_DFLT_MAC_ADDR)
870 
871 #define CHIP_NUM_57500 0x1750
u32 drop_vlan
Definition: bnxt.h:707
u16 subsystem_device
Definition: bnxt.h:760
uint16_t u16
Definition: stdint.h:21
u16 stat_ctx_id
Definition: bnxt.h:789
uint32_t __le32
Definition: efx_common.h:30
void * hwrm_addr_req
Definition: bnxt.h:741
u8 res[3]
Definition: bnxt.h:564
u32 opaque
Definition: bnxt.h:597
u16 errors_v
Definition: bnxt.h:458
u32 unused_2
Definition: bnxt.h:473
u32 drop_err
Definition: bnxt.h:705
u16 max_vnics
Definition: bnxt.h:801
dma_addr_t req_addr_mapping
Definition: bnxt.h:744
u32 cnt
Definition: bnxt.h:482
u32 key_mask_valid_idx
Definition: bnxt.h:374
u16 max_rsscos_ctxs
Definition: bnxt.h:812
u16 num_stat_ctxs
Definition: bnxt.h:820
void * bd_virt
Definition: bnxt.h:560
u32 cq_handle_high
Definition: bnxt.h:556
u16 ring_cnt
Definition: bnxt.h:562
u16 cons_id
Definition: bnxt.h:701
u16 min_cp_rings
Definition: bnxt.h:809
u16 min_tx_rings
Definition: bnxt.h:805
u16 flags_type
Definition: bnxt.h:447
u32 chip_id
Definition: bnxt.h:770
u16 unused_1
Definition: bnxt.h:472
u8 port_idx
Definition: bnxt.h:777
void * hwrm_addr_dma
Definition: bnxt.h:743
unsigned long dma_addr_t
Definition: bnx2.h:20
u16 hwrm_spec_code
Definition: bnxt.h:772
u32 cnt_req
Definition: bnxt.h:483
u16 ring_cnt
Definition: bnxt.h:518
u8 completion_bit
Definition: bnxt.h:563
u16 cmd_reg
Definition: bnxt.h:761
u16 rx_ring_id
Definition: bnxt.h:783
u16 min_hw_ring_grps
Definition: bnxt.h:803
struct tx_info tx
Definition: bnxt.h:747
unsigned int irq_sync
Definition: bnxt.h:738
u16 min_l2_ctxs
Definition: bnxt.h:813
u16 prod_id
Definition: bnxt.h:479
u32 flag_hwrm
Definition: bnxt.h:756
u32 reorder
Definition: bnxt.h:673
u32 v
Definition: bnxt.h:545
u16 len
Definition: bnxt.h:441
u16 min_rsscos_ctxs
Definition: bnxt.h:811
void * bar1
Definition: bnxt.h:765
u16 tx_ring_id
Definition: bnxt.h:782
dma_addr_t addr
Definition: bnxt.h:31
struct cmp_info cq
Definition: bnxt.h:749
u16 cons_id
Definition: bnxt.h:480
u8 rsvd
Definition: bnxt.h:797
dma_addr_t dma_addr_mapping
Definition: bnxt.h:746
u16 max_hw_ring_grps
Definition: bnxt.h:804
u32 info4
Definition: bnxt.h:512
void * bd_virt
Definition: bnxt.h:477
void * bd_virt
Definition: bnxt.h:696
u16 max_cp_rings
Definition: bnxt.h:810
u32 hwrm_cmd_timeout
Definition: bnxt.h:771
u32 drop_lb
Definition: bnxt.h:706
u16 type
Definition: bnxt.h:526
u16 max_msix
Definition: bnxt.h:802
u8 thor
Definition: bnxt.h:753
u32 opaque
Definition: bnxt.h:442
u16 reserved16
Definition: bnxt.h:539
u16 num_rx_rings
Definition: bnxt.h:819
struct rx_info rx
Definition: bnxt.h:748
u32 cq_handle_low
Definition: bnxt.h:544
Definition: bnxt.h:386
u32 key_idx
Definition: bnxt.h:354
u16 ring_cnt
Definition: bnxt.h:700
u16 last_resp_code
Definition: bnxt.h:754
u32 info2
Definition: bnxt.h:507
u32 info3_v
Definition: bnxt.h:508
u8 vf
Definition: bnxt.h:763
uint64_t u64
Definition: stdint.h:25
u16 ring_grp_id
Definition: bnxt.h:780
u32 rss_hash
Definition: bnxt.h:607
u16 seq_id
Definition: bnxt.h:755
u8 pf_num
Definition: bnxt.h:762
u8 media_detect
Definition: bnxt.h:796
struct io_buffer * iob[MAX_TX_DESC_CNT]
Definition: bnxt.h:478
#define NUM_RX_BUFFERS
Definition: bnxt.h:143
u32 flags2
Definition: bnxt.h:611
u16 subsystem_vendor
Definition: bnxt.h:759
void * bd_virt
Definition: bnxt.h:516
u16 max_tx_rings
Definition: bnxt.h:806
u16 min_stat_ctxs
Definition: bnxt.h:815
u8 rss_hash_type
Definition: bnxt.h:604
u16 hwrm_max_req_len
Definition: bnxt.h:773
u16 vf_res_strategy
Definition: bnxt.h:799
u16 unused_0
Definition: bnxt.h:456
u16 min_rx_rings
Definition: bnxt.h:807
u64 as_u64
Definition: bnxt.h:32
A PCI device.
Definition: pci.h:206
u8 agg_bufs_v1
Definition: bnxt.h:598
u16 min_vnics
Definition: bnxt.h:800
A network device.
Definition: netdevice.h:352
void * bar2
Definition: bnxt.h:766
struct pci_device * pdev
Definition: bnxt.h:740
u16 type
Definition: bnxt.h:487
u16 max_vfs
Definition: bnxt.h:798
Definition: bnxt.h:476
#define MAX_TX_DESC_CNT
Definition: bnxt.h:145
Definition: bnxt.h:559
u16 max_rx_rings
Definition: bnxt.h:808
u32 opaque
Definition: bnxt.h:457
#define ETH_ALEN
Definition: if_ether.h:8
u16 cfa_code
Definition: bnxt.h:672
u8 unused1
Definition: bnxt.h:606
u16 current_link_speed
Definition: bnxt.h:784
u32 link_set
Definition: bnxt.h:795
void * hwrm_addr_resp
Definition: bnxt.h:742
u32 cnt
Definition: bnxt.h:703
u16 link_status
Definition: bnxt.h:785
u16 max_stat_ctxs
Definition: bnxt.h:816
u16 flags_type
Definition: bnxt.h:422
u8 completion_bit
Definition: bnxt.h:519
u64 l2_filter_id
Definition: bnxt.h:787
u16 ring_cnt
Definition: bnxt.h:481
u8 queue_id
Definition: bnxt.h:752
struct net_device * dev
Definition: bnxt.h:739
u16 vlan_tx
Definition: bnxt.h:791
u32 flags
Definition: bnxt.h:757
u16 cons_id
Definition: bnxt.h:517
Definition: bnxt.h:446
u8 mac_addr[ETH_ALEN]
Definition: bnxt.h:775
u8 ordinal_value
Definition: bnxt.h:778
u32 opaque
Definition: bnxt.h:691
u32 mba_cfg2
Definition: bnxt.h:792
u16 info1
Definition: bnxt.h:506
u16 vlan_id
Definition: bnxt.h:790
u16 num_cmpl_rings
Definition: bnxt.h:817
u16 nq_ring_id
Definition: bnxt.h:751
__le32 type_path_xid
Definition: bnxt.h:390
u16 num_hw_ring_grps
Definition: bnxt.h:821
u16 iob_cnt
Definition: bnxt.h:698
u16 buf_cnt
Definition: bnxt.h:699
u16 errors_v2
Definition: bnxt.h:631
__le32 index
Definition: bnxt.h:387
u16 hwrm_max_ext_req_len
Definition: bnxt.h:774
u16 wait_link_timeout
Definition: bnxt.h:786
struct io_buffer * iob[NUM_RX_BUFFERS]
Definition: bnxt.h:697
Definition: bnxt.h:515
u32 medium
Definition: bnxt.h:793
u16 support_speeds
Definition: bnxt.h:794
u16 chip_num
Definition: bnxt.h:768
void * bar0
Definition: bnxt.h:764
u8 payload_offset
Definition: bnxt.h:605
u32 metadata
Definition: bnxt.h:623
Definition: bnxt.h:525
u16 mtu
Definition: bnxt.h:779
u16 len
Definition: bnxt.h:596
u16 cq_ring_id
Definition: bnxt.h:781
u16 flags_type
Definition: bnxt.h:568
u16 cons_id
Definition: bnxt.h:561
u32 good
Definition: bnxt.h:704
Definition: bnxt.h:695
struct nq_info nq
Definition: bnxt.h:750
u16 fid
Definition: bnxt.h:776
uint8_t u8
Definition: stdint.h:19
u8 res[3]
Definition: bnxt.h:520
uint32_t u32
Definition: stdint.h:23
u16 num_tx_rings
Definition: bnxt.h:818
union dma_addr64_t dma
Definition: bnxt.h:692
dma_addr_t resp_addr_mapping
Definition: bnxt.h:745
Definition: bnxt.h:721
u16 flags_type
Definition: bnxt.h:679
u32 key_idx
Definition: bnxt.h:364
union dma_addr64_t dma
Definition: bnxt.h:443
u16 max_l2_ctxs
Definition: bnxt.h:814
A persistent I/O buffer.
Definition: iobuf.h:33
u16 vnic_id
Definition: bnxt.h:788