diff options
author | Ivo van Doorn <ivdoorn@gmail.com> | 2010-08-06 14:46:19 -0400 |
---|---|---|
committer | John W. Linville <linville@tuxdriver.com> | 2010-08-16 15:26:42 -0400 |
commit | 84804cdca043e2315bf5eae60807ac105929073f (patch) | |
tree | ba663e2f926f322f55593d4f3adf7d8286c83a05 | |
parent | 7e613e1666d59b5364f7918b3427bf328ac5f9ca (diff) |
rt2x00: Set MIMO PS flag in tx descriptor for STAs in dynamic SMPS mode
Signed-off-by: Helmut Schaa <helmut.schaa@googlemail.com>
Signed-off-by: Ivo van Doorn <IvDoorn@gmail.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
-rw-r--r-- | drivers/net/wireless/rt2x00/rt2800lib.c | 3 | ||||
-rw-r--r-- | drivers/net/wireless/rt2x00/rt2x00ht.c | 10 | ||||
-rw-r--r-- | drivers/net/wireless/rt2x00/rt2x00queue.h | 2 |
3 files changed, 14 insertions, 1 deletions
diff --git a/drivers/net/wireless/rt2x00/rt2800lib.c b/drivers/net/wireless/rt2x00/rt2800lib.c index b66e0fd8f0f..833b1575129 100644 --- a/drivers/net/wireless/rt2x00/rt2800lib.c +++ b/drivers/net/wireless/rt2x00/rt2800lib.c | |||
@@ -437,7 +437,8 @@ void rt2800_write_txwi(__le32 *txwi, struct txentry_desc *txdesc) | |||
437 | rt2x00_desc_read(txwi, 0, &word); | 437 | rt2x00_desc_read(txwi, 0, &word); |
438 | rt2x00_set_field32(&word, TXWI_W0_FRAG, | 438 | rt2x00_set_field32(&word, TXWI_W0_FRAG, |
439 | test_bit(ENTRY_TXD_MORE_FRAG, &txdesc->flags)); | 439 | test_bit(ENTRY_TXD_MORE_FRAG, &txdesc->flags)); |
440 | rt2x00_set_field32(&word, TXWI_W0_MIMO_PS, 0); | 440 | rt2x00_set_field32(&word, TXWI_W0_MIMO_PS, |
441 | test_bit(ENTRY_TXD_HT_MIMO_PS, &txdesc->flags)); | ||
441 | rt2x00_set_field32(&word, TXWI_W0_CF_ACK, 0); | 442 | rt2x00_set_field32(&word, TXWI_W0_CF_ACK, 0); |
442 | rt2x00_set_field32(&word, TXWI_W0_TS, | 443 | rt2x00_set_field32(&word, TXWI_W0_TS, |
443 | test_bit(ENTRY_TXD_REQ_TIMESTAMP, &txdesc->flags)); | 444 | test_bit(ENTRY_TXD_REQ_TIMESTAMP, &txdesc->flags)); |
diff --git a/drivers/net/wireless/rt2x00/rt2x00ht.c b/drivers/net/wireless/rt2x00/rt2x00ht.c index c004cd3a884..ad3c7ff4837 100644 --- a/drivers/net/wireless/rt2x00/rt2x00ht.c +++ b/drivers/net/wireless/rt2x00/rt2x00ht.c | |||
@@ -54,6 +54,16 @@ void rt2x00ht_create_tx_descriptor(struct queue_entry *entry, | |||
54 | */ | 54 | */ |
55 | if (txrate->flags & IEEE80211_TX_RC_MCS) { | 55 | if (txrate->flags & IEEE80211_TX_RC_MCS) { |
56 | txdesc->mcs = txrate->idx; | 56 | txdesc->mcs = txrate->idx; |
57 | |||
58 | /* | ||
59 | * MIMO PS should be set to 1 for STA's using dynamic SM PS | ||
60 | * when using more then one tx stream (>MCS7). | ||
61 | */ | ||
62 | if (tx_info->control.sta && txdesc->mcs > 7 && | ||
63 | (tx_info->control.sta->ht_cap.cap & | ||
64 | (WLAN_HT_CAP_SM_PS_DYNAMIC << | ||
65 | IEEE80211_HT_CAP_SM_PS_SHIFT))) | ||
66 | __set_bit(ENTRY_TXD_HT_MIMO_PS, &txdesc->flags); | ||
57 | } else { | 67 | } else { |
58 | txdesc->mcs = rt2x00_get_rate_mcs(hwrate->mcs); | 68 | txdesc->mcs = rt2x00_get_rate_mcs(hwrate->mcs); |
59 | if (txrate->flags & IEEE80211_TX_RC_USE_SHORT_PREAMBLE) | 69 | if (txrate->flags & IEEE80211_TX_RC_USE_SHORT_PREAMBLE) |
diff --git a/drivers/net/wireless/rt2x00/rt2x00queue.h b/drivers/net/wireless/rt2x00/rt2x00queue.h index 38b47919c86..2d3bf843735 100644 --- a/drivers/net/wireless/rt2x00/rt2x00queue.h +++ b/drivers/net/wireless/rt2x00/rt2x00queue.h | |||
@@ -268,6 +268,7 @@ struct txdone_entry_desc { | |||
268 | * @ENTRY_TXD_HT_AMPDU: This frame is part of an AMPDU. | 268 | * @ENTRY_TXD_HT_AMPDU: This frame is part of an AMPDU. |
269 | * @ENTRY_TXD_HT_BW_40: Use 40MHz Bandwidth. | 269 | * @ENTRY_TXD_HT_BW_40: Use 40MHz Bandwidth. |
270 | * @ENTRY_TXD_HT_SHORT_GI: Use short GI. | 270 | * @ENTRY_TXD_HT_SHORT_GI: Use short GI. |
271 | * @ENTRY_TXD_HT_MIMO_PS: The receiving STA is in dynamic SM PS mode. | ||
271 | */ | 272 | */ |
272 | enum txentry_desc_flags { | 273 | enum txentry_desc_flags { |
273 | ENTRY_TXD_RTS_FRAME, | 274 | ENTRY_TXD_RTS_FRAME, |
@@ -286,6 +287,7 @@ enum txentry_desc_flags { | |||
286 | ENTRY_TXD_HT_AMPDU, | 287 | ENTRY_TXD_HT_AMPDU, |
287 | ENTRY_TXD_HT_BW_40, | 288 | ENTRY_TXD_HT_BW_40, |
288 | ENTRY_TXD_HT_SHORT_GI, | 289 | ENTRY_TXD_HT_SHORT_GI, |
290 | ENTRY_TXD_HT_MIMO_PS, | ||
289 | }; | 291 | }; |
290 | 292 | ||
291 | /** | 293 | /** |