On 27/09/2021 17:08, Pierre-Louis Bossart wrote:
+struct apm_sub_graph_params {
- struct apm_module_param_data param_data;
- uint32_t num_sub_graphs;
- struct apm_sub_graph_data sg_cfg[];
+} __packed;
The style you use is num_foobar and later foobar[]
+/* container config */ +struct apm_container_obj {
- struct apm_container_cfg container_cfg;
- /* Capability ID list */
- struct apm_prop_data cap_data;
- uint32_t num_capability_id;
- uint32_t capability_id;
but here you have both a num_capability_id and capability_id
It's not very clear what they mean, or if there is a dependency?
DSP supports multiple capabilities for a container, however for now this version of patches only support 1 capability for a container.
I will add multiple capabilities once am in a position to test it.
- /* Container graph Position */
- struct apm_prop_data pos_data;
- struct apm_cont_prop_id_graph_pos pos;
- /* Container Stack size */
- struct apm_prop_data stack_data;
- struct apm_cont_prop_id_stack_size stack;
- /* Container proc domain id */
- struct apm_prop_data domain_data;
- struct apm_cont_prop_id_domain domain;
+} __packed;
+/* Module IDs */ +#define MODULE_ID_WR_SHARED_MEM_EP 0x07001000 +#define MODULE_ID_RD_SHARED_MEM_EP 0x07001001 +#define MODULE_ID_GAIN 0x07001002 +#define MODULE_ID_PCM_CNV 0x07001003 +#define MODULE_ID_PCM_ENC 0x07001004 +#define MODULE_ID_PCM_DEC 0x07001005 +#define MODULE_ID_CODEC_DMA_SINK 0x07001023 +#define MODULE_ID_CODEC_DMA_SOURCE 0x07001024 +#define MODULE_ID_I2S_SINK 0x0700100A +#define MODULE_ID_I2S_SOURCE 0x0700100b +#define MODULE_ID_DATA_LOGGING 0x0700101A
+#define APM_CMD_GET_SPF_STATE 0x01001021 +#define APM_CMD_RSP_GET_SPF_STATE 0x02001007
+#define APM_MODULE_INSTANCE_ID 0x00000001 +#define PRM_MODULE_INSTANCE_ID 0x00000002 +#define AMDB_MODULE_INSTANCE_ID 0x00000003 +#define VCPM_MODULE_INSTANCE_ID 0x00000004 +#define AR_MODULE_INSTANCE_ID_START 0x00006000 +#define AR_MODULE_INSTANCE_ID_END 0x00007000 +#define AR_MODULE_DYNAMIC_INSTANCE_ID_START 0x00007000 +#define AR_MODULE_DYNAMIC_INSTANCE_ID_END 0x00008000 +#define AR_CONT_INSTANCE_ID_START 0x00005000 +#define AR_CONT_INSTANCE_ID_END 0x00006000 +#define AR_SG_INSTANCE_ID_START 0x00004000
+#define APM_CMD_GRAPH_OPEN 0x01001000 +#define APM_CMD_GRAPH_PREPARE 0x01001001 +#define APM_CMD_GRAPH_START 0x01001002 +#define APM_CMD_GRAPH_STOP 0x01001003 +#define APM_CMD_GRAPH_CLOSE 0x01001004 +#define APM_CMD_GRAPH_FLUSH 0x01001005 +#define APM_CMD_SET_CFG 0x01001006 +#define APM_CMD_GET_CFG 0x01001007 +#define APM_CMD_SHARED_MEM_MAP_REGIONS 0x0100100c +#define APM_CMD_SHARED_MEM_UNMAP_REGIONS 0x0100100d +#define APM_CMD_RSP_SHARED_MEM_MAP_REGIONS 0x02001001 +#define APM_CMD_RSP_GET_CFG 0x02001000 +#define APM_CMD_CLOSE_ALL 0x01001013 +#define APM_CMD_REGISTER_SHARED_CFG 0x0100100A
+/* APM module */ +#define APM_PARAM_ID_SUB_GRAPH_LIST 0x08001005
+#define APM_PARAM_ID_MODULE_LIST 0x08001002
+#define APM_PARAM_ID_MODULE_PROP 0x08001003
It seems like those definition follow a pattern, e.g. bits 28..32 a type and bits 0..15 a token?
Yes, it does have a pattern, each Opcode is divided in to 3 fields.
GUID OWNER 31:28 GUID Type 27:24 MAIN GUID 23:0
--srini