mirror of
https://github.com/openwrt/openwrt.git
synced 2024-12-23 07:22:33 +00:00
170 lines
5.5 KiB
Diff
170 lines
5.5 KiB
Diff
|
From a27c6a5853eb9d4f293b99be73a6891fe88263c7 Mon Sep 17 00:00:00 2001
|
||
|
From: Sowmiya Sree Elavalagan <quic_ssreeela@quicinc.com>
|
||
|
Date: Tue, 10 Jan 2023 15:30:57 +0200
|
||
|
Subject: [PATCH] wifi: ath11k: Add support to configure FTM responder role
|
||
|
|
||
|
Fine Timing Measurement(FTM) support is used to measure round trip
|
||
|
time between two nodes.
|
||
|
|
||
|
Enable FTM responder feature using hw_params on supported device.
|
||
|
Since FTM functionality is offloaded to firmware, adding the
|
||
|
interface allows user space to enable or disable FTM responder.
|
||
|
Also add support for advertising the same in extended capabilities.
|
||
|
|
||
|
QCA6390, WCN6855 and WCN6750 do not support this feature.
|
||
|
|
||
|
Tested-on: IPQ8074 hw2.0 AHB WLAN.HK.2.7.0.1-01744-QCAHKSWPL_SILICONZ-1
|
||
|
Tested-on: QCN9074 hw1.0 PCI WLAN.HK.2.7.0.1-01744-QCAHKSWPL_SILICONZ-1
|
||
|
|
||
|
Signed-off-by: Sowmiya Sree Elavalagan <quic_ssreeela@quicinc.com>
|
||
|
Signed-off-by: Raj Kumar Bhagat <quic_rajkbhag@quicinc.com>
|
||
|
Signed-off-by: Kalle Valo <quic_kvalo@quicinc.com>
|
||
|
Link: https://lore.kernel.org/r/20221220044435.10506-1-quic_rajkbhag@quicinc.com
|
||
|
---
|
||
|
drivers/net/wireless/ath/ath11k/core.c | 8 ++++++++
|
||
|
drivers/net/wireless/ath/ath11k/core.h | 1 +
|
||
|
drivers/net/wireless/ath/ath11k/hw.h | 1 +
|
||
|
drivers/net/wireless/ath/ath11k/mac.c | 20 +++++++++++++++++++-
|
||
|
drivers/net/wireless/ath/ath11k/wmi.h | 1 +
|
||
|
5 files changed, 30 insertions(+), 1 deletion(-)
|
||
|
|
||
|
--- a/drivers/net/wireless/ath/ath11k/core.c
|
||
|
+++ b/drivers/net/wireless/ath/ath11k/core.c
|
||
|
@@ -116,6 +116,7 @@ static const struct ath11k_hw_params ath
|
||
|
.tcl_ring_retry = true,
|
||
|
.tx_ring_size = DP_TCL_DATA_RING_SIZE,
|
||
|
.smp2p_wow_exit = false,
|
||
|
+ .ftm_responder = true,
|
||
|
},
|
||
|
{
|
||
|
.hw_rev = ATH11K_HW_IPQ6018_HW10,
|
||
|
@@ -198,6 +199,7 @@ static const struct ath11k_hw_params ath
|
||
|
.tx_ring_size = DP_TCL_DATA_RING_SIZE,
|
||
|
.smp2p_wow_exit = false,
|
||
|
.support_fw_mac_sequence = false,
|
||
|
+ .ftm_responder = true,
|
||
|
},
|
||
|
{
|
||
|
.name = "qca6390 hw2.0",
|
||
|
@@ -282,6 +284,7 @@ static const struct ath11k_hw_params ath
|
||
|
.tx_ring_size = DP_TCL_DATA_RING_SIZE,
|
||
|
.smp2p_wow_exit = false,
|
||
|
.support_fw_mac_sequence = true,
|
||
|
+ .ftm_responder = false,
|
||
|
},
|
||
|
{
|
||
|
.name = "qcn9074 hw1.0",
|
||
|
@@ -363,6 +366,7 @@ static const struct ath11k_hw_params ath
|
||
|
.tx_ring_size = DP_TCL_DATA_RING_SIZE,
|
||
|
.smp2p_wow_exit = false,
|
||
|
.support_fw_mac_sequence = false,
|
||
|
+ .ftm_responder = true,
|
||
|
},
|
||
|
{
|
||
|
.name = "wcn6855 hw2.0",
|
||
|
@@ -447,6 +451,7 @@ static const struct ath11k_hw_params ath
|
||
|
.tx_ring_size = DP_TCL_DATA_RING_SIZE,
|
||
|
.smp2p_wow_exit = false,
|
||
|
.support_fw_mac_sequence = true,
|
||
|
+ .ftm_responder = false,
|
||
|
},
|
||
|
{
|
||
|
.name = "wcn6855 hw2.1",
|
||
|
@@ -529,6 +534,7 @@ static const struct ath11k_hw_params ath
|
||
|
.tx_ring_size = DP_TCL_DATA_RING_SIZE,
|
||
|
.smp2p_wow_exit = false,
|
||
|
.support_fw_mac_sequence = true,
|
||
|
+ .ftm_responder = false,
|
||
|
},
|
||
|
{
|
||
|
.name = "wcn6750 hw1.0",
|
||
|
@@ -609,6 +615,7 @@ static const struct ath11k_hw_params ath
|
||
|
.tx_ring_size = DP_TCL_DATA_RING_SIZE_WCN6750,
|
||
|
.smp2p_wow_exit = true,
|
||
|
.support_fw_mac_sequence = true,
|
||
|
+ .ftm_responder = false,
|
||
|
},
|
||
|
{
|
||
|
.hw_rev = ATH11K_HW_IPQ5018_HW10,
|
||
|
@@ -688,6 +695,7 @@ static const struct ath11k_hw_params ath
|
||
|
.tx_ring_size = DP_TCL_DATA_RING_SIZE,
|
||
|
.smp2p_wow_exit = false,
|
||
|
.support_fw_mac_sequence = false,
|
||
|
+ .ftm_responder = true,
|
||
|
},
|
||
|
};
|
||
|
|
||
|
--- a/drivers/net/wireless/ath/ath11k/core.h
|
||
|
+++ b/drivers/net/wireless/ath/ath11k/core.h
|
||
|
@@ -346,6 +346,7 @@ struct ath11k_vif {
|
||
|
|
||
|
bool is_started;
|
||
|
bool is_up;
|
||
|
+ bool ftm_responder;
|
||
|
bool spectral_enabled;
|
||
|
bool ps;
|
||
|
u32 aid;
|
||
|
--- a/drivers/net/wireless/ath/ath11k/hw.h
|
||
|
+++ b/drivers/net/wireless/ath/ath11k/hw.h
|
||
|
@@ -224,6 +224,7 @@ struct ath11k_hw_params {
|
||
|
u32 tx_ring_size;
|
||
|
bool smp2p_wow_exit;
|
||
|
bool support_fw_mac_sequence;
|
||
|
+ bool ftm_responder;
|
||
|
};
|
||
|
|
||
|
struct ath11k_hw_ops {
|
||
|
--- a/drivers/net/wireless/ath/ath11k/mac.c
|
||
|
+++ b/drivers/net/wireless/ath/ath11k/mac.c
|
||
|
@@ -3110,7 +3110,7 @@ static void ath11k_mac_op_bss_info_chang
|
||
|
u16 bitrate;
|
||
|
int ret = 0;
|
||
|
u8 rateidx;
|
||
|
- u32 rate;
|
||
|
+ u32 rate, param;
|
||
|
u32 ipv4_cnt;
|
||
|
|
||
|
mutex_lock(&ar->conf_mutex);
|
||
|
@@ -3412,6 +3412,20 @@ static void ath11k_mac_op_bss_info_chang
|
||
|
}
|
||
|
}
|
||
|
|
||
|
+ if (changed & BSS_CHANGED_FTM_RESPONDER &&
|
||
|
+ arvif->ftm_responder != info->ftm_responder &&
|
||
|
+ ar->ab->hw_params.ftm_responder &&
|
||
|
+ (vif->type == NL80211_IFTYPE_AP ||
|
||
|
+ vif->type == NL80211_IFTYPE_MESH_POINT)) {
|
||
|
+ arvif->ftm_responder = info->ftm_responder;
|
||
|
+ param = WMI_VDEV_PARAM_ENABLE_DISABLE_RTT_RESPONDER_ROLE;
|
||
|
+ ret = ath11k_wmi_vdev_set_param_cmd(ar, arvif->vdev_id, param,
|
||
|
+ arvif->ftm_responder);
|
||
|
+ if (ret)
|
||
|
+ ath11k_warn(ar->ab, "Failed to set ftm responder %i: %d\n",
|
||
|
+ arvif->vdev_id, ret);
|
||
|
+ }
|
||
|
+
|
||
|
if (changed & BSS_CHANGED_FILS_DISCOVERY ||
|
||
|
changed & BSS_CHANGED_UNSOL_BCAST_PROBE_RESP)
|
||
|
ath11k_mac_fils_discovery(arvif, info);
|
||
|
@@ -9113,6 +9127,10 @@ static int __ath11k_mac_register(struct
|
||
|
wiphy_ext_feature_set(ar->hw->wiphy,
|
||
|
NL80211_EXT_FEATURE_SET_SCAN_DWELL);
|
||
|
|
||
|
+ if (ab->hw_params.ftm_responder)
|
||
|
+ wiphy_ext_feature_set(ar->hw->wiphy,
|
||
|
+ NL80211_EXT_FEATURE_ENABLE_FTM_RESPONDER);
|
||
|
+
|
||
|
ath11k_reg_init(ar);
|
||
|
|
||
|
if (!test_bit(ATH11K_FLAG_RAW_MODE, &ab->dev_flags)) {
|
||
|
--- a/drivers/net/wireless/ath/ath11k/wmi.h
|
||
|
+++ b/drivers/net/wireless/ath/ath11k/wmi.h
|
||
|
@@ -1073,6 +1073,7 @@ enum wmi_tlv_vdev_param {
|
||
|
WMI_VDEV_PARAM_ENABLE_BCAST_PROBE_RESPONSE,
|
||
|
WMI_VDEV_PARAM_FILS_MAX_CHANNEL_GUARD_TIME,
|
||
|
WMI_VDEV_PARAM_HE_LTF = 0x74,
|
||
|
+ WMI_VDEV_PARAM_ENABLE_DISABLE_RTT_RESPONDER_ROLE = 0x7d,
|
||
|
WMI_VDEV_PARAM_BA_MODE = 0x7e,
|
||
|
WMI_VDEV_PARAM_AUTORATE_MISC_CFG = 0x80,
|
||
|
WMI_VDEV_PARAM_SET_HE_SOUNDING_MODE = 0x87,
|