aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/wireless
diff options
context:
space:
mode:
authorJoonwoo Park <joonwpark81@gmail.com>2008-01-23 13:15:20 -0500
committerDavid S. Miller <davem@davemloft.net>2008-01-31 22:26:43 -0500
commit25c03d8e8c13c5468155c58013b03841161b4559 (patch)
tree34899a9c5ef6bed3cb4d0afbe4649269ca58509c /drivers/net/wireless
parent74a3a2509dccba5b4e5eb5808cc59edf2c21560b (diff)
iwlwifi: do not schedule tasklet when rcv unused irq
The nic controller's scheduler interrupt (CSR_INT_BIT_SCD) indicates to the driver that scheduler finished to transmit the frame/frames. This bit is not used and the tasklet should thus not be scheduled upon its receipt. Signed-off-by: Joonwoo Park <joonwpark81@gmail.com> Signed-off-by: Reinette Chatre <reinette.chatre@intel.com> Signed-off-by: John W. Linville <linville@tuxdriver.com> Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'drivers/net/wireless')
-rw-r--r--drivers/net/wireless/iwlwifi/iwl-3945-hw.h2
-rw-r--r--drivers/net/wireless/iwlwifi/iwl-4965-hw.h2
-rw-r--r--drivers/net/wireless/iwlwifi/iwl3945-base.c12
-rw-r--r--drivers/net/wireless/iwlwifi/iwl4965-base.c12
4 files changed, 18 insertions, 10 deletions
diff --git a/drivers/net/wireless/iwlwifi/iwl-3945-hw.h b/drivers/net/wireless/iwlwifi/iwl-3945-hw.h
index 6e0187393af4..571815d7e8bf 100644
--- a/drivers/net/wireless/iwlwifi/iwl-3945-hw.h
+++ b/drivers/net/wireless/iwlwifi/iwl-3945-hw.h
@@ -373,7 +373,7 @@ struct iwl3945_eeprom {
373#define CSR_INT_BIT_HW_ERR (1 << 29) /* DMA hardware error FH_INT[31] */ 373#define CSR_INT_BIT_HW_ERR (1 << 29) /* DMA hardware error FH_INT[31] */
374#define CSR_INT_BIT_DNLD (1 << 28) /* uCode Download */ 374#define CSR_INT_BIT_DNLD (1 << 28) /* uCode Download */
375#define CSR_INT_BIT_FH_TX (1 << 27) /* Tx DMA FH_INT[1:0] */ 375#define CSR_INT_BIT_FH_TX (1 << 27) /* Tx DMA FH_INT[1:0] */
376#define CSR_INT_BIT_MAC_CLK_ACTV (1 << 26) /* NIC controller's clock toggled on/off */ 376#define CSR_INT_BIT_SCD (1 << 26) /* TXQ pointer advanced */
377#define CSR_INT_BIT_SW_ERR (1 << 25) /* uCode error */ 377#define CSR_INT_BIT_SW_ERR (1 << 25) /* uCode error */
378#define CSR_INT_BIT_RF_KILL (1 << 7) /* HW RFKILL switch GP_CNTRL[27] toggled */ 378#define CSR_INT_BIT_RF_KILL (1 << 7) /* HW RFKILL switch GP_CNTRL[27] toggled */
379#define CSR_INT_BIT_CT_KILL (1 << 6) /* Critical temp (chip too hot) rfkill */ 379#define CSR_INT_BIT_CT_KILL (1 << 6) /* Critical temp (chip too hot) rfkill */
diff --git a/drivers/net/wireless/iwlwifi/iwl-4965-hw.h b/drivers/net/wireless/iwlwifi/iwl-4965-hw.h
index ff71c09ab1a7..ffe1e9dfdec7 100644
--- a/drivers/net/wireless/iwlwifi/iwl-4965-hw.h
+++ b/drivers/net/wireless/iwlwifi/iwl-4965-hw.h
@@ -465,7 +465,7 @@ struct iwl4965_eeprom {
465#define CSR_INT_BIT_HW_ERR (1 << 29) /* DMA hardware error FH_INT[31] */ 465#define CSR_INT_BIT_HW_ERR (1 << 29) /* DMA hardware error FH_INT[31] */
466#define CSR_INT_BIT_DNLD (1 << 28) /* uCode Download */ 466#define CSR_INT_BIT_DNLD (1 << 28) /* uCode Download */
467#define CSR_INT_BIT_FH_TX (1 << 27) /* Tx DMA FH_INT[1:0] */ 467#define CSR_INT_BIT_FH_TX (1 << 27) /* Tx DMA FH_INT[1:0] */
468#define CSR_INT_BIT_MAC_CLK_ACTV (1 << 26) /* NIC controller's clock toggled on/off */ 468#define CSR_INT_BIT_SCD (1 << 26) /* TXQ pointer advanced */
469#define CSR_INT_BIT_SW_ERR (1 << 25) /* uCode error */ 469#define CSR_INT_BIT_SW_ERR (1 << 25) /* uCode error */
470#define CSR_INT_BIT_RF_KILL (1 << 7) /* HW RFKILL switch GP_CNTRL[27] toggled */ 470#define CSR_INT_BIT_RF_KILL (1 << 7) /* HW RFKILL switch GP_CNTRL[27] toggled */
471#define CSR_INT_BIT_CT_KILL (1 << 6) /* Critical temp (chip too hot) rfkill */ 471#define CSR_INT_BIT_CT_KILL (1 << 6) /* Critical temp (chip too hot) rfkill */
diff --git a/drivers/net/wireless/iwlwifi/iwl3945-base.c b/drivers/net/wireless/iwlwifi/iwl3945-base.c
index 8cef48c9d748..f644c6bba85f 100644
--- a/drivers/net/wireless/iwlwifi/iwl3945-base.c
+++ b/drivers/net/wireless/iwlwifi/iwl3945-base.c
@@ -4759,8 +4759,9 @@ static void iwl3945_irq_tasklet(struct iwl3945_priv *priv)
4759#ifdef CONFIG_IWL3945_DEBUG 4759#ifdef CONFIG_IWL3945_DEBUG
4760 if (iwl3945_debug_level & (IWL_DL_ISR)) { 4760 if (iwl3945_debug_level & (IWL_DL_ISR)) {
4761 /* NIC fires this, but we don't use it, redundant with WAKEUP */ 4761 /* NIC fires this, but we don't use it, redundant with WAKEUP */
4762 if (inta & CSR_INT_BIT_MAC_CLK_ACTV) 4762 if (inta & CSR_INT_BIT_SCD)
4763 IWL_DEBUG_ISR("Microcode started or stopped.\n"); 4763 IWL_DEBUG_ISR("Scheduler finished to transmit "
4764 "the frame/frames.\n");
4764 4765
4765 /* Alive notification via Rx interrupt will do the real work */ 4766 /* Alive notification via Rx interrupt will do the real work */
4766 if (inta & CSR_INT_BIT_ALIVE) 4767 if (inta & CSR_INT_BIT_ALIVE)
@@ -4768,7 +4769,7 @@ static void iwl3945_irq_tasklet(struct iwl3945_priv *priv)
4768 } 4769 }
4769#endif 4770#endif
4770 /* Safely ignore these bits for debug checks below */ 4771 /* Safely ignore these bits for debug checks below */
4771 inta &= ~(CSR_INT_BIT_MAC_CLK_ACTV | CSR_INT_BIT_ALIVE); 4772 inta &= ~(CSR_INT_BIT_SCD | CSR_INT_BIT_ALIVE);
4772 4773
4773 /* HW RF KILL switch toggled (4965 only) */ 4774 /* HW RF KILL switch toggled (4965 only) */
4774 if (inta & CSR_INT_BIT_RF_KILL) { 4775 if (inta & CSR_INT_BIT_RF_KILL) {
@@ -4904,8 +4905,11 @@ static irqreturn_t iwl3945_isr(int irq, void *data)
4904 IWL_DEBUG_ISR("ISR inta 0x%08x, enabled 0x%08x, fh 0x%08x\n", 4905 IWL_DEBUG_ISR("ISR inta 0x%08x, enabled 0x%08x, fh 0x%08x\n",
4905 inta, inta_mask, inta_fh); 4906 inta, inta_mask, inta_fh);
4906 4907
4908 inta &= ~CSR_INT_BIT_SCD;
4909
4907 /* iwl3945_irq_tasklet() will service interrupts and re-enable them */ 4910 /* iwl3945_irq_tasklet() will service interrupts and re-enable them */
4908 tasklet_schedule(&priv->irq_tasklet); 4911 if (likely(inta || inta_fh))
4912 tasklet_schedule(&priv->irq_tasklet);
4909unplugged: 4913unplugged:
4910 spin_unlock(&priv->lock); 4914 spin_unlock(&priv->lock);
4911 4915
diff --git a/drivers/net/wireless/iwlwifi/iwl4965-base.c b/drivers/net/wireless/iwlwifi/iwl4965-base.c
index c856835b1f20..131cf5adbd79 100644
--- a/drivers/net/wireless/iwlwifi/iwl4965-base.c
+++ b/drivers/net/wireless/iwlwifi/iwl4965-base.c
@@ -5137,8 +5137,9 @@ static void iwl4965_irq_tasklet(struct iwl4965_priv *priv)
5137#ifdef CONFIG_IWL4965_DEBUG 5137#ifdef CONFIG_IWL4965_DEBUG
5138 if (iwl4965_debug_level & (IWL_DL_ISR)) { 5138 if (iwl4965_debug_level & (IWL_DL_ISR)) {
5139 /* NIC fires this, but we don't use it, redundant with WAKEUP */ 5139 /* NIC fires this, but we don't use it, redundant with WAKEUP */
5140 if (inta & CSR_INT_BIT_MAC_CLK_ACTV) 5140 if (inta & CSR_INT_BIT_SCD)
5141 IWL_DEBUG_ISR("Microcode started or stopped.\n"); 5141 IWL_DEBUG_ISR("Scheduler finished to transmit "
5142 "the frame/frames.\n");
5142 5143
5143 /* Alive notification via Rx interrupt will do the real work */ 5144 /* Alive notification via Rx interrupt will do the real work */
5144 if (inta & CSR_INT_BIT_ALIVE) 5145 if (inta & CSR_INT_BIT_ALIVE)
@@ -5146,7 +5147,7 @@ static void iwl4965_irq_tasklet(struct iwl4965_priv *priv)
5146 } 5147 }
5147#endif 5148#endif
5148 /* Safely ignore these bits for debug checks below */ 5149 /* Safely ignore these bits for debug checks below */
5149 inta &= ~(CSR_INT_BIT_MAC_CLK_ACTV | CSR_INT_BIT_ALIVE); 5150 inta &= ~(CSR_INT_BIT_SCD | CSR_INT_BIT_ALIVE);
5150 5151
5151 /* HW RF KILL switch toggled */ 5152 /* HW RF KILL switch toggled */
5152 if (inta & CSR_INT_BIT_RF_KILL) { 5153 if (inta & CSR_INT_BIT_RF_KILL) {
@@ -5275,8 +5276,11 @@ static irqreturn_t iwl4965_isr(int irq, void *data)
5275 IWL_DEBUG_ISR("ISR inta 0x%08x, enabled 0x%08x, fh 0x%08x\n", 5276 IWL_DEBUG_ISR("ISR inta 0x%08x, enabled 0x%08x, fh 0x%08x\n",
5276 inta, inta_mask, inta_fh); 5277 inta, inta_mask, inta_fh);
5277 5278
5279 inta &= ~CSR_INT_BIT_SCD;
5280
5278 /* iwl4965_irq_tasklet() will service interrupts and re-enable them */ 5281 /* iwl4965_irq_tasklet() will service interrupts and re-enable them */
5279 tasklet_schedule(&priv->irq_tasklet); 5282 if (likely(inta || inta_fh))
5283 tasklet_schedule(&priv->irq_tasklet);
5280 5284
5281 unplugged: 5285 unplugged:
5282 spin_unlock(&priv->lock); 5286 spin_unlock(&priv->lock);