o Config interrupt is not needed for mailbox interrupts.
Signed-off-by: Sucheta Chakraborty <sucheta.chakraborty@qlogic.com>
Signed-off-by: Jitendra Kalsaria <jitendra.kalsaria@qlogic.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
/* Enable mailbox interrupt */
qlcnic_83xx_enable_mbx_intrpt(adapter);
- if (adapter->flags & QLCNIC_MSIX_ENABLED)
- err = qlcnic_83xx_config_intrpt(adapter, 1);
return err;
}
u32 val, temp;
struct qlcnic_cmd_args cmd;
- max_ints = adapter->ahw->num_msix;
+ max_ints = adapter->ahw->num_msix - 1;
qlcnic_alloc_mbx_args(&cmd, adapter, QLCNIC_CMD_CONFIG_INTRPT);
cmd.req.arg[1] = max_ints;
for (i = 0, index = 2; i < max_ints; i++) {
dev->flags &= ~QLCNIC_NEED_FLR;
}
+ if (qlcnic_83xx_check(dev) && (dev->flags & QLCNIC_MSIX_ENABLED)) {
+ if (dev->ahw->diag_test != QLCNIC_LOOPBACK_TEST) {
+ err = qlcnic_83xx_config_intrpt(dev, 1);
+ if (err)
+ return err;
+ }
+ }
+
err = qlcnic_fw_cmd_create_rx_ctx(dev);
if (err)
- return err;
+ goto err_out;
for (ring = 0; ring < dev->max_drv_tx_rings; ring++) {
err = qlcnic_fw_cmd_create_tx_ctx(dev,
if (err) {
qlcnic_fw_cmd_destroy_rx_ctx(dev);
if (ring == 0)
- return err;
+ goto err_out;
for (i = 0; i < ring; i++)
qlcnic_fw_cmd_destroy_tx_ctx(dev,
&dev->tx_ring[i]);
- return err;
+ goto err_out;
}
}
set_bit(__QLCNIC_FW_ATTACHED, &dev->state);
return 0;
+
+err_out:
+ if (qlcnic_83xx_check(dev) && (dev->flags & QLCNIC_MSIX_ENABLED)) {
+ if (dev->ahw->diag_test != QLCNIC_LOOPBACK_TEST)
+ qlcnic_83xx_config_intrpt(dev, 0);
+ }
+ return err;
}
void qlcnic_fw_destroy_ctx(struct qlcnic_adapter *adapter)
for (ring = 0; ring < adapter->max_drv_tx_rings; ring++)
qlcnic_fw_cmd_destroy_tx_ctx(adapter,
&adapter->tx_ring[ring]);
+
+ if (qlcnic_83xx_check(adapter) &&
+ (adapter->flags & QLCNIC_MSIX_ENABLED)) {
+ if (adapter->ahw->diag_test != QLCNIC_LOOPBACK_TEST)
+ qlcnic_83xx_config_intrpt(adapter, 0);
+ }
/* Allow dma queues to drain after context reset */
mdelay(20);
}
return 0;
err_out_disable_mbx_intr:
- if (qlcnic_83xx_check(adapter)) {
- if (adapter->flags & QLCNIC_MSIX_ENABLED)
- qlcnic_83xx_config_intrpt(adapter, 0);
+ if (qlcnic_83xx_check(adapter))
qlcnic_83xx_free_mbx_intr(adapter);
- }
err_out_disable_msi:
qlcnic_teardown_intr(adapter);
unregister_netdev(netdev);
if (qlcnic_83xx_check(adapter)) {
- if (adapter->flags & QLCNIC_MSIX_ENABLED)
- qlcnic_83xx_config_intrpt(adapter, 0);
qlcnic_83xx_free_mbx_intr(adapter);
qlcnic_83xx_register_nic_idc_func(adapter, 0);
cancel_delayed_work_sync(&adapter->idc_aen_work);
qlcnic_down(adapter, netdev);
if (qlcnic_83xx_check(adapter)) {
- if (adapter->flags & QLCNIC_MSIX_ENABLED)
- qlcnic_83xx_config_intrpt(adapter, 0);
qlcnic_83xx_free_mbx_intr(adapter);
qlcnic_83xx_register_nic_idc_func(adapter, 0);
cancel_delayed_work_sync(&adapter->idc_aen_work);
if (netif_running(netdev))
__qlcnic_down(adapter, netdev);
- if (qlcnic_83xx_check(adapter)) {
- if (adapter->flags & QLCNIC_MSIX_ENABLED)
- qlcnic_83xx_config_intrpt(adapter, 0);
+ qlcnic_detach(adapter);
+
+ if (qlcnic_83xx_check(adapter))
qlcnic_83xx_free_mbx_intr(adapter);
- }
- qlcnic_detach(adapter);
qlcnic_teardown_intr(adapter);
err = qlcnic_setup_intr(adapter, data);
if (err) {