]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
wifi: mac80211: add support for S1G aggregation
authorLachlan Hodges <lachlan.hodges@morsemicro.com>
Tue, 17 Jun 2025 08:06:10 +0000 (18:06 +1000)
committerJohannes Berg <johannes.berg@intel.com>
Tue, 24 Jun 2025 13:19:28 +0000 (15:19 +0200)
Allow an S1G station to use aggregation.

Signed-off-by: Sophronia Koilpillai <sophronia.koilpillai@morsemicro.com>
Signed-off-by: Lachlan Hodges <lachlan.hodges@morsemicro.com>
Link: https://patch.msgid.link/20250617080610.756048-5-lachlan.hodges@morsemicro.com
Signed-off-by: Johannes Berg <johannes.berg@intel.com>
net/mac80211/agg-rx.c
net/mac80211/agg-tx.c
net/mac80211/tx.c

index ee534797c0335f1b64eb6864a5aee704a96497c8..e38f46ffebfa7a6f2ab231d4141b712e20228620 100644 (file)
@@ -299,7 +299,8 @@ void __ieee80211_start_rx_ba_session(struct sta_info *sta,
 
        if (!sta->sta.valid_links &&
            !sta->sta.deflink.ht_cap.ht_supported &&
-           !sta->sta.deflink.he_cap.has_he) {
+           !sta->sta.deflink.he_cap.has_he &&
+           !sta->sta.deflink.s1g_cap.s1g) {
                ht_dbg(sta->sdata,
                       "STA %pM erroneously requests BA session on tid %d w/o HT\n",
                       sta->sta.addr, tid);
@@ -327,7 +328,8 @@ void __ieee80211_start_rx_ba_session(struct sta_info *sta,
        /* XXX: check own ht delayed BA capability?? */
        if (((ba_policy != 1) &&
             (sta->sta.valid_links ||
-             !(sta->sta.deflink.ht_cap.cap & IEEE80211_HT_CAP_DELAY_BA))) ||
+             !(sta->sta.deflink.ht_cap.cap & IEEE80211_HT_CAP_DELAY_BA) ||
+             !(sta->sta.deflink.s1g_cap.cap[3] & S1G_CAP3_HT_DELAYED_BA))) ||
            (buf_size > max_buf_size)) {
                status = WLAN_STATUS_INVALID_QOS_PARAM;
                ht_dbg_ratelimited(sta->sdata,
index dbd9ad5f3992ca3b3331ec7ac667bc93830d1139..d981b0fc57bf0503cc2694ccc0561c4f56d44947 100644 (file)
@@ -616,7 +616,8 @@ int ieee80211_start_tx_ba_session(struct ieee80211_sta *pubsta, u16 tid,
            !pubsta->deflink.ht_cap.ht_supported &&
            !pubsta->deflink.vht_cap.vht_supported &&
            !pubsta->deflink.he_cap.has_he &&
-           !pubsta->deflink.eht_cap.has_eht)
+           !pubsta->deflink.eht_cap.has_eht &&
+           !pubsta->deflink.s1g_cap.s1g)
                return -EINVAL;
 
        if (WARN_ON_ONCE(!local->ops->ampdu_action))
index 6278d55aeb2ef1f6f16f6c0730d6d87a3d306677..6fa883a9250d91729cb56058627ad1baa3a59125 100644 (file)
@@ -1173,7 +1173,8 @@ void ieee80211_aggr_check(struct ieee80211_sub_if_data *sdata,
                return;
 
        if (!sta ||
-           (!sta->sta.valid_links && !sta->sta.deflink.ht_cap.ht_supported) ||
+           (!sta->sta.valid_links && !sta->sta.deflink.ht_cap.ht_supported &&
+            !sta->sta.deflink.s1g_cap.s1g) ||
            !sta->sta.wme || skb_get_queue_mapping(skb) == IEEE80211_AC_VO ||
            skb->protocol == sdata->control_port_protocol)
                return;