diff options
| author | Dmitry Kravkov <dmitry@broadcom.com> | 2010-10-05 23:23:26 -0400 |
|---|---|---|
| committer | David S. Miller <davem@davemloft.net> | 2010-10-06 17:10:35 -0400 |
| commit | 523224a3b3cd407ce4e6731a087194e13a90db18 (patch) | |
| tree | bb0fda289682e4259c401b8a5763ba4cc4d41659 | |
| parent | 0c5b77152e736d23a23eb2546eab323e27a37f52 (diff) | |
bnx2x, cnic, bnx2i: use new FW/HSI
This is the new FW HSI blob and the relevant definitions without logic changes.
It also included code adaptation for new HSI. New features are not enabled.
New FW/HSI includes:
- Support for 57712 HW
- Future support for VF (not used)
- Improvements in FW interrupts scheme
- FW FCoE hooks (stubs for future usage)
Signed-off-by: Dmitry Kravkov <dmitry@broadcom.com>
Signed-off-by: Michael Chan <mchan@broadcom.com>
Signed-off-by: Eilon Greenstein <eilong@broadcom.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
| -rw-r--r-- | drivers/net/bnx2x/bnx2x.h | 532 | ||||
| -rw-r--r-- | drivers/net/bnx2x/bnx2x_cmn.c | 488 | ||||
| -rw-r--r-- | drivers/net/bnx2x/bnx2x_cmn.h | 256 | ||||
| -rw-r--r-- | drivers/net/bnx2x/bnx2x_ethtool.c | 20 | ||||
| -rw-r--r-- | drivers/net/bnx2x/bnx2x_fw_defs.h | 819 | ||||
| -rw-r--r-- | drivers/net/bnx2x/bnx2x_fw_file_hdr.h | 1 | ||||
| -rw-r--r-- | drivers/net/bnx2x/bnx2x_hsi.h | 1465 | ||||
| -rw-r--r-- | drivers/net/bnx2x/bnx2x_init.h | 41 | ||||
| -rw-r--r-- | drivers/net/bnx2x/bnx2x_init_ops.h | 338 | ||||
| -rw-r--r-- | drivers/net/bnx2x/bnx2x_link.c | 3 | ||||
| -rw-r--r-- | drivers/net/bnx2x/bnx2x_main.c | 3208 | ||||
| -rw-r--r-- | drivers/net/bnx2x/bnx2x_stats.c | 12 | ||||
| -rw-r--r-- | drivers/net/cnic.c | 285 | ||||
| -rw-r--r-- | drivers/net/cnic.h | 51 | ||||
| -rw-r--r-- | drivers/net/cnic_defs.h | 456 | ||||
| -rw-r--r-- | drivers/net/cnic_if.h | 2 | ||||
| -rw-r--r-- | drivers/scsi/bnx2i/bnx2i.h | 2 | ||||
| -rw-r--r-- | drivers/scsi/bnx2i/bnx2i_hwi.c | 3 | ||||
| -rw-r--r-- | firmware/Makefile | 4 |
19 files changed, 4764 insertions, 3222 deletions
diff --git a/drivers/net/bnx2x/bnx2x.h b/drivers/net/bnx2x/bnx2x.h index 64329c5fbdea..8b053e0c00ab 100644 --- a/drivers/net/bnx2x/bnx2x.h +++ b/drivers/net/bnx2x/bnx2x.h | |||
| @@ -33,13 +33,11 @@ | |||
| 33 | #define BNX2X_NEW_NAPI | 33 | #define BNX2X_NEW_NAPI |
| 34 | 34 | ||
| 35 | 35 | ||
| 36 | |||
| 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 |
| @@ -129,16 +127,18 @@ void bnx2x_panic_dump(struct bnx2x *bp); | |||
| 129 | } while (0) | 127 | } while (0) |
| 130 | #endif | 128 | #endif |
| 131 | 129 | ||
| 130 | #define bnx2x_mc_addr(ha) ((ha)->addr) | ||
| 132 | 131 | ||
| 133 | #define U64_LO(x) (u32)(((u64)(x)) & 0xffffffff) | 132 | #define U64_LO(x) (u32)(((u64)(x)) & 0xffffffff) |
| 134 | #define U64_HI(x) (u32)(((u64)(x)) >> 32) | 133 | #define U64_HI(x) (u32)(((u64)(x)) >> 32) |
| 135 | #define HILO_U64(hi, lo) ((((u64)(hi)) << 32) + (lo)) | 134 | #define HILO_U64(hi, lo) ((((u64)(hi)) << 32) + (lo)) |
| 136 | 135 | ||
| 137 | 136 | ||
| 138 | #define REG_ADDR(bp, offset) (bp->regview + offset) | 137 | #define REG_ADDR(bp, offset) ((bp->regview) + (offset)) |
| 139 | 138 | ||
| 140 | #define REG_RD(bp, offset) readl(REG_ADDR(bp, offset)) | 139 | #define REG_RD(bp, offset) readl(REG_ADDR(bp, offset)) |
| 141 | #define REG_RD8(bp, offset) readb(REG_ADDR(bp, offset)) | 140 | #define REG_RD8(bp, offset) readb(REG_ADDR(bp, offset)) |
| 141 | #define REG_RD16(bp, offset) readw(REG_ADDR(bp, offset)) | ||
| 142 | 142 | ||
| 143 | #define REG_WR(bp, offset, val) writel((u32)val, REG_ADDR(bp, offset)) | 143 | #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)) | 144 | #define REG_WR8(bp, offset, val) writeb((u8)val, REG_ADDR(bp, offset)) |
| @@ -160,6 +160,9 @@ void bnx2x_panic_dump(struct bnx2x *bp); | |||
| 160 | offset, len32); \ | 160 | offset, len32); \ |
| 161 | } while (0) | 161 | } while (0) |
| 162 | 162 | ||
| 163 | #define REG_WR_DMAE_LEN(bp, offset, valp, len32) \ | ||
| 164 | REG_WR_DMAE(bp, offset, valp, len32) | ||
| 165 | |||
| 163 | #define VIRT_WR_DMAE_LEN(bp, data, addr, len32, le32_swap) \ | 166 | #define VIRT_WR_DMAE_LEN(bp, data, addr, len32, le32_swap) \ |
| 164 | do { \ | 167 | do { \ |
| 165 | memcpy(GUNZIP_BUF(bp), data, (len32) * 4); \ | 168 | memcpy(GUNZIP_BUF(bp), data, (len32) * 4); \ |
| @@ -175,16 +178,52 @@ void bnx2x_panic_dump(struct bnx2x *bp); | |||
| 175 | offsetof(struct shmem2_region, field)) | 178 | offsetof(struct shmem2_region, field)) |
| 176 | #define SHMEM2_RD(bp, field) REG_RD(bp, SHMEM2_ADDR(bp, field)) | 179 | #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) | 180 | #define SHMEM2_WR(bp, field, val) REG_WR(bp, SHMEM2_ADDR(bp, field), val) |
| 181 | #define MF_CFG_ADDR(bp, field) (bp->common.mf_cfg_base + \ | ||
| 182 | offsetof(struct mf_cfg, field)) | ||
| 178 | 183 | ||
| 179 | #define MF_CFG_RD(bp, field) SHMEM_RD(bp, mf_cfg.field) | 184 | #define MF_CFG_RD(bp, field) REG_RD(bp, MF_CFG_ADDR(bp, field)) |
| 180 | #define MF_CFG_WR(bp, field, val) SHMEM_WR(bp, mf_cfg.field, val) | 185 | #define MF_CFG_WR(bp, field, val) REG_WR(bp,\ |
| 186 | MF_CFG_ADDR(bp, field), (val)) | ||
| 181 | 187 | ||
| 182 | #define EMAC_RD(bp, reg) REG_RD(bp, emac_base + reg) | 188 | #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) | 189 | #define EMAC_WR(bp, reg, val) REG_WR(bp, emac_base + reg, val) |
| 184 | 190 | ||
| 191 | /* SP SB indices */ | ||
| 192 | |||
| 193 | /* General SP events - stats query, cfc delete, etc */ | ||
| 194 | #define HC_SP_INDEX_ETH_DEF_CONS 3 | ||
| 195 | |||
| 196 | /* EQ completions */ | ||
| 197 | #define HC_SP_INDEX_EQ_CONS 7 | ||
| 198 | |||
| 199 | /* iSCSI L2 */ | ||
| 200 | #define HC_SP_INDEX_ETH_ISCSI_CQ_CONS 5 | ||
| 201 | #define HC_SP_INDEX_ETH_ISCSI_RX_CQ_CONS 1 | ||
| 202 | |||
| 203 | /** | ||
| 204 | * CIDs and CLIDs: | ||
| 205 | * CLIDs below is a CLID for func 0, then the CLID for other | ||
| 206 | * functions will be calculated by the formula: | ||
| 207 | * | ||
| 208 | * FUNC_N_CLID_X = N * NUM_SPECIAL_CLIENTS + FUNC_0_CLID_X | ||
| 209 | * | ||
| 210 | */ | ||
| 211 | /* iSCSI L2 */ | ||
| 212 | #define BNX2X_ISCSI_ETH_CL_ID 17 | ||
| 213 | #define BNX2X_ISCSI_ETH_CID 17 | ||
| 214 | |||
| 215 | /** Additional rings budgeting */ | ||
| 216 | #ifdef BCM_CNIC | ||
| 217 | #define CNIC_CONTEXT_USE 1 | ||
| 218 | #else | ||
| 219 | #define CNIC_CONTEXT_USE 0 | ||
| 220 | #endif /* BCM_CNIC */ | ||
| 221 | |||
| 185 | #define AEU_IN_ATTN_BITS_PXPPCICLOCKCLIENT_PARITY_ERROR \ | 222 | #define AEU_IN_ATTN_BITS_PXPPCICLOCKCLIENT_PARITY_ERROR \ |
| 186 | AEU_INPUTS_ATTN_BITS_PXPPCICLOCKCLIENT_PARITY_ERROR | 223 | AEU_INPUTS_ATTN_BITS_PXPPCICLOCKCLIENT_PARITY_ERROR |
| 187 | 224 | ||
| 225 | #define SM_RX_ID 0 | ||
| 226 | #define SM_TX_ID 1 | ||
| 188 | 227 | ||
| 189 | /* fast path */ | 228 | /* fast path */ |
| 190 | 229 | ||
| @@ -254,11 +293,21 @@ union db_prod { | |||
| 254 | #define RX_SGE_MASK_LEN_MASK (RX_SGE_MASK_LEN - 1) | 293 | #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) | 294 | #define NEXT_SGE_MASK_ELEM(el) (((el) + 1) & RX_SGE_MASK_LEN_MASK) |
| 256 | 295 | ||
| 296 | union host_hc_status_block { | ||
| 297 | /* pointer to fp status block e1x */ | ||
| 298 | struct host_hc_status_block_e1x *e1x_sb; | ||
| 299 | }; | ||
| 257 | 300 | ||
| 258 | struct bnx2x_fastpath { | 301 | struct bnx2x_fastpath { |
| 259 | 302 | ||
| 260 | struct napi_struct napi; | 303 | struct napi_struct napi; |
| 261 | struct host_status_block *status_blk; | 304 | union host_hc_status_block status_blk; |
| 305 | /* chip independed shortcuts into sb structure */ | ||
| 306 | __le16 *sb_index_values; | ||
| 307 | __le16 *sb_running_index; | ||
| 308 | /* chip independed shortcut into rx_prods_offset memory */ | ||
| 309 | u32 ustorm_rx_prods_offset; | ||
| 310 | |||
| 262 | dma_addr_t status_blk_mapping; | 311 | dma_addr_t status_blk_mapping; |
| 263 | 312 | ||
| 264 | struct sw_tx_bd *tx_buf_ring; | 313 | struct sw_tx_bd *tx_buf_ring; |
| @@ -288,10 +337,15 @@ struct bnx2x_fastpath { | |||
| 288 | #define BNX2X_FP_STATE_OPEN 0xa0000 | 337 | #define BNX2X_FP_STATE_OPEN 0xa0000 |
| 289 | #define BNX2X_FP_STATE_HALTING 0xb0000 | 338 | #define BNX2X_FP_STATE_HALTING 0xb0000 |
| 290 | #define BNX2X_FP_STATE_HALTED 0xc0000 | 339 | #define BNX2X_FP_STATE_HALTED 0xc0000 |
| 340 | #define BNX2X_FP_STATE_TERMINATING 0xd0000 | ||
| 341 | #define BNX2X_FP_STATE_TERMINATED 0xe0000 | ||
| 291 | 342 | ||
| 292 | u8 index; /* number in fp array */ | 343 | u8 index; /* number in fp array */ |
| 293 | u8 cl_id; /* eth client id */ | 344 | u8 cl_id; /* eth client id */ |
| 294 | u8 sb_id; /* status block number in HW */ | 345 | u8 cl_qzone_id; |
| 346 | u8 fw_sb_id; /* status block number in FW */ | ||
| 347 | u8 igu_sb_id; /* status block number in HW */ | ||
| 348 | u32 cid; | ||
