mirror of
https://github.com/edk2-porting/linux-next.git
synced 2025-01-22 20:43:56 +08:00
qlcnic: Issue INIT_NIC command only once.
o DCB AEN registration was reissuing INIT_NIC command. Instead, club all options of INIT NIC command and issue this command only once. Signed-off-by: Sucheta Chakraborty <sucheta.chakraborty@qlogic.com> Signed-off-by: Manish Chopra <manish.chopra@qlogic.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
3c44bba1d2
commit
3720bf796b
@ -68,7 +68,7 @@ static const struct qlcnic_mailbox_metadata qlcnic_83xx_mbx_tbl[] = {
|
||||
{QLCNIC_CMD_CONFIG_VPORT, 4, 4},
|
||||
{QLCNIC_CMD_BC_EVENT_SETUP, 2, 1},
|
||||
{QLCNIC_CMD_DCB_QUERY_CAP, 1, 2},
|
||||
{QLCNIC_CMD_DCB_QUERY_PARAM, 2, 50},
|
||||
{QLCNIC_CMD_DCB_QUERY_PARAM, 1, 50},
|
||||
};
|
||||
|
||||
const u32 qlcnic_83xx_ext_reg_tbl[] = {
|
||||
@ -1542,6 +1542,10 @@ void qlcnic_83xx_register_nic_idc_func(struct qlcnic_adapter *adapter,
|
||||
|
||||
cmd.req.arg[1] = BIT_0 | BIT_31;
|
||||
}
|
||||
|
||||
if (adapter->dcb)
|
||||
cmd.req.arg[1] |= QLC_REGISTER_DCB_AEN;
|
||||
|
||||
status = qlcnic_issue_cmd(adapter, &cmd);
|
||||
if (status)
|
||||
dev_err(&adapter->pdev->dev,
|
||||
|
@ -518,6 +518,9 @@ enum qlc_83xx_ext_regs {
|
||||
QLC_83XX_ASIC_TEMP,
|
||||
};
|
||||
|
||||
/* Initialize/Stop NIC command bit definitions */
|
||||
#define QLC_REGISTER_DCB_AEN BIT_1
|
||||
|
||||
/* 83xx funcitons */
|
||||
int qlcnic_83xx_get_fw_version(struct qlcnic_adapter *);
|
||||
int qlcnic_83xx_issue_cmd(struct qlcnic_adapter *, struct qlcnic_cmd_args *);
|
||||
|
@ -15,7 +15,6 @@
|
||||
|
||||
#define QLC_DCB_GET_MAP(V) (1 << V)
|
||||
|
||||
#define QLC_DCB_AEN_BIT 0x2
|
||||
#define QLC_DCB_FW_VER 0x2
|
||||
#define QLC_DCB_MAX_TC 0x8
|
||||
#define QLC_DCB_MAX_APP 0x8
|
||||
@ -71,7 +70,6 @@ static void qlcnic_82xx_dcb_aen_handler(struct qlcnic_dcb *, void *);
|
||||
static int qlcnic_83xx_dcb_get_hw_capability(struct qlcnic_dcb *);
|
||||
static int qlcnic_83xx_dcb_query_cee_param(struct qlcnic_dcb *, char *, u8);
|
||||
static int qlcnic_83xx_dcb_get_cee_cfg(struct qlcnic_dcb *);
|
||||
static int qlcnic_83xx_dcb_register_aen(struct qlcnic_dcb *, bool);
|
||||
static void qlcnic_83xx_dcb_aen_handler(struct qlcnic_dcb *, void *);
|
||||
|
||||
struct qlcnic_dcb_capability {
|
||||
@ -179,7 +177,6 @@ static struct qlcnic_dcb_ops qlcnic_83xx_dcb_ops = {
|
||||
.get_hw_capability = qlcnic_83xx_dcb_get_hw_capability,
|
||||
.query_cee_param = qlcnic_83xx_dcb_query_cee_param,
|
||||
.get_cee_cfg = qlcnic_83xx_dcb_get_cee_cfg,
|
||||
.register_aen = qlcnic_83xx_dcb_register_aen,
|
||||
.aen_handler = qlcnic_83xx_dcb_aen_handler,
|
||||
};
|
||||
|
||||
@ -283,7 +280,6 @@ static void __qlcnic_dcb_free(struct qlcnic_dcb *dcb)
|
||||
return;
|
||||
|
||||
adapter = dcb->adapter;
|
||||
qlcnic_dcb_register_aen(dcb, 0);
|
||||
|
||||
while (test_bit(QLCNIC_DCB_AEN_MODE, &dcb->state))
|
||||
usleep_range(10000, 11000);
|
||||
@ -307,7 +303,6 @@ static void __qlcnic_dcb_get_info(struct qlcnic_dcb *dcb)
|
||||
{
|
||||
qlcnic_dcb_get_hw_capability(dcb);
|
||||
qlcnic_dcb_get_cee_cfg(dcb);
|
||||
qlcnic_dcb_register_aen(dcb, 1);
|
||||
}
|
||||
|
||||
static int __qlcnic_dcb_attach(struct qlcnic_dcb *dcb)
|
||||
@ -645,29 +640,6 @@ static int qlcnic_83xx_dcb_get_cee_cfg(struct qlcnic_dcb *dcb)
|
||||
return err;
|
||||
}
|
||||
|
||||
static int qlcnic_83xx_dcb_register_aen(struct qlcnic_dcb *dcb, bool flag)
|
||||
{
|
||||
u8 val = (flag ? QLCNIC_CMD_INIT_NIC_FUNC : QLCNIC_CMD_STOP_NIC_FUNC);
|
||||
struct qlcnic_adapter *adapter = dcb->adapter;
|
||||
struct qlcnic_cmd_args cmd;
|
||||
int err;
|
||||
|
||||
err = qlcnic_alloc_mbx_args(&cmd, adapter, val);
|
||||
if (err)
|
||||
return err;
|
||||
|
||||
cmd.req.arg[1] = QLC_DCB_AEN_BIT;
|
||||
|
||||
err = qlcnic_issue_cmd(adapter, &cmd);
|
||||
if (err)
|
||||
dev_err(&adapter->pdev->dev, "Failed to %s DCBX AEN, err %d\n",
|
||||
(flag ? "register" : "unregister"), err);
|
||||
|
||||
qlcnic_free_mbx_args(&cmd);
|
||||
|
||||
return err;
|
||||
}
|
||||
|
||||
static void qlcnic_83xx_dcb_aen_handler(struct qlcnic_dcb *dcb, void *data)
|
||||
{
|
||||
u32 *val = data;
|
||||
|
@ -25,7 +25,6 @@ struct qlcnic_dcb_ops {
|
||||
int (*get_hw_capability) (struct qlcnic_dcb *);
|
||||
int (*query_cee_param) (struct qlcnic_dcb *, char *, u8);
|
||||
void (*init_dcbnl_ops) (struct qlcnic_dcb *);
|
||||
int (*register_aen) (struct qlcnic_dcb *, bool);
|
||||
void (*aen_handler) (struct qlcnic_dcb *, void *);
|
||||
int (*get_cee_cfg) (struct qlcnic_dcb *);
|
||||
void (*get_info) (struct qlcnic_dcb *);
|
||||
@ -103,13 +102,6 @@ static inline int qlcnic_dcb_get_cee_cfg(struct qlcnic_dcb *dcb)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static inline void
|
||||
qlcnic_dcb_register_aen(struct qlcnic_dcb *dcb, u8 flag)
|
||||
{
|
||||
if (dcb && dcb->ops->register_aen)
|
||||
dcb->ops->register_aen(dcb, flag);
|
||||
}
|
||||
|
||||
static inline void qlcnic_dcb_aen_handler(struct qlcnic_dcb *dcb, void *msg)
|
||||
{
|
||||
if (dcb && dcb->ops->aen_handler)
|
||||
|
@ -2497,8 +2497,6 @@ static void qlcnic_remove(struct pci_dev *pdev)
|
||||
qlcnic_cancel_idc_work(adapter);
|
||||
ahw = adapter->ahw;
|
||||
|
||||
qlcnic_dcb_free(adapter->dcb);
|
||||
|
||||
unregister_netdev(netdev);
|
||||
qlcnic_sriov_cleanup(adapter);
|
||||
|
||||
@ -2511,6 +2509,8 @@ static void qlcnic_remove(struct pci_dev *pdev)
|
||||
kfree(ahw->fw_info);
|
||||
}
|
||||
|
||||
qlcnic_dcb_free(adapter->dcb);
|
||||
|
||||
qlcnic_detach(adapter);
|
||||
|
||||
if (adapter->npars != NULL)
|
||||
|
Loading…
Reference in New Issue
Block a user