qcacmn: WMI changes to extract AoA capabilities

Add changes to extract AoA capabilities from EXT2
SERVICE READY EVENT

CRs-Fixed: 3553405
Change-Id: I240d8420a75419f3dde0abd03ef1d6b61abbc3e9
This commit is contained in:
Shwetha G K
2023-08-07 12:11:51 +05:30
committed by Rahul Choudhary
parent 6828824ccd
commit 7d60fb8543
4 changed files with 130 additions and 0 deletions

View File

@@ -3958,6 +3958,21 @@ QDF_STATUS wmi_extract_spectral_scaling_params_service_ready_ext(
uint8_t *evt_buf, uint8_t idx, uint8_t *evt_buf, uint8_t idx,
struct wlan_psoc_host_spectral_scaling_params *param); struct wlan_psoc_host_spectral_scaling_params *param);
#ifdef WLAN_RCC_ENHANCED_AOA_SUPPORT
/**
* wmi_extract_aoa_caps_service_ready_ext2: Extract AoA capabilities received
* through extended service ready event
* @wmi_handle: WMI handle
* @evt_buf: Event buffer
* @aoa_cap: Pointer to aoa cap
*
* Return: QDF status of operation
*/
QDF_STATUS wmi_extract_aoa_caps_service_ready_ext2(
wmi_unified_t wmi_handle, uint8_t *evt_buf,
struct wlan_psoc_host_rcc_enh_aoa_caps_ext2 *aoa_cap);
#endif /* WLAN_RCC_ENHANCED_AOA_SUPPORT */
/** /**
* wmi_extract_pdev_utf_event() - * wmi_extract_pdev_utf_event() -
* extract UTF data from pdev utf event * extract UTF data from pdev utf event

View File

@@ -3361,6 +3361,11 @@ QDF_STATUS (*extract_aux_dev_cap_service_ready_ext2)(
uint8_t *evt_buf, uint8_t idx, uint8_t *evt_buf, uint8_t idx,
struct wlan_psoc_host_aux_dev_caps *param); struct wlan_psoc_host_aux_dev_caps *param);
#ifdef WLAN_RCC_ENHANCED_AOA_SUPPORT
QDF_STATUS (*extract_aoa_caps_service_ready_ext2)
(struct wmi_unified *wmi_handle, uint8_t *buf,
struct wlan_psoc_host_rcc_enh_aoa_caps_ext2 *aoa_cap);
#endif /* WLAN_RCC_ENHANCED_AOA_SUPPORT */
}; };
/* Forward declaration for psoc*/ /* Forward declaration for psoc*/

View File

@@ -2884,6 +2884,19 @@ QDF_STATUS wmi_extract_spectral_scaling_params_service_ready_ext(
return QDF_STATUS_E_FAILURE; return QDF_STATUS_E_FAILURE;
} }
#ifdef WLAN_RCC_ENHANCED_AOA_SUPPORT
QDF_STATUS wmi_extract_aoa_caps_service_ready_ext2(
wmi_unified_t wmi_handle, uint8_t *evt_buf,
struct wlan_psoc_host_rcc_enh_aoa_caps_ext2 *aoa_cap)
{
if (wmi_handle->ops->extract_aoa_caps_service_ready_ext2)
return wmi_handle->ops->extract_aoa_caps_service_ready_ext2
(wmi_handle, evt_buf, aoa_cap);
return QDF_STATUS_E_FAILURE;
}
#endif /* WLAN_RCC_ENHANCED_AOA_SUPPORT */
QDF_STATUS wmi_extract_pdev_utf_event(wmi_unified_t wmi_handle, QDF_STATUS wmi_extract_pdev_utf_event(wmi_unified_t wmi_handle,
uint8_t *evt_buf, uint8_t *evt_buf,
struct wmi_host_pdev_utf_event *param) struct wmi_host_pdev_utf_event *param)

View File

