aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/net/ethernet/broadcom/bnx2x/bnx2x.h44
-rw-r--r--drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c12
-rw-r--r--drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.h8
-rw-r--r--drivers/net/ethernet/broadcom/bnx2x/bnx2x_ethtool.c2
-rw-r--r--drivers/net/ethernet/broadcom/bnx2x/bnx2x_main.c30
5 files changed, 54 insertions, 42 deletions
diff --git a/drivers/net/ethernet/broadcom/bnx2x/bnx2x.h b/drivers/net/ethernet/broadcom/bnx2x/bnx2x.h
index 86e94517a536..7ecb61f4a61d 100644
--- a/drivers/net/ethernet/broadcom/bnx2x/bnx2x.h
+++ b/drivers/net/ethernet/broadcom/bnx2x/bnx2x.h
@@ -2361,7 +2361,7 @@ void bnx2x_igu_clear_sb_gen(struct bnx2x *bp, u8 func, u8 idu_sb_id,
2361#define ATTN_HARD_WIRED_MASK 0xff00 2361#define ATTN_HARD_WIRED_MASK 0xff00
2362#define ATTENTION_ID 4 2362#define ATTENTION_ID 4
2363 2363
2364#define IS_MF_STORAGE_ONLY(bp) (IS_MF_STORAGE_SD(bp) || \ 2364#define IS_MF_STORAGE_ONLY(bp) (IS_MF_STORAGE_PERSONALITY_ONLY(bp) || \
2365 IS_MF_FCOE_AFEX(bp)) 2365 IS_MF_FCOE_AFEX(bp))
2366 2366
2367/* stuff added to make the code fit 80Col */ 2367/* stuff added to make the code fit 80Col */
@@ -2537,14 +2537,44 @@ void bnx2x_notify_link_changed(struct bnx2x *bp);
2537 2537
2538#define IS_MF_ISCSI_SD(bp) (IS_MF_SD(bp) && BNX2X_IS_MF_SD_PROTOCOL_ISCSI(bp)) 2538#define IS_MF_ISCSI_SD(bp) (IS_MF_SD(bp) && BNX2X_IS_MF_SD_PROTOCOL_ISCSI(bp))
2539#define IS_MF_FCOE_SD(bp) (IS_MF_SD(bp) && BNX2X_IS_MF_SD_PROTOCOL_FCOE(bp)) 2539#define IS_MF_FCOE_SD(bp) (IS_MF_SD(bp) && BNX2X_IS_MF_SD_PROTOCOL_FCOE(bp))
2540#define IS_MF_ISCSI_SI(bp) (IS_MF_SI(bp) && BNX2X_IS_MF_EXT_PROTOCOL_ISCSI(bp))
2540 2541
2541#define BNX2X_MF_EXT_PROTOCOL_FCOE(bp) ((bp)->mf_ext_config & \ 2542#define IS_MF_ISCSI_ONLY(bp) (IS_MF_ISCSI_SD(bp) || IS_MF_ISCSI_SI(bp))
2542 MACP_FUNC_CFG_FLAGS_FCOE_OFFLOAD) 2543
2544#define BNX2X_MF_EXT_PROTOCOL_MASK \
2545 (MACP_FUNC_CFG_FLAGS_ETHERNET | \
2546 MACP_FUNC_CFG_FLAGS_ISCSI_OFFLOAD | \
2547 MACP_FUNC_CFG_FLAGS_FCOE_OFFLOAD)
2548
2549#define BNX2X_MF_EXT_PROT(bp) ((bp)->mf_ext_config & \
2550 BNX2X_MF_EXT_PROTOCOL_MASK)
2551
2552#define BNX2X_HAS_MF_EXT_PROTOCOL_FCOE(bp) \
2553 (BNX2X_MF_EXT_PROT(bp) & MACP_FUNC_CFG_FLAGS_FCOE_OFFLOAD)
2554
2555#define BNX2X_IS_MF_EXT_PROTOCOL_FCOE(bp) \
2556 (BNX2X_MF_EXT_PROT(bp) == MACP_FUNC_CFG_FLAGS_FCOE_OFFLOAD)
2557
2558#define BNX2X_IS_MF_EXT_PROTOCOL_ISCSI(bp) \
2559 (BNX2X_MF_EXT_PROT(bp) == MACP_FUNC_CFG_FLAGS_ISCSI_OFFLOAD)
2560
2561#define IS_MF_FCOE_AFEX(bp) \
2562 (IS_MF_AFEX(bp) && BNX2X_IS_MF_EXT_PROTOCOL_FCOE(bp))
2563
2564#define IS_MF_SD_STORAGE_PERSONALITY_ONLY(bp) \
2565 (IS_MF_SD(bp) && \
2566 (BNX2X_IS_MF_SD_PROTOCOL_ISCSI(bp) || \
2567 BNX2X_IS_MF_SD_PROTOCOL_FCOE(bp)))
2568
2569#define IS_MF_SI_STORAGE_PERSONALITY_ONLY(bp) \
2570 (IS_MF_SI(bp) && \
2571 (BNX2X_IS_MF_EXT_PROTOCOL_ISCSI(bp) || \
2572 BNX2X_IS_MF_EXT_PROTOCOL_FCOE(bp)))
2573
2574#define IS_MF_STORAGE_PERSONALITY_ONLY(bp) \
2575 (IS_MF_SD_STORAGE_PERSONALITY_ONLY(bp) || \
2576 IS_MF_SI_STORAGE_PERSONALITY_ONLY(bp))
2543 2577
2544#define IS_MF_FCOE_AFEX(bp) (IS_MF_AFEX(bp) && BNX2X_MF_EXT_PROTOCOL_FCOE(bp))
2545#define IS_MF_STORAGE_SD(bp) (IS_MF_SD(bp) && \
2546 (BNX2X_IS_MF_SD_PROTOCOL_ISCSI(bp) || \
2547 BNX2X_IS_MF_SD_PROTOCOL_FCOE(bp)))
2548 2578
2549#define SET_FLAG(value, mask, flag) \ 2579#define SET_FLAG(value, mask, flag) \
2550 do {\ 2580 do {\
diff --git a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c
index 6dc32aee96bf..40beef5bca88 100644
--- a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c
+++ b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c
@@ -1938,7 +1938,7 @@ void bnx2x_set_num_queues(struct bnx2x *bp)
1938 bp->num_ethernet_queues = bnx2x_calc_num_queues(bp); 1938 bp->num_ethernet_queues = bnx2x_calc_num_queues(bp);
1939 1939
1940 /* override in STORAGE SD modes */ 1940 /* override in STORAGE SD modes */
1941 if (IS_MF_STORAGE_SD(bp) || IS_MF_FCOE_AFEX(bp)) 1941 if (IS_MF_STORAGE_ONLY(bp))
1942 bp->num_ethernet_queues = 1; 1942 bp->num_ethernet_queues = 1;
1943 1943
1944 /* Add special queues */ 1944 /* Add special queues */
@@ -4231,14 +4231,13 @@ int bnx2x_change_mac_addr(struct net_device *dev, void *p)
4231 struct bnx2x *bp = netdev_priv(dev); 4231 struct bnx2x *bp = netdev_priv(dev);
4232 int rc = 0; 4232 int rc = 0;
4233 4233
4234 if (!bnx2x_is_valid_ether_addr(bp, addr->sa_data)) { 4234 if (!is_valid_ether_addr(addr->sa_data)) {
4235 BNX2X_ERR("Requested MAC address is not valid\n"); 4235 BNX2X_ERR("Requested MAC address is not valid\n");
4236 return -EINVAL; 4236 return -EINVAL;
4237 } 4237 }
4238 4238
4239 if ((IS_MF_STORAGE_SD(bp) || IS_MF_FCOE_AFEX(bp)) && 4239 if (IS_MF_STORAGE_ONLY(bp)) {
4240 !is_zero_ether_addr(addr->sa_data)) { 4240 BNX2X_ERR("Can't change address on STORAGE ONLY function\n");
4241 BNX2X_ERR("Can't configure non-zero address on iSCSI or FCoE functions in MF-SD mode\n");
4242 return -EINVAL; 4241 return -EINVAL;
4243 } 4242 }
4244 4243
@@ -4417,8 +4416,7 @@ static int bnx2x_alloc_fp_mem_at(struct bnx2x *bp, int index)
4417 u8 cos; 4416 u8 cos;
4418 int rx_ring_size = 0; 4417 int rx_ring_size = 0;
4419 4418
4420 if (!bp->rx_ring_size && 4419 if (!bp->rx_ring_size && IS_MF_STORAGE_ONLY(bp)) {
4421 (IS_MF_STORAGE_SD(bp) || IS_MF_FCOE_AFEX(bp))) {
4422 rx_ring_size = MIN_RX_SIZE_NONTPA; 4420 rx_ring_size = MIN_RX_SIZE_NONTPA;
4423 bp->rx_ring_size = rx_ring_size; 4421 bp->rx_ring_size = rx_ring_size;
4424 } else if (!bp->rx_ring_size) { 4422 } else if (!bp->rx_ring_size) {
diff --git a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.h b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.h
index ac63e16829ef..010277571adb 100644
--- a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.h
+++ b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.h
@@ -1298,15 +1298,7 @@ static inline void bnx2x_update_drv_flags(struct bnx2x *bp, u32 flags, u32 set)
1298 } 1298 }
1299} 1299}
1300 1300
1301static inline bool bnx2x_is_valid_ether_addr(struct bnx2x *bp, u8 *addr)
1302{
1303 if (is_valid_ether_addr(addr) ||
1304 (is_zero_ether_addr(addr) &&
1305 (IS_MF_STORAGE_SD(bp) || IS_MF_FCOE_AFEX(bp))))
1306 return true;
1307 1301
1308 return false;
1309}
1310 1302
1311/** 1303/**
1312 * bnx2x_fill_fw_str - Fill buffer with FW version string 1304 * bnx2x_fill_fw_str - Fill buffer with FW version string
diff --git a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_ethtool.c b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_ethtool.c
index 0b173ed20ae9..1edc931b1458 100644
--- a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_ethtool.c
+++ b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_ethtool.c
@@ -1852,7 +1852,7 @@ static int bnx2x_set_ringparam(struct net_device *dev,
1852 if ((ering->rx_pending > MAX_RX_AVAIL) || 1852 if ((ering->rx_pending > MAX_RX_AVAIL) ||
1853 (ering->rx_pending < (bp->disable_tpa ? MIN_RX_SIZE_NONTPA : 1853 (ering->rx_pending < (bp->disable_tpa ? MIN_RX_SIZE_NONTPA :
1854 MIN_RX_SIZE_TPA)) || 1854 MIN_RX_SIZE_TPA)) ||
1855 (ering->tx_pending > (IS_MF_FCOE_AFEX(bp) ? 0 : MAX_TX_AVAIL)) || 1855 (ering->tx_pending > (IS_MF_STORAGE_ONLY(bp) ? 0 : MAX_TX_AVAIL)) ||
1856 (ering->tx_pending <= MAX_SKB_FRAGS + 4)) { 1856 (ering->tx_pending <= MAX_SKB_FRAGS + 4)) {
1857 DP(BNX2X_MSG_ETHTOOL, "Command parameters not supported\n"); 1857 DP(BNX2X_MSG_ETHTOOL, "Command parameters not supported\n");
1858 return -EINVAL; 1858 return -EINVAL;
diff --git a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_main.c b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_main.c
index 32e2444ab5e1..82ea6b682981 100644
--- a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_main.c
+++ b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_main.c
@@ -8323,13 +8323,6 @@ int bnx2x_del_all_macs(struct bnx2x *bp,
8323 8323
8324int bnx2x_set_eth_mac(struct bnx2x *bp, bool set) 8324int bnx2x_set_eth_mac(struct bnx2x *bp, bool set)
8325{ 8325{
8326 if (is_zero_ether_addr(bp->dev->dev_addr) &&
8327 (IS_MF_STORAGE_SD(bp) || IS_MF_FCOE_AFEX(bp))) {
8328 DP(NETIF_MSG_IFUP | NETIF_MSG_IFDOWN,
8329 "Ignoring Zero MAC for STORAGE SD mode\n");
8330 return 0;
8331 }
8332
8333 if (IS_PF(bp)) { 8326 if (IS_PF(bp)) {
8334 unsigned long ramrod_flags = 0; 8327 unsigned long ramrod_flags = 0;
8335 8328
@@ -11355,15 +11348,14 @@ static void bnx2x_get_fcoe_info(struct bnx2x *bp)
11355 dev_info.port_hw_config[port]. 11348 dev_info.port_hw_config[port].
11356 fcoe_wwn_node_name_lower); 11349 fcoe_wwn_node_name_lower);
11357 } else if (!IS_MF_SD(bp)) { 11350 } else if (!IS_MF_SD(bp)) {
11358 /* 11351 /* Read the WWN info only if the FCoE feature is enabled for
11359 * Read the WWN info only if the FCoE feature is enabled for
11360 * this function. 11352 * this function.
11361 */ 11353 */
11362 if (BNX2X_MF_EXT_PROTOCOL_FCOE(bp) && !CHIP_IS_E1x(bp)) 11354 if (BNX2X_HAS_MF_EXT_PROTOCOL_FCOE(bp))
11355 bnx2x_get_ext_wwn_info(bp, func);
11356 } else {
11357 if (BNX2X_IS_MF_SD_PROTOCOL_FCOE(bp) && !CHIP_IS_E1x(bp))
11363 bnx2x_get_ext_wwn_info(bp, func); 11358 bnx2x_get_ext_wwn_info(bp, func);
11364
11365 } else if (IS_MF_FCOE_SD(bp) && !CHIP_IS_E1x(bp)) {
11366 bnx2x_get_ext_wwn_info(bp, func);
11367 } 11359 }
11368 11360
11369 BNX2X_DEV_INFO("max_fcoe_conn 0x%x\n", bp->cnic_eth_dev.max_fcoe_conn); 11361 BNX2X_DEV_INFO("max_fcoe_conn 0x%x\n", bp->cnic_eth_dev.max_fcoe_conn);
@@ -11401,7 +11393,7 @@ static void bnx2x_get_cnic_mac_hwinfo(struct bnx2x *bp)
11401 * In non SD mode features configuration comes from struct 11393 * In non SD mode features configuration comes from struct
11402 * func_ext_config. 11394 * func_ext_config.
11403 */ 11395 */
11404 if (!IS_MF_SD(bp) && !CHIP_IS_E1x(bp)) { 11396 if (!IS_MF_SD(bp)) {
11405 u32 cfg = MF_CFG_RD(bp, func_ext_config[func].func_cfg); 11397 u32 cfg = MF_CFG_RD(bp, func_ext_config[func].func_cfg);
11406 if (cfg & MACP_FUNC_CFG_FLAGS_ISCSI_OFFLOAD) { 11398 if (cfg & MACP_FUNC_CFG_FLAGS_ISCSI_OFFLOAD) {
11407 val2 = MF_CFG_RD(bp, func_ext_config[func]. 11399 val2 = MF_CFG_RD(bp, func_ext_config[func].
@@ -11520,7 +11512,7 @@ static void bnx2x_get_mac_hwinfo(struct bnx2x *bp)
11520 11512
11521 memcpy(bp->link_params.mac_addr, bp->dev->dev_addr, ETH_ALEN); 11513 memcpy(bp->link_params.mac_addr, bp->dev->dev_addr, ETH_ALEN);
11522 11514
11523 if (!bnx2x_is_valid_ether_addr(bp, bp->dev->dev_addr)) 11515 if (!is_valid_ether_addr(bp->dev->dev_addr))
11524 dev_err(&bp->pdev->dev, 11516 dev_err(&bp->pdev->dev,
11525 "bad Ethernet MAC address configuration: %pM\n" 11517 "bad Ethernet MAC address configuration: %pM\n"
11526 "change it manually before bringing up the appropriate network interface\n", 11518 "change it manually before bringing up the appropriate network interface\n",
@@ -11970,7 +11962,7 @@ static int bnx2x_init_bp(struct bnx2x *bp)
11970 dev_err(&bp->pdev->dev, "MCP disabled, must load devices in order!\n"); 11962 dev_err(&bp->pdev->dev, "MCP disabled, must load devices in order!\n");
11971 11963
11972 bp->disable_tpa = disable_tpa; 11964 bp->disable_tpa = disable_tpa;
11973 bp->disable_tpa |= IS_MF_STORAGE_SD(bp) || IS_MF_FCOE_AFEX(bp); 11965 bp->disable_tpa |= !!IS_MF_STORAGE_ONLY(bp);
11974 /* Reduce memory usage in kdump environment by disabling TPA */ 11966 /* Reduce memory usage in kdump environment by disabling TPA */
11975 bp->disable_tpa |= is_kdump_kernel(); 11967 bp->disable_tpa |= is_kdump_kernel();
11976 11968
@@ -11990,7 +11982,7 @@ static int bnx2x_init_bp(struct bnx2x *bp)
11990 11982
11991 bp->mrrs = mrrs; 11983 bp->mrrs = mrrs;
11992 11984
11993 bp->tx_ring_size = IS_MF_FCOE_AFEX(bp) ? 0 : MAX_TX_AVAIL; 11985 bp->tx_ring_size = IS_MF_STORAGE_ONLY(bp) ? 0 : MAX_TX_AVAIL;
11994 if (IS_VF(bp)) 11986 if (IS_VF(bp))
11995 bp->rx_ring_size = MAX_RX_AVAIL; 11987 bp->rx_ring_size = MAX_RX_AVAIL;
11996 11988
@@ -12310,7 +12302,7 @@ void bnx2x_set_rx_mode_inner(struct bnx2x *bp)
12310 12302
12311 bp->rx_mode = rx_mode; 12303 bp->rx_mode = rx_mode;
12312 /* handle ISCSI SD mode */ 12304 /* handle ISCSI SD mode */
12313 if (IS_MF_ISCSI_SD(bp)) 12305 if (IS_MF_ISCSI_ONLY(bp))
12314 bp->rx_mode = BNX2X_RX_MODE_NONE; 12306 bp->rx_mode = BNX2X_RX_MODE_NONE;
12315 12307
12316 /* Schedule the rx_mode command */ 12308 /* Schedule the rx_mode command */
@@ -12417,7 +12409,7 @@ static int bnx2x_validate_addr(struct net_device *dev)
12417 if (IS_VF(bp)) 12409 if (IS_VF(bp))
12418 bnx2x_sample_bulletin(bp); 12410 bnx2x_sample_bulletin(bp);
12419 12411
12420 if (!bnx2x_is_valid_ether_addr(bp, dev->dev_addr)) { 12412 if (!is_valid_ether_addr(dev->dev_addr)) {
12421 BNX2X_ERR("Non-valid Ethernet address\n"); 12413 BNX2X_ERR("Non-valid Ethernet address\n");
12422 return -EADDRNOTAVAIL; 12414 return -EADDRNOTAVAIL;
12423 } 12415 }