qcacld-3.0: Send RTT capability for STA mode

Based on the ini gfine_time_meas_cap, send enable/disable value to the
firmware for STA INITIATOR/RESPONDER mode using VDEV set param.

Change-Id: Idd4142e13061cd1af992bda88d0a0b81edc42fef
CRs-Fixed: 2574050
This commit is contained in:
Sourav Mohapatra
2019-11-20 14:22:28 +05:30
committed by nshrivas
parent 09db9462f7
commit fab026a99a
7 changed files with 55 additions and 38 deletions

View File

@@ -33,12 +33,12 @@
* fine timing measurement capability information
*
* <----- fine_time_meas_cap (in bits) ----->
* +----------+-----+-----+------+------+-------+-------+-----+-----+
* | 8-31 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
* +----------+-----+-----+------+------+-------+-------+-----+-----+
* | reserved | SAP | SAP |P2P-GO|P2P-GO|P2P-CLI|P2P-CLI| STA | STA |
* | |resp |init |resp |init |resp |init |resp |init |
* +----------+-----+-----+------+------+-------+-------+-----+-----+
* +---------+-----+-----+-----+-----+------+------+-------+-------+-----+-----+
* | 10-31 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
* +---------+-----+-----+-----+-----+------+------+-------+-------+-----+-----+
* | reserved| NAN | NAN | SAP | SAP |P2P-GO|P2P-GO|P2P-CLI|P2P-CLI| STA | STA |
* | | resp|init |resp |init |resp |init |resp |init |resp |init |
* +---------+-----+-----+-----+-----+------+------+-------+-------+-----+-----+
*
* resp - responder role; init- initiator role
*
@@ -63,8 +63,8 @@
#define CFG_FINE_TIME_MEAS_CAPABILITY CFG_INI_UINT( \
"gfine_time_meas_cap", \
0x0000, \
0x00BD, \
0x000D, \
0x003BD, \
0x0030D, \
CFG_VALUE_OR_DEFAULT, \
"fine timing measurement capability")

View File

