wifi: mt76: mt7996: prepare mt7996_mcu_set_tx for MLO support
authorFelix Fietkau <nbd@nbd.name>
Thu, 2 Jan 2025 16:35:01 +0000 (17:35 +0100)
committerFelix Fietkau <nbd@nbd.name>
Tue, 14 Jan 2025 12:42:29 +0000 (13:42 +0100)
Pass in struct ieee80211_bss_conf in order to use link specific data.

Link: https://patch.msgid.link/20250102163508.52945-17-nbd@nbd.name
Signed-off-by: Felix Fietkau <nbd@nbd.name>
drivers/net/wireless/mediatek/mt76/mt7996/main.c
drivers/net/wireless/mediatek/mt76/mt7996/mcu.c
drivers/net/wireless/mediatek/mt76/mt7996/mt7996.h

index ae4fad290785c8198a73610172e948e933532576..a1f1dee56dea35a914549032dd9d31c64ef3e8ed 100644 (file)
@@ -469,7 +469,8 @@ mt7996_conf_tx(struct ieee80211_hw *hw, struct ieee80211_vif *vif,
               unsigned int link_id, u16 queue,
               const struct ieee80211_tx_queue_params *params)
 {
-       struct mt7996_vif *mvif = (struct mt7996_vif *)vif->drv_priv;
+       struct mt7996_dev *dev = mt7996_hw_dev(hw);
+       struct mt7996_vif_link *mlink = mt7996_vif_link(dev, vif, link_id);
        static const u8 mq_to_aci[] = {
                [IEEE80211_AC_VO] = 3,
                [IEEE80211_AC_VI] = 2,
@@ -478,7 +479,7 @@ mt7996_conf_tx(struct ieee80211_hw *hw, struct ieee80211_vif *vif,
        };
 
        /* firmware uses access class index */
-       mvif->deflink.queue_params[mq_to_aci[queue]] = *params;
+       mlink->queue_params[mq_to_aci[queue]] = *params;
        /* no need to update right away, we'll get BSS_CHANGED_QOS */
 
        return 0;
@@ -656,7 +657,7 @@ static void mt7996_bss_info_changed(struct ieee80211_hw *hw,
 
        /* ensure that enable txcmd_mode after bss_info */
        if (changed & (BSS_CHANGED_QOS | BSS_CHANGED_BEACON_ENABLED))
-               mt7996_mcu_set_tx(dev, vif);
+               mt7996_mcu_set_tx(dev, vif, info);
 
        if (changed & BSS_CHANGED_HE_OBSS_PD)
                mt7996_mcu_add_obss_spr(phy, vif, &info->he_obss_pd);
index a66ccc2512afc9eebb947a577bb1a9e4ddaedbe9..e694edf4fa9bcde89776f6133d70cf9ae92e16cd 100644 (file)
@@ -3145,7 +3145,8 @@ int mt7996_mcu_set_hdr_trans(struct mt7996_dev *dev, bool hdr_trans)
                                     MCU_WM_UNI_CMD(RX_HDR_TRANS), true);
 }
 
-int mt7996_mcu_set_tx(struct mt7996_dev *dev, struct ieee80211_vif *vif)
+int mt7996_mcu_set_tx(struct mt7996_dev *dev, struct ieee80211_vif *vif,
+                     struct ieee80211_bss_conf *link_conf)
 {
 #define MCU_EDCA_AC_PARAM      0
 #define WMM_AIFS_SET           BIT(0)
@@ -3154,12 +3155,12 @@ int mt7996_mcu_set_tx(struct mt7996_dev *dev, struct ieee80211_vif *vif)
 #define WMM_TXOP_SET           BIT(3)
 #define WMM_PARAM_SET          (WMM_AIFS_SET | WMM_CW_MIN_SET | \
                                 WMM_CW_MAX_SET | WMM_TXOP_SET)
-       struct mt7996_vif *mvif = (struct mt7996_vif *)vif->drv_priv;
+       struct mt7996_vif_link *link = mt7996_vif_conf_link(dev, vif, link_conf);
        struct {
                u8 bss_idx;
                u8 __rsv[3];
        } __packed hdr = {
-               .bss_idx = mvif->deflink.mt76.idx,
+               .bss_idx = link->mt76.idx,
        };
        struct sk_buff *skb;
        int len = sizeof(hdr) + IEEE80211_NUM_ACS * sizeof(struct edca);
@@ -3172,7 +3173,7 @@ int mt7996_mcu_set_tx(struct mt7996_dev *dev, struct ieee80211_vif *vif)
        skb_put_data(skb, &hdr, sizeof(hdr));
 
        for (ac = 0; ac < IEEE80211_NUM_ACS; ac++) {
-               struct ieee80211_tx_queue_params *q = &mvif->deflink.queue_params[ac];
+               struct ieee80211_tx_queue_params *q = &link->queue_params[ac];
                struct edca *e;
                struct tlv *tlv;
 
index 7b12b1f8898b20cf52d444e9d9238d377e6785f3..2b5c7cb7e8170dbaad84bd68150bfe7bbd0fee2e 100644 (file)
@@ -543,7 +543,8 @@ int mt7996_mcu_add_rate_ctrl(struct mt7996_dev *dev, struct ieee80211_vif *vif,
                             struct ieee80211_sta *sta, bool changed);
 int mt7996_set_channel(struct mt76_phy *mphy);
 int mt7996_mcu_set_chan_info(struct mt7996_phy *phy, u16 tag);
-int mt7996_mcu_set_tx(struct mt7996_dev *dev, struct ieee80211_vif *vif);
+int mt7996_mcu_set_tx(struct mt7996_dev *dev, struct ieee80211_vif *vif,
+                     struct ieee80211_bss_conf *link_conf);
 int mt7996_mcu_set_fixed_rate_ctrl(struct mt7996_dev *dev,
                                   void *data, u16 version);
 int mt7996_mcu_set_fixed_field(struct mt7996_dev *dev, struct ieee80211_vif *vif,