瀏覽代碼

qcacld-3.0: Add fine timing measurement capabilities from FW

Add support to use fine timing measurement capabilities coming
from the Firmware.

Currently INI config is being used for setting initiator
and responder roles. With this change, intersection of INI
config and FW indicated capability will be used.

Change-Id: If20bc8de2b6ec12bc638b75806e2a870a5ebc189
CRs-Fixed: 942290
Krishna Kumaar Natarajan 9 年之前
父節點
當前提交
1ae4911ae5

+ 3 - 0
core/hdd/src/wlan_hdd_main.c

@@ -1326,6 +1326,9 @@ void hdd_update_tgt_cfg(void *context, void *param)
 #ifdef WLAN_FEATURE_11AC
 	hdd_update_tgt_vht_cap(hdd_ctx, &cfg->vht_cap);
 #endif /* #ifdef WLAN_FEATURE_11AC */
+	hdd_ctx->config->fine_time_meas_cap &= cfg->fine_time_measurement_cap;
+	hdd_info(FL("fine_time_meas_cap: 0x%x"),
+		hdd_ctx->config->fine_time_meas_cap);
 }
 
 /**

+ 5 - 5
core/mac/src/sys/legacy/src/utils/src/parser_api.c

@@ -1230,21 +1230,21 @@ populate_dot11f_ext_cap(tpAniSirGlobal pMac,
 		return eSIR_FAILURE;
 	}
 
-	if (val) { /* If set to true then set RTTv3 */
+	if (val) {
 		if (!psessionEntry || LIM_IS_STA_ROLE(psessionEntry)) {
 			p_ext_cap->fine_time_meas_initiator =
 				(pMac->fine_time_meas_cap &
-				 FINE_TIME_MEAS_STA_INITIATOR) ? 1 : 0;
+				 WMI_FW_STA_RTT_INITR) ? 1 : 0;
 			p_ext_cap->fine_time_meas_responder =
 				(pMac->fine_time_meas_cap &
-				 FINE_TIME_MEAS_STA_RESPONDER) ? 1 : 0;
+				 WMI_FW_STA_RTT_RESPR) ? 1 : 0;
 		} else if (LIM_IS_AP_ROLE(psessionEntry)) {
 			p_ext_cap->fine_time_meas_initiator =
 				(pMac->fine_time_meas_cap &
-				 FINE_TIME_MEAS_SAP_INITIATOR) ? 1 : 0;
+				 WMI_FW_AP_RTT_INITR) ? 1 : 0;
 			p_ext_cap->fine_time_meas_responder =
 				(pMac->fine_time_meas_cap &
-				 FINE_TIME_MEAS_SAP_RESPONDER) ? 1 : 0;
+				 WMI_FW_AP_RTT_RESPR) ? 1 : 0;
 		}
 	}
 #ifdef QCA_HT_2040_COEX

+ 1 - 0
core/wma/inc/wma.h

@@ -1383,6 +1383,7 @@ typedef struct {
 		tpSirBssDescription  bss_desc_ptr);
 	cdf_wake_lock_t wmi_cmd_rsp_wake_lock;
 	cdf_runtime_lock_t wmi_cmd_rsp_runtime_lock;
+	uint32_t fine_time_measurement_cap;
 } t_wma_handle, *tp_wma_handle;
 
 /**

+ 2 - 1
core/wma/inc/wma_tgt_cfg.h

@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013-2015 The Linux Foundation. All rights reserved.
+ * Copyright (c) 2013-2016 The Linux Foundation. All rights reserved.
  *
  * Previously licensed under the ISC license by Qualcomm Atheros, Inc.
  *
@@ -168,5 +168,6 @@ struct wma_tgt_cfg {
 #ifdef FEATURE_GREEN_AP
 	bool egap_support;
 #endif
+	uint32_t fine_time_measurement_cap;
 };
 #endif /* WMA_TGT_CFG_H */

+ 5 - 0
core/wma/src/wma_main.c

@@ -3496,7 +3496,10 @@ static void wma_update_hdd_cfg(tp_wma_handle wma_handle)
 	tgt_cfg.lpss_support = wma_handle->lpss_support;
 #endif /* WLAN_FEATURE_LPSS */
 	tgt_cfg.ap_arpns_support = wma_handle->ap_arpns_support;
+	tgt_cfg.fine_time_measurement_cap =
+		wma_handle->fine_time_measurement_cap;
 	wma_setup_egap_support(&tgt_cfg, wma_handle);
+
 	wma_handle->tgt_cfg_update_cb(hdd_ctx, &tgt_cfg);
 }
 
@@ -3809,11 +3812,13 @@ void wma_rx_service_ready_event(WMA_HANDLE handle, void *cmd_param_info)
 
 	wma_handle->target_fw_version = ev->fw_build_vers;
 	wma_handle->new_hw_mode_index = ev->default_dbs_hw_mode_index;
+	wma_handle->fine_time_measurement_cap = ev->wmi_fw_sub_feat_caps;
 
 	WMA_LOGD("%s: Firmware default hw mode index : %d",
 		 __func__, ev->default_dbs_hw_mode_index);
 	WMA_LOGE("%s: Firmware build version : %08x",
 		 __func__, ev->fw_build_vers);
+	WMA_LOGD(FL("FW fine time meas cap: 0x%x"), ev->wmi_fw_sub_feat_caps);
 
 	if (ev->hw_bd_id) {
 		wma_handle->hw_bd_id = ev->hw_bd_id;