Skip to content

Commit

Permalink
Audio: basefw: Implement ipc4 modules info get
Browse files Browse the repository at this point in the history
Added support for ipc4 query no 9.
This make it possible to get information about the current loaded modules.

Signed-off-by: Grzegorz Bernat <grzegorzx.bernat@intel.com>
  • Loading branch information
gbernatxintel committed Apr 25, 2024
1 parent a5c0fa6 commit a625185
Show file tree
Hide file tree
Showing 4 changed files with 51 additions and 0 deletions.
7 changes: 7 additions & 0 deletions src/audio/base_fw.c
Original file line number Diff line number Diff line change
Expand Up @@ -334,6 +334,11 @@ static int basefw_libraries_info_get(uint32_t *data_offset, char *data)
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,
char *data,
uint32_t core_id)
Expand Down Expand Up @@ -461,7 +466,9 @@ static int basefw_get_large_config(struct comp_dev *dev,
/* TODO: add more support */
case IPC4_DSP_RESOURCE_STATE:
case IPC4_NOTIFICATION_MASK:
break;
case IPC4_MODULES_INFO_GET:
return basefw_modules_info_get(data_offset, data);
case IPC4_PIPELINE_PROPS_GET:
case IPC4_GATEWAYS_INFO_GET:
break;
Expand Down
9 changes: 9 additions & 0 deletions src/include/ipc4/base_fw_platform.h
Original file line number Diff line number Diff line change
Expand Up @@ -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);

/**
* \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.
* This function is called for parameters not handled by
Expand Down
28 changes: 28 additions & 0 deletions src/platform/intel/ace/lib/base_fw_platform.c
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,12 @@
#endif

#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);

Expand Down Expand Up @@ -72,6 +78,28 @@ struct sof_man_fw_desc *platform_base_fw_get_manifest(void)
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
* low power mode sram. This function retures memory size in page
* , memory bank power and usage status of each sram to host driver
Expand Down
7 changes: 7 additions & 0 deletions src/platform/posix/base_fw_platform.c
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,13 @@ struct sof_man_fw_desc *platform_base_fw_get_manifest(void)
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,
uint32_t param_id,
bool first_block,
Expand Down

0 comments on commit a625185

Please sign in to comment.