mirror of
https://github.com/torvalds/linux.git
synced 2026-08-05 06:47:51 +02: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:
parent
8822411986
commit
cadebdad95
|
|
@ -1371,6 +1371,7 @@ enum {
|
||||||
UNI_BSS_INFO_OFFLOAD = 25,
|
UNI_BSS_INFO_OFFLOAD = 25,
|
||||||
UNI_BSS_INFO_MLD = 26,
|
UNI_BSS_INFO_MLD = 26,
|
||||||
UNI_BSS_INFO_PM_DISABLE = 27,
|
UNI_BSS_INFO_PM_DISABLE = 27,
|
||||||
|
UNI_BSS_INFO_EHT = 30,
|
||||||
};
|
};
|
||||||
|
|
||||||
enum {
|
enum {
|
||||||
|
|
|
||||||
|
|
@ -1865,6 +1865,10 @@ mt7925_change_chanctx(struct ieee80211_hw *hw,
|
||||||
link_conf = mt792x_vif_to_bss_conf(vif, mconf->link_id);
|
link_conf = mt792x_vif_to_bss_conf(vif, mconf->link_id);
|
||||||
mt7925_mcu_set_chctx(mvif->phy->mt76, &mconf->mt76,
|
mt7925_mcu_set_chctx(mvif->phy->mt76, &mconf->mt76,
|
||||||
link_conf, ctx);
|
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_phy *phy = mt792x_hw_phy(hw);
|
||||||
struct mt792x_dev *dev = mt792x_hw_dev(hw);
|
struct mt792x_dev *dev = mt792x_hw_dev(hw);
|
||||||
struct mt792x_bss_conf *mconf;
|
struct mt792x_bss_conf *mconf;
|
||||||
|
struct ieee80211_bss_conf *link_conf;
|
||||||
|
|
||||||
mconf = mt792x_vif_to_link(mvif, info->link_id);
|
mconf = mt792x_vif_to_link(mvif, info->link_id);
|
||||||
|
link_conf = mt792x_vif_to_bss_conf(vif, mconf->link_id);
|
||||||
|
|
||||||
mt792x_mutex_acquire(dev);
|
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;
|
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);
|
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;
|
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,
|
int mt7925_mcu_set_chctx(struct mt76_phy *phy, struct mt76_vif_link *mvif,
|
||||||
struct ieee80211_bss_conf *link_conf,
|
struct ieee80211_bss_conf *link_conf,
|
||||||
struct ieee80211_chanctx_conf *ctx)
|
struct ieee80211_chanctx_conf *ctx)
|
||||||
|
|
|
||||||
|
|
@ -372,6 +372,19 @@ struct bss_mld_tlv {
|
||||||
u8 __rsv[3];
|
u8 __rsv[3];
|
||||||
} __packed;
|
} __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 {
|
struct sta_rec_ba_uni {
|
||||||
__le16 tag;
|
__le16 tag;
|
||||||
__le16 len;
|
__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,
|
int mt7925_mcu_set_chctx(struct mt76_phy *phy, struct mt76_vif_link *mvif,
|
||||||
struct ieee80211_bss_conf *link_conf,
|
struct ieee80211_bss_conf *link_conf,
|
||||||
struct ieee80211_chanctx_conf *ctx);
|
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_set_rate_txpower(struct mt76_phy *phy);
|
||||||
int mt7925_mcu_update_arp_filter(struct mt76_dev *dev,
|
int mt7925_mcu_update_arp_filter(struct mt76_dev *dev,
|
||||||
struct ieee80211_bss_conf *link_conf);
|
struct ieee80211_bss_conf *link_conf);
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user