mbox series

[00/22] add initial S1G support

Message ID 20200827223304.16155-1-thomas@adapt-ip.com
Headers show
Series add initial S1G support | expand

Message

Thomas Pedersen Aug. 27, 2020, 10:32 p.m. UTC
This is the initial 802.11ah (S1G) patchset which adds support for:

- defining the S1G 900MHz bands in a custom regulatory database
- setting and receiving S1G beacons (sending short beacons will be
  supported in a future patch)
- configuring S1G capabilities in Association Request (setting
  capabilities along with NL80211_CMD_SET_STATION will be added later).
- scanning on S1G bands
- handling S1G Association Response format
- correctly encoding Listen Interval for S1G
- associating in mac80211
- S1G in mac80211_hwsim

Rate control is still TBD, this patchset simply lops off the rate
control hooks for S1G so eg. missing sband->bitrates and S1G Basic Rate
set can't do too much damage.

Note the mac80211_hwsim S1G support introduces a regression in a few
hostap hwsim tests. This is because when processing the reported bands,
hostap assumes freq < 4000 is 11b, and the actual 11b/g band is
overwritten by the S1G band info. Though it does count as a userspace
regression, I'm not sure there is much to do about it besides apply a
small patch to hostapd which treats freq < 2000 as an unknown band.

After the hostap workaround (https://p.ibsgaard.io/raw/xaweyacunu),
these patches continue to pass the hwsim tests as well as HEAD.

Thomas Pedersen (22):
  nl80211: advertise supported channel width in S1G
  cfg80211: regulatory: pass min. bandwidth to regulatory rule extractor
  cfg80211: regulatory: handle S1G channels
  nl80211: correctly validate S1G beacon head
  nl80211: support setting S1G channels
  {cfg,mac}80211: get correct default channel width for S1G
  mac80211: s1g: choose scanning width based on frequency
  nl80211: support S1G capabilities
  mac80211: support S1G STA capabilities
  cfg80211: convert S1G beacon to scan results
  cfg80211: parse S1G Operation element for BSS channel
  mac80211: convert S1G beacon to scan results
  cfg80211: handle Association Response from S1G STA
  mac80211: encode listen interval for S1G
  mac80211: don't calculate duration for S1G
  mac80211: handle S1G low rates
  mac80211: avoid rate init for S1G band
  mac80211: receive and process S1G beacons
  mac80211: support S1G association
  nl80211: include frequency offset in survey info
  mac80211_hwsim: indicate support for S1G
  mac80211_hwsim: fix TSF timestamp write to S1G beacon

 drivers/net/wireless/ath/regd.c               |   2 +-
 .../broadcom/brcm80211/brcmsmac/channel.c     |   3 +-
 drivers/net/wireless/mac80211_hwsim.c         |  93 +++++++-
 drivers/net/wireless/realtek/rtlwifi/regd.c   |   7 +-
 include/linux/ieee80211.h                     |  82 ++++++-
 include/net/cfg80211.h                        |  31 ++-
 include/net/mac80211.h                        |   3 +
 include/uapi/linux/nl80211.h                  |  26 +++
 net/mac80211/cfg.c                            |   2 +
 net/mac80211/chan.c                           |   9 +-
 net/mac80211/ibss.c                           |   3 +-
 net/mac80211/ieee80211_i.h                    |  20 ++
 net/mac80211/iface.c                          |   5 +
 net/mac80211/mlme.c                           | 184 +++++++++++++---
 net/mac80211/rate.c                           |  39 +++-
 net/mac80211/rx.c                             |  87 ++++----
 net/mac80211/scan.c                           |  37 +++-
 net/mac80211/tx.c                             |   4 +
 net/mac80211/util.c                           | 207 +++++++++++++++++-
 net/wireless/chan.c                           | 140 +++++++-----
 net/wireless/mlme.c                           |  20 ++
 net/wireless/nl80211.c                        |  56 ++++-
 net/wireless/reg.c                            |  74 +++++--
 net/wireless/scan.c                           |  80 +++++--
 net/wireless/util.c                           |  32 +++
 25 files changed, 1046 insertions(+), 200 deletions(-)

Comments

Thomas Pedersen Aug. 31, 2020, 4:42 p.m. UTC | #1
On 2020-08-28 00:52, Kalle Valo wrote:
> Thomas Pedersen <thomas@adapt-ip.com> writes:
> 
>> Advertise S1G Capabilities and channels to mac80211.
>> 
>> Requires a few fixups to account for missing
>> sband->bitrates, and a custom regulatory db to actually
>> enable the S1G channels.
>> 
>> Signed-off-by: Thomas Pedersen <thomas@adapt-ip.com>
>> ---
>>  drivers/net/wireless/mac80211_hwsim.c | 80 
>> ++++++++++++++++++++++++---
>>  include/linux/ieee80211.h             | 12 +++-
> 
> IMHO a mac80211_hwsim patch should not touch ieee80211.h.

Fair enough, I'll split it out.

>> --- a/include/linux/ieee80211.h
>> +++ b/include/linux/ieee80211.h
>> @@ -2385,6 +2385,9 @@ ieee80211_he_spr_size(const u8 *he_spr_ie)
>>  	return spr_len;
>>  }
>> 
>> +#define SM(f, v)	(((v) << f##_SHIFT) & f)
>> +#define MS(f, v)	(((v) & f) >> f##_SHIFT)
>> +
>>  /* S1G Capabilities Information field */
>>  #define S1G_CAPAB_B0_S1G_LONG BIT(0)
>>  #define S1G_CAPAB_B0_SGI_1MHZ BIT(1)
>> @@ -2392,9 +2395,16 @@ ieee80211_he_spr_size(const u8 *he_spr_ie)
>>  #define S1G_CAPAB_B0_SGI_4MHZ BIT(3)
>>  #define S1G_CAPAB_B0_SGI_8MHZ BIT(4)
>>  #define S1G_CAPAB_B0_SGI_16MHZ BIT(5)
>> -#define S1G_CAPAB_B0_SUPP_CH_WIDTH_MASK (BIT(6) | BIT(7))
>> +#define S1G_CAPAB_B0_SUPP_CH_WIDTH	(BIT(6) | BIT(7))
>>  #define S1G_CAPAB_B0_SUPP_CH_WIDTH_SHIFT 6
>> 
>> +#define S1G_SUPP_CH_WIDTH_2	0
>> +#define S1G_SUPP_CH_WIDTH_4	1
>> +#define S1G_SUPP_CH_WIDTH_8	2
>> +#define S1G_SUPP_CH_WIDTH_16	3
>> +#define S1G_SUPP_CH_WIDTH_MAX(cap) ((1 << 
>> MS(S1G_CAPAB_B0_SUPP_CH_WIDTH, \
>> +					     cap[0])) << 1)
> 
> We have GENMASK(), FIELD_GET() & co nowadays so no need for custom
> macros.

Nice. Thanks for the heads up.