Commit 9e62e912 authored by Dmitry Kravkov's avatar Dmitry Kravkov Committed by David S. Miller

bnx2x: changed iscsi/fcoe mac init and macros

This includes changes in macros to better distinguish between the two
protocols, and slightly changed the way their macs are set.
Notice this file contains string print lines with more than 80 characters,
as to not break prints.
Signed-off-by: default avatarDmitry Kravkov <dmitry@broadcom.com>
Signed-off-by: default avatarYuval Mintz <yuvalmin@broadcom.com>
Signed-off-by: default avatarEilon Greenstein <eilong@broadcom.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 910b2202
...@@ -2117,14 +2117,22 @@ void bnx2x_set_ethtool_ops(struct net_device *netdev); ...@@ -2117,14 +2117,22 @@ void bnx2x_set_ethtool_ops(struct net_device *netdev);
void bnx2x_notify_link_changed(struct bnx2x *bp); void bnx2x_notify_link_changed(struct bnx2x *bp);
#define BNX2X_MF_PROTOCOL(bp) \ #define BNX2X_MF_SD_PROTOCOL(bp) \
((bp)->mf_config[BP_VN(bp)] & FUNC_MF_CFG_PROTOCOL_MASK) ((bp)->mf_config[BP_VN(bp)] & FUNC_MF_CFG_PROTOCOL_MASK)
#ifdef BCM_CNIC #ifdef BCM_CNIC
#define BNX2X_IS_MF_PROTOCOL_ISCSI(bp) \ #define BNX2X_IS_MF_SD_PROTOCOL_ISCSI(bp) \
(BNX2X_MF_PROTOCOL(bp) == FUNC_MF_CFG_PROTOCOL_ISCSI) (BNX2X_MF_SD_PROTOCOL(bp) == FUNC_MF_CFG_PROTOCOL_ISCSI)
#define IS_MF_ISCSI_SD(bp) (IS_MF_SD(bp) && BNX2X_IS_MF_PROTOCOL_ISCSI(bp)) #define BNX2X_IS_MF_SD_PROTOCOL_FCOE(bp) \
(BNX2X_MF_SD_PROTOCOL(bp) == FUNC_MF_CFG_PROTOCOL_FCOE)
#define IS_MF_ISCSI_SD(bp) (IS_MF_SD(bp) && BNX2X_IS_MF_SD_PROTOCOL_ISCSI(bp))
#define IS_MF_FCOE_SD(bp) (IS_MF_SD(bp) && BNX2X_IS_MF_SD_PROTOCOL_FCOE(bp))
#define IS_MF_STORAGE_SD(bp) (IS_MF_SD(bp) && \
(BNX2X_IS_MF_SD_PROTOCOL_ISCSI(bp) || \
BNX2X_IS_MF_SD_PROTOCOL_FCOE(bp)))
#endif #endif
#endif /* bnx2x.h */ #endif /* bnx2x.h */
...@@ -1453,8 +1453,8 @@ void bnx2x_set_num_queues(struct bnx2x *bp) ...@@ -1453,8 +1453,8 @@ void bnx2x_set_num_queues(struct bnx2x *bp)
} }
#ifdef BCM_CNIC #ifdef BCM_CNIC
/* override in ISCSI SD mod */ /* override in STORAGE SD mode */
if (IS_MF_ISCSI_SD(bp)) if (IS_MF_STORAGE_SD(bp))
bp->num_queues = 1; bp->num_queues = 1;
#endif #endif
/* Add special queues */ /* Add special queues */
...@@ -3077,7 +3077,7 @@ int bnx2x_change_mac_addr(struct net_device *dev, void *p) ...@@ -3077,7 +3077,7 @@ int bnx2x_change_mac_addr(struct net_device *dev, void *p)
} }
#ifdef BCM_CNIC #ifdef BCM_CNIC
if (IS_MF_ISCSI_SD(bp) && !is_zero_ether_addr(addr->sa_data)) { if (IS_MF_STORAGE_SD(bp) && !is_zero_ether_addr(addr->sa_data)) {
BNX2X_ERR("Can't configure non-zero address on iSCSI or FCoE functions in MF-SD mode\n"); BNX2X_ERR("Can't configure non-zero address on iSCSI or FCoE functions in MF-SD mode\n");
return -EINVAL; return -EINVAL;
} }
...@@ -3199,7 +3199,7 @@ static int bnx2x_alloc_fp_mem_at(struct bnx2x *bp, int index) ...@@ -3199,7 +3199,7 @@ static int bnx2x_alloc_fp_mem_at(struct bnx2x *bp, int index)
int rx_ring_size = 0; int rx_ring_size = 0;
#ifdef BCM_CNIC #ifdef BCM_CNIC
if (!bp->rx_ring_size && IS_MF_ISCSI_SD(bp)) { if (!bp->rx_ring_size && IS_MF_STORAGE_SD(bp)) {
rx_ring_size = MIN_RX_SIZE_NONTPA; rx_ring_size = MIN_RX_SIZE_NONTPA;
bp->rx_ring_size = rx_ring_size; bp->rx_ring_size = rx_ring_size;
} else } else
......
...@@ -1664,7 +1664,7 @@ static inline bool bnx2x_is_valid_ether_addr(struct bnx2x *bp, u8 *addr) ...@@ -1664,7 +1664,7 @@ static inline bool bnx2x_is_valid_ether_addr(struct bnx2x *bp, u8 *addr)
if (is_valid_ether_addr(addr)) if (is_valid_ether_addr(addr))
return true; return true;
#ifdef BCM_CNIC #ifdef BCM_CNIC
if (is_zero_ether_addr(addr) && IS_MF_ISCSI_SD(bp)) if (is_zero_ether_addr(addr) && IS_MF_STORAGE_SD(bp))
return true; return true;
#endif #endif
return false; return false;
......
...@@ -7177,7 +7177,7 @@ int bnx2x_set_eth_mac(struct bnx2x *bp, bool set) ...@@ -7177,7 +7177,7 @@ int bnx2x_set_eth_mac(struct bnx2x *bp, bool set)
unsigned long ramrod_flags = 0; unsigned long ramrod_flags = 0;
#ifdef BCM_CNIC #ifdef BCM_CNIC
if (is_zero_ether_addr(bp->dev->dev_addr) && IS_MF_ISCSI_SD(bp)) { if (is_zero_ether_addr(bp->dev->dev_addr) && IS_MF_STORAGE_SD(bp)) {
DP(NETIF_MSG_IFUP | NETIF_MSG_IFDOWN, DP(NETIF_MSG_IFUP | NETIF_MSG_IFDOWN,
"Ignoring Zero MAC for STORAGE SD mode\n"); "Ignoring Zero MAC for STORAGE SD mode\n");
return 0; return 0;
...@@ -9479,6 +9479,7 @@ static void __devinit bnx2x_get_port_hwinfo(struct bnx2x *bp) ...@@ -9479,6 +9479,7 @@ static void __devinit bnx2x_get_port_hwinfo(struct bnx2x *bp)
void bnx2x_get_iscsi_info(struct bnx2x *bp) void bnx2x_get_iscsi_info(struct bnx2x *bp)
{ {
u32 no_flags = NO_ISCSI_FLAG;
#ifdef BCM_CNIC #ifdef BCM_CNIC
int port = BP_PORT(bp); int port = BP_PORT(bp);
...@@ -9498,12 +9499,28 @@ void bnx2x_get_iscsi_info(struct bnx2x *bp) ...@@ -9498,12 +9499,28 @@ void bnx2x_get_iscsi_info(struct bnx2x *bp)
* disable the feature. * disable the feature.
*/ */
if (!bp->cnic_eth_dev.max_iscsi_conn) if (!bp->cnic_eth_dev.max_iscsi_conn)
bp->flags |= NO_ISCSI_FLAG; bp->flags |= no_flags;
#else #else
bp->flags |= NO_ISCSI_FLAG; bp->flags |= no_flags;
#endif #endif
} }
#ifdef BCM_CNIC
static void __devinit bnx2x_get_ext_wwn_info(struct bnx2x *bp, int func)
{
/* Port info */
bp->cnic_eth_dev.fcoe_wwn_port_name_hi =
MF_CFG_RD(bp, func_ext_config[func].fcoe_wwn_port_name_upper);
bp->cnic_eth_dev.fcoe_wwn_port_name_lo =
MF_CFG_RD(bp, func_ext_config[func].fcoe_wwn_port_name_lower);
/* Node info */
bp->cnic_eth_dev.fcoe_wwn_node_name_hi =
MF_CFG_RD(bp, func_ext_config[func].fcoe_wwn_node_name_upper);
bp->cnic_eth_dev.fcoe_wwn_node_name_lo =
MF_CFG_RD(bp, func_ext_config[func].fcoe_wwn_node_name_lower);
}
#endif
static void __devinit bnx2x_get_fcoe_info(struct bnx2x *bp) static void __devinit bnx2x_get_fcoe_info(struct bnx2x *bp)
{ {
#ifdef BCM_CNIC #ifdef BCM_CNIC
...@@ -9546,24 +9563,11 @@ static void __devinit bnx2x_get_fcoe_info(struct bnx2x *bp) ...@@ -9546,24 +9563,11 @@ static void __devinit bnx2x_get_fcoe_info(struct bnx2x *bp)
* Read the WWN info only if the FCoE feature is enabled for * Read the WWN info only if the FCoE feature is enabled for
* this function. * this function.
*/ */
if (cfg & MACP_FUNC_CFG_FLAGS_FCOE_OFFLOAD) { if (cfg & MACP_FUNC_CFG_FLAGS_FCOE_OFFLOAD)
/* Port info */ bnx2x_get_ext_wwn_info(bp, func);
bp->cnic_eth_dev.fcoe_wwn_port_name_hi =
MF_CFG_RD(bp, func_ext_config[func].
fcoe_wwn_port_name_upper);
bp->cnic_eth_dev.fcoe_wwn_port_name_lo =
MF_CFG_RD(bp, func_ext_config[func].
fcoe_wwn_port_name_lower);
/* Node info */ } else if (IS_MF_FCOE_SD(bp))
bp->cnic_eth_dev.fcoe_wwn_node_name_hi = bnx2x_get_ext_wwn_info(bp, func);
MF_CFG_RD(bp, func_ext_config[func].
fcoe_wwn_node_name_upper);
bp->cnic_eth_dev.fcoe_wwn_node_name_lo =
MF_CFG_RD(bp, func_ext_config[func].
fcoe_wwn_node_name_lower);
}
}
BNX2X_DEV_INFO("max_fcoe_conn 0x%x\n", bp->cnic_eth_dev.max_fcoe_conn); BNX2X_DEV_INFO("max_fcoe_conn 0x%x\n", bp->cnic_eth_dev.max_fcoe_conn);
...@@ -9616,8 +9620,11 @@ static void __devinit bnx2x_get_mac_hwinfo(struct bnx2x *bp) ...@@ -9616,8 +9620,11 @@ static void __devinit bnx2x_get_mac_hwinfo(struct bnx2x *bp)
/* /*
* iSCSI and FCoE NPAR MACs: if there is no either iSCSI or * iSCSI and FCoE NPAR MACs: if there is no either iSCSI or
* FCoE MAC then the appropriate feature should be disabled. * FCoE MAC then the appropriate feature should be disabled.
*
* In non SD mode features configuration comes from
* struct func_ext_config.
*/ */
if (IS_MF_SI(bp)) { if (!IS_MF_SD(bp)) {
u32 cfg = MF_CFG_RD(bp, func_ext_config[func].func_cfg); u32 cfg = MF_CFG_RD(bp, func_ext_config[func].func_cfg);
if (cfg & MACP_FUNC_CFG_FLAGS_ISCSI_OFFLOAD) { if (cfg & MACP_FUNC_CFG_FLAGS_ISCSI_OFFLOAD) {
val2 = MF_CFG_RD(bp, func_ext_config[func]. val2 = MF_CFG_RD(bp, func_ext_config[func].
...@@ -9641,16 +9648,25 @@ static void __devinit bnx2x_get_mac_hwinfo(struct bnx2x *bp) ...@@ -9641,16 +9648,25 @@ static void __devinit bnx2x_get_mac_hwinfo(struct bnx2x *bp)
} else } else
bp->flags |= NO_FCOE_FLAG; bp->flags |= NO_FCOE_FLAG;
} else { /* SD mode */ } else { /* SD MODE */
if (BNX2X_IS_MF_PROTOCOL_ISCSI(bp)) { if (IS_MF_STORAGE_SD(bp)) {
if (BNX2X_IS_MF_SD_PROTOCOL_ISCSI(bp)) {
/* use primary mac as iscsi mac */ /* use primary mac as iscsi mac */
memcpy(iscsi_mac, bp->dev->dev_addr, ETH_ALEN); memcpy(iscsi_mac, bp->dev->dev_addr,
/* Zero primary MAC configuration */ ETH_ALEN);
memset(bp->dev->dev_addr, 0, ETH_ALEN);
BNX2X_DEV_INFO("SD ISCSI MODE\n"); BNX2X_DEV_INFO("SD ISCSI MODE\n");
BNX2X_DEV_INFO("Read iSCSI MAC: %pM\n", BNX2X_DEV_INFO("Read iSCSI MAC: %pM\n",
iscsi_mac); iscsi_mac);
} else { /* FCoE */
memcpy(fip_mac, bp->dev->dev_addr,
ETH_ALEN);
BNX2X_DEV_INFO("SD FCoE MODE\n");
BNX2X_DEV_INFO("Read FIP MAC: %pM\n",
fip_mac);
}
/* Zero primary MAC configuration */
memset(bp->dev->dev_addr, 0, ETH_ALEN);
} }
} }
#endif #endif
...@@ -9679,10 +9695,6 @@ static void __devinit bnx2x_get_mac_hwinfo(struct bnx2x *bp) ...@@ -9679,10 +9695,6 @@ static void __devinit bnx2x_get_mac_hwinfo(struct bnx2x *bp)
memcpy(bp->dev->perm_addr, bp->dev->dev_addr, ETH_ALEN); memcpy(bp->dev->perm_addr, bp->dev->dev_addr, ETH_ALEN);
#ifdef BCM_CNIC #ifdef BCM_CNIC
/* Set the FCoE MAC in MF_SD mode */
if (!CHIP_IS_E1x(bp) && IS_MF_SD(bp))
memcpy(fip_mac, bp->dev->dev_addr, ETH_ALEN);
/* Disable iSCSI if MAC configuration is /* Disable iSCSI if MAC configuration is
* invalid. * invalid.
*/ */
...@@ -10092,7 +10104,7 @@ static int __devinit bnx2x_init_bp(struct bnx2x *bp) ...@@ -10092,7 +10104,7 @@ static int __devinit bnx2x_init_bp(struct bnx2x *bp)
bp->disable_tpa = disable_tpa; bp->disable_tpa = disable_tpa;
#ifdef BCM_CNIC #ifdef BCM_CNIC
bp->disable_tpa |= IS_MF_ISCSI_SD(bp); bp->disable_tpa |= IS_MF_STORAGE_SD(bp);
#endif #endif
/* Set TPA flags */ /* Set TPA flags */
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment