wifi: mt76: connac: add support for passing connection state directly
authorFelix Fietkau <nbd@nbd.name>
Tue, 27 Aug 2024 09:29:57 +0000 (11:29 +0200)
committerFelix Fietkau <nbd@nbd.name>
Fri, 6 Sep 2024 12:23:06 +0000 (14:23 +0200)
Preparation for improvements to sta handling. No functional changes.

Link: https://patch.msgid.link/20240827093011.18621-10-nbd@nbd.name
Signed-off-by: Felix Fietkau <nbd@nbd.name>
drivers/net/wireless/mediatek/mt76/mt7615/mcu.c
drivers/net/wireless/mediatek/mt76/mt76_connac_mcu.c
drivers/net/wireless/mediatek/mt76/mt76_connac_mcu.h
drivers/net/wireless/mediatek/mt76/mt7915/mcu.c
drivers/net/wireless/mediatek/mt76/mt7925/mcu.c
drivers/net/wireless/mediatek/mt76/mt7996/mcu.c

index 3b57d967190a98abdf9c0fbfe69880a0b49ef45f..f6eb9939c3e251e3bddc22c4731adfd4dfda0610 100644 (file)
@@ -847,6 +847,7 @@ mt7615_mcu_wtbl_sta_add(struct mt7615_phy *phy, struct ieee80211_vif *vif,
        struct wtbl_req_hdr *wtbl_hdr;
        struct mt7615_sta *msta;
        bool new_entry = true;
+       int conn_state;
        int cmd, err;
 
        msta = sta ? (struct mt7615_sta *)sta->drv_priv : &mvif->sta;
@@ -863,8 +864,9 @@ mt7615_mcu_wtbl_sta_add(struct mt7615_phy *phy, struct ieee80211_vif *vif,
                else
                        mvif->sta_added = true;
        }
+       conn_state = enable ? CONN_STATE_PORT_SECURE : CONN_STATE_DISCONNECT;
        mt76_connac_mcu_sta_basic_tlv(&dev->mt76, sskb, vif, link_sta,
-                                     enable, new_entry);
+                                     conn_state, new_entry);
        if (enable && sta)
                mt76_connac_mcu_sta_tlv(phy->mt76, sskb, sta, vif, 0,
                                        MT76_STA_INFO_STATE_ASSOC);
index 4dce03ddbfa44230443590a6a19a84e9d03cb408..7afb9ac30ab95adf5a10b3ae50f59aa9bfa931ac 100644 (file)
@@ -371,7 +371,7 @@ EXPORT_SYMBOL_GPL(mt76_connac_mcu_bss_omac_tlv);
 void mt76_connac_mcu_sta_basic_tlv(struct mt76_dev *dev, struct sk_buff *skb,
                                   struct ieee80211_vif *vif,
                                   struct ieee80211_link_sta *link_sta,
-                                  bool enable, bool newly)
+                                  int conn_state, bool newly)
 {
        struct sta_rec_basic *basic;
        struct tlv *tlv;
@@ -382,13 +382,9 @@ void mt76_connac_mcu_sta_basic_tlv(struct mt76_dev *dev, struct sk_buff *skb,
        basic = (struct sta_rec_basic *)tlv;
        basic->extra_info = cpu_to_le16(EXTRA_INFO_VER);
 
-       if (enable) {
-               if (newly)
-                       basic->extra_info |= cpu_to_le16(EXTRA_INFO_NEW);
-               basic->conn_state = CONN_STATE_PORT_SECURE;
-       } else {
-               basic->conn_state = CONN_STATE_DISCONNECT;
-       }
+       if (newly && conn_state != CONN_STATE_DISCONNECT)
+               basic->extra_info |= cpu_to_le16(EXTRA_INFO_NEW);
+       basic->conn_state = conn_state;
 
        if (!link_sta) {
                basic->conn_type = cpu_to_le32(CONNECTION_INFRA_BC);
@@ -1051,15 +1047,18 @@ int mt76_connac_mcu_sta_cmd(struct mt76_phy *phy,
        struct wtbl_req_hdr *wtbl_hdr;
        struct tlv *sta_wtbl;
        struct sk_buff *skb;
+       int conn_state;
 
        skb = mt76_connac_mcu_alloc_sta_req(dev, mvif, info->wcid);
        if (IS_ERR(skb))
                return PTR_ERR(skb);
 
+       conn_state = info->enable ? CONN_STATE_PORT_SECURE :
+                                   CONN_STATE_DISCONNECT;
        link_sta = info->sta ? &info->sta->deflink : NULL;
        if (info->sta || !info->offload_fw)
                mt76_connac_mcu_sta_basic_tlv(dev, skb, info->vif,
-                                             link_sta, info->enable,
+                                             link_sta, conn_state,
                                              info->newly);
        if (info->sta && info->enable)
                mt76_connac_mcu_sta_tlv(phy, skb, info->sta,
index 4242d436de26216439b5bb42771b1d62c80e4e83..e04ae7eddb0150bd109d14cab2cb40683864fc23 100644 (file)
@@ -1898,7 +1898,7 @@ int mt76_connac_mcu_set_vif_ps(struct mt76_dev *dev, struct ieee80211_vif *vif);
 void mt76_connac_mcu_sta_basic_tlv(struct mt76_dev *dev, struct sk_buff *skb,
                                   struct ieee80211_vif *vif,
                                   struct ieee80211_link_sta *link_sta,
-                                  bool enable, bool newly);
+                                  int state, bool newly);
 void mt76_connac_mcu_wtbl_generic_tlv(struct mt76_dev *dev, struct sk_buff *skb,
                                      struct ieee80211_vif *vif,
                                      struct ieee80211_sta *sta, void *sta_wtbl,
index 43f1a45b34ab42e953ef30a41111cd45ba7f2cd2..10de8b994e2ec994c358ebc536a9aecc4f164809 100644 (file)
@@ -1663,6 +1663,7 @@ int mt7915_mcu_add_sta(struct mt7915_dev *dev, struct ieee80211_vif *vif,
        struct ieee80211_link_sta *link_sta;
        struct mt7915_sta *msta;
        struct sk_buff *skb;
+       int conn_state;
        int ret;
 
        msta = sta ? (struct mt7915_sta *)sta->drv_priv : &mvif->sta;
@@ -1674,7 +1675,8 @@ int mt7915_mcu_add_sta(struct mt7915_dev *dev, struct ieee80211_vif *vif,
                return PTR_ERR(skb);
 
        /* starec basic */
-       mt76_connac_mcu_sta_basic_tlv(&dev->mt76, skb, vif, link_sta, enable,
+       conn_state = enable ? CONN_STATE_PORT_SECURE : CONN_STATE_DISCONNECT;
+       mt76_connac_mcu_sta_basic_tlv(&dev->mt76, skb, vif, link_sta, conn_state,
                                      !rcu_access_pointer(dev->mt76.wcid[msta->wcid.idx]));
        if (!enable)
                goto out;
index 9dc22fbe25d3350875874f55d9d8ee8b384a1789..473ed54e871095f4b0917b9b3889c9659c8716e2 100644 (file)
@@ -1770,16 +1770,19 @@ mt7925_mcu_sta_cmd(struct mt76_phy *phy,
        struct mt76_vif *mvif = (struct mt76_vif *)info->vif->drv_priv;
        struct mt76_dev *dev = phy->dev;
        struct sk_buff *skb;
+       int conn_state;
 
        skb = __mt76_connac_mcu_alloc_sta_req(dev, mvif, info->wcid,
                                              MT7925_STA_UPDATE_MAX_SIZE);
        if (IS_ERR(skb))
                return PTR_ERR(skb);
 
+       conn_state = info->enable ? CONN_STATE_PORT_SECURE :
+                                   CONN_STATE_DISCONNECT;
        if (info->link_sta)
                mt76_connac_mcu_sta_basic_tlv(dev, skb, info->vif,
                                              info->link_sta,
-                                             info->enable, info->newly);
+                                             conn_state, info->newly);
        if (info->link_sta && info->enable) {
                mt7925_mcu_sta_phy_tlv(skb, info->vif, info->link_sta);
                mt7925_mcu_sta_ht_tlv(skb, info->link_sta);
index a1a0df43e1cda224905c0a52f18ec1e2ef9cd62b..caa0ff61947567acecbc5002f46e57481f8bfbe4 100644 (file)
@@ -2163,6 +2163,7 @@ int mt7996_mcu_add_sta(struct mt7996_dev *dev, struct ieee80211_vif *vif,
        struct ieee80211_link_sta *link_sta;
        struct mt7996_sta *msta;
        struct sk_buff *skb;
+       int conn_state;
        int ret;
 
        msta = sta ? (struct mt7996_sta *)sta->drv_priv : &mvif->sta;
@@ -2175,8 +2176,9 @@ int mt7996_mcu_add_sta(struct mt7996_dev *dev, struct ieee80211_vif *vif,
                return PTR_ERR(skb);
 
        /* starec basic */
+       conn_state = enable ? CONN_STATE_PORT_SECURE : CONN_STATE_DISCONNECT;
        mt76_connac_mcu_sta_basic_tlv(&dev->mt76, skb, vif, link_sta,
-                                     enable, newly);
+                                     conn_state, newly);
 
        if (!enable)
                goto out;