@@ -5663,6 +5663,99 @@ extract_csa_ie_received_ev_params_tlv(wmi_unified_t wmi_handle,
return QDF_STATUS_SUCCESS; return QDF_STATUS_SUCCESS;
} }
#ifdef WLAN_RCC_ENHANCED_AOA_SUPPORT
static void
populate_per_band_aoa_caps(struct wlan_psoc_host_rcc_enh_aoa_caps_ext2 *aoa_cap,
wmi_enhanced_aoa_per_band_caps_param per_band_cap)
{
uint8_t tbl_idx;
uint16_t *gain_array = NULL;
if (per_band_cap.band_info == WMI_AOA_2G)
gain_array = aoa_cap->max_agc_gain_per_tbl_2g;
else if (per_band_cap.band_info == WMI_AOA_5G)
gain_array = aoa_cap->max_agc_gain_per_tbl_5g;
else if (per_band_cap.band_info == WMI_AOA_6G)
gain_array = aoa_cap->max_agc_gain_per_tbl_6g;
if (!gain_array) {
wmi_debug("unhandled AOA BAND TYPE!! fix it");
return;
}
for (tbl_idx = 0; tbl_idx < aoa_cap->max_agc_gain_tbls; tbl_idx++)
WMI_AOA_MAX_AGC_GAIN_GET(per_band_cap.max_agc_gain,
tbl_idx,
gain_array[tbl_idx]);
}
static void
populate_aoa_caps(struct wmi_unified *wmi_handle,
struct wlan_psoc_host_rcc_enh_aoa_caps_ext2 *aoa_cap,
wmi_enhanced_aoa_caps_param *aoa_caps_param)
{
uint8_t tbl_idx;
aoa_cap->max_agc_gain_tbls = aoa_caps_param->max_agc_gain_tbls;
if (aoa_cap->max_agc_gain_tbls > PSOC_MAX_NUM_AGC_GAIN_TBLS) {
wmi_err("Num gain table > PSOC_MAX_NUM_AGC_GAIN_TBLS cap");
aoa_cap->max_agc_gain_tbls = PSOC_MAX_NUM_AGC_GAIN_TBLS;
}
if (aoa_cap->max_agc_gain_tbls > WMI_AGC_MAX_GAIN_TABLE_IDX) {
wmi_err("num gain table > WMI_AGC_MAX_GAIN_TABLE_IDX cap");
aoa_cap->max_agc_gain_tbls = WMI_AGC_MAX_GAIN_TABLE_IDX;
}
for (tbl_idx = 0; tbl_idx < aoa_cap->max_agc_gain_tbls; tbl_idx++) {
WMI_AOA_MAX_BDF_ENTRIES_GET
(aoa_caps_param->max_bdf_gain_entries,
tbl_idx, aoa_cap->max_bdf_entries_per_tbl[tbl_idx]);
}
}
/**
* extract_aoa_caps_tlv() - extract aoa cap tlv
* @wmi_handle: wmi handle
* @event: pointer to event buffer
* @aoa_cap: pointer to structure where capability needs to extracted
*
* Return: QDF_STATUS_SUCCESS on success, QDF_STATUS_E_** on error
*/
static QDF_STATUS
extract_aoa_caps_tlv(struct wmi_unified *wmi_handle, uint8_t *event,
struct wlan_psoc_host_rcc_enh_aoa_caps_ext2 *aoa_cap)
{
int8_t band;
WMI_SERVICE_READY_EXT2_EVENTID_param_tlvs *param_buf;
param_buf = (WMI_SERVICE_READY_EXT2_EVENTID_param_tlvs *)event;
if (!param_buf) {
wmi_err("NULL param buf");
return QDF_STATUS_E_INVAL;
}
if (!param_buf->aoa_caps_param) {
wmi_debug("NULL aoa_caps_param");
return QDF_STATUS_SUCCESS;
}
if (!param_buf->num_aoa_per_band_caps_param ||
!param_buf->aoa_per_band_caps_param) {
wmi_debug("No aoa_per_band_caps_param");
return QDF_STATUS_SUCCESS;
}
populate_aoa_caps(wmi_handle, aoa_cap, param_buf->aoa_caps_param);
for (band = 0; band < param_buf->num_aoa_per_band_caps_param; band++)
populate_per_band_aoa_caps
(aoa_cap, param_buf->aoa_per_band_caps_param[band]);
return QDF_STATUS_SUCCESS;
}
#endif /* WLAN_RCC_ENHANCED_AOA_SUPPORT */
/** /**
* send_probe_rsp_tmpl_send_cmd_tlv() - send probe response template to fw * send_probe_rsp_tmpl_send_cmd_tlv() - send probe response template to fw
* @wmi_handle: wmi handle * @wmi_handle: wmi handle
@@ -21520,6 +21613,10 @@ struct wmi_ops tlv_ops = {
.extract_csa_ie_received_ev_params = .extract_csa_ie_received_ev_params =
extract_csa_ie_received_ev_params_tlv, extract_csa_ie_received_ev_params_tlv,
.extract_rf_path_resp = extract_rf_path_resp_tlv, .extract_rf_path_resp = extract_rf_path_resp_tlv,
#ifdef WLAN_RCC_ENHANCED_AOA_SUPPORT
.extract_aoa_caps_service_ready_ext2 =
extract_aoa_caps_tlv,
#endif /* WLAN_RCC_ENHANCED_AOA_SUPPORT */
}; };
#ifdef WLAN_FEATURE_11BE_MLO #ifdef WLAN_FEATURE_11BE_MLO