aboutsummaryrefslogtreecommitdiffstats
path: root/include
diff options
context:
space:
mode:
authorVivek Natarajan <vnatarajan@atheros.com>2011-04-06 02:11:10 -0400
committerJohn W. Linville <linville@tuxdriver.com>2011-04-12 16:57:34 -0400
commite8306f989483e4b97a8b37dd268de6c8c6f35e75 (patch)
tree452bb50b9e7dbfc9a6fa68f8da388a17c2f76875 /include
parent6fc3ba999994b675c4e6af77ac4e1a6bfd8e6128 (diff)
mac80211: Check for queued frames before entering power save.
In a highly noisy environment, the tx rate of the driver drops and the application slows down since it has not yet received ACKs for the frames already queued in the hardware. Since this ACK may take more than 100ms, stopping the dev queues for entering PS at this stage breaks applications, WMM test cases in my testing. If there are frames already pending in the tx queue, postponing the PS logic helps to avoid redundant queue stops. When power save is enabled by default and in a noisy environment, this API certainly helps in improving the average throughput. Signed-off-by: Vivek Natarajan <vnatarajan@atheros.com> Signed-off-by: John W. Linville <linville@tuxdriver.com>
Diffstat (limited to 'include')
-rw-r--r--include/net/mac80211.h4
1 files changed, 4 insertions, 0 deletions
diff --git a/include/net/mac80211.h b/include/net/mac80211.h
index 965f1b16e53a..361bc5d85b1a 100644
--- a/include/net/mac80211.h
+++ b/include/net/mac80211.h
@@ -1819,6 +1819,9 @@ enum ieee80211_ampdu_mlme_action {
1819 * @set_ringparam: Set tx and rx ring sizes. 1819 * @set_ringparam: Set tx and rx ring sizes.
1820 * 1820 *
1821 * @get_ringparam: Get tx and rx ring current and maximum sizes. 1821 * @get_ringparam: Get tx and rx ring current and maximum sizes.
1822 *
1823 * @tx_frames_pending: Check if there is any pending frame in the hardware
1824 * queues before entering power save.
1822 */ 1825 */
1823struct ieee80211_ops { 1826struct ieee80211_ops {
1824 void (*tx)(struct ieee80211_hw *hw, struct sk_buff *skb); 1827 void (*tx)(struct ieee80211_hw *hw, struct sk_buff *skb);
@@ -1906,6 +1909,7 @@ struct ieee80211_ops {
1906 int (*set_ringparam)(struct ieee80211_hw *hw, u32 tx, u32 rx); 1909 int (*set_ringparam)(struct ieee80211_hw *hw, u32 tx, u32 rx);
1907 void (*get_ringparam)(struct ieee80211_hw *hw, 1910 void (*get_ringparam)(struct ieee80211_hw *hw,
1908 u32 *tx, u32 *tx_max, u32 *rx, u32 *rx_max); 1911 u32 *tx, u32 *tx_max, u32 *rx, u32 *rx_max);
1912 bool (*tx_frames_pending)(struct ieee80211_hw *hw);
1909}; 1913};
1910 1914
1911/** 1915/**