提交 df6ba5d8 编写于 作者: L Luciano Coelho 提交者: John W. Linville

mac80211: add hw configuration for max ampdu buffer size

Some devices don't support the maximum AMDPU buffer size of 64, so we
need to add an option to configure this in the hardware configuration.
This value will be used in the ADDBA response instead of the value
suggested in the request, if the latter is greater than the max
supported.
Signed-off-by: NLuciano Coelho <coelho@ti.com>
Tested-by: NJuuso Oikarinen <juuso.oikarinen@nokia.com>
Signed-off-by: NJohn W. Linville <linville@tuxdriver.com>
上级 dcac908b
...@@ -1147,6 +1147,13 @@ enum ieee80211_hw_flags { ...@@ -1147,6 +1147,13 @@ enum ieee80211_hw_flags {
* @napi_weight: weight used for NAPI polling. You must specify an * @napi_weight: weight used for NAPI polling. You must specify an
* appropriate value here if a napi_poll operation is provided * appropriate value here if a napi_poll operation is provided
* by your driver. * by your driver.
* @max_rx_aggregation_subframes: maximum buffer size (number of
* sub-frames) to be used for A-MPDU block ack receiver
* aggregation.
* This is only relevant if the device has restrictions on the
* number of subframes, if it relies on mac80211 to do reordering
* it shouldn't be set.
*/ */
struct ieee80211_hw { struct ieee80211_hw {
struct ieee80211_conf conf; struct ieee80211_conf conf;
...@@ -1165,6 +1172,7 @@ struct ieee80211_hw { ...@@ -1165,6 +1172,7 @@ struct ieee80211_hw {
u8 max_rates; u8 max_rates;
u8 max_report_rates; u8 max_report_rates;
u8 max_rate_tries; u8 max_rate_tries;
u8 max_rx_aggregation_subframes;
}; };
/** /**
......
...@@ -239,6 +239,9 @@ void ieee80211_process_addba_request(struct ieee80211_local *local, ...@@ -239,6 +239,9 @@ void ieee80211_process_addba_request(struct ieee80211_local *local,
buf_size = buf_size << sband->ht_cap.ampdu_factor; buf_size = buf_size << sband->ht_cap.ampdu_factor;
} }
/* make sure the size doesn't exceed the maximum supported by the hw */
if (buf_size > local->hw.max_rx_aggregation_subframes)
buf_size = local->hw.max_rx_aggregation_subframes;
/* examine state machine */ /* examine state machine */
mutex_lock(&sta->ampdu_mlme.mtx); mutex_lock(&sta->ampdu_mlme.mtx);
......
...@@ -552,6 +552,7 @@ struct ieee80211_hw *ieee80211_alloc_hw(size_t priv_data_len, ...@@ -552,6 +552,7 @@ struct ieee80211_hw *ieee80211_alloc_hw(size_t priv_data_len,
local->hw.queues = 1; local->hw.queues = 1;
local->hw.max_rates = 1; local->hw.max_rates = 1;
local->hw.max_report_rates = 0; local->hw.max_report_rates = 0;
local->hw.max_rx_aggregation_subframes = IEEE80211_MAX_AMPDU_BUF;
local->hw.conf.long_frame_max_tx_count = wiphy->retry_long; local->hw.conf.long_frame_max_tx_count = wiphy->retry_long;
local->hw.conf.short_frame_max_tx_count = wiphy->retry_short; local->hw.conf.short_frame_max_tx_count = wiphy->retry_short;
local->user_power_level = -1; local->user_power_level = -1;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册