mirror of https://github.com/thesofproject/sof.git
Audio: basefw: Implement ipc4 modules info get
Add support to handle IPC4_MODULES_INFO_GET message. This make it possible to get information about the current loaded modules. Signed-off-by: Grzegorz Bernat <grzegorzx.bernat@intel.com>
This commit is contained in:
parent
d7681434e9
commit
25423f5b6b
|
@ -334,6 +334,11 @@ static int basefw_libraries_info_get(uint32_t *data_offset, char *data)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int basefw_modules_info_get(uint32_t *data_offset, char *data)
|
||||||
|
{
|
||||||
|
return platform_basefw_modules_info_get(data_offset, data);
|
||||||
|
}
|
||||||
|
|
||||||
int schedulers_info_get(uint32_t *data_off_size,
|
int schedulers_info_get(uint32_t *data_off_size,
|
||||||
char *data,
|
char *data,
|
||||||
uint32_t core_id)
|
uint32_t core_id)
|
||||||
|
@ -458,15 +463,15 @@ static int basefw_get_large_config(struct comp_dev *dev,
|
||||||
extended_param_id.part.parameter_instance);
|
extended_param_id.part.parameter_instance);
|
||||||
case IPC4_PIPELINE_LIST_INFO_GET:
|
case IPC4_PIPELINE_LIST_INFO_GET:
|
||||||
return basefw_pipeline_list_info_get(data_offset, data);
|
return basefw_pipeline_list_info_get(data_offset, data);
|
||||||
|
case IPC4_MODULES_INFO_GET:
|
||||||
|
return basefw_modules_info_get(data_offset, data);
|
||||||
|
case IPC4_LIBRARIES_INFO_GET:
|
||||||
|
return basefw_libraries_info_get(data_offset, data);
|
||||||
/* TODO: add more support */
|
/* TODO: add more support */
|
||||||
case IPC4_DSP_RESOURCE_STATE:
|
case IPC4_DSP_RESOURCE_STATE:
|
||||||
case IPC4_NOTIFICATION_MASK:
|
case IPC4_NOTIFICATION_MASK:
|
||||||
case IPC4_MODULES_INFO_GET:
|
|
||||||
case IPC4_PIPELINE_PROPS_GET:
|
case IPC4_PIPELINE_PROPS_GET:
|
||||||
case IPC4_GATEWAYS_INFO_GET:
|
case IPC4_GATEWAYS_INFO_GET:
|
||||||
break;
|
|
||||||
case IPC4_LIBRARIES_INFO_GET:
|
|
||||||
return basefw_libraries_info_get(data_offset, data);
|
|
||||||
case IPC4_PERF_MEASUREMENTS_STATE:
|
case IPC4_PERF_MEASUREMENTS_STATE:
|
||||||
case IPC4_GLOBAL_PERF_DATA:
|
case IPC4_GLOBAL_PERF_DATA:
|
||||||
COMPILER_FALLTHROUGH;
|
COMPILER_FALLTHROUGH;
|
||||||
|
|
|
@ -44,6 +44,15 @@ int platform_basefw_hw_config(uint32_t *data_offset, char *data);
|
||||||
*/
|
*/
|
||||||
struct sof_man_fw_desc *platform_base_fw_get_manifest(void);
|
struct sof_man_fw_desc *platform_base_fw_get_manifest(void);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* \brief Platform specific routine to get information about modules.
|
||||||
|
* Function add information and sent to host via IPC.
|
||||||
|
* \param[out] data_offset data offset after structure added
|
||||||
|
* \param[in] data pointer where to add new entries
|
||||||
|
* \return 0 if successful, error code otherwise.
|
||||||
|
*/
|
||||||
|
int platform_basefw_modules_info_get(uint32_t *data_offset, char *data);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* \brief Implement platform specific parameter for basefw module.
|
* \brief Implement platform specific parameter for basefw module.
|
||||||
* This function is called for parameters not handled by
|
* This function is called for parameters not handled by
|
||||||
|
|
|
@ -20,6 +20,12 @@
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include <ipc4/base_fw.h>
|
#include <ipc4/base_fw.h>
|
||||||
|
#include <rimage/sof/user/manifest.h>
|
||||||
|
|
||||||
|
struct ipc4_modules_info {
|
||||||
|
uint32_t modules_count;
|
||||||
|
struct sof_man_module modules[0];
|
||||||
|
} __packed __aligned(4);
|
||||||
|
|
||||||
LOG_MODULE_REGISTER(basefw_platform, CONFIG_SOF_LOG_LEVEL);
|
LOG_MODULE_REGISTER(basefw_platform, CONFIG_SOF_LOG_LEVEL);
|
||||||
|
|
||||||
|
@ -72,6 +78,28 @@ struct sof_man_fw_desc *platform_base_fw_get_manifest(void)
|
||||||
return desc;
|
return desc;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int platform_basefw_modules_info_get(uint32_t *data_offset, char *data)
|
||||||
|
{
|
||||||
|
struct ipc4_modules_info *const module_info = (struct ipc4_modules_info *)data;
|
||||||
|
struct sof_man_fw_desc *desc = platform_base_fw_get_manifest();
|
||||||
|
|
||||||
|
if (!desc)
|
||||||
|
return -EINVAL;
|
||||||
|
|
||||||
|
module_info->modules_count = desc->header.num_module_entries;
|
||||||
|
|
||||||
|
for (int idx = 0; idx < module_info->modules_count; ++idx) {
|
||||||
|
struct sof_man_module *module_entry =
|
||||||
|
(struct sof_man_module *)((char *)desc + SOF_MAN_MODULE_OFFSET(idx));
|
||||||
|
memcpy_s(&module_info->modules[idx], sizeof(module_info->modules[idx]),
|
||||||
|
module_entry, sizeof(struct sof_man_module));
|
||||||
|
}
|
||||||
|
|
||||||
|
*data_offset = sizeof(*module_info) +
|
||||||
|
module_info->modules_count * sizeof(module_info->modules[0]);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
/* There are two types of sram memory : high power mode sram and
|
/* There are two types of sram memory : high power mode sram and
|
||||||
* low power mode sram. This function retures memory size in page
|
* low power mode sram. This function retures memory size in page
|
||||||
* , memory bank power and usage status of each sram to host driver
|
* , memory bank power and usage status of each sram to host driver
|
||||||
|
|
|
@ -30,6 +30,13 @@ struct sof_man_fw_desc *platform_base_fw_get_manifest(void)
|
||||||
return desc;
|
return desc;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int platform_basefw_modules_info_get(uint32_t *data_offset, char *data)
|
||||||
|
{
|
||||||
|
*data_offset = 0;
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
int platform_basefw_get_large_config(struct comp_dev *dev,
|
int platform_basefw_get_large_config(struct comp_dev *dev,
|
||||||
uint32_t param_id,
|
uint32_t param_id,
|
||||||
bool first_block,
|
bool first_block,
|
||||||
|
|
Loading…
Reference in New Issue