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
diff --git a/components/mlme/dispatcher/inc/cfg_mlme_wifi_pos.h b/components/mlme/dispatcher/inc/cfg_mlme_wifi_pos.h
index befc593..c93ca73 100644
--- a/components/mlme/dispatcher/inc/cfg_mlme_wifi_pos.h
+++ b/components/mlme/dispatcher/inc/cfg_mlme_wifi_pos.h
@@ -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")
 
diff --git a/components/nan/core/inc/nan_public_structs.h b/components/nan/core/inc/nan_public_structs.h
index 04ccfe8..feabeb8 100644
--- a/components/nan/core/inc/nan_public_structs.h
+++ b/components/nan/core/inc/nan_public_structs.h
@@ -532,9 +532,11 @@
  * 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[];
 };
diff --git a/core/hdd/inc/hdd_config.h b/core/hdd/inc/hdd_config.h
index e93405c..f65626c 100644
--- a/core/hdd/inc/hdd_config.h
+++ b/core/hdd/inc/hdd_config.h
@@ -1232,29 +1232,6 @@
 
 /*
  * <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
  * @Min: 0
  * @Max: 1
@@ -1499,7 +1476,6 @@
 	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) \
diff --git a/core/hdd/inc/wlan_hdd_cfg.h b/core/hdd/inc/wlan_hdd_cfg.h
index 1a9deb3..8059bb9 100644
--- a/core/hdd/inc/wlan_hdd_cfg.h
+++ b/core/hdd/inc/wlan_hdd_cfg.h
@@ -219,7 +219,6 @@
 	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;
diff --git a/core/hdd/src/wlan_hdd_cfg80211.c b/core/hdd/src/wlan_hdd_cfg80211.c
index be6b6b9..4ad3038 100644
--- a/core/hdd/src/wlan_hdd_cfg80211.c
+++ b/core/hdd/src/wlan_hdd_cfg80211.c
@@ -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 @@
 #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 @@
 		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;
 	}
diff --git a/core/hdd/src/wlan_hdd_main.c b/core/hdd/src/wlan_hdd_main.c
index 84c4182..0261a40 100644
--- a/core/hdd/src/wlan_hdd_main.c
+++ b/core/hdd/src/wlan_hdd_main.c
@@ -4643,6 +4643,7 @@
 	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 @@
 	/* 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 @@
 		      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 @@
 	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);
diff --git a/os_if/nan/src/os_if_nan.c b/os_if/nan/src/os_if_nan.c
index 2adb5d7..a686d69 100644
--- a/os_if/nan/src/os_if_nan.c
+++ b/os_if/nan/src/os_if_nan.c
@@ -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 @@
 	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 @@
 	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);