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