
+struct apm_sub_graph_params {
- struct apm_module_param_data param_data;
- uint32_t num_sub_graphs;
- struct apm_sub_graph_data sg_cfg[0];
I thought the use of zero-length arrays [0] was deprecated in favor of flexible arrays []?
+} __packed;
+#define APM_SUB_GRAPH_PSIZE(n) ALIGN(sizeof(struct apm_sub_graph_params) + \
n * sizeof(struct apm_sub_graph_data), 8)
+/* container config */ +struct apm_container_obj {
- struct apm_container_cfg container_cfg;
- /* Capability ID list */
- struct apm_prop_data cap_data;
- uint32_t num_capablity_id;
typo is still there.
- uint32_t capability_id;
- /* 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;
+struct apm_container_params {
- struct apm_module_param_data param_data;
- uint32_t num_containers;
- struct apm_container_obj cont_obj[0];
[]
+} __packed;
+#define APM_CONTAINER_PSIZE(n) ALIGN(sizeof(struct apm_container_params) + \
n * sizeof(struct apm_container_obj), 8)
+/* Module List config */ +struct apm_mod_list_obj {
- /* Modules list cfg */
- uint32_t sub_graph_id;
- uint32_t container_id;
- uint32_t num_modules;
- struct apm_module_obj mod_cfg[0];
[]
+} __packed;
+struct apm_module_list_params {
- struct apm_module_param_data param_data;
- uint32_t num_modules_list;
- /* Module list config array */
- struct apm_mod_list_obj mod_list_obj[0];
[]
+} __packed;
+#define APM_MOD_LIST_OBJ_PSIZE(m) (sizeof(struct apm_mod_list_obj) + \
m * sizeof(struct apm_module_obj))
+/* n modules list m mod per list */ +#define APM_MOD_LIST_PSIZE(n, m) ALIGN(sizeof(struct apm_module_list_params) + \
n * (sizeof(struct apm_mod_list_obj) + \
m * sizeof(struct apm_module_obj)), 8)
+/* Module Properties */ +struct apm_mod_prop_obj {
- u32 instance_id;
- u32 num_props;
- struct apm_prop_data prop_data_1;
- struct apm_module_prop_id_port_info prop_id_port;
+} __packed;
+struct apm_prop_list_params {
- struct apm_module_param_data param_data;
- u32 num_modules_prop_cfg;
- struct apm_mod_prop_obj mod_prop_obj[0];
[]
+} __packed;
+#define APM_MOD_PROP_PSIZE(n) ALIGN(sizeof(struct apm_prop_list_params) + \
n * sizeof(struct apm_mod_prop_obj), 8)
+/* Module Connections */ +struct apm_mod_conn_list_params {
- struct apm_module_param_data param_data;
- u32 num_connections;
- struct apm_module_conn_obj conn_obj[0];
[]
+} __packed;
[...]
+//Shared memory module
/* Shared memory module */ ?
+#define DATA_CMD_WR_SH_MEM_EP_DATA_BUFFER 0x04001000 +#define WR_SH_MEM_EP_TIMESTAMP_VALID_FLAG BIT(31) +#define WR_SH_MEM_EP_LAST_BUFFER_FLAG BIT(30) +#define WR_SH_MEM_EP_TS_CONTINUE_FLAG BIT(29) +#define WR_SH_MEM_EP_EOF_FLAG BIT(4) +struct apm_data_cmd_wr_sh_mem_ep_data_buffer {
- uint32_t buf_addr_lsw;
- uint32_t buf_addr_msw;
- uint32_t mem_map_handle;
- uint32_t buf_size;
- uint32_t timestamp_lsw;
- uint32_t timestamp_msw;
- uint32_t flags;
+} __packed;
+#define DATA_CMD_WR_SH_MEM_EP_DATA_BUFFER_V2 0x0400100A
newline after define?
+struct apm_data_cmd_wr_sh_mem_ep_data_buffer_v2 {
- uint32_t buf_addr_lsw;
- uint32_t buf_addr_msw;
- uint32_t mem_map_handle;
- uint32_t buf_size;
- uint32_t timestamp_lsw;
- uint32_t timestamp_msw;
- uint32_t flags;
- uint32_t md_addr_lsw;
- uint32_t md_addr_msw;
- uint32_t md_map_handle;
- uint32_t md_buf_size;
+} __packed;
+#define DATA_CMD_RSP_WR_SH_MEM_EP_DATA_BUFFER_DONE 0x05001000
newline?
+struct data_cmd_rsp_wr_sh_mem_ep_data_buffer_done {
- uint32_t buf_addr_lsw;
- uint32_t buf_addr_msw;
- uint32_t mem_map_handle;
- uint32_t status;
+} __packed;
+#define DATA_CMD_RSP_WR_SH_MEM_EP_DATA_BUFFER_DONE_V2 0x05001004
newline?
+struct data_cmd_rsp_wr_sh_mem_ep_data_buffer_done_v2 {
- uint32_t buf_addr_lsw;
- uint32_t buf_addr_msw;
- uint32_t mem_map_handle;
- uint32_t status;
- uint32_t md_buf_addr_lsw;
- uint32_t md_buf_addr_msw;
- uint32_t md_mem_map_handle;
- uint32_t md_status;
+} __packed;
+#define PARAM_ID_MEDIA_FORMAT 0x0800100C +#define DATA_CMD_WR_SH_MEM_EP_MEDIA_FORMAT 0x04001001
newline?
+struct apm_media_format {
- uint32_t data_format;
- uint32_t fmt_id;
- uint32_t payload_size;
+} __packed;
+#define DATA_CMD_WR_SH_MEM_EP_EOS 0x04001002 +#define WR_SH_MEM_EP_EOS_POLICY_LAST 1 +#define WR_SH_MEM_EP_EOS_POLICY_EACH 2
+struct data_cmd_wr_sh_mem_ep_eos {
- uint32_t policy;
+} __packed;
+#define DATA_CMD_RD_SH_MEM_EP_DATA_BUFFER 0x04001003
newline?
+struct data_cmd_rd_sh_mem_ep_data_buffer {
- uint32_t buf_addr_lsw;
- uint32_t buf_addr_msw;
- uint32_t mem_map_handle;
- uint32_t buf_size;
+};
+#define DATA_CMD_RSP_RD_SH_MEM_EP_DATA_BUFFER 0x05001002
newline?
+struct data_cmd_rsp_rd_sh_mem_ep_data_buffer_done {
- uint32_t status;
- uint32_t buf_addr_lsw;
- uint32_t buf_addr_msw;
- uint32_t mem_map_handle;
- uint32_t data_size;
- uint32_t offset;
- uint32_t timestamp_lsw;
- uint32_t timestamp_msw;
- uint32_t flags;
- uint32_t num_frames;
+};
+#define DATA_CMD_RD_SH_MEM_EP_DATA_BUFFER_V2 0x0400100B
newline ?
+struct data_cmd_rd_sh_mem_ep_data_buffer_v2 {
- uint32_t buf_addr_lsw;
- uint32_t buf_addr_msw;
- uint32_t mem_map_handle;
- uint32_t buf_size;
- uint32_t md_buf_addr_lsw;
- uint32_t md_buf_addr_msw;
- uint32_t md_mem_map_handle;
- uint32_t md_buf_size;
+};
+#define DATA_CMD_RSP_RD_SH_MEM_EP_DATA_BUFFER_V2 0x05001005
newline?
+struct data_cmd_rsp_rd_sh_mem_ep_data_buffer_done_v2 {
- uint32_t status;
- uint32_t buf_addr_lsw;
- uint32_t buf_addr_msw;
- uint32_t mem_map_handle;
- uint32_t data_size;
- uint32_t offset;
- uint32_t timestamp_lsw;
- uint32_t timestamp_msw;
- uint32_t flags;
- uint32_t num_frames;
- uint32_t md_status;
- uint32_t md_buf_addr_lsw;
- uint32_t md_buf_addr_msw;
- uint32_t md_mem_map_handle;
- uint32_t md_size;
+} __packed;
+#define PARAM_ID_RD_SH_MEM_CFG 0x08001007
newline?
+struct param_id_rd_sh_mem_cfg {
- uint32_t num_frames_per_buffer;
- uint32_t metadata_control_flags;
+} __packed;
newline?
+#define DATA_CMD_WR_SH_MEM_EP_EOS_RENDERED 0x05001001
newline?
+struct data_cmd_wr_sh_mem_ep_eos_rendered {
- uint32_t module_instance_id;
- uint32_t render_status;
+} __packed;
+#define MODULE_ID_WR_SHARED_MEM_EP 0x07001000
+struct apm_cmd_header {
- uint32_t payload_address_lsw;
- uint32_t payload_address_msw;
- uint32_t mem_map_handle;
- uint32_t payload_size;
+} __packed;
+#define APM_CMD_HDR_SIZE sizeof(struct apm_cmd_header)
+struct apm_module_param_data {
- uint32_t module_instance_id;
- uint32_t param_id;
- uint32_t param_size;
- uint32_t error_code;
+} __packed;
+#define APM_MODULE_PARAM_DATA_SIZE sizeof(struct apm_module_param_data)
newline?
+struct apm_module_param_shared_data {
- uint32_t param_id;
- uint32_t param_size;
+} __packed;
+struct apm_prop_data {
- uint32_t prop_id;
- uint32_t prop_size;
+} __packed;
+/* Sub-Graph Properties */ +#define APM_PARAM_ID_SUB_GRAPH_CONFIG 0x08001001
+struct apm_param_id_sub_graph_cfg {
- uint32_t num_sub_graphs;
+} __packed;
+struct apm_sub_graph_cfg {
- uint32_t sub_graph_id;
- uint32_t num_sub_graph_prop;
+} __packed;
+#define APM_SUB_GRAPH_PROP_ID_PERF_MODE 0x0800100E
+struct apm_sg_prop_id_perf_mode {
- uint32_t perf_mode;
+} __packed;
+#define APM_SG_PROP_ID_PERF_MODE_SIZE 4
+#define APM_SUB_GRAPH_PROP_ID_DIRECTION 0x0800100F
+struct apm_sg_prop_id_direction {
- uint32_t direction;
+} __packed;
+#define APM_SG_PROP_ID_DIR_SIZE 4
+#define APM_SUB_GRAPH_PROP_ID_SCENARIO_ID 0x08001010 +#define APM_SUB_GRAPH_SID_AUDIO_PLAYBACK 0x1 +#define APM_SUB_GRAPH_SID_AUDIO_RECORD 0x2 +#define APM_SUB_GRAPH_SID_AUDIO_VOICE_CALL 0x3
+struct apm_sg_prop_id_scenario_id {
- uint32_t scenario_id;
+} __packed;
+#define APM_SG_PROP_ID_SID_SIZE 4 +//container api +#define APM_PARAM_ID_CONTAINER_CONFIG 0x08001000
newline and /* */
+struct apm_param_id_container_cfg {
- uint32_t num_containers;
+} __packed;
+struct apm_container_cfg {
- uint32_t container_id;
- uint32_t num_prop;
+} __packed;
+struct apm_cont_capablity {
- uint32_t capability_id;
+} __packed;
+#define APM_CONTAINER_PROP_ID_CAPABILITY_LIST 0x08001011 +#define APM_CONTAINER_PROP_ID_CAPABILITY_SIZE 8
+#define APM_PROP_ID_INVALID 0x0 +#define APM_CONTAINER_CAP_ID_PP 0x1 +#define APM_CONTAINER_CAP_ID_PP 0x1
+struct apm_cont_prop_id_cap_list {
- uint32_t num_capablity_id;
+} __packed;
+#define APM_CONTAINER_PROP_ID_GRAPH_POS 0x08001012
+struct apm_cont_prop_id_graph_pos {
- uint32_t graph_pos;
+} __packed;
+#define APM_CONTAINER_PROP_ID_STACK_SIZE 0x08001013
newline?
+struct apm_cont_prop_id_stack_size {
- uint32_t stack_size;
+} __packed; +> +#define APM_CONTAINER_PROP_ID_PROC_DOMAIN 0x08001014
newline?
+struct apm_cont_prop_id_domain {
- uint32_t proc_domain;
+} __packed;
+#define CONFIG_I2S_WS_SRC_EXTERNAL 0x0 +#define CONFIG_I2S_WS_SRC_INTERNAL 0x1
+#define PARAM_ID_I2S_INTF_CFG 0x08001019 +struct param_id_i2s_intf_cfg {
- uint32_t lpaif_type;
- uint32_t intf_idx;
- uint16_t sd_line_idx;
- uint16_t ws_src;
+} __packed;
+#define I2S_INTF_TYPE_PRIMARY 0 +#define I2S_INTF_TYPE_SECOINDARY 1 +#define I2S_INTF_TYPE_TERTINARY 2 +#define I2S_INTF_TYPE_QUATERNARY 3 +#define I2S_INTF_TYPE_QUINARY 4 +#define I2S_SD0 1 +#define I2S_SD1 2 +#define I2S_SD2 3 +#define I2S_SD3 4
+#define PORT_ID_I2S_INPUT 2 +#define PORT_ID_I2S_OUPUT 1 +#define I2S_STACK_SIZE 2048
+#define PARAM_ID_HW_EP_MF_CFG 0x08001017 +struct param_id_hw_ep_mf {
- uint32_t sample_rate;
- uint16_t bit_width;
- uint16_t num_channels;
- uint32_t data_format;
+} __packed;
+#define PARAM_ID_HW_EP_FRAME_SIZE_FACTOR 0x08001018
+struct param_id_fram_size_factor {
- uint32_t frame_size_factor;
+} __packed;
+#define APM_CONTAINER_PROP_ID_PARENT_CONTAINER_ID 0x080010CB
newline?
+struct apm_cont_prop_id_parent_container {
- uint32_t parent_container_id;
+} __packed;
+#define APM_CONTAINER_PROP_ID_HEAP_ID 0x08001174 +#define APM_CONT_HEAP_DEFAULT 0x1 +#define APM_CONT_HEAP_LOW_POWER 0x2
newline?
+struct apm_cont_prop_id_headp_id {
- uint32_t heap_id;
+} __packed;
+struct apm_modules_list {
- uint32_t sub_graph_id;
- uint32_t container_id;
- uint32_t num_modules;
+} __packed;
+struct apm_module_obj {
- uint32_t module_id;
- uint32_t instance_id;
+} __packed;
+#define APM_MODULE_PROP_ID_PORT_INFO 0x08001015 +#define APM_MODULE_PROP_ID_PORT_INFO_SZ 8
newline?
+struct apm_module_prop_id_port_info {
- uint32_t max_ip_port;
- uint32_t max_op_port;
+} __packed;
+#define DATA_LOGGING_MAX_INPUT_PORTS 0x1 +#define DATA_LOGGING_MAX_OUTPUT_PORTS 0x1 +#define DATA_LOGGING_STACK_SIZE 2048 +#define PARAM_ID_DATA_LOGGING_CONFIG 0x08001031
newline?
+struct data_logging_config {
- uint32_t log_code;
- uint32_t log_tap_point_id;
- uint32_t mode;
+} __packed;
+#define PARAM_ID_MFC_OUTPUT_MEDIA_FORMAT 0x08001024
newline?
+struct param_id_mfc_media_format {
- uint32_t sample_rate;
- uint16_t bit_width;
- uint16_t num_channels;
- uint16_t channel_mapping[];
+} __packed;
+struct media_format {
- uint32_t data_format;
- uint32_t fmt_id;
- uint32_t payload_size;
+} __packed;
+struct payload_media_fmt_pcm {
- uint32_t sample_rate;
- uint16_t bit_width;
- uint16_t alignment;
- uint16_t bits_per_sample;
- uint16_t q_factor;
- uint16_t endianness;
- uint16_t num_channels;
- uint8_t channel_mapping[];
+} __packed;
+#define PARAM_ID_CODEC_DMA_INTF_CFG 0x08001063
newline?
+struct param_id_codec_dma_intf_cfg {
- /* 1 - RXTX
* 2 - WSA
* 3 - VA
* 4 - AXI
*/
- uint32_t lpaif_type;
- /*
* RX0 | TX0 = 1
* RX1 | TX1 = 2
* RX2 | TX2 = 3... so on
*/
- uint32_t intf_index;
- uint32_t active_channels_mask;
+} __packed;
+struct audio_hw_clk_cfg {
- uint32_t clock_id;
- uint32_t clock_freq;
- uint32_t clock_attri;
- uint32_t clock_root;
+} __packed;
+#define PARAM_ID_HW_EP_POWER_MODE_CFG 0x8001176 +#define POWER_MODE_0 0 /* default */ +#define POWER_MODE_1 1 /* XO Shutdown allowed */ +#define POWER_MODE_2 2 /* XO Shutdown not allowed */
newline?
Likely prefix needed as well, 'POWER_MODE' is not exactly unique/conflict free.
+struct param_id_hw_ep_power_mode_cfg {
- uint32_t power_mode;
+} __packed;
+#define PARAM_ID_HW_EP_DMA_DATA_ALIGN 0x08001233 +#define DMA_DATA_ALIGN_MSB 0 +#define DMA_DATA_ALIGN_LSB 1
+#define PCM_MAX_NUM_CHANNEL 8
newline and prefix?
+struct param_id_hw_ep_dma_data_align {
- uint32_t dma_data_align;
+} __packed;
+/* Graph */ +struct audioreach_connection {
- /* Connections */
- uint32_t src_mod_inst_id;
- uint32_t src_mod_op_port_id;
- uint32_t dst_mod_inst_id;
- uint32_t dst_mod_ip_port_id;
- struct list_head node;
+};
+struct audioreach_graph_info {
- int id;
- uint32_t num_sub_graphs;
- struct list_head sg_list;
- struct list_head connection_list;
- spinlock_t sg_list_lock;
+};
+struct audioreach_sub_graph {
- uint32_t sub_graph_id;
- uint32_t perf_mode;
- uint32_t direction;
- uint32_t scenario_id;
- struct list_head node;
- struct audioreach_graph_info *info;
- uint32_t num_containers;
- struct list_head container_list;
+};
+struct audioreach_container {
- uint32_t container_id;
- uint32_t capability_id;
- uint32_t graph_pos;
- uint32_t stack_size;
- uint32_t proc_domain;
- struct list_head node;
- uint32_t num_modules;
- struct list_head modules_list;
- struct audioreach_sub_graph *sub_graph;
+};
+struct audioreach_module {
- uint32_t module_id;
- uint32_t instance_id;
- uint32_t max_ip_port;
- uint32_t max_op_port;
- uint32_t in_port;
- uint32_t out_port;
- /* Connections */
- uint32_t src_mod_inst_id;
- uint32_t src_mod_op_port_id;
- uint32_t dst_mod_inst_id;
- uint32_t dst_mod_ip_port_id;
- /* Format specifics */
- uint32_t ch_fmt;
- uint32_t rate;
- uint32_t bit_depth;
- /* I2S module */
- uint32_t hw_interface_idx;
- uint32_t sd_line_idx;
- uint32_t ws_src;
- uint32_t frame_size_factor;
- uint32_t data_format;
- uint32_t hw_interface_type;
- /* PCM module specific */
- uint32_t interleave_type;
- /* GAIN/Vol Control Module */
- uint16_t gain;
newline for consistency?
- /* Logging */
- uint32_t log_code;
- uint32_t log_tap_point_id;
- uint32_t mode;
probably not related to logging, comment missing?
- struct list_head node;
- struct audioreach_container *container;
- struct snd_soc_dapm_widget *widget;
+};
+/* Packet Allocation routines */ +void *audioreach_alloc_apm_cmd_pkt(int pkt_size, uint32_t opcode, uint32_t
token);
+void *audioreach_alloc_cmd_pkt(int payload_size, uint32_t opcode,
uint32_t token, uint32_t src_port,
uint32_t dest_port);
+void *audioreach_alloc_apm_pkt(int pkt_size, uint32_t opcode, uint32_t token,
uint32_t src_port);
+void *audioreach_alloc_pkt(int payload_size, uint32_t opcode,
uint32_t token, uint32_t src_port,
uint32_t dest_port);
+#endif /* __AUDIOREACH_H__ */