Commit b8042b3d authored by Johannes Berg's avatar Johannes Berg

ieee80211: bump IEEE80211_MAX_AMPDU_BUF to support HE

Bump the IEEE80211_MAX_AMPDU_BUF size to 0x100 for HE support
and - for now - use IEEE80211_MAX_AMPDU_BUF_HT everywhere.

This is derived from my internal patch, parts of which Luca
had sent upstream.
Signed-off-by: default avatarLuca Coelho <luciano.coelho@intel.com>
Signed-off-by: default avatarJohannes Berg <johannes.berg@intel.com>
parent 95a28eea
...@@ -1904,7 +1904,7 @@ void rtl_rx_ampdu_apply(struct rtl_priv *rtlpriv) ...@@ -1904,7 +1904,7 @@ void rtl_rx_ampdu_apply(struct rtl_priv *rtlpriv)
reject_agg, ctrl_agg_size, agg_size); reject_agg, ctrl_agg_size, agg_size);
rtlpriv->hw->max_rx_aggregation_subframes = rtlpriv->hw->max_rx_aggregation_subframes =
(ctrl_agg_size ? agg_size : IEEE80211_MAX_AMPDU_BUF); (ctrl_agg_size ? agg_size : IEEE80211_MAX_AMPDU_BUF_HT);
} }
EXPORT_SYMBOL(rtl_rx_ampdu_apply); EXPORT_SYMBOL(rtl_rx_ampdu_apply);
......
...@@ -575,7 +575,6 @@ enum ht_cap_ampdu_factor { ...@@ -575,7 +575,6 @@ enum ht_cap_ampdu_factor {
* According to IEEE802.11n spec size varies from 8K to 64K (in powers of 2) * According to IEEE802.11n spec size varies from 8K to 64K (in powers of 2)
*/ */
#define IEEE80211_MIN_AMPDU_BUF 0x8 #define IEEE80211_MIN_AMPDU_BUF 0x8
#define IEEE80211_MAX_AMPDU_BUF 0x40
#define OP_MODE_PURE 0 #define OP_MODE_PURE 0
......
...@@ -574,7 +574,6 @@ struct ieee80211_ht_addt_info { ...@@ -574,7 +574,6 @@ struct ieee80211_ht_addt_info {
* According to IEEE802.11n spec size varies from 8K to 64K (in powers of 2) * According to IEEE802.11n spec size varies from 8K to 64K (in powers of 2)
*/ */
#define IEEE80211_MIN_AMPDU_BUF 0x8 #define IEEE80211_MIN_AMPDU_BUF 0x8
#define IEEE80211_MAX_AMPDU_BUF 0x40
/* Spatial Multiplexing Power Save Modes */ /* Spatial Multiplexing Power Save Modes */
......
...@@ -799,7 +799,6 @@ enum HT_CAP_AMPDU_FACTOR { ...@@ -799,7 +799,6 @@ enum HT_CAP_AMPDU_FACTOR {
* According to IEEE802.11n spec size varies from 8K to 64K (in powers of 2) * According to IEEE802.11n spec size varies from 8K to 64K (in powers of 2)
*/ */
#define IEEE80211_MIN_AMPDU_BUF 0x8 #define IEEE80211_MIN_AMPDU_BUF 0x8
#define IEEE80211_MAX_AMPDU_BUF 0x40
/* Spatial Multiplexing Power Save Modes */ /* Spatial Multiplexing Power Save Modes */
......
...@@ -1838,7 +1838,7 @@ void rtl_rx_ampdu_apply(struct rtl_priv *rtlpriv) ...@@ -1838,7 +1838,7 @@ void rtl_rx_ampdu_apply(struct rtl_priv *rtlpriv)
reject_agg, ctrl_agg_size, agg_size); reject_agg, ctrl_agg_size, agg_size);
rtlpriv->hw->max_rx_aggregation_subframes = rtlpriv->hw->max_rx_aggregation_subframes =
(ctrl_agg_size ? agg_size : IEEE80211_MAX_AMPDU_BUF); (ctrl_agg_size ? agg_size : IEEE80211_MAX_AMPDU_BUF_HT);
} }
/********************************************************* /*********************************************************
......
...@@ -1433,11 +1433,13 @@ struct ieee80211_ht_operation { ...@@ -1433,11 +1433,13 @@ struct ieee80211_ht_operation {
#define IEEE80211_DELBA_PARAM_INITIATOR_MASK 0x0800 #define IEEE80211_DELBA_PARAM_INITIATOR_MASK 0x0800
/* /*
* A-PMDU buffer sizes * A-MPDU buffer sizes
* According to IEEE802.11n spec size varies from 8K to 64K (in powers of 2) * According to HT size varies from 8 to 64 frames
* HE adds the ability to have up to 256 frames.
*/ */
#define IEEE80211_MIN_AMPDU_BUF 0x8 #define IEEE80211_MIN_AMPDU_BUF 0x8
#define IEEE80211_MAX_AMPDU_BUF 0x40 #define IEEE80211_MAX_AMPDU_BUF_HT 0x40
#define IEEE80211_MAX_AMPDU_BUF 0x100
/* Spatial Multiplexing Power Save Modes (for capability) */ /* Spatial Multiplexing Power Save Modes (for capability) */
......
...@@ -274,7 +274,7 @@ void ___ieee80211_start_rx_ba_session(struct sta_info *sta, ...@@ -274,7 +274,7 @@ void ___ieee80211_start_rx_ba_session(struct sta_info *sta,
/* XXX: check own ht delayed BA capability?? */ /* XXX: check own ht delayed BA capability?? */
if (((ba_policy != 1) && if (((ba_policy != 1) &&
(!(sta->sta.ht_cap.cap & IEEE80211_HT_CAP_DELAY_BA))) || (!(sta->sta.ht_cap.cap & IEEE80211_HT_CAP_DELAY_BA))) ||
(buf_size > IEEE80211_MAX_AMPDU_BUF)) { (buf_size > IEEE80211_MAX_AMPDU_BUF_HT)) {
status = WLAN_STATUS_INVALID_QOS_PARAM; status = WLAN_STATUS_INVALID_QOS_PARAM;
ht_dbg_ratelimited(sta->sdata, ht_dbg_ratelimited(sta->sdata,
"AddBA Req with bad params from %pM on tid %u. policy %d, buffer size %d\n", "AddBA Req with bad params from %pM on tid %u. policy %d, buffer size %d\n",
...@@ -283,7 +283,7 @@ void ___ieee80211_start_rx_ba_session(struct sta_info *sta, ...@@ -283,7 +283,7 @@ void ___ieee80211_start_rx_ba_session(struct sta_info *sta,
} }
/* determine default buffer size */ /* determine default buffer size */
if (buf_size == 0) if (buf_size == 0)
buf_size = IEEE80211_MAX_AMPDU_BUF; buf_size = IEEE80211_MAX_AMPDU_BUF_HT;
/* make sure the size doesn't exceed the maximum supported by the hw */ /* make sure the size doesn't exceed the maximum supported by the hw */
if (buf_size > sta->sta.max_rx_aggregation_subframes) if (buf_size > sta->sta.max_rx_aggregation_subframes)
......
...@@ -514,7 +514,7 @@ void ieee80211_tx_ba_session_handle_start(struct sta_info *sta, int tid) ...@@ -514,7 +514,7 @@ void ieee80211_tx_ba_session_handle_start(struct sta_info *sta, int tid)
/* send AddBA request */ /* send AddBA request */
ieee80211_send_addba_request(sdata, sta->sta.addr, tid, ieee80211_send_addba_request(sdata, sta->sta.addr, tid,
tid_tx->dialog_token, params.ssn, tid_tx->dialog_token, params.ssn,
IEEE80211_MAX_AMPDU_BUF, IEEE80211_MAX_AMPDU_BUF_HT,
tid_tx->timeout); tid_tx->timeout);
} }
......
...@@ -352,7 +352,7 @@ void ieee80211_ba_session_work(struct work_struct *work) ...@@ -352,7 +352,7 @@ void ieee80211_ba_session_work(struct work_struct *work)
test_and_clear_bit(tid, test_and_clear_bit(tid,
sta->ampdu_mlme.tid_rx_manage_offl)) sta->ampdu_mlme.tid_rx_manage_offl))
___ieee80211_start_rx_ba_session(sta, 0, 0, 0, 1, tid, ___ieee80211_start_rx_ba_session(sta, 0, 0, 0, 1, tid,
IEEE80211_MAX_AMPDU_BUF, IEEE80211_MAX_AMPDU_BUF_HT,
false, true); false, true);
if (test_and_clear_bit(tid + IEEE80211_NUM_TIDS, if (test_and_clear_bit(tid + IEEE80211_NUM_TIDS,
......
...@@ -597,8 +597,8 @@ struct ieee80211_hw *ieee80211_alloc_hw_nm(size_t priv_data_len, ...@@ -597,8 +597,8 @@ struct ieee80211_hw *ieee80211_alloc_hw_nm(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.max_rx_aggregation_subframes = IEEE80211_MAX_AMPDU_BUF_HT;
local->hw.max_tx_aggregation_subframes = IEEE80211_MAX_AMPDU_BUF; local->hw.max_tx_aggregation_subframes = IEEE80211_MAX_AMPDU_BUF_HT;
local->hw.offchannel_tx_hw_queue = IEEE80211_INVAL_HW_QUEUE; local->hw.offchannel_tx_hw_queue = IEEE80211_INVAL_HW_QUEUE;
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;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment