mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-05-07 20:58:14 -04:00
wifi: mt76: mt7925: add EHT preamble puncturing
Add mt7925 EHT preamble puncturing. Signed-off-by: Allan Wang <allan.wang@mediatek.com> Link: https://patch.msgid.link/20250401083525.2734333-1-allan.wang@mediatek.com Signed-off-by: Felix Fietkau <nbd@nbd.name>
This commit is contained in:
committed by
Felix Fietkau
parent
8822411986
commit
cadebdad95
@@ -1371,6 +1371,7 @@ enum {
|
||||
UNI_BSS_INFO_OFFLOAD = 25,
|
||||
UNI_BSS_INFO_MLD = 26,
|
||||
UNI_BSS_INFO_PM_DISABLE = 27,
|
||||
UNI_BSS_INFO_EHT = 30,
|
||||
};
|
||||
|
||||
enum {
|
||||
|
||||
@@ -1865,6 +1865,10 @@ mt7925_change_chanctx(struct ieee80211_hw *hw,
|
||||
link_conf = mt792x_vif_to_bss_conf(vif, mconf->link_id);
|
||||
mt7925_mcu_set_chctx(mvif->phy->mt76, &mconf->mt76,
|
||||
link_conf, ctx);
|
||||
|
||||
if (changed & IEEE80211_CHANCTX_CHANGE_PUNCTURING)
|
||||
mt7925_mcu_set_eht_pp(mvif->phy->mt76, &mconf->mt76,
|
||||
link_conf, ctx);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1954,8 +1958,10 @@ static void mt7925_link_info_changed(struct ieee80211_hw *hw,
|
||||
struct mt792x_phy *phy = mt792x_hw_phy(hw);
|
||||
struct mt792x_dev *dev = mt792x_hw_dev(hw);
|
||||
struct mt792x_bss_conf *mconf;
|
||||
struct ieee80211_bss_conf *link_conf;
|
||||
|
||||
mconf = mt792x_vif_to_link(mvif, info->link_id);
|
||||
link_conf = mt792x_vif_to_bss_conf(vif, mconf->link_id);
|
||||
|
||||
mt792x_mutex_acquire(dev);
|
||||
|
||||
@@ -1997,6 +2003,10 @@ static void mt7925_link_info_changed(struct ieee80211_hw *hw,
|
||||
mvif->mlo_pm_state = MT792x_MLO_CHANGED_PS;
|
||||
}
|
||||
|
||||
if (changed & IEEE80211_CHANCTX_CHANGE_PUNCTURING)
|
||||
mt7925_mcu_set_eht_pp(mvif->phy->mt76, &mconf->mt76,
|
||||
link_conf, NULL);
|
||||
|
||||
mt792x_mutex_release(dev);
|
||||
}
|
||||
|
||||
|
||||
@@ -2298,6 +2298,40 @@ __mt7925_mcu_alloc_bss_req(struct mt76_dev *dev, struct mt76_vif_link *mvif, int
|
||||
return skb;
|
||||
}
|
||||
|
||||
static
|
||||
void mt7925_mcu_bss_eht_tlv(struct sk_buff *skb, struct mt76_phy *phy,
|
||||
struct ieee80211_bss_conf *link_conf,
|
||||
struct ieee80211_chanctx_conf *ctx)
|
||||
{
|
||||
struct cfg80211_chan_def *chandef = ctx ? &ctx->def :
|
||||
&link_conf->chanreq.oper;
|
||||
|
||||
struct bss_eht_tlv *req;
|
||||
struct tlv *tlv;
|
||||
|
||||
tlv = mt76_connac_mcu_add_tlv(skb, UNI_BSS_INFO_EHT, sizeof(*req));
|
||||
req = (struct bss_eht_tlv *)tlv;
|
||||
req->is_eth_dscb_present = chandef->punctured ? 1 : 0;
|
||||
req->eht_dis_sub_chan_bitmap = cpu_to_le16(chandef->punctured);
|
||||
}
|
||||
|
||||
int mt7925_mcu_set_eht_pp(struct mt76_phy *phy, struct mt76_vif_link *mvif,
|
||||
struct ieee80211_bss_conf *link_conf,
|
||||
struct ieee80211_chanctx_conf *ctx)
|
||||
{
|
||||
struct sk_buff *skb;
|
||||
|
||||
skb = __mt7925_mcu_alloc_bss_req(phy->dev, mvif,
|
||||
MT7925_BSS_UPDATE_MAX_SIZE);
|
||||
if (IS_ERR(skb))
|
||||
return PTR_ERR(skb);
|
||||
|
||||
mt7925_mcu_bss_eht_tlv(skb, phy, link_conf, ctx);
|
||||
|
||||
return mt76_mcu_skb_send_msg(phy->dev, skb,
|
||||
MCU_UNI_CMD(BSS_INFO_UPDATE), true);
|
||||
}
|
||||
|
||||
int mt7925_mcu_set_chctx(struct mt76_phy *phy, struct mt76_vif_link *mvif,
|
||||
struct ieee80211_bss_conf *link_conf,
|
||||
struct ieee80211_chanctx_conf *ctx)
|
||||
|
||||
@@ -372,6 +372,19 @@ struct bss_mld_tlv {
|
||||
u8 __rsv[3];
|
||||
} __packed;
|
||||
|
||||
struct bss_eht_tlv {
|
||||
__le16 tag;
|
||||
__le16 len;
|
||||
u8 is_eht_op_present;
|
||||
u8 is_eth_dscb_present;
|
||||
u8 eht_ctrl;
|
||||
u8 eht_ccfs0;
|
||||
u8 eht_ccfs1;
|
||||
u8 pad1;
|
||||
__le16 eht_dis_sub_chan_bitmap;
|
||||
u8 pad2[4];
|
||||
} __packed;
|
||||
|
||||
struct sta_rec_ba_uni {
|
||||
__le16 tag;
|
||||
__le16 len;
|
||||
@@ -642,6 +655,9 @@ int mt7925_mcu_set_radio_en(struct mt792x_phy *phy, bool enable);
|
||||
int mt7925_mcu_set_chctx(struct mt76_phy *phy, struct mt76_vif_link *mvif,
|
||||
struct ieee80211_bss_conf *link_conf,
|
||||
struct ieee80211_chanctx_conf *ctx);
|
||||
int mt7925_mcu_set_eht_pp(struct mt76_phy *phy, struct mt76_vif_link *mvif,
|
||||
struct ieee80211_bss_conf *link_conf,
|
||||
struct ieee80211_chanctx_conf *ctx);
|
||||
int mt7925_mcu_set_rate_txpower(struct mt76_phy *phy);
|
||||
int mt7925_mcu_update_arp_filter(struct mt76_dev *dev,
|
||||
struct ieee80211_bss_conf *link_conf);
|
||||
|
||||
Reference in New Issue
Block a user