diff options
author | Glenn Elliott <gelliott@cs.unc.edu> | 2012-03-04 19:47:13 -0500 |
---|---|---|
committer | Glenn Elliott <gelliott@cs.unc.edu> | 2012-03-04 19:47:13 -0500 |
commit | c71c03bda1e86c9d5198c5d83f712e695c4f2a1e (patch) | |
tree | ecb166cb3e2b7e2adb3b5e292245fefd23381ac8 /drivers/net/bnx2x/bnx2x.h | |
parent | ea53c912f8a86a8567697115b6a0d8152beee5c8 (diff) | |
parent | 6a00f206debf8a5c8899055726ad127dbeeed098 (diff) |
Merge branch 'mpi-master' into wip-k-fmlpwip-k-fmlp
Conflicts:
litmus/sched_cedf.c
Diffstat (limited to 'drivers/net/bnx2x/bnx2x.h')
-rw-r--r-- | drivers/net/bnx2x/bnx2x.h | 944 |
1 files changed, 791 insertions, 153 deletions
diff --git a/drivers/net/bnx2x/bnx2x.h b/drivers/net/bnx2x/bnx2x.h index 0c2d96ed561c..668a578c49e9 100644 --- a/drivers/net/bnx2x/bnx2x.h +++ b/drivers/net/bnx2x/bnx2x.h | |||
@@ -1,6 +1,6 @@ | |||
1 | /* bnx2x.h: Broadcom Everest network driver. | 1 | /* bnx2x.h: Broadcom Everest network driver. |
2 | * | 2 | * |
3 | * Copyright (c) 2007-2010 Broadcom Corporation | 3 | * Copyright (c) 2007-2011 Broadcom Corporation |
4 | * | 4 | * |
5 | * This program is free software; you can redistribute it and/or modify | 5 | * This program is free software; you can redistribute it and/or modify |
6 | * it under the terms of the GNU General Public License as published by | 6 | * it under the terms of the GNU General Public License as published by |
@@ -13,6 +13,8 @@ | |||
13 | 13 | ||
14 | #ifndef BNX2X_H | 14 | #ifndef BNX2X_H |
15 | #define BNX2X_H | 15 | #define BNX2X_H |
16 | #include <linux/netdevice.h> | ||
17 | #include <linux/types.h> | ||
16 | 18 | ||
17 | /* compilation time flags */ | 19 | /* compilation time flags */ |
18 | 20 | ||
@@ -20,26 +22,22 @@ | |||
20 | * (you will need to reboot afterwards) */ | 22 | * (you will need to reboot afterwards) */ |
21 | /* #define BNX2X_STOP_ON_ERROR */ | 23 | /* #define BNX2X_STOP_ON_ERROR */ |
22 | 24 | ||
23 | #define DRV_MODULE_VERSION "1.52.53-4" | 25 | #define DRV_MODULE_VERSION "1.62.12-0" |
24 | #define DRV_MODULE_RELDATE "2010/16/08" | 26 | #define DRV_MODULE_RELDATE "2011/03/20" |
25 | #define BNX2X_BC_VER 0x040200 | 27 | #define BNX2X_BC_VER 0x040200 |
26 | 28 | ||
27 | #if defined(CONFIG_VLAN_8021Q) || defined(CONFIG_VLAN_8021Q_MODULE) | ||
28 | #define BCM_VLAN 1 | ||
29 | #endif | ||
30 | |||
31 | #define BNX2X_MULTI_QUEUE | 29 | #define BNX2X_MULTI_QUEUE |
32 | 30 | ||
33 | #define BNX2X_NEW_NAPI | 31 | #define BNX2X_NEW_NAPI |
34 | 32 | ||
35 | 33 | #if defined(CONFIG_DCB) | |
36 | 34 | #define BCM_DCBNL | |
35 | #endif | ||
37 | #if defined(CONFIG_CNIC) || defined(CONFIG_CNIC_MODULE) | 36 | #if defined(CONFIG_CNIC) || defined(CONFIG_CNIC_MODULE) |
38 | #define BCM_CNIC 1 | 37 | #define BCM_CNIC 1 |
39 | #include "../cnic_if.h" | 38 | #include "../cnic_if.h" |
40 | #endif | 39 | #endif |
41 | 40 | ||
42 | |||
43 | #ifdef BCM_CNIC | 41 | #ifdef BCM_CNIC |
44 | #define BNX2X_MIN_MSIX_VEC_CNT 3 | 42 | #define BNX2X_MIN_MSIX_VEC_CNT 3 |
45 | #define BNX2X_MSIX_VEC_FP_START 2 | 43 | #define BNX2X_MSIX_VEC_FP_START 2 |
@@ -54,6 +52,7 @@ | |||
54 | #include "bnx2x_fw_defs.h" | 52 | #include "bnx2x_fw_defs.h" |
55 | #include "bnx2x_hsi.h" | 53 | #include "bnx2x_hsi.h" |
56 | #include "bnx2x_link.h" | 54 | #include "bnx2x_link.h" |
55 | #include "bnx2x_dcb.h" | ||
57 | #include "bnx2x_stats.h" | 56 | #include "bnx2x_stats.h" |
58 | 57 | ||
59 | /* error/debug prints */ | 58 | /* error/debug prints */ |
@@ -129,16 +128,19 @@ void bnx2x_panic_dump(struct bnx2x *bp); | |||
129 | } while (0) | 128 | } while (0) |
130 | #endif | 129 | #endif |
131 | 130 | ||
131 | #define bnx2x_mc_addr(ha) ((ha)->addr) | ||
132 | #define bnx2x_uc_addr(ha) ((ha)->addr) | ||
132 | 133 | ||
133 | #define U64_LO(x) (u32)(((u64)(x)) & 0xffffffff) | 134 | #define U64_LO(x) (u32)(((u64)(x)) & 0xffffffff) |
134 | #define U64_HI(x) (u32)(((u64)(x)) >> 32) | 135 | #define U64_HI(x) (u32)(((u64)(x)) >> 32) |
135 | #define HILO_U64(hi, lo) ((((u64)(hi)) << 32) + (lo)) | 136 | #define HILO_U64(hi, lo) ((((u64)(hi)) << 32) + (lo)) |
136 | 137 | ||
137 | 138 | ||
138 | #define REG_ADDR(bp, offset) (bp->regview + offset) | 139 | #define REG_ADDR(bp, offset) ((bp->regview) + (offset)) |
139 | 140 | ||
140 | #define REG_RD(bp, offset) readl(REG_ADDR(bp, offset)) | 141 | #define REG_RD(bp, offset) readl(REG_ADDR(bp, offset)) |
141 | #define REG_RD8(bp, offset) readb(REG_ADDR(bp, offset)) | 142 | #define REG_RD8(bp, offset) readb(REG_ADDR(bp, offset)) |
143 | #define REG_RD16(bp, offset) readw(REG_ADDR(bp, offset)) | ||
142 | 144 | ||
143 | #define REG_WR(bp, offset, val) writel((u32)val, REG_ADDR(bp, offset)) | 145 | #define REG_WR(bp, offset, val) writel((u32)val, REG_ADDR(bp, offset)) |
144 | #define REG_WR8(bp, offset, val) writeb((u8)val, REG_ADDR(bp, offset)) | 146 | #define REG_WR8(bp, offset, val) writeb((u8)val, REG_ADDR(bp, offset)) |
@@ -160,6 +162,9 @@ void bnx2x_panic_dump(struct bnx2x *bp); | |||
160 | offset, len32); \ | 162 | offset, len32); \ |
161 | } while (0) | 163 | } while (0) |
162 | 164 | ||
165 | #define REG_WR_DMAE_LEN(bp, offset, valp, len32) \ | ||
166 | REG_WR_DMAE(bp, offset, valp, len32) | ||
167 | |||
163 | #define VIRT_WR_DMAE_LEN(bp, data, addr, len32, le32_swap) \ | 168 | #define VIRT_WR_DMAE_LEN(bp, data, addr, len32, le32_swap) \ |
164 | do { \ | 169 | do { \ |
165 | memcpy(GUNZIP_BUF(bp), data, (len32) * 4); \ | 170 | memcpy(GUNZIP_BUF(bp), data, (len32) * 4); \ |
@@ -175,16 +180,81 @@ void bnx2x_panic_dump(struct bnx2x *bp); | |||
175 | offsetof(struct shmem2_region, field)) | 180 | offsetof(struct shmem2_region, field)) |
176 | #define SHMEM2_RD(bp, field) REG_RD(bp, SHMEM2_ADDR(bp, field)) | 181 | #define SHMEM2_RD(bp, field) REG_RD(bp, SHMEM2_ADDR(bp, field)) |
177 | #define SHMEM2_WR(bp, field, val) REG_WR(bp, SHMEM2_ADDR(bp, field), val) | 182 | #define SHMEM2_WR(bp, field, val) REG_WR(bp, SHMEM2_ADDR(bp, field), val) |
183 | #define MF_CFG_ADDR(bp, field) (bp->common.mf_cfg_base + \ | ||
184 | offsetof(struct mf_cfg, field)) | ||
185 | #define MF2_CFG_ADDR(bp, field) (bp->common.mf2_cfg_base + \ | ||
186 | offsetof(struct mf2_cfg, field)) | ||
187 | |||
188 | #define MF_CFG_RD(bp, field) REG_RD(bp, MF_CFG_ADDR(bp, field)) | ||
189 | #define MF_CFG_WR(bp, field, val) REG_WR(bp,\ | ||
190 | MF_CFG_ADDR(bp, field), (val)) | ||
191 | #define MF2_CFG_RD(bp, field) REG_RD(bp, MF2_CFG_ADDR(bp, field)) | ||
178 | 192 | ||
179 | #define MF_CFG_RD(bp, field) SHMEM_RD(bp, mf_cfg.field) | 193 | #define SHMEM2_HAS(bp, field) ((bp)->common.shmem2_base && \ |
180 | #define MF_CFG_WR(bp, field, val) SHMEM_WR(bp, mf_cfg.field, val) | 194 | (SHMEM2_RD((bp), size) > \ |
195 | offsetof(struct shmem2_region, field))) | ||
181 | 196 | ||
182 | #define EMAC_RD(bp, reg) REG_RD(bp, emac_base + reg) | 197 | #define EMAC_RD(bp, reg) REG_RD(bp, emac_base + reg) |
183 | #define EMAC_WR(bp, reg, val) REG_WR(bp, emac_base + reg, val) | 198 | #define EMAC_WR(bp, reg, val) REG_WR(bp, emac_base + reg, val) |
184 | 199 | ||
200 | /* SP SB indices */ | ||
201 | |||
202 | /* General SP events - stats query, cfc delete, etc */ | ||
203 | #define HC_SP_INDEX_ETH_DEF_CONS 3 | ||
204 | |||
205 | /* EQ completions */ | ||
206 | #define HC_SP_INDEX_EQ_CONS 7 | ||
207 | |||
208 | /* FCoE L2 connection completions */ | ||
209 | #define HC_SP_INDEX_ETH_FCOE_TX_CQ_CONS 6 | ||
210 | #define HC_SP_INDEX_ETH_FCOE_RX_CQ_CONS 4 | ||
211 | /* iSCSI L2 */ | ||
212 | #define HC_SP_INDEX_ETH_ISCSI_CQ_CONS 5 | ||
213 | #define HC_SP_INDEX_ETH_ISCSI_RX_CQ_CONS 1 | ||
214 | |||
215 | /* Special clients parameters */ | ||
216 | |||
217 | /* SB indices */ | ||
218 | /* FCoE L2 */ | ||
219 | #define BNX2X_FCOE_L2_RX_INDEX \ | ||
220 | (&bp->def_status_blk->sp_sb.\ | ||
221 | index_values[HC_SP_INDEX_ETH_FCOE_RX_CQ_CONS]) | ||
222 | |||
223 | #define BNX2X_FCOE_L2_TX_INDEX \ | ||
224 | (&bp->def_status_blk->sp_sb.\ | ||
225 | index_values[HC_SP_INDEX_ETH_FCOE_TX_CQ_CONS]) | ||
226 | |||
227 | /** | ||
228 | * CIDs and CLIDs: | ||
229 | * CLIDs below is a CLID for func 0, then the CLID for other | ||
230 | * functions will be calculated by the formula: | ||
231 | * | ||
232 | * FUNC_N_CLID_X = N * NUM_SPECIAL_CLIENTS + FUNC_0_CLID_X | ||
233 | * | ||
234 | */ | ||
235 | /* iSCSI L2 */ | ||
236 | #define BNX2X_ISCSI_ETH_CL_ID 17 | ||
237 | #define BNX2X_ISCSI_ETH_CID 17 | ||
238 | |||
239 | /* FCoE L2 */ | ||
240 | #define BNX2X_FCOE_ETH_CL_ID 18 | ||
241 | #define BNX2X_FCOE_ETH_CID 18 | ||
242 | |||
243 | /** Additional rings budgeting */ | ||
244 | #ifdef BCM_CNIC | ||
245 | #define CNIC_CONTEXT_USE 1 | ||
246 | #define FCOE_CONTEXT_USE 1 | ||
247 | #else | ||
248 | #define CNIC_CONTEXT_USE 0 | ||
249 | #define FCOE_CONTEXT_USE 0 | ||
250 | #endif /* BCM_CNIC */ | ||
251 | #define NONE_ETH_CONTEXT_USE (FCOE_CONTEXT_USE) | ||
252 | |||
185 | #define AEU_IN_ATTN_BITS_PXPPCICLOCKCLIENT_PARITY_ERROR \ | 253 | #define AEU_IN_ATTN_BITS_PXPPCICLOCKCLIENT_PARITY_ERROR \ |
186 | AEU_INPUTS_ATTN_BITS_PXPPCICLOCKCLIENT_PARITY_ERROR | 254 | AEU_INPUTS_ATTN_BITS_PXPPCICLOCKCLIENT_PARITY_ERROR |
187 | 255 | ||
256 | #define SM_RX_ID 0 | ||
257 | #define SM_TX_ID 1 | ||
188 | 258 | ||
189 | /* fast path */ | 259 | /* fast path */ |
190 | 260 | ||
@@ -254,11 +324,26 @@ union db_prod { | |||
254 | #define RX_SGE_MASK_LEN_MASK (RX_SGE_MASK_LEN - 1) | 324 | #define RX_SGE_MASK_LEN_MASK (RX_SGE_MASK_LEN - 1) |
255 | #define NEXT_SGE_MASK_ELEM(el) (((el) + 1) & RX_SGE_MASK_LEN_MASK) | 325 | #define NEXT_SGE_MASK_ELEM(el) (((el) + 1) & RX_SGE_MASK_LEN_MASK) |
256 | 326 | ||
327 | union host_hc_status_block { | ||
328 | /* pointer to fp status block e1x */ | ||
329 | struct host_hc_status_block_e1x *e1x_sb; | ||
330 | /* pointer to fp status block e2 */ | ||
331 | struct host_hc_status_block_e2 *e2_sb; | ||
332 | }; | ||
257 | 333 | ||
258 | struct bnx2x_fastpath { | 334 | struct bnx2x_fastpath { |
259 | 335 | ||
336 | #define BNX2X_NAPI_WEIGHT 128 | ||
260 | struct napi_struct napi; | 337 | struct napi_struct napi; |
261 | struct host_status_block *status_blk; | 338 | union host_hc_status_block status_blk; |
339 | /* chip independed shortcuts into sb structure */ | ||
340 | __le16 *sb_index_values; | ||
341 | __le16 *sb_running_index; | ||
342 | /* chip independed shortcut into rx_prods_offset memory */ | ||
343 | u32 ustorm_rx_prods_offset; | ||
344 | |||
345 | u32 rx_buf_size; | ||
346 | |||
262 | dma_addr_t status_blk_mapping; | 347 | dma_addr_t status_blk_mapping; |
263 | 348 | ||
264 | struct sw_tx_bd *tx_buf_ring; | 349 | struct sw_tx_bd *tx_buf_ring; |
@@ -288,10 +373,15 @@ struct bnx2x_fastpath { | |||
288 | #define BNX2X_FP_STATE_OPEN 0xa0000 | 373 | #define BNX2X_FP_STATE_OPEN 0xa0000 |
289 | #define BNX2X_FP_STATE_HALTING 0xb0000 | 374 | #define BNX2X_FP_STATE_HALTING 0xb0000 |
290 | #define BNX2X_FP_STATE_HALTED 0xc0000 | 375 | #define BNX2X_FP_STATE_HALTED 0xc0000 |
376 | #define BNX2X_FP_STATE_TERMINATING 0xd0000 | ||
377 | #define BNX2X_FP_STATE_TERMINATED 0xe0000 | ||
291 | 378 | ||
292 | u8 index; /* number in fp array */ | 379 | u8 index; /* number in fp array */ |
293 | u8 cl_id; /* eth client id */ | 380 | u8 cl_id; /* eth client id */ |
294 | u8 sb_id; /* status block number in HW */ | 381 | u8 cl_qzone_id; |
382 | u8 fw_sb_id; /* status block number in FW */ | ||
383 | u8 igu_sb_id; /* status block number in HW */ | ||
384 | u32 cid; | ||
295 | 385 | ||
296 | union db_prod tx_db; | 386 | union db_prod tx_db; |
297 | 387 | ||
@@ -301,8 +391,7 @@ struct bnx2x_fastpath { | |||
301 | u16 tx_bd_cons; | 391 | u16 tx_bd_cons; |
302 | __le16 *tx_cons_sb; | 392 | __le16 *tx_cons_sb; |
303 | 393 | ||
304 | __le16 fp_c_idx; | 394 | __le16 fp_hc_idx; |
305 | __le16 fp_u_idx; | ||
306 | 395 | ||
307 | u16 rx_bd_prod; | 396 | u16 rx_bd_prod; |
308 | u16 rx_bd_cons; | 397 | u16 rx_bd_cons; |
@@ -312,8 +401,6 @@ struct bnx2x_fastpath { | |||
312 | /* The last maximal completed SGE */ | 401 | /* The last maximal completed SGE */ |
313 | u16 last_max_sge; | 402 | u16 last_max_sge; |
314 | __le16 *rx_cons_sb; | 403 | __le16 *rx_cons_sb; |
315 | __le16 *rx_bd_cons_sb; | ||
316 | |||
317 | 404 | ||
318 | unsigned long tx_pkt, | 405 | unsigned long tx_pkt, |
319 | rx_pkt, | 406 | rx_pkt, |
@@ -345,6 +432,21 @@ struct bnx2x_fastpath { | |||
345 | 432 | ||
346 | #define bnx2x_fp(bp, nr, var) (bp->fp[nr].var) | 433 | #define bnx2x_fp(bp, nr, var) (bp->fp[nr].var) |
347 | 434 | ||
435 | /* Use 2500 as a mini-jumbo MTU for FCoE */ | ||
436 | #define BNX2X_FCOE_MINI_JUMBO_MTU 2500 | ||
437 | |||
438 | #ifdef BCM_CNIC | ||
439 | /* FCoE L2 `fastpath' is right after the eth entries */ | ||
440 | #define FCOE_IDX BNX2X_NUM_ETH_QUEUES(bp) | ||
441 | #define bnx2x_fcoe_fp(bp) (&bp->fp[FCOE_IDX]) | ||
442 | #define bnx2x_fcoe(bp, var) (bnx2x_fcoe_fp(bp)->var) | ||
443 | #define IS_FCOE_FP(fp) (fp->index == FCOE_IDX) | ||
444 | #define IS_FCOE_IDX(idx) ((idx) == FCOE_IDX) | ||
445 | #else | ||
446 | #define IS_FCOE_FP(fp) false | ||
447 | #define IS_FCOE_IDX(idx) false | ||
448 | #endif | ||
449 | |||
348 | 450 | ||
349 | /* MC hsi */ | 451 | /* MC hsi */ |
350 | #define MAX_FETCH_BD 13 /* HW max BDs per packet */ | 452 | #define MAX_FETCH_BD 13 /* HW max BDs per packet */ |
@@ -356,6 +458,8 @@ struct bnx2x_fastpath { | |||
356 | #define NUM_TX_BD (TX_DESC_CNT * NUM_TX_RINGS) | 458 | #define NUM_TX_BD (TX_DESC_CNT * NUM_TX_RINGS) |
357 | #define MAX_TX_BD (NUM_TX_BD - 1) | 459 | #define MAX_TX_BD (NUM_TX_BD - 1) |
358 | #define MAX_TX_AVAIL (MAX_TX_DESC_CNT * NUM_TX_RINGS - 2) | 460 | #define MAX_TX_AVAIL (MAX_TX_DESC_CNT * NUM_TX_RINGS - 2) |
461 | #define INIT_JUMBO_TX_RING_SIZE MAX_TX_AVAIL | ||
462 | #define INIT_TX_RING_SIZE MAX_TX_AVAIL | ||
359 | #define NEXT_TX_IDX(x) ((((x) & MAX_TX_DESC_CNT) == \ | 463 | #define NEXT_TX_IDX(x) ((((x) & MAX_TX_DESC_CNT) == \ |
360 | (MAX_TX_DESC_CNT - 1)) ? (x) + 2 : (x) + 1) | 464 | (MAX_TX_DESC_CNT - 1)) ? (x) + 2 : (x) + 1) |
361 | #define TX_BD(x) ((x) & MAX_TX_BD) | 465 | #define TX_BD(x) ((x) & MAX_TX_BD) |
@@ -369,6 +473,10 @@ struct bnx2x_fastpath { | |||
369 | #define NUM_RX_BD (RX_DESC_CNT * NUM_RX_RINGS) | 473 | #define NUM_RX_BD (RX_DESC_CNT * NUM_RX_RINGS) |
370 | #define MAX_RX_BD (NUM_RX_BD - 1) | 474 | #define MAX_RX_BD (NUM_RX_BD - 1) |
371 | #define MAX_RX_AVAIL (MAX_RX_DESC_CNT * NUM_RX_RINGS - 2) | 475 | #define MAX_RX_AVAIL (MAX_RX_DESC_CNT * NUM_RX_RINGS - 2) |
476 | #define MIN_RX_SIZE_TPA 72 | ||
477 | #define MIN_RX_SIZE_NONTPA 10 | ||
478 | #define INIT_JUMBO_RX_RING_SIZE MAX_RX_AVAIL | ||
479 | #define INIT_RX_RING_SIZE MAX_RX_AVAIL | ||
372 | #define NEXT_RX_IDX(x) ((((x) & RX_DESC_MASK) == \ | 480 | #define NEXT_RX_IDX(x) ((((x) & RX_DESC_MASK) == \ |
373 | (MAX_RX_DESC_CNT - 1)) ? (x) + 3 : (x) + 1) | 481 | (MAX_RX_DESC_CNT - 1)) ? (x) + 3 : (x) + 1) |
374 | #define RX_BD(x) ((x) & MAX_RX_BD) | 482 | #define RX_BD(x) ((x) & MAX_RX_BD) |
@@ -419,11 +527,12 @@ struct bnx2x_fastpath { | |||
419 | le32_to_cpu((bd)->addr_lo)) | 527 | le32_to_cpu((bd)->addr_lo)) |
420 | #define BD_UNMAP_LEN(bd) (le16_to_cpu((bd)->nbytes)) | 528 | #define BD_UNMAP_LEN(bd) (le16_to_cpu((bd)->nbytes)) |
421 | 529 | ||
422 | 530 | #define BNX2X_DB_MIN_SHIFT 3 /* 8 bytes */ | |
531 | #define BNX2X_DB_SHIFT 7 /* 128 bytes*/ | ||
423 | #define DPM_TRIGER_TYPE 0x40 | 532 | #define DPM_TRIGER_TYPE 0x40 |
424 | #define DOORBELL(bp, cid, val) \ | 533 | #define DOORBELL(bp, cid, val) \ |
425 | do { \ | 534 | do { \ |
426 | writel((u32)(val), bp->doorbells + (BCM_PAGE_SIZE * (cid)) + \ | 535 | writel((u32)(val), bp->doorbells + (bp->db_size * (cid)) + \ |
427 | DPM_TRIGER_TYPE); \ | 536 | DPM_TRIGER_TYPE); \ |
428 | } while (0) | 537 | } while (0) |
429 | 538 | ||
@@ -481,31 +590,15 @@ struct bnx2x_fastpath { | |||
481 | #define BNX2X_RX_SUM_FIX(cqe) \ | 590 | #define BNX2X_RX_SUM_FIX(cqe) \ |
482 | BNX2X_PRS_FLAG_OVERETH_IPV4(cqe->fast_path_cqe.pars_flags.flags) | 591 | BNX2X_PRS_FLAG_OVERETH_IPV4(cqe->fast_path_cqe.pars_flags.flags) |
483 | 592 | ||
484 | 593 | #define U_SB_ETH_RX_CQ_INDEX 1 | |
485 | #define FP_USB_FUNC_OFF (2 + 2*HC_USTORM_SB_NUM_INDICES) | 594 | #define U_SB_ETH_RX_BD_INDEX 2 |
486 | #define FP_CSB_FUNC_OFF (2 + 2*HC_CSTORM_SB_NUM_INDICES) | 595 | #define C_SB_ETH_TX_CQ_INDEX 5 |
487 | |||
488 | #define U_SB_ETH_RX_CQ_INDEX HC_INDEX_U_ETH_RX_CQ_CONS | ||
489 | #define U_SB_ETH_RX_BD_INDEX HC_INDEX_U_ETH_RX_BD_CONS | ||
490 | #define C_SB_ETH_TX_CQ_INDEX HC_INDEX_C_ETH_TX_CQ_CONS | ||
491 | 596 | ||
492 | #define BNX2X_RX_SB_INDEX \ | 597 | #define BNX2X_RX_SB_INDEX \ |
493 | (&fp->status_blk->u_status_block.index_values[U_SB_ETH_RX_CQ_INDEX]) | 598 | (&fp->sb_index_values[U_SB_ETH_RX_CQ_INDEX]) |
494 | |||
495 | #define BNX2X_RX_SB_BD_INDEX \ | ||
496 | (&fp->status_blk->u_status_block.index_values[U_SB_ETH_RX_BD_INDEX]) | ||
497 | |||
498 | #define BNX2X_RX_SB_INDEX_NUM \ | ||
499 | (((U_SB_ETH_RX_CQ_INDEX << \ | ||
500 | USTORM_ETH_ST_CONTEXT_CONFIG_CQE_SB_INDEX_NUMBER_SHIFT) & \ | ||
501 | USTORM_ETH_ST_CONTEXT_CONFIG_CQE_SB_INDEX_NUMBER) | \ | ||
502 | ((U_SB_ETH_RX_BD_INDEX << \ | ||
503 | USTORM_ETH_ST_CONTEXT_CONFIG_BD_SB_INDEX_NUMBER_SHIFT) & \ | ||
504 | USTORM_ETH_ST_CONTEXT_CONFIG_BD_SB_INDEX_NUMBER)) | ||
505 | 599 | ||
506 | #define BNX2X_TX_SB_INDEX \ | 600 | #define BNX2X_TX_SB_INDEX \ |
507 | (&fp->status_blk->c_status_block.index_values[C_SB_ETH_TX_CQ_INDEX]) | 601 | (&fp->sb_index_values[C_SB_ETH_TX_CQ_INDEX]) |
508 | |||
509 | 602 | ||
510 | /* end of fast path */ | 603 | /* end of fast path */ |
511 | 604 | ||
@@ -521,12 +614,19 @@ struct bnx2x_common { | |||
521 | #define CHIP_NUM_57710 0x164e | 614 | #define CHIP_NUM_57710 0x164e |
522 | #define CHIP_NUM_57711 0x164f | 615 | #define CHIP_NUM_57711 0x164f |
523 | #define CHIP_NUM_57711E 0x1650 | 616 | #define CHIP_NUM_57711E 0x1650 |
617 | #define CHIP_NUM_57712 0x1662 | ||
618 | #define CHIP_NUM_57712E 0x1663 | ||
524 | #define CHIP_IS_E1(bp) (CHIP_NUM(bp) == CHIP_NUM_57710) | 619 | #define CHIP_IS_E1(bp) (CHIP_NUM(bp) == CHIP_NUM_57710) |
525 | #define CHIP_IS_57711(bp) (CHIP_NUM(bp) == CHIP_NUM_57711) | 620 | #define CHIP_IS_57711(bp) (CHIP_NUM(bp) == CHIP_NUM_57711) |
526 | #define CHIP_IS_57711E(bp) (CHIP_NUM(bp) == CHIP_NUM_57711E) | 621 | #define CHIP_IS_57711E(bp) (CHIP_NUM(bp) == CHIP_NUM_57711E) |
622 | #define CHIP_IS_57712(bp) (CHIP_NUM(bp) == CHIP_NUM_57712) | ||
623 | #define CHIP_IS_57712E(bp) (CHIP_NUM(bp) == CHIP_NUM_57712E) | ||
527 | #define CHIP_IS_E1H(bp) (CHIP_IS_57711(bp) || \ | 624 | #define CHIP_IS_E1H(bp) (CHIP_IS_57711(bp) || \ |
528 | CHIP_IS_57711E(bp)) | 625 | CHIP_IS_57711E(bp)) |
529 | #define IS_E1H_OFFSET CHIP_IS_E1H(bp) | 626 | #define CHIP_IS_E2(bp) (CHIP_IS_57712(bp) || \ |
627 | CHIP_IS_57712E(bp)) | ||
628 | #define CHIP_IS_E1x(bp) (CHIP_IS_E1((bp)) || CHIP_IS_E1H((bp))) | ||
629 | #define IS_E1H_OFFSET (CHIP_IS_E1H(bp) || CHIP_IS_E2(bp)) | ||
530 | 630 | ||
531 | #define CHIP_REV(bp) (bp->common.chip_id & 0x0000f000) | 631 | #define CHIP_REV(bp) (bp->common.chip_id & 0x0000f000) |
532 | #define CHIP_REV_Ax 0x00000000 | 632 | #define CHIP_REV_Ax 0x00000000 |
@@ -544,6 +644,7 @@ struct bnx2x_common { | |||
544 | 644 | ||
545 | #define CHIP_METAL(bp) (bp->common.chip_id & 0x00000ff0) | 645 | #define CHIP_METAL(bp) (bp->common.chip_id & 0x00000ff0) |
546 | #define CHIP_BOND_ID(bp) (bp->common.chip_id & 0x0000000f) | 646 | #define CHIP_BOND_ID(bp) (bp->common.chip_id & 0x0000000f) |
647 | #define CHIP_PARITY_ENABLED(bp) (CHIP_IS_E1(bp) || CHIP_IS_E1H(bp)) | ||
547 | 648 | ||
548 | int flash_size; | 649 | int flash_size; |
549 | #define NVRAM_1MB_SIZE 0x20000 /* 1M bit in bytes */ | 650 | #define NVRAM_1MB_SIZE 0x20000 /* 1M bit in bytes */ |
@@ -552,12 +653,34 @@ struct bnx2x_common { | |||
552 | 653 | ||
553 | u32 shmem_base; | 654 | u32 shmem_base; |
554 | u32 shmem2_base; | 655 | u32 shmem2_base; |
656 | u32 mf_cfg_base; | ||
657 | u32 mf2_cfg_base; | ||
555 | 658 | ||
556 | u32 hw_config; | 659 | u32 hw_config; |
557 | 660 | ||
558 | u32 bc_ver; | 661 | u32 bc_ver; |
662 | |||
663 | u8 int_block; | ||
664 | #define INT_BLOCK_HC 0 | ||
665 | #define INT_BLOCK_IGU 1 | ||
666 | #define INT_BLOCK_MODE_NORMAL 0 | ||
667 | #define INT_BLOCK_MODE_BW_COMP 2 | ||
668 | #define CHIP_INT_MODE_IS_NBC(bp) \ | ||
669 | (CHIP_IS_E2(bp) && \ | ||
670 | !((bp)->common.int_block & INT_BLOCK_MODE_BW_COMP)) | ||
671 | #define CHIP_INT_MODE_IS_BC(bp) (!CHIP_INT_MODE_IS_NBC(bp)) | ||
672 | |||
673 | u8 chip_port_mode; | ||
674 | #define CHIP_4_PORT_MODE 0x0 | ||
675 | #define CHIP_2_PORT_MODE 0x1 | ||
676 | #define CHIP_PORT_MODE_NONE 0x2 | ||
677 | #define CHIP_MODE(bp) (bp->common.chip_port_mode) | ||
678 | #define CHIP_MODE_IS_4_PORT(bp) (CHIP_MODE(bp) == CHIP_4_PORT_MODE) | ||
559 | }; | 679 | }; |
560 | 680 | ||
681 | /* IGU MSIX STATISTICS on 57712: 64 for VFs; 4 for PFs; 4 for Attentions */ | ||
682 | #define BNX2X_IGU_STAS_MSG_VF_CNT 64 | ||
683 | #define BNX2X_IGU_STAS_MSG_PF_CNT 4 | ||
561 | 684 | ||
562 | /* end of common */ | 685 | /* end of common */ |
563 | 686 | ||
@@ -566,13 +689,13 @@ struct bnx2x_common { | |||
566 | struct bnx2x_port { | 689 | struct bnx2x_port { |
567 | u32 pmf; | 690 | u32 pmf; |
568 | 691 | ||
569 | u32 link_config; | 692 | u32 link_config[LINK_CONFIG_SIZE]; |
570 | 693 | ||
571 | u32 supported; | 694 | u32 supported[LINK_CONFIG_SIZE]; |
572 | /* link settings - missing defines */ | 695 | /* link settings - missing defines */ |
573 | #define SUPPORTED_2500baseX_Full (1 << 15) | 696 | #define SUPPORTED_2500baseX_Full (1 << 15) |
574 | 697 | ||
575 | u32 advertising; | 698 | u32 advertising[LINK_CONFIG_SIZE]; |
576 | /* link settings - missing defines */ | 699 | /* link settings - missing defines */ |
577 | #define ADVERTISED_2500baseX_Full (1 << 15) | 700 | #define ADVERTISED_2500baseX_Full (1 << 15) |
578 | 701 | ||
@@ -589,27 +712,114 @@ struct bnx2x_port { | |||
589 | 712 | ||
590 | /* end of port */ | 713 | /* end of port */ |
591 | 714 | ||
715 | /* e1h Classification CAM line allocations */ | ||
716 | enum { | ||
717 | CAM_ETH_LINE = 0, | ||
718 | CAM_ISCSI_ETH_LINE, | ||
719 | CAM_FIP_ETH_LINE, | ||
720 | CAM_FIP_MCAST_LINE, | ||
721 | CAM_MAX_PF_LINE = CAM_FIP_MCAST_LINE | ||
722 | }; | ||
723 | /* number of MACs per function in NIG memory - used for SI mode */ | ||
724 | #define NIG_LLH_FUNC_MEM_SIZE 16 | ||
725 | /* number of entries in NIG_REG_LLHX_FUNC_MEM */ | ||
726 | #define NIG_LLH_FUNC_MEM_MAX_OFFSET 8 | ||
727 | |||
728 | #define BNX2X_VF_ID_INVALID 0xFF | ||
729 | |||
730 | /* | ||
731 | * The total number of L2 queues, MSIX vectors and HW contexts (CIDs) is | ||
732 | * control by the number of fast-path status blocks supported by the | ||
733 | * device (HW/FW). Each fast-path status block (FP-SB) aka non-default | ||
734 | * status block represents an independent interrupts context that can | ||
735 | * serve a regular L2 networking queue. However special L2 queues such | ||
736 | * as the FCoE queue do not require a FP-SB and other components like | ||
737 | * the CNIC may consume FP-SB reducing the number of possible L2 queues | ||
738 | * | ||
739 | * If the maximum number of FP-SB available is X then: | ||
740 | * a. If CNIC is supported it consumes 1 FP-SB thus the max number of | ||
741 | * regular L2 queues is Y=X-1 | ||
742 | * b. in MF mode the actual number of L2 queues is Y= (X-1/MF_factor) | ||
743 | * c. If the FCoE L2 queue is supported the actual number of L2 queues | ||
744 | * is Y+1 | ||
745 | * d. The number of irqs (MSIX vectors) is either Y+1 (one extra for | ||
746 | * slow-path interrupts) or Y+2 if CNIC is supported (one additional | ||
747 | * FP interrupt context for the CNIC). | ||
748 | * e. The number of HW context (CID count) is always X or X+1 if FCoE | ||
749 | * L2 queue is supported. the cid for the FCoE L2 queue is always X. | ||
750 | */ | ||
751 | |||
752 | #define FP_SB_MAX_E1x 16 /* fast-path interrupt contexts E1x */ | ||
753 | #define FP_SB_MAX_E2 16 /* fast-path interrupt contexts E2 */ | ||
592 | 754 | ||
755 | /* | ||
756 | * cid_cnt paramter below refers to the value returned by | ||
757 | * 'bnx2x_get_l2_cid_count()' routine | ||
758 | */ | ||
593 | 759 | ||
594 | #ifdef BCM_CNIC | 760 | /* |
595 | #define MAX_CONTEXT 15 | 761 | * The number of FP context allocated by the driver == max number of regular |
596 | #else | 762 | * L2 queues + 1 for the FCoE L2 queue |
597 | #define MAX_CONTEXT 16 | 763 | */ |
598 | #endif | 764 | #define L2_FP_COUNT(cid_cnt) ((cid_cnt) - CNIC_CONTEXT_USE) |
765 | |||
766 | /* | ||
767 | * The number of FP-SB allocated by the driver == max number of regular L2 | ||
768 | * queues + 1 for the CNIC which also consumes an FP-SB | ||
769 | */ | ||
770 | #define FP_SB_COUNT(cid_cnt) ((cid_cnt) - FCOE_CONTEXT_USE) | ||
771 | #define NUM_IGU_SB_REQUIRED(cid_cnt) \ | ||
772 | (FP_SB_COUNT(cid_cnt) - NONE_ETH_CONTEXT_USE) | ||
599 | 773 | ||
600 | union cdu_context { | 774 | union cdu_context { |
601 | struct eth_context eth; | 775 | struct eth_context eth; |
602 | char pad[1024]; | 776 | char pad[1024]; |
603 | }; | 777 | }; |
604 | 778 | ||
779 | /* CDU host DB constants */ | ||
780 | #define CDU_ILT_PAGE_SZ_HW 3 | ||
781 | #define CDU_ILT_PAGE_SZ (4096 << CDU_ILT_PAGE_SZ_HW) /* 32K */ | ||
782 | #define ILT_PAGE_CIDS (CDU_ILT_PAGE_SZ / sizeof(union cdu_context)) | ||
783 | |||
784 | #ifdef BCM_CNIC | ||
785 | #define CNIC_ISCSI_CID_MAX 256 | ||
786 | #define CNIC_FCOE_CID_MAX 2048 | ||
787 | #define CNIC_CID_MAX (CNIC_ISCSI_CID_MAX + CNIC_FCOE_CID_MAX) | ||
788 | #define CNIC_ILT_LINES DIV_ROUND_UP(CNIC_CID_MAX, ILT_PAGE_CIDS) | ||
789 | #endif | ||
790 | |||
791 | #define QM_ILT_PAGE_SZ_HW 3 | ||
792 | #define QM_ILT_PAGE_SZ (4096 << QM_ILT_PAGE_SZ_HW) /* 32K */ | ||
793 | #define QM_CID_ROUND 1024 | ||
794 | |||
795 | #ifdef BCM_CNIC | ||
796 | /* TM (timers) host DB constants */ | ||
797 | #define TM_ILT_PAGE_SZ_HW 2 | ||
798 | #define TM_ILT_PAGE_SZ (4096 << TM_ILT_PAGE_SZ_HW) /* 16K */ | ||
799 | /* #define TM_CONN_NUM (CNIC_STARTING_CID+CNIC_ISCSI_CXT_MAX) */ | ||
800 | #define TM_CONN_NUM 1024 | ||
801 | #define TM_ILT_SZ (8 * TM_CONN_NUM) | ||
802 | #define TM_ILT_LINES DIV_ROUND_UP(TM_ILT_SZ, TM_ILT_PAGE_SZ) | ||
803 | |||
804 | /* SRC (Searcher) host DB constants */ | ||
805 | #define SRC_ILT_PAGE_SZ_HW 3 | ||
806 | #define SRC_ILT_PAGE_SZ (4096 << SRC_ILT_PAGE_SZ_HW) /* 32K */ | ||
807 | #define SRC_HASH_BITS 10 | ||
808 | #define SRC_CONN_NUM (1 << SRC_HASH_BITS) /* 1024 */ | ||
809 | #define SRC_ILT_SZ (sizeof(struct src_ent) * SRC_CONN_NUM) | ||
810 | #define SRC_T2_SZ SRC_ILT_SZ | ||
811 | #define SRC_ILT_LINES DIV_ROUND_UP(SRC_ILT_SZ, SRC_ILT_PAGE_SZ) | ||
812 | #endif | ||
813 | |||
605 | #define MAX_DMAE_C 8 | 814 | #define MAX_DMAE_C 8 |
606 | 815 | ||
607 | /* DMA memory not used in fastpath */ | 816 | /* DMA memory not used in fastpath */ |
608 | struct bnx2x_slowpath { | 817 | struct bnx2x_slowpath { |
609 | union cdu_context context[MAX_CONTEXT]; | ||
610 | struct eth_stats_query fw_stats; | 818 | struct eth_stats_query fw_stats; |
611 | struct mac_configuration_cmd mac_config; | 819 | struct mac_configuration_cmd mac_config; |
612 | struct mac_configuration_cmd mcast_config; | 820 | struct mac_configuration_cmd mcast_config; |
821 | struct mac_configuration_cmd uc_mac_config; | ||
822 | struct client_init_ramrod_data client_init_data; | ||
613 | 823 | ||
614 | /* used by dmae command executer */ | 824 | /* used by dmae command executer */ |
615 | struct dmae_command dmae[MAX_DMAE_C]; | 825 | struct dmae_command dmae[MAX_DMAE_C]; |
@@ -623,6 +833,8 @@ struct bnx2x_slowpath { | |||
623 | 833 | ||
624 | u32 wb_comp; | 834 | u32 wb_comp; |
625 | u32 wb_data[4]; | 835 | u32 wb_data[4]; |
836 | /* pfc configuration for DCBX ramrod */ | ||
837 | struct flow_control_configuration pfc_config; | ||
626 | }; | 838 | }; |
627 | 839 | ||
628 | #define bnx2x_sp(bp, var) (&bp->slowpath->var) | 840 | #define bnx2x_sp(bp, var) (&bp->slowpath->var) |
@@ -634,52 +846,97 @@ struct bnx2x_slowpath { | |||
634 | #define MAX_DYNAMIC_ATTN_GRPS 8 | 846 | #define MAX_DYNAMIC_ATTN_GRPS 8 |
635 | 847 | ||
636 | struct attn_route { | 848 | struct attn_route { |
637 | u32 sig[4]; | 849 | u32 sig[5]; |
850 | }; | ||
851 | |||
852 | struct iro { | ||
853 | u32 base; | ||
854 | u16 m1; | ||
855 | u16 m2; | ||
856 | u16 m3; | ||
857 | u16 size; | ||
858 | }; | ||
859 | |||
860 | struct hw_context { | ||
861 | union cdu_context *vcxt; | ||
862 | dma_addr_t cxt_mapping; | ||
863 | size_t size; | ||
638 | }; | 864 | }; |
639 | 865 | ||
866 | /* forward */ | ||
867 | struct bnx2x_ilt; | ||
868 | |||
640 | typedef enum { | 869 | typedef enum { |
641 | BNX2X_RECOVERY_DONE, | 870 | BNX2X_RECOVERY_DONE, |
642 | BNX2X_RECOVERY_INIT, | 871 | BNX2X_RECOVERY_INIT, |
643 | BNX2X_RECOVERY_WAIT, | 872 | BNX2X_RECOVERY_WAIT, |
644 | } bnx2x_recovery_state_t; | 873 | } bnx2x_recovery_state_t; |
645 | 874 | ||
875 | /** | ||
876 | * Event queue (EQ or event ring) MC hsi | ||
877 | * NUM_EQ_PAGES and EQ_DESC_CNT_PAGE must be power of 2 | ||
878 | */ | ||
879 | #define NUM_EQ_PAGES 1 | ||
880 | #define EQ_DESC_CNT_PAGE (BCM_PAGE_SIZE / sizeof(union event_ring_elem)) | ||
881 | #define EQ_DESC_MAX_PAGE (EQ_DESC_CNT_PAGE - 1) | ||
882 | #define NUM_EQ_DESC (EQ_DESC_CNT_PAGE * NUM_EQ_PAGES) | ||
883 | #define EQ_DESC_MASK (NUM_EQ_DESC - 1) | ||
884 | #define MAX_EQ_AVAIL (EQ_DESC_MAX_PAGE * NUM_EQ_PAGES - 2) | ||
885 | |||
886 | /* depends on EQ_DESC_CNT_PAGE being a power of 2 */ | ||
887 | #define NEXT_EQ_IDX(x) ((((x) & EQ_DESC_MAX_PAGE) == \ | ||
888 | (EQ_DESC_MAX_PAGE - 1)) ? (x) + 2 : (x) + 1) | ||
889 | |||
890 | /* depends on the above and on NUM_EQ_PAGES being a power of 2 */ | ||
891 | #define EQ_DESC(x) ((x) & EQ_DESC_MASK) | ||
892 | |||
893 | #define BNX2X_EQ_INDEX \ | ||
894 | (&bp->def_status_blk->sp_sb.\ | ||
895 | index_values[HC_SP_INDEX_EQ_CONS]) | ||
896 | |||
897 | /* This is a data that will be used to create a link report message. | ||
898 | * We will keep the data used for the last link report in order | ||
899 | * to prevent reporting the same link parameters twice. | ||
900 | */ | ||
901 | struct bnx2x_link_report_data { | ||
902 | u16 line_speed; /* Effective line speed */ | ||
903 | unsigned long link_report_flags;/* BNX2X_LINK_REPORT_XXX flags */ | ||
904 | }; | ||
905 | |||
906 | enum { | ||
907 | BNX2X_LINK_REPORT_FD, /* Full DUPLEX */ | ||
908 | BNX2X_LINK_REPORT_LINK_DOWN, | ||
909 | BNX2X_LINK_REPORT_RX_FC_ON, | ||
910 | BNX2X_LINK_REPORT_TX_FC_ON, | ||
911 | }; | ||
912 | |||
646 | struct bnx2x { | 913 | struct bnx2x { |
647 | /* Fields used in the tx and intr/napi performance paths | 914 | /* Fields used in the tx and intr/napi performance paths |
648 | * are grouped together in the beginning of the structure | 915 | * are grouped together in the beginning of the structure |
649 | */ | 916 | */ |
650 | struct bnx2x_fastpath fp[MAX_CONTEXT]; | 917 | struct bnx2x_fastpath *fp; |
651 | void __iomem *regview; | 918 | void __iomem *regview; |
652 | void __iomem *doorbells; | 919 | void __iomem *doorbells; |
653 | #ifdef BCM_CNIC | 920 | u16 db_size; |
654 | #define BNX2X_DB_SIZE (18*BCM_PAGE_SIZE) | ||
655 | #else | ||
656 | #define BNX2X_DB_SIZE (16*BCM_PAGE_SIZE) | ||
657 | #endif | ||
658 | 921 | ||
659 | struct net_device *dev; | 922 | struct net_device *dev; |
660 | struct pci_dev *pdev; | 923 | struct pci_dev *pdev; |
661 | 924 | ||
925 | struct iro *iro_arr; | ||
926 | #define IRO (bp->iro_arr) | ||
927 | |||
662 | atomic_t intr_sem; | 928 | atomic_t intr_sem; |
663 | 929 | ||
664 | bnx2x_recovery_state_t recovery_state; | 930 | bnx2x_recovery_state_t recovery_state; |
665 | int is_leader; | 931 | int is_leader; |
666 | #ifdef BCM_CNIC | 932 | struct msix_entry *msix_table; |
667 | struct msix_entry msix_table[MAX_CONTEXT+2]; | ||
668 | #else | ||
669 | struct msix_entry msix_table[MAX_CONTEXT+1]; | ||
670 | #endif | ||
671 | #define INT_MODE_INTx 1 | 933 | #define INT_MODE_INTx 1 |
672 | #define INT_MODE_MSI 2 | 934 | #define INT_MODE_MSI 2 |
673 | 935 | ||
674 | int tx_ring_size; | 936 | int tx_ring_size; |
675 | 937 | ||
676 | #ifdef BCM_VLAN | 938 | /* L2 header size + 2*VLANs (8 bytes) + LLC SNAP (8 bytes) */ |
677 | struct vlan_group *vlgrp; | 939 | #define ETH_OVREHEAD (ETH_HLEN + 8 + 8) |
678 | #endif | ||
679 | |||
680 | u32 rx_csum; | ||
681 | u32 rx_buf_size; | ||
682 | #define ETH_OVREHEAD (ETH_HLEN + 8) /* 8 for CRC + VLAN */ | ||
683 | #define ETH_MIN_PACKET_SIZE 60 | 940 | #define ETH_MIN_PACKET_SIZE 60 |
684 | #define ETH_MAX_PACKET_SIZE 1500 | 941 | #define ETH_MAX_PACKET_SIZE 1500 |
685 | #define ETH_MAX_JUMBO_PACKET_SIZE 9600 | 942 | #define ETH_MAX_JUMBO_PACKET_SIZE 9600 |
@@ -688,13 +945,12 @@ struct bnx2x { | |||
688 | #define BNX2X_RX_ALIGN_SHIFT ((L1_CACHE_SHIFT < 8) ? \ | 945 | #define BNX2X_RX_ALIGN_SHIFT ((L1_CACHE_SHIFT < 8) ? \ |
689 | L1_CACHE_SHIFT : 8) | 946 | L1_CACHE_SHIFT : 8) |
690 | #define BNX2X_RX_ALIGN (1 << BNX2X_RX_ALIGN_SHIFT) | 947 | #define BNX2X_RX_ALIGN (1 << BNX2X_RX_ALIGN_SHIFT) |
948 | #define BNX2X_PXP_DRAM_ALIGN (BNX2X_RX_ALIGN_SHIFT - 5) | ||
691 | 949 | ||
692 | struct host_def_status_block *def_status_blk; | 950 | struct host_sp_status_block *def_status_blk; |
693 | #define DEF_SB_ID 16 | 951 | #define DEF_SB_IGU_ID 16 |
694 | __le16 def_c_idx; | 952 | #define DEF_SB_ID HC_SP_SB_ID |
695 | __le16 def_u_idx; | 953 | __le16 def_idx; |
696 | __le16 def_x_idx; | ||
697 | __le16 def_t_idx; | ||
698 | __le16 def_att_idx; | 954 | __le16 def_att_idx; |
699 | u32 attn_state; | 955 | u32 attn_state; |
700 | struct attn_route attn_group[MAX_DYNAMIC_ATTN_GRPS]; | 956 | struct attn_route attn_group[MAX_DYNAMIC_ATTN_GRPS]; |
@@ -706,10 +962,18 @@ struct bnx2x { | |||
706 | struct eth_spe *spq_prod_bd; | 962 | struct eth_spe *spq_prod_bd; |
707 | struct eth_spe *spq_last_bd; | 963 | struct eth_spe *spq_last_bd; |
708 | __le16 *dsb_sp_prod; | 964 | __le16 *dsb_sp_prod; |
709 | u16 spq_left; /* serialize spq */ | 965 | atomic_t cq_spq_left; /* ETH_XXX ramrods credit */ |
710 | /* used to synchronize spq accesses */ | 966 | /* used to synchronize spq accesses */ |
711 | spinlock_t spq_lock; | 967 | spinlock_t spq_lock; |
712 | 968 | ||
969 | /* event queue */ | ||
970 | union event_ring_elem *eq_ring; | ||
971 | dma_addr_t eq_mapping; | ||
972 | u16 eq_prod; | ||
973 | u16 eq_cons; | ||
974 | __le16 *eq_cons_sb; | ||
975 | atomic_t eq_spq_left; /* COMMON_XXX ramrods credit */ | ||
976 | |||
713 | /* Flags for marking that there is a STAT_QUERY or | 977 | /* Flags for marking that there is a STAT_QUERY or |
714 | SET_MAC ramrod pending */ | 978 | SET_MAC ramrod pending */ |
715 | int stats_pending; | 979 | int stats_pending; |
@@ -728,18 +992,35 @@ struct bnx2x { | |||
728 | #define USING_DAC_FLAG 0x10 | 992 | #define USING_DAC_FLAG 0x10 |
729 | #define USING_MSIX_FLAG 0x20 | 993 | #define USING_MSIX_FLAG 0x20 |
730 | #define USING_MSI_FLAG 0x40 | 994 | #define USING_MSI_FLAG 0x40 |
995 | |||
731 | #define TPA_ENABLE_FLAG 0x80 | 996 | #define TPA_ENABLE_FLAG 0x80 |
732 | #define NO_MCP_FLAG 0x100 | 997 | #define NO_MCP_FLAG 0x100 |
998 | #define DISABLE_MSI_FLAG 0x200 | ||
733 | #define BP_NOMCP(bp) (bp->flags & NO_MCP_FLAG) | 999 | #define BP_NOMCP(bp) (bp->flags & NO_MCP_FLAG) |
734 | #define HW_VLAN_TX_FLAG 0x400 | ||
735 | #define HW_VLAN_RX_FLAG 0x800 | ||
736 | #define MF_FUNC_DIS 0x1000 | 1000 | #define MF_FUNC_DIS 0x1000 |
737 | 1001 | #define FCOE_MACS_SET 0x2000 | |
738 | int func; | 1002 | #define NO_FCOE_FLAG 0x4000 |
739 | #define BP_PORT(bp) (bp->func % PORT_MAX) | 1003 | #define NO_ISCSI_OOO_FLAG 0x8000 |
740 | #define BP_FUNC(bp) (bp->func) | 1004 | #define NO_ISCSI_FLAG 0x10000 |
741 | #define BP_E1HVN(bp) (bp->func >> 1) | 1005 | |
1006 | #define NO_FCOE(bp) ((bp)->flags & NO_FCOE_FLAG) | ||
1007 | #define NO_ISCSI(bp) ((bp)->flags & NO_ISCSI_FLAG) | ||
1008 | #define NO_ISCSI_OOO(bp) ((bp)->flags & NO_ISCSI_OOO_FLAG) | ||
1009 | |||
1010 | int pf_num; /* absolute PF number */ | ||
1011 | int pfid; /* per-path PF number */ | ||
1012 | int base_fw_ndsb; | ||
1013 | #define BP_PATH(bp) (!CHIP_IS_E2(bp) ? \ | ||
1014 | 0 : (bp->pf_num & 1)) | ||
1015 | #define BP_PORT(bp) (bp->pfid & 1) | ||
1016 | #define BP_FUNC(bp) (bp->pfid) | ||
1017 | #define BP_ABS_FUNC(bp) (bp->pf_num) | ||
1018 | #define BP_E1HVN(bp) (bp->pfid >> 1) | ||
1019 | #define BP_VN(bp) (CHIP_MODE_IS_4_PORT(bp) ? \ | ||
1020 | 0 : BP_E1HVN(bp)) | ||
742 | #define BP_L_ID(bp) (BP_E1HVN(bp) << 2) | 1021 | #define BP_L_ID(bp) (BP_E1HVN(bp) << 2) |
1022 | #define BP_FW_MB_IDX(bp) (BP_PORT(bp) +\ | ||
1023 | BP_VN(bp) * (CHIP_IS_E1x(bp) ? 2 : 1)) | ||
743 | 1024 | ||
744 | #ifdef BCM_CNIC | 1025 | #ifdef BCM_CNIC |
745 | #define BCM_CNIC_CID_START 16 | 1026 | #define BCM_CNIC_CID_START 16 |
@@ -761,6 +1042,9 @@ struct bnx2x { | |||
761 | 1042 | ||
762 | struct link_params link_params; | 1043 | struct link_params link_params; |
763 | struct link_vars link_vars; | 1044 | struct link_vars link_vars; |
1045 | u32 link_cnt; | ||
1046 | struct bnx2x_link_report_data last_reported_link; | ||
1047 | |||
764 | struct mdio_if_info mdio; | 1048 | struct mdio_if_info mdio; |
765 | 1049 | ||
766 | struct bnx2x_common common; | 1050 | struct bnx2x_common common; |
@@ -769,10 +1053,13 @@ struct bnx2x { | |||
769 | struct cmng_struct_per_port cmng; | 1053 | struct cmng_struct_per_port cmng; |
770 | u32 vn_weight_sum; | 1054 | u32 vn_weight_sum; |
771 | 1055 | ||
772 | u32 mf_config; | 1056 | u32 mf_config[E1HVN_MAX]; |
773 | u16 e1hov; | 1057 | u32 mf2_config[E2_FUNC_MAX]; |
774 | u8 e1hmf; | 1058 | u16 mf_ov; |
775 | #define IS_E1HMF(bp) (bp->e1hmf != 0) | 1059 | u8 mf_mode; |
1060 | #define IS_MF(bp) (bp->mf_mode != 0) | ||
1061 | #define IS_MF_SI(bp) (bp->mf_mode == MULTI_FUNCTION_SI) | ||
1062 | #define IS_MF_SD(bp) (bp->mf_mode == MULTI_FUNCTION_SD) | ||
776 | 1063 | ||
777 | u8 wol; | 1064 | u8 wol; |
778 | 1065 | ||
@@ -800,6 +1087,7 @@ struct bnx2x { | |||
800 | #define BNX2X_STATE_CLOSING_WAIT4_HALT 0x4000 | 1087 | #define BNX2X_STATE_CLOSING_WAIT4_HALT 0x4000 |
801 | #define BNX2X_STATE_CLOSING_WAIT4_DELETE 0x5000 | 1088 | #define BNX2X_STATE_CLOSING_WAIT4_DELETE 0x5000 |
802 | #define BNX2X_STATE_CLOSING_WAIT4_UNLOAD 0x6000 | 1089 | #define BNX2X_STATE_CLOSING_WAIT4_UNLOAD 0x6000 |
1090 | #define BNX2X_STATE_FUNC_STARTED 0x7000 | ||
803 | #define BNX2X_STATE_DIAG 0xe000 | 1091 | #define BNX2X_STATE_DIAG 0xe000 |
804 | #define BNX2X_STATE_ERROR 0xf000 | 1092 | #define BNX2X_STATE_ERROR 0xf000 |
805 | 1093 | ||
@@ -807,6 +1095,17 @@ struct bnx2x { | |||
807 | int num_queues; | 1095 | int num_queues; |
808 | int disable_tpa; | 1096 | int disable_tpa; |
809 | int int_mode; | 1097 | int int_mode; |
1098 | u32 *rx_indir_table; | ||
1099 | |||
1100 | struct tstorm_eth_mac_filter_config mac_filters; | ||
1101 | #define BNX2X_ACCEPT_NONE 0x0000 | ||
1102 | #define BNX2X_ACCEPT_UNICAST 0x0001 | ||
1103 | #define BNX2X_ACCEPT_MULTICAST 0x0002 | ||
1104 | #define BNX2X_ACCEPT_ALL_UNICAST 0x0004 | ||
1105 | #define BNX2X_ACCEPT_ALL_MULTICAST 0x0008 | ||
1106 | #define BNX2X_ACCEPT_BROADCAST 0x0010 | ||
1107 | #define BNX2X_ACCEPT_UNMATCHED_UCAST 0x0020 | ||
1108 | #define BNX2X_PROMISCUOUS_MODE 0x10000 | ||
810 | 1109 | ||
811 | u32 rx_mode; | 1110 | u32 rx_mode; |
812 | #define BNX2X_RX_MODE_NONE 0 | 1111 | #define BNX2X_RX_MODE_NONE 0 |
@@ -816,34 +1115,41 @@ struct bnx2x { | |||
816 | #define BNX2X_MAX_MULTICAST 64 | 1115 | #define BNX2X_MAX_MULTICAST 64 |
817 | #define BNX2X_MAX_EMUL_MULTI 16 | 1116 | #define BNX2X_MAX_EMUL_MULTI 16 |
818 | 1117 | ||
819 | u32 rx_mode_cl_mask; | 1118 | u8 igu_dsb_id; |
820 | 1119 | u8 igu_base_sb; | |
1120 | u8 igu_sb_cnt; | ||
821 | dma_addr_t def_status_blk_mapping; | 1121 | dma_addr_t def_status_blk_mapping; |
822 | 1122 | ||
823 | struct bnx2x_slowpath *slowpath; | 1123 | struct bnx2x_slowpath *slowpath; |
824 | dma_addr_t slowpath_mapping; | 1124 | dma_addr_t slowpath_mapping; |
1125 | struct hw_context context; | ||
1126 | |||
1127 | struct bnx2x_ilt *ilt; | ||
1128 | #define BP_ILT(bp) ((bp)->ilt) | ||
1129 | #define ILT_MAX_LINES 128 | ||
1130 | |||
1131 | int l2_cid_count; | ||
1132 | #define L2_ILT_LINES(bp) (DIV_ROUND_UP((bp)->l2_cid_count, \ | ||
1133 | ILT_PAGE_CIDS)) | ||
1134 | #define BNX2X_DB_SIZE(bp) ((bp)->l2_cid_count * (1 << BNX2X_DB_SHIFT)) | ||
1135 | |||
1136 | int qm_cid_count; | ||
825 | 1137 | ||
826 | int dropless_fc; | 1138 | int dropless_fc; |
827 | 1139 | ||
828 | #ifdef BCM_CNIC | 1140 | #ifdef BCM_CNIC |
829 | u32 cnic_flags; | 1141 | u32 cnic_flags; |
830 | #define BNX2X_CNIC_FLAG_MAC_SET 1 | 1142 | #define BNX2X_CNIC_FLAG_MAC_SET 1 |
831 | |||
832 | void *t1; | ||
833 | dma_addr_t t1_mapping; | ||
834 | void *t2; | 1143 | void *t2; |
835 | dma_addr_t t2_mapping; | 1144 | dma_addr_t t2_mapping; |
836 | void *timers; | 1145 | struct cnic_ops __rcu *cnic_ops; |
837 | dma_addr_t timers_mapping; | ||
838 | void *qm; | ||
839 | dma_addr_t qm_mapping; | ||
840 | struct cnic_ops *cnic_ops; | ||
841 | void *cnic_data; | 1146 | void *cnic_data; |
842 | u32 cnic_tag; | 1147 | u32 cnic_tag; |
843 | struct cnic_eth_dev cnic_eth_dev; | 1148 | struct cnic_eth_dev cnic_eth_dev; |
844 | struct host_status_block *cnic_sb; | 1149 | union host_hc_status_block cnic_sb; |
845 | dma_addr_t cnic_sb_mapping; | 1150 | dma_addr_t cnic_sb_mapping; |
846 | #define CNIC_SB_ID(bp) BP_L_ID(bp) | 1151 | #define CNIC_SB_ID(bp) ((bp)->base_fw_ndsb + BP_L_ID(bp)) |
1152 | #define CNIC_IGU_SB_ID(bp) ((bp)->igu_base_sb) | ||
847 | struct eth_spe *cnic_kwq; | 1153 | struct eth_spe *cnic_kwq; |
848 | struct eth_spe *cnic_kwq_prod; | 1154 | struct eth_spe *cnic_kwq_prod; |
849 | struct eth_spe *cnic_kwq_cons; | 1155 | struct eth_spe *cnic_kwq_cons; |
@@ -851,12 +1157,12 @@ struct bnx2x { | |||
851 | u16 cnic_kwq_pending; | 1157 | u16 cnic_kwq_pending; |
852 | u16 cnic_spq_pending; | 1158 | u16 cnic_spq_pending; |
853 | struct mutex cnic_mutex; | 1159 | struct mutex cnic_mutex; |
854 | u8 iscsi_mac[6]; | 1160 | u8 fip_mac[ETH_ALEN]; |
855 | #endif | 1161 | #endif |
856 | 1162 | ||
857 | int dmae_ready; | 1163 | int dmae_ready; |
858 | /* used to synchronize dmae accesses */ | 1164 | /* used to synchronize dmae accesses */ |
859 | struct mutex dmae_mutex; | 1165 | spinlock_t dmae_lock; |
860 | 1166 | ||
861 | /* used to protect the FW mail box */ | 1167 | /* used to protect the FW mail box */ |
862 | struct mutex fw_mb_mutex; | 1168 | struct mutex fw_mb_mutex; |
@@ -911,34 +1217,282 @@ struct bnx2x { | |||
911 | 1217 | ||
912 | char fw_ver[32]; | 1218 | char fw_ver[32]; |
913 | const struct firmware *firmware; | 1219 | const struct firmware *firmware; |
1220 | /* LLDP params */ | ||
1221 | struct bnx2x_config_lldp_params lldp_config_params; | ||
1222 | |||
1223 | /* DCB support on/off */ | ||
1224 | u16 dcb_state; | ||
1225 | #define BNX2X_DCB_STATE_OFF 0 | ||
1226 | #define BNX2X_DCB_STATE_ON 1 | ||
1227 | |||
1228 | /* DCBX engine mode */ | ||
1229 | int dcbx_enabled; | ||
1230 | #define BNX2X_DCBX_ENABLED_OFF 0 | ||
1231 | #define BNX2X_DCBX_ENABLED_ON_NEG_OFF 1 | ||
1232 | #define BNX2X_DCBX_ENABLED_ON_NEG_ON 2 | ||
1233 | #define BNX2X_DCBX_ENABLED_INVALID (-1) | ||
1234 | |||
1235 | bool dcbx_mode_uset; | ||
1236 | |||
1237 | struct bnx2x_config_dcbx_params dcbx_config_params; | ||
1238 | |||
1239 | struct bnx2x_dcbx_port_params dcbx_port_params; | ||
1240 | int dcb_version; | ||
1241 | |||
1242 | /* DCBX Negotiation results */ | ||
1243 | struct dcbx_features dcbx_local_feat; | ||
1244 | u32 dcbx_error; | ||
1245 | #ifdef BCM_DCBNL | ||
1246 | struct dcbx_features dcbx_remote_feat; | ||
1247 | u32 dcbx_remote_flags; | ||
1248 | #endif | ||
1249 | u32 pending_max; | ||
914 | }; | 1250 | }; |
915 | 1251 | ||
1252 | /** | ||
1253 | * Init queue/func interface | ||
1254 | */ | ||
1255 | /* queue init flags */ | ||
1256 | #define QUEUE_FLG_TPA 0x0001 | ||
1257 | #define QUEUE_FLG_CACHE_ALIGN 0x0002 | ||
1258 | #define QUEUE_FLG_STATS 0x0004 | ||
1259 | #define QUEUE_FLG_OV 0x0008 | ||
1260 | #define QUEUE_FLG_VLAN 0x0010 | ||
1261 | #define QUEUE_FLG_COS 0x0020 | ||
1262 | #define QUEUE_FLG_HC 0x0040 | ||
1263 | #define QUEUE_FLG_DHC 0x0080 | ||
1264 | #define QUEUE_FLG_OOO 0x0100 | ||
1265 | |||
1266 | #define QUEUE_DROP_IP_CS_ERR TSTORM_ETH_CLIENT_CONFIG_DROP_IP_CS_ERR | ||
1267 | #define QUEUE_DROP_TCP_CS_ERR TSTORM_ETH_CLIENT_CONFIG_DROP_TCP_CS_ERR | ||
1268 | #define QUEUE_DROP_TTL0 TSTORM_ETH_CLIENT_CONFIG_DROP_TTL0 | ||
1269 | #define QUEUE_DROP_UDP_CS_ERR TSTORM_ETH_CLIENT_CONFIG_DROP_UDP_CS_ERR | ||
1270 | |||
1271 | |||
1272 | |||
1273 | /* rss capabilities */ | ||
1274 | #define RSS_IPV4_CAP 0x0001 | ||
1275 | #define RSS_IPV4_TCP_CAP 0x0002 | ||
1276 | #define RSS_IPV6_CAP 0x0004 | ||
1277 | #define RSS_IPV6_TCP_CAP 0x0008 | ||
916 | 1278 | ||
917 | #define BNX2X_MAX_QUEUES(bp) (IS_E1HMF(bp) ? (MAX_CONTEXT/E1HVN_MAX) \ | ||
918 | : MAX_CONTEXT) | ||
919 | #define BNX2X_NUM_QUEUES(bp) (bp->num_queues) | 1279 | #define BNX2X_NUM_QUEUES(bp) (bp->num_queues) |
1280 | #define BNX2X_NUM_ETH_QUEUES(bp) (BNX2X_NUM_QUEUES(bp) - NONE_ETH_CONTEXT_USE) | ||
1281 | |||
1282 | /* ethtool statistics are displayed for all regular ethernet queues and the | ||
1283 | * fcoe L2 queue if not disabled | ||
1284 | */ | ||
1285 | #define BNX2X_NUM_STAT_QUEUES(bp) (NO_FCOE(bp) ? BNX2X_NUM_ETH_QUEUES(bp) : \ | ||
1286 | (BNX2X_NUM_ETH_QUEUES(bp) + FCOE_CONTEXT_USE)) | ||
1287 | |||
920 | #define is_multi(bp) (BNX2X_NUM_QUEUES(bp) > 1) | 1288 | #define is_multi(bp) (BNX2X_NUM_QUEUES(bp) > 1) |
921 | 1289 | ||
1290 | #define BNX2X_MAX_QUEUES(bp) (bp->igu_sb_cnt - CNIC_CONTEXT_USE) | ||
1291 | |||
1292 | #define RSS_IPV4_CAP_MASK \ | ||
1293 | TSTORM_ETH_FUNCTION_COMMON_CONFIG_RSS_IPV4_CAPABILITY | ||
1294 | |||
1295 | #define RSS_IPV4_TCP_CAP_MASK \ | ||
1296 | TSTORM_ETH_FUNCTION_COMMON_CONFIG_RSS_IPV4_TCP_CAPABILITY | ||
1297 | |||
1298 | #define RSS_IPV6_CAP_MASK \ | ||
1299 | TSTORM_ETH_FUNCTION_COMMON_CONFIG_RSS_IPV6_CAPABILITY | ||
1300 | |||
1301 | #define RSS_IPV6_TCP_CAP_MASK \ | ||
1302 | TSTORM_ETH_FUNCTION_COMMON_CONFIG_RSS_IPV6_TCP_CAPABILITY | ||
1303 | |||
1304 | /* func init flags */ | ||
1305 | #define FUNC_FLG_STATS 0x0001 | ||
1306 | #define FUNC_FLG_TPA 0x0002 | ||
1307 | #define FUNC_FLG_SPQ 0x0004 | ||
1308 | #define FUNC_FLG_LEADING 0x0008 /* PF only */ | ||
1309 | |||
1310 | struct rxq_pause_params { | ||
1311 | u16 bd_th_lo; | ||
1312 | u16 bd_th_hi; | ||
1313 | u16 rcq_th_lo; | ||
1314 | u16 rcq_th_hi; | ||
1315 | u16 sge_th_lo; /* valid iff QUEUE_FLG_TPA */ | ||
1316 | u16 sge_th_hi; /* valid iff QUEUE_FLG_TPA */ | ||
1317 | u16 pri_map; | ||
1318 | }; | ||
1319 | |||
1320 | struct bnx2x_rxq_init_params { | ||
1321 | /* cxt*/ | ||
1322 | struct eth_context *cxt; | ||
1323 | |||
1324 | /* dma */ | ||
1325 | dma_addr_t dscr_map; | ||
1326 | dma_addr_t sge_map; | ||
1327 | dma_addr_t rcq_map; | ||
1328 | dma_addr_t rcq_np_map; | ||
1329 | |||
1330 | u16 flags; | ||
1331 | u16 drop_flags; | ||
1332 | u16 mtu; | ||
1333 | u16 buf_sz; | ||
1334 | u16 fw_sb_id; | ||
1335 | u16 cl_id; | ||
1336 | u16 spcl_id; | ||
1337 | u16 cl_qzone_id; | ||
1338 | |||
1339 | /* valid iff QUEUE_FLG_STATS */ | ||
1340 | u16 stat_id; | ||
1341 | |||
1342 | /* valid iff QUEUE_FLG_TPA */ | ||
1343 | u16 tpa_agg_sz; | ||
1344 | u16 sge_buf_sz; | ||
1345 | u16 max_sges_pkt; | ||
1346 | |||
1347 | /* valid iff QUEUE_FLG_CACHE_ALIGN */ | ||
1348 | u8 cache_line_log; | ||
1349 | |||
1350 | u8 sb_cq_index; | ||
1351 | u32 cid; | ||
1352 | |||
1353 | /* desired interrupts per sec. valid iff QUEUE_FLG_HC */ | ||
1354 | u32 hc_rate; | ||
1355 | }; | ||
1356 | |||
1357 | struct bnx2x_txq_init_params { | ||
1358 | /* cxt*/ | ||
1359 | struct eth_context *cxt; | ||
1360 | |||
1361 | /* dma */ | ||
1362 | dma_addr_t dscr_map; | ||
1363 | |||
1364 | u16 flags; | ||
1365 | u16 fw_sb_id; | ||
1366 | u8 sb_cq_index; | ||
1367 | u8 cos; /* valid iff QUEUE_FLG_COS */ | ||
1368 | u16 stat_id; /* valid iff QUEUE_FLG_STATS */ | ||
1369 | u16 traffic_type; | ||
1370 | u32 cid; | ||
1371 | u16 hc_rate; /* desired interrupts per sec.*/ | ||
1372 | /* valid iff QUEUE_FLG_HC */ | ||
1373 | |||
1374 | }; | ||
1375 | |||
1376 | struct bnx2x_client_ramrod_params { | ||
1377 | int *pstate; | ||
1378 | int state; | ||
1379 | u16 index; | ||
1380 | u16 cl_id; | ||
1381 | u32 cid; | ||
1382 | u8 poll; | ||
1383 | #define CLIENT_IS_FCOE 0x01 | ||
1384 | #define CLIENT_IS_LEADING_RSS 0x02 | ||
1385 | u8 flags; | ||
1386 | }; | ||
1387 | |||
1388 | struct bnx2x_client_init_params { | ||
1389 | struct rxq_pause_params pause; | ||
1390 | struct bnx2x_rxq_init_params rxq_params; | ||
1391 | struct bnx2x_txq_init_params txq_params; | ||
1392 | struct bnx2x_client_ramrod_params ramrod_params; | ||
1393 | }; | ||
1394 | |||
1395 | struct bnx2x_rss_params { | ||
1396 | int mode; | ||
1397 | u16 cap; | ||
1398 | u16 result_mask; | ||
1399 | }; | ||
1400 | |||
1401 | struct bnx2x_func_init_params { | ||
1402 | |||
1403 | /* rss */ | ||
1404 | struct bnx2x_rss_params *rss; /* valid iff FUNC_FLG_RSS */ | ||
1405 | |||
1406 | /* dma */ | ||
1407 | dma_addr_t fw_stat_map; /* valid iff FUNC_FLG_STATS */ | ||
1408 | dma_addr_t spq_map; /* valid iff FUNC_FLG_SPQ */ | ||
1409 | |||
1410 | u16 func_flgs; | ||
1411 | u16 func_id; /* abs fid */ | ||
1412 | u16 pf_id; | ||
1413 | u16 spq_prod; /* valid iff FUNC_FLG_SPQ */ | ||
1414 | }; | ||
1415 | |||
1416 | #define for_each_eth_queue(bp, var) \ | ||
1417 | for (var = 0; var < BNX2X_NUM_ETH_QUEUES(bp); var++) | ||
1418 | |||
1419 | #define for_each_nondefault_eth_queue(bp, var) \ | ||
1420 | for (var = 1; var < BNX2X_NUM_ETH_QUEUES(bp); var++) | ||
1421 | |||
1422 | #define for_each_napi_queue(bp, var) \ | ||
1423 | for (var = 0; \ | ||
1424 | var < BNX2X_NUM_ETH_QUEUES(bp) + FCOE_CONTEXT_USE; var++) \ | ||
1425 | if (skip_queue(bp, var)) \ | ||
1426 | continue; \ | ||
1427 | else | ||
1428 | |||
922 | #define for_each_queue(bp, var) \ | 1429 | #define for_each_queue(bp, var) \ |
923 | for (var = 0; var < BNX2X_NUM_QUEUES(bp); var++) | 1430 | for (var = 0; var < BNX2X_NUM_QUEUES(bp); var++) \ |
1431 | if (skip_queue(bp, var)) \ | ||
1432 | continue; \ | ||
1433 | else | ||
1434 | |||
1435 | #define for_each_rx_queue(bp, var) \ | ||
1436 | for (var = 0; var < BNX2X_NUM_QUEUES(bp); var++) \ | ||
1437 | if (skip_rx_queue(bp, var)) \ | ||
1438 | continue; \ | ||
1439 | else | ||
1440 | |||
1441 | #define for_each_tx_queue(bp, var) \ | ||
1442 | for (var = 0; var < BNX2X_NUM_QUEUES(bp); var++) \ | ||
1443 | if (skip_tx_queue(bp, var)) \ | ||
1444 | continue; \ | ||
1445 | else | ||
1446 | |||
924 | #define for_each_nondefault_queue(bp, var) \ | 1447 | #define for_each_nondefault_queue(bp, var) \ |
925 | for (var = 1; var < BNX2X_NUM_QUEUES(bp); var++) | 1448 | for (var = 1; var < BNX2X_NUM_QUEUES(bp); var++) \ |
1449 | if (skip_queue(bp, var)) \ | ||
1450 | continue; \ | ||
1451 | else | ||
1452 | |||
1453 | /* skip rx queue | ||
1454 | * if FCOE l2 support is disabled and this is the fcoe L2 queue | ||
1455 | */ | ||
1456 | #define skip_rx_queue(bp, idx) (NO_FCOE(bp) && IS_FCOE_IDX(idx)) | ||
926 | 1457 | ||
1458 | /* skip tx queue | ||
1459 | * if FCOE l2 support is disabled and this is the fcoe L2 queue | ||
1460 | */ | ||
1461 | #define skip_tx_queue(bp, idx) (NO_FCOE(bp) && IS_FCOE_IDX(idx)) | ||
1462 | |||
1463 | #define skip_queue(bp, idx) (NO_FCOE(bp) && IS_FCOE_IDX(idx)) | ||
1464 | |||
1465 | #define WAIT_RAMROD_POLL 0x01 | ||
1466 | #define WAIT_RAMROD_COMMON 0x02 | ||
927 | 1467 | ||
1468 | void bnx2x_read_mf_cfg(struct bnx2x *bp); | ||
1469 | |||
1470 | /* dmae */ | ||
928 | void bnx2x_read_dmae(struct bnx2x *bp, u32 src_addr, u32 len32); | 1471 | void bnx2x_read_dmae(struct bnx2x *bp, u32 src_addr, u32 len32); |
929 | void bnx2x_write_dmae(struct bnx2x *bp, dma_addr_t dma_addr, u32 dst_addr, | 1472 | void bnx2x_write_dmae(struct bnx2x *bp, dma_addr_t dma_addr, u32 dst_addr, |
930 | u32 len32); | 1473 | u32 len32); |
1474 | void bnx2x_post_dmae(struct bnx2x *bp, struct dmae_command *dmae, int idx); | ||
1475 | u32 bnx2x_dmae_opcode_add_comp(u32 opcode, u8 comp_type); | ||
1476 | u32 bnx2x_dmae_opcode_clr_src_reset(u32 opcode); | ||
1477 | u32 bnx2x_dmae_opcode(struct bnx2x *bp, u8 src_type, u8 dst_type, | ||
1478 | bool with_comp, u8 comp_type); | ||
1479 | |||
931 | int bnx2x_get_gpio(struct bnx2x *bp, int gpio_num, u8 port); | 1480 | int bnx2x_get_gpio(struct bnx2x *bp, int gpio_num, u8 port); |
932 | int bnx2x_set_gpio(struct bnx2x *bp, int gpio_num, u32 mode, u8 port); | 1481 | int bnx2x_set_gpio(struct bnx2x *bp, int gpio_num, u32 mode, u8 port); |
933 | int bnx2x_set_gpio_int(struct bnx2x *bp, int gpio_num, u32 mode, u8 port); | 1482 | int bnx2x_set_gpio_int(struct bnx2x *bp, int gpio_num, u32 mode, u8 port); |
934 | u32 bnx2x_fw_command(struct bnx2x *bp, u32 command); | 1483 | u32 bnx2x_fw_command(struct bnx2x *bp, u32 command, u32 param); |
935 | void bnx2x_reg_wr_ind(struct bnx2x *bp, u32 addr, u32 val); | 1484 | |
936 | void bnx2x_write_dmae_phys_len(struct bnx2x *bp, dma_addr_t phys_addr, | ||
937 | u32 addr, u32 len); | ||
938 | void bnx2x_calc_fc_adv(struct bnx2x *bp); | 1485 | void bnx2x_calc_fc_adv(struct bnx2x *bp); |
939 | int bnx2x_sp_post(struct bnx2x *bp, int command, int cid, | 1486 | int bnx2x_sp_post(struct bnx2x *bp, int command, int cid, |
940 | u32 data_hi, u32 data_lo, int common); | 1487 | u32 data_hi, u32 data_lo, int common); |
1488 | |||
1489 | /* Clears multicast and unicast list configuration in the chip. */ | ||
1490 | void bnx2x_invalidate_e1_mc_list(struct bnx2x *bp); | ||
1491 | void bnx2x_invalidate_e1h_mc_list(struct bnx2x *bp); | ||
1492 | void bnx2x_invalidate_uc_list(struct bnx2x *bp); | ||
1493 | |||
941 | void bnx2x_update_coalesce(struct bnx2x *bp); | 1494 | void bnx2x_update_coalesce(struct bnx2x *bp); |
1495 | int bnx2x_get_link_cfg_idx(struct bnx2x *bp); | ||
942 | 1496 | ||
943 | static inline u32 reg_poll(struct bnx2x *bp, u32 reg, u32 expected, int ms, | 1497 | static inline u32 reg_poll(struct bnx2x *bp, u32 reg, u32 expected, int ms, |
944 | int wait) | 1498 | int wait) |
@@ -957,6 +1511,40 @@ static inline u32 reg_poll(struct bnx2x *bp, u32 reg, u32 expected, int ms, | |||
957 | return val; | 1511 | return val; |
958 | } | 1512 | } |
959 | 1513 | ||
1514 | #define BNX2X_ILT_ZALLOC(x, y, size) \ | ||
1515 | do { \ | ||
1516 | x = dma_alloc_coherent(&bp->pdev->dev, size, y, GFP_KERNEL); \ | ||
1517 | if (x) \ | ||
1518 | memset(x, 0, size); \ | ||
1519 | } while (0) | ||
1520 | |||
1521 | #define BNX2X_ILT_FREE(x, y, size) \ | ||
1522 | do { \ | ||
1523 | if (x) { \ | ||
1524 | dma_free_coherent(&bp->pdev->dev, size, x, y); \ | ||
1525 | x = NULL; \ | ||
1526 | y = 0; \ | ||
1527 | } \ | ||
1528 | } while (0) | ||
1529 | |||
1530 | #define ILOG2(x) (ilog2((x))) | ||
1531 | |||
1532 | #define ILT_NUM_PAGE_ENTRIES (3072) | ||
1533 | /* In 57710/11 we use whole table since we have 8 func | ||
1534 | * In 57712 we have only 4 func, but use same size per func, then only half of | ||
1535 | * the table in use | ||
1536 | */ | ||
1537 | #define ILT_PER_FUNC (ILT_NUM_PAGE_ENTRIES/8) | ||
1538 | |||
1539 | #define FUNC_ILT_BASE(func) (func * ILT_PER_FUNC) | ||
1540 | /* | ||
1541 | * the phys address is shifted right 12 bits and has an added | ||
1542 | * 1=valid bit added to the 53rd bit | ||
1543 | * then since this is a wide register(TM) | ||
1544 | * we split it into two 32 bit writes | ||
1545 | */ | ||
1546 | #define ONCHIP_ADDR1(x) ((u32)(((u64)x >> 12) & 0xFFFFFFFF)) | ||
1547 | #define ONCHIP_ADDR2(x) ((u32)((1 << 20) | ((u64)x >> 44))) | ||
960 | 1548 | ||
961 | /* load/unload mode */ | 1549 | /* load/unload mode */ |
962 | #define LOAD_NORMAL 0 | 1550 | #define LOAD_NORMAL 0 |
@@ -964,18 +1552,44 @@ static inline u32 reg_poll(struct bnx2x *bp, u32 reg, u32 expected, int ms, | |||
964 | #define LOAD_DIAG 2 | 1552 | #define LOAD_DIAG 2 |
965 | #define UNLOAD_NORMAL 0 | 1553 | #define UNLOAD_NORMAL 0 |
966 | #define UNLOAD_CLOSE 1 | 1554 | #define UNLOAD_CLOSE 1 |
967 | #define UNLOAD_RECOVERY 2 | 1555 | #define UNLOAD_RECOVERY 2 |
968 | 1556 | ||
969 | 1557 | ||
970 | /* DMAE command defines */ | 1558 | /* DMAE command defines */ |
971 | #define DMAE_CMD_SRC_PCI 0 | 1559 | #define DMAE_TIMEOUT -1 |
972 | #define DMAE_CMD_SRC_GRC DMAE_COMMAND_SRC | 1560 | #define DMAE_PCI_ERROR -2 /* E2 and onward */ |
1561 | #define DMAE_NOT_RDY -3 | ||
1562 | #define DMAE_PCI_ERR_FLAG 0x80000000 | ||
1563 | |||
1564 | #define DMAE_SRC_PCI 0 | ||
1565 | #define DMAE_SRC_GRC 1 | ||
1566 | |||
1567 | #define DMAE_DST_NONE 0 | ||
1568 | #define DMAE_DST_PCI 1 | ||
1569 | #define DMAE_DST_GRC 2 | ||
1570 | |||
1571 | #define DMAE_COMP_PCI 0 | ||
1572 | #define DMAE_COMP_GRC 1 | ||
973 | 1573 | ||
974 | #define DMAE_CMD_DST_PCI (1 << DMAE_COMMAND_DST_SHIFT) | 1574 | /* E2 and onward - PCI error handling in the completion */ |
975 | #define DMAE_CMD_DST_GRC (2 << DMAE_COMMAND_DST_SHIFT) | ||
976 | 1575 | ||
977 | #define DMAE_CMD_C_DST_PCI 0 | 1576 | #define DMAE_COMP_REGULAR 0 |
978 | #define DMAE_CMD_C_DST_GRC (1 << DMAE_COMMAND_C_DST_SHIFT) | 1577 | #define DMAE_COM_SET_ERR 1 |
1578 | |||
1579 | #define DMAE_CMD_SRC_PCI (DMAE_SRC_PCI << \ | ||
1580 | DMAE_COMMAND_SRC_SHIFT) | ||
1581 | #define DMAE_CMD_SRC_GRC (DMAE_SRC_GRC << \ | ||
1582 | DMAE_COMMAND_SRC_SHIFT) | ||
1583 | |||
1584 | #define DMAE_CMD_DST_PCI (DMAE_DST_PCI << \ | ||
1585 | DMAE_COMMAND_DST_SHIFT) | ||
1586 | #define DMAE_CMD_DST_GRC (DMAE_DST_GRC << \ | ||
1587 | DMAE_COMMAND_DST_SHIFT) | ||
1588 | |||
1589 | #define DMAE_CMD_C_DST_PCI (DMAE_COMP_PCI << \ | ||
1590 | DMAE_COMMAND_C_DST_SHIFT) | ||
1591 | #define DMAE_CMD_C_DST_GRC (DMAE_COMP_GRC << \ | ||
1592 | DMAE_COMMAND_C_DST_SHIFT) | ||
979 | 1593 | ||
980 | #define DMAE_CMD_C_ENABLE DMAE_COMMAND_C_TYPE_ENABLE | 1594 | #define DMAE_CMD_C_ENABLE DMAE_COMMAND_C_TYPE_ENABLE |
981 | 1595 | ||
@@ -991,10 +1605,20 @@ static inline u32 reg_poll(struct bnx2x *bp, u32 reg, u32 expected, int ms, | |||
991 | #define DMAE_CMD_DST_RESET DMAE_COMMAND_DST_RESET | 1605 | #define DMAE_CMD_DST_RESET DMAE_COMMAND_DST_RESET |
992 | #define DMAE_CMD_E1HVN_SHIFT DMAE_COMMAND_E1HVN_SHIFT | 1606 | #define DMAE_CMD_E1HVN_SHIFT DMAE_COMMAND_E1HVN_SHIFT |
993 | 1607 | ||
1608 | #define DMAE_SRC_PF 0 | ||
1609 | #define DMAE_SRC_VF 1 | ||
1610 | |||
1611 | #define DMAE_DST_PF 0 | ||
1612 | #define DMAE_DST_VF 1 | ||
1613 | |||
1614 | #define DMAE_C_SRC 0 | ||
1615 | #define DMAE_C_DST 1 | ||
1616 | |||
994 | #define DMAE_LEN32_RD_MAX 0x80 | 1617 | #define DMAE_LEN32_RD_MAX 0x80 |
995 | #define DMAE_LEN32_WR_MAX(bp) (CHIP_IS_E1(bp) ? 0x400 : 0x2000) | 1618 | #define DMAE_LEN32_WR_MAX(bp) (CHIP_IS_E1(bp) ? 0x400 : 0x2000) |
996 | 1619 | ||
997 | #define DMAE_COMP_VAL 0xe0d0d0ae | 1620 | #define DMAE_COMP_VAL 0x60d0d0ae /* E2 and on - upper bit |
1621 | indicates eror */ | ||
998 | 1622 | ||
999 | #define MAX_DMAE_C_PER_PORT 8 | 1623 | #define MAX_DMAE_C_PER_PORT 8 |
1000 | #define INIT_DMAE_C(bp) (BP_PORT(bp) * MAX_DMAE_C_PER_PORT + \ | 1624 | #define INIT_DMAE_C(bp) (BP_PORT(bp) * MAX_DMAE_C_PER_PORT + \ |
@@ -1002,7 +1626,6 @@ static inline u32 reg_poll(struct bnx2x *bp, u32 reg, u32 expected, int ms, | |||
1002 | #define PMF_DMAE_C(bp) (BP_PORT(bp) * MAX_DMAE_C_PER_PORT + \ | 1626 | #define PMF_DMAE_C(bp) (BP_PORT(bp) * MAX_DMAE_C_PER_PORT + \ |
1003 | E1HVN_MAX) | 1627 | E1HVN_MAX) |
1004 | 1628 | ||
1005 | |||
1006 | /* PCIE link and speed */ | 1629 | /* PCIE link and speed */ |
1007 | #define PCICFG_LINK_WIDTH 0x1f00000 | 1630 | #define PCICFG_LINK_WIDTH 0x1f00000 |
1008 | #define PCICFG_LINK_WIDTH_SHIFT 20 | 1631 | #define PCICFG_LINK_WIDTH_SHIFT 20 |
@@ -1031,22 +1654,26 @@ static inline u32 reg_poll(struct bnx2x *bp, u32 reg, u32 expected, int ms, | |||
1031 | #define MAX_SP_DESC_CNT (SP_DESC_CNT - 1) | 1654 | #define MAX_SP_DESC_CNT (SP_DESC_CNT - 1) |
1032 | 1655 | ||
1033 | 1656 | ||
1034 | #define BNX2X_BTR 1 | 1657 | #define BNX2X_BTR 4 |
1035 | #define MAX_SPQ_PENDING 8 | 1658 | #define MAX_SPQ_PENDING 8 |
1036 | 1659 | ||
1037 | 1660 | /* CMNG constants, as derived from system spec calculations */ | |
1038 | /* CMNG constants | 1661 | /* default MIN rate in case VNIC min rate is configured to zero - 100Mbps */ |
1039 | derived from lab experiments, and not from system spec calculations !!! */ | 1662 | #define DEF_MIN_RATE 100 |
1040 | #define DEF_MIN_RATE 100 | 1663 | /* resolution of the rate shaping timer - 400 usec */ |
1041 | /* resolution of the rate shaping timer - 100 usec */ | 1664 | #define RS_PERIODIC_TIMEOUT_USEC 400 |
1042 | #define RS_PERIODIC_TIMEOUT_USEC 100 | ||
1043 | /* resolution of fairness algorithm in usecs - | ||
1044 | coefficient for calculating the actual t fair */ | ||
1045 | #define T_FAIR_COEF 10000000 | ||
1046 | /* number of bytes in single QM arbitration cycle - | 1665 | /* number of bytes in single QM arbitration cycle - |
1047 | coefficient for calculating the fairness timer */ | 1666 | * coefficient for calculating the fairness timer */ |
1048 | #define QM_ARB_BYTES 40000 | 1667 | #define QM_ARB_BYTES 160000 |
1049 | #define FAIR_MEM 2 | 1668 | /* resolution of Min algorithm 1:100 */ |
1669 | #define MIN_RES 100 | ||
1670 | /* how many bytes above threshold for the minimal credit of Min algorithm*/ | ||
1671 | #define MIN_ABOVE_THRESH 32768 | ||
1672 | /* Fairness algorithm integration time coefficient - | ||
1673 | * for calculating the actual Tfair */ | ||
1674 | #define T_FAIR_COEF ((MIN_ABOVE_THRESH + QM_ARB_BYTES) * 8 * MIN_RES) | ||
1675 | /* Memory of fairness algorithm . 2 cycles */ | ||
1676 | #define FAIR_MEM 2 | ||
1050 | 1677 | ||
1051 | 1678 | ||
1052 | #define ATTN_NIG_FOR_FUNC (1L << 8) | 1679 | #define ATTN_NIG_FOR_FUNC (1L << 8) |
@@ -1148,24 +1775,26 @@ static inline u32 reg_poll(struct bnx2x *bp, u32 reg, u32 expected, int ms, | |||
1148 | TSTORM_ETH_FUNCTION_COMMON_CONFIG_RSS_MODE_SHIFT)) | 1775 | TSTORM_ETH_FUNCTION_COMMON_CONFIG_RSS_MODE_SHIFT)) |
1149 | #define MULTI_MASK 0x7f | 1776 | #define MULTI_MASK 0x7f |
1150 | 1777 | ||
1151 | |||
1152 | #define DEF_USB_FUNC_OFF (2 + 2*HC_USTORM_DEF_SB_NUM_INDICES) | ||
1153 | #define DEF_CSB_FUNC_OFF (2 + 2*HC_CSTORM_DEF_SB_NUM_INDICES) | ||
1154 | #define DEF_XSB_FUNC_OFF (2 + 2*HC_XSTORM_DEF_SB_NUM_INDICES) | ||
1155 | #define DEF_TSB_FUNC_OFF (2 + 2*HC_TSTORM_DEF_SB_NUM_INDICES) | ||
1156 | |||
1157 | #define C_DEF_SB_SP_INDEX HC_INDEX_DEF_C_ETH_SLOW_PATH | ||
1158 | |||
1159 | #define BNX2X_SP_DSB_INDEX \ | 1778 | #define BNX2X_SP_DSB_INDEX \ |
1160 | (&bp->def_status_blk->c_def_status_block.index_values[C_DEF_SB_SP_INDEX]) | 1779 | (&bp->def_status_blk->sp_sb.\ |
1780 | index_values[HC_SP_INDEX_ETH_DEF_CONS]) | ||
1161 | 1781 | ||
1782 | #define SET_FLAG(value, mask, flag) \ | ||
1783 | do {\ | ||
1784 | (value) &= ~(mask);\ | ||
1785 | (value) |= ((flag) << (mask##_SHIFT));\ | ||
1786 | } while (0) | ||
1162 | 1787 | ||
1163 | #define CAM_IS_INVALID(x) \ | 1788 | #define GET_FLAG(value, mask) \ |
1164 | (x.target_table_entry.flags == TSTORM_CAM_TARGET_TABLE_ENTRY_ACTION_TYPE) | 1789 | (((value) &= (mask)) >> (mask##_SHIFT)) |
1165 | 1790 | ||
1166 | #define CAM_INVALIDATE(x) \ | 1791 | #define GET_FIELD(value, fname) \ |
1167 | (x.target_table_entry.flags = TSTORM_CAM_TARGET_TABLE_ENTRY_ACTION_TYPE) | 1792 | (((value) & (fname##_MASK)) >> (fname##_SHIFT)) |
1168 | 1793 | ||
1794 | #define CAM_IS_INVALID(x) \ | ||
1795 | (GET_FLAG(x.flags, \ | ||
1796 | MAC_CONFIGURATION_ENTRY_ACTION_TYPE) == \ | ||
1797 | (T_ETH_MAC_COMMAND_INVALIDATE)) | ||
1169 | 1798 | ||
1170 | /* Number of u32 elements in MC hash array */ | 1799 | /* Number of u32 elements in MC hash array */ |
1171 | #define MC_HASH_SIZE 8 | 1800 | #define MC_HASH_SIZE 8 |
@@ -1177,21 +1806,30 @@ static inline u32 reg_poll(struct bnx2x *bp, u32 reg, u32 expected, int ms, | |||
1177 | #define PXP2_REG_PXP2_INT_STS PXP2_REG_PXP2_INT_STS_0 | 1806 | #define PXP2_REG_PXP2_INT_STS PXP2_REG_PXP2_INT_STS_0 |
1178 | #endif | 1807 | #endif |
1179 | 1808 | ||
1809 | #ifndef ETH_MAX_RX_CLIENTS_E2 | ||
1810 | #define ETH_MAX_RX_CLIENTS_E2 ETH_MAX_RX_CLIENTS_E1H | ||
1811 | #endif | ||
1812 | |||
1180 | #define BNX2X_VPD_LEN 128 | 1813 | #define BNX2X_VPD_LEN 128 |
1181 | #define VENDOR_ID_LEN 4 | 1814 | #define VENDOR_ID_LEN 4 |
1182 | 1815 | ||
1816 | /* Congestion management fairness mode */ | ||
1817 | #define CMNG_FNS_NONE 0 | ||
1818 | #define CMNG_FNS_MINMAX 1 | ||
1819 | |||
1820 | #define HC_SEG_ACCESS_DEF 0 /*Driver decision 0-3*/ | ||
1821 | #define HC_SEG_ACCESS_ATTN 4 | ||
1822 | #define HC_SEG_ACCESS_NORM 0 /*Driver decision 0-1*/ | ||
1823 | |||
1183 | #ifdef BNX2X_MAIN | 1824 | #ifdef BNX2X_MAIN |
1184 | #define BNX2X_EXTERN | 1825 | #define BNX2X_EXTERN |
1185 | #else | 1826 | #else |
1186 | #define BNX2X_EXTERN extern | 1827 | #define BNX2X_EXTERN extern |
1187 | #endif | 1828 | #endif |
1188 | 1829 | ||
1189 | BNX2X_EXTERN int load_count[3]; /* 0-common, 1-port0, 2-port1 */ | 1830 | BNX2X_EXTERN int load_count[2][3]; /* per path: 0-common, 1-port0, 2-port1 */ |
1190 | |||
1191 | /* MISC_REG_RESET_REG - this is here for the hsi to work don't touch */ | ||
1192 | 1831 | ||
1193 | extern void bnx2x_set_ethtool_ops(struct net_device *netdev); | 1832 | extern void bnx2x_set_ethtool_ops(struct net_device *netdev); |
1194 | 1833 | void bnx2x_push_indir_table(struct bnx2x *bp); | |
1195 | void bnx2x_post_dmae(struct bnx2x *bp, struct dmae_command *dmae, int idx); | ||
1196 | 1834 | ||
1197 | #endif /* bnx2x.h */ | 1835 | #endif /* bnx2x.h */ |