Search Linux Wireless

[PATCH 28/28] iwlwifi: Streamline irq_tasklet() when ISR debug not used

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



From: Cahill, Ben M <ben.m.cahill@xxxxxxxxx>

This patch streamlines irq_tasklet() when ISR debug is not used.
It also reports MAC_CLK_ACTV interrupt bit and enhance comments.

Signed-off-by: Cahill, Ben M <ben.m.cahill@xxxxxxxxx>
Signed-off-by: Zhu Yi <yi.zhu@xxxxxxxxx>
---
 drivers/net/wireless/iwl-base.c |   35 +++++++++++++++++++++++++----------
 1 files changed, 25 insertions(+), 10 deletions(-)

diff --git a/drivers/net/wireless/iwl-base.c b/drivers/net/wireless/iwl-base.c
index 881945d..15965fc 100644
--- a/drivers/net/wireless/iwl-base.c
+++ b/drivers/net/wireless/iwl-base.c
@@ -5125,10 +5125,13 @@ static void iwl_irq_tasklet(struct iwl_priv *priv)
 	inta_fh = iwl_read32(priv, CSR_FH_INT_STATUS);
 	iwl_write32(priv, CSR_FH_INT_STATUS, inta_fh);
 
-	inta_mask = iwl_read32(priv, CSR_INT_MASK); /* just for debug */
-	IWL_DEBUG_ISR
-	    ("inta 0x%08x, enabled 0x%08x, fh 0x%08x\n",
-	     inta, inta_mask, inta_fh);
+#ifdef CONFIG_IWLWIFI_DEBUG
+	if (iwl_debug_level & IWL_DL_ISR) {
+		inta_mask = iwl_read32(priv, CSR_INT_MASK); /* just for debug */
+		IWL_DEBUG_ISR("inta 0x%08x, enabled 0x%08x, fh 0x%08x\n",
+			      inta, inta_mask, inta_fh);
+	}
+#endif
 
 	/* Since CSR_INT and CSR_FH_INT_STATUS reads and clears are not
 	 * atomic, make sure that inta covers all the interrupts that
@@ -5155,6 +5158,21 @@ static void iwl_irq_tasklet(struct iwl_priv *priv)
 		return;
 	}
 
+#ifdef CONFIG_IWLWIFI_DEBUG
+	if (iwl_debug_level & (IWL_DL_ISR)) {
+		/* NIC fires this, but we don't use it, redundant with WAKEUP */
+		if (inta & BIT_INT_MAC_CLK_ACTV)
+			IWL_DEBUG_ISR("Microcode started or stopped.\n");
+
+		/* Alive notification via Rx interrupt will do the real work */
+		if (inta & BIT_INT_ALIVE)
+			IWL_DEBUG_ISR("Alive interrupt\n");
+	}
+#endif
+	/* Safely ignore these bits for debug checks below */
+	inta &= ~(BIT_INT_MAC_CLK_ACTV | BIT_INT_ALIVE);
+
+	/* HW RF KILL switch toggled (4965 only) */
 	if (inta & BIT_INT_RF_KILL) {
 		int hw_rf_kill = 0;
 		if (!(iwl_read32(priv, CSR_GP_CNTRL) &
@@ -5175,11 +5193,13 @@ static void iwl_irq_tasklet(struct iwl_priv *priv)
 		handled |= BIT_INT_RF_KILL;
 	}
 
+	/* Chip got too hot and stopped itself (4965 only) */
 	if (inta & BIT_INT_CT_KILL) {
 		IWL_ERROR("Microcode CT kill error detected.\n");
 		handled |= BIT_INT_CT_KILL;
 	}
 
+	/* Error detected by uCode */
 	if (inta & BIT_INT_SWERROR) {
 		IWL_ERROR("Microcode SW error detected.  Restarting 0x%X.\n",
 			  inta);
@@ -5187,6 +5207,7 @@ static void iwl_irq_tasklet(struct iwl_priv *priv)
 		handled |= BIT_INT_SWERROR;
 	}
 
+	/* uCode wakes up after power-down sleep */
 	if (inta & BIT_INT_WAKEUP) {
 		IWL_DEBUG_ISR("Wakeup interrupt\n");
 		iwl_rx_queue_update_write_ptr(priv, &priv->rxq);
@@ -5200,12 +5221,6 @@ static void iwl_irq_tasklet(struct iwl_priv *priv)
 		handled |= BIT_INT_WAKEUP;
 	}
 
-	/* Alive notification via Rx interrupt will do the real work */
-	if (inta & BIT_INT_ALIVE) {
-		IWL_DEBUG_ISR("Alive interrupt\n");
-		handled |= BIT_INT_ALIVE;
-	}
-
 	/* All uCode command responses, including Tx command responses,
 	 * Rx "responses" (frame-received notification), and other
 	 * notifications from uCode come through here*/
-- 
1.5.2
-
To unsubscribe from this list: send the line "unsubscribe linux-wireless" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html

[Index of Archives]     [Linux Host AP]     [ATH6KL]     [Linux Bluetooth]     [Linux Netdev]     [Kernel Newbies]     [Linux Kernel]     [IDE]     [Security]     [Git]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux ATA RAID]     [Samba]     [Device Mapper]
  Powered by Linux