2020-05-22 07:26:07

by Pradeep Kumar Chitrapu

[permalink] [raw]
Subject: [PATCH v2 0/9] add 6GHz radio support in ath11k driver

his patch series adds 6GHz frequency listing in ath11k driver and mac80211
registration for the 6GHz band. Also, extends some of wmi command tlvs for
supporting 6GHz.

In cfg80211, a new channel flag is added for identifying Preferred Scanning
Channels (PSC) in 6GHz band.

changes in v2:
- Fixed ath11k_phymode to be set in 6GHZ band

Pradeep Kumar Chitrapu (9):
cfg80211: Add new channel flag to identify 6GHz PSC channel
ath11k: add 6G frequency list supported by driver
ath11k: add support for 6GHz radio in driver
ath11k: Use freq instead of channel number in rx path
ath11k: extend peer_assoc_cmd for 6GHz band
ath11k: set psc channel flag when sending channel list to firmware.
ath11k: Add 6G scan dwell time parameter in scan request command
ath11k: Send multiple scan_chan_list messages if required
ath11k: Add support for 6g scan hint

drivers/net/wireless/ath/ath11k/core.h | 6 +-
drivers/net/wireless/ath/ath11k/dp_rx.c | 6 +-
drivers/net/wireless/ath/ath11k/mac.c | 174 +++++++++++++--
drivers/net/wireless/ath/ath11k/reg.c | 4 +
drivers/net/wireless/ath/ath11k/wmi.c | 269 +++++++++++++++++-------
drivers/net/wireless/ath/ath11k/wmi.h | 40 +++-
include/net/cfg80211.h | 2 +
net/wireless/reg.c | 19 ++
8 files changed, 422 insertions(+), 98 deletions(-)

--
2.17.1


2020-05-22 07:27:38

by Pradeep Kumar Chitrapu

[permalink] [raw]
Subject: [PATCH v2 2/9] ath11k: add 6G frequency list supported by driver

This patch adds support for 6GHz frequency listing.

Signed-off-by: Pradeep Kumar Chitrapu <[email protected]>
---
drivers/net/wireless/ath/ath11k/mac.c | 71 +++++++++++++++++++++++++++
1 file changed, 71 insertions(+)

diff --git a/drivers/net/wireless/ath/ath11k/mac.c b/drivers/net/wireless/ath/ath11k/mac.c
index 36882562b976..f699e882949b 100644
--- a/drivers/net/wireless/ath/ath11k/mac.c
+++ b/drivers/net/wireless/ath/ath11k/mac.c
@@ -33,6 +33,15 @@
.max_power = 30, \
}

+#define CHAN6G(_channel, _freq, _flags) { \
+ .band = NL80211_BAND_6GHZ, \
+ .hw_value = (_channel), \
+ .center_freq = (_freq), \
+ .flags = (_flags), \
+ .max_antenna_gain = 0, \
+ .max_power = 30, \
+}
+
/* frame mode values are mapped as per enum ath11k_hw_txrx_mode */
static unsigned int ath11k_frame_mode = ATH11K_HW_TXRX_NATIVE_WIFI;
module_param_named(frame_mode, ath11k_frame_mode, uint, 0644);
@@ -86,6 +95,68 @@ static const struct ieee80211_channel ath11k_5ghz_channels[] = {
CHAN5G(173, 5865, 0),
};

