mirror of
https://github.com/openwrt/openwrt.git
synced 2024-12-23 15:32:33 +00:00
703515f889
Includes the following changes:9edff13abd
mac80211: disable potentially harmful PS software retry for A-MPDU sessions75216a76b0
mac80211: backport upstream fix for CSA in IBSS mode368cc8ef47
mac80211: update brcmfmac backporting brcmf_err cleanups66a63d25c4
mac80211: fix build on linux 3.189eacb9d7fc
rt2x00: mt7620: lots of improvementsfd94fa61a7
mac80211: brcmfmac: update Raspberry Pi patches for linux 4.9649e766a64
mac80211: update to wireless-testing 2017-01-3147540afa5d
ath9k: add a warning to the tx99 config optionb367eef21d
mac80211: rt2x00: add support for external LNA on MT76209200e168f2
mac80211: move (& update) upstream accepted brcmfmac patches Signed-off-by: Felix Fietkau <nbd@nbd.name>
83 lines
2.8 KiB
Diff
83 lines
2.8 KiB
Diff
From: Chaitanya T K <chaitanya.mgit@gmail.com>
|
|
Date: Mon, 27 Jun 2016 15:23:26 +0530
|
|
Subject: [PATCH] mac80211: minstrel: Enable STBC and LDPC for VHT Rates
|
|
|
|
If peer support reception of STBC and LDPC, enable them for better
|
|
performance.
|
|
|
|
Signed-off-by: Chaitanya TK <chaitanya.mgit@gmail.com>
|
|
---
|
|
|
|
--- a/include/linux/ieee80211.h
|
|
+++ b/include/linux/ieee80211.h
|
|
@@ -1553,6 +1553,7 @@ struct ieee80211_vht_operation {
|
|
#define IEEE80211_VHT_CAP_RXSTBC_3 0x00000300
|
|
#define IEEE80211_VHT_CAP_RXSTBC_4 0x00000400
|
|
#define IEEE80211_VHT_CAP_RXSTBC_MASK 0x00000700
|
|
+#define IEEE80211_VHT_CAP_RXSTBC_SHIFT 8
|
|
#define IEEE80211_VHT_CAP_SU_BEAMFORMER_CAPABLE 0x00000800
|
|
#define IEEE80211_VHT_CAP_SU_BEAMFORMEE_CAPABLE 0x00001000
|
|
#define IEEE80211_VHT_CAP_BEAMFORMEE_STS_SHIFT 13
|
|
--- a/net/mac80211/rc80211_minstrel_ht.c
|
|
+++ b/net/mac80211/rc80211_minstrel_ht.c
|
|
@@ -1130,7 +1130,7 @@ minstrel_ht_update_caps(void *priv, stru
|
|
struct minstrel_ht_sta_priv *msp = priv_sta;
|
|
struct minstrel_ht_sta *mi = &msp->ht;
|
|
struct ieee80211_mcs_info *mcs = &sta->ht_cap.mcs;
|
|
- u16 sta_cap = sta->ht_cap.cap;
|
|
+ u16 ht_cap = sta->ht_cap.cap;
|
|
struct ieee80211_sta_vht_cap *vht_cap = &sta->vht_cap;
|
|
struct sta_info *sinfo = container_of(sta, struct sta_info, sta);
|
|
int use_vht;
|
|
@@ -1138,6 +1138,7 @@ minstrel_ht_update_caps(void *priv, stru
|
|
int ack_dur;
|
|
int stbc;
|
|
int i;
|
|
+ bool ldpc = false;
|
|
|
|
/* fall back to the old minstrel for legacy stations */
|
|
if (!sta->ht_cap.ht_supported)
|
|
@@ -1175,16 +1176,24 @@ minstrel_ht_update_caps(void *priv, stru
|
|
}
|
|
mi->sample_tries = 4;
|
|
|
|
- /* TODO tx_flags for vht - ATM the RC API is not fine-grained enough */
|
|
if (!use_vht) {
|
|
- stbc = (sta_cap & IEEE80211_HT_CAP_RX_STBC) >>
|
|
+ stbc = (ht_cap & IEEE80211_HT_CAP_RX_STBC) >>
|
|
IEEE80211_HT_CAP_RX_STBC_SHIFT;
|
|
- mi->tx_flags |= stbc << IEEE80211_TX_CTL_STBC_SHIFT;
|
|
|
|
- if (sta_cap & IEEE80211_HT_CAP_LDPC_CODING)
|
|
- mi->tx_flags |= IEEE80211_TX_CTL_LDPC;
|
|
+ if (ht_cap & IEEE80211_HT_CAP_LDPC_CODING)
|
|
+ ldpc = true;
|
|
+ } else {
|
|
+ stbc = (vht_cap->cap & IEEE80211_VHT_CAP_RXSTBC_MASK) >>
|
|
+ IEEE80211_VHT_CAP_RXSTBC_SHIFT;
|
|
+
|
|
+ if (vht_cap->cap & IEEE80211_VHT_CAP_RXLDPC)
|
|
+ ldpc = true;
|
|
}
|
|
|
|
+ mi->tx_flags |= stbc << IEEE80211_TX_CTL_STBC_SHIFT;
|
|
+ if (ldpc)
|
|
+ mi->tx_flags |= IEEE80211_TX_CTL_LDPC;
|
|
+
|
|
for (i = 0; i < ARRAY_SIZE(mi->groups); i++) {
|
|
u32 gflags = minstrel_mcs_groups[i].flags;
|
|
int bw, nss;
|
|
@@ -1197,10 +1206,10 @@ minstrel_ht_update_caps(void *priv, stru
|
|
|
|
if (gflags & IEEE80211_TX_RC_SHORT_GI) {
|
|
if (gflags & IEEE80211_TX_RC_40_MHZ_WIDTH) {
|
|
- if (!(sta_cap & IEEE80211_HT_CAP_SGI_40))
|
|
+ if (!(ht_cap & IEEE80211_HT_CAP_SGI_40))
|
|
continue;
|
|
} else {
|
|
- if (!(sta_cap & IEEE80211_HT_CAP_SGI_20))
|
|
+ if (!(ht_cap & IEEE80211_HT_CAP_SGI_20))
|
|
continue;
|
|
}
|
|
}
|