@@ -532,9 +532,11 @@ struct nan_event_params {
* struct nan_msg_params - NAN request params
* @request_data_len: request data length
* @request_data: request data
* @rtt_cap: indicate if responder/initiator role is supported
*/
struct nan_msg_params {
uint16_t request_data_len;
uint32_t rtt_cap;
/* Variable length, do not add anything after this */
uint8_t request_data[];
};

View File

@@ -1230,29 +1230,6 @@ struct dhcp_server {
#define CFG_ENABLE_MTRACE_ALL
#endif
/*
* <ini>
* gEnableRTTsupport
*
* @Min: 0 - Disabled
* @Max: 1 - Enabled
* @Default: 1 - Enabled
*
* The param is used to enable/disable support for RTT
*
* Related: None.
*
* Supported Feature: RTT
*
* Usage: Internal/External
*
* </ini>
*/
#define CFG_ENABLE_RTT_SUPPORT CFG_INI_BOOL( \
"gEnableRTTSupport", \
1, \
"The param is used to enable/disable support for RTT")
/*
* <ini>
* gAdvertiseConcurrentOperation - Iface combination advertising
@@ -1499,7 +1476,6 @@ enum host_log_level {
CFG(CFG_ENABLE_MAC_PROVISION) \
CFG_ENABLE_MTRACE_ALL \
CFG(CFG_ENABLE_RAMDUMP_COLLECTION) \
CFG(CFG_ENABLE_RTT_SUPPORT) \
CFG(CFG_ENABLE_UNIT_TEST_FRAMEWORK) \
CFG(CFG_INTERFACE_CHANGE_WAIT) \
CFG(CFG_INFORM_BSS_RSSI_RAW) \

View File

@@ -219,7 +219,6 @@ struct hdd_config {
bool mac_provision;
uint32_t provisioned_intf_pool;
uint32_t derived_intf_pool;
uint8_t enable_rtt_support;
uint32_t cfg_wmi_credit_cnt;
uint32_t sar_version;
bool is_wow_disabled;

View File

@@ -148,6 +148,16 @@
#define g_mode_rates_size (12)
#define a_mode_rates_size (8)
/**
* rtt_is_initiator - Macro to check if the bitmap has any RTT roles set
* @bitmap: The bitmap to be checked
*/
#define rtt_is_enabled(bitmap) \
((bitmap) & (WMI_FW_STA_RTT_INITR | \
WMI_FW_STA_RTT_RESPR | \
WMI_FW_AP_RTT_INITR | \
WMI_FW_AP_RTT_RESPR))
/*
* Android CTS verifier needs atleast this much wait time (in msec)
*/
@@ -3438,6 +3448,7 @@ __wlan_hdd_cfg80211_get_supported_features(struct wiphy *wiphy,
#ifdef FEATURE_WLAN_TDLS
bool bvalue;
#endif
uint32_t fine_time_meas_cap;
/* ENTER_DEV() intentionally not used in a frequently invoked API */
@@ -3479,9 +3490,13 @@ __wlan_hdd_cfg80211_get_supported_features(struct wiphy *wiphy,
hdd_debug("NAN is supported by firmware");
fset |= WIFI_FEATURE_NAN;
}
ucfg_mlme_get_fine_time_meas_cap(hdd_ctx->psoc, &fine_time_meas_cap);
if (sme_is_feature_supported_by_fw(RTT) &&
hdd_ctx->config->enable_rtt_support) {
hdd_debug("RTT is supported by firmware and framework");
rtt_is_enabled(fine_time_meas_cap)) {
hdd_debug("RTT is supported by firmware and driver: %x",
fine_time_meas_cap);
fset |= WIFI_FEATURE_D2D_RTT;
fset |= WIFI_FEATURE_D2AP_RTT;
}

View File

@@ -4643,6 +4643,7 @@ QDF_STATUS hdd_init_station_mode(struct hdd_adapter *adapter)
mac_handle_t mac_handle;
bool bval = false;
uint8_t enable_sifs_burst = 0;
uint32_t fine_time_meas_cap = 0;
hdd_ctx = WLAN_HDD_GET_CTX(adapter);
mac_handle = hdd_ctx->mac_handle;
@@ -4717,10 +4718,24 @@ QDF_STATUS hdd_init_station_mode(struct hdd_adapter *adapter)
/* rcpi info initialization */
qdf_mem_zero(&adapter->rcpi, sizeof(adapter->rcpi));
if (adapter->device_mode == QDF_STA_MODE)
if (adapter->device_mode == QDF_STA_MODE) {
mlme_set_roam_trigger_bitmap(hdd_ctx->psoc, adapter->vdev_id,
DEFAULT_ROAM_TRIGGER_BITMAP);
ucfg_mlme_get_fine_time_meas_cap(hdd_ctx->psoc,
&fine_time_meas_cap);
sme_cli_set_command(
adapter->vdev_id,
WMI_VDEV_PARAM_ENABLE_DISABLE_RTT_RESPONDER_ROLE,
(bool)(fine_time_meas_cap & WMI_FW_STA_RTT_RESPR),
VDEV_CMD);
sme_cli_set_command(
adapter->vdev_id,
WMI_VDEV_PARAM_ENABLE_DISABLE_RTT_INITIATOR_ROLE,
(bool)(fine_time_meas_cap & WMI_FW_STA_RTT_INITR),
VDEV_CMD);
}
return QDF_STATUS_SUCCESS;
error_wmm_init:
@@ -10304,7 +10319,6 @@ static void hdd_cfg_params_init(struct hdd_context *hdd_ctx)
cfg_get(psoc,
CFG_ACTION_OUI_DISABLE_AGGRESSIVE_EDCA),
ACTION_OUI_MAX_STR_LEN);
config->enable_rtt_support = cfg_get(psoc, CFG_ENABLE_RTT_SUPPORT);
config->is_unit_test_framework_enabled =
cfg_get(psoc, CFG_ENABLE_UNIT_TEST_FRAMEWORK);
config->disable_channel = cfg_get(psoc, CFG_ENABLE_DISABLE_CHANNEL);
@@ -10524,10 +10538,16 @@ int hdd_start_ap_adapter(struct hdd_adapter *adapter)
if (adapter->device_mode == QDF_SAP_MODE) {
ucfg_mlme_get_fine_time_meas_cap(hdd_ctx->psoc,
&fine_time_meas_cap);
sme_cli_set_command(adapter->vdev_id,
sme_cli_set_command(
adapter->vdev_id,
WMI_VDEV_PARAM_ENABLE_DISABLE_RTT_RESPONDER_ROLE,
(bool)(fine_time_meas_cap & WMI_FW_AP_RTT_RESPR),
VDEV_CMD);
sme_cli_set_command(
adapter->vdev_id,
WMI_VDEV_PARAM_ENABLE_DISABLE_RTT_INITIATOR_ROLE,
(bool)(fine_time_meas_cap & WMI_FW_AP_RTT_INITR),
VDEV_CMD);
}
status = hdd_init_ap_mode(adapter, is_ssr);

View File

@@ -35,6 +35,7 @@
#include "wlan_objmgr_vdev_obj.h"
#include "wlan_utility.h"
#include "wlan_osif_request_manager.h"
#include "wlan_mlme_ucfg_api.h"
#define NAN_CMD_MAX_SIZE 2048
@@ -2634,6 +2635,7 @@ static int os_if_process_nan_enable_req(struct wlan_objmgr_psoc *psoc,
uint32_t chan_freq_2g, chan_freq_5g = 0;
uint32_t buf_len;
QDF_STATUS status;
uint32_t fine_time_meas_cap;
struct nan_enable_req *nan_req;
if (!tb[QCA_WLAN_VENDOR_ATTR_NAN_DISC_24GHZ_BAND_FREQ]) {
@@ -2668,6 +2670,9 @@ static int os_if_process_nan_enable_req(struct wlan_objmgr_psoc *psoc,
nan_req->psoc = psoc;
nan_req->params.request_data_len = buf_len;
ucfg_mlme_get_fine_time_meas_cap(psoc, &fine_time_meas_cap);
nan_req->params.rtt_cap = fine_time_meas_cap;
nla_memcpy(nan_req->params.request_data,
tb[QCA_WLAN_VENDOR_ATTR_NAN_CMD_DATA], buf_len);