Bläddra i källkod

qcacmn: Extract AoA phase delta parameters

Add API to extract AoA phase delta and IbfCalValues from
WMI event. Also Add service bit to support the feature

Change-Id: I6f6514711345dd47c4be3673b8c40501feb763e9
Shwetha G K 4 år sedan
förälder
incheckning
378a3b351e
2 ändrade filer med 60 tillägg och 0 borttagningar
  1. 52 0
      wmi/src/wmi_unified_cfr_tlv.c
  2. 8 0
      wmi/src/wmi_unified_tlv.c

+ 52 - 0
wmi/src/wmi_unified_cfr_tlv.c

@@ -227,6 +227,57 @@ static QDF_STATUS send_cfr_rcc_cmd_tlv(wmi_unified_t wmi_handle,
 
 	return status;
 }
+
+#ifdef REPORT_AOA_FOR_RCC
+static QDF_STATUS
+extract_cfr_phase_param_tlv(wmi_unified_t wmi_handle,
+			    void *evt_buf,
+			    struct wmi_cfr_phase_delta_param *param)
+{
+	WMI_PDEV_AOA_PHASEDELTA_EVENTID_param_tlvs *param_buf;
+	wmi_pdev_aoa_phasedelta_evt_fixed_param *phase_event;
+
+	param_buf = (WMI_PDEV_AOA_PHASEDELTA_EVENTID_param_tlvs *)evt_buf;
+	if (!param_buf) {
+		wmi_err("Invalid cfr aoa phase delta buffer");
+		return QDF_STATUS_E_INVAL;
+	}
+
+	phase_event = param_buf->fixed_param;
+	if (!phase_event) {
+		wmi_err("CFR phase AoA delta buffer is NULL");
+		return QDF_STATUS_E_NULL_VALUE;
+	}
+
+	param->freq = phase_event->freq;
+	param->pdev_id = wmi_handle->ops->convert_pdev_id_target_to_host
+				(wmi_handle, phase_event->pdev_id);
+
+	param->max_chains = phase_event->chainInfo & 0xFFFF;
+
+	param->chain_phase_mask = (phase_event->chainInfo >> 16) & 0xFFFF;
+
+	qdf_mem_copy(param->ibf_cal_val,
+		     phase_event->perChainIbfCalVal,
+		     (sizeof(uint32_t) * WMI_MAX_CHAINS_FOR_AOA_RCC));
+
+	qdf_mem_copy(param->phase_delta,
+		     phase_event->phasedelta,
+		     (sizeof(uint32_t) *
+		      WMI_MAX_CHAINS_FOR_AOA_RCC *
+		      MAX_AOA_PHASEDELTA));
+
+	return QDF_STATUS_SUCCESS;
+}
+#else
+static QDF_STATUS
+extract_cfr_phase_param_tlv(wmi_unified_t wmi_handle,
+			    void *evt_buf,
+			    struct wmi_cfr_phase_delta_param *param)
+{
+	return QDF_STATUS_E_NOSUPPORT;
+}
+#endif /* REPORT_AOA_FOR_RCC */
 #endif
 
 static QDF_STATUS send_peer_cfr_capture_cmd_tlv(wmi_unified_t wmi_handle,
@@ -286,6 +337,7 @@ void wmi_cfr_attach_tlv(wmi_unified_t wmi_handle)
 	ops->send_peer_cfr_capture_cmd = send_peer_cfr_capture_cmd_tlv;
 	ops->extract_cfr_peer_tx_event_param =
 		extract_cfr_peer_tx_event_param_tlv;
+	ops->extract_cfr_phase_param = extract_cfr_phase_param_tlv;
 	wmi_enh_cfr_attach_tlv(wmi_handle);
 }
 #endif /* WLAN_CFR_ENABLE */

+ 8 - 0
wmi/src/wmi_unified_tlv.c

@@ -16037,6 +16037,10 @@ event_ids[wmi_roam_scan_chan_list_id] =
 #endif
 	event_ids[wmi_pdev_get_halphy_cal_status_event_id] =
 			WMI_PDEV_GET_HALPHY_CAL_STATUS_EVENTID;
+#ifdef REPORT_AOA_FOR_RCC
+	event_ids[wmi_pdev_aoa_phasedelta_event_id] =
+			WMI_PDEV_AOA_PHASEDELTA_EVENTID;
+#endif
 }
 
 #ifdef WLAN_FEATURE_LINK_LAYER_STATS
@@ -16451,6 +16455,10 @@ static void populate_tlv_service(uint32_t *wmi_service)
 			WMI_SERVICE_RTT_AP_INITIATOR_STAGGERED_MODE_SUPPORTED;
 	wmi_service[wmi_service_rtt_ap_initiator_bursted_mode_supported] =
 			WMI_SERVICE_RTT_AP_INITIATOR_BURSTED_MODE_SUPPORTED;
+#ifdef REPORT_AOA_FOR_RCC
+	wmi_service[wmi_service_aoa_for_rcc_supported] =
+			WMI_SERVICE_AOA_FOR_RCC_SUPPORTED;
+#endif
 }
 
 /**