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
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
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
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, ¶m->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