All of lore.kernel.org
 help / color / mirror / Atom feed
From: Wen Gong <wgong@codeaurora.org>
To: johannes@sipsolutions.net, ath11k@lists.infradead.org
Cc: linux-wireless@vger.kernel.org, wgong@codeaurora.org
Subject: [PATCH v2 8/8] mac80211: save transmit power envelope element and power constraint
Date: Fri, 20 Aug 2021 08:20:41 -0400	[thread overview]
Message-ID: <20210820122041.12157-9-wgong@codeaurora.org> (raw)
In-Reply-To: <20210820122041.12157-1-wgong@codeaurora.org>

This is to save the transmit power envelope element and power
constraint in struct ieee80211_bss_conf for 6 GHz. Lower driver
will use this info to calculate the power limit.

Signed-off-by: Wen Gong <wgong@codeaurora.org>
---
 include/net/mac80211.h |  6 ++++++
 net/mac80211/chan.c    |  9 +++++++++
 net/mac80211/mlme.c    | 26 ++++++++++++++++++++++++++
 3 files changed, 41 insertions(+)

diff --git a/include/net/mac80211.h b/include/net/mac80211.h
index e89530d0d9c6..6e11e122e364 100644
--- a/include/net/mac80211.h
+++ b/include/net/mac80211.h
@@ -631,6 +631,9 @@ 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.
+ * @tx_pwr_env: transmit power envelope array of BSS.
+ * @tx_pwr_env_num: number of @tx_pwr_env.
+ * @pwr_reduction: power constraint of BSS.
  */
 struct ieee80211_bss_conf {
 	const u8 *bssid;
@@ -700,6 +703,9 @@ struct ieee80211_bss_conf {
 	u32 unsol_bcast_probe_resp_interval;
 	bool s1g;
 	struct cfg80211_bitrate_mask beacon_tx_rate;
+	struct ieee80211_tx_pwr_env tx_pwr_env[IEEE80211_TPE_MAX_IE_COUNT];
+	u8 tx_pwr_env_num;
+	u8 pwr_reduction;
 };
 
 /**
diff --git a/net/mac80211/chan.c b/net/mac80211/chan.c
index 907bb1f748a1..149d4ac798f6 100644
--- a/net/mac80211/chan.c
+++ b/net/mac80211/chan.c
@@ -721,6 +721,15 @@ static int ieee80211_assign_vif_chanctx(struct ieee80211_sub_if_data *sdata,
 					 lockdep_is_held(&local->chanctx_mtx));
 
 	if (conf) {
+		if (conf->def.chan->band == NL80211_BAND_6GHZ) {
+			struct ieee80211_bss_conf *bss_conf;
+
+			bss_conf = &sdata->vif.bss_conf;
+			bss_conf->pwr_reduction = 0;
+			bss_conf->tx_pwr_env_num = 0;
+			memset(bss_conf->tx_pwr_env, 0, sizeof(bss_conf->tx_pwr_env));
+		}
+
 		curr_ctx = container_of(conf, struct ieee80211_chanctx, conf);
 
 		drv_unassign_vif_chanctx(local, sdata, curr_ctx);
diff --git a/net/mac80211/mlme.c b/net/mac80211/mlme.c
index 2480bd0577bb..a6d66b4ad7ee 100644
--- a/net/mac80211/mlme.c
+++ b/net/mac80211/mlme.c
@@ -5070,6 +5070,7 @@ static int ieee80211_prep_channel(struct ieee80211_sub_if_data *sdata,
 
 	if (!(ifmgd->flags & IEEE80211_STA_DISABLE_HE)) {
 		const struct cfg80211_bss_ies *ies;
+		struct ieee80211_bss_conf *bss_conf;
 		const u8 *he_oper_ie;
 
 		ies = rcu_dereference(cbss->ies);
@@ -5081,6 +5082,31 @@ static int ieee80211_prep_channel(struct ieee80211_sub_if_data *sdata,
 		else
 			he_oper = NULL;
 
+		if (is_6ghz) {
+			struct ieee802_11_elems elems;
+			u8 i, j = 0;
+
+			ieee802_11_parse_elems(ies->data, ies->len, false, &elems,
+					       NULL, NULL);
+
+			if (elems.pwr_constr_elem)
+				bss_conf->pwr_reduction = *elems.pwr_constr_elem;
+
+			BUILD_BUG_ON(ARRAY_SIZE(bss_conf->tx_pwr_env) !=
+				     ARRAY_SIZE(elems.tx_pwr_env));
+
+			for (i = 0; i < elems.tx_pwr_env_num; i++) {
+				if (elems.tx_pwr_env_len[i] >
+				    sizeof(bss_conf->tx_pwr_env[j]))
+					continue;
+
+				bss_conf->tx_pwr_env_num++;
+				memcpy(&bss_conf->tx_pwr_env[j], elems.tx_pwr_env[i],
+				       elems.tx_pwr_env_len[i]);
+				j++;
+			}
+		}
+
 		if (!ieee80211_verify_sta_he_mcs_support(sband, he_oper))
 			ifmgd->flags |= IEEE80211_STA_DISABLE_HE;
 	}
-- 
2.31.1


WARNING: multiple messages have this Message-ID (diff)
From: Wen Gong <wgong@codeaurora.org>
To: johannes@sipsolutions.net, ath11k@lists.infradead.org
Cc: linux-wireless@vger.kernel.org, wgong@codeaurora.org
Subject: [PATCH v2 8/8] mac80211: save transmit power envelope element and power constraint
Date: Fri, 20 Aug 2021 08:20:41 -0400	[thread overview]
Message-ID: <20210820122041.12157-9-wgong@codeaurora.org> (raw)
In-Reply-To: <20210820122041.12157-1-wgong@codeaurora.org>

This is to save the transmit power envelope element and power
constraint in struct ieee80211_bss_conf for 6 GHz. Lower driver
will use this info to calculate the power limit.

Signed-off-by: Wen Gong <wgong@codeaurora.org>
---
 include/net/mac80211.h |  6 ++++++
 net/mac80211/chan.c    |  9 +++++++++
 net/mac80211/mlme.c    | 26 ++++++++++++++++++++++++++
 3 files changed, 41 insertions(+)

diff --git a/include/net/mac80211.h b/include/net/mac80211.h
index e89530d0d9c6..6e11e122e364 100644
--- a/include/net/mac80211.h
+++ b/include/net/mac80211.h
@@ -631,6 +631,9 @@ 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.
+ * @tx_pwr_env: transmit power envelope array of BSS.
+ * @tx_pwr_env_num: number of @tx_pwr_env.
+ * @pwr_reduction: power constraint of BSS.
  */
 struct ieee80211_bss_conf {
 	const u8 *bssid;
@@ -700,6 +703,9 @@ struct ieee80211_bss_conf {
 	u32 unsol_bcast_probe_resp_interval;
 	bool s1g;
 	struct cfg80211_bitrate_mask beacon_tx_rate;
+	struct ieee80211_tx_pwr_env tx_pwr_env[IEEE80211_TPE_MAX_IE_COUNT];
+	u8 tx_pwr_env_num;
+	u8 pwr_reduction;
 };
 
 /**
diff --git a/net/mac80211/chan.c b/net/mac80211/chan.c
index 907bb1f748a1..149d4ac798f6 100644
--- a/net/mac80211/chan.c
+++ b/net/mac80211/chan.c
@@ -721,6 +721,15 @@ static int ieee80211_assign_vif_chanctx(struct ieee80211_sub_if_data *sdata,
 					 lockdep_is_held(&local->chanctx_mtx));
 
 	if (conf) {
+		if (conf->def.chan->band == NL80211_BAND_6GHZ) {
+			struct ieee80211_bss_conf *bss_conf;
+
+			bss_conf = &sdata->vif.bss_conf;
+			bss_conf->pwr_reduction = 0;
+			bss_conf->tx_pwr_env_num = 0;
+			memset(bss_conf->tx_pwr_env, 0, sizeof(bss_conf->tx_pwr_env));
+		}
+
 		curr_ctx = container_of(conf, struct ieee80211_chanctx, conf);
 
 		drv_unassign_vif_chanctx(local, sdata, curr_ctx);
diff --git a/net/mac80211/mlme.c b/net/mac80211/mlme.c
index 2480bd0577bb..a6d66b4ad7ee 100644
--- a/net/mac80211/mlme.c
+++ b/net/mac80211/mlme.c
@@ -5070,6 +5070,7 @@ static int ieee80211_prep_channel(struct ieee80211_sub_if_data *sdata,
 
 	if (!(ifmgd->flags & IEEE80211_STA_DISABLE_HE)) {
 		const struct cfg80211_bss_ies *ies;
+		struct ieee80211_bss_conf *bss_conf;
 		const u8 *he_oper_ie;
 
 		ies = rcu_dereference(cbss->ies);
@@ -5081,6 +5082,31 @@ static int ieee80211_prep_channel(struct ieee80211_sub_if_data *sdata,
 		else
 			he_oper = NULL;
 
+		if (is_6ghz) {
+			struct ieee802_11_elems elems;
+			u8 i, j = 0;
+
+			ieee802_11_parse_elems(ies->data, ies->len, false, &elems,
+					       NULL, NULL);
+
+			if (elems.pwr_constr_elem)
+				bss_conf->pwr_reduction = *elems.pwr_constr_elem;
+
+			BUILD_BUG_ON(ARRAY_SIZE(bss_conf->tx_pwr_env) !=
+				     ARRAY_SIZE(elems.tx_pwr_env));
+
+			for (i = 0; i < elems.tx_pwr_env_num; i++) {
+				if (elems.tx_pwr_env_len[i] >
+				    sizeof(bss_conf->tx_pwr_env[j]))
+					continue;
+
+				bss_conf->tx_pwr_env_num++;
+				memcpy(&bss_conf->tx_pwr_env[j], elems.tx_pwr_env[i],
+				       elems.tx_pwr_env_len[i]);
+				j++;
+			}
+		}
+
 		if (!ieee80211_verify_sta_he_mcs_support(sband, he_oper))
 			ifmgd->flags |= IEEE80211_STA_DISABLE_HE;
 	}
-- 
2.31.1


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

  parent reply	other threads:[~2021-08-20 12:21 UTC|newest]

Thread overview: 86+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-08-20 12:20 [PATCH v2 0/8] cfg80211/mac80211: Add support for 6GHZ STA for various modes : LPI, SP and VLP Wen Gong
2021-08-20 12:20 ` Wen Gong
2021-08-20 12:20 ` [PATCH v2 1/8] cfg80211: add power type definition for 6 GHz Wen Gong
2021-08-20 12:20   ` Wen Gong
2021-08-26  8:20   ` Johannes Berg
2021-08-26  8:20     ` Johannes Berg
2021-08-26  8:22     ` Johannes Berg
2021-08-26  8:22       ` Johannes Berg
2021-08-26 11:02       ` Wen Gong
2021-08-26 11:02         ` Wen Gong
2021-08-26 11:11         ` Johannes Berg
2021-08-26 11:11           ` Johannes Berg
2021-08-26 10:57     ` Wen Gong
2021-08-26 10:57       ` Wen Gong
2021-08-26 10:59       ` Johannes Berg
2021-08-26 10:59         ` Johannes Berg
2021-08-26 11:01         ` Wen Gong
2021-08-26 11:01           ` Wen Gong
2021-08-20 12:20 ` [PATCH v2 2/8] mac80211: add definition of regulatory info in 6 GHz operation information Wen Gong
2021-08-20 12:20   ` Wen Gong
2021-08-26  8:20   ` Johannes Berg
2021-08-26  8:20     ` Johannes Berg
2021-08-20 12:20 ` [PATCH v2 3/8] mac80211: add parse " Wen Gong
2021-08-20 12:20   ` Wen Gong
2021-08-26  8:21   ` Johannes Berg
2021-08-26  8:21     ` Johannes Berg
2021-08-20 12:20 ` [PATCH v2 4/8] cfg80211: add definition for 6 GHz power spectral density(psd) Wen Gong
2021-08-20 12:20   ` Wen Gong
2021-08-20 12:20 ` [PATCH v2 5/8] cfg80211: save power spectral density(psd) of regulatory rule Wen Gong
2021-08-20 12:20   ` Wen Gong
2021-08-26  8:25   ` Johannes Berg
2021-08-26  8:25     ` Johannes Berg
2021-08-26 10:43     ` Wen Gong
2021-08-26 10:43       ` Wen Gong
2021-08-26 10:56       ` Johannes Berg
2021-08-26 10:56         ` Johannes Berg
2021-08-26 10:58         ` Wen Gong
2021-08-26 10:58           ` Wen Gong
2021-08-20 12:20 ` [PATCH v2 6/8] mac80211: add definition for transmit power envelope element Wen Gong
2021-08-20 12:20   ` Wen Gong
2021-08-26  8:30   ` Johannes Berg
2021-08-26  8:30     ` Johannes Berg
2021-08-20 12:20 ` [PATCH v2 7/8] mac80211: add parse " Wen Gong
2021-08-20 12:20   ` Wen Gong
2021-08-26  8:20   ` Johannes Berg
2021-08-26  8:20     ` Johannes Berg
2021-08-20 12:20 ` Wen Gong [this message]
2021-08-20 12:20   ` [PATCH v2 8/8] mac80211: save transmit power envelope element and power constraint Wen Gong
2021-08-26  8:29   ` Johannes Berg
2021-08-26  8:29     ` Johannes Berg
2021-08-26 10:50     ` Wen Gong
2021-08-26 10:50       ` Wen Gong
2021-08-26 10:57       ` Johannes Berg
2021-08-26 10:57         ` Johannes Berg
2021-08-26 11:00         ` Wen Gong
2021-08-26 11:00           ` Wen Gong
2021-08-26 11:10           ` Johannes Berg
2021-08-26 11:10             ` Johannes Berg
2021-08-27  2:01             ` Wen Gong
2021-08-27  2:01               ` Wen Gong
2023-07-19  3:29         ` Wen Gong
2023-07-19  3:29           ` Wen Gong
2021-08-27  2:11     ` Wen Gong
2021-08-27  2:11       ` Wen Gong
2021-08-27  6:46       ` Johannes Berg
2021-08-27  6:46         ` Johannes Berg
2021-08-27  6:53         ` Wen Gong
2021-08-27  6:53           ` Wen Gong
2021-08-27  6:55           ` Johannes Berg
2021-08-27  6:55             ` Johannes Berg
2021-08-27  7:12             ` Wen Gong
2021-08-27  7:12               ` Wen Gong
2021-08-27  7:38               ` Johannes Berg
2021-08-27  7:38                 ` Johannes Berg
2021-08-27  8:18                 ` Wen Gong
2021-08-27  8:18                   ` Wen Gong
2021-08-27  8:20                   ` Johannes Berg
2021-08-27  8:20                     ` Johannes Berg
2021-08-27  8:28                     ` Wen Gong
2021-08-27  8:28                       ` Wen Gong
2021-08-27  8:30                       ` Johannes Berg
2021-08-27  8:30                         ` Johannes Berg
2021-08-27  8:47                         ` Wen Gong
2021-08-27  8:47                           ` Wen Gong
2021-08-25  2:18 ` [PATCH v2 0/8] cfg80211/mac80211: Add support for 6GHZ STA for various modes : LPI, SP and VLP Wen Gong
2021-08-25  2:18   ` Wen Gong

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20210820122041.12157-9-wgong@codeaurora.org \
    --to=wgong@codeaurora.org \
    --cc=ath11k@lists.infradead.org \
    --cc=johannes@sipsolutions.net \
    --cc=linux-wireless@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
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.