bnx2x: Implementation for netdev->ndo_fcoe_get_wwn
Signed-off-by: Vladislav Zolotarov <vladz@broadcom.com> Signed-off-by: Eilon Greenstein <eilong@broadcom.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
7ad711b49e
commit
bf61ee1467
@ -3327,6 +3327,29 @@ int bnx2x_get_link_cfg_idx(struct bnx2x *bp)
|
|||||||
return LINK_CONFIG_IDX(sel_phy_idx);
|
return LINK_CONFIG_IDX(sel_phy_idx);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if defined(NETDEV_FCOE_WWNN) && defined(BCM_CNIC)
|
||||||
|
int bnx2x_fcoe_get_wwn(struct net_device *dev, u64 *wwn, int type)
|
||||||
|
{
|
||||||
|
struct bnx2x *bp = netdev_priv(dev);
|
||||||
|
struct cnic_eth_dev *cp = &bp->cnic_eth_dev;
|
||||||
|
|
||||||
|
switch (type) {
|
||||||
|
case NETDEV_FCOE_WWNN:
|
||||||
|
*wwn = HILO_U64(cp->fcoe_wwn_node_name_hi,
|
||||||
|
cp->fcoe_wwn_node_name_lo);
|
||||||
|
break;
|
||||||
|
case NETDEV_FCOE_WWPN:
|
||||||
|
*wwn = HILO_U64(cp->fcoe_wwn_port_name_hi,
|
||||||
|
cp->fcoe_wwn_port_name_lo);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
return -EINVAL;
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
/* called with rtnl_lock */
|
/* called with rtnl_lock */
|
||||||
int bnx2x_change_mtu(struct net_device *dev, int new_mtu)
|
int bnx2x_change_mtu(struct net_device *dev, int new_mtu)
|
||||||
{
|
{
|
||||||
|
@ -522,6 +522,17 @@ void bnx2x_free_mem_bp(struct bnx2x *bp);
|
|||||||
*/
|
*/
|
||||||
int bnx2x_change_mtu(struct net_device *dev, int new_mtu);
|
int bnx2x_change_mtu(struct net_device *dev, int new_mtu);
|
||||||
|
|
||||||
|
#if defined(BCM_CNIC) && (defined(CONFIG_FCOE) || defined(CONFIG_FCOE_MODULE))
|
||||||
|
/**
|
||||||
|
* bnx2x_fcoe_get_wwn - return the requested WWN value for this port
|
||||||
|
*
|
||||||
|
* @dev: net_device
|
||||||
|
* @wwn: output buffer
|
||||||
|
* @type: WWN type: NETDEV_FCOE_WWNN (node) or NETDEV_FCOE_WWPN (port)
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
int bnx2x_fcoe_get_wwn(struct net_device *dev, u64 *wwn, int type);
|
||||||
|
#endif
|
||||||
u32 bnx2x_fix_features(struct net_device *dev, u32 features);
|
u32 bnx2x_fix_features(struct net_device *dev, u32 features);
|
||||||
int bnx2x_set_features(struct net_device *dev, u32 features);
|
int bnx2x_set_features(struct net_device *dev, u32 features);
|
||||||
|
|
||||||
|
@ -9104,10 +9104,13 @@ static void __devinit bnx2x_get_port_hwinfo(struct bnx2x *bp)
|
|||||||
#ifdef BCM_CNIC
|
#ifdef BCM_CNIC
|
||||||
static void __devinit bnx2x_get_cnic_info(struct bnx2x *bp)
|
static void __devinit bnx2x_get_cnic_info(struct bnx2x *bp)
|
||||||
{
|
{
|
||||||
|
int port = BP_PORT(bp);
|
||||||
|
int func = BP_ABS_FUNC(bp);
|
||||||
|
|
||||||
u32 max_iscsi_conn = FW_ENCODE_32BIT_PATTERN ^ SHMEM_RD(bp,
|
u32 max_iscsi_conn = FW_ENCODE_32BIT_PATTERN ^ SHMEM_RD(bp,
|
||||||
drv_lic_key[BP_PORT(bp)].max_iscsi_conn);
|
drv_lic_key[port].max_iscsi_conn);
|
||||||
u32 max_fcoe_conn = FW_ENCODE_32BIT_PATTERN ^ SHMEM_RD(bp,
|
u32 max_fcoe_conn = FW_ENCODE_32BIT_PATTERN ^ SHMEM_RD(bp,
|
||||||
drv_lic_key[BP_PORT(bp)].max_fcoe_conn);
|
drv_lic_key[port].max_fcoe_conn);
|
||||||
|
|
||||||
/* Get the number of maximum allowed iSCSI and FCoE connections */
|
/* Get the number of maximum allowed iSCSI and FCoE connections */
|
||||||
bp->cnic_eth_dev.max_iscsi_conn =
|
bp->cnic_eth_dev.max_iscsi_conn =
|
||||||
@ -9118,11 +9121,59 @@ static void __devinit bnx2x_get_cnic_info(struct bnx2x *bp)
|
|||||||
(max_fcoe_conn & BNX2X_MAX_FCOE_INIT_CONN_MASK) >>
|
(max_fcoe_conn & BNX2X_MAX_FCOE_INIT_CONN_MASK) >>
|
||||||
BNX2X_MAX_FCOE_INIT_CONN_SHIFT;
|
BNX2X_MAX_FCOE_INIT_CONN_SHIFT;
|
||||||
|
|
||||||
|
/* Read the WWN: */
|
||||||
|
if (!IS_MF(bp)) {
|
||||||
|
/* Port info */
|
||||||
|
bp->cnic_eth_dev.fcoe_wwn_port_name_hi =
|
||||||
|
SHMEM_RD(bp,
|
||||||
|
dev_info.port_hw_config[port].
|
||||||
|
fcoe_wwn_port_name_upper);
|
||||||
|
bp->cnic_eth_dev.fcoe_wwn_port_name_lo =
|
||||||
|
SHMEM_RD(bp,
|
||||||
|
dev_info.port_hw_config[port].
|
||||||
|
fcoe_wwn_port_name_lower);
|
||||||
|
|
||||||
|
/* Node info */
|
||||||
|
bp->cnic_eth_dev.fcoe_wwn_node_name_hi =
|
||||||
|
SHMEM_RD(bp,
|
||||||
|
dev_info.port_hw_config[port].
|
||||||
|
fcoe_wwn_node_name_upper);
|
||||||
|
bp->cnic_eth_dev.fcoe_wwn_node_name_lo =
|
||||||
|
SHMEM_RD(bp,
|
||||||
|
dev_info.port_hw_config[port].
|
||||||
|
fcoe_wwn_node_name_lower);
|
||||||
|
} else if (!IS_MF_SD(bp)) {
|
||||||
|
u32 cfg = MF_CFG_RD(bp, func_ext_config[func].func_cfg);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Read the WWN info only if the FCoE feature is enabled for
|
||||||
|
* this function.
|
||||||
|
*/
|
||||||
|
if (cfg & MACP_FUNC_CFG_FLAGS_FCOE_OFFLOAD) {
|
||||||
|
/* 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);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
BNX2X_DEV_INFO("max_iscsi_conn 0x%x max_fcoe_conn 0x%x\n",
|
BNX2X_DEV_INFO("max_iscsi_conn 0x%x max_fcoe_conn 0x%x\n",
|
||||||
bp->cnic_eth_dev.max_iscsi_conn,
|
bp->cnic_eth_dev.max_iscsi_conn,
|
||||||
bp->cnic_eth_dev.max_fcoe_conn);
|
bp->cnic_eth_dev.max_fcoe_conn);
|
||||||
|
|
||||||
/* If mamimum allowed number of connections is zero -
|
/*
|
||||||
|
* If maximum allowed number of connections is zero -
|
||||||
* disable the feature.
|
* disable the feature.
|
||||||
*/
|
*/
|
||||||
if (!bp->cnic_eth_dev.max_iscsi_conn)
|
if (!bp->cnic_eth_dev.max_iscsi_conn)
|
||||||
@ -9993,6 +10044,9 @@ static const struct net_device_ops bnx2x_netdev_ops = {
|
|||||||
#endif
|
#endif
|
||||||
.ndo_setup_tc = bnx2x_setup_tc,
|
.ndo_setup_tc = bnx2x_setup_tc,
|
||||||
|
|
||||||
|
#if defined(NETDEV_FCOE_WWNN) && defined(BCM_CNIC)
|
||||||
|
.ndo_fcoe_get_wwn = bnx2x_fcoe_get_wwn,
|
||||||
|
#endif
|
||||||
};
|
};
|
||||||
|
|
||||||
static inline int bnx2x_set_coherency_mask(struct bnx2x *bp)
|
static inline int bnx2x_set_coherency_mask(struct bnx2x *bp)
|
||||||
|
@ -181,6 +181,11 @@ struct cnic_eth_dev {
|
|||||||
u32 max_fcoe_conn;
|
u32 max_fcoe_conn;
|
||||||
u32 max_rdma_conn;
|
u32 max_rdma_conn;
|
||||||
u32 fcoe_init_cid;
|
u32 fcoe_init_cid;
|
||||||
|
u32 fcoe_wwn_port_name_hi;
|
||||||
|
u32 fcoe_wwn_port_name_lo;
|
||||||
|
u32 fcoe_wwn_node_name_hi;
|
||||||
|
u32 fcoe_wwn_node_name_lo;
|
||||||
|
|
||||||
u16 iscsi_l2_client_id;
|
u16 iscsi_l2_client_id;
|
||||||
u16 iscsi_l2_cid;
|
u16 iscsi_l2_cid;
|
||||||
u8 iscsi_mac[ETH_ALEN];
|
u8 iscsi_mac[ETH_ALEN];
|
||||||
|
Loading…
Reference in New Issue
Block a user