qlcnic: dcb code cleanup and refactoring.
authorSucheta Chakraborty <sucheta.chakraborty@qlogic.com>
Fri, 18 Oct 2013 16:22:33 +0000 (12:22 -0400)
committerDavid S. Miller <davem@davemloft.net>
Fri, 18 Oct 2013 17:42:19 +0000 (13:42 -0400)
o Move dcb specific function definitions to dcb files.
o Move dcb specific variables to qlcnic_dcb structure.

Signed-off-by: Sucheta Chakraborty <sucheta.chakraborty@qlogic.com>
Signed-off-by: Himanshu Madhani <himanshu.madhani@qlogic.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/ethernet/qlogic/qlcnic/qlcnic.h
drivers/net/ethernet/qlogic/qlcnic/qlcnic_83xx_hw.c
drivers/net/ethernet/qlogic/qlcnic/qlcnic_83xx_init.c
drivers/net/ethernet/qlogic/qlcnic/qlcnic_dcb.c
drivers/net/ethernet/qlogic/qlcnic/qlcnic_dcb.h
drivers/net/ethernet/qlogic/qlcnic/qlcnic_io.c
drivers/net/ethernet/qlogic/qlcnic/qlcnic_main.c
drivers/net/ethernet/qlogic/qlcnic/qlcnic_sriov_common.c

index a3c4379..728bb88 100644 (file)
@@ -961,8 +961,6 @@ struct qlcnic_ipaddr {
 #define __QLCNIC_SRIOV_CAPABLE         11
 #define __QLCNIC_MBX_POLL_ENABLE       12
 #define __QLCNIC_DIAG_MODE             13
-#define __QLCNIC_DCB_STATE             14
-#define __QLCNIC_DCB_IN_AEN            15
 
 #define QLCNIC_INTERRUPT_TEST          1
 #define QLCNIC_LOOPBACK_TEST           2
@@ -2116,98 +2114,4 @@ static inline bool qlcnic_sriov_vf_check(struct qlcnic_adapter *adapter)
 
        return status;
 }
-
-static inline int qlcnic_dcb_get_hw_capability(struct qlcnic_adapter *adapter)
-{
-       struct qlcnic_dcb *dcb = adapter->dcb;
-
-       if (dcb && dcb->ops->get_hw_capability)
-               return dcb->ops->get_hw_capability(adapter);
-
-       return 0;
-}
-
-static inline void qlcnic_dcb_free(struct qlcnic_adapter *adapter)
-{
-       struct qlcnic_dcb *dcb = adapter->dcb;
-
-       if (dcb && dcb->ops->free)
-               dcb->ops->free(adapter);
-}
-
-static inline int qlcnic_dcb_attach(struct qlcnic_adapter *adapter)
-{
-       struct qlcnic_dcb *dcb = adapter->dcb;
-
-       if (dcb && dcb->ops->attach)
-               return dcb->ops->attach(adapter);
-
-       return 0;
-}
-
-static inline int
-qlcnic_dcb_query_hw_capability(struct qlcnic_adapter *adapter, char *buf)
-{
-       struct qlcnic_dcb *dcb = adapter->dcb;
-
-       if (dcb && dcb->ops->query_hw_capability)
-               return dcb->ops->query_hw_capability(adapter, buf);
-
-       return 0;
-}
-
-static inline void qlcnic_dcb_get_info(struct qlcnic_adapter *adapter)
-{
-       struct qlcnic_dcb *dcb = adapter->dcb;
-
-       if (dcb && dcb->ops->get_info)
-               dcb->ops->get_info(adapter);
-}
-
-static inline int
-qlcnic_dcb_query_cee_param(struct qlcnic_adapter *adapter, char *buf, u8 type)
-{
-       struct qlcnic_dcb *dcb = adapter->dcb;
-
-       if (dcb && dcb->ops->query_cee_param)
-               return dcb->ops->query_cee_param(adapter, buf, type);
-
-       return 0;
-}
-
-static inline int qlcnic_dcb_get_cee_cfg(struct qlcnic_adapter *adapter)
-{
-       struct qlcnic_dcb *dcb = adapter->dcb;
-
-       if (dcb && dcb->ops->get_cee_cfg)
-               return dcb->ops->get_cee_cfg(adapter);
-
-       return 0;
-}
-
-static inline void
-qlcnic_dcb_register_aen(struct qlcnic_adapter *adapter, u8 flag)
-{
-       struct qlcnic_dcb *dcb = adapter->dcb;
-
-       if (dcb && dcb->ops->register_aen)
-               dcb->ops->register_aen(adapter, flag);
-}
-
-static inline void qlcnic_dcb_handle_aen(struct qlcnic_adapter *adapter,
-                                        void *msg)
-{
-       struct qlcnic_dcb *dcb = adapter->dcb;
-
-       if (dcb && dcb->ops->handle_aen)
-               dcb->ops->handle_aen(adapter, msg);
-}
-
-static inline void qlcnic_dcb_init_dcbnl_ops(struct qlcnic_adapter *adapter)
-{
-       struct qlcnic_dcb *dcb = adapter->dcb;
-
-       if (dcb && dcb->ops->init_dcbnl_ops)
-               dcb->ops->init_dcbnl_ops(adapter);
-}
 #endif                         /* __QLCNIC_H_ */
