All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH v5 0/3] Add support to configure beacon tx mode
@ 2021-08-10  8:56 ` Maharaja Kennadyrajan
  0 siblings, 0 replies; 24+ messages in thread
From: Maharaja Kennadyrajan @ 2021-08-10  8:56 UTC (permalink / raw)
  To: ath11k, linux-wireless; +Cc: Maharaja Kennadyrajan

Add support to configure the beacon tx mode as STAGGERED
or BURST mode via hostapd configuration during the AP
bring-up or via wpa_suppplicant configuration during MESH
bring-up.

Beacons can be sent out in burst(continuously in a single shot
one after another) or staggered (equally spread out over beacon
interval) mode.

V5: Addressed Johannes's and Felix's comment on v4.

V4: Rebased on latest ath.git TOT.

V3: Addressed Johnson's comment on v2 patch.

V2: Addressed Johannes's comment on v1 patch.

Maharaja Kennadyrajan (3):
  nl80211: Add support for beacon tx mode
  mac80211: Add support for beacon tx mode
  ath11k: Add support for beacon tx mode

 drivers/net/wireless/ath/ath11k/mac.c | 10 +++++++---
 include/net/cfg80211.h                |  4 ++++
 include/net/mac80211.h                |  2 ++
 include/uapi/linux/nl80211.h          | 20 ++++++++++++++++++++
 net/mac80211/cfg.c                    |  2 ++
 net/wireless/nl80211.c                | 11 +++++++++++
 6 files changed, 46 insertions(+), 3 deletions(-)

-- 
2.7.4


^ permalink raw reply	[flat|nested] 24+ messages in thread

* [PATCH v5 0/3] Add support to configure beacon tx mode
@ 2021-08-10  8:56 ` Maharaja Kennadyrajan
  0 siblings, 0 replies; 24+ messages in thread
From: Maharaja Kennadyrajan @ 2021-08-10  8:56 UTC (permalink / raw)
  To: ath11k, linux-wireless; +Cc: Maharaja Kennadyrajan

Add support to configure the beacon tx mode as STAGGERED
or BURST mode via hostapd configuration during the AP
bring-up or via wpa_suppplicant configuration during MESH
bring-up.

Beacons can be sent out in burst(continuously in a single shot
one after another) or staggered (equally spread out over beacon
interval) mode.

V5: Addressed Johannes's and Felix's comment on v4.

V4: Rebased on latest ath.git TOT.

V3: Addressed Johnson's comment on v2 patch.

V2: Addressed Johannes's comment on v1 patch.

Maharaja Kennadyrajan (3):
  nl80211: Add support for beacon tx mode
  mac80211: Add support for beacon tx mode
  ath11k: Add support for beacon tx mode

 drivers/net/wireless/ath/ath11k/mac.c | 10 +++++++---
 include/net/cfg80211.h                |  4 ++++
 include/net/mac80211.h                |  2 ++
 include/uapi/linux/nl80211.h          | 20 ++++++++++++++++++++
 net/mac80211/cfg.c                    |  2 ++
 net/wireless/nl80211.c                | 11 +++++++++++
 6 files changed, 46 insertions(+), 3 deletions(-)

-- 
2.7.4


-- 
ath11k mailing list
ath11k@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/ath11k

^ permalink raw reply	[flat|nested] 24+ messages in thread

* [PATCH v5 1/3] nl80211: Add support for beacon tx mode
  2021-08-10  8:56 ` Maharaja Kennadyrajan
@ 2021-08-10  8:56   ` Maharaja Kennadyrajan
  -1 siblings, 0 replies; 24+ messages in thread
From: Maharaja Kennadyrajan @ 2021-08-10  8:56 UTC (permalink / raw)
  To: ath11k, linux-wireless; +Cc: Maharaja Kennadyrajan

User can configure the below beacon tx mode
1. Staggered mode and 2. Burst mode while bring-up the AP
or MESH.

Beacons can be sent out in burst(continuously in a single shot
one after another) or staggered (equally spread out over beacon
interval) mode.

Set the beacon_tx_mode as 1 for Staggered mode and 2 for
burst mode.

Hence, added the support in the nl80211/cfg80211
layer to honour the beacon tx mode configuration and pass
this value to the driver.

Tested-on: IPQ8074 hw2.0 AHB WLAN.HK.2.5.0.1-00630-QCAHKSWPL_SILICONZ-2

Signed-off-by: Maharaja Kennadyrajan <mkenna@codeaurora.org>
---

V5: Addressed Johannes's & Felix's comments on v4 patch.

V4: Rebases on latest ath.git TOT.

V3: Addressed Johnson's comment on v2 patch.

V2: Addressed Johannes's comment on v1 patch.

 include/net/cfg80211.h       |  4 ++++
 include/uapi/linux/nl80211.h | 20 ++++++++++++++++++++
 net/wireless/nl80211.c       | 11 +++++++++++
 3 files changed, 35 insertions(+)

