diff options
-rw-r--r-- | drivers/net/ethernet/broadcom/bnx2x/bnx2x.h | 44 | ||||
-rw-r--r-- | drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c | 12 | ||||
-rw-r--r-- | drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.h | 8 | ||||
-rw-r--r-- | drivers/net/ethernet/broadcom/bnx2x/bnx2x_ethtool.c | 2 | ||||
-rw-r--r-- | drivers/net/ethernet/broadcom/bnx2x/bnx2x_main.c | 30 |
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 | ||
1301 | static 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 | ||
8324 | int bnx2x_set_eth_mac(struct bnx2x *bp, bool set) | 8324 | int 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 | } |