Explorar el Código

qcacld-3.0: Refactor ftm and rtt params init on vdev create

Introduce a new API to configure the rtt and ftm
parameters for the VDEV.

The API can later be used to configure the
rtt and ftm parameters on per VDEV of the adapter.

Change-Id: I9d7411fa76520b0a1876f38c27122a14a91826b7
CRs-Fixed: 3297665
Vinod Kumar Pirla hace 2 años
padre
commit
d49dbe42dc
Se han modificado 1 ficheros con 67 adiciones y 61 borrados
  1. 67 61
      core/hdd/src/wlan_hdd_main.c

+ 67 - 61
core/hdd/src/wlan_hdd_main.c

@@ -81,6 +81,7 @@
 #include "wlan_hdd_p2p.h"
 #include <linux/rtnetlink.h>
 #include "sap_api.h"
+#include <sap_internal.h>
 #include <linux/semaphore.h>
 #include <linux/ctype.h>
 #include <linux/compat.h>
@@ -6413,6 +6414,64 @@ bool hdd_is_vdev_in_conn_state(struct hdd_adapter *adapter)
 	return 0;
 }
 
+#define MAX_VDEV_RTT_PARAMS 2
+/* params being sent:
+ * wmi_vdev_param_enable_disable_rtt_responder_role
+ * wmi_vdev_param_enable_disable_rtt_initiator_role
+ */
+static QDF_STATUS
+hdd_vdev_configure_rtt_params(struct wlan_objmgr_vdev *vdev)
+{
+	QDF_STATUS status;
+	struct wlan_objmgr_psoc *psoc;
+	uint32_t fine_time_meas_cap = 0;
+	uint8_t vdev_id = wlan_vdev_get_id(vdev);
+	struct dev_set_param vdevsetparam[MAX_VDEV_RTT_PARAMS] = {};
+	uint8_t index = 0;
+	WMI_FW_SUB_FEAT_CAPS wmi_fw_rtt_respr, wmi_fw_rtt_initr;
+
+	switch (wlan_vdev_mlme_get_opmode(vdev)) {
+	case QDF_STA_MODE:
+		wmi_fw_rtt_respr = WMI_FW_STA_RTT_RESPR;
+		wmi_fw_rtt_initr = WMI_FW_STA_RTT_INITR;
+		break;
+	case QDF_SAP_MODE:
+		wmi_fw_rtt_respr = WMI_FW_AP_RTT_RESPR;
+		wmi_fw_rtt_initr = WMI_FW_AP_RTT_INITR;
+		break;
+	default:
+		return QDF_STATUS_SUCCESS;
+	}
+
+	psoc = wlan_vdev_get_psoc(vdev);
+
+	ucfg_mlme_get_fine_time_meas_cap(psoc, &fine_time_meas_cap);
+	status = mlme_check_index_setparam(
+			vdevsetparam,
+			wmi_vdev_param_enable_disable_rtt_responder_role,
+			(fine_time_meas_cap & wmi_fw_rtt_respr), index++,
+			MAX_VDEV_RTT_PARAMS);
+	if (QDF_IS_STATUS_ERROR(status))
+		return status;
+
+	status = mlme_check_index_setparam(
+			vdevsetparam,
+			wmi_vdev_param_enable_disable_rtt_initiator_role,
+			(fine_time_meas_cap & wmi_fw_rtt_respr), index++,
+			MAX_VDEV_RTT_PARAMS);
+	if (QDF_IS_STATUS_ERROR(status))
+		return status;
+
+	status = sme_send_multi_pdev_vdev_set_params(MLME_VDEV_SETPARAM,
+						     vdev_id, vdevsetparam,
+						     index);
+	if (QDF_IS_STATUS_ERROR(status))
+		hdd_err("failed to set RTT_RESPONDER,INITIATOR params:%d",
+			status);
+
+	return status;
+}
+
 static void hdd_store_vdev_info(struct hdd_adapter *adapter,
 				struct wlan_objmgr_vdev *vdev)
 {
@@ -6643,11 +6702,6 @@ hdd_vdev_destroy_procedure:
 	return errno;
 }
 
