aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/bnx2x/bnx2x.h
diff options
context:
space:
mode:
authorGlenn Elliott <gelliott@cs.unc.edu>2012-03-04 19:47:13 -0500
committerGlenn Elliott <gelliott@cs.unc.edu>2012-03-04 19:47:13 -0500
commitc71c03bda1e86c9d5198c5d83f712e695c4f2a1e (patch)
treeecb166cb3e2b7e2adb3b5e292245fefd23381ac8 /drivers/net/bnx2x/bnx2x.h
parentea53c912f8a86a8567697115b6a0d8152beee5c8 (diff)
parent6a00f206debf8a5c8899055726ad127dbeeed098 (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.h944
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
327union 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
258struct bnx2x_fastpath { 334struct 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 {
566struct bnx2x_port { 689struct 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 */
716enum {
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
600union cdu_context { 774union 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 */
608struct bnx2x_slowpath { 817struct 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
636struct attn_route { 848struct attn_route {
637 u32 sig[4]; 849 u32 sig[5];
850};
851
852struct iro {
853 u32 base;
854 u16 m1;
855 u16 m2;
856 u16 m3;
857 u16 size;
858};
859
860struct hw_context {
861 union cdu_context *vcxt;
862 dma_addr_t cxt_mapping;
863 size_t size;
638}; 864};
639 865
866/* forward */
867struct bnx2x_ilt;
868
640typedef enum { 869typedef 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 */
901struct bnx2x_link_report_data {
902 u16 line_speed; /* Effective line speed */
903 unsigned long link_report_flags;/* BNX2X_LINK_REPORT_XXX flags */
904};
905
906enum {
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
646struct bnx2x { 913struct 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
1310struct 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
1320struct 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
1357struct 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
1376struct 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
1388struct 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
1395struct bnx2x_rss_params {
1396 int mode;
1397 u16 cap;
1398 u16 result_mask;
1399};
1400
1401struct 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
1468void bnx2x_read_mf_cfg(struct bnx2x *bp);
1469
1470/* dmae */
928void bnx2x_read_dmae(struct bnx2x *bp, u32 src_addr, u32 len32); 1471void bnx2x_read_dmae(struct bnx2x *bp, u32 src_addr, u32 len32);
929void bnx2x_write_dmae(struct bnx2x *bp, dma_addr_t dma_addr, u32 dst_addr, 1472void bnx2x_write_dmae(struct bnx2x *bp, dma_addr_t dma_addr, u32 dst_addr,
930 u32 len32); 1473 u32 len32);
1474void bnx2x_post_dmae(struct bnx2x *bp, struct dmae_command *dmae, int idx);
1475u32 bnx2x_dmae_opcode_add_comp(u32 opcode, u8 comp_type);
1476u32 bnx2x_dmae_opcode_clr_src_reset(u32 opcode);
1477u32 bnx2x_dmae_opcode(struct bnx2x *bp, u8 src_type, u8 dst_type,
1478 bool with_comp, u8 comp_type);
1479
931int bnx2x_get_gpio(struct bnx2x *bp, int gpio_num, u8 port); 1480int bnx2x_get_gpio(struct bnx2x *bp, int gpio_num, u8 port);
932int bnx2x_set_gpio(struct bnx2x *bp, int gpio_num, u32 mode, u8 port); 1481int bnx2x_set_gpio(struct bnx2x *bp, int gpio_num, u32 mode, u8 port);
933int bnx2x_set_gpio_int(struct bnx2x *bp, int gpio_num, u32 mode, u8 port); 1482int bnx2x_set_gpio_int(struct bnx2x *bp, int gpio_num, u32 mode, u8 port);
934u32 bnx2x_fw_command(struct bnx2x *bp, u32 command); 1483u32 bnx2x_fw_command(struct bnx2x *bp, u32 command, u32 param);
935void bnx2x_reg_wr_ind(struct bnx2x *bp, u32 addr, u32 val); 1484
936void bnx2x_write_dmae_phys_len(struct bnx2x *bp, dma_addr_t phys_addr,
937 u32 addr, u32 len);
938void bnx2x_calc_fc_adv(struct bnx2x *bp); 1485void bnx2x_calc_fc_adv(struct bnx2x *bp);
939int bnx2x_sp_post(struct bnx2x *bp, int command, int cid, 1486int 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. */
1490void bnx2x_invalidate_e1_mc_list(struct bnx2x *bp);
1491void bnx2x_invalidate_e1h_mc_list(struct bnx2x *bp);
1492void bnx2x_invalidate_uc_list(struct bnx2x *bp);
1493
941void bnx2x_update_coalesce(struct bnx2x *bp); 1494void bnx2x_update_coalesce(struct bnx2x *bp);
1495int bnx2x_get_link_cfg_idx(struct bnx2x *bp);
942 1496
943static inline u32 reg_poll(struct bnx2x *bp, u32 reg, u32 expected, int ms, 1497static 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
1189BNX2X_EXTERN int load_count[3]; /* 0-common, 1-port0, 2-port1 */ 1830BNX2X_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
1193extern void bnx2x_set_ethtool_ops(struct net_device *netdev); 1832extern void bnx2x_set_ethtool_ops(struct net_device *netdev);
1194 1833void bnx2x_push_indir_table(struct bnx2x *bp);
1195void bnx2x_post_dmae(struct bnx2x *bp, struct dmae_command *dmae, int idx);
1196 1834
1197#endif /* bnx2x.h */ 1835#endif /* bnx2x.h */