diff options
author | Avinash Patil <patila@marvell.com> | 2013-03-27 22:10:32 -0400 |
---|---|---|
committer | John W. Linville <linville@tuxdriver.com> | 2013-04-01 16:06:49 -0400 |
commit | 2b6254dacfe64a52908fc7496d210e39e2732858 (patch) | |
tree | 327f27e18a4bff43119e3f9a863274b0e42ed948 /drivers | |
parent | 04abc0a330327c69dfe1518fb2f5a8b4749b0f37 (diff) |
mwifiex: use separate AMPDU tx/rx window sizes in 11ac networks
Newer 11ac enabled chipsets have more TX and RX buffers in FW
and hardware; so they may support larger TX and RX window sizes
for BA. Reset BA settings during association, adhoc join/start
or start_ap() if we are joining/creating 11ac network.
Signed-off-by: Avinash Patil <patila@marvell.com>
Signed-off-by: Sagar Bijwe <bsagar@marvell.com>
Signed-off-by: Yogesh Ashok Powar <yogeshp@marvell.com>
Signed-off-by: Bing Zhao <bzhao@marvell.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
Diffstat (limited to 'drivers')
-rw-r--r-- | drivers/net/wireless/mwifiex/11ac.c | 22 | ||||
-rw-r--r-- | drivers/net/wireless/mwifiex/cfg80211.c | 5 | ||||
-rw-r--r-- | drivers/net/wireless/mwifiex/decl.h | 4 | ||||
-rw-r--r-- | drivers/net/wireless/mwifiex/join.c | 23 | ||||
-rw-r--r-- | drivers/net/wireless/mwifiex/main.h | 1 |
5 files changed, 55 insertions, 0 deletions
diff --git a/drivers/net/wireless/mwifiex/11ac.c b/drivers/net/wireless/mwifiex/11ac.c index de0a63469cb1..966a78f8e21a 100644 --- a/drivers/net/wireless/mwifiex/11ac.c +++ b/drivers/net/wireless/mwifiex/11ac.c | |||
@@ -278,3 +278,25 @@ int mwifiex_cmd_11ac_cfg(struct mwifiex_private *priv, | |||
278 | 278 | ||
279 | return 0; | 279 | return 0; |
280 | } | 280 | } |
281 | |||
282 | /* This function initializes the BlockACK setup information for given | ||
283 | * mwifiex_private structure for 11ac enabled networks. | ||
284 | */ | ||
285 | void mwifiex_set_11ac_ba_params(struct mwifiex_private *priv) | ||
286 | { | ||
287 | priv->add_ba_param.timeout = MWIFIEX_DEFAULT_BLOCK_ACK_TIMEOUT; | ||
288 | |||
289 | if (GET_BSS_ROLE(priv) == MWIFIEX_BSS_ROLE_UAP) { | ||
290 | priv->add_ba_param.tx_win_size = | ||
291 | MWIFIEX_11AC_UAP_AMPDU_DEF_TXWINSIZE; | ||
292 | priv->add_ba_param.rx_win_size = | ||
293 | MWIFIEX_11AC_UAP_AMPDU_DEF_RXWINSIZE; | ||
294 | } else { | ||
295 | priv->add_ba_param.tx_win_size = | ||
296 | MWIFIEX_11AC_STA_AMPDU_DEF_TXWINSIZE; | ||
297 | priv->add_ba_param.rx_win_size = | ||
298 | MWIFIEX_11AC_STA_AMPDU_DEF_RXWINSIZE; | ||
299 | } | ||
300 | |||
301 | return; | ||
302 | } | ||
diff --git a/drivers/net/wireless/mwifiex/cfg80211.c b/drivers/net/wireless/mwifiex/cfg80211.c index 95f3306e2836..8f161e1ed13f 100644 --- a/drivers/net/wireless/mwifiex/cfg80211.c +++ b/drivers/net/wireless/mwifiex/cfg80211.c | |||
@@ -1381,6 +1381,11 @@ static int mwifiex_cfg80211_start_ap(struct wiphy *wiphy, | |||
1381 | priv->ap_11ac_enabled); | 1381 | priv->ap_11ac_enabled); |
1382 | } | 1382 | } |
1383 | 1383 | ||
1384 | if (priv->ap_11ac_enabled) | ||
1385 | mwifiex_set_11ac_ba_params(priv); | ||
1386 | else | ||
1387 | mwifiex_set_ba_params(priv); | ||
1388 | |||
1384 | mwifiex_set_wmm_params(priv, bss_cfg, params); | 1389 | mwifiex_set_wmm_params(priv, bss_cfg, params); |
1385 | 1390 | ||
1386 | if (params->inactivity_timeout > 0) { | 1391 | if (params->inactivity_timeout > 0) { |
diff --git a/drivers/net/wireless/mwifiex/decl.h b/drivers/net/wireless/mwifiex/decl.h index 2af2c7ce3ad7..94cc09d48444 100644 --- a/drivers/net/wireless/mwifiex/decl.h +++ b/drivers/net/wireless/mwifiex/decl.h | |||
@@ -45,6 +45,10 @@ | |||
45 | #define MWIFIEX_STA_AMPDU_DEF_RXWINSIZE 32 | 45 | #define MWIFIEX_STA_AMPDU_DEF_RXWINSIZE 32 |
46 | #define MWIFIEX_UAP_AMPDU_DEF_TXWINSIZE 32 | 46 | #define MWIFIEX_UAP_AMPDU_DEF_TXWINSIZE 32 |
47 | #define MWIFIEX_UAP_AMPDU_DEF_RXWINSIZE 16 | 47 | #define MWIFIEX_UAP_AMPDU_DEF_RXWINSIZE 16 |
48 | #define MWIFIEX_11AC_STA_AMPDU_DEF_TXWINSIZE 32 | ||
49 | #define MWIFIEX_11AC_STA_AMPDU_DEF_RXWINSIZE 48 | ||
50 | #define MWIFIEX_11AC_UAP_AMPDU_DEF_TXWINSIZE 48 | ||
51 | #define MWIFIEX_11AC_UAP_AMPDU_DEF_RXWINSIZE 32 | ||
48 | 52 | ||
49 | #define MWIFIEX_DEFAULT_BLOCK_ACK_TIMEOUT 0xffff | 53 | #define MWIFIEX_DEFAULT_BLOCK_ACK_TIMEOUT 0xffff |
50 | 54 | ||
diff --git a/drivers/net/wireless/mwifiex/join.c b/drivers/net/wireless/mwifiex/join.c index 2fe0ceba4400..6bcb66e6e97c 100644 --- a/drivers/net/wireless/mwifiex/join.c +++ b/drivers/net/wireless/mwifiex/join.c | |||
@@ -1295,6 +1295,14 @@ int mwifiex_associate(struct mwifiex_private *priv, | |||
1295 | (bss_desc->bss_mode != NL80211_IFTYPE_STATION)) | 1295 | (bss_desc->bss_mode != NL80211_IFTYPE_STATION)) |
1296 | return -1; | 1296 | return -1; |
1297 | 1297 | ||
1298 | if (ISSUPP_11ACENABLED(priv->adapter->fw_cap_info) && | ||
1299 | !bss_desc->disable_11n && !bss_desc->disable_11ac && | ||
1300 | (priv->adapter->config_bands & BAND_GAC || | ||
1301 | priv->adapter->config_bands & BAND_AAC)) | ||
1302 | mwifiex_set_11ac_ba_params(priv); | ||
1303 | else | ||
1304 | mwifiex_set_ba_params(priv); | ||
1305 | |||
1298 | memcpy(¤t_bssid, | 1306 | memcpy(¤t_bssid, |
1299 | &priv->curr_bss_params.bss_descriptor.mac_address, | 1307 | &priv->curr_bss_params.bss_descriptor.mac_address, |
1300 | sizeof(current_bssid)); | 1308 | sizeof(current_bssid)); |
@@ -1323,6 +1331,13 @@ mwifiex_adhoc_start(struct mwifiex_private *priv, | |||
1323 | dev_dbg(priv->adapter->dev, "info: curr_bss_params.band = %d\n", | 1331 | dev_dbg(priv->adapter->dev, "info: curr_bss_params.band = %d\n", |
1324 | priv->curr_bss_params.band); | 1332 | priv->curr_bss_params.band); |
1325 | 1333 | ||
1334 | if (ISSUPP_11ACENABLED(priv->adapter->fw_cap_info) && | ||
1335 | (priv->adapter->config_bands & BAND_GAC || | ||
1336 | priv->adapter->config_bands & BAND_AAC)) | ||
1337 | mwifiex_set_11ac_ba_params(priv); | ||
1338 | else | ||
1339 | mwifiex_set_ba_params(priv); | ||
1340 | |||
1326 | return mwifiex_send_cmd_sync(priv, HostCmd_CMD_802_11_AD_HOC_START, | 1341 | return mwifiex_send_cmd_sync(priv, HostCmd_CMD_802_11_AD_HOC_START, |
1327 | HostCmd_ACT_GEN_SET, 0, adhoc_ssid); | 1342 | HostCmd_ACT_GEN_SET, 0, adhoc_ssid); |
1328 | } | 1343 | } |
@@ -1356,6 +1371,14 @@ int mwifiex_adhoc_join(struct mwifiex_private *priv, | |||
1356 | return -1; | 1371 | return -1; |
1357 | } | 1372 | } |
1358 | 1373 | ||
1374 | if (ISSUPP_11ACENABLED(priv->adapter->fw_cap_info) && | ||
1375 | !bss_desc->disable_11n && !bss_desc->disable_11ac && | ||
1376 | (priv->adapter->config_bands & BAND_GAC || | ||
1377 | priv->adapter->config_bands & BAND_AAC)) | ||
1378 | mwifiex_set_11ac_ba_params(priv); | ||
1379 | else | ||
1380 | mwifiex_set_ba_params(priv); | ||
1381 | |||
1359 | dev_dbg(priv->adapter->dev, "info: curr_bss_params.channel = %d\n", | 1382 | dev_dbg(priv->adapter->dev, "info: curr_bss_params.channel = %d\n", |
1360 | priv->curr_bss_params.bss_descriptor.channel); | 1383 | priv->curr_bss_params.bss_descriptor.channel); |
1361 | dev_dbg(priv->adapter->dev, "info: curr_bss_params.band = %c\n", | 1384 | dev_dbg(priv->adapter->dev, "info: curr_bss_params.band = %c\n", |
diff --git a/drivers/net/wireless/mwifiex/main.h b/drivers/net/wireless/mwifiex/main.h index d03299808ffc..cab8a8530944 100644 --- a/drivers/net/wireless/mwifiex/main.h +++ b/drivers/net/wireless/mwifiex/main.h | |||
@@ -925,6 +925,7 @@ mwifiex_set_wmm_params(struct mwifiex_private *priv, | |||
925 | struct mwifiex_uap_bss_param *bss_cfg, | 925 | struct mwifiex_uap_bss_param *bss_cfg, |
926 | struct cfg80211_ap_settings *params); | 926 | struct cfg80211_ap_settings *params); |
927 | void mwifiex_set_ba_params(struct mwifiex_private *priv); | 927 | void mwifiex_set_ba_params(struct mwifiex_private *priv); |
928 | void mwifiex_set_11ac_ba_params(struct mwifiex_private *priv); | ||
928 | 929 | ||
929 | /* | 930 | /* |
930 | * This function checks if the queuing is RA based or not. | 931 | * This function checks if the queuing is RA based or not. |