aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBen Cahill <ben.m.cahill@intel.com>2009-10-30 17:36:09 -0400
committerJohn W. Linville <linville@tuxdriver.com>2009-11-02 15:39:45 -0500
commitc2e61da29d92df864dc5eec81d774199b02d7023 (patch)
tree5f71654092971eafc3edb0d6259825b9ce642471
parentc72cd19fab7983e97a1a41b7158e0b9f87a7fe96 (diff)
iwlagn: update write pointers for all tx queues after wakeup
Wakeup interrupt has been updating write pointers (indexes, actually) only for tx queues 0-5. This is adequate just for 3945, but inadequate for other devices, all of which have more tx queues. Now updating all tx/command queues, so device can be aware of all new tx and host commands enqueued while device was asleep. This can potentially improve data traffic bandwidth and/or latency. Signed-off-by: Ben Cahill <ben.m.cahill@intel.com> Signed-off-by: Reinette Chatre <reinette.chatre@intel.com> Signed-off-by: John W. Linville <linville@tuxdriver.com>
-rw-r--r--drivers/net/wireless/iwlwifi/iwl-agn.c17
1 files changed, 8 insertions, 9 deletions
diff --git a/drivers/net/wireless/iwlwifi/iwl-agn.c b/drivers/net/wireless/iwlwifi/iwl-agn.c
index 7751a75d4dc9..0cb95bfd15a5 100644
--- a/drivers/net/wireless/iwlwifi/iwl-agn.c
+++ b/drivers/net/wireless/iwlwifi/iwl-agn.c
@@ -890,6 +890,7 @@ static void iwl_irq_tasklet_legacy(struct iwl_priv *priv)
890 u32 inta, handled = 0; 890 u32 inta, handled = 0;
891 u32 inta_fh; 891 u32 inta_fh;
892 unsigned long flags; 892 unsigned long flags;
893 u32 i;
893#ifdef CONFIG_IWLWIFI_DEBUG 894#ifdef CONFIG_IWLWIFI_DEBUG
894 u32 inta_mask; 895 u32 inta_mask;
895#endif 896#endif
@@ -1007,19 +1008,17 @@ static void iwl_irq_tasklet_legacy(struct iwl_priv *priv)
1007 handled |= CSR_INT_BIT_SW_ERR; 1008 handled |= CSR_INT_BIT_SW_ERR;
1008 } 1009 }
1009 1010
1010 /* uCode wakes up after power-down sleep */ 1011 /*
1012 * uCode wakes up after power-down sleep.
1013 * Tell device about any new tx or host commands enqueued,
1014 * and about any Rx buffers made available while asleep.
1015 */
1011 if (inta & CSR_INT_BIT_WAKEUP) { 1016 if (inta & CSR_INT_BIT_WAKEUP) {
1012 IWL_DEBUG_ISR(priv, "Wakeup interrupt\n"); 1017 IWL_DEBUG_ISR(priv, "Wakeup interrupt\n");
1013 iwl_rx_queue_update_write_ptr(priv, &priv->rxq); 1018 iwl_rx_queue_update_write_ptr(priv, &priv->rxq);
1014 iwl_txq_update_write_ptr(priv, &priv->txq[0]); 1019 for (i = 0; i < priv->hw_params.max_txq_num; i++)
1015 iwl_txq_update_write_ptr(priv, &priv->txq[1]); 1020 iwl_txq_update_write_ptr(priv, &priv->txq[i]);
1016 iwl_txq_update_write_ptr(priv, &priv->txq[2]);
1017 iwl_txq_update_write_ptr(priv, &priv->txq[3]);
1018 iwl_txq_update_write_ptr(priv, &priv->txq[4]);
1019 iwl_txq_update_write_ptr(priv, &priv->txq[5]);
1020
1021 priv->isr_stats.wakeup++; 1021 priv->isr_stats.wakeup++;
1022
1023 handled |= CSR_INT_BIT_WAKEUP; 1022 handled |= CSR_INT_BIT_WAKEUP;
1024 } 1023 }
1025 1024