summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDmitry Tarnyagin <dmitry.tarnyagin@stericsson.com>2012-02-29 15:14:29 +0100
committerPhilippe Langlais <philippe.langlais@stericsson.com>2012-05-22 11:06:39 +0200
commit74ce5fb12b483f13663096a5d317c73cb99ea6da (patch)
tree56a62ad959156d092395e9b2f0653ceee4a21dd5
parentda3d13a635111dc6e9d0f69ff55fc06ce329d0b7 (diff)
cw1200: Enable Block ACK only for 11n BSS.
Driver tried to setup Block ACK not taking in account 11n capabilities of the BSS. It even tried to setup Block ACK for legacy 11g BSSes. Patch checks HT status of the current connection before enabling Block ACK. ST-Ericsson ID: 369354 Change-Id: I11515c4d70dbb572b1e2da6749ba123c3ca71751 Signed-off-by: Dmitry Tarnyagin <dmitry.tarnyagin@stericsson.com> Reviewed-on: http://gerrit.lud.stericsson.com/gerrit/36608 Reviewed-by: QABUILD Reviewed-by: Bartosz MARKOWSKI <bartosz.markowski@tieto.com> Tested-by: Bartosz MARKOWSKI <bartosz.markowski@tieto.com>
-rwxr-xr-xdrivers/staging/cw1200/ap.c8
-rw-r--r--drivers/staging/cw1200/main.c14
-rw-r--r--drivers/staging/cw1200/sta.c7
3 files changed, 16 insertions, 13 deletions
diff --git a/drivers/staging/cw1200/ap.c b/drivers/staging/cw1200/ap.c
index f328cff389e..25612eba1ca 100755
--- a/drivers/staging/cw1200/ap.c
+++ b/drivers/staging/cw1200/ap.c
@@ -457,6 +457,14 @@ void cw1200_bss_info_changed(struct ieee80211_hw *dev,
priv->setbssparams_done = true;
WARN_ON(wsm_set_beacon_wakeup_period(priv,
dtim_interval, listen_interval));
+ if (sta && cw1200_is_ht(&priv->ht_info)) {
+ ap_printk(KERN_DEBUG
+ "[STA] Enabling Block ACK\n");
+ WARN_ON(wsm_set_block_ack_policy(priv,
+ priv->ba_tid_mask,
+ priv->ba_tid_mask));
+ }
+
cw1200_set_pm(priv, &priv->powersave_mode);
if (priv->is_BT_Present)
diff --git a/drivers/staging/cw1200/main.c b/drivers/staging/cw1200/main.c
index e57519aa3fb..c8eb01b94e1 100644
--- a/drivers/staging/cw1200/main.c
+++ b/drivers/staging/cw1200/main.c
@@ -158,11 +158,8 @@ static struct ieee80211_supported_band cw1200_band_2ghz = {
.bitrates = cw1200_g_rates,
.n_bitrates = cw1200_g_rates_size,
.ht_cap = {
- .cap = IEEE80211_HT_CAP_SM_PS |
- IEEE80211_HT_CAP_GRN_FLD |
- /* HT Rx STBC: Rx support of one spatial stream */
- 0x0100 |
- IEEE80211_HT_CAP_DELAY_BA |
+ .cap = IEEE80211_HT_CAP_GRN_FLD |
+ (1 << IEEE80211_HT_CAP_RX_STBC_SHIFT) |
IEEE80211_HT_CAP_MAX_AMSDU,
.ht_supported = 1,
.ampdu_factor = IEEE80211_HT_MAX_AMPDU_8K,
@@ -182,11 +179,8 @@ static struct ieee80211_supported_band cw1200_band_5ghz = {
.bitrates = cw1200_a_rates,
.n_bitrates = cw1200_a_rates_size,
.ht_cap = {
- .cap = IEEE80211_HT_CAP_SM_PS |
- IEEE80211_HT_CAP_GRN_FLD |
- /* HT Rx STBC: Rx support of one spatial stream */
- 0x0100 |
- IEEE80211_HT_CAP_DELAY_BA |
+ .cap = IEEE80211_HT_CAP_GRN_FLD |
+ (1 << IEEE80211_HT_CAP_RX_STBC_SHIFT) |
IEEE80211_HT_CAP_MAX_AMSDU,
.ht_supported = 1,
.ampdu_factor = IEEE80211_HT_MAX_AMPDU_8K,
diff --git a/drivers/staging/cw1200/sta.c b/drivers/staging/cw1200/sta.c
index dd227bec2a3..bac6fa6a6a2 100644
--- a/drivers/staging/cw1200/sta.c
+++ b/drivers/staging/cw1200/sta.c
@@ -1279,6 +1279,9 @@ void cw1200_join_work(struct work_struct *work)
&priv->join_timeout, 3 * HZ);
cw1200_update_listening(priv, false);
+ /* BlockACK policy will be updated when assoc is done */
+ WARN_ON(wsm_set_block_ack_policy(priv,
+ 0, 0));
if (wsm_join(priv, &join)) {
memset(&priv->join_bssid[0],
0, sizeof(priv->join_bssid));
@@ -1291,8 +1294,6 @@ void cw1200_join_work(struct work_struct *work)
cw1200_queue_requeue(queue, priv->pending_frame_id);
priv->join_status = CW1200_JOIN_STATUS_STA;
}
- WARN_ON(wsm_set_block_ack_policy(priv,
- priv->ba_tid_mask, priv->ba_tid_mask));
cw1200_update_filtering(priv);
}
mutex_unlock(&priv->conf_mutex);
@@ -1355,7 +1356,7 @@ void cw1200_unjoin_work(struct work_struct *work)
cancel_delayed_work_sync(&priv->connection_loss_work);
cw1200_update_listening(priv, priv->listening);
WARN_ON(wsm_set_block_ack_policy(priv,
- priv->ba_tid_mask, priv->ba_tid_mask));
+ 0, 0));
cw1200_update_filtering(priv);
priv->setbssparams_done = false;
memset(&priv->association_mode, 0,