From a739a0cabb145a26664107f4af58f02ecf6d82d4 Mon Sep 17 00:00:00 2001 From: Shiva Krishna Pittala Date: Wed, 22 Dec 2021 13:28:09 +0530 Subject: [PATCH] qcacmn: Add support to extract FFT size capabilities WMI_SPECTRAL_CAPABILITIES_EVENTID event will be sent by the FW to indicate different capabilities of the Spectral HW. Add support to extract the FFT size capabilities from this event. Change-Id: I9640fa51e4249b9d1c2d9d3ac5da7f1d56c9d006 CRs-Fixed: 3098880 --- target_if/spectral/target_if_spectral.c | 57 +++++++++++++++++++++++++ target_if/spectral/target_if_spectral.h | 21 +++++++++ wmi/inc/wmi_unified_api.h | 13 ++++++ wmi/inc/wmi_unified_param.h | 13 ++++++ wmi/inc/wmi_unified_priv.h | 4 ++ wmi/src/wmi_unified_api.c | 11 +++++ wmi/src/wmi_unified_tlv.c | 49 +++++++++++++++++++++ 7 files changed, 168 insertions(+) diff --git a/target_if/spectral/target_if_spectral.c b/target_if/spectral/target_if_spectral.c index 213f7ffa54..c9d1039ca6 100644 --- a/target_if/spectral/target_if_spectral.c +++ b/target_if/spectral/target_if_spectral.c @@ -7101,6 +7101,45 @@ target_if_wmi_extract_spectral_scan_bw_caps( return psoc_spectral->wmi_ops.extract_spectral_scan_bw_caps( wmi_handle, evt_buf, bw_caps); } + +/** + * target_if_wmi_extract_spectral_fft_size_caps() - Wrapper function to + * extract fft size capabilities from Spectral capabilities WMI event + * @psoc: Pointer to psoc object + * @evt_buf: Event buffer + * @fft_size_caps: Data structure to be filled by this API after extraction + * + * Return: QDF_STATUS of operation + */ +QDF_STATUS +target_if_wmi_extract_spectral_fft_size_caps( + struct wlan_objmgr_psoc *psoc, + uint8_t *evt_buf, + struct spectral_fft_size_capabilities *fft_size_caps) +{ + struct target_if_psoc_spectral *psoc_spectral; + wmi_unified_t wmi_handle; + + if (!psoc) { + spectral_err("psoc is null"); + return QDF_STATUS_E_INVAL; + } + + wmi_handle = GET_WMI_HDL_FROM_PSOC(psoc); + if (!wmi_handle) { + spectral_err("WMI handle is null"); + return QDF_STATUS_E_INVAL; + } + + psoc_spectral = get_target_if_spectral_handle_from_psoc(psoc); + if (!psoc_spectral) { + spectral_err("spectral object is null"); + return QDF_STATUS_E_FAILURE; + } + + return psoc_spectral->wmi_ops.extract_spectral_fft_size_caps( + wmi_handle, evt_buf, fft_size_caps); +} #else /** * target_if_spectral_wmi_unified_register_event_handler() - Wrapper function to @@ -7375,6 +7414,24 @@ target_if_wmi_extract_spectral_scan_bw_caps( return wmi_extract_spectral_scan_bw_caps(wmi_handle, evt_buf, bw_caps); } + +QDF_STATUS +target_if_wmi_extract_spectral_fft_size_caps( + struct wlan_objmgr_psoc *psoc, + uint8_t *evt_buf, + struct spectral_fft_size_capabilities *fft_size_caps) +{ + wmi_unified_t wmi_handle; + + wmi_handle = GET_WMI_HDL_FROM_PSOC(psoc); + if (!wmi_handle) { + spectral_err("WMI handle is null"); + return QDF_STATUS_E_INVAL; + } + + return wmi_extract_spectral_fft_size_caps(wmi_handle, evt_buf, + fft_size_caps); +} #endif /** diff --git a/target_if/spectral/target_if_spectral.h b/target_if/spectral/target_if_spectral.h index 71ac416f94..a4bb3f93ef 100644 --- a/target_if/spectral/target_if_spectral.h +++ b/target_if/spectral/target_if_spectral.h @@ -946,6 +946,8 @@ struct vdev_spectral_enable_params; * capabilities event * @extract_spectral_scan_bw_caps: Extract bandwidth capabilities from Spectral * capabilities event + * @extract_spectral_fft_size_caps: Extract fft size capabilities from Spectral + * capabilities event */ struct spectral_wmi_ops { QDF_STATUS (*wmi_spectral_configure_cmd_send)( @@ -985,6 +987,9 @@ struct spectral_wmi_ops { QDF_STATUS (*extract_spectral_scan_bw_caps)( wmi_unified_t wmi_handle, void *event, struct spectral_scan_bw_capabilities *bw_caps); + QDF_STATUS (*extract_spectral_fft_size_caps)( + wmi_unified_t wmi_handle, void *event, + struct spectral_fft_size_capabilities *fft_size_caps); }; /** @@ -3021,4 +3026,20 @@ target_if_wmi_extract_spectral_scan_bw_caps( struct wlan_objmgr_psoc *psoc, uint8_t *evt_buf, struct spectral_scan_bw_capabilities *bw_caps); + +struct spectral_fft_size_capabilities; +/** + * target_if_wmi_extract_spectral_fft_size_caps() - Wrapper function to + * extract fft size capabilities from Spectral capabilities WMI event + * @psoc: Pointer to psoc object + * @evt_buf: Event buffer + * @fft_size_caps: Data structure to be filled by this API after extraction + * + * Return: QDF_STATUS of operation + */ +QDF_STATUS +target_if_wmi_extract_spectral_fft_size_caps( + struct wlan_objmgr_psoc *psoc, + uint8_t *evt_buf, + struct spectral_fft_size_capabilities *fft_size_caps); #endif /* _TARGET_IF_SPECTRAL_H_ */ diff --git a/wmi/inc/wmi_unified_api.h b/wmi/inc/wmi_unified_api.h index a37d031dfb..213d1475cd 100644 --- a/wmi/inc/wmi_unified_api.h +++ b/wmi/inc/wmi_unified_api.h @@ -2338,6 +2338,19 @@ QDF_STATUS wmi_extract_spectral_caps_fixed_param( QDF_STATUS wmi_extract_spectral_scan_bw_caps( wmi_unified_t wmi_handle, void *event, struct spectral_scan_bw_capabilities *bw_caps); + +/** + * wmi_extract_spectral_fft_size_caps() - Extract FFT size caps from + * Spectral capabilities WMI event + * @wmi_handle: handle to WMI. + * @event: Event buffer + * @fft_size_caps: Data structure to be populated by this API after extraction + * + * Return: QDF_STATUS of operation + */ +QDF_STATUS wmi_extract_spectral_fft_size_caps( + wmi_unified_t wmi_handle, void *event, + struct spectral_fft_size_capabilities *fft_size_caps); #endif /* WLAN_CONV_SPECTRAL_ENABLE */ #if defined(WLAN_SUPPORT_FILS) || defined(CONFIG_BAND_6GHZ) diff --git a/wmi/inc/wmi_unified_param.h b/wmi/inc/wmi_unified_param.h index c3071e1e5f..18744f84ec 100644 --- a/wmi/inc/wmi_unified_param.h +++ b/wmi/inc/wmi_unified_param.h @@ -3133,6 +3133,19 @@ struct spectral_scan_bw_capabilities { enum phy_ch_width operating_bw; uint32_t supported_bws; }; + +/** + * struct spectral_fft_size_capabilities - Spectral scan FFT size caps + * that are extracted from Spectral capabilities WMI event + * @pdev_id: pdev ID + * @sscan_bw: Spectral scan bandwidth + * @sscan_bw: Supported FFT sizes bitmap for given @pdev_id and @sscan_bw + */ +struct spectral_fft_size_capabilities { + uint8_t pdev_id; + enum phy_ch_width sscan_bw; + uint32_t supports_fft_sizes; +}; #endif /** diff --git a/wmi/inc/wmi_unified_priv.h b/wmi/inc/wmi_unified_priv.h index 430329adf1..42cc4ba13d 100644 --- a/wmi/inc/wmi_unified_priv.h +++ b/wmi/inc/wmi_unified_priv.h @@ -1522,6 +1522,10 @@ QDF_STATUS (*extract_spectral_caps_fixed_param)( QDF_STATUS (*extract_spectral_scan_bw_caps)( wmi_unified_t wmi_handle, void *event, struct spectral_scan_bw_capabilities *bw_caps); + +QDF_STATUS (*extract_spectral_fft_size_caps)( + wmi_unified_t wmi_handle, void *event, + struct spectral_fft_size_capabilities *fft_size_caps); #endif /* WLAN_CONV_SPECTRAL_ENABLE */ QDF_STATUS (*send_vdev_spectral_configure_cmd)(wmi_unified_t wmi_handle, diff --git a/wmi/src/wmi_unified_api.c b/wmi/src/wmi_unified_api.c index d4f12ce352..d417cdca6e 100644 --- a/wmi/src/wmi_unified_api.c +++ b/wmi/src/wmi_unified_api.c @@ -2706,6 +2706,17 @@ QDF_STATUS wmi_extract_spectral_scan_bw_caps( return QDF_STATUS_E_FAILURE; } + +QDF_STATUS wmi_extract_spectral_fft_size_caps( + wmi_unified_t wmi_handle, void *event, + struct spectral_fft_size_capabilities *fft_size_caps) +{ + if (wmi_handle->ops->extract_spectral_fft_size_caps) + return wmi_handle->ops->extract_spectral_fft_size_caps( + wmi_handle, event, fft_size_caps); + + return QDF_STATUS_E_FAILURE; +} #endif /* WLAN_CONV_SPECTRAL_ENABLE */ QDF_STATUS wmi_extract_spectral_scaling_params_service_ready_ext( diff --git a/wmi/src/wmi_unified_tlv.c b/wmi/src/wmi_unified_tlv.c index 6131313238..2b8a3475e3 100644 --- a/wmi/src/wmi_unified_tlv.c +++ b/wmi/src/wmi_unified_tlv.c @@ -7498,6 +7498,53 @@ extract_spectral_scan_bw_caps_tlv( return QDF_STATUS_SUCCESS; } + +/** + * extract_spectral_fft_size_caps_tlv() - Extract FFT size caps from + * Spectral capabilities WMI event + * @wmi_handle: handle to WMI. + * @event: Event buffer + * @fft_size_caps: Data structure to be populated by this API after extraction + * + * Return: QDF_STATUS of operation + */ +static QDF_STATUS +extract_spectral_fft_size_caps_tlv( + wmi_unified_t wmi_handle, void *event, + struct spectral_fft_size_capabilities *fft_size_caps) +{ + WMI_SPECTRAL_CAPABILITIES_EVENTID_param_tlvs *param_buf = event; + int idx; + + if (!param_buf) { + wmi_err("param_buf is NULL"); + return QDF_STATUS_E_NULL_VALUE; + } + + if (!fft_size_caps) { + wmi_err("fft size caps is NULL"); + return QDF_STATUS_E_NULL_VALUE; + } + + for (idx = 0; idx < param_buf->num_fft_size_caps; idx++) { + fft_size_caps[idx].pdev_id = + wmi_handle->ops->convert_pdev_id_target_to_host( + wmi_handle, + param_buf->fft_size_caps[idx].pdev_id); + fft_size_caps[idx].sscan_bw = wmi_map_ch_width( + param_buf->fft_size_caps[idx].sscan_bw); + fft_size_caps[idx].supports_fft_sizes = + param_buf->sscan_bw_caps[idx].supported_flags; + + wmi_debug("fft_size_caps[%u]:: pdev_id:%u sscan_bw:%u" + "supported_flags:0x%x", + idx, param_buf->sscan_bw_caps[idx].pdev_id, + param_buf->fft_size_caps[idx].sscan_bw, + param_buf->sscan_bw_caps[idx].supported_flags); + } + + return QDF_STATUS_SUCCESS; +} #endif /* WLAN_CONV_SPECTRAL_ENABLE */ #ifdef FEATURE_WPSS_THERMAL_MITIGATION @@ -17092,6 +17139,8 @@ struct wmi_ops tlv_ops = { extract_spectral_caps_fixed_param_tlv, .extract_spectral_scan_bw_caps = extract_spectral_scan_bw_caps_tlv, + .extract_spectral_fft_size_caps = + extract_spectral_fft_size_caps_tlv, #endif /* WLAN_CONV_SPECTRAL_ENABLE */ .send_thermal_mitigation_param_cmd = send_thermal_mitigation_param_cmd_tlv,