diff options
author | Vladislav Zolotarov <vladz@broadcom.com> | 2010-12-13 00:44:01 -0500 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2010-12-16 16:15:54 -0500 |
commit | ec6ba945211b1c1f97d3d19fe60f166c9a92241d (patch) | |
tree | ad9f313c0a644bf8d4d113f4605d778b6b100178 /drivers/net/bnx2x/bnx2x.h | |
parent | a3d22a68d752ccc1a01bb0a64dd70b7a98bf9e23 (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.h | 118 |
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 { | |||
669 | enum { | 704 | enum { |
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 | |||
717 | union cdu_context { | 762 | union 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 + \ |