]> Pileus Git - ~andy/linux/blobdiff - drivers/net/wireless/iwlwifi/pcie/rx.c
iwlwifi: pcie: determine the interrupt type in the handler
[~andy/linux] / drivers / net / wireless / iwlwifi / pcie / rx.c
index 5044fbd82e8340064c00865e83ec38c4c4f6a7c6..58d3f649905cfb078d518ccc46c998b727c1561a 100644 (file)
@@ -807,8 +807,7 @@ static void iwl_pcie_irq_handle_error(struct iwl_trans *trans)
        wake_up(&trans_pcie->wait_command_queue);
 }
 
-/* legacy (non-ICT) ISR. Assumes that trans_pcie->irq_lock is held */
-static irqreturn_t iwl_pcie_isr_non_ict(struct iwl_trans *trans)
+static irqreturn_t iwl_pcie_int_cause_non_ict(struct iwl_trans *trans)
 {
        struct iwl_trans_pcie *trans_pcie = IWL_TRANS_GET_PCIE_TRANS(trans);
        u32 inta;
@@ -876,7 +875,7 @@ static irqreturn_t iwl_pcie_isr_non_ict(struct iwl_trans *trans)
  * the interrupt we need to service, driver will set the entries back to 0 and
  * set index.
  */
-static irqreturn_t iwl_pcie_isr_ict(struct iwl_trans *trans)
+static irqreturn_t iwl_pcie_int_cause_ict(struct iwl_trans *trans)
 {
        struct iwl_trans_pcie *trans_pcie = IWL_TRANS_GET_PCIE_TRANS(trans);
        irqreturn_t ret;
@@ -884,14 +883,6 @@ static irqreturn_t iwl_pcie_isr_ict(struct iwl_trans *trans)
        u32 val = 0;
        u32 read;
 
-       /* dram interrupt table not set yet,
-        * use legacy interrupt.
-        */
-       if (unlikely(!trans_pcie->use_ict)) {
-               ret = iwl_pcie_isr_non_ict(trans);
-               return ret;
-       }
-
        trace_iwlwifi_dev_irq(trans->dev);
 
        /* Ignore interrupt if there's nothing in NIC to service.
@@ -977,7 +968,14 @@ irqreturn_t iwl_pcie_irq_handler(int irq, void *dev_id)
 
        spin_lock_irqsave(&trans_pcie->irq_lock, flags);
 
-       ret = iwl_pcie_isr_ict(trans);
+       /* dram interrupt table not set yet,
+        * use legacy interrupt.
+        */
+       if (likely(trans_pcie->use_ict))
+               ret = iwl_pcie_int_cause_ict(trans);
+       else
+               ret = iwl_pcie_int_cause_non_ict(trans);
+
        if (ret != IRQ_WAKE_THREAD) {
                spin_unlock_irqrestore(&trans_pcie->irq_lock, flags);
                return ret;