diff options
author | Ben Cahill <ben.m.cahill@intel.com> | 2009-10-30 17:36:09 -0400 |
---|---|---|
committer | John W. Linville <linville@tuxdriver.com> | 2009-11-02 15:39:45 -0500 |
commit | c2e61da29d92df864dc5eec81d774199b02d7023 (patch) | |
tree | 5f71654092971eafc3edb0d6259825b9ce642471 | |
parent | c72cd19fab7983e97a1a41b7158e0b9f87a7fe96 (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.c | 17 |
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 | ||