index 268fda6..a126bdf 100644 (file)
@@ -902,7 +902,7 @@ void __qlcnic_83xx_process_aen(struct qlcnic_adapter *adapter)
                         QLCNIC_MBX_RSP(event[0]));
                break;
        case QLCNIC_MBX_DCBX_CONFIG_CHANGE_EVENT:
-               qlcnic_dcb_handle_aen(adapter, (void *)&event[1]);
+               qlcnic_dcb_aen_handler(adapter->dcb, (void *)&event[1]);
                break;
        default:
                dev_dbg(&adapter->pdev->dev, "Unsupported AEN:0x%x.\n",
index d303fab..e2cd484 100644 (file)
@@ -636,7 +636,7 @@ int qlcnic_83xx_idc_reattach_driver(struct qlcnic_adapter *adapter)
        if (adapter->portnum == 0)
                qlcnic_set_drv_version(adapter);
 
-       qlcnic_dcb_get_info(adapter);
+       qlcnic_dcb_get_info(adapter->dcb);
        qlcnic_83xx_idc_attach_driver(adapter);
 
        return 0;
@@ -2174,6 +2174,7 @@ static int qlcnic_83xx_get_fw_info(struct qlcnic_adapter *adapter)
 int qlcnic_83xx_init(struct qlcnic_adapter *adapter, int pci_using_dac)
 {
        struct qlcnic_hardware_context *ahw = adapter->ahw;
+       struct qlcnic_dcb *dcb;
        int err = 0;
 
        ahw->msix_supported = !!qlcnic_use_msi_x;
@@ -2231,8 +2232,10 @@ int qlcnic_83xx_init(struct qlcnic_adapter *adapter, int pci_using_dac)
        if (err)
                goto disable_mbx_intr;
 
-       if (adapter->dcb && qlcnic_dcb_attach(adapter))
-               qlcnic_clear_dcb_ops(adapter);
+       dcb = adapter->dcb;
+
+       if (dcb && qlcnic_dcb_attach(dcb))
+               qlcnic_clear_dcb_ops(dcb);
 
        /* Periodically monitor device status */
        qlcnic_83xx_idc_poll_dev_state(&adapter->fw_work.work);
index d62d5ce..86bca7c 100644 (file)
@@ -57,22 +57,22 @@ static const struct dcbnl_rtnl_ops qlcnic_dcbnl_ops;
 static void qlcnic_dcb_aen_work(struct work_struct *);
 static void qlcnic_dcb_data_cee_param_map(struct qlcnic_adapter *);
 
-static inline void __qlcnic_init_dcbnl_ops(struct qlcnic_adapter *);
-static void __qlcnic_dcb_free(struct qlcnic_adapter *);
-static int __qlcnic_dcb_attach(struct qlcnic_adapter *);
-static int __qlcnic_dcb_query_hw_capability(struct qlcnic_adapter *, char *);
-static void __qlcnic_dcb_get_info(struct qlcnic_adapter *);
-
-static int qlcnic_82xx_dcb_get_hw_capability(struct qlcnic_adapter *);
-static int qlcnic_82xx_dcb_query_cee_param(struct qlcnic_adapter *, char *, u8);
-static int qlcnic_82xx_dcb_get_cee_cfg(struct qlcnic_adapter *);
-static void qlcnic_82xx_dcb_handle_aen(struct qlcnic_adapter *, void *);
-
-static int qlcnic_83xx_dcb_get_hw_capability(struct qlcnic_adapter *);
-static int qlcnic_83xx_dcb_query_cee_param(struct qlcnic_adapter *, char *, u8);
-static int qlcnic_83xx_dcb_get_cee_cfg(struct qlcnic_adapter *);
-static int qlcnic_83xx_dcb_register_aen(struct qlcnic_adapter *, bool);
-static void qlcnic_83xx_dcb_handle_aen(struct qlcnic_adapter *, void *);
+static inline void __qlcnic_init_dcbnl_ops(struct qlcnic_dcb *);
+static void __qlcnic_dcb_free(struct qlcnic_dcb *);
+static int __qlcnic_dcb_attach(struct qlcnic_dcb *);
+static int __qlcnic_dcb_query_hw_capability(struct qlcnic_dcb *, char *);
+static void __qlcnic_dcb_get_info(struct qlcnic_dcb *);
+
+static int qlcnic_82xx_dcb_get_hw_capability(struct qlcnic_dcb *);
+static int qlcnic_82xx_dcb_query_cee_param(struct qlcnic_dcb *, char *, u8);
+static int qlcnic_82xx_dcb_get_cee_cfg(struct qlcnic_dcb *);
+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 {
        bool    tsa_capability;
@@ -180,7 +180,7 @@ static struct qlcnic_dcb_ops qlcnic_83xx_dcb_ops = {
        .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,
-       .handle_aen             = qlcnic_83xx_dcb_handle_aen,
+       .aen_handler            = qlcnic_83xx_dcb_aen_handler,
 };
 
 static struct qlcnic_dcb_ops qlcnic_82xx_dcb_ops = {
@@ -193,7 +193,7 @@ static struct qlcnic_dcb_ops qlcnic_82xx_dcb_ops = {
        .get_hw_capability      = qlcnic_82xx_dcb_get_hw_capability,
        .query_cee_param        = qlcnic_82xx_dcb_query_cee_param,
        .get_cee_cfg            = qlcnic_82xx_dcb_get_cee_cfg,
-       .handle_aen             = qlcnic_82xx_dcb_handle_aen,
+       .aen_handler            = qlcnic_82xx_dcb_aen_handler,
 };
 
 static u8 qlcnic_dcb_get_num_app(struct qlcnic_adapter *adapter, u32 val)
@@ -242,10 +242,10 @@ static int qlcnic_dcb_prio_count(u8 up_tc_map)
        return j;
 }
 
-static inline void __qlcnic_init_dcbnl_ops(struct qlcnic_adapter *adapter)
+static inline void __qlcnic_init_dcbnl_ops(struct qlcnic_dcb *dcb)
 {
-       if (test_bit(__QLCNIC_DCB_STATE, &adapter->state))
-               adapter->netdev->dcbnl_ops = &qlcnic_dcbnl_ops;
+       if (test_bit(QLCNIC_DCB_STATE, &dcb->state))
+               dcb->adapter->netdev->dcbnl_ops = &qlcnic_dcbnl_ops;
 }
 
 static void qlcnic_set_dcb_ops(struct qlcnic_adapter *adapter)
@@ -256,7 +256,7 @@ static void qlcnic_set_dcb_ops(struct qlcnic_adapter *adapter)
                adapter->dcb->ops = &qlcnic_83xx_dcb_ops;
 }
 
-int __qlcnic_register_dcb(struct qlcnic_adapter *adapter)
+int qlcnic_register_dcb(struct qlcnic_adapter *adapter)
 {
        struct qlcnic_dcb *dcb;
 
@@ -267,20 +267,22 @@ int __qlcnic_register_dcb(struct qlcnic_adapter *adapter)
        adapter->dcb = dcb;
        dcb->adapter = adapter;
        qlcnic_set_dcb_ops(adapter);
+       dcb->state = 0;
 
        return 0;
 }
 
-static void __qlcnic_dcb_free(struct qlcnic_adapter *adapter)
+static void __qlcnic_dcb_free(struct qlcnic_dcb *dcb)
 {
-       struct qlcnic_dcb *dcb = adapter->dcb;
+       struct qlcnic_adapter *adapter;
 
        if (!dcb)
                return;
 
-       qlcnic_dcb_register_aen(adapter, 0);
+       adapter = dcb->adapter;
+       qlcnic_dcb_register_aen(dcb, 0);
 
-       while (test_bit(__QLCNIC_DCB_IN_AEN, &adapter->state))
+       while (test_bit(QLCNIC_DCB_AEN_MODE, &dcb->state))
                usleep_range(10000, 11000);
 
        cancel_delayed_work_sync(&dcb->aen_work);
@@ -298,23 +300,22 @@ static void __qlcnic_dcb_free(struct qlcnic_adapter *adapter)
        adapter->dcb = NULL;
 }
 
-static void __qlcnic_dcb_get_info(struct qlcnic_adapter *adapter)
+static void __qlcnic_dcb_get_info(struct qlcnic_dcb *dcb)
 {
-       qlcnic_dcb_get_hw_capability(adapter);
-       qlcnic_dcb_get_cee_cfg(adapter);
-       qlcnic_dcb_register_aen(adapter, 1);
+       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_adapter *adapter)
+static int __qlcnic_dcb_attach(struct qlcnic_dcb *dcb)
 {
-       struct qlcnic_dcb *dcb = adapter->dcb;
        int err = 0;
 
        INIT_DELAYED_WORK(&dcb->aen_work, qlcnic_dcb_aen_work);
 
        dcb->wq = create_singlethread_workqueue("qlcnic-dcb");
        if (!dcb->wq) {
-               dev_err(&adapter->pdev->dev,
+               dev_err(&dcb->adapter->pdev->dev,
                        "DCB workqueue allocation failed. DCB will be disabled\n");
                return -1;
        }
@@ -331,7 +332,7 @@ static int __qlcnic_dcb_attach(struct qlcnic_adapter *adapter)
                goto out_free_cfg;
        }
 
-       qlcnic_dcb_get_info(adapter);
+       qlcnic_dcb_get_info(dcb);
 
        return 0;
 out_free_cfg:
@@ -345,9 +346,9 @@ out_free_wq:
        return err;
 }
 
-static int __qlcnic_dcb_query_hw_capability(struct qlcnic_adapter *adapter,
-                                           char *buf)
+static int __qlcnic_dcb_query_hw_capability(struct qlcnic_dcb *dcb, char *buf)
 {
+       struct qlcnic_adapter *adapter = dcb->adapter;
        struct qlcnic_cmd_args cmd;
        u32 mbx_out;
        int err;
@@ -371,15 +372,15 @@ static int __qlcnic_dcb_query_hw_capability(struct qlcnic_adapter *adapter,
        return err;
 }
 
-static int __qlcnic_dcb_get_capability(struct qlcnic_adapter *adapter, u32 *val)
+static int __qlcnic_dcb_get_capability(struct qlcnic_dcb *dcb, u32 *val)
 {
-       struct qlcnic_dcb_capability *cap = &adapter->dcb->cfg->capability;
+       struct qlcnic_dcb_capability *cap = &dcb->cfg->capability;
        u32 mbx_out;
        int err;
 
        memset(cap, 0, sizeof(struct qlcnic_dcb_capability));
 
-       err = qlcnic_dcb_query_hw_capability(adapter, (char *)val);
+       err = qlcnic_dcb_query_hw_capability(dcb, (char *)val);
        if (err)
                return err;
 
@@ -397,21 +398,21 @@ static int __qlcnic_dcb_get_capability(struct qlcnic_adapter *adapter, u32 *val)
        if (cap->max_num_tc > QLC_DCB_MAX_TC ||
            cap->max_ets_tc > cap->max_num_tc ||
            cap->max_pfc_tc > cap->max_num_tc) {
-               dev_err(&adapter->pdev->dev, "Invalid DCB configuration\n");
+               dev_err(&dcb->adapter->pdev->dev, "Invalid DCB configuration\n");
                return -EINVAL;
        }
 
        return err;
 }
 
-static int qlcnic_82xx_dcb_get_hw_capability(struct qlcnic_adapter *adapter)
+static int qlcnic_82xx_dcb_get_hw_capability(struct qlcnic_dcb *dcb)
 {
-       struct qlcnic_dcb_cfg *cfg = adapter->dcb->cfg;
+       struct qlcnic_dcb_cfg *cfg = dcb->cfg;
        struct qlcnic_dcb_capability *cap;
        u32 mbx_out;
        int err;
 
-       err = __qlcnic_dcb_get_capability(adapter, &mbx_out);
+       err = __qlcnic_dcb_get_capability(dcb, &mbx_out);
        if (err)
                return err;
 
@@ -419,15 +420,16 @@ static int qlcnic_82xx_dcb_get_hw_capability(struct qlcnic_adapter *adapter)
        cap->dcb_capability = DCB_CAP_DCBX_VER_CEE | DCB_CAP_DCBX_LLD_MANAGED;
 
        if (cap->dcb_capability && cap->tsa_capability && cap->ets_capability)
-               set_bit(__QLCNIC_DCB_STATE, &adapter->state);
+               set_bit(QLCNIC_DCB_STATE, &dcb->state);
 
        return err;
 }
 
-static int qlcnic_82xx_dcb_query_cee_param(struct qlcnic_adapter *adapter,
+static int qlcnic_82xx_dcb_query_cee_param(struct qlcnic_dcb *dcb,
                                           char *buf, u8 type)
 {
        u16 size = sizeof(struct qlcnic_82xx_dcb_param_mbx_le);
+       struct qlcnic_adapter *adapter = dcb->adapter;
        struct qlcnic_82xx_dcb_param_mbx_le *prsp_le;
        struct device *dev = &adapter->pdev->dev;
        dma_addr_t cardrsp_phys_addr;
@@ -447,8 +449,7 @@ static int qlcnic_82xx_dcb_query_cee_param(struct qlcnic_adapter *adapter,
                return -EINVAL;
        }
 
-       addr = dma_alloc_coherent(&adapter->pdev->dev, size, &cardrsp_phys_addr,
-                                 GFP_KERNEL);
+       addr = dma_alloc_coherent(dev, size, &cardrsp_phys_addr, GFP_KERNEL);
        if (addr == NULL)
                return -ENOMEM;
 
@@ -488,72 +489,67 @@ out:
        qlcnic_free_mbx_args(&cmd);
 
 out_free_rsp:
-       dma_free_coherent(&adapter->pdev->dev, size, addr, cardrsp_phys_addr);
+       dma_free_coherent(dev, size, addr, cardrsp_phys_addr);
 
        return err;
 }
 
-static int qlcnic_82xx_dcb_get_cee_cfg(struct qlcnic_adapter *adapter)
+static int qlcnic_82xx_dcb_get_cee_cfg(struct qlcnic_dcb *dcb)
 {
        struct qlcnic_dcb_mbx_params *mbx;
        int err;
 
-       mbx = adapter->dcb->param;
+       mbx = dcb->param;
        if (!mbx)
                return 0;
 
-       err = qlcnic_dcb_query_cee_param(adapter, (char *)&mbx->type[0],
+       err = qlcnic_dcb_query_cee_param(dcb, (char *)&mbx->type[0],
                                         QLC_DCB_LOCAL_PARAM_FWID);
        if (err)
                return err;
 
-       err = qlcnic_dcb_query_cee_param(adapter, (char *)&mbx->type[1],
+       err = qlcnic_dcb_query_cee_param(dcb, (char *)&mbx->type[1],
                                         QLC_DCB_OPER_PARAM_FWID);
        if (err)
                return err;
 
-       err = qlcnic_dcb_query_cee_param(adapter, (char *)&mbx->type[2],
+       err = qlcnic_dcb_query_cee_param(dcb, (char *)&mbx->type[2],
                                         QLC_DCB_PEER_PARAM_FWID);
        if (err)
                return err;
 
        mbx->prio_tc_map = QLC_82XX_DCB_PRIO_TC_MAP;
 
-       qlcnic_dcb_data_cee_param_map(adapter);
+       qlcnic_dcb_data_cee_param_map(dcb->adapter);
 
        return err;
 }
 
 static void qlcnic_dcb_aen_work(struct work_struct *work)
 {
-       struct qlcnic_adapter *adapter;
        struct qlcnic_dcb *dcb;
 
        dcb = container_of(work, struct qlcnic_dcb, aen_work.work);
-       adapter = dcb->adapter;
 
-       qlcnic_dcb_get_cee_cfg(adapter);
-       clear_bit(__QLCNIC_DCB_IN_AEN, &adapter->state);
+       qlcnic_dcb_get_cee_cfg(dcb);
+       clear_bit(QLCNIC_DCB_AEN_MODE, &dcb->state);
 }
 
-static void qlcnic_82xx_dcb_handle_aen(struct qlcnic_adapter *adapter,
-                                      void *data)
+static void qlcnic_82xx_dcb_aen_handler(struct qlcnic_dcb *dcb, void *data)
 {
-       struct qlcnic_dcb *dcb = adapter->dcb;
-
-       if (test_and_set_bit(__QLCNIC_DCB_IN_AEN, &adapter->state))
+       if (test_and_set_bit(QLCNIC_DCB_AEN_MODE, &dcb->state))
                return;
 
        queue_delayed_work(dcb->wq, &dcb->aen_work, 0);
 }
 
-static int qlcnic_83xx_dcb_get_hw_capability(struct qlcnic_adapter *adapter)
+static int qlcnic_83xx_dcb_get_hw_capability(struct qlcnic_dcb *dcb)
 {
-       struct qlcnic_dcb_capability *cap = &adapter->dcb->cfg->capability;
+       struct qlcnic_dcb_capability *cap = &dcb->cfg->capability;
        u32 mbx_out;
        int err;
 
-       err = __qlcnic_dcb_get_capability(adapter, &mbx_out);
+       err = __qlcnic_dcb_get_capability(dcb, &mbx_out);
        if (err)
                return err;
 
@@ -565,14 +561,15 @@ static int qlcnic_83xx_dcb_get_hw_capability(struct qlcnic_adapter *adapter)
                cap->dcb_capability |= DCB_CAP_DCBX_LLD_MANAGED;
 
        if (cap->dcb_capability && cap->tsa_capability && cap->ets_capability)
-               set_bit(__QLCNIC_DCB_STATE, &adapter->state);
+               set_bit(QLCNIC_DCB_STATE, &dcb->state);
 
        return err;
 }
 
-static int qlcnic_83xx_dcb_query_cee_param(struct qlcnic_adapter *adapter,
+static int qlcnic_83xx_dcb_query_cee_param(struct qlcnic_dcb *dcb,
                                           char *buf, u8 idx)
 {
+       struct qlcnic_adapter *adapter = dcb->adapter;
        struct qlcnic_dcb_mbx_params mbx_out;
        int err, i, j, k, max_app, size;
        struct qlcnic_dcb_param *each;
@@ -632,24 +629,23 @@ out:
        return err;
 }
 
-static int qlcnic_83xx_dcb_get_cee_cfg(struct qlcnic_adapter *adapter)
+static int qlcnic_83xx_dcb_get_cee_cfg(struct qlcnic_dcb *dcb)
 {
-       struct qlcnic_dcb *dcb = adapter->dcb;
        int err;
 
-       err = qlcnic_dcb_query_cee_param(adapter, (char *)dcb->param, 0);
+       err = qlcnic_dcb_query_cee_param(dcb, (char *)dcb->param, 0);
        if (err)
                return err;
 
-       qlcnic_dcb_data_cee_param_map(adapter);
+       qlcnic_dcb_data_cee_param_map(dcb->adapter);
 
        return err;
 }
 
-static int qlcnic_83xx_dcb_register_aen(struct qlcnic_adapter *adapter,
-                                       bool flag)
+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;
 
@@ -669,19 +665,17 @@ static int qlcnic_83xx_dcb_register_aen(struct qlcnic_adapter *adapter,
        return err;
 }
 
-static void qlcnic_83xx_dcb_handle_aen(struct qlcnic_adapter *adapter,
-                                      void *data)
+static void qlcnic_83xx_dcb_aen_handler(struct qlcnic_dcb *dcb, void *data)
 {
-       struct qlcnic_dcb *dcb = adapter->dcb;
        u32 *val = data;
 
-       if (test_and_set_bit(__QLCNIC_DCB_IN_AEN, &adapter->state))
+       if (test_and_set_bit(QLCNIC_DCB_AEN_MODE, &dcb->state))
                return;
 
        if (*val & BIT_8)
-               set_bit(__QLCNIC_DCB_STATE, &adapter->state);
+               set_bit(QLCNIC_DCB_STATE, &dcb->state);
        else
-               clear_bit(__QLCNIC_DCB_STATE, &adapter->state);
+               clear_bit(QLCNIC_DCB_STATE, &dcb->state);
 
        queue_delayed_work(dcb->wq, &dcb->aen_work, 0);
 }
@@ -814,12 +808,12 @@ static u8 qlcnic_dcb_get_state(struct net_device *netdev)
 {
        struct qlcnic_adapter *adapter = netdev_priv(netdev);
 
-       return test_bit(__QLCNIC_DCB_STATE, &adapter->state);
+       return test_bit(QLCNIC_DCB_STATE, &adapter->dcb->state);
 }
 
 static void qlcnic_dcb_get_perm_hw_addr(struct net_device *netdev, u8 *addr)
 {
-       memcpy(addr, netdev->dev_addr, netdev->addr_len);
+       memcpy(addr, netdev->perm_addr, netdev->addr_len);
 }
 
 static void
@@ -834,7 +828,7 @@ qlcnic_dcb_get_pg_tc_cfg_tx(struct net_device *netdev, int tc, u8 *prio,
        type = &adapter->dcb->cfg->type[QLC_DCB_OPER_IDX];
        *prio = *pgid = *bw_per = *up_tc_map = 0;
 
-       if (!test_bit(__QLCNIC_DCB_STATE, &adapter->state) ||
+       if (!test_bit(QLCNIC_DCB_STATE, &adapter->dcb->state) ||
            !type->tc_param_valid)
                return;
 
@@ -870,7 +864,7 @@ static void qlcnic_dcb_get_pg_bwg_cfg_tx(struct net_device *netdev, int pgid,
        *bw_pct = 0;
        type = &adapter->dcb->cfg->type[QLC_DCB_OPER_IDX];
 
-       if (!test_bit(__QLCNIC_DCB_STATE, &adapter->state) ||
+       if (!test_bit(QLCNIC_DCB_STATE, &adapter->dcb->state) ||
            !type->tc_param_valid)
                return;
 
@@ -896,7 +890,7 @@ static void qlcnic_dcb_get_pfc_cfg(struct net_device *netdev, int prio,
        *setting = 0;
        type = &adapter->dcb->cfg->type[QLC_DCB_OPER_IDX];
 
-       if (!test_bit(__QLCNIC_DCB_STATE, &adapter->state) ||
+       if (!test_bit(QLCNIC_DCB_STATE, &adapter->dcb->state) ||
            !type->pfc_mode_enable)
                return;
 
@@ -915,7 +909,7 @@ static u8 qlcnic_dcb_get_capability(struct net_device *netdev, int capid,
 {
        struct qlcnic_adapter *adapter = netdev_priv(netdev);
 
-       if (!test_bit(__QLCNIC_DCB_STATE, &adapter->state))
+       if (!test_bit(QLCNIC_DCB_STATE, &adapter->dcb->state))
                return 0;
 
        switch (capid) {
@@ -944,7 +938,7 @@ static int qlcnic_dcb_get_num_tcs(struct net_device *netdev, int attr, u8 *num)
        struct qlcnic_adapter *adapter = netdev_priv(netdev);
        struct qlcnic_dcb_cfg *cfg = adapter->dcb->cfg;
 
-       if (!test_bit(__QLCNIC_DCB_STATE, &adapter->state))
+       if (!test_bit(QLCNIC_DCB_STATE, &adapter->dcb->state))
                return -EINVAL;
 
        switch (attr) {
@@ -967,7 +961,7 @@ static u8 qlcnic_dcb_get_app(struct net_device *netdev, u8 idtype, u16 id)
                                .protocol = id,
                             };
 
-       if (!test_bit(__QLCNIC_DCB_STATE, &adapter->state))
+       if (!test_bit(QLCNIC_DCB_STATE, &adapter->dcb->state))
                return 0;
 
        return dcb_getapp(netdev, &app);
@@ -978,7 +972,7 @@ static u8 qlcnic_dcb_get_pfc_state(struct net_device *netdev)
        struct qlcnic_adapter *adapter = netdev_priv(netdev);
        struct qlcnic_dcb *dcb = adapter->dcb;
 
-       if (!test_bit(__QLCNIC_DCB_STATE, &adapter->state))
+       if (!test_bit(QLCNIC_DCB_STATE, &dcb->state))
                return 0;
 
        return dcb->cfg->type[QLC_DCB_OPER_IDX].pfc_mode_enable;
@@ -989,7 +983,7 @@ static u8 qlcnic_dcb_get_dcbx(struct net_device *netdev)
        struct qlcnic_adapter *adapter = netdev_priv(netdev);
        struct qlcnic_dcb_cfg *cfg = adapter->dcb->cfg;
 
-       if (!test_bit(__QLCNIC_DCB_STATE, &adapter->state))
+       if (!test_bit(QLCNIC_DCB_STATE, &adapter->dcb->state))
                return 0;
 
        return cfg->capability.dcb_capability;
@@ -1000,7 +994,7 @@ static u8 qlcnic_dcb_get_feat_cfg(struct net_device *netdev, int fid, u8 *flag)
        struct qlcnic_adapter *adapter = netdev_priv(netdev);
        struct qlcnic_dcb_cee *type;
 
-       if (!test_bit(__QLCNIC_DCB_STATE, &adapter->state))
+       if (!test_bit(QLCNIC_DCB_STATE, &adapter->dcb->state))
                return 1;
 
        type = &adapter->dcb->cfg->type[QLC_DCB_OPER_IDX];
@@ -1055,7 +1049,7 @@ static int qlcnic_dcb_peer_app_info(struct net_device *netdev,
 
        *app_count = 0;
 
-       if (!test_bit(__QLCNIC_DCB_STATE, &adapter->state))
+       if (!test_bit(QLCNIC_DCB_STATE, &adapter->dcb->state))
                return 0;
 
        peer = &adapter->dcb->cfg->type[QLC_DCB_PEER_IDX];
@@ -1076,7 +1070,7 @@ static int qlcnic_dcb_peer_app_table(struct net_device *netdev,
        struct qlcnic_dcb_app *app;
        int i, j;
 
-       if (!test_bit(__QLCNIC_DCB_STATE, &adapter->state))
+       if (!test_bit(QLCNIC_DCB_STATE, &adapter->dcb->state))
                return 0;
 
        peer = &adapter->dcb->cfg->type[QLC_DCB_PEER_IDX];
@@ -1101,7 +1095,7 @@ static int qlcnic_dcb_cee_peer_get_pg(struct net_device *netdev,
        struct qlcnic_dcb_cee *peer;
        u8 i, j, k, map;
 
-       if (!test_bit(__QLCNIC_DCB_STATE, &adapter->state))
+       if (!test_bit(QLCNIC_DCB_STATE, &adapter->dcb->state))
                return 0;
 
        peer = &adapter->dcb->cfg->type[QLC_DCB_PEER_IDX];
@@ -1136,7 +1130,7 @@ static int qlcnic_dcb_cee_peer_get_pfc(struct net_device *netdev,
 
        pfc->pfc_en = 0;
 
-       if (!test_bit(__QLCNIC_DCB_STATE, &adapter->state))
+       if (!test_bit(QLCNIC_DCB_STATE, &adapter->dcb->state))
                return 0;
 
        peer = &cfg->type[QLC_DCB_PEER_IDX];
index b87ce9f..c04ae0c 100644 (file)
@@ -8,26 +8,29 @@
 #ifndef __QLCNIC_DCBX_H
 #define __QLCNIC_DCBX_H
 
-void qlcnic_clear_dcb_ops(struct qlcnic_adapter *);
+#define QLCNIC_DCB_STATE       0
+#define QLCNIC_DCB_AEN_MODE    1
 
 #ifdef CONFIG_QLCNIC_DCB
-int __qlcnic_register_dcb(struct qlcnic_adapter *);
+int qlcnic_register_dcb(struct qlcnic_adapter *);
 #else
-static inline int __qlcnic_register_dcb(struct qlcnic_adapter *adapter)
+static inline int qlcnic_register_dcb(struct qlcnic_adapter *adapter)
 { return 0; }
 #endif
 
+struct qlcnic_dcb;
+
 struct qlcnic_dcb_ops {
-       void (*init_dcbnl_ops) (struct qlcnic_adapter *);
-       void (*free) (struct qlcnic_adapter *);
-       int (*attach) (struct qlcnic_adapter *);
-       int (*query_hw_capability) (struct qlcnic_adapter *, char *);
-       int (*get_hw_capability) (struct qlcnic_adapter *);
-       void (*get_info) (struct qlcnic_adapter *);
-       int (*query_cee_param) (struct qlcnic_adapter *, char *, u8);
-       int (*get_cee_cfg) (struct qlcnic_adapter *);
-       int (*register_aen) (struct qlcnic_adapter *, bool);
-       void (*handle_aen) (struct qlcnic_adapter *, void *);
+       int (*query_hw_capability) (struct qlcnic_dcb *, char *);
+       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 *);
+       int (*attach) (struct qlcnic_dcb *);
+       void (*free) (struct qlcnic_dcb *);
 };
 
 struct qlcnic_dcb {
@@ -37,5 +40,85 @@ struct qlcnic_dcb {
        struct workqueue_struct         *wq;
        struct qlcnic_dcb_ops           *ops;
        struct qlcnic_dcb_cfg           *cfg;
+       unsigned long                   state;
 };
+
+static inline void qlcnic_clear_dcb_ops(struct qlcnic_dcb *dcb)
+{
+       kfree(dcb);
+       dcb = NULL;
+}
+
+static inline int qlcnic_dcb_get_hw_capability(struct qlcnic_dcb *dcb)
+{
+       if (dcb && dcb->ops->get_hw_capability)
+               return dcb->ops->get_hw_capability(dcb);
+
+       return 0;
+}
+
+static inline void qlcnic_dcb_free(struct qlcnic_dcb *dcb)
+{
+       if (dcb && dcb->ops->free)
+               dcb->ops->free(dcb);
+}
+
+static inline int qlcnic_dcb_attach(struct qlcnic_dcb *dcb)
+{
+       if (dcb && dcb->ops->attach)
+               return dcb->ops->attach(dcb);
+
+       return 0;
+}
+
+static inline int
+qlcnic_dcb_query_hw_capability(struct qlcnic_dcb *dcb, char *buf)
+{
+       if (dcb && dcb->ops->query_hw_capability)
+               return dcb->ops->query_hw_capability(dcb, buf);
+
+       return 0;
+}
+
+static inline void qlcnic_dcb_get_info(struct qlcnic_dcb *dcb)
+{
+       if (dcb && dcb->ops->get_info)
+               dcb->ops->get_info(dcb);
+}
+
+static inline int
+qlcnic_dcb_query_cee_param(struct qlcnic_dcb *dcb, char *buf, u8 type)
+{
+       if (dcb && dcb->ops->query_cee_param)
+               return dcb->ops->query_cee_param(dcb, buf, type);
+
+       return 0;
+}
+
+static inline int qlcnic_dcb_get_cee_cfg(struct qlcnic_dcb *dcb)
+{
+       if (dcb && dcb->ops->get_cee_cfg)
+               return dcb->ops->get_cee_cfg(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)
+               dcb->ops->aen_handler(dcb, msg);
+}
+
+static inline void qlcnic_dcb_init_dcbnl_ops(struct qlcnic_dcb *dcb)
+{
+       if (dcb && dcb->ops->init_dcbnl_ops)
+               dcb->ops->init_dcbnl_ops(dcb);
+}
 #endif
index 11b4bb8..897627d 100644 (file)
@@ -1011,7 +1011,7 @@ static void qlcnic_handle_fw_message(int desc_cnt, int index,
                }
                break;
        case QLCNIC_C2H_OPCODE_GET_DCB_AEN:
-               qlcnic_dcb_handle_aen(adapter, (void *)&msg);
+               qlcnic_dcb_aen_handler(adapter->dcb, (void *)&msg);
                break;
        default:
                break;
index 725d76f..0274832 100644 (file)
@@ -2071,7 +2071,7 @@ qlcnic_setup_netdev(struct qlcnic_adapter *adapter, struct net_device *netdev,
                return err;
        }
 
-       qlcnic_dcb_init_dcbnl_ops(adapter);
+       qlcnic_dcb_init_dcbnl_ops(adapter->dcb);
 
        return 0;
 }
@@ -2166,17 +2166,6 @@ void qlcnic_set_drv_version(struct qlcnic_adapter *adapter)
                qlcnic_fw_cmd_set_drv_version(adapter, fw_cmd);
 }
 
-static int qlcnic_register_dcb(struct qlcnic_adapter *adapter)
-{
-       return __qlcnic_register_dcb(adapter);
-}
-
-void qlcnic_clear_dcb_ops(struct qlcnic_adapter *adapter)
-{
-       kfree(adapter->dcb);
-       adapter->dcb = NULL;
-}
-
 static int
 qlcnic_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
 {
@@ -2185,6 +2174,7 @@ qlcnic_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
        struct qlcnic_hardware_context *ahw;
        int err, pci_using_dac = -1;
        char board_name[QLCNIC_MAX_BOARD_NAME_LEN + 19]; /* MAC + ": " + name */
+       struct qlcnic_dcb *dcb;
 
        if (pdev->is_virtfn)
                return -ENODEV;
@@ -2305,8 +2295,10 @@ qlcnic_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
 
                adapter->flags |= QLCNIC_NEED_FLR;
 
-               if (adapter->dcb && qlcnic_dcb_attach(adapter))
-                       qlcnic_clear_dcb_ops(adapter);
+               dcb = adapter->dcb;
+
+               if (dcb && qlcnic_dcb_attach(dcb))
+                       qlcnic_clear_dcb_ops(dcb);
 
        } else if (qlcnic_83xx_check(adapter)) {
                adapter->max_drv_tx_rings = 1;
@@ -2451,7 +2443,7 @@ static void qlcnic_remove(struct pci_dev *pdev)
        qlcnic_cancel_idc_work(adapter);
        ahw = adapter->ahw;
 
-       qlcnic_dcb_free(adapter);
+       qlcnic_dcb_free(adapter->dcb);
 
        unregister_netdev(netdev);
        qlcnic_sriov_cleanup(adapter);
@@ -3329,7 +3321,7 @@ qlcnic_attach_work(struct work_struct *work)
                return;
        }
 attach:
-       qlcnic_dcb_get_info(adapter);
+       qlcnic_dcb_get_info(adapter->dcb);
 
        if (netif_running(netdev)) {
                if (qlcnic_up(adapter, netdev))
index 392b9bd..8b96e29 100644 (file)
@@ -500,6 +500,7 @@ static int qlcnic_sriov_vf_init_driver(struct qlcnic_adapter *adapter)
 static int qlcnic_sriov_setup_vf(struct qlcnic_adapter *adapter,
                                 int pci_using_dac)
 {
+       struct qlcnic_dcb *dcb;
        int err;
 
        INIT_LIST_HEAD(&adapter->vf_mc_list);
@@ -533,8 +534,10 @@ static int qlcnic_sriov_setup_vf(struct qlcnic_adapter *adapter,
        if (err)
                goto err_out_send_channel_term;
 
-       if (adapter->dcb && qlcnic_dcb_attach(adapter))
-               qlcnic_clear_dcb_ops(adapter);
+       dcb = adapter->dcb;
+
+       if (dcb && qlcnic_dcb_attach(dcb))
+               qlcnic_clear_dcb_ops(dcb);
 
        err = qlcnic_setup_netdev(adapter, adapter->netdev, pci_using_dac);
        if (err)
@@ -1577,7 +1580,7 @@ static int qlcnic_sriov_vf_reinit_driver(struct qlcnic_adapter *adapter)
        if (err)
                goto err_out_term_channel;
 
-       qlcnic_dcb_get_info(adapter);
+       qlcnic_dcb_get_info(adapter->dcb);
 
        return 0;