aboutsummaryrefslogtreecommitdiffstats
path: root/include/net/mac80211.h
diff options
context:
space:
mode:
authorVivek Natarajan <vnatarajan@atheros.com>2011-04-06 11:41:10 +0530
committerJohn W. Linville <linville@tuxdriver.com>2011-04-12 16:57:34 -0400
commite8306f989483e4b97a8b37dd268de6c8c6f35e75 (patch)
tree452bb50b9e7dbfc9a6fa68f8da388a17c2f76875 /include/net/mac80211.h
parent6fc3ba999994b675c4e6af77ac4e1a6bfd8e6128 (diff)
downloadkernel_samsung_smdk4412-e8306f989483e4b97a8b37dd268de6c8c6f35e75.zip
kernel_samsung_smdk4412-e8306f989483e4b97a8b37dd268de6c8c6f35e75.tar.gz
kernel_samsung_smdk4412-e8306f989483e4b97a8b37dd268de6c8c6f35e75.tar.bz2
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/net/mac80211.h')
-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 965f1b1..361bc5d 100644
--- a/include/net/mac80211.h
+++ b/include/net/mac80211.h
@@ -1819,6 +1819,9 @@ enum ieee80211_ampdu_mlme_action {
* @set_ringparam: Set tx and rx ring sizes.
*
* @get_ringparam: Get tx and rx ring current and maximum sizes.
+ *
+ * @tx_frames_pending: Check if there is any pending frame in the hardware
+ * queues before entering power save.
*/
struct ieee80211_ops {
void (*tx)(struct ieee80211_hw *hw, struct sk_buff *skb);
@@ -1906,6 +1909,7 @@ struct ieee80211_ops {
int (*set_ringparam)(struct ieee80211_hw *hw, u32 tx, u32 rx);
void (*get_ringparam)(struct ieee80211_hw *hw,
u32 *tx, u32 *tx_max, u32 *rx, u32 *rx_max);
+ bool (*tx_frames_pending)(struct ieee80211_hw *hw);
};
/**