diff options
author | Sucheta Chakraborty <sucheta.chakraborty@qlogic.com> | 2013-02-18 12:06:14 +0000 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2013-02-19 00:47:01 -0500 |
commit | 7dd90cf171cae71f5f92d8c91299f0a8a0b21661 (patch) | |
tree | ed9985f0180beced1791e88be76f1c6884728017 /drivers/net/ethernet/qlogic/qlcnic/qlcnic_ctx.c | |
parent | 114ef38aded4457f6e412ef294e09932fe28f026 (diff) | |
download | blackbird-op-linux-7dd90cf171cae71f5f92d8c91299f0a8a0b21661.tar.gz blackbird-op-linux-7dd90cf171cae71f5f92d8c91299f0a8a0b21661.zip |
qlcnic: fix mailbox interrupt.
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>
Diffstat (limited to 'drivers/net/ethernet/qlogic/qlcnic/qlcnic_ctx.c')
-rw-r--r-- | drivers/net/ethernet/qlogic/qlcnic/qlcnic_ctx.c | 27 |
1 files changed, 24 insertions, 3 deletions
diff --git a/drivers/net/ethernet/qlogic/qlcnic/qlcnic_ctx.c b/drivers/net/ethernet/qlogic/qlcnic/qlcnic_ctx.c index 6308d4d09704..a69097c6b84d 100644 --- a/drivers/net/ethernet/qlogic/qlcnic/qlcnic_ctx.c +++ b/drivers/net/ethernet/qlogic/qlcnic/qlcnic_ctx.c @@ -599,9 +599,17 @@ int qlcnic_fw_create_ctx(struct qlcnic_adapter *dev) 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, @@ -610,18 +618,25 @@ int qlcnic_fw_create_ctx(struct qlcnic_adapter *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) @@ -633,6 +648,12 @@ 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); } |