aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/bnx2x/bnx2x.h
diff options
context:
space:
mode:
authorVladislav Zolotarov <vladz@broadcom.com>2010-12-13 00:44:01 -0500
committerDavid S. Miller <davem@davemloft.net>2010-12-16 16:15:54 -0500
commitec6ba945211b1c1f97d3d19fe60f166c9a92241d (patch)
treead9f313c0a644bf8d4d113f4605d778b6b100178 /drivers/net/bnx2x/bnx2x.h
parenta3d22a68d752ccc1a01bb0a64dd70b7a98bf9e23 (diff)
bnx2x: add FCoE ring
Includes new driver structures and FW/HW configuration for FCoE ring Signed-off-by: Vladislav Zolotarov <vladz@broadcom.com> Signed-off-by: Shmulik Ravid-Rabinovitz <shmulikr@broadcom.com> Signed-off-by: Dmitry Kravkov <dmitry@broadcom.com> Signed-off-by: Eilon Greenstein <eilong@broadcom.com> Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'drivers/net/bnx2x/bnx2x.h')
-rw-r--r--drivers/net/bnx2x/bnx2x.h118
1 files changed, 108 insertions, 10 deletions
diff --git a/drivers/net/bnx2x/bnx2x.h b/drivers/net/bnx2x/bnx2x.h
index 7e4d682f0df1..475725c566d7 100644
--- a/drivers/net/bnx2x/bnx2x.h
+++ b/drivers/net/bnx2x/bnx2x.h
@@ -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
@@ -199,10 +201,25 @@ void bnx2x_panic_dump(struct bnx2x *bp);
199/* EQ completions */ 201/* EQ completions */
200#define HC_SP_INDEX_EQ_CONS 7 202#define HC_SP_INDEX_EQ_CONS 7
201 203
204/* FCoE L2 connection completions */
205#define HC_SP_INDEX_ETH_FCOE_TX_CQ_CONS 6
206#define HC_SP_INDEX_ETH_FCOE_RX_CQ_CONS 4
202/* iSCSI L2 */ 207/* iSCSI L2 */
203#define HC_SP_INDEX_ETH_ISCSI_CQ_CONS 5 208#define HC_SP_INDEX_ETH_ISCSI_CQ_CONS 5
204#define HC_SP_INDEX_ETH_ISCSI_RX_CQ_CONS 1 209#define HC_SP_INDEX_ETH_ISCSI_RX_CQ_CONS 1
205 210
211/* Special clients parameters */
212
213/* SB indices */
214/* FCoE L2 */
215#define BNX2X_FCOE_L2_RX_INDEX \
216 (&bp->def_status_blk->sp_sb.\
217 index_values[HC_SP_INDEX_ETH_FCOE_RX_CQ_CONS])
218
219#define BNX2X_FCOE_L2_TX_INDEX \
220 (&bp->def_status_blk->sp_sb.\
221 index_values[HC_SP_INDEX_ETH_FCOE_TX_CQ_CONS])
222
206/** 223/**
207 * CIDs and CLIDs: 224 * CIDs and CLIDs:
208 * CLIDs below is a CLID for func 0, then the CLID for other 225 * CLIDs below is a CLID for func 0, then the CLID for other
@@ -215,12 +232,19 @@ void bnx2x_panic_dump(struct bnx2x *bp);
215#define BNX2X_ISCSI_ETH_CL_ID 17 232#define BNX2X_ISCSI_ETH_CL_ID 17
216#define BNX2X_ISCSI_ETH_CID 17 233#define BNX2X_ISCSI_ETH_CID 17
217 234
235/* FCoE L2 */
236#define BNX2X_FCOE_ETH_CL_ID 18
237#define BNX2X_FCOE_ETH_CID 18
238
218/** Additional rings budgeting */ 239/** Additional rings budgeting */
219#ifdef BCM_CNIC 240#ifdef BCM_CNIC
220#define CNIC_CONTEXT_USE 1 241#define CNIC_CONTEXT_USE 1
242#define FCOE_CONTEXT_USE 1
221#else 243#else
222#define CNIC_CONTEXT_USE 0 244#define CNIC_CONTEXT_USE 0
245#define FCOE_CONTEXT_USE 0
223#endif /* BCM_CNIC */ 246#endif /* BCM_CNIC */
247#define NONE_ETH_CONTEXT_USE (FCOE_CONTEXT_USE)
224 248
225#define AEU_IN_ATTN_BITS_PXPPCICLOCKCLIENT_PARITY_ERROR \ 249#define AEU_IN_ATTN_BITS_PXPPCICLOCKCLIENT_PARITY_ERROR \
226 AEU_INPUTS_ATTN_BITS_PXPPCICLOCKCLIENT_PARITY_ERROR 250 AEU_INPUTS_ATTN_BITS_PXPPCICLOCKCLIENT_PARITY_ERROR
@@ -401,6 +425,17 @@ struct bnx2x_fastpath {
401}; 425};
402 426
403#define bnx2x_fp(bp, nr, var) (bp->fp[nr].var) 427#define bnx2x_fp(bp, nr, var) (bp->fp[nr].var)
428#ifdef BCM_CNIC
429/* FCoE L2 `fastpath' is right after the eth entries */
430#define FCOE_IDX BNX2X_NUM_ETH_QUEUES(bp)
431#define bnx2x_fcoe_fp(bp) (&bp->fp[FCOE_IDX])
432#define bnx2x_fcoe(bp, var) (bnx2x_fcoe_fp(bp)->var)
433#define IS_FCOE_FP(fp) (fp->index == FCOE_IDX)
434#define IS_FCOE_IDX(idx) ((idx) == FCOE_IDX)
435#else
436#define IS_FCOE_FP(fp) false
437#define IS_FCOE_IDX(idx) false
438#endif
404 439
405 440
406/* MC hsi */ 441/* MC hsi */
@@ -669,7 +704,9 @@ struct bnx2x_port {
669enum { 704enum {
670 CAM_ETH_LINE = 0, 705 CAM_ETH_LINE = 0,
671 CAM_ISCSI_ETH_LINE, 706 CAM_ISCSI_ETH_LINE,
672 CAM_MAX_PF_LINE = CAM_ISCSI_ETH_LINE 707 CAM_FIP_ETH_LINE,
708 CAM_FIP_MCAST_LINE,
709 CAM_MAX_PF_LINE = CAM_FIP_MCAST_LINE
673}; 710};
674/* number of MACs per function in NIG memory - used for SI mode */ 711/* number of MACs per function in NIG memory - used for SI mode */
675#define NIG_LLH_FUNC_MEM_SIZE 16 712#define NIG_LLH_FUNC_MEM_SIZE 16
@@ -714,6 +751,14 @@ enum {
714 */ 751 */
715#define L2_FP_COUNT(cid_cnt) ((cid_cnt) - CNIC_CONTEXT_USE) 752#define L2_FP_COUNT(cid_cnt) ((cid_cnt) - CNIC_CONTEXT_USE)
716 753
754/*
755 * The number of FP-SB allocated by the driver == max number of regular L2
756 * queues + 1 for the CNIC which also consumes an FP-SB
757 */
758#define FP_SB_COUNT(cid_cnt) ((cid_cnt) - FCOE_CONTEXT_USE)
759#define NUM_IGU_SB_REQUIRED(cid_cnt) \
760 (FP_SB_COUNT(cid_cnt) - NONE_ETH_CONTEXT_USE)
761
717union cdu_context { 762union cdu_context {
718 struct eth_context eth; 763 struct eth_context eth;
719 char pad[1024]; 764 char pad[1024];
@@ -726,7 +771,8 @@ union cdu_context {
726 771
727#ifdef BCM_CNIC 772#ifdef BCM_CNIC
728#define CNIC_ISCSI_CID_MAX 256 773#define CNIC_ISCSI_CID_MAX 256
729#define CNIC_CID_MAX (CNIC_ISCSI_CID_MAX) 774#define CNIC_FCOE_CID_MAX 2048
775#define CNIC_CID_MAX (CNIC_ISCSI_CID_MAX + CNIC_FCOE_CID_MAX)
730#define CNIC_ILT_LINES DIV_ROUND_UP(CNIC_CID_MAX, ILT_PAGE_CIDS) 776#define CNIC_ILT_LINES DIV_ROUND_UP(CNIC_CID_MAX, ILT_PAGE_CIDS)
731#endif 777#endif
732 778
@@ -922,6 +968,10 @@ struct bnx2x {
922#define DISABLE_MSI_FLAG 0x200 968#define DISABLE_MSI_FLAG 0x200
923#define BP_NOMCP(bp) (bp->flags & NO_MCP_FLAG) 969#define BP_NOMCP(bp) (bp->flags & NO_MCP_FLAG)
924#define MF_FUNC_DIS 0x1000 970#define MF_FUNC_DIS 0x1000
971#define FCOE_MACS_SET 0x2000
972#define NO_FCOE_FLAG 0x4000
973
974#define NO_FCOE(bp) ((bp)->flags & NO_FCOE_FLAG)
925 975
926 int pf_num; /* absolute PF number */ 976 int pf_num; /* absolute PF number */
927 int pfid; /* per-path PF number */ 977 int pfid; /* per-path PF number */
@@ -1069,7 +1119,8 @@ struct bnx2x {
1069 u16 cnic_kwq_pending; 1119 u16 cnic_kwq_pending;
1070 u16 cnic_spq_pending; 1120 u16 cnic_spq_pending;
1071 struct mutex cnic_mutex; 1121 struct mutex cnic_mutex;
1072 u8 iscsi_mac[6]; 1122 u8 iscsi_mac[ETH_ALEN];
1123 u8 fip_mac[ETH_ALEN];
1073#endif 1124#endif
1074 1125
1075 int dmae_ready; 1126 int dmae_ready;
@@ -1159,10 +1210,17 @@ struct bnx2x {
1159#define RSS_IPV6_TCP_CAP 0x0008 1210#define RSS_IPV6_TCP_CAP 0x0008
1160 1211
1161#define BNX2X_NUM_QUEUES(bp) (bp->num_queues) 1212#define BNX2X_NUM_QUEUES(bp) (bp->num_queues)
1213#define BNX2X_NUM_ETH_QUEUES(bp) (BNX2X_NUM_QUEUES(bp) - NONE_ETH_CONTEXT_USE)
1214
1215/* ethtool statistics are displayed for all regular ethernet queues and the
1216 * fcoe L2 queue if not disabled
1217 */
1218#define BNX2X_NUM_STAT_QUEUES(bp) (NO_FCOE(bp) ? BNX2X_NUM_ETH_QUEUES(bp) : \
1219 (BNX2X_NUM_ETH_QUEUES(bp) + FCOE_CONTEXT_USE))
1220
1162#define is_multi(bp) (BNX2X_NUM_QUEUES(bp) > 1) 1221#define is_multi(bp) (BNX2X_NUM_QUEUES(bp) > 1)
1163 1222
1164#define BNX2X_MAX_QUEUES(bp) (bp->igu_sb_cnt - CNIC_CONTEXT_USE) 1223#define BNX2X_MAX_QUEUES(bp) (bp->igu_sb_cnt - CNIC_CONTEXT_USE)
1165#define is_eth_multi(bp) (BNX2X_NUM_ETH_QUEUES(bp) > 1)
1166 1224
1167#define RSS_IPV4_CAP_MASK \ 1225#define RSS_IPV4_CAP_MASK \
1168 TSTORM_ETH_FUNCTION_COMMON_CONFIG_RSS_IPV4_CAPABILITY 1226 TSTORM_ETH_FUNCTION_COMMON_CONFIG_RSS_IPV4_CAPABILITY
@@ -1255,6 +1313,7 @@ struct bnx2x_client_ramrod_params {
1255 u16 cl_id; 1313 u16 cl_id;
1256 u32 cid; 1314 u32 cid;
1257 u8 poll; 1315 u8 poll;
1316#define CLIENT_IS_FCOE 0x01
1258#define CLIENT_IS_LEADING_RSS 0x02 1317#define CLIENT_IS_LEADING_RSS 0x02
1259 u8 flags; 1318 u8 flags;
1260}; 1319};
@@ -1287,11 +1346,54 @@ struct bnx2x_func_init_params {
1287 u16 spq_prod; /* valid iff FUNC_FLG_SPQ */ 1346 u16 spq_prod; /* valid iff FUNC_FLG_SPQ */
1288}; 1347};
1289 1348
1349#define for_each_eth_queue(bp, var) \
1350 for (var = 0; var < BNX2X_NUM_ETH_QUEUES(bp); var++)
1351
1352#define for_each_nondefault_eth_queue(bp, var) \
1353 for (var = 1; var < BNX2X_NUM_ETH_QUEUES(bp); var++)
1354
1355#define for_each_napi_queue(bp, var) \
1356 for (var = 0; \
1357 var < BNX2X_NUM_ETH_QUEUES(bp) + FCOE_CONTEXT_USE; var++) \
1358 if (skip_queue(bp, var)) \
1359 continue; \
1360 else
1361
1290#define for_each_queue(bp, var) \ 1362#define for_each_queue(bp, var) \
1291 for (var = 0; var < BNX2X_NUM_QUEUES(bp); var++) 1363 for (var = 0; var < BNX2X_NUM_QUEUES(bp); var++) \
1364 if (skip_queue(bp, var)) \
1365 continue; \
1366 else
1367
1368#define for_each_rx_queue(bp, var) \
1369 for (var = 0; var < BNX2X_NUM_QUEUES(bp); var++) \
1370 if (skip_rx_queue(bp, var)) \
1371 continue; \
1372 else
1373
1374#define for_each_tx_queue(bp, var) \
1375 for (var = 0; var < BNX2X_NUM_QUEUES(bp); var++) \
1376 if (skip_tx_queue(bp, var)) \
1377 continue; \
1378 else
1379
1292#define for_each_nondefault_queue(bp, var) \ 1380#define for_each_nondefault_queue(bp, var) \
1293 for (var = 1; var < BNX2X_NUM_QUEUES(bp); var++) 1381 for (var = 1; var < BNX2X_NUM_QUEUES(bp); var++) \
1382 if (skip_queue(bp, var)) \
1383 continue; \
1384 else
1294 1385
1386/* skip rx queue
1387 * if FCOE l2 support is diabled and this is the fcoe L2 queue
1388 */
1389#define skip_rx_queue(bp, idx) (NO_FCOE(bp) && IS_FCOE_IDX(idx))
1390
1391/* skip tx queue
1392 * if FCOE l2 support is diabled and this is the fcoe L2 queue
1393 */
1394#define skip_tx_queue(bp, idx) (NO_FCOE(bp) && IS_FCOE_IDX(idx))
1395
1396#define skip_queue(bp, idx) (NO_FCOE(bp) && IS_FCOE_IDX(idx))
1295 1397
1296#define WAIT_RAMROD_POLL 0x01 1398#define WAIT_RAMROD_POLL 0x01
1297#define WAIT_RAMROD_COMMON 0x02 1399#define WAIT_RAMROD_COMMON 0x02
@@ -1615,10 +1717,6 @@ static inline u32 reg_poll(struct bnx2x *bp, u32 reg, u32 expected, int ms,
1615 MAC_CONFIGURATION_ENTRY_ACTION_TYPE) == \ 1717 MAC_CONFIGURATION_ENTRY_ACTION_TYPE) == \
1616 (T_ETH_MAC_COMMAND_INVALIDATE)) 1718 (T_ETH_MAC_COMMAND_INVALIDATE))
1617 1719
1618#define CAM_INVALIDATE(x) \
1619 (x.target_table_entry.flags = TSTORM_CAM_TARGET_TABLE_ENTRY_ACTION_TYPE)
1620
1621
1622/* Number of u32 elements in MC hash array */ 1720/* Number of u32 elements in MC hash array */
1623#define MC_HASH_SIZE 8 1721#define MC_HASH_SIZE 8
1624#define MC_HASH_OFFSET(bp, i) (BAR_TSTRORM_INTMEM + \ 1722#define MC_HASH_OFFSET(bp, i) (BAR_TSTRORM_INTMEM + \