mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-10-06 08:46:46 +00:00
wifi: mt76: mt7996: enable EHT support in firmware
Add sta_rec_eht command and extend phymode setting. Co-developed-by: Peter Chiu <chui-hao.chiu@mediatek.com> Signed-off-by: Peter Chiu <chui-hao.chiu@mediatek.com> Signed-off-by: Shayne Chen <shayne.chen@mediatek.com> Signed-off-by: Felix Fietkau <nbd@nbd.name>
This commit is contained in:
parent
80f5a31d28
commit
92aa2da9fa
2 changed files with 52 additions and 5 deletions
|
@ -771,9 +771,8 @@ mt7996_mcu_bss_basic_tlv(struct sk_buff *skb,
|
|||
bss->dtim_period = vif->bss_conf.dtim_period;
|
||||
bss->phymode = mt76_connac_get_phy_mode(phy, vif,
|
||||
chandef->chan->band, NULL);
|
||||
|
||||
if (chandef->chan->band == NL80211_BAND_6GHZ)
|
||||
bss->phymode_ext |= PHY_MODE_AX_6G;
|
||||
bss->phymode_ext = mt76_connac_get_phy_mode_ext(phy, vif,
|
||||
chandef->chan->band);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
@ -951,6 +950,35 @@ mt7996_mcu_sta_he_6g_tlv(struct sk_buff *skb, struct ieee80211_sta *sta)
|
|||
he_6g->capa = sta->deflink.he_6ghz_capa.capa;
|
||||
}
|
||||
|
||||
static void
|
||||
mt7996_mcu_sta_eht_tlv(struct sk_buff *skb, struct ieee80211_sta *sta)
|
||||
{
|
||||
struct ieee80211_eht_mcs_nss_supp *mcs_map;
|
||||
struct ieee80211_eht_cap_elem_fixed *elem;
|
||||
struct sta_rec_eht *eht;
|
||||
struct tlv *tlv;
|
||||
|
||||
if (!sta->deflink.eht_cap.has_eht)
|
||||
return;
|
||||
|
||||
mcs_map = &sta->deflink.eht_cap.eht_mcs_nss_supp;
|
||||
elem = &sta->deflink.eht_cap.eht_cap_elem;
|
||||
|
||||
tlv = mt76_connac_mcu_add_tlv(skb, STA_REC_EHT, sizeof(*eht));
|
||||
|
||||
eht = (struct sta_rec_eht *)tlv;
|
||||
eht->tid_bitmap = 0xff;
|
||||
eht->mac_cap = cpu_to_le16(*(u16 *)elem->mac_cap_info);
|
||||
eht->phy_cap = cpu_to_le64(*(u64 *)elem->phy_cap_info);
|
||||
eht->phy_cap_ext = cpu_to_le64(elem->phy_cap_info[8]);
|
||||
|
||||
if (sta->deflink.bandwidth == IEEE80211_STA_RX_BW_20)
|
||||
memcpy(eht->mcs_map_bw20, &mcs_map->only_20mhz, sizeof(eht->mcs_map_bw20));
|
||||
memcpy(eht->mcs_map_bw80, &mcs_map->bw._80, sizeof(eht->mcs_map_bw80));
|
||||
memcpy(eht->mcs_map_bw160, &mcs_map->bw._160, sizeof(eht->mcs_map_bw160));
|
||||
memcpy(eht->mcs_map_bw320, &mcs_map->bw._320, sizeof(eht->mcs_map_bw320));
|
||||
}
|
||||
|
||||
static void
|
||||
mt7996_mcu_sta_ht_tlv(struct sk_buff *skb, struct ieee80211_sta *sta)
|
||||
{
|
||||
|
@ -1436,8 +1464,9 @@ mt7996_mcu_sta_rate_ctrl_tlv(struct sk_buff *skb, struct mt7996_dev *dev,
|
|||
ra->auto_rate = true;
|
||||
ra->phy_mode = mt76_connac_get_phy_mode(mphy, vif, band, sta);
|
||||
ra->channel = chandef->chan->hw_value;
|
||||
ra->bw = sta->deflink.bandwidth;
|
||||
ra->phy.bw = sta->deflink.bandwidth;
|
||||
ra->bw = (sta->deflink.bandwidth == IEEE80211_STA_RX_BW_320) ?
|
||||
CMD_CBW_320MHZ : sta->deflink.bandwidth;
|
||||
ra->phy.bw = ra->bw;
|
||||
ra->mmps_mode = mt7996_mcu_get_mmps_mode(sta->deflink.smps_mode);
|
||||
|
||||
if (supp_rate) {
|
||||
|
@ -1619,6 +1648,8 @@ int mt7996_mcu_add_sta(struct mt7996_dev *dev, struct ieee80211_vif *vif,
|
|||
mt7996_mcu_sta_he_tlv(skb, sta);
|
||||
/* starec he 6g*/
|
||||
mt7996_mcu_sta_he_6g_tlv(skb, sta);
|
||||
/* starec eht */
|
||||
mt7996_mcu_sta_eht_tlv(skb, sta);
|
||||
/* TODO: starec muru */
|
||||
/* starec bfee */
|
||||
mt7996_mcu_sta_bfee_tlv(dev, skb, vif, sta);
|
||||
|
|
|
@ -347,6 +347,21 @@ struct sta_rec_ba_uni {
|
|||
u8 __rsv[3];
|
||||
} __packed;
|
||||
|
||||
struct sta_rec_eht {
|
||||
__le16 tag;
|
||||
__le16 len;
|
||||
u8 tid_bitmap;
|
||||
u8 _rsv;
|
||||
__le16 mac_cap;
|
||||
__le64 phy_cap;
|
||||
__le64 phy_cap_ext;
|
||||
u8 mcs_map_bw20[4];
|
||||
u8 mcs_map_bw80[3];
|
||||
u8 mcs_map_bw160[3];
|
||||
u8 mcs_map_bw320[3];
|
||||
u8 _rsv2[3];
|
||||
} __packed;
|
||||
|
||||
struct sec_key_uni {
|
||||
__le16 wlan_idx;
|
||||
u8 mgmt_prot;
|
||||
|
@ -554,6 +569,7 @@ enum {
|
|||
sizeof(struct sta_rec_sec) + \
|
||||
sizeof(struct sta_rec_ra_fixed) + \
|
||||
sizeof(struct sta_rec_he_6g_capa) + \
|
||||
sizeof(struct sta_rec_eht) + \
|
||||
sizeof(struct sta_rec_hdrt) + \
|
||||
sizeof(struct sta_rec_hdr_trans) + \
|
||||
sizeof(struct tlv))
|
||||
|
|
Loading…
Reference in a new issue