diff --git a/include/net/cfg80211.h b/include/net/cfg80211.h
index 161cdf7..8c3777b 100644
--- a/include/net/cfg80211.h
+++ b/include/net/cfg80211.h
@@ -1189,6 +1189,7 @@ enum cfg80211_ap_settings_flags {
  * @he_oper: HE operation IE (or %NULL if HE isn't enabled)
  * @fils_discovery: FILS discovery transmission parameters
  * @unsol_bcast_probe_resp: Unsolicited broadcast probe response parameters
+ * @beacon_tx_mode: Beacon Tx Mode setting
  */
 struct cfg80211_ap_settings {
 	struct cfg80211_chan_def chandef;
@@ -1221,6 +1222,7 @@ struct cfg80211_ap_settings {
 	struct cfg80211_he_bss_color he_bss_color;
 	struct cfg80211_fils_discovery fils_discovery;
 	struct cfg80211_unsol_bcast_probe_resp unsol_bcast_probe_resp;
+	enum nl80211_beacon_tx_mode beacon_tx_mode;
 };
 
 /**
@@ -2066,6 +2068,7 @@ struct mesh_config {
  *	to operate on DFS channels.
  * @control_port_over_nl80211: TRUE if userspace expects to exchange control
  *	port frames over NL80211 instead of the network interface.
+ * @beacon_tx_mode: Beacon Tx Mode setting.
  *
  * These parameters are fixed when the mesh is created.
  */
@@ -2089,6 +2092,7 @@ struct mesh_setup {
 	struct cfg80211_bitrate_mask beacon_rate;
 	bool userspace_handles_dfs;
 	bool control_port_over_nl80211;
+	enum nl80211_beacon_tx_mode beacon_tx_mode;
 };
 
 /**
diff --git a/include/uapi/linux/nl80211.h b/include/uapi/linux/nl80211.h
index db47499..29c6429 100644
--- a/include/uapi/linux/nl80211.h
+++ b/include/uapi/linux/nl80211.h
@@ -2560,6 +2560,13 @@ enum nl80211_commands {
  *	disassoc events to indicate that an immediate reconnect to the AP
  *	is desired.
  *
+ * @NL80211_ATTR_BEACON_TX_MODE: used to configure the beacon tx mode (u32),
+ *	as specified in the &enum nl80211_beacon_tx_mode. The user-space
+ *	shall use this attribute to configure the tx mode of beacons.
+ *	Beacons can be sent out in burst(continuously in a single shot
+ *	one after another) or staggered (equally spread out over beacon
+ *	interval) mode.
+ *
  * @NUM_NL80211_ATTR: total number of nl80211_attrs available
  * @NL80211_ATTR_MAX: highest attribute number currently defined
  * @__NL80211_ATTR_AFTER_LAST: internal use
@@ -3057,6 +3064,8 @@ enum nl80211_attrs {
 
 	NL80211_ATTR_DISABLE_HE,
 
+	NL80211_ATTR_BEACON_TX_MODE,
+
 	/* add attributes here, update the policy in nl80211.c */
 
 	__NL80211_ATTR_AFTER_LAST,
@@ -7306,4 +7315,15 @@ enum nl80211_sar_specs_attrs {
 	NL80211_SAR_ATTR_SPECS_MAX = __NL80211_SAR_ATTR_SPECS_LAST - 1,
 };
 
+/**
+ * enum nl80211_beacon_tx_mode - Beacon Tx Mode enum.
+ * @NL80211_BEACON_STAGGERED_MODE: Used to configure beacon tx mode as
+ *	staggered mode. This is the default beacon tx mode.
+ * @NL80211_BEACON_BURST_MODE: Used to configure beacon tx mode as burst mode.
+ */
+enum nl80211_beacon_tx_mode {
+	NL80211_BEACON_STAGGERED_MODE = 1,
+	NL80211_BEACON_BURST_MODE = 2,
+};
+
 #endif /* __LINUX_NL80211_H */
diff --git a/net/wireless/nl80211.c b/net/wireless/nl80211.c
index 50eb405..c00e326 100644
--- a/net/wireless/nl80211.c
+++ b/net/wireless/nl80211.c
@@ -759,6 +759,9 @@ static const struct nla_policy nl80211_policy[NUM_NL80211_ATTR] = {
 	[NL80211_ATTR_RECONNECT_REQUESTED] = { .type = NLA_REJECT },
 	[NL80211_ATTR_SAR_SPEC] = NLA_POLICY_NESTED(sar_policy),
 	[NL80211_ATTR_DISABLE_HE] = { .type = NLA_FLAG },
+	[NL80211_ATTR_BEACON_TX_MODE] =
+		NLA_POLICY_RANGE(NLA_U32, NL80211_BEACON_STAGGERED_MODE,
+				 NL80211_BEACON_BURST_MODE),
 };
 
 /* policy for the key attributes */
@@ -5346,6 +5349,10 @@ static int nl80211_start_ap(struct sk_buff *skb, struct genl_info *info)
 	params.dtim_period =
 		nla_get_u32(info->attrs[NL80211_ATTR_DTIM_PERIOD]);
 
+	if (info->attrs[NL80211_ATTR_BEACON_TX_MODE])
+		params.beacon_tx_mode =
+			nla_get_u32(info->attrs[NL80211_ATTR_BEACON_TX_MODE]);
+
 	err = cfg80211_validate_beacon_int(rdev, dev->ieee80211_ptr->iftype,
 					   params.beacon_interval);
 	if (err)
@@ -11900,6 +11907,10 @@ static int nl80211_join_mesh(struct sk_buff *skb, struct genl_info *info)
 			return -EINVAL;
 	}
 
+	if (info->attrs[NL80211_ATTR_BEACON_TX_MODE])
+		setup.beacon_tx_mode =
+			nla_get_u32(info->attrs[NL80211_ATTR_BEACON_TX_MODE]);
+
 	if (info->attrs[NL80211_ATTR_MESH_SETUP]) {
 		/* parse additional setup parameters if given */
 		err = nl80211_parse_mesh_setup(info, &setup);
-- 
2.7.4


^ permalink raw reply related	[flat|nested] 24+ messages in thread

* [PATCH v5 1/3] nl80211: Add support for beacon tx mode
@ 2021-08-10  8:56   ` Maharaja Kennadyrajan
  0 siblings, 0 replies; 24+ messages in thread
From: Maharaja Kennadyrajan @ 2021-08-10  8:56 UTC (permalink / raw)
  To: ath11k, linux-wireless; +Cc: Maharaja Kennadyrajan

User can configure the below beacon tx mode
1. Staggered mode and 2. Burst mode while bring-up the AP
or MESH.

Beacons can be sent out in burst(continuously in a single shot
one after another) or staggered (equally spread out over beacon
interval) mode.

Set the beacon_tx_mode as 1 for Staggered mode and 2 for
burst mode.

Hence, added the support in the nl80211/cfg80211
layer to honour the beacon tx mode configuration and pass
this value to the driver.

Tested-on: IPQ8074 hw2.0 AHB WLAN.HK.2.5.0.1-00630-QCAHKSWPL_SILICONZ-2

Signed-off-by: Maharaja Kennadyrajan <mkenna@codeaurora.org>
---

V5: Addressed Johannes's & Felix's comments on v4 patch.

V4: Rebases on latest ath.git TOT.

V3: Addressed Johnson's comment on v2 patch.

V2: Addressed Johannes's comment on v1 patch.

 include/net/cfg80211.h       |  4 ++++
 include/uapi/linux/nl80211.h | 20 ++++++++++++++++++++
 net/wireless/nl80211.c       | 11 +++++++++++
 3 files changed, 35 insertions(+)

diff --git a/include/net/cfg80211.h b/include/net/cfg80211.h
index 161cdf7..8c3777b 100644
--- a/include/net/cfg80211.h
+++ b/include/net/cfg80211.h
@@ -1189,6 +1189,7 @@ enum cfg80211_ap_settings_flags {
  * @he_oper: HE operation IE (or %NULL if HE isn't enabled)
  * @fils_discovery: FILS discovery transmission parameters
  * @unsol_bcast_probe_resp: Unsolicited broadcast probe response parameters
+ * @beacon_tx_mode: Beacon Tx Mode setting
  */
 struct cfg80211_ap_settings {
 	struct cfg80211_chan_def chandef;
@@ -1221,6 +1222,7 @@ struct cfg80211_ap_settings {
 	struct cfg80211_he_bss_color he_bss_color;
 	struct cfg80211_fils_discovery fils_discovery;
 	struct cfg80211_unsol_bcast_probe_resp unsol_bcast_probe_resp;
+	enum nl80211_beacon_tx_mode beacon_tx_mode;
 };
 
 /**
@@ -2066,6 +2068,7 @@ struct mesh_config {
  *	to operate on DFS channels.
  * @control_port_over_nl80211: TRUE if userspace expects to exchange control
  *	port frames over NL80211 instead of the network interface.
+ * @beacon_tx_mode: Beacon Tx Mode setting.
  *
  * These parameters are fixed when the mesh is created.
  */
@@ -2089,6 +2092,7 @@ struct mesh_setup {
 	struct cfg80211_bitrate_mask beacon_rate;
 	bool userspace_handles_dfs;
 	bool control_port_over_nl80211;
+	enum nl80211_beacon_tx_mode beacon_tx_mode;
 };
 
 /**
diff --git a/include/uapi/linux/nl80211.h b/include/uapi/linux/nl80211.h
index db47499..29c6429 100644
--- a/include/uapi/linux/nl80211.h
+++ b/include/uapi/linux/nl80211.h
@@ -2560,6 +2560,13 @@ enum nl80211_commands {
  *	disassoc events to indicate that an immediate reconnect to the AP
  *	is desired.
  *
+ * @NL80211_ATTR_BEACON_TX_MODE: used to configure the beacon tx mode (u32),
+ *	as specified in the &enum nl80211_beacon_tx_mode. The user-space
+ *	shall use this attribute to configure the tx mode of beacons.
+ *	Beacons can be sent out in burst(continuously in a single shot
+ *	one after another) or staggered (equally spread out over beacon
+ *	interval) mode.
+ *
  * @NUM_NL80211_ATTR: total number of nl80211_attrs available
  * @NL80211_ATTR_MAX: highest attribute number currently defined
  * @__NL80211_ATTR_AFTER_LAST: internal use
@@ -3057,6 +3064,8 @@ enum nl80211_attrs {
 
 	NL80211_ATTR_DISABLE_HE,
 
+	NL80211_ATTR_BEACON_TX_MODE,
+
 	/* add attributes here, update the policy in nl80211.c */
 
 	__NL80211_ATTR_AFTER_LAST,
@@ -7306,4 +7315,15 @@ enum nl80211_sar_specs_attrs {
 	NL80211_SAR_ATTR_SPECS_MAX = __NL80211_SAR_ATTR_SPECS_LAST - 1,
 };
 
+/**
+ * enum nl80211_beacon_tx_mode - Beacon Tx Mode enum.
+ * @NL80211_BEACON_STAGGERED_MODE: Used to configure beacon tx mode as
+ *	staggered mode. This is the default beacon tx mode.
+ * @NL80211_BEACON_BURST_MODE: Used to configure beacon tx mode as burst mode.
+ */
+enum nl80211_beacon_tx_mode {
+	NL80211_BEACON_STAGGERED_MODE = 1,
+	NL80211_BEACON_BURST_MODE = 2,
+};
+
 #endif /* __LINUX_NL80211_H */
diff --git a/net/wireless/nl80211.c b/net/wireless/nl80211.c
index 50eb405..c00e326 100644
--- a/net/wireless/nl80211.c
+++ b/net/wireless/nl80211.c
@@ -759,6 +759,9 @@ static const struct nla_policy nl80211_policy[NUM_NL80211_ATTR] = {
 	[NL80211_ATTR_RECONNECT_REQUESTED] = { .type = NLA_REJECT },
 	[NL80211_ATTR_SAR_SPEC] = NLA_POLICY_NESTED(sar_policy),
 	[NL80211_ATTR_DISABLE_HE] = { .type = NLA_FLAG },
+	[NL80211_ATTR_BEACON_TX_MODE] =
+		NLA_POLICY_RANGE(NLA_U32, NL80211_BEACON_STAGGERED_MODE,
+				 NL80211_BEACON_BURST_MODE),
 };
 
 /* policy for the key attributes */
@@ -5346,6 +5349,10 @@ static int nl80211_start_ap(struct sk_buff *skb, struct genl_info *info)
 	params.dtim_period =
 		nla_get_u32(info->attrs[NL80211_ATTR_DTIM_PERIOD]);
 
+	if (info->attrs[NL80211_ATTR_BEACON_TX_MODE])
+		params.beacon_tx_mode =
+			nla_get_u32(info->attrs[NL80211_ATTR_BEACON_TX_MODE]);
+
 	err = cfg80211_validate_beacon_int(rdev, dev->ieee80211_ptr->iftype,
 					   params.beacon_interval);
 	if (err)
@@ -11900,6 +11907,10 @@ static int nl80211_join_mesh(struct sk_buff *skb, struct genl_info *info)
 			return -EINVAL;
 	}
 
+	if (info->attrs[NL80211_ATTR_BEACON_TX_MODE])
+		setup.beacon_tx_mode =
+			nla_get_u32(info->attrs[NL80211_ATTR_BEACON_TX_MODE]);
+
 	if (info->attrs[NL80211_ATTR_MESH_SETUP]) {
 		/* parse additional setup parameters if given */
 		err = nl80211_parse_mesh_setup(info, &setup);
-- 
2.7.4


-- 
ath11k mailing list
ath11k@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/ath11k

^ permalink raw reply related	[flat|nested] 24+ messages in thread

* [PATCH v5 2/3] mac80211: Add support for beacon tx mode
  2021-08-10  8:56 ` Maharaja Kennadyrajan
@ 2021-08-10  8:56   ` Maharaja Kennadyrajan
  -1 siblings, 0 replies; 24+ messages in thread
From: Maharaja Kennadyrajan @ 2021-08-10  8:56 UTC (permalink / raw)
  To: ath11k, linux-wireless; +Cc: Maharaja Kennadyrajan

Pass the beacon tx mode value from the nl80211/cfg80211
layer to the driver via ieee80211_ops and driver ops.

Tested-on: IPQ8074 hw2.0 AHB WLAN.HK.2.5.0.1-00480-QCAHKSWPL_SILICONZ-1

Signed-off-by: Maharaja Kennadyrajan <mkenna@codeaurora.org>
---
 include/net/mac80211.h | 2 ++
 net/mac80211/cfg.c     | 2 ++
 2 files changed, 4 insertions(+)

diff --git a/include/net/mac80211.h b/include/net/mac80211.h
index d8a1d09..082fc17 100644
--- a/include/net/mac80211.h
+++ b/include/net/mac80211.h
@@ -632,6 +632,7 @@ struct ieee80211_fils_discovery {
  * @s1g: BSS is S1G BSS (affects Association Request format).
  * @beacon_tx_rate: The configured beacon transmit rate that needs to be passed
  *	to driver when rate control is offloaded to firmware.
+ * @beacon_tx_mode: Beacon Tx Mode setting.
  */
 struct ieee80211_bss_conf {
 	const u8 *bssid;
@@ -702,6 +703,7 @@ struct ieee80211_bss_conf {
 	u32 unsol_bcast_probe_resp_interval;
 	bool s1g;
 	struct cfg80211_bitrate_mask beacon_tx_rate;
+	enum nl80211_beacon_tx_mode beacon_tx_mode;
 };
 
 /**
diff --git a/net/mac80211/cfg.c b/net/mac80211/cfg.c
index 84cc773..9ae03ef 100644
--- a/net/mac80211/cfg.c
+++ b/net/mac80211/cfg.c
@@ -1063,6 +1063,7 @@ static int ieee80211_start_ap(struct wiphy *wiphy, struct net_device *dev,
 
 	prev_beacon_int = sdata->vif.bss_conf.beacon_int;
 	sdata->vif.bss_conf.beacon_int = params->beacon_interval;
+	sdata->vif.bss_conf.beacon_tx_mode = params->beacon_tx_mode;
 
 	if (params->he_cap && params->he_oper) {
 		sdata->vif.bss_conf.he_support = true;
@@ -2119,6 +2120,7 @@ static int copy_mesh_setup(struct ieee80211_if_mesh *ifmsh,
 
 	sdata->vif.bss_conf.beacon_int = setup->beacon_interval;
 	sdata->vif.bss_conf.dtim_period = setup->dtim_period;
+	sdata->vif.bss_conf.beacon_tx_mode = setup->beacon_tx_mode;
 
 	sdata->beacon_rate_set = false;
 	if (wiphy_ext_feature_isset(sdata->local->hw.wiphy,
-- 
2.7.4


^ permalink raw reply related	[flat|nested] 24+ messages in thread

* [PATCH v5 2/3] mac80211: Add support for beacon tx mode
@ 2021-08-10  8:56   ` Maharaja Kennadyrajan
  0 siblings, 0 replies; 24+ messages in thread
From: Maharaja Kennadyrajan @ 2021-08-10  8:56 UTC (permalink / raw)
  To: ath11k, linux-wireless; +Cc: Maharaja Kennadyrajan

Pass the beacon tx mode value from the nl80211/cfg80211
layer to the driver via ieee80211_ops and driver ops.

Tested-on: IPQ8074 hw2.0 AHB WLAN.HK.2.5.0.1-00480-QCAHKSWPL_SILICONZ-1

Signed-off-by: Maharaja Kennadyrajan <mkenna@codeaurora.org>
---
 include/net/mac80211.h | 2 ++
 net/mac80211/cfg.c     | 2 ++
 2 files changed, 4 insertions(+)

diff --git a/include/net/mac80211.h b/include/net/mac80211.h
index d8a1d09..082fc17 100644
--- a/include/net/mac80211.h
+++ b/include/net/mac80211.h
@@ -632,6 +632,7 @@ struct ieee80211_fils_discovery {
  * @s1g: BSS is S1G BSS (affects Association Request format).
  * @beacon_tx_rate: The configured beacon transmit rate that needs to be passed
  *	to driver when rate control is offloaded to firmware.
+ * @beacon_tx_mode: Beacon Tx Mode setting.
  */
 struct ieee80211_bss_conf {
 	const u8 *bssid;
@@ -702,6 +703,7 @@ struct ieee80211_bss_conf {
 	u32 unsol_bcast_probe_resp_interval;
 	bool s1g;
 	struct cfg80211_bitrate_mask beacon_tx_rate;
+	enum nl80211_beacon_tx_mode beacon_tx_mode;
 };
 
 /**
diff --git a/net/mac80211/cfg.c b/net/mac80211/cfg.c
index 84cc773..9ae03ef 100644
--- a/net/mac80211/cfg.c
+++ b/net/mac80211/cfg.c
@@ -1063,6 +1063,7 @@ static int ieee80211_start_ap(struct wiphy *wiphy, struct net_device *dev,
 
 	prev_beacon_int = sdata->vif.bss_conf.beacon_int;
 	sdata->vif.bss_conf.beacon_int = params->beacon_interval;
+	sdata->vif.bss_conf.beacon_tx_mode = params->beacon_tx_mode;
 
 	if (params->he_cap && params->he_oper) {
 		sdata->vif.bss_conf.he_support = true;
@@ -2119,6 +2120,7 @@ static int copy_mesh_setup(struct ieee80211_if_mesh *ifmsh,
 
 	sdata->vif.bss_conf.beacon_int = setup->beacon_interval;
 	sdata->vif.bss_conf.dtim_period = setup->dtim_period;
+	sdata->vif.bss_conf.beacon_tx_mode = setup->beacon_tx_mode;
 
 	sdata->beacon_rate_set = false;
 	if (wiphy_ext_feature_isset(sdata->local->hw.wiphy,
-- 
2.7.4


-- 
ath11k mailing list
ath11k@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/ath11k

^ permalink raw reply related	[flat|nested] 24+ messages in thread

* [PATCH v5 3/3] ath11k: Add support for beacon tx mode
  2021-08-10  8:56 ` Maharaja Kennadyrajan
@ 2021-08-10  8:56   ` Maharaja Kennadyrajan
  -1 siblings, 0 replies; 24+ messages in thread
From: Maharaja Kennadyrajan @ 2021-08-10  8:56 UTC (permalink / raw)
  To: ath11k, linux-wireless; +Cc: Maharaja Kennadyrajan

Add support to configure the beacon tx mode in
the driver.

Beacons can be sent out in burst(continuously in a single shot
one after another) or staggered (equally spread out over beacon
interval) mode.

Use the below configuration in the hostapd/wpa_supplicant
for AP/MESH mode to configure the beacon tx mode.

"beacon_tx_mode=N", where N = 1 for STAGGERED beacon mode
and N = 2 for BURST beacon mode.

Tested-on: IPQ8074 hw2.0 AHB WLAN.HK.2.5.0.1-00480-QCAHKSWPL_SILICONZ-1

Signed-off-by: Maharaja Kennadyrajan <mkenna@codeaurora.org>
---
 drivers/net/wireless/ath/ath11k/mac.c | 10 +++++++---
 1 file changed, 7 insertions(+), 3 deletions(-)

diff --git a/drivers/net/wireless/ath/ath11k/mac.c b/drivers/net/wireless/ath/ath11k/mac.c
index e9b3689..2eda788 100644
--- a/drivers/net/wireless/ath/ath11k/mac.c
+++ b/drivers/net/wireless/ath/ath11k/mac.c
@@ -2136,7 +2136,10 @@ static void ath11k_mac_op_bss_info_changed(struct ieee80211_hw *hw,
 
 	if (changed & BSS_CHANGED_BEACON) {
 		param_id = WMI_PDEV_PARAM_BEACON_TX_MODE;
-		param_value = WMI_BEACON_STAGGERED_MODE;
+		if (info->beacon_tx_mode == NL80211_BEACON_BURST_MODE)
+			param_value = WMI_BEACON_BURST_MODE;
+		else
+			param_value = WMI_BEACON_STAGGERED_MODE;
 		ret = ath11k_wmi_pdev_set_param(ar, param_id,
 						param_value, ar->pdev->pdev_id);
 		if (ret)
@@ -2144,8 +2147,9 @@ static void ath11k_mac_op_bss_info_changed(struct ieee80211_hw *hw,
 				    arvif->vdev_id);
 		else
 			ath11k_dbg(ar->ab, ATH11K_DBG_MAC,
-				   "Set staggered beacon mode for VDEV: %d\n",
-				   arvif->vdev_id);
+				   "Set %s beacon mode for VDEV: %d mode: %d\n",
+				   param_value ? "burst" : "staggered",
+				   arvif->vdev_id, param_value);
 
 		ret = ath11k_mac_setup_bcn_tmpl(arvif);
 		if (ret)
-- 
2.7.4


^ permalink raw reply related	[flat|nested] 24+ messages in thread

* [PATCH v5 3/3] ath11k: Add support for beacon tx mode
@ 2021-08-10  8:56   ` Maharaja Kennadyrajan
  0 siblings, 0 replies; 24+ messages in thread
From: Maharaja Kennadyrajan @ 2021-08-10  8:56 UTC (permalink / raw)
  To: ath11k, linux-wireless; +Cc: Maharaja Kennadyrajan

Add support to configure the beacon tx mode in
the driver.

Beacons can be sent out in burst(continuously in a single shot
one after another) or staggered (equally spread out over beacon
interval) mode.

Use the below configuration in the hostapd/wpa_supplicant
for AP/MESH mode to configure the beacon tx mode.

"beacon_tx_mode=N", where N = 1 for STAGGERED beacon mode
and N = 2 for BURST beacon mode.

Tested-on: IPQ8074 hw2.0 AHB WLAN.HK.2.5.0.1-00480-QCAHKSWPL_SILICONZ-1

Signed-off-by: Maharaja Kennadyrajan <mkenna@codeaurora.org>
---
 drivers/net/wireless/ath/ath11k/mac.c | 10 +++++++---
 1 file changed, 7 insertions(+), 3 deletions(-)

diff --git a/drivers/net/wireless/ath/ath11k/mac.c b/drivers/net/wireless/ath/ath11k/mac.c
index e9b3689..2eda788 100644
--- a/drivers/net/wireless/ath/ath11k/mac.c
+++ b/drivers/net/wireless/ath/ath11k/mac.c
@@ -2136,7 +2136,10 @@ static void ath11k_mac_op_bss_info_changed(struct ieee80211_hw *hw,
 
 	if (changed & BSS_CHANGED_BEACON) {
 		param_id = WMI_PDEV_PARAM_BEACON_TX_MODE;
-		param_value = WMI_BEACON_STAGGERED_MODE;
+		if (info->beacon_tx_mode == NL80211_BEACON_BURST_MODE)
+			param_value = WMI_BEACON_BURST_MODE;
+		else
+			param_value = WMI_BEACON_STAGGERED_MODE;
 		ret = ath11k_wmi_pdev_set_param(ar, param_id,
 						param_value, ar->pdev->pdev_id);
 		if (ret)
@@ -2144,8 +2147,9 @@ static void ath11k_mac_op_bss_info_changed(struct ieee80211_hw *hw,
 				    arvif->vdev_id);
 		else
 			ath11k_dbg(ar->ab, ATH11K_DBG_MAC,
-				   "Set staggered beacon mode for VDEV: %d\n",
-				   arvif->vdev_id);
+				   "Set %s beacon mode for VDEV: %d mode: %d\n",
+				   param_value ? "burst" : "staggered",
+				   arvif->vdev_id, param_value);
 
 		ret = ath11k_mac_setup_bcn_tmpl(arvif);
 		if (ret)
-- 
2.7.4


-- 
ath11k mailing list
ath11k@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/ath11k

^ permalink raw reply related	[flat|nested] 24+ messages in thread

* Re: [PATCH v5 1/3] nl80211: Add support for beacon tx mode
  2021-08-10  8:56   ` Maharaja Kennadyrajan
@ 2021-08-10 10:14     ` Felix Fietkau
  -1 siblings, 0 replies; 24+ messages in thread
From: Felix Fietkau @ 2021-08-10 10:14 UTC (permalink / raw)
  To: Maharaja Kennadyrajan, ath11k, linux-wireless


On 2021-08-10 10:56, Maharaja Kennadyrajan wrote:
> User can configure the below beacon tx mode
> 1. Staggered mode and 2. Burst mode while bring-up the AP
> or MESH.
> 
> Beacons can be sent out in burst(continuously in a single shot
> one after another) or staggered (equally spread out over beacon
> interval) mode.
> 
> Set the beacon_tx_mode as 1 for Staggered mode and 2 for
> burst mode.
What's the advantage of one over the other? When and why would the user
choose a different mode other than the default?

- Felix

^ permalink raw reply	[flat|nested] 24+ messages in thread

* Re: [PATCH v5 1/3] nl80211: Add support for beacon tx mode
@ 2021-08-10 10:14     ` Felix Fietkau
  0 siblings, 0 replies; 24+ messages in thread
From: Felix Fietkau @ 2021-08-10 10:14 UTC (permalink / raw)
  To: Maharaja Kennadyrajan, ath11k, linux-wireless


On 2021-08-10 10:56, Maharaja Kennadyrajan wrote:
> User can configure the below beacon tx mode
> 1. Staggered mode and 2. Burst mode while bring-up the AP
> or MESH.
> 
> Beacons can be sent out in burst(continuously in a single shot
> one after another) or staggered (equally spread out over beacon
> interval) mode.
> 
> Set the beacon_tx_mode as 1 for Staggered mode and 2 for
> burst mode.
What's the advantage of one over the other? When and why would the user
choose a different mode other than the default?

- Felix

-- 
ath11k mailing list
ath11k@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/ath11k

^ permalink raw reply	[flat|nested] 24+ messages in thread

* Re: [PATCH v5 1/3] nl80211: Add support for beacon tx mode
  2021-08-10  8:56   ` Maharaja Kennadyrajan
@ 2021-08-10 10:52     ` Sven Eckelmann
  -1 siblings, 0 replies; 24+ messages in thread
From: Sven Eckelmann @ 2021-08-10 10:52 UTC (permalink / raw)
  To: ath11k, linux-wireless, Maharaja Kennadyrajan

[-- Attachment #1: Type: text/plain, Size: 254 bytes --]

On Tuesday, 10 August 2021 10:56:21 CEST Maharaja Kennadyrajan wrote:
> 1. Staggered mode and 2. Burst mode while bring-up the AP
> or MESH.

Why when you bring up mesh or AP when it is actually a global setting for this 
radio/PHY?


Kind regards,
	Sven

[-- Attachment #2: This is a digitally signed message part. --]
[-- Type: application/pgp-signature, Size: 833 bytes --]

^ permalink raw reply	[flat|nested] 24+ messages in thread

* Re: [PATCH v5 1/3] nl80211: Add support for beacon tx mode
@ 2021-08-10 10:52     ` Sven Eckelmann
  0 siblings, 0 replies; 24+ messages in thread
From: Sven Eckelmann @ 2021-08-10 10:52 UTC (permalink / raw)
  To: ath11k, linux-wireless, Maharaja Kennadyrajan


[-- Attachment #1.1: Type: text/plain, Size: 254 bytes --]

On Tuesday, 10 August 2021 10:56:21 CEST Maharaja Kennadyrajan wrote:
> 1. Staggered mode and 2. Burst mode while bring-up the AP
> or MESH.

Why when you bring up mesh or AP when it is actually a global setting for this 
radio/PHY?


Kind regards,
	Sven

[-- Attachment #1.2: This is a digitally signed message part. --]
[-- Type: application/pgp-signature, Size: 833 bytes --]

[-- Attachment #2: Type: text/plain, Size: 102 bytes --]

-- 
ath11k mailing list
ath11k@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/ath11k

^ permalink raw reply	[flat|nested] 24+ messages in thread

* Re: [PATCH v5 1/3] nl80211: Add support for beacon tx mode
  2021-08-10 10:14     ` Felix Fietkau
@ 2021-08-10 12:02       ` Maharaja Kennadyrajan
  -1 siblings, 0 replies; 24+ messages in thread
From: Maharaja Kennadyrajan @ 2021-08-10 12:02 UTC (permalink / raw)
  To: Felix Fietkau; +Cc: ath11k, linux-wireless

On 2021-08-10 15:44, Felix Fietkau wrote:
> On 2021-08-10 10:56, Maharaja Kennadyrajan wrote:
>> User can configure the below beacon tx mode
>> 1. Staggered mode and 2. Burst mode while bring-up the AP
>> or MESH.
>> 
>> Beacons can be sent out in burst(continuously in a single shot
>> one after another) or staggered (equally spread out over beacon
>> interval) mode.
>> 
>> Set the beacon_tx_mode as 1 for Staggered mode and 2 for
>> burst mode.
> What's the advantage of one over the other? When and why would the user
> choose a different mode other than the default?
> 
[Maha]: In the multi-vap scenario and default or staggered mode,
tx failure of the packets will happen if the packets duration
is greater than the beacon interval between the two vaps.
In case of burst mode it works, where during retry it transmits
the packet.
> - Felix

^ permalink raw reply	[flat|nested] 24+ messages in thread

* Re: [PATCH v5 1/3] nl80211: Add support for beacon tx mode
@ 2021-08-10 12:02       ` Maharaja Kennadyrajan
  0 siblings, 0 replies; 24+ messages in thread
From: Maharaja Kennadyrajan @ 2021-08-10 12:02 UTC (permalink / raw)
  To: Felix Fietkau; +Cc: ath11k, linux-wireless

On 2021-08-10 15:44, Felix Fietkau wrote:
> On 2021-08-10 10:56, Maharaja Kennadyrajan wrote:
>> User can configure the below beacon tx mode
>> 1. Staggered mode and 2. Burst mode while bring-up the AP
>> or MESH.
>> 
>> Beacons can be sent out in burst(continuously in a single shot
>> one after another) or staggered (equally spread out over beacon
>> interval) mode.
>> 
>> Set the beacon_tx_mode as 1 for Staggered mode and 2 for
>> burst mode.
> What's the advantage of one over the other? When and why would the user
> choose a different mode other than the default?
> 
[Maha]: In the multi-vap scenario and default or staggered mode,
tx failure of the packets will happen if the packets duration
is greater than the beacon interval between the two vaps.
In case of burst mode it works, where during retry it transmits
the packet.
> - Felix

-- 
ath11k mailing list
ath11k@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/ath11k

^ permalink raw reply	[flat|nested] 24+ messages in thread

* Re: [PATCH v5 1/3] nl80211: Add support for beacon tx mode
  2021-08-10 12:02       ` Maharaja Kennadyrajan
@ 2021-08-10 14:33         ` Felix Fietkau
  -1 siblings, 0 replies; 24+ messages in thread
From: Felix Fietkau @ 2021-08-10 14:33 UTC (permalink / raw)
  To: Maharaja Kennadyrajan; +Cc: ath11k, linux-wireless

On 2021-08-10 14:02, Maharaja Kennadyrajan wrote:
> On 2021-08-10 15:44, Felix Fietkau wrote:
>> On 2021-08-10 10:56, Maharaja Kennadyrajan wrote:
>>> User can configure the below beacon tx mode
>>> 1. Staggered mode and 2. Burst mode while bring-up the AP
>>> or MESH.
>>> 
>>> Beacons can be sent out in burst(continuously in a single shot
>>> one after another) or staggered (equally spread out over beacon
>>> interval) mode.
>>> 
>>> Set the beacon_tx_mode as 1 for Staggered mode and 2 for
>>> burst mode.
>> What's the advantage of one over the other? When and why would the user
>> choose a different mode other than the default?
>> 
> [Maha]: In the multi-vap scenario and default or staggered mode,
> tx failure of the packets will happen if the packets duration
> is greater than the beacon interval between the two vaps.
> In case of burst mode it works, where during retry it transmits
> the packet.
It still seems to me like something that the driver should detect and
handle internally without user configuration, based on number of VAPs
and maybe multicast/beacon rate (since the packet duration issue will be
worse with CCK rates).

- Felix

^ permalink raw reply	[flat|nested] 24+ messages in thread

* Re: [PATCH v5 1/3] nl80211: Add support for beacon tx mode
@ 2021-08-10 14:33         ` Felix Fietkau
  0 siblings, 0 replies; 24+ messages in thread
From: Felix Fietkau @ 2021-08-10 14:33 UTC (permalink / raw)
  To: Maharaja Kennadyrajan; +Cc: ath11k, linux-wireless

On 2021-08-10 14:02, Maharaja Kennadyrajan wrote:
> On 2021-08-10 15:44, Felix Fietkau wrote:
>> On 2021-08-10 10:56, Maharaja Kennadyrajan wrote:
>>> User can configure the below beacon tx mode
>>> 1. Staggered mode and 2. Burst mode while bring-up the AP
>>> or MESH.
>>> 
>>> Beacons can be sent out in burst(continuously in a single shot
>>> one after another) or staggered (equally spread out over beacon
>>> interval) mode.
>>> 
>>> Set the beacon_tx_mode as 1 for Staggered mode and 2 for
>>> burst mode.
>> What's the advantage of one over the other? When and why would the user
>> choose a different mode other than the default?
>> 
> [Maha]: In the multi-vap scenario and default or staggered mode,
> tx failure of the packets will happen if the packets duration
> is greater than the beacon interval between the two vaps.
> In case of burst mode it works, where during retry it transmits
> the packet.
It still seems to me like something that the driver should detect and
handle internally without user configuration, based on number of VAPs
and maybe multicast/beacon rate (since the packet duration issue will be
worse with CCK rates).

- Felix

-- 
ath11k mailing list
ath11k@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/ath11k

^ permalink raw reply	[flat|nested] 24+ messages in thread

* Re: [PATCH v5 1/3] nl80211: Add support for beacon tx mode
  2021-08-10  8:56   ` Maharaja Kennadyrajan
@ 2021-08-10 15:43     ` Jeff Johnson
  -1 siblings, 0 replies; 24+ messages in thread
From: Jeff Johnson @ 2021-08-10 15:43 UTC (permalink / raw)
  To: Maharaja Kennadyrajan; +Cc: ath11k, linux-wireless, ath11k

On 2021-08-10 01:56, Maharaja Kennadyrajan wrote:
> User can configure the below beacon tx mode
> 1. Staggered mode and 2. Burst mode while bring-up the AP
> or MESH.
> 
> Beacons can be sent out in burst(continuously in a single shot
> one after another) or staggered (equally spread out over beacon
> interval) mode.
> 
> Set the beacon_tx_mode as 1 for Staggered mode and 2 for
> burst mode.
> 
> Hence, added the support in the nl80211/cfg80211
> layer to honour the beacon tx mode configuration and pass
> this value to the driver.
> 
> Tested-on: IPQ8074 hw2.0 AHB WLAN.HK.2.5.0.1-00630-QCAHKSWPL_SILICONZ-2
> 
> Signed-off-by: Maharaja Kennadyrajan <mkenna@codeaurora.org>
> ---
> 
> V5: Addressed Johannes's & Felix's comments on v4 patch.
> 
> V4: Rebases on latest ath.git TOT.
> 
> V3: Addressed Johnson's comment on v2 patch.
> 
> V2: Addressed Johannes's comment on v1 patch.
> 
>  include/net/cfg80211.h       |  4 ++++
>  include/uapi/linux/nl80211.h | 20 ++++++++++++++++++++
>  net/wireless/nl80211.c       | 11 +++++++++++
>  3 files changed, 35 insertions(+)
> 
> diff --git a/include/net/cfg80211.h b/include/net/cfg80211.h
> index 161cdf7..8c3777b 100644
> --- a/include/net/cfg80211.h
> +++ b/include/net/cfg80211.h
> @@ -1189,6 +1189,7 @@ enum cfg80211_ap_settings_flags {
>   * @he_oper: HE operation IE (or %NULL if HE isn't enabled)
>   * @fils_discovery: FILS discovery transmission parameters
>   * @unsol_bcast_probe_resp: Unsolicited broadcast probe response
> parameters
> + * @beacon_tx_mode: Beacon Tx Mode setting
>   */
>  struct cfg80211_ap_settings {
>  	struct cfg80211_chan_def chandef;
> @@ -1221,6 +1222,7 @@ struct cfg80211_ap_settings {
>  	struct cfg80211_he_bss_color he_bss_color;
>  	struct cfg80211_fils_discovery fils_discovery;
>  	struct cfg80211_unsol_bcast_probe_resp unsol_bcast_probe_resp;
> +	enum nl80211_beacon_tx_mode beacon_tx_mode;
>  };
> 
>  /**
> @@ -2066,6 +2068,7 @@ struct mesh_config {
>   *	to operate on DFS channels.
>   * @control_port_over_nl80211: TRUE if userspace expects to exchange
> control
>   *	port frames over NL80211 instead of the network interface.
> + * @beacon_tx_mode: Beacon Tx Mode setting.
>   *
>   * These parameters are fixed when the mesh is created.
>   */
> @@ -2089,6 +2092,7 @@ struct mesh_setup {
>  	struct cfg80211_bitrate_mask beacon_rate;
>  	bool userspace_handles_dfs;
>  	bool control_port_over_nl80211;
> +	enum nl80211_beacon_tx_mode beacon_tx_mode;
>  };
> 
>  /**
> diff --git a/include/uapi/linux/nl80211.h 
> b/include/uapi/linux/nl80211.h
> index db47499..29c6429 100644
> --- a/include/uapi/linux/nl80211.h
> +++ b/include/uapi/linux/nl80211.h
> @@ -2560,6 +2560,13 @@ enum nl80211_commands {
>   *	disassoc events to indicate that an immediate reconnect to the AP
>   *	is desired.
>   *
> + * @NL80211_ATTR_BEACON_TX_MODE: used to configure the beacon tx mode
> (u32),
> + *	as specified in the &enum nl80211_beacon_tx_mode. The user-space
> + *	shall use this attribute to configure the tx mode of beacons.

s/shall/can/
'shall' implies a required action whereas 'can' implies an optional 
action

> + *	Beacons can be sent out in burst(continuously in a single shot
> + *	one after another) or staggered (equally spread out over beacon
> + *	interval) mode.
> + *
>   * @NUM_NL80211_ATTR: total number of nl80211_attrs available
>   * @NL80211_ATTR_MAX: highest attribute number currently defined
>   * @__NL80211_ATTR_AFTER_LAST: internal use
> @@ -3057,6 +3064,8 @@ enum nl80211_attrs {
> 
>  	NL80211_ATTR_DISABLE_HE,
> 
> +	NL80211_ATTR_BEACON_TX_MODE,
> +
>  	/* add attributes here, update the policy in nl80211.c */
> 
>  	__NL80211_ATTR_AFTER_LAST,
> @@ -7306,4 +7315,15 @@ enum nl80211_sar_specs_attrs {
>  	NL80211_SAR_ATTR_SPECS_MAX = __NL80211_SAR_ATTR_SPECS_LAST - 1,
>  };
> 
> +/**
> + * enum nl80211_beacon_tx_mode - Beacon Tx Mode enum.
> + * @NL80211_BEACON_STAGGERED_MODE: Used to configure beacon tx mode as
> + *	staggered mode. This is the default beacon tx mode.
> + * @NL80211_BEACON_BURST_MODE: Used to configure beacon tx mode as 
> burst
> mode.
> + */
> +enum nl80211_beacon_tx_mode {

what happened to 0?

now we're back to the issue that I originally reported that if the 
attribute is not present you send 0 to the driver which is not a valid 
enumeration
See my additional comments further below

> +	NL80211_BEACON_STAGGERED_MODE = 1,
> +	NL80211_BEACON_BURST_MODE = 2,
> +};
> +
>  #endif /* __LINUX_NL80211_H */
> diff --git a/net/wireless/nl80211.c b/net/wireless/nl80211.c
> index 50eb405..c00e326 100644
> --- a/net/wireless/nl80211.c
> +++ b/net/wireless/nl80211.c
> @@ -759,6 +759,9 @@ static const struct nla_policy
> nl80211_policy[NUM_NL80211_ATTR] = {
>  	[NL80211_ATTR_RECONNECT_REQUESTED] = { .type = NLA_REJECT },
>  	[NL80211_ATTR_SAR_SPEC] = NLA_POLICY_NESTED(sar_policy),
>  	[NL80211_ATTR_DISABLE_HE] = { .type = NLA_FLAG },
> +	[NL80211_ATTR_BEACON_TX_MODE] =
> +		NLA_POLICY_RANGE(NLA_U32, NL80211_BEACON_STAGGERED_MODE,
> +				 NL80211_BEACON_BURST_MODE),
>  };
> 
>  /* policy for the key attributes */
> @@ -5346,6 +5349,10 @@ static int nl80211_start_ap(struct sk_buff *skb,
> struct genl_info *info)
>  	params.dtim_period =
>  		nla_get_u32(info->attrs[NL80211_ATTR_DTIM_PERIOD]);
> 
> +	if (info->attrs[NL80211_ATTR_BEACON_TX_MODE])
> +		params.beacon_tx_mode =
> +
> nla_get_u32(info->attrs[NL80211_ATTR_BEACON_TX_MODE]);
> +
>  	err = cfg80211_validate_beacon_int(rdev,
> dev->ieee80211_ptr->iftype,
>  					   params.beacon_interval);
>  	if (err)
> @@ -11900,6 +11907,10 @@ static int nl80211_join_mesh(struct sk_buff 
> *skb,
> struct genl_info *info)
>  			return -EINVAL;
>  	}
> 
> +	if (info->attrs[NL80211_ATTR_BEACON_TX_MODE])
> +		setup.beacon_tx_mode =
> +
> nla_get_u32(info->attrs[NL80211_ATTR_BEACON_TX_MODE]);
> +

if you are not going to have an enum for default = 0 then you need an 
else to set
beacon_tx_mode = NL80211_BEACON_STAGGERED_MODE


>  	if (info->attrs[NL80211_ATTR_MESH_SETUP]) {
>  		/* parse additional setup parameters if given */
>  		err = nl80211_parse_mesh_setup(info, &setup);
> --
> 2.7.4

-- 
The Qualcomm Innovation Center, Inc. is a member of the Code Aurora 
Forum,
a Linux Foundation Collaborative Project

^ permalink raw reply	[flat|nested] 24+ messages in thread

* Re: [PATCH v5 1/3] nl80211: Add support for beacon tx mode
@ 2021-08-10 15:43     ` Jeff Johnson
  0 siblings, 0 replies; 24+ messages in thread
From: Jeff Johnson @ 2021-08-10 15:43 UTC (permalink / raw)
  To: Maharaja Kennadyrajan; +Cc: ath11k, linux-wireless, ath11k

On 2021-08-10 01:56, Maharaja Kennadyrajan wrote:
> User can configure the below beacon tx mode
> 1. Staggered mode and 2. Burst mode while bring-up the AP
> or MESH.
> 
> Beacons can be sent out in burst(continuously in a single shot
> one after another) or staggered (equally spread out over beacon
> interval) mode.
> 
> Set the beacon_tx_mode as 1 for Staggered mode and 2 for
> burst mode.
> 
> Hence, added the support in the nl80211/cfg80211
> layer to honour the beacon tx mode configuration and pass
> this value to the driver.
> 
> Tested-on: IPQ8074 hw2.0 AHB WLAN.HK.2.5.0.1-00630-QCAHKSWPL_SILICONZ-2
> 
> Signed-off-by: Maharaja Kennadyrajan <mkenna@codeaurora.org>
> ---
> 
> V5: Addressed Johannes's & Felix's comments on v4 patch.
> 
> V4: Rebases on latest ath.git TOT.
> 
> V3: Addressed Johnson's comment on v2 patch.
> 
> V2: Addressed Johannes's comment on v1 patch.
> 
>  include/net/cfg80211.h       |  4 ++++
>  include/uapi/linux/nl80211.h | 20 ++++++++++++++++++++
>  net/wireless/nl80211.c       | 11 +++++++++++
>  3 files changed, 35 insertions(+)
> 
> diff --git a/include/net/cfg80211.h b/include/net/cfg80211.h
> index 161cdf7..8c3777b 100644
> --- a/include/net/cfg80211.h
> +++ b/include/net/cfg80211.h
> @@ -1189,6 +1189,7 @@ enum cfg80211_ap_settings_flags {
>   * @he_oper: HE operation IE (or %NULL if HE isn't enabled)
>   * @fils_discovery: FILS discovery transmission parameters
>   * @unsol_bcast_probe_resp: Unsolicited broadcast probe response
> parameters
> + * @beacon_tx_mode: Beacon Tx Mode setting
>   */
>  struct cfg80211_ap_settings {
>  	struct cfg80211_chan_def chandef;
> @@ -1221,6 +1222,7 @@ struct cfg80211_ap_settings {
>  	struct cfg80211_he_bss_color he_bss_color;
>  	struct cfg80211_fils_discovery fils_discovery;
>  	struct cfg80211_unsol_bcast_probe_resp unsol_bcast_probe_resp;
> +	enum nl80211_beacon_tx_mode beacon_tx_mode;
>  };
> 
>  /**
> @@ -2066,6 +2068,7 @@ struct mesh_config {
>   *	to operate on DFS channels.
>   * @control_port_over_nl80211: TRUE if userspace expects to exchange
> control
>   *	port frames over NL80211 instead of the network interface.
> + * @beacon_tx_mode: Beacon Tx Mode setting.
>   *
>   * These parameters are fixed when the mesh is created.
>   */
> @@ -2089,6 +2092,7 @@ struct mesh_setup {
>  	struct cfg80211_bitrate_mask beacon_rate;
>  	bool userspace_handles_dfs;
>  	bool control_port_over_nl80211;
> +	enum nl80211_beacon_tx_mode beacon_tx_mode;
>  };
> 
>  /**
> diff --git a/include/uapi/linux/nl80211.h 
> b/include/uapi/linux/nl80211.h
> index db47499..29c6429 100644
> --- a/include/uapi/linux/nl80211.h
> +++ b/include/uapi/linux/nl80211.h
> @@ -2560,6 +2560,13 @@ enum nl80211_commands {
>   *	disassoc events to indicate that an immediate reconnect to the AP
>   *	is desired.
>   *
> + * @NL80211_ATTR_BEACON_TX_MODE: used to configure the beacon tx mode
> (u32),
> + *	as specified in the &enum nl80211_beacon_tx_mode. The user-space
> + *	shall use this attribute to configure the tx mode of beacons.

s/shall/can/
'shall' implies a required action whereas 'can' implies an optional 
action

> + *	Beacons can be sent out in burst(continuously in a single shot
> + *	one after another) or staggered (equally spread out over beacon
> + *	interval) mode.
> + *
>   * @NUM_NL80211_ATTR: total number of nl80211_attrs available
>   * @NL80211_ATTR_MAX: highest attribute number currently defined
>   * @__NL80211_ATTR_AFTER_LAST: internal use
> @@ -3057,6 +3064,8 @@ enum nl80211_attrs {
> 
>  	NL80211_ATTR_DISABLE_HE,
> 
> +	NL80211_ATTR_BEACON_TX_MODE,
> +
>  	/* add attributes here, update the policy in nl80211.c */
> 
>  	__NL80211_ATTR_AFTER_LAST,
> @@ -7306,4 +7315,15 @@ enum nl80211_sar_specs_attrs {
>  	NL80211_SAR_ATTR_SPECS_MAX = __NL80211_SAR_ATTR_SPECS_LAST - 1,
>  };
> 
> +/**
> + * enum nl80211_beacon_tx_mode - Beacon Tx Mode enum.
> + * @NL80211_BEACON_STAGGERED_MODE: Used to configure beacon tx mode as
> + *	staggered mode. This is the default beacon tx mode.
> + * @NL80211_BEACON_BURST_MODE: Used to configure beacon tx mode as 
> burst
> mode.
> + */
> +enum nl80211_beacon_tx_mode {

what happened to 0?

now we're back to the issue that I originally reported that if the 
attribute is not present you send 0 to the driver which is not a valid 
enumeration
See my additional comments further below

> +	NL80211_BEACON_STAGGERED_MODE = 1,
> +	NL80211_BEACON_BURST_MODE = 2,
> +};
> +
>  #endif /* __LINUX_NL80211_H */
> diff --git a/net/wireless/nl80211.c b/net/wireless/nl80211.c
> index 50eb405..c00e326 100644
> --- a/net/wireless/nl80211.c
> +++ b/net/wireless/nl80211.c
> @@ -759,6 +759,9 @@ static const struct nla_policy
> nl80211_policy[NUM_NL80211_ATTR] = {
>  	[NL80211_ATTR_RECONNECT_REQUESTED] = { .type = NLA_REJECT },
>  	[NL80211_ATTR_SAR_SPEC] = NLA_POLICY_NESTED(sar_policy),
>  	[NL80211_ATTR_DISABLE_HE] = { .type = NLA_FLAG },
> +	[NL80211_ATTR_BEACON_TX_MODE] =
> +		NLA_POLICY_RANGE(NLA_U32, NL80211_BEACON_STAGGERED_MODE,
> +				 NL80211_BEACON_BURST_MODE),
>  };
> 
>  /* policy for the key attributes */
> @@ -5346,6 +5349,10 @@ static int nl80211_start_ap(struct sk_buff *skb,
> struct genl_info *info)
>  	params.dtim_period =
>  		nla_get_u32(info->attrs[NL80211_ATTR_DTIM_PERIOD]);
> 
> +	if (info->attrs[NL80211_ATTR_BEACON_TX_MODE])
> +		params.beacon_tx_mode =
> +
> nla_get_u32(info->attrs[NL80211_ATTR_BEACON_TX_MODE]);
> +
>  	err = cfg80211_validate_beacon_int(rdev,
> dev->ieee80211_ptr->iftype,
>  					   params.beacon_interval);
>  	if (err)
> @@ -11900,6 +11907,10 @@ static int nl80211_join_mesh(struct sk_buff 
> *skb,
> struct genl_info *info)
>  			return -EINVAL;
>  	}
> 
> +	if (info->attrs[NL80211_ATTR_BEACON_TX_MODE])
> +		setup.beacon_tx_mode =
> +
> nla_get_u32(info->attrs[NL80211_ATTR_BEACON_TX_MODE]);
> +

if you are not going to have an enum for default = 0 then you need an 
else to set
beacon_tx_mode = NL80211_BEACON_STAGGERED_MODE


>  	if (info->attrs[NL80211_ATTR_MESH_SETUP]) {
>  		/* parse additional setup parameters if given */
>  		err = nl80211_parse_mesh_setup(info, &setup);
> --
> 2.7.4

-- 
The Qualcomm Innovation Center, Inc. is a member of the Code Aurora 
Forum,
a Linux Foundation Collaborative Project

-- 
ath11k mailing list
ath11k@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/ath11k

^ permalink raw reply	[flat|nested] 24+ messages in thread

* Re: [PATCH v5 3/3] ath11k: Add support for beacon tx mode
  2021-08-10  8:56   ` Maharaja Kennadyrajan
@ 2021-08-10 15:54     ` Jeff Johnson
  -1 siblings, 0 replies; 24+ messages in thread
From: Jeff Johnson @ 2021-08-10 15:54 UTC (permalink / raw)
  To: Maharaja Kennadyrajan; +Cc: ath11k, linux-wireless, ath11k

On 2021-08-10 01:56, Maharaja Kennadyrajan wrote:
> Add support to configure the beacon tx mode in
> the driver.
> 
> Beacons can be sent out in burst(continuously in a single shot
> one after another) or staggered (equally spread out over beacon
> interval) mode.
> 
> Use the below configuration in the hostapd/wpa_supplicant
> for AP/MESH mode to configure the beacon tx mode.
> 
> "beacon_tx_mode=N", where N = 1 for STAGGERED beacon mode
> and N = 2 for BURST beacon mode.
> 
> Tested-on: IPQ8074 hw2.0 AHB WLAN.HK.2.5.0.1-00480-QCAHKSWPL_SILICONZ-1
> 
> Signed-off-by: Maharaja Kennadyrajan <mkenna@codeaurora.org>
> ---
>  drivers/net/wireless/ath/ath11k/mac.c | 10 +++++++---
>  1 file changed, 7 insertions(+), 3 deletions(-)
> 
> diff --git a/drivers/net/wireless/ath/ath11k/mac.c
> b/drivers/net/wireless/ath/ath11k/mac.c
> index e9b3689..2eda788 100644
> --- a/drivers/net/wireless/ath/ath11k/mac.c
> +++ b/drivers/net/wireless/ath/ath11k/mac.c
> @@ -2136,7 +2136,10 @@ static void 
> ath11k_mac_op_bss_info_changed(struct
> ieee80211_hw *hw,
> 
>  	if (changed & BSS_CHANGED_BEACON) {
>  		param_id = WMI_PDEV_PARAM_BEACON_TX_MODE;
> -		param_value = WMI_BEACON_STAGGERED_MODE;
> +		if (info->beacon_tx_mode == NL80211_BEACON_BURST_MODE)
> +			param_value = WMI_BEACON_BURST_MODE;
> +		else
> +			param_value = WMI_BEACON_STAGGERED_MODE;
>  		ret = ath11k_wmi_pdev_set_param(ar, param_id,
>  						param_value,
> ar->pdev->pdev_id);
>  		if (ret)
> @@ -2144,8 +2147,9 @@ static void ath11k_mac_op_bss_info_changed(struct
> ieee80211_hw *hw,
>  				    arvif->vdev_id);
>  		else
>  			ath11k_dbg(ar->ab, ATH11K_DBG_MAC,
> -				   "Set staggered beacon mode for VDEV:
> %d\n",
> -				   arvif->vdev_id);
> +				   "Set %s beacon mode for VDEV: %d mode:
> %d\n",
> +				   param_value ? "burst" : "staggered",

Suggest this should be param_value == WMI_BEACON_BURST_MODE ?
or other similar logic since ideally code should avoid making 
assumptions about the values assigned to enumerators

> +				   arvif->vdev_id, param_value);
> 
>  		ret = ath11k_mac_setup_bcn_tmpl(arvif);
>  		if (ret)
> --
> 2.7.4

-- 
The Qualcomm Innovation Center, Inc. is a member of the Code Aurora 
Forum,
a Linux Foundation Collaborative Project

^ permalink raw reply	[flat|nested] 24+ messages in thread

* Re: [PATCH v5 3/3] ath11k: Add support for beacon tx mode
@ 2021-08-10 15:54     ` Jeff Johnson
  0 siblings, 0 replies; 24+ messages in thread
From: Jeff Johnson @ 2021-08-10 15:54 UTC (permalink / raw)
  To: Maharaja Kennadyrajan; +Cc: ath11k, linux-wireless, ath11k

On 2021-08-10 01:56, Maharaja Kennadyrajan wrote:
> Add support to configure the beacon tx mode in
> the driver.
> 
> Beacons can be sent out in burst(continuously in a single shot
> one after another) or staggered (equally spread out over beacon
> interval) mode.
> 
> Use the below configuration in the hostapd/wpa_supplicant
> for AP/MESH mode to configure the beacon tx mode.
> 
> "beacon_tx_mode=N", where N = 1 for STAGGERED beacon mode
> and N = 2 for BURST beacon mode.
> 
> Tested-on: IPQ8074 hw2.0 AHB WLAN.HK.2.5.0.1-00480-QCAHKSWPL_SILICONZ-1
> 
> Signed-off-by: Maharaja Kennadyrajan <mkenna@codeaurora.org>
> ---
>  drivers/net/wireless/ath/ath11k/mac.c | 10 +++++++---
>  1 file changed, 7 insertions(+), 3 deletions(-)
> 
> diff --git a/drivers/net/wireless/ath/ath11k/mac.c
> b/drivers/net/wireless/ath/ath11k/mac.c
> index e9b3689..2eda788 100644
> --- a/drivers/net/wireless/ath/ath11k/mac.c
> +++ b/drivers/net/wireless/ath/ath11k/mac.c
> @@ -2136,7 +2136,10 @@ static void 
> ath11k_mac_op_bss_info_changed(struct
> ieee80211_hw *hw,
> 
>  	if (changed & BSS_CHANGED_BEACON) {
>  		param_id = WMI_PDEV_PARAM_BEACON_TX_MODE;
> -		param_value = WMI_BEACON_STAGGERED_MODE;
> +		if (info->beacon_tx_mode == NL80211_BEACON_BURST_MODE)
> +			param_value = WMI_BEACON_BURST_MODE;
> +		else
> +			param_value = WMI_BEACON_STAGGERED_MODE;
>  		ret = ath11k_wmi_pdev_set_param(ar, param_id,
>  						param_value,
> ar->pdev->pdev_id);
>  		if (ret)
> @@ -2144,8 +2147,9 @@ static void ath11k_mac_op_bss_info_changed(struct
> ieee80211_hw *hw,
>  				    arvif->vdev_id);
>  		else
>  			ath11k_dbg(ar->ab, ATH11K_DBG_MAC,
> -				   "Set staggered beacon mode for VDEV:
> %d\n",
> -				   arvif->vdev_id);
> +				   "Set %s beacon mode for VDEV: %d mode:
> %d\n",
> +				   param_value ? "burst" : "staggered",

Suggest this should be param_value == WMI_BEACON_BURST_MODE ?
or other similar logic since ideally code should avoid making 
assumptions about the values assigned to enumerators

> +				   arvif->vdev_id, param_value);
> 
>  		ret = ath11k_mac_setup_bcn_tmpl(arvif);
>  		if (ret)
> --
> 2.7.4

-- 
The Qualcomm Innovation Center, Inc. is a member of the Code Aurora 
Forum,
a Linux Foundation Collaborative Project

-- 
ath11k mailing list
ath11k@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/ath11k

^ permalink raw reply	[flat|nested] 24+ messages in thread

* Re: [PATCH v5 1/3] nl80211: Add support for beacon tx mode
  2021-08-10 10:52     ` Sven Eckelmann
@ 2022-03-24 18:10       ` Maharaja Kennadyrajan
  -1 siblings, 0 replies; 24+ messages in thread
From: Maharaja Kennadyrajan @ 2022-03-24 18:10 UTC (permalink / raw)
  To: Sven Eckelmann; +Cc: ath11k, linux-wireless

On 2021-08-10 16:22, Sven Eckelmann wrote:
> On Tuesday, 10 August 2021 10:56:21 CEST Maharaja Kennadyrajan wrote:
>> 1. Staggered mode and 2. Burst mode while bring-up the AP
>> or MESH.
> 
> Why when you bring up mesh or AP when it is actually a global setting 
> for this
> radio/PHY?

[Maha]: yes, it is radio/PHY setting only and it is supported for AP and 
MESH mode now.

> 
> Kind regards,
> 	Sven

^ permalink raw reply	[flat|nested] 24+ messages in thread

* Re: [PATCH v5 1/3] nl80211: Add support for beacon tx mode
@ 2022-03-24 18:10       ` Maharaja Kennadyrajan
  0 siblings, 0 replies; 24+ messages in thread
From: Maharaja Kennadyrajan @ 2022-03-24 18:10 UTC (permalink / raw)
  To: Sven Eckelmann; +Cc: ath11k, linux-wireless

On 2021-08-10 16:22, Sven Eckelmann wrote:
> On Tuesday, 10 August 2021 10:56:21 CEST Maharaja Kennadyrajan wrote:
>> 1. Staggered mode and 2. Burst mode while bring-up the AP
>> or MESH.
> 
> Why when you bring up mesh or AP when it is actually a global setting 
> for this
> radio/PHY?

[Maha]: yes, it is radio/PHY setting only and it is supported for AP and 
MESH mode now.

> 
> Kind regards,
> 	Sven

-- 
ath11k mailing list
ath11k@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/ath11k

^ permalink raw reply	[flat|nested] 24+ messages in thread

* Re: [PATCH v5 1/3] nl80211: Add support for beacon tx mode
  2022-03-24 18:10       ` Maharaja Kennadyrajan
@ 2022-03-25  7:26         ` Sven Eckelmann
  -1 siblings, 0 replies; 24+ messages in thread
From: Sven Eckelmann @ 2022-03-25  7:26 UTC (permalink / raw)
  To: Maharaja Kennadyrajan; +Cc: ath11k, linux-wireless

[-- Attachment #1: Type: text/plain, Size: 252 bytes --]

On Thursday, 24 March 2022 19:10:20 CET Maharaja Kennadyrajan wrote:
> [Maha]: yes, it is radio/PHY setting only and it is supported for AP and 
> MESH mode now.

But why are you setting it by vif when it is actually a PHY setting?

Kind regards,
	Sven

[-- Attachment #2: This is a digitally signed message part. --]
[-- Type: application/pgp-signature, Size: 833 bytes --]

^ permalink raw reply	[flat|nested] 24+ messages in thread

* Re: [PATCH v5 1/3] nl80211: Add support for beacon tx mode
@ 2022-03-25  7:26         ` Sven Eckelmann
  0 siblings, 0 replies; 24+ messages in thread
From: Sven Eckelmann @ 2022-03-25  7:26 UTC (permalink / raw)
  To: Maharaja Kennadyrajan; +Cc: ath11k, linux-wireless


[-- Attachment #1.1: Type: text/plain, Size: 252 bytes --]

On Thursday, 24 March 2022 19:10:20 CET Maharaja Kennadyrajan wrote:
> [Maha]: yes, it is radio/PHY setting only and it is supported for AP and 
> MESH mode now.

But why are you setting it by vif when it is actually a PHY setting?

Kind regards,
	Sven

[-- Attachment #1.2: This is a digitally signed message part. --]
[-- Type: application/pgp-signature, Size: 833 bytes --]

[-- Attachment #2: Type: text/plain, Size: 102 bytes --]

-- 
ath11k mailing list
ath11k@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/ath11k

^ permalink raw reply	[flat|nested] 24+ messages in thread

end of thread, other threads:[~2022-03-25  7:26 UTC | newest]

Thread overview: 24+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-08-10  8:56 [PATCH v5 0/3] Add support to configure beacon tx mode Maharaja Kennadyrajan
2021-08-10  8:56 ` Maharaja Kennadyrajan
2021-08-10  8:56 ` [PATCH v5 1/3] nl80211: Add support for " Maharaja Kennadyrajan
2021-08-10  8:56   ` Maharaja Kennadyrajan
2021-08-10 10:14   ` Felix Fietkau
2021-08-10 10:14     ` Felix Fietkau
2021-08-10 12:02     ` Maharaja Kennadyrajan
2021-08-10 12:02       ` Maharaja Kennadyrajan
2021-08-10 14:33       ` Felix Fietkau
2021-08-10 14:33         ` Felix Fietkau
2021-08-10 10:52   ` Sven Eckelmann
2021-08-10 10:52     ` Sven Eckelmann
2022-03-24 18:10     ` Maharaja Kennadyrajan
2022-03-24 18:10       ` Maharaja Kennadyrajan
2022-03-25  7:26       ` Sven Eckelmann
2022-03-25  7:26         ` Sven Eckelmann
2021-08-10 15:43   ` Jeff Johnson
2021-08-10 15:43     ` Jeff Johnson
2021-08-10  8:56 ` [PATCH v5 2/3] mac80211: " Maharaja Kennadyrajan
2021-08-10  8:56   ` Maharaja Kennadyrajan
2021-08-10  8:56 ` [PATCH v5 3/3] ath11k: " Maharaja Kennadyrajan
2021-08-10  8:56   ` Maharaja Kennadyrajan
2021-08-10 15:54   ` Jeff Johnson
2021-08-10 15:54     ` Jeff Johnson

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.