mirror of
https://github.com/outbackdingo/mt76.git
synced 2026-10-24 13:26:48 +00:00
wifi: mt76: mt7925: set mt7925_mcu_sta_key_tlv according to link id
configure mt7925_mcu_sta_key_tlv according to link id We created a link id field in the common structure mt76_wcid so that mt7925_mcu_sta_key_tlv can access per-link STA/BSS. Additionally, .link_id will be required when reporting the link information of Rx status to mac80211. We will submit the changes for reporting the Rx status in a separate patch. Co-developed-by: Ming Yen Hsieh <[email protected]> Signed-off-by: Ming Yen Hsieh <[email protected]> Co-developed-by: Deren Wu <[email protected]> Signed-off-by: Deren Wu <[email protected]> Signed-off-by: Sean Wang <[email protected]> Link: https://patch.msgid.link/16d65aae010113f9be3c4e6e759b4226d396a1be.1720248331.git.sean.wang@kernel.org Signed-off-by: Felix Fietkau <[email protected]>
This commit is contained in:
@@ -353,6 +353,7 @@ struct mt76_wcid {
|
||||
u8 sta:1;
|
||||
u8 amsdu:1;
|
||||
u8 phy_idx:2;
|
||||
u8 link_id:4;
|
||||
|
||||
u8 rx_check_pn;
|
||||
u8 rx_key_pn[IEEE80211_NUM_TIDS + 1][6];
|
||||
|
||||
@@ -748,6 +748,7 @@ static int mt7925_mac_link_sta_add(struct mt76_dev *mdev,
|
||||
mlink->wcid.phy_idx = mconf->mt76.band_idx;
|
||||
mlink->wcid.tx_info |= MT_WCID_TX_INFO_SET;
|
||||
mlink->last_txs = jiffies;
|
||||
mlink->wcid.link_id = link_sta->link_id;
|
||||
|
||||
ret = mt76_connac_pm_wake(&dev->mphy, &dev->pm);
|
||||
if (ret)
|
||||
|
||||
+11
-4
@@ -967,6 +967,7 @@ mt7925_mcu_sta_key_tlv(struct mt76_wcid *wcid,
|
||||
struct mt792x_sta *msta = container_of(mlink, struct mt792x_sta, deflink);
|
||||
struct sta_rec_sec_uni *sec;
|
||||
struct mt792x_vif *mvif = msta->vif;
|
||||
struct mt792x_bss_conf *mconf = mt792x_vif_to_link(mvif, wcid->link_id);
|
||||
struct ieee80211_sta *sta;
|
||||
struct ieee80211_vif *vif;
|
||||
struct tlv *tlv;
|
||||
@@ -978,17 +979,23 @@ mt7925_mcu_sta_key_tlv(struct mt76_wcid *wcid,
|
||||
|
||||
tlv = mt76_connac_mcu_add_tlv(skb, STA_REC_KEY_V3, sizeof(*sec));
|
||||
sec = (struct sta_rec_sec_uni *)tlv;
|
||||
sec->bss_idx = mvif->bss_conf.mt76.idx;
|
||||
sec->bss_idx = mconf->mt76.idx;
|
||||
sec->is_authenticator = 0;
|
||||
sec->mgmt_prot = 0;
|
||||
sec->mgmt_prot = 1; /* only used in MLO mode */
|
||||
sec->wlan_idx = (u8)wcid->idx;
|
||||
|
||||
if (sta) {
|
||||
struct ieee80211_link_sta *link_sta;
|
||||
|
||||
sec->tx_key = 1;
|
||||
sec->key_type = 1;
|
||||
memcpy(sec->peer_addr, sta->addr, ETH_ALEN);
|
||||
link_sta = mt792x_sta_to_link_sta(vif, sta, wcid->link_id);
|
||||
memcpy(sec->peer_addr, link_sta->addr, ETH_ALEN);
|
||||
} else {
|
||||
memcpy(sec->peer_addr, vif->bss_conf.bssid, ETH_ALEN);
|
||||
struct ieee80211_bss_conf *link_conf;
|
||||
|
||||
link_conf = mt792x_vif_to_bss_conf(vif, wcid->link_id);
|
||||
memcpy(sec->peer_addr, link_conf->bssid, ETH_ALEN);
|
||||
}
|
||||
|
||||
if (cmd == SET_KEY) {
|
||||
|
||||
@@ -273,6 +273,17 @@ mt792x_vif_to_bss_conf(struct ieee80211_vif *vif, unsigned int link_id)
|
||||
return link_conf_dereference_protected(vif, link_id);
|
||||
}
|
||||
|
||||
static inline struct ieee80211_link_sta *
|
||||
mt792x_sta_to_link_sta(struct ieee80211_vif *vif, struct ieee80211_sta *sta,
|
||||
unsigned int link_id)
|
||||
{
|
||||
if (!ieee80211_vif_is_mld(vif) ||
|
||||
link_id >= IEEE80211_LINK_UNSPECIFIED)
|
||||
return &sta->deflink;
|
||||
|
||||
return link_sta_dereference_protected(sta, link_id);
|
||||
}
|
||||
|
||||
static inline struct mt792x_dev *
|
||||
mt792x_hw_dev(struct ieee80211_hw *hw)
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user