qcacmn: Extract enhanced AoA caps to tgt_info

Changes to extract enhanced AoA (multi gain table support)
capabilities from SERVICE_READY_EXT2 event

CRs-Fixed: 3553378
Change-Id: I8db093cfce7b8c8cacedef39f97911eabe062c19
This commit is contained in:
Shwetha G K
2023-08-07 10:46:54 +05:30
committed by Rahul Choudhary
parent dd3ebd6336
commit 6828824ccd
6 changed files with 151 additions and 0 deletions

View File

@@ -210,6 +210,7 @@ struct target_version_info {
* @sbs_lower_band_end_freq: sbs lower band end frequency
* @health_mon_param: health monitor params
* @aux_dev_caps: aux device capability
* @aoa_caps: aoa capabilities from target
*/
struct tgt_info {
struct host_fw_ver version;
@@ -250,6 +251,9 @@ struct tgt_info {
struct wmi_health_mon_params health_mon_param;
#endif /* HEALTH_MON_SUPPORT */
struct wlan_psoc_host_aux_dev_caps *aux_dev_caps;
#ifdef WLAN_RCC_ENHANCED_AOA_SUPPORT
struct wlan_psoc_host_rcc_enh_aoa_caps_ext2 *aoa_caps;
#endif /* WLAN_RCC_ENHANCED_AOA_SUPPORT */
};
/**
@@ -1483,6 +1487,26 @@ static inline uint32_t target_psoc_get_num_dbr_ring_caps
return psoc_info->info.service_ext2_param.num_dbr_ring_caps;
}
/**
* target_psoc_get_aoa_caps() - get aoa_caps
* @psoc_info: pointer to structure target_psoc_info
*
* API to get aoa_caps
*
* Return: structure pointer to wlan_psoc_host_rcc_enh_aoa_caps_ext2
*/
#ifdef WLAN_RCC_ENHANCED_AOA_SUPPORT
static inline
struct wlan_psoc_host_rcc_enh_aoa_caps_ext2 *target_psoc_get_aoa_caps
(struct target_psoc_info *psoc_info)
{
if (!psoc_info)
return NULL;
return psoc_info->info.aoa_caps;
}
#endif /* WLAN_RCC_ENHANCED_AOA_SUPPORT */
/**
* target_psoc_get_num_scan_radio_caps() - get no of scan_radio_caps
* @psoc_info: pointer to structure target_psoc_info

View File

@@ -794,6 +794,7 @@ QDF_STATUS target_if_psoc_tgt_info_mem_free(
init_deinit_scan_radio_cap_free(tgt_psoc_info);
init_deinit_msdu_idx_qtype_map_free(tgt_psoc_info);
init_deinit_aux_dev_cap_free(tgt_psoc_info);
init_deinit_rcc_aoa_cap_ext2_free(tgt_psoc_info);
return QDF_STATUS_SUCCESS;
}

View File

@@ -356,6 +356,36 @@ struct wlan_psoc_host_spectral_scaling_params {
uint32_t default_agc_max_gain;
};
#ifdef WLAN_RCC_ENHANCED_AOA_SUPPORT
/**
* struct wlan_psoc_host_rcc_enh_aoa_caps_ext2 - aoa capabilities
* @max_agc_gain_tbls: max number of AGC gain tables supported
* @max_agc_gain_per_tbl_2g: max AGC gain value per each table on 2GHz band.
* Each entry in max_agc_gain_per_table indicates
* max AGC gain value corresponding AGC gain table
* index.
* @max_agc_gain_per_tbl_5g: max AGC gain value per each table on 5GHz band.
* Each entry in max_agc_gain_per_table indicates
* max AGC gain value corresponding AGC gain table
* index.
* @max_agc_gain_per_tbl_6g: max AGC gain value per each table on 5GHz band.
* Each entry in max_agc_gain_per_table indicates
* max AGC gain value corresponding AGC gain table
* index.
* @max_bdf_entries_per_tbl: max entries in phase_array and gain_array per
* each gain table index. Each entry in this array
* indicates max entries used to store required data
* for corresponding AGC gain table index.
*/
struct wlan_psoc_host_rcc_enh_aoa_caps_ext2 {
uint32_t max_agc_gain_tbls;
uint16_t max_agc_gain_per_tbl_2g[PSOC_MAX_NUM_AGC_GAIN_TBLS];
uint16_t max_agc_gain_per_tbl_5g[PSOC_MAX_NUM_AGC_GAIN_TBLS];
uint16_t max_agc_gain_per_tbl_6g[PSOC_MAX_NUM_AGC_GAIN_TBLS];
uint8_t max_bdf_entries_per_tbl[PSOC_MAX_NUM_AGC_GAIN_TBLS];
};
#endif /* WLAN_RCC_ENHANCED_AOA_SUPPORT */
/**
* struct wlan_psoc_host_chainmask_capabilities - chain mask capabilities list
* @supports_chan_width_20: channel width 20 support for this chain mask.

View File

@@ -312,6 +312,33 @@ int init_deinit_populate_hal_reg_cap_ext2(wmi_unified_t handle, uint8_t *event,
int init_deinit_populate_mac_phy_cap_ext2(wmi_unified_t handle, uint8_t *event,
struct tgt_info *info);
/**
* init_deinit_populate_rcc_aoa_cap_ext2() - populate aoa capabilities from
* service ready ext2 event
* @psoc: PSOC object
* @handle: WMI handle pointer
* @event: event buffer received from FW
* @info: tgt_info object
*
* API to populate aoa capability from service ready ext2 event.
*
* Return: zero on successful population of aoa capability or failure
*/
int init_deinit_populate_rcc_aoa_cap_ext2(struct wlan_objmgr_psoc *psoc,
wmi_unified_t handle, uint8_t *event,
struct tgt_info *info);
/**
* init_deinit_rcc_aoa_cap_ext2_free() - free aoa capability
* @tgt_psoc_info: target psoc info object
*
* API to free aoa capability
*
* Return: QDF_STATUS
*/
QDF_STATUS init_deinit_rcc_aoa_cap_ext2_free(
struct target_psoc_info *tgt_psoc_info);
/**
* init_deinit_populate_scan_radio_cap_ext2() - populate scan radio capabilities
* from service ready ext2 event

View File

@@ -595,6 +595,15 @@ static int init_deinit_service_ext2_ready_event_handler(ol_scn_t scn_handle,
target_if_debug("failed to populate aux_dev cap ext2");
}
if (wmi_service_enabled(wmi_handle,
wmi_service_aoa_for_rcc_supported)) {
err_code = init_deinit_populate_rcc_aoa_cap_ext2(psoc,
wmi_handle,
event, info);
if (err_code)
target_if_debug("failed to populate aoa cap ext2");
}
legacy_callback = target_if_get_psoc_legacy_service_ready_cb();
if (legacy_callback)
if (legacy_callback(wmi_service_ready_ext2_event_id,

View File

@@ -562,6 +562,66 @@ exit:
}
#endif
#ifdef WLAN_RCC_ENHANCED_AOA_SUPPORT
int init_deinit_populate_rcc_aoa_cap_ext2(struct wlan_objmgr_psoc *psoc,
wmi_unified_t handle,
uint8_t *event,
struct tgt_info *info)
{
QDF_STATUS status = QDF_STATUS_E_FAILURE;
info->aoa_caps = qdf_mem_malloc(
sizeof(struct wlan_psoc_host_rcc_enh_aoa_caps_ext2));
if (!info->aoa_caps) {
target_if_err("Mem alloc for aoa cap failed");
return -EINVAL;
}
status = wmi_extract_aoa_caps_service_ready_ext2(
handle, event,
info->aoa_caps);
if (QDF_IS_STATUS_ERROR(status)) {
target_if_err("Extraction of aoa caps failed");
goto free_and_return;
}
return 0;
free_and_return:
qdf_mem_free(info->aoa_caps);
info->aoa_caps = NULL;
return qdf_status_to_os_return(status);
}
QDF_STATUS init_deinit_rcc_aoa_cap_ext2_free(
struct target_psoc_info *tgt_psoc_info)
{
qdf_mem_free(tgt_psoc_info->info.aoa_caps);
tgt_psoc_info->info.aoa_caps = NULL;
return QDF_STATUS_SUCCESS;
}
#else
int init_deinit_populate_rcc_aoa_cap_ext2(struct wlan_objmgr_psoc *psoc,
wmi_unified_t handle,
uint8_t *event,
struct tgt_info *info)
{
return 0;
}
QDF_STATUS init_deinit_rcc_aoa_cap_ext2_free(
struct target_psoc_info *tgt_psoc_info)
{
return QDF_STATUS_SUCCESS;
}
#endif /* WLAN_RCC_ENHANCED_AOA_SUPPORT */
qdf_export_symbol(init_deinit_rcc_aoa_cap_ext2_free);
int init_deinit_populate_dbs_or_sbs_cap_ext2(struct wlan_objmgr_psoc *psoc,
wmi_unified_t handle,
uint8_t *event,