mt76: mt7915: add spatial reuse support
Enable or disable OBSS PD when the bss config changes or we assoc to an AP that broadcasts the IE. With this patch, we can get ~20% gain in OBSS OTA environment. Tested-by: Evelyn Tsai <evelyn.tsai@mediatek.com> Signed-off-by: Ryder Lee <ryder.lee@mediatek.com> Signed-off-by: Felix Fietkau <nbd@nbd.name>
This commit is contained in:
Родитель
802b836a01
Коммит
06acdd380a
|
@ -437,8 +437,10 @@ static void mt7915_bss_info_changed(struct ieee80211_hw *hw,
|
|||
mt7915_mcu_add_sta(dev, vif, NULL, join);
|
||||
}
|
||||
|
||||
if (changed & BSS_CHANGED_ASSOC)
|
||||
if (changed & BSS_CHANGED_ASSOC) {
|
||||
mt7915_mcu_add_bss_info(phy, vif, info->assoc);
|
||||
mt7915_mcu_add_obss_spr(dev, vif, info->he_obss_pd.enable);
|
||||
}
|
||||
|
||||
if (changed & BSS_CHANGED_ERP_SLOT) {
|
||||
int slottime = info->use_short_slot ? 9 : 20;
|
||||
|
@ -458,6 +460,9 @@ static void mt7915_bss_info_changed(struct ieee80211_hw *hw,
|
|||
if (changed & (BSS_CHANGED_QOS | BSS_CHANGED_BEACON_ENABLED))
|
||||
mt7915_mcu_set_tx(dev, vif);
|
||||
|
||||
if (changed & BSS_CHANGED_HE_OBSS_PD)
|
||||
mt7915_mcu_add_obss_spr(dev, vif, info->he_obss_pd.enable);
|
||||
|
||||
if (changed & (BSS_CHANGED_BEACON |
|
||||
BSS_CHANGED_BEACON_ENABLED))
|
||||
mt7915_mcu_add_beacon(hw, vif, info->enable_beacon);
|
||||
|
|
|
@ -3159,3 +3159,28 @@ int mt7915_mcu_set_txbf_sounding(struct mt7915_dev *dev)
|
|||
return __mt76_mcu_send_msg(&dev->mt76, MCU_EXT_CMD_TXBF_ACTION,
|
||||
&req, sizeof(req), true);
|
||||
}
|
||||
|
||||
int mt7915_mcu_add_obss_spr(struct mt7915_dev *dev, struct ieee80211_vif *vif,
|
||||
bool enable)
|
||||
{
|
||||
#define MT_SPR_ENABLE 1
|
||||
struct mt7915_vif *mvif = (struct mt7915_vif *)vif->drv_priv;
|
||||
struct {
|
||||
u8 action;
|
||||
u8 arg_num;
|
||||
u8 band_idx;
|
||||
u8 status;
|
||||
u8 drop_tx_idx;
|
||||
u8 sta_idx; /* 256 sta */
|
||||
u8 rsv[2];
|
||||
u32 val;
|
||||
} __packed req = {
|
||||
.action = MT_SPR_ENABLE,
|
||||
.arg_num = 1,
|
||||
.band_idx = mvif->band_idx,
|
||||
.val = enable,
|
||||
};
|
||||
|
||||
return __mt76_mcu_send_msg(&dev->mt76, MCU_EXT_CMD_SET_SPR,
|
||||
&req, sizeof(req), true);
|
||||
}
|
||||
|
|
|
@ -212,6 +212,7 @@ enum {
|
|||
MCU_EXT_CMD_RATE_CTRL = 0x87,
|
||||
MCU_EXT_CMD_FW_DBG_CTRL = 0x95,
|
||||
MCU_EXT_CMD_SET_RDD_TH = 0x9d,
|
||||
MCU_EXT_CMD_SET_SPR = 0xa8,
|
||||
};
|
||||
|
||||
enum {
|
||||
|
|
|
@ -301,6 +301,8 @@ int mt7915_mcu_add_key(struct mt7915_dev *dev, struct ieee80211_vif *vif,
|
|||
enum set_key_cmd cmd);
|
||||
int mt7915_mcu_add_beacon(struct ieee80211_hw *hw, struct ieee80211_vif *vif,
|
||||
int enable);
|
||||
int mt7915_mcu_add_obss_spr(struct mt7915_dev *dev, struct ieee80211_vif *vif,
|
||||
bool enable);
|
||||
int mt7915_mcu_add_rate_ctrl(struct mt7915_dev *dev, struct ieee80211_vif *vif,
|
||||
struct ieee80211_sta *sta);
|
||||
int mt7915_mcu_add_smps(struct mt7915_dev *dev, struct ieee80211_vif *vif,
|
||||
|
|
Загрузка…
Ссылка в новой задаче