diff mbox series

[v2,1/8] cfg80211: add power type definition for 6 GHz

Message ID 20210820122041.12157-2-wgong@codeaurora.org
State New
Headers show
Series cfg80211/mac80211: Add support for 6GHZ STA for various modes : LPI, SP and VLP | expand

Commit Message

Wen Gong Aug. 20, 2021, 12:20 p.m. UTC
6 GHz regulatory domains introduces different modes for 6 GHz AP
operations Low Power Indoor(LPI), Standard Power(SP) and Very Low
Power(VLP). 6 GHz STAs could be operated as either Regular or
Subordinate clients. This patch is define the flags for power type
of AP and STATION mode.

Signed-off-by: Wen Gong <wgong@codeaurora.org>
---
 include/net/cfg80211.h       |  2 ++
 include/uapi/linux/nl80211.h | 34 ++++++++++++++++++++++++++++++++++
 2 files changed, 36 insertions(+)

Comments

Johannes Berg Aug. 26, 2021, 8:20 a.m. UTC | #1
>  struct cfg80211_chan_def {

>  	struct ieee80211_channel *chan;

> @@ -684,6 +685,7 @@ struct cfg80211_chan_def {

>  	u32 center_freq2;

>  	struct ieee80211_edmg edmg;

>  	u16 freq1_offset;

> +	enum nl80211_ap_reg_power power_type;


I'm not sure why this should be in the chandef, there's no way that
anything in cfg80211 is ever using it there, at least in your patches.

> +/**

> + * enum nl80211_ap_reg_power - regulatory power for a Access Point

> + *

> + * @NL80211_REG_UNSET_AP: Access Point has no regulatory power mode

> + * @NL80211_REG_LPI: Indoor Access Point

> + * @NL80211_REG_SP: Standard power Access Point

> + * @NL80211_REG_VLP: Very low power Access Point

> + */

> +enum nl80211_ap_reg_power {

> +	NL80211_REG_UNSET_AP,

> +	NL80211_REG_LPI_AP,

> +	NL80211_REG_SP_AP,

> +	NL80211_REG_VLP_AP,

> +	NL80211_REG_AP_POWER_AFTER_LAST,

> +	NL80211_REG_AP_POWER_MAX =

> +		NL80211_REG_AP_POWER_AFTER_LAST - 1,

> +};


Similarly here (and the other enum), why is this in nl80211 if it's
never used in nl80211?

johannes
Johannes Berg Aug. 26, 2021, 8:22 a.m. UTC | #2
On Thu, 2021-08-26 at 10:20 +0200, Johannes Berg wrote:
> >  struct cfg80211_chan_def {

> >  	struct ieee80211_channel *chan;

> > @@ -684,6 +685,7 @@ struct cfg80211_chan_def {

> >  	u32 center_freq2;

> >  	struct ieee80211_edmg edmg;

> >  	u16 freq1_offset;

> > +	enum nl80211_ap_reg_power power_type;

> 

> I'm not sure why this should be in the chandef, there's no way that

> anything in cfg80211 is ever using it there, at least in your patches.


Does it even *apply* to a channel? What if I'm connecting to two APs on
the same channel (two client interfaces)?

johannes
Wen Gong Aug. 26, 2021, 10:57 a.m. UTC | #3
On 2021-08-26 16:20, Johannes Berg wrote:
>>  struct cfg80211_chan_def {

>>  	struct ieee80211_channel *chan;

>> @@ -684,6 +685,7 @@ struct cfg80211_chan_def {

>>  	u32 center_freq2;

>>  	struct ieee80211_edmg edmg;

>>  	u16 freq1_offset;

>> +	enum nl80211_ap_reg_power power_type;

> 

> I'm not sure why this should be in the chandef, there's no way that

> anything in cfg80211 is ever using it there, at least in your patches.

> 

It is used in mac80211 of [PATCH v2 3/8] mac80211: add parse regulatory 
info in 6 GHz operation information.
should i move it to mac80211's .h file?
>> +/**

>> + * enum nl80211_ap_reg_power - regulatory power for a Access Point

>> + *

>> + * @NL80211_REG_UNSET_AP: Access Point has no regulatory power mode

>> + * @NL80211_REG_LPI: Indoor Access Point

>> + * @NL80211_REG_SP: Standard power Access Point

>> + * @NL80211_REG_VLP: Very low power Access Point

>> + */

>> +enum nl80211_ap_reg_power {

>> +	NL80211_REG_UNSET_AP,

>> +	NL80211_REG_LPI_AP,

>> +	NL80211_REG_SP_AP,

>> +	NL80211_REG_VLP_AP,

>> +	NL80211_REG_AP_POWER_AFTER_LAST,

>> +	NL80211_REG_AP_POWER_MAX =

>> +		NL80211_REG_AP_POWER_AFTER_LAST - 1,

>> +};

> 

> Similarly here (and the other enum), why is this in nl80211 if it's

> never used in nl80211?

> 

It is used in mac80211 of [PATCH v2 3/8] mac80211: add parse regulatory 
info in 6 GHz operation information.
should i move it to mac80211's .h file?
> johannes
Johannes Berg Aug. 26, 2021, 10:59 a.m. UTC | #4
On Thu, 2021-08-26 at 18:57 +0800, Wen Gong wrote:
> On 2021-08-26 16:20, Johannes Berg wrote:

> > >  struct cfg80211_chan_def {

> > >  	struct ieee80211_channel *chan;

> > > @@ -684,6 +685,7 @@ struct cfg80211_chan_def {

> > >  	u32 center_freq2;

> > >  	struct ieee80211_edmg edmg;

> > >  	u16 freq1_offset;

> > > +	enum nl80211_ap_reg_power power_type;

> > 

> > I'm not sure why this should be in the chandef, there's no way that

> > anything in cfg80211 is ever using it there, at least in your patches.

> > 

> It is used in mac80211 of [PATCH v2 3/8] mac80211: add parse regulatory 

> info in 6 GHz operation information.

> should i move it to mac80211's .h file?

> > > +/**

> > > + * enum nl80211_ap_reg_power - regulatory power for a Access Point

[...]
> > 

> It is used in mac80211 of [PATCH v2 3/8] mac80211: add parse regulatory 

> info in 6 GHz operation information.

> should i move it to mac80211's .h file?


Yeah I saw both of them are used, but why are they defined as nl80211
API? Do you have any intention to set them through nl80211?

And like I said, I'm not really convinced this belongs into struct
cfg80211_chan_def either. Maybe it should be in bss_conf too?

johannes
>
Wen Gong Aug. 26, 2021, 11:01 a.m. UTC | #5
On 2021-08-26 18:59, Johannes Berg wrote:
> On Thu, 2021-08-26 at 18:57 +0800, Wen Gong wrote:

>> On 2021-08-26 16:20, Johannes Berg wrote:

>> > >  struct cfg80211_chan_def {

>> > >  	struct ieee80211_channel *chan;

>> > > @@ -684,6 +685,7 @@ struct cfg80211_chan_def {

>> > >  	u32 center_freq2;

>> > >  	struct ieee80211_edmg edmg;

>> > >  	u16 freq1_offset;

>> > > +	enum nl80211_ap_reg_power power_type;

>> >

>> > I'm not sure why this should be in the chandef, there's no way that

>> > anything in cfg80211 is ever using it there, at least in your patches.

>> >

>> It is used in mac80211 of [PATCH v2 3/8] mac80211: add parse 

>> regulatory

>> info in 6 GHz operation information.

>> should i move it to mac80211's .h file?

>> > > +/**

>> > > + * enum nl80211_ap_reg_power - regulatory power for a Access Point

> [...]

>> >

>> It is used in mac80211 of [PATCH v2 3/8] mac80211: add parse 

>> regulatory

>> info in 6 GHz operation information.

>> should i move it to mac80211's .h file?

> 

> Yeah I saw both of them are used, but why are they defined as nl80211

> API? Do you have any intention to set them through nl80211?

> 

> And like I said, I'm not really convinced this belongs into struct

> cfg80211_chan_def either. Maybe it should be in bss_conf too?

yes, I also want to move it to struct ieee80211_bss_conf.
> 

> johannes

>>
Wen Gong Aug. 26, 2021, 11:02 a.m. UTC | #6
On 2021-08-26 16:22, Johannes Berg wrote:
> On Thu, 2021-08-26 at 10:20 +0200, Johannes Berg wrote:

>> >  struct cfg80211_chan_def {

>> >  	struct ieee80211_channel *chan;

>> > @@ -684,6 +685,7 @@ struct cfg80211_chan_def {

>> >  	u32 center_freq2;

>> >  	struct ieee80211_edmg edmg;

>> >  	u16 freq1_offset;

>> > +	enum nl80211_ap_reg_power power_type;

>> 

>> I'm not sure why this should be in the chandef, there's no way that

>> anything in cfg80211 is ever using it there, at least in your patches.

> 

> Does it even *apply* to a channel? What if I'm connecting to two APs on

> the same channel (two client interfaces)?

> 

this is one copy for each connection, each client has its own 
cfg80211_chan_def.
also it can be moved to struct ieee80211_bss_conf.
> johannes
Johannes Berg Aug. 26, 2021, 11:11 a.m. UTC | #7
On Thu, 2021-08-26 at 19:02 +0800, Wen Gong wrote:
> On 2021-08-26 16:22, Johannes Berg wrote:

> > On Thu, 2021-08-26 at 10:20 +0200, Johannes Berg wrote:

> > > >  struct cfg80211_chan_def {

> > > >  	struct ieee80211_channel *chan;

> > > > @@ -684,6 +685,7 @@ struct cfg80211_chan_def {

> > > >  	u32 center_freq2;

> > > >  	struct ieee80211_edmg edmg;

> > > >  	u16 freq1_offset;

> > > > +	enum nl80211_ap_reg_power power_type;

> > > 

> > > I'm not sure why this should be in the chandef, there's no way that

> > > anything in cfg80211 is ever using it there, at least in your patches.

> > 

> > Does it even *apply* to a channel? What if I'm connecting to two APs on

> > the same channel (two client interfaces)?

> > 

> this is one copy for each connection, each client has its own 

> cfg80211_chan_def.


That depends on where you check it - but you're basically saying "use
this only from vif->bss_conf.chandef (or something, didn't check now),
but chandef shows up in many other places and you don't maintain it
anywhere else.

johannes
diff mbox series

Patch

diff --git a/include/net/cfg80211.h b/include/net/cfg80211.h
index 58c2cd417e89..f17a4d1202fc 100644
--- a/include/net/cfg80211.h
+++ b/include/net/cfg80211.h
@@ -676,6 +676,7 @@  struct key_params {
  *	chan will define the primary channel and all other
  *	parameters are ignored.
  * @freq1_offset: offset from @center_freq1, in KHz
+ * @power_type: power type of BSS for 6 GHz
  */
 struct cfg80211_chan_def {
 	struct ieee80211_channel *chan;
@@ -684,6 +685,7 @@  struct cfg80211_chan_def {
 	u32 center_freq2;
 	struct ieee80211_edmg edmg;
 	u16 freq1_offset;
+	enum nl80211_ap_reg_power power_type;
 };
 
 /*
diff --git a/include/uapi/linux/nl80211.h b/include/uapi/linux/nl80211.h
index f962c06e9818..ab1d4aa85272 100644
--- a/include/uapi/linux/nl80211.h
+++ b/include/uapi/linux/nl80211.h
@@ -4088,6 +4088,40 @@  enum nl80211_dfs_regions {
 	NL80211_DFS_JP		= 3,
 };
 
+/**
+ * enum nl80211_ap_reg_power - regulatory power for a Access Point
+ *
+ * @NL80211_REG_UNSET_AP: Access Point has no regulatory power mode
+ * @NL80211_REG_LPI: Indoor Access Point
+ * @NL80211_REG_SP: Standard power Access Point
+ * @NL80211_REG_VLP: Very low power Access Point
+ */
+enum nl80211_ap_reg_power {
+	NL80211_REG_UNSET_AP,
+	NL80211_REG_LPI_AP,
+	NL80211_REG_SP_AP,
+	NL80211_REG_VLP_AP,
+	NL80211_REG_AP_POWER_AFTER_LAST,
+	NL80211_REG_AP_POWER_MAX =
+		NL80211_REG_AP_POWER_AFTER_LAST - 1,
+};
+
+/**
+ * enum nl80211_client_reg_power - regulatory power for a client
+ *
+ * @NL80211_REG_UNSET_CLIENT: Client has no regulatory power mode
+ * @NL80211_REG_DEFAULT_CLIENT: Default Client
+ * @NL80211_REG_SUBORDINATE_CLIENT: Subordinate Client
+ */
+enum nl80211_client_reg_power {
+	NL80211_REG_UNSET_CLIENT,
+	NL80211_REG_DEFAULT_CLIENT,
+	NL80211_REG_SUBORDINATE_CLIENT,
+	NL80211_REG_CLIENT_POWER_AFTER_LAST,
+	NL80211_REG_CLIENT_POWER_MAX =
+		NL80211_REG_CLIENT_POWER_AFTER_LAST - 1,
+};
+
 /**
  * enum nl80211_user_reg_hint_type - type of user regulatory hint
  *