@@ -2194,6 +2194,19 @@ static int qlcnic_83xx_get_fw_info(struct qlcnic_adapter *adapter)
return err;
}
+static void qlcnic_83xx_get_nic_capability(struct qlcnic_adapter *adapter)
+{
+ struct qlcnic_info nic_info;
+
+ memset(&nic_info, 0, sizeof(struct qlcnic_info));
+ qlcnic_83xx_enable_mbx_poll(adapter);
+
+ qlcnic_83xx_clear_function_resources(adapter);
+ qlcnic_get_nic_info(adapter, &nic_info, adapter->ahw->pci_func);
+
+ qlcnic_83xx_disable_mbx_poll(adapter);
+}
+
static void qlcnic_83xx_init_rings(struct qlcnic_adapter *adapter)
{
u8 rx_cnt = QLCNIC_DEF_SDS_RINGS;
@@ -2253,6 +2266,9 @@ int qlcnic_83xx_init(struct qlcnic_adapter *adapter, int pci_using_dac)
if (err)
goto detach_mbx;
+ /* Get nic capabilities by issuing mailbox in poll mode */
+ qlcnic_83xx_get_nic_capability(adapter);
+
err = qlcnic_setup_intr(adapter);
if (err) {
dev_err(&adapter->pdev->dev, "Failed to setup interrupt\n");
@@ -2263,8 +2279,6 @@ int qlcnic_83xx_init(struct qlcnic_adapter *adapter, int pci_using_dac)
if (err)
goto disable_mbx_intr;
- qlcnic_83xx_clear_function_resources(adapter);
-
INIT_DELAYED_WORK(&adapter->idc_aen_work, qlcnic_83xx_idc_aen_work);
qlcnic_83xx_initialize_nic(adapter, 1);