diff mbox series

[v6,2/3] wifi: mac80211: allow userspace to enable driver control of MU-EDCA

Message ID 1682960363-15452-2-git-send-email-quic_msinada@quicinc.com
State New
Headers show
Series [v6,1/3] wifi: cfg80211: allow userspace to enable driver control of MU-EDCA | expand

Commit Message

Muna Sinada May 1, 2023, 4:59 p.m. UTC
Propagate userspace configuration to enable or disable if driver is
able to dynamically update MU-EDCA parameters.

The updated MU-EDCA parameters from driver are part of an AP mode feature
where firmware determines better MU-EDCA parameters based on channel
conditions. The updated parameters are used and reported to user space
to reflect in AP management frames. These dynamic parameter updates
are offloaded to firmware for better user experience, thus details on
algorithm are not provided. This is a driver specific feature, thus
no spec references.

Signed-off-by: Muna Sinada <quic_msinada@quicinc.com>
---
v6: no change

v5: no change

v4: newly created patch in response to review comment to add opt in
    for user for this feature
---
 include/net/mac80211.h | 6 ++++++
 net/mac80211/cfg.c     | 5 +++++
 2 files changed, 11 insertions(+)

Comments

Johannes Berg Sept. 13, 2023, 9:44 a.m. UTC | #1
> 
> --- a/include/net/mac80211.h
> +++ b/include/net/mac80211.h
> @@ -376,6 +376,7 @@ enum ieee80211_bss_change {
>  	BSS_CHANGED_FILS_DISCOVERY      = 1<<30,
>  	BSS_CHANGED_UNSOL_BCAST_PROBE_RESP = 1<<31,
>  	BSS_CHANGED_EHT_PUNCTURING	= BIT_ULL(32),
> +	BSS_CHANGED_DYNAMIC_MU_EDCA	= BIT_ULL(33),

This is missing documentation.

> + * @dyn_muedca_enabled: whether to enable or disable driver control of MU-EDCA
> + *	parameters. If set to zero, driver dynamically updating parameters is
> + *	disabled; if set to 1, driver dynamically updating parameters is enable
>   */
>  struct ieee80211_bss_conf {
>  	struct ieee80211_vif *vif;
> @@ -776,6 +780,8 @@ struct ieee80211_bss_conf {
>  	bool eht_su_beamformer;
>  	bool eht_su_beamformee;
>  	bool eht_mu_beamformer;
> +
> +	int dyn_muedca_enabled;

why int with 0/1 rather than bool like the others?

> @@ -1465,6 +1465,11 @@ static int ieee80211_start_ap(struct wiphy *wiphy, struct net_device *dev,
>  		changed |= BSS_CHANGED_UNSOL_BCAST_PROBE_RESP;
>  	}
>  
> +	if (link_conf->dyn_muedca_enabled != params->dyn_muedca_enable) {
> +		link_conf->dyn_muedca_enabled = params->dyn_muedca_enable;
> +		changed |= BSS_CHANGED_DYNAMIC_MU_EDCA;
> +	}

This doesn't seem right ... think about it.

johannes
diff mbox series

Patch

diff --git a/include/net/mac80211.h b/include/net/mac80211.h
index 679421d37a42..70acd76ce450 100644
--- a/include/net/mac80211.h
+++ b/include/net/mac80211.h
@@ -376,6 +376,7 @@  enum ieee80211_bss_change {
 	BSS_CHANGED_FILS_DISCOVERY      = 1<<30,
 	BSS_CHANGED_UNSOL_BCAST_PROBE_RESP = 1<<31,
 	BSS_CHANGED_EHT_PUNCTURING	= BIT_ULL(32),
+	BSS_CHANGED_DYNAMIC_MU_EDCA	= BIT_ULL(33),
 
 	/* when adding here, make sure to change ieee80211_reconfig */
 };
@@ -683,6 +684,9 @@  struct ieee80211_fils_discovery {
  *	beamformee
  * @eht_mu_beamformer: in AP-mode, does this BSS enable operation as an EHT MU
  *	beamformer
+ * @dyn_muedca_enabled: whether to enable or disable driver control of MU-EDCA
+ *	parameters. If set to zero, driver dynamically updating parameters is
+ *	disabled; if set to 1, driver dynamically updating parameters is enable
  */
 struct ieee80211_bss_conf {
 	struct ieee80211_vif *vif;
@@ -776,6 +780,8 @@  struct ieee80211_bss_conf {
 	bool eht_su_beamformer;
 	bool eht_su_beamformee;
 	bool eht_mu_beamformer;
+
+	int dyn_muedca_enabled;
 };
 
 /**
diff --git a/net/mac80211/cfg.c b/net/mac80211/cfg.c
index 473915606715..ff9117c1c288 100644
--- a/net/mac80211/cfg.c
+++ b/net/mac80211/cfg.c
@@ -1465,6 +1465,11 @@  static int ieee80211_start_ap(struct wiphy *wiphy, struct net_device *dev,
 		changed |= BSS_CHANGED_UNSOL_BCAST_PROBE_RESP;
 	}
 
+	if (link_conf->dyn_muedca_enabled != params->dyn_muedca_enable) {
+		link_conf->dyn_muedca_enabled = params->dyn_muedca_enable;
+		changed |= BSS_CHANGED_DYNAMIC_MU_EDCA;
+	}
+
 	err = drv_start_ap(sdata->local, sdata, link_conf);
 	if (err) {
 		old = sdata_dereference(link->u.ap.beacon, sdata);