+static const struct ieee80211_channel ath11k_6ghz_channels[] = {
+ CHAN6G(1, 5945, 0),
+ CHAN6G(5, 5965, 0),
+ CHAN6G(9, 5985, 0),
+ CHAN6G(13, 6005, 0),
+ CHAN6G(17, 6025, 0),
+ CHAN6G(21, 6045, 0),
+ CHAN6G(25, 6065, 0),
+ CHAN6G(29, 6085, 0),
+ CHAN6G(33, 6105, 0),
+ CHAN6G(37, 6125, 0),
+ CHAN6G(41, 6145, 0),
+ CHAN6G(45, 6165, 0),
+ CHAN6G(49, 6185, 0),
+ CHAN6G(53, 6205, 0),
+ CHAN6G(57, 6225, 0),
+ CHAN6G(61, 6245, 0),
+ CHAN6G(65, 6265, 0),
+ CHAN6G(69, 6285, 0),
+ CHAN6G(73, 6305, 0),
+ CHAN6G(77, 6325, 0),
+ CHAN6G(81, 6345, 0),
+ CHAN6G(85, 6365, 0),
+ CHAN6G(89, 6385, 0),
+ CHAN6G(93, 6405, 0),
+ CHAN6G(97, 6425, 0),
+ CHAN6G(101, 6445, 0),
+ CHAN6G(105, 6465, 0),
+ CHAN6G(109, 6485, 0),
+ CHAN6G(113, 6505, 0),
+ CHAN6G(117, 6525, 0),
+ CHAN6G(121, 6545, 0),
+ CHAN6G(125, 6565, 0),
+ CHAN6G(129, 6585, 0),
+ CHAN6G(133, 6605, 0),
+ CHAN6G(137, 6625, 0),
+ CHAN6G(141, 6645, 0),
+ CHAN6G(145, 6665, 0),
+ CHAN6G(149, 6685, 0),
+ CHAN6G(153, 6705, 0),
+ CHAN6G(157, 6725, 0),
+ CHAN6G(161, 6745, 0),
+ CHAN6G(165, 6765, 0),
+ CHAN6G(169, 6785, 0),
+ CHAN6G(173, 6805, 0),
+ CHAN6G(177, 6825, 0),
+ CHAN6G(181, 6845, 0),
+ CHAN6G(185, 6865, 0),
+ CHAN6G(189, 6885, 0),
+ CHAN6G(193, 6905, 0),
+ CHAN6G(197, 6925, 0),
+ CHAN6G(201, 6945, 0),
+ CHAN6G(205, 6965, 0),
+ CHAN6G(209, 6985, 0),
+ CHAN6G(213, 7005, 0),
+ CHAN6G(217, 7025, 0),
+ CHAN6G(221, 7045, 0),
+ CHAN6G(225, 7065, 0),
+ CHAN6G(229, 7085, 0),
+ CHAN6G(233, 7105, 0),
+};
+
static struct ieee80211_rate ath11k_legacy_rates[] = {
{ .bitrate = 10,
.hw_value = ATH11K_HW_RATE_CCK_LP_1M },
--
2.17.1

2020-05-22 07:27:39

by Pradeep Kumar Chitrapu

[permalink] [raw]
Subject: [PATCH v2 6/9] ath11k: set psc channel flag when sending channel list to firmware.

If 6 ghz channel is a Preferred Scanning Channel(PSC), mark
the channel flag accordingly when updating channel list to firmware.
This will be used when making scanning decision in 6GHz channels.

Signed-off-by: Pradeep Kumar Chitrapu <[email protected]>
---
drivers/net/wireless/ath/ath11k/reg.c | 4 ++++
drivers/net/wireless/ath/ath11k/wmi.h | 3 ++-
2 files changed, 6 insertions(+), 1 deletion(-)

diff --git a/drivers/net/wireless/ath/ath11k/reg.c b/drivers/net/wireless/ath/ath11k/reg.c
index 453aa9c06969..50d13a5d7cf8 100644
--- a/drivers/net/wireless/ath/ath11k/reg.c
+++ b/drivers/net/wireless/ath/ath11k/reg.c
@@ -161,6 +161,10 @@ int ath11k_reg_update_chan_list(struct ath11k *ar)
else
ch->phy_mode = MODE_11A;

+ if (channel->band == NL80211_BAND_6GHZ &&
+ channel->flags & IEEE80211_CHAN_PSC)
+ ch->psc_channel = true;
+
ath11k_dbg(ar->ab, ATH11K_DBG_WMI,
"mac channel [%d/%d] freq %d maxpower %d regpower %d antenna %d mode %d\n",
i, params->nallchans,
diff --git a/drivers/net/wireless/ath/ath11k/wmi.h b/drivers/net/wireless/ath/ath11k/wmi.h
index fd82cff7537b..76c2da2c5db7 100644
--- a/drivers/net/wireless/ath/ath11k/wmi.h
+++ b/drivers/net/wireless/ath/ath11k/wmi.h
@@ -2520,7 +2520,8 @@ struct channel_param {
allow_ht:1,
allow_vht:1,
allow_he:1,
- set_agile:1;
+ set_agile:1,
+ psc_channel:1;
u32 phy_mode;
u32 cfreq1;
u32 cfreq2;
--
2.17.1

2020-05-22 07:27:39

by Pradeep Kumar Chitrapu

[permalink] [raw]
Subject: [PATCH v2 5/9] ath11k: extend peer_assoc_cmd for 6GHz band

This adds support required for configuring min_data_rate of 6GHz oper IE
and peer_he_caps_6ghz in peer assoc command. The Minimum Rate field
indicates the minimum rate, in units of 1 Mb/s, that the non-AP STA is
allowed to use for sending PPDUs as defined in IEEE P802.11ax™/D6.0.

Signed-off-by: Pradeep Kumar Chitrapu <[email protected]>
---
drivers/net/wireless/ath/ath11k/wmi.c | 2 ++
drivers/net/wireless/ath/ath11k/wmi.h | 5 +++++
2 files changed, 7 insertions(+)

diff --git a/drivers/net/wireless/ath/ath11k/wmi.c b/drivers/net/wireless/ath/ath11k/wmi.c
index 500108fa59d9..a6bbb3badd1f 100644
--- a/drivers/net/wireless/ath/ath11k/wmi.c
+++ b/drivers/net/wireless/ath/ath11k/wmi.c
@@ -1789,6 +1789,7 @@ int ath11k_wmi_send_peer_assoc_cmd(struct ath11k *ar,
cmd->peer_he_cap_info = param->peer_he_cap_macinfo[0];
cmd->peer_he_cap_info_ext = param->peer_he_cap_macinfo[1];
cmd->peer_he_cap_info_internal = param->peer_he_cap_macinfo_internal;
+ cmd->peer_he_caps_6ghz = param->peer_he_caps_6ghz;
cmd->peer_he_ops = param->peer_he_ops;
memcpy(&cmd->peer_he_cap_phy, &param->peer_he_cap_phyinfo,
sizeof(param->peer_he_cap_phyinfo));
@@ -1842,6 +1843,7 @@ int ath11k_wmi_send_peer_assoc_cmd(struct ath11k *ar,

/* HE Rates */
cmd->peer_he_mcs = param->peer_he_mcs_count;
+ cmd->min_data_rate = param->min_data_rate;

ptr += sizeof(*mcs);

diff --git a/drivers/net/wireless/ath/ath11k/wmi.h b/drivers/net/wireless/ath/ath11k/wmi.h
index afa3c4cf90e9..fd82cff7537b 100644
--- a/drivers/net/wireless/ath/ath11k/wmi.h
+++ b/drivers/net/wireless/ath/ath11k/wmi.h
@@ -1011,6 +1011,7 @@ enum wmi_tlv_vdev_param {
WMI_VDEV_PARAM_FILS_MAX_CHANNEL_GUARD_TIME,
WMI_VDEV_PARAM_BA_MODE = 0x7e,
WMI_VDEV_PARAM_SET_HE_SOUNDING_MODE = 0x87,
+ WMI_VDEV_PARAM_6GHZ_PARAMS = 0x99,
WMI_VDEV_PARAM_PROTOTYPE = 0x8000,
WMI_VDEV_PARAM_BSS_COLOR,
WMI_VDEV_PARAM_SET_HEMU_MODE,
@@ -3444,6 +3445,7 @@ struct peer_assoc_params {
u32 tx_max_rate;
u32 tx_mcs_set;
u8 vht_capable;
+ u8 min_data_rate;
u32 tx_max_mcs_nss;
u32 peer_bw_rxnss_override;
bool is_pmf_enabled;
@@ -3472,6 +3474,7 @@ struct peer_assoc_params {
bool he_flag;
u32 peer_he_cap_macinfo[2];
u32 peer_he_cap_macinfo_internal;
+ u32 peer_he_caps_6ghz;
u32 peer_he_ops;
u32 peer_he_cap_phyinfo[WMI_HOST_MAX_HECAP_PHY_SIZE];
u32 peer_he_mcs_count;
@@ -3509,6 +3512,8 @@ struct wmi_peer_assoc_complete_cmd {
u32 peer_he_mcs;
u32 peer_he_cap_info_ext;
u32 peer_he_cap_info_internal;
+ u32 min_data_rate;
+ u32 peer_he_caps_6ghz;
} __packed;

struct wmi_stop_scan_cmd {
--
2.17.1