diff options
author | Ryder Lee <ryder.lee@mediatek.com> | 2022-10-25 03:31:00 +0300 |
---|---|---|
committer | Felix Fietkau <nbd@nbd.name> | 2022-11-11 13:38:25 +0300 |
commit | 3365c129f73c5b9ca6ef5f5981a43e86ea7c9d6e (patch) | |
tree | 4fa30902d412c02a8bc9a55452c990afbe256ba0 | |
parent | 94b335fa88e10067f6bd0ed3306135a4e7031549 (diff) |
wifi: mt76: mt7915: enable use_cts_prot support
This adds selectable RTC/CTS enablement for each interface.
Signed-off-by: Ryder Lee <ryder.lee@mediatek.com>
Signed-off-by: Felix Fietkau <nbd@nbd.name>
-rw-r--r-- | mt7915/mac.c | 13 | ||||
-rw-r--r-- | mt7915/main.c | 3 | ||||
-rw-r--r-- | mt7915/mt7915.h | 2 |
3 files changed, 18 insertions, 0 deletions
diff --git a/mt7915/mac.c b/mt7915/mac.c index c827c57b..0ec9a619 100644 --- a/mt7915/mac.c +++ b/mt7915/mac.c @@ -231,6 +231,19 @@ static void mt7915_mac_sta_poll(struct mt7915_dev *dev) rcu_read_unlock(); } +void mt7915_mac_enable_rtscts(struct mt7915_dev *dev, + struct ieee80211_vif *vif, bool enable) +{ + struct mt7915_vif *mvif = (struct mt7915_vif *)vif->drv_priv; + u32 addr; + + addr = mt7915_mac_wtbl_lmac_addr(dev, mvif->sta.wcid.idx, 5); + if (enable) + mt76_set(dev, addr, BIT(5)); + else + mt76_clear(dev, addr, BIT(5)); +} + static int mt7915_mac_fill_rx(struct mt7915_dev *dev, struct sk_buff *skb) { diff --git a/mt7915/main.c b/mt7915/main.c index 2ba30960..58daa084 100644 --- a/mt7915/main.c +++ b/mt7915/main.c @@ -597,6 +597,9 @@ static void mt7915_bss_info_changed(struct ieee80211_hw *hw, mt7915_mcu_add_obss_spr(dev, vif, info->he_obss_pd.enable); } + if (changed & BSS_CHANGED_ERP_CTS_PROT) + mt7915_mac_enable_rtscts(dev, vif, info->use_cts_prot); + if (changed & BSS_CHANGED_ERP_SLOT) { int slottime = info->use_short_slot ? 9 : 20; diff --git a/mt7915/mt7915.h b/mt7915/mt7915.h index e6ae02eb..98c13b6c 100644 --- a/mt7915/mt7915.h +++ b/mt7915/mt7915.h @@ -552,6 +552,8 @@ bool mt7915_mac_wtbl_update(struct mt7915_dev *dev, int idx, u32 mask); void mt7915_mac_reset_counters(struct mt7915_phy *phy); void mt7915_mac_cca_stats_reset(struct mt7915_phy *phy); void mt7915_mac_enable_nf(struct mt7915_dev *dev, bool ext_phy); +void mt7915_mac_enable_rtscts(struct mt7915_dev *dev, + struct ieee80211_vif *vif, bool enable); void mt7915_mac_write_txwi(struct mt76_dev *dev, __le32 *txwi, struct sk_buff *skb, struct mt76_wcid *wcid, int pid, struct ieee80211_key_conf *key, |