diff --git a/wmi/src/wmi_unified_cfr_tlv.c b/wmi/src/wmi_unified_cfr_tlv.c index 5c79f4c25c..dba94b2612 100644 --- a/wmi/src/wmi_unified_cfr_tlv.c +++ b/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 */ diff --git a/wmi/src/wmi_unified_tlv.c b/wmi/src/wmi_unified_tlv.c index bbc9c15f81..747d00c61d 100644 --- a/wmi/src/wmi_unified_tlv.c +++ b/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 } /**