[PATCH wireless-next v3 12/21] wifi: mac80211: set SMD parameters for AP setup and STA update

From: Pooventhiran G

Date: Thu Nov 05 2026 - 14:54:32 EST


From: Rohan Dutta <drohan@xxxxxxxxxxxxxxxx>

When userspace marks SMD parameters for AP setup and STA update (during
association and ST Preparation procedure), mark them in mac80211 so that
SMD operations are properly routed and handled in the drivers.

Signed-off-by: Rohan Dutta <drohan@xxxxxxxxxxxxxxxx>
Signed-off-by: Sidhanta Sahu <sidhanta.sahu@xxxxxxxxxxxxxxxx>
Signed-off-by: Pooventhiran G <pooventhiran.g@xxxxxxxxxxxxxxxx>
---
include/net/mac80211.h | 5 +++++
net/mac80211/cfg.c | 12 ++++++++++++
net/mac80211/debugfs_sta.c | 1 +
net/mac80211/sta_info.h | 2 ++
4 files changed, 20 insertions(+)

diff --git a/include/net/mac80211.h b/include/net/mac80211.h
index 76ff86ff9974..23a3f08c72e3 100644
--- a/include/net/mac80211.h
+++ b/include/net/mac80211.h
@@ -796,6 +796,7 @@ struct ieee80211_bss_npca_params {
* @s1g_long_beacon_period: number of beacon intervals between each long
* beacon transmission.
* @npca: NPCA parameters
+ * @smd_ap: AP supports SMD
*/
struct ieee80211_bss_conf {
struct ieee80211_vif *vif;
@@ -902,6 +903,7 @@ struct ieee80211_bss_conf {
u8 s1g_long_beacon_period;

struct ieee80211_bss_npca_params npca;
+ bool smd_ap;
};

#define IEEE80211_NAN_MAX_CHANNELS 3
@@ -2731,6 +2733,7 @@ struct ieee80211_link_sta {
* @nan_sched: NAN peer schedule for this station. Valid only for NMI stations.
* @ext_mld_capa_ops: the MLD's extended MLD capabilities and operations
* NOTE: currently only tracked for AP STAs
+ * @smd_params: SMD parameters of the STA
*/
struct ieee80211_sta {
u8 addr[ETH_ALEN] __aligned(2);
@@ -2768,6 +2771,8 @@ struct ieee80211_sta {
/* should only be accessed with the wiphy mutex held */
struct ieee80211_nan_peer_sched *nan_sched;

+ struct cfg80211_sta_smd_params smd_params;
+
/* must be last */
u8 drv_priv[] __aligned(sizeof(void *));
};
diff --git a/net/mac80211/cfg.c b/net/mac80211/cfg.c
index 6e466f8e1653..37329d8748ae 100644
--- a/net/mac80211/cfg.c
+++ b/net/mac80211/cfg.c
@@ -1864,6 +1864,8 @@ static int ieee80211_start_ap(struct wiphy *wiphy, struct net_device *dev,
}
}

+ link_conf->smd_ap = params->smd;
+
if (sdata->vif.type == NL80211_IFTYPE_AP &&
params->mbssid_config.tx_wdev) {
err = ieee80211_set_ap_mbssid_options(sdata,
@@ -2778,6 +2780,16 @@ static int sta_apply_parameters(struct ieee80211_local *local,
if (mask & BIT(NL80211_STA_FLAG_SPP_AMSDU))
sta->sta.spp_amsdu = set & BIT(NL80211_STA_FLAG_SPP_AMSDU);

+ if (mask & BIT(NL80211_STA_FLAG_SMD)) {
+ if (set & BIT(NL80211_STA_FLAG_SMD))
+ set_sta_flag(sta, WLAN_STA_SMD);
+ else if (test_sta_flag(sta, WLAN_STA_SMD))
+ clear_sta_flag(sta, WLAN_STA_SMD);
+ }
+
+ if (params->smd_params.smd_sta)
+ sta->sta.smd_params = params->smd_params;
+
/* mark TDLS channel switch support, if the AP allows it */
if (test_sta_flag(sta, WLAN_STA_TDLS_PEER) &&
!sdata->deflink.u.mgd.tdls_chan_switch_prohibited &&
diff --git a/net/mac80211/debugfs_sta.c b/net/mac80211/debugfs_sta.c
index 690c186e3bb9..c2268f79601b 100644
--- a/net/mac80211/debugfs_sta.c
+++ b/net/mac80211/debugfs_sta.c
@@ -78,6 +78,7 @@ static const char * const sta_flag_names[] = {
FLAG(PS_DELIVER),
FLAG(USES_ENCRYPTION),
FLAG(DECAP_OFFLOAD),
+ FLAG(SMD),
#undef FLAG
};

diff --git a/net/mac80211/sta_info.h b/net/mac80211/sta_info.h
index 8c6a9fee6b29..54c4c613a2da 100644
--- a/net/mac80211/sta_info.h
+++ b/net/mac80211/sta_info.h
@@ -72,6 +72,7 @@
* @WLAN_STA_USES_ENCRYPTION: This station was configured for encryption,
* so drop all packets without a key later.
* @WLAN_STA_DECAP_OFFLOAD: This station uses rx decap offload
+ * @WLAN_STA_SMD: this station is associated to an SMD-ME.
*
* @NUM_WLAN_STA_FLAGS: number of defined flags
*/
@@ -104,6 +105,7 @@ enum ieee80211_sta_info_flags {
WLAN_STA_PS_DELIVER,
WLAN_STA_USES_ENCRYPTION,
WLAN_STA_DECAP_OFFLOAD,
+ WLAN_STA_SMD,

NUM_WLAN_STA_FLAGS,
};

--
2.34.1