-#define MAX_VDEV_RTT_PARAMS 2
-/* params being sent:
- * wmi_vdev_param_enable_disable_rtt_responder_role
- * wmi_vdev_param_enable_disable_rtt_initiator_role
- */
 QDF_STATUS hdd_init_station_mode(struct hdd_adapter *adapter)
 {
 	struct hdd_context *hdd_ctx;
@@ -6655,10 +6709,8 @@ QDF_STATUS hdd_init_station_mode(struct hdd_adapter *adapter)
 	int ret_val;
 	mac_handle_t mac_handle;
 	uint8_t enable_sifs_burst = 0;
-	uint32_t fine_time_meas_cap = 0, roam_triggers;
+	uint32_t roam_triggers;
 	struct wlan_objmgr_vdev *vdev;
-	struct dev_set_param vdevsetparam[MAX_VDEV_RTT_PARAMS] = {};
-	uint8_t index = 0;
 
 	hdd_ctx = WLAN_HDD_GET_CTX(adapter);
 	mac_handle = hdd_ctx->mac_handle;
@@ -6711,30 +6763,10 @@ QDF_STATUS hdd_init_station_mode(struct hdd_adapter *adapter)
 		mlme_set_roam_trigger_bitmap(hdd_ctx->psoc,
 					     adapter->deflink->vdev_id,
 					     roam_triggers);
-		ucfg_mlme_get_fine_time_meas_cap(hdd_ctx->psoc,
-						 &fine_time_meas_cap);
-		status = mlme_check_index_setparam(vdevsetparam,
-			wmi_vdev_param_enable_disable_rtt_responder_role,
-			(fine_time_meas_cap & WMI_FW_STA_RTT_RESPR), index++,
-			MAX_VDEV_RTT_PARAMS);
-		if (QDF_IS_STATUS_ERROR(status))
-			goto error_wmm_init;
 
-		status = mlme_check_index_setparam(vdevsetparam,
-			wmi_vdev_param_enable_disable_rtt_initiator_role,
-			(fine_time_meas_cap & WMI_FW_STA_RTT_INITR), index++,
-			MAX_VDEV_RTT_PARAMS);
+		status = hdd_vdev_configure_rtt_params(vdev);
 		if (QDF_IS_STATUS_ERROR(status))
 			goto error_wmm_init;
-
-		status = sme_send_multi_pdev_vdev_set_params(
-						MLME_VDEV_SETPARAM,
-						adapter->deflink->vdev_id,
-						vdevsetparam, index);
-		if (QDF_IS_STATUS_ERROR(status)) {
-			hdd_err("failed to set RTT_RESPONDER,INITIATOR params:%d", status);
-			goto error_wmm_init;
-		}
 	}
 
 	hdd_objmgr_put_vdev_by_user(vdev, WLAN_INIT_DEINIT_ID);
@@ -13193,7 +13225,6 @@ int hdd_start_station_adapter(struct hdd_adapter *adapter)
 	return 0;
 }
 
-#define MAX_VDEV_AP_RTT_PARAMS 2
 /**
  * hdd_start_ap_adapter()- Start AP Adapter
  * @adapter: HDD adapter
@@ -13208,9 +13239,7 @@ int hdd_start_ap_adapter(struct hdd_adapter *adapter)
 	bool is_ssr = false;
 	int ret;
 	struct hdd_context *hdd_ctx = WLAN_HDD_GET_CTX(adapter);
-	uint32_t fine_time_meas_cap = 0;
-	struct dev_set_param setparam[MAX_VDEV_AP_RTT_PARAMS] = {};
-	uint8_t index = 0;
+	struct sap_context *sap_ctx;
 
 	hdd_enter();
 
@@ -13238,8 +13267,8 @@ int hdd_start_ap_adapter(struct hdd_adapter *adapter)
 		goto sap_destroy_ctx;
 	}
 
-	status = sap_acquire_vdev_ref(hdd_ctx->psoc,
-				      WLAN_HDD_GET_SAP_CTX_PTR(adapter),
+	sap_ctx = WLAN_HDD_GET_SAP_CTX_PTR(adapter);
+	status = sap_acquire_vdev_ref(hdd_ctx->psoc, sap_ctx,
 				      adapter->deflink->vdev_id);
 	if (!QDF_IS_STATUS_SUCCESS(status)) {
 		hdd_err("Failed to get vdev ref for sap for session_id: %u",
@@ -13249,32 +13278,9 @@ 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);
-		ret = mlme_check_index_setparam(
-			setparam,
-			wmi_vdev_param_enable_disable_rtt_responder_role,
-			(fine_time_meas_cap & WMI_FW_STA_RTT_RESPR), index++,
-			MAX_VDEV_AP_RTT_PARAMS);
-		if (QDF_IS_STATUS_ERROR(ret)) {
-			hdd_err("failed at wmi_vdev_param_enable_disable_rtt_responder_role");
-			goto sap_release_ref;
-		}
-		ret = mlme_check_index_setparam(
-			setparam,
-			wmi_vdev_param_enable_disable_rtt_initiator_role,
-			(fine_time_meas_cap & WMI_FW_STA_RTT_INITR), index++,
-			MAX_VDEV_AP_RTT_PARAMS);
-		if (QDF_IS_STATUS_ERROR(ret)) {
-			hdd_err("failed at wmi_vdev_param_enable_disable_rtt_initiator_role");
+		status = hdd_vdev_configure_rtt_params(sap_ctx->vdev);
+		if (QDF_IS_STATUS_ERROR(status))
 			goto sap_release_ref;
-		}
-		ret = sme_send_multi_pdev_vdev_set_params(
-						MLME_VDEV_SETPARAM,
-						adapter->deflink->vdev_id,
-						setparam, index);
-		if (QDF_IS_STATUS_ERROR(ret))
-			hdd_err("failed to send vdev RTT set params");
 	}
 
 	status = hdd_init_ap_mode(adapter, is_ssr);
@@ -13296,7 +13302,7 @@ int hdd_start_ap_adapter(struct hdd_adapter *adapter)
 	return 0;
 
 sap_release_ref:
-	sap_release_vdev_ref(WLAN_HDD_GET_SAP_CTX_PTR(adapter));
+	sap_release_vdev_ref(sap_ctx);
 sap_vdev_destroy:
 	hdd_vdev_destroy(adapter);
 sap_destroy_ctx: