xref: /linux/sound/soc/qcom/qdsp6/audioreach.h (revision c771600c6af14749609b49565ffb4cac2959710d)
144c28dbdSSrinivas Kandagatla /* SPDX-License-Identifier: GPL-2.0 */
244c28dbdSSrinivas Kandagatla 
344c28dbdSSrinivas Kandagatla #ifndef __AUDIOREACH_H__
444c28dbdSSrinivas Kandagatla #define __AUDIOREACH_H__
544c28dbdSSrinivas Kandagatla #include <linux/types.h>
644c28dbdSSrinivas Kandagatla #include <linux/soc/qcom/apr.h>
744c28dbdSSrinivas Kandagatla #include <sound/soc.h>
85477518bSSrinivas Kandagatla struct q6apm;
95477518bSSrinivas Kandagatla struct q6apm_graph;
1044c28dbdSSrinivas Kandagatla 
1144c28dbdSSrinivas Kandagatla /* Module IDs */
1244c28dbdSSrinivas Kandagatla #define MODULE_ID_WR_SHARED_MEM_EP	0x07001000
1344c28dbdSSrinivas Kandagatla #define MODULE_ID_RD_SHARED_MEM_EP	0x07001001
1444c28dbdSSrinivas Kandagatla #define MODULE_ID_GAIN			0x07001002
1544c28dbdSSrinivas Kandagatla #define MODULE_ID_PCM_CNV		0x07001003
1644c28dbdSSrinivas Kandagatla #define MODULE_ID_PCM_ENC		0x07001004
1744c28dbdSSrinivas Kandagatla #define MODULE_ID_PCM_DEC		0x07001005
18c7548f59SSrinivas Kandagatla #define MODULE_ID_PLACEHOLDER_ENCODER	0x07001008
19c7548f59SSrinivas Kandagatla #define MODULE_ID_PLACEHOLDER_DECODER	0x07001009
20a934afdbSSrinivas Kandagatla #define MODULE_ID_SAL			0x07001010
21cf0de67dSSrinivas Kandagatla #define MODULE_ID_MFC			0x07001015
2244c28dbdSSrinivas Kandagatla #define MODULE_ID_CODEC_DMA_SINK	0x07001023
2344c28dbdSSrinivas Kandagatla #define MODULE_ID_CODEC_DMA_SOURCE	0x07001024
2444c28dbdSSrinivas Kandagatla #define MODULE_ID_I2S_SINK		0x0700100A
2544c28dbdSSrinivas Kandagatla #define MODULE_ID_I2S_SOURCE		0x0700100B
2644c28dbdSSrinivas Kandagatla #define MODULE_ID_DATA_LOGGING		0x0700101A
27c7548f59SSrinivas Kandagatla #define MODULE_ID_AAC_DEC		0x0700101F
28c7548f59SSrinivas Kandagatla #define MODULE_ID_FLAC_DEC		0x0700102F
29c7548f59SSrinivas Kandagatla #define MODULE_ID_MP3_DECODE		0x0700103B
302c954a37SMohammad Rafi Shaik #define MODULE_ID_GAPLESS		0x0700104D
31a8ab6541SSrinivas Kandagatla #define MODULE_ID_DISPLAY_PORT_SINK	0x07001069
3244c28dbdSSrinivas Kandagatla 
3344c28dbdSSrinivas Kandagatla #define APM_CMD_GET_SPF_STATE		0x01001021
3444c28dbdSSrinivas Kandagatla #define APM_CMD_RSP_GET_SPF_STATE	0x02001007
3544c28dbdSSrinivas Kandagatla 
3644c28dbdSSrinivas Kandagatla #define APM_MODULE_INSTANCE_ID		0x00000001
3744c28dbdSSrinivas Kandagatla #define PRM_MODULE_INSTANCE_ID		0x00000002
3844c28dbdSSrinivas Kandagatla #define AMDB_MODULE_INSTANCE_ID		0x00000003
3944c28dbdSSrinivas Kandagatla #define VCPM_MODULE_INSTANCE_ID		0x00000004
4044c28dbdSSrinivas Kandagatla #define AR_MODULE_INSTANCE_ID_START	0x00006000
4144c28dbdSSrinivas Kandagatla #define AR_MODULE_INSTANCE_ID_END	0x00007000
4244c28dbdSSrinivas Kandagatla #define AR_MODULE_DYNAMIC_INSTANCE_ID_START	0x00007000
4344c28dbdSSrinivas Kandagatla #define AR_MODULE_DYNAMIC_INSTANCE_ID_END	0x00008000
4444c28dbdSSrinivas Kandagatla #define AR_CONT_INSTANCE_ID_START	0x00005000
4544c28dbdSSrinivas Kandagatla #define AR_CONT_INSTANCE_ID_END		0x00006000
4644c28dbdSSrinivas Kandagatla #define AR_SG_INSTANCE_ID_START		0x00004000
4744c28dbdSSrinivas Kandagatla 
4844c28dbdSSrinivas Kandagatla #define APM_CMD_GRAPH_OPEN			0x01001000
4944c28dbdSSrinivas Kandagatla #define APM_CMD_GRAPH_PREPARE			0x01001001
5044c28dbdSSrinivas Kandagatla #define APM_CMD_GRAPH_START			0x01001002
5144c28dbdSSrinivas Kandagatla #define APM_CMD_GRAPH_STOP			0x01001003
5244c28dbdSSrinivas Kandagatla #define APM_CMD_GRAPH_CLOSE			0x01001004
5344c28dbdSSrinivas Kandagatla #define APM_CMD_GRAPH_FLUSH			0x01001005
5444c28dbdSSrinivas Kandagatla #define APM_CMD_SET_CFG				0x01001006
5544c28dbdSSrinivas Kandagatla #define APM_CMD_GET_CFG				0x01001007
5644c28dbdSSrinivas Kandagatla #define APM_CMD_SHARED_MEM_MAP_REGIONS		0x0100100C
5744c28dbdSSrinivas Kandagatla #define APM_CMD_SHARED_MEM_UNMAP_REGIONS	0x0100100D
5844c28dbdSSrinivas Kandagatla #define APM_CMD_RSP_SHARED_MEM_MAP_REGIONS	0x02001001
5944c28dbdSSrinivas Kandagatla #define APM_CMD_RSP_GET_CFG			0x02001000
6044c28dbdSSrinivas Kandagatla #define APM_CMD_CLOSE_ALL			0x01001013
6144c28dbdSSrinivas Kandagatla #define APM_CMD_REGISTER_SHARED_CFG		0x0100100A
6244c28dbdSSrinivas Kandagatla 
6344c28dbdSSrinivas Kandagatla #define APM_MEMORY_MAP_SHMEM8_4K_POOL		3
6444c28dbdSSrinivas Kandagatla 
6544c28dbdSSrinivas Kandagatla struct apm_cmd_shared_mem_map_regions {
6644c28dbdSSrinivas Kandagatla 	uint16_t mem_pool_id;
6744c28dbdSSrinivas Kandagatla 	uint16_t num_regions;
6844c28dbdSSrinivas Kandagatla 	uint32_t property_flag;
6944c28dbdSSrinivas Kandagatla } __packed;
7044c28dbdSSrinivas Kandagatla 
7144c28dbdSSrinivas Kandagatla struct apm_shared_map_region_payload {
7244c28dbdSSrinivas Kandagatla 	uint32_t shm_addr_lsw;
7344c28dbdSSrinivas Kandagatla 	uint32_t shm_addr_msw;
7444c28dbdSSrinivas Kandagatla 	uint32_t mem_size_bytes;
7544c28dbdSSrinivas Kandagatla } __packed;
7644c28dbdSSrinivas Kandagatla 
7744c28dbdSSrinivas Kandagatla struct apm_cmd_shared_mem_unmap_regions {
7844c28dbdSSrinivas Kandagatla 	uint32_t mem_map_handle;
7944c28dbdSSrinivas Kandagatla } __packed;
8044c28dbdSSrinivas Kandagatla 
8144c28dbdSSrinivas Kandagatla struct apm_cmd_rsp_shared_mem_map_regions {
8244c28dbdSSrinivas Kandagatla 	uint32_t mem_map_handle;
8344c28dbdSSrinivas Kandagatla } __packed;
8444c28dbdSSrinivas Kandagatla 
8544c28dbdSSrinivas Kandagatla /* APM module */
8644c28dbdSSrinivas Kandagatla #define APM_PARAM_ID_SUB_GRAPH_LIST		0x08001005
8744c28dbdSSrinivas Kandagatla 
8844c28dbdSSrinivas Kandagatla #define APM_PARAM_ID_MODULE_LIST		0x08001002
8944c28dbdSSrinivas Kandagatla 
9044c28dbdSSrinivas Kandagatla struct apm_param_id_modules_list {
9144c28dbdSSrinivas Kandagatla 	uint32_t num_modules_list;
9244c28dbdSSrinivas Kandagatla } __packed;
9344c28dbdSSrinivas Kandagatla 
9444c28dbdSSrinivas Kandagatla #define APM_PARAM_ID_MODULE_PROP		0x08001003
9544c28dbdSSrinivas Kandagatla 
9644c28dbdSSrinivas Kandagatla struct apm_param_id_module_prop {
9744c28dbdSSrinivas Kandagatla 	uint32_t num_modules_prop_cfg;
9844c28dbdSSrinivas Kandagatla } __packed;
9944c28dbdSSrinivas Kandagatla 
10044c28dbdSSrinivas Kandagatla struct apm_module_prop_cfg {
10144c28dbdSSrinivas Kandagatla 	uint32_t instance_id;
10244c28dbdSSrinivas Kandagatla 	uint32_t num_props;
10344c28dbdSSrinivas Kandagatla } __packed;
10444c28dbdSSrinivas Kandagatla 
10544c28dbdSSrinivas Kandagatla #define APM_PARAM_ID_MODULE_CONN		0x08001004
10644c28dbdSSrinivas Kandagatla 
10744c28dbdSSrinivas Kandagatla struct apm_param_id_module_conn {
10844c28dbdSSrinivas Kandagatla 	uint32_t num_connections;
10944c28dbdSSrinivas Kandagatla } __packed;
11044c28dbdSSrinivas Kandagatla 
11144c28dbdSSrinivas Kandagatla struct apm_module_conn_obj {
11244c28dbdSSrinivas Kandagatla 	uint32_t src_mod_inst_id;
11344c28dbdSSrinivas Kandagatla 	uint32_t src_mod_op_port_id;
11444c28dbdSSrinivas Kandagatla 	uint32_t dst_mod_inst_id;
11544c28dbdSSrinivas Kandagatla 	uint32_t dst_mod_ip_port_id;
11644c28dbdSSrinivas Kandagatla } __packed;
11744c28dbdSSrinivas Kandagatla 
11844c28dbdSSrinivas Kandagatla #define APM_PARAM_ID_GAIN			0x08001006
11944c28dbdSSrinivas Kandagatla 
12044c28dbdSSrinivas Kandagatla struct param_id_gain_cfg {
12144c28dbdSSrinivas Kandagatla 	uint16_t gain;
12244c28dbdSSrinivas Kandagatla 	uint16_t reserved;
12344c28dbdSSrinivas Kandagatla } __packed;
12444c28dbdSSrinivas Kandagatla 
12544c28dbdSSrinivas Kandagatla #define PARAM_ID_PCM_OUTPUT_FORMAT_CFG		0x08001008
12644c28dbdSSrinivas Kandagatla 
12744c28dbdSSrinivas Kandagatla struct param_id_pcm_output_format_cfg {
12844c28dbdSSrinivas Kandagatla 	uint32_t data_format;
12944c28dbdSSrinivas Kandagatla 	uint32_t fmt_id;
13044c28dbdSSrinivas Kandagatla 	uint32_t payload_size;
13144c28dbdSSrinivas Kandagatla } __packed;
13244c28dbdSSrinivas Kandagatla 
13344c28dbdSSrinivas Kandagatla struct payload_pcm_output_format_cfg {
13444c28dbdSSrinivas Kandagatla 	uint16_t bit_width;
13544c28dbdSSrinivas Kandagatla 	uint16_t alignment;
13644c28dbdSSrinivas Kandagatla 	uint16_t bits_per_sample;
13744c28dbdSSrinivas Kandagatla 	uint16_t q_factor;
13844c28dbdSSrinivas Kandagatla 	uint16_t endianness;
13944c28dbdSSrinivas Kandagatla 	uint16_t interleaved;
14044c28dbdSSrinivas Kandagatla 	uint16_t reserved;
14144c28dbdSSrinivas Kandagatla 	uint16_t num_channels;
14244c28dbdSSrinivas Kandagatla 	uint8_t channel_mapping[];
14344c28dbdSSrinivas Kandagatla } __packed;
14444c28dbdSSrinivas Kandagatla 
14544c28dbdSSrinivas Kandagatla #define PARAM_ID_ENC_BITRATE			0x08001052
14644c28dbdSSrinivas Kandagatla 
14744c28dbdSSrinivas Kandagatla struct param_id_enc_bitrate_param {
14844c28dbdSSrinivas Kandagatla 	uint32_t bitrate;
14944c28dbdSSrinivas Kandagatla } __packed;
15044c28dbdSSrinivas Kandagatla 
15144c28dbdSSrinivas Kandagatla #define DATA_FORMAT_FIXED_POINT		1
152e41521b6SMohammad Rafi Shaik #define DATA_FORMAT_GENERIC_COMPRESSED	5
153e41521b6SMohammad Rafi Shaik #define DATA_FORMAT_RAW_COMPRESSED	6
15444c28dbdSSrinivas Kandagatla #define PCM_LSB_ALIGNED			1
15544c28dbdSSrinivas Kandagatla #define PCM_MSB_ALIGNED			2
15644c28dbdSSrinivas Kandagatla #define PCM_LITTLE_ENDIAN		1
15744c28dbdSSrinivas Kandagatla #define PCM_BIT_ENDIAN			2
15844c28dbdSSrinivas Kandagatla 
15944c28dbdSSrinivas Kandagatla #define MEDIA_FMT_ID_PCM	0x09001000
160e41521b6SMohammad Rafi Shaik #define MEDIA_FMT_ID_MP3	0x09001009
16144c28dbdSSrinivas Kandagatla #define SAMPLE_RATE_48K		48000
16244c28dbdSSrinivas Kandagatla #define BIT_WIDTH_16		16
16344c28dbdSSrinivas Kandagatla 
16444c28dbdSSrinivas Kandagatla #define APM_PARAM_ID_PROP_PORT_INFO		0x08001015
16544c28dbdSSrinivas Kandagatla 
16644c28dbdSSrinivas Kandagatla struct apm_modules_prop_info {
16744c28dbdSSrinivas Kandagatla 	uint32_t max_ip_port;
16844c28dbdSSrinivas Kandagatla 	uint32_t max_op_port;
16944c28dbdSSrinivas Kandagatla } __packed;
17044c28dbdSSrinivas Kandagatla 
17144c28dbdSSrinivas Kandagatla /* Shared memory module */
17244c28dbdSSrinivas Kandagatla #define DATA_CMD_WR_SH_MEM_EP_DATA_BUFFER	0x04001000
17344c28dbdSSrinivas Kandagatla #define WR_SH_MEM_EP_TIMESTAMP_VALID_FLAG	BIT(31)
17444c28dbdSSrinivas Kandagatla #define WR_SH_MEM_EP_LAST_BUFFER_FLAG		BIT(30)
17544c28dbdSSrinivas Kandagatla #define WR_SH_MEM_EP_TS_CONTINUE_FLAG		BIT(29)
17644c28dbdSSrinivas Kandagatla #define WR_SH_MEM_EP_EOF_FLAG			BIT(4)
17744c28dbdSSrinivas Kandagatla 
17844c28dbdSSrinivas Kandagatla struct apm_data_cmd_wr_sh_mem_ep_data_buffer {
17944c28dbdSSrinivas Kandagatla 	uint32_t buf_addr_lsw;
18044c28dbdSSrinivas Kandagatla 	uint32_t buf_addr_msw;
18144c28dbdSSrinivas Kandagatla 	uint32_t mem_map_handle;
18244c28dbdSSrinivas Kandagatla 	uint32_t buf_size;
18344c28dbdSSrinivas Kandagatla 	uint32_t timestamp_lsw;
18444c28dbdSSrinivas Kandagatla 	uint32_t timestamp_msw;
18544c28dbdSSrinivas Kandagatla 	uint32_t flags;
18644c28dbdSSrinivas Kandagatla } __packed;
18744c28dbdSSrinivas Kandagatla 
18844c28dbdSSrinivas Kandagatla #define DATA_CMD_WR_SH_MEM_EP_DATA_BUFFER_V2	0x0400100A
18944c28dbdSSrinivas Kandagatla 
19044c28dbdSSrinivas Kandagatla struct apm_data_cmd_wr_sh_mem_ep_data_buffer_v2 {
19144c28dbdSSrinivas Kandagatla 	uint32_t buf_addr_lsw;
19244c28dbdSSrinivas Kandagatla 	uint32_t buf_addr_msw;
19344c28dbdSSrinivas Kandagatla 	uint32_t mem_map_handle;
19444c28dbdSSrinivas Kandagatla 	uint32_t buf_size;
19544c28dbdSSrinivas Kandagatla 	uint32_t timestamp_lsw;
19644c28dbdSSrinivas Kandagatla 	uint32_t timestamp_msw;
19744c28dbdSSrinivas Kandagatla 	uint32_t flags;
19844c28dbdSSrinivas Kandagatla 	uint32_t md_addr_lsw;
19944c28dbdSSrinivas Kandagatla 	uint32_t md_addr_msw;
20044c28dbdSSrinivas Kandagatla 	uint32_t md_map_handle;
20144c28dbdSSrinivas Kandagatla 	uint32_t md_buf_size;
20244c28dbdSSrinivas Kandagatla } __packed;
20344c28dbdSSrinivas Kandagatla 
20444c28dbdSSrinivas Kandagatla #define DATA_CMD_RSP_WR_SH_MEM_EP_DATA_BUFFER_DONE	0x05001000
20544c28dbdSSrinivas Kandagatla 
20644c28dbdSSrinivas Kandagatla struct data_cmd_rsp_wr_sh_mem_ep_data_buffer_done {
20744c28dbdSSrinivas Kandagatla 	uint32_t buf_addr_lsw;
20844c28dbdSSrinivas Kandagatla 	uint32_t buf_addr_msw;
20944c28dbdSSrinivas Kandagatla 	uint32_t mem_map_handle;
21044c28dbdSSrinivas Kandagatla 	uint32_t status;
21144c28dbdSSrinivas Kandagatla 
21244c28dbdSSrinivas Kandagatla } __packed;
21344c28dbdSSrinivas Kandagatla 
21444c28dbdSSrinivas Kandagatla #define DATA_CMD_RSP_WR_SH_MEM_EP_DATA_BUFFER_DONE_V2	0x05001004
21544c28dbdSSrinivas Kandagatla 
21644c28dbdSSrinivas Kandagatla struct data_cmd_rsp_wr_sh_mem_ep_data_buffer_done_v2 {
21744c28dbdSSrinivas Kandagatla 	uint32_t buf_addr_lsw;
21844c28dbdSSrinivas Kandagatla 	uint32_t buf_addr_msw;
21944c28dbdSSrinivas Kandagatla 	uint32_t mem_map_handle;
22044c28dbdSSrinivas Kandagatla 	uint32_t status;
22144c28dbdSSrinivas Kandagatla 	uint32_t md_buf_addr_lsw;
22244c28dbdSSrinivas Kandagatla 	uint32_t md_buf_addr_msw;
22344c28dbdSSrinivas Kandagatla 	uint32_t md_mem_map_handle;
22444c28dbdSSrinivas Kandagatla 	uint32_t md_status;
22544c28dbdSSrinivas Kandagatla } __packed;
22644c28dbdSSrinivas Kandagatla 
22744c28dbdSSrinivas Kandagatla #define PARAM_ID_MEDIA_FORMAT				0x0800100C
22844c28dbdSSrinivas Kandagatla #define DATA_CMD_WR_SH_MEM_EP_MEDIA_FORMAT		0x04001001
22944c28dbdSSrinivas Kandagatla 
23044c28dbdSSrinivas Kandagatla struct apm_media_format {
23144c28dbdSSrinivas Kandagatla 	uint32_t data_format;
23244c28dbdSSrinivas Kandagatla 	uint32_t fmt_id;
23344c28dbdSSrinivas Kandagatla 	uint32_t payload_size;
23444c28dbdSSrinivas Kandagatla } __packed;
23544c28dbdSSrinivas Kandagatla 
236e41521b6SMohammad Rafi Shaik #define MEDIA_FMT_ID_FLAC	0x09001004
237e41521b6SMohammad Rafi Shaik 
238e41521b6SMohammad Rafi Shaik struct payload_media_fmt_flac_t {
239e41521b6SMohammad Rafi Shaik 	uint16_t num_channels;
240e41521b6SMohammad Rafi Shaik 	uint16_t sample_size;
241e41521b6SMohammad Rafi Shaik 	uint16_t min_blk_size;
242e41521b6SMohammad Rafi Shaik 	uint16_t max_blk_size;
243e41521b6SMohammad Rafi Shaik 	uint32_t sample_rate;
244e41521b6SMohammad Rafi Shaik 	uint32_t min_frame_size;
245e41521b6SMohammad Rafi Shaik 	uint32_t max_frame_size;
246e41521b6SMohammad Rafi Shaik } __packed;
247e41521b6SMohammad Rafi Shaik 
248e41521b6SMohammad Rafi Shaik #define MEDIA_FMT_ID_AAC	0x09001001
249e41521b6SMohammad Rafi Shaik 
250e41521b6SMohammad Rafi Shaik struct payload_media_fmt_aac_t {
251e41521b6SMohammad Rafi Shaik 	uint16_t aac_fmt_flag;
252e41521b6SMohammad Rafi Shaik 	uint16_t audio_obj_type;
253e41521b6SMohammad Rafi Shaik 	uint16_t num_channels;
254e41521b6SMohammad Rafi Shaik 	uint16_t total_size_of_PCE_bits;
255e41521b6SMohammad Rafi Shaik 	uint32_t sample_rate;
256e41521b6SMohammad Rafi Shaik } __packed;
257e41521b6SMohammad Rafi Shaik 
25844c28dbdSSrinivas Kandagatla #define DATA_CMD_WR_SH_MEM_EP_EOS			0x04001002
25944c28dbdSSrinivas Kandagatla #define WR_SH_MEM_EP_EOS_POLICY_LAST	1
26044c28dbdSSrinivas Kandagatla #define WR_SH_MEM_EP_EOS_POLICY_EACH	2
26144c28dbdSSrinivas Kandagatla 
26244c28dbdSSrinivas Kandagatla struct data_cmd_wr_sh_mem_ep_eos {
26344c28dbdSSrinivas Kandagatla 	uint32_t policy;
26444c28dbdSSrinivas Kandagatla 
26544c28dbdSSrinivas Kandagatla } __packed;
26644c28dbdSSrinivas Kandagatla 
26744c28dbdSSrinivas Kandagatla #define DATA_CMD_RD_SH_MEM_EP_DATA_BUFFER		0x04001003
26844c28dbdSSrinivas Kandagatla 
26944c28dbdSSrinivas Kandagatla struct data_cmd_rd_sh_mem_ep_data_buffer {
27044c28dbdSSrinivas Kandagatla 	uint32_t buf_addr_lsw;
27144c28dbdSSrinivas Kandagatla 	uint32_t buf_addr_msw;
27244c28dbdSSrinivas Kandagatla 	uint32_t mem_map_handle;
27344c28dbdSSrinivas Kandagatla 	uint32_t buf_size;
27444c28dbdSSrinivas Kandagatla } __packed;
27544c28dbdSSrinivas Kandagatla 
27644c28dbdSSrinivas Kandagatla #define DATA_CMD_RSP_RD_SH_MEM_EP_DATA_BUFFER		0x05001002
27744c28dbdSSrinivas Kandagatla 
27844c28dbdSSrinivas Kandagatla struct data_cmd_rsp_rd_sh_mem_ep_data_buffer_done {
27944c28dbdSSrinivas Kandagatla 	uint32_t status;
28044c28dbdSSrinivas Kandagatla 	uint32_t buf_addr_lsw;
28144c28dbdSSrinivas Kandagatla 	uint32_t buf_addr_msw;
28244c28dbdSSrinivas Kandagatla 	uint32_t mem_map_handle;
28344c28dbdSSrinivas Kandagatla 	uint32_t data_size;
28444c28dbdSSrinivas Kandagatla 	uint32_t offset;
28544c28dbdSSrinivas Kandagatla 	uint32_t timestamp_lsw;
28644c28dbdSSrinivas Kandagatla 	uint32_t timestamp_msw;
28744c28dbdSSrinivas Kandagatla 	uint32_t flags;
28844c28dbdSSrinivas Kandagatla 	uint32_t num_frames;
28944c28dbdSSrinivas Kandagatla } __packed;
29044c28dbdSSrinivas Kandagatla 
29144c28dbdSSrinivas Kandagatla #define DATA_CMD_RD_SH_MEM_EP_DATA_BUFFER_V2		0x0400100B
29244c28dbdSSrinivas Kandagatla 
29344c28dbdSSrinivas Kandagatla struct data_cmd_rd_sh_mem_ep_data_buffer_v2 {
29444c28dbdSSrinivas Kandagatla 	uint32_t buf_addr_lsw;
29544c28dbdSSrinivas Kandagatla 	uint32_t buf_addr_msw;
29644c28dbdSSrinivas Kandagatla 	uint32_t mem_map_handle;
29744c28dbdSSrinivas Kandagatla 	uint32_t buf_size;
29844c28dbdSSrinivas Kandagatla 	uint32_t md_buf_addr_lsw;
29944c28dbdSSrinivas Kandagatla 	uint32_t md_buf_addr_msw;
30044c28dbdSSrinivas Kandagatla 	uint32_t md_mem_map_handle;
30144c28dbdSSrinivas Kandagatla 	uint32_t md_buf_size;
30244c28dbdSSrinivas Kandagatla } __packed;
30344c28dbdSSrinivas Kandagatla 
30444c28dbdSSrinivas Kandagatla #define DATA_CMD_RSP_RD_SH_MEM_EP_DATA_BUFFER_V2	0x05001005
30544c28dbdSSrinivas Kandagatla 
30644c28dbdSSrinivas Kandagatla struct data_cmd_rsp_rd_sh_mem_ep_data_buffer_done_v2 {
30744c28dbdSSrinivas Kandagatla 	uint32_t status;
30844c28dbdSSrinivas Kandagatla 	uint32_t buf_addr_lsw;
30944c28dbdSSrinivas Kandagatla 	uint32_t buf_addr_msw;
31044c28dbdSSrinivas Kandagatla 	uint32_t mem_map_handle;
31144c28dbdSSrinivas Kandagatla 	uint32_t data_size;
31244c28dbdSSrinivas Kandagatla 	uint32_t offset;
31344c28dbdSSrinivas Kandagatla 	uint32_t timestamp_lsw;
31444c28dbdSSrinivas Kandagatla 	uint32_t timestamp_msw;
31544c28dbdSSrinivas Kandagatla 	uint32_t flags;
31644c28dbdSSrinivas Kandagatla 	uint32_t num_frames;
31744c28dbdSSrinivas Kandagatla 	uint32_t md_status;
31844c28dbdSSrinivas Kandagatla 	uint32_t md_buf_addr_lsw;
31944c28dbdSSrinivas Kandagatla 	uint32_t md_buf_addr_msw;
32044c28dbdSSrinivas Kandagatla 	uint32_t md_mem_map_handle;
32144c28dbdSSrinivas Kandagatla 	uint32_t md_size;
32244c28dbdSSrinivas Kandagatla } __packed;
32344c28dbdSSrinivas Kandagatla 
32444c28dbdSSrinivas Kandagatla #define PARAM_ID_RD_SH_MEM_CFG				0x08001007
32544c28dbdSSrinivas Kandagatla 
32644c28dbdSSrinivas Kandagatla struct param_id_rd_sh_mem_cfg {
32744c28dbdSSrinivas Kandagatla 	uint32_t num_frames_per_buffer;
32844c28dbdSSrinivas Kandagatla 	uint32_t metadata_control_flags;
32944c28dbdSSrinivas Kandagatla 
33044c28dbdSSrinivas Kandagatla } __packed;
33144c28dbdSSrinivas Kandagatla 
33244c28dbdSSrinivas Kandagatla #define DATA_CMD_WR_SH_MEM_EP_EOS_RENDERED		0x05001001
33344c28dbdSSrinivas Kandagatla 
33444c28dbdSSrinivas Kandagatla struct data_cmd_wr_sh_mem_ep_eos_rendered {
33544c28dbdSSrinivas Kandagatla 	uint32_t module_instance_id;
33644c28dbdSSrinivas Kandagatla 	uint32_t render_status;
33744c28dbdSSrinivas Kandagatla } __packed;
33844c28dbdSSrinivas Kandagatla 
33944c28dbdSSrinivas Kandagatla #define MODULE_ID_WR_SHARED_MEM_EP			0x07001000
34044c28dbdSSrinivas Kandagatla 
34144c28dbdSSrinivas Kandagatla struct apm_cmd_header {
34244c28dbdSSrinivas Kandagatla 	uint32_t payload_address_lsw;
34344c28dbdSSrinivas Kandagatla 	uint32_t payload_address_msw;
34444c28dbdSSrinivas Kandagatla 	uint32_t mem_map_handle;
34544c28dbdSSrinivas Kandagatla 	uint32_t payload_size;
34644c28dbdSSrinivas Kandagatla } __packed;
34744c28dbdSSrinivas Kandagatla 
34844c28dbdSSrinivas Kandagatla #define APM_CMD_HDR_SIZE sizeof(struct apm_cmd_header)
34944c28dbdSSrinivas Kandagatla 
35044c28dbdSSrinivas Kandagatla struct apm_module_param_data  {
35144c28dbdSSrinivas Kandagatla 	uint32_t module_instance_id;
35244c28dbdSSrinivas Kandagatla 	uint32_t param_id;
35344c28dbdSSrinivas Kandagatla 	uint32_t param_size;
35444c28dbdSSrinivas Kandagatla 	uint32_t error_code;
35544c28dbdSSrinivas Kandagatla } __packed;
35644c28dbdSSrinivas Kandagatla 
35744c28dbdSSrinivas Kandagatla #define APM_MODULE_PARAM_DATA_SIZE	sizeof(struct apm_module_param_data)
35844c28dbdSSrinivas Kandagatla 
35944c28dbdSSrinivas Kandagatla struct apm_module_param_shared_data  {
36044c28dbdSSrinivas Kandagatla 	uint32_t param_id;
36144c28dbdSSrinivas Kandagatla 	uint32_t param_size;
36244c28dbdSSrinivas Kandagatla } __packed;
36344c28dbdSSrinivas Kandagatla 
36444c28dbdSSrinivas Kandagatla struct apm_prop_data {
36544c28dbdSSrinivas Kandagatla 	uint32_t prop_id;
36644c28dbdSSrinivas Kandagatla 	uint32_t prop_size;
36744c28dbdSSrinivas Kandagatla } __packed;
36844c28dbdSSrinivas Kandagatla 
36944c28dbdSSrinivas Kandagatla /* Sub-Graph Properties */
37044c28dbdSSrinivas Kandagatla #define APM_PARAM_ID_SUB_GRAPH_CONFIG	0x08001001
37144c28dbdSSrinivas Kandagatla 
37244c28dbdSSrinivas Kandagatla struct apm_param_id_sub_graph_cfg {
37344c28dbdSSrinivas Kandagatla 	uint32_t num_sub_graphs;
37444c28dbdSSrinivas Kandagatla } __packed;
37544c28dbdSSrinivas Kandagatla 
37644c28dbdSSrinivas Kandagatla struct apm_sub_graph_cfg {
37744c28dbdSSrinivas Kandagatla 	uint32_t sub_graph_id;
37844c28dbdSSrinivas Kandagatla 	uint32_t num_sub_graph_prop;
37944c28dbdSSrinivas Kandagatla } __packed;
38044c28dbdSSrinivas Kandagatla 
38144c28dbdSSrinivas Kandagatla #define APM_SUB_GRAPH_PROP_ID_PERF_MODE		0x0800100E
38244c28dbdSSrinivas Kandagatla 
38344c28dbdSSrinivas Kandagatla struct apm_sg_prop_id_perf_mode {
38444c28dbdSSrinivas Kandagatla 	uint32_t perf_mode;
38544c28dbdSSrinivas Kandagatla } __packed;
38644c28dbdSSrinivas Kandagatla 
38744c28dbdSSrinivas Kandagatla #define APM_SG_PROP_ID_PERF_MODE_SIZE	4
38844c28dbdSSrinivas Kandagatla 
38944c28dbdSSrinivas Kandagatla #define APM_SUB_GRAPH_PROP_ID_DIRECTION	0x0800100F
39044c28dbdSSrinivas Kandagatla 
39144c28dbdSSrinivas Kandagatla struct apm_sg_prop_id_direction {
39244c28dbdSSrinivas Kandagatla 	uint32_t direction;
39344c28dbdSSrinivas Kandagatla } __packed;
39444c28dbdSSrinivas Kandagatla 
39544c28dbdSSrinivas Kandagatla #define APM_SG_PROP_ID_DIR_SIZE		4
39644c28dbdSSrinivas Kandagatla 
39744c28dbdSSrinivas Kandagatla #define APM_SUB_GRAPH_PROP_ID_SCENARIO_ID	0x08001010
39844c28dbdSSrinivas Kandagatla #define APM_SUB_GRAPH_SID_AUDIO_PLAYBACK	0x1
39944c28dbdSSrinivas Kandagatla #define APM_SUB_GRAPH_SID_AUDIO_RECORD		0x2
40044c28dbdSSrinivas Kandagatla #define APM_SUB_GRAPH_SID_AUDIO_VOICE_CALL	0x3
40144c28dbdSSrinivas Kandagatla 
40244c28dbdSSrinivas Kandagatla struct apm_sg_prop_id_scenario_id {
40344c28dbdSSrinivas Kandagatla 	uint32_t scenario_id;
40444c28dbdSSrinivas Kandagatla } __packed;
40544c28dbdSSrinivas Kandagatla 
40644c28dbdSSrinivas Kandagatla #define APM_SG_PROP_ID_SID_SIZE			4
40744c28dbdSSrinivas Kandagatla /* container api */
40844c28dbdSSrinivas Kandagatla #define APM_PARAM_ID_CONTAINER_CONFIG		0x08001000
40944c28dbdSSrinivas Kandagatla 
41044c28dbdSSrinivas Kandagatla struct apm_param_id_container_cfg {
41144c28dbdSSrinivas Kandagatla 	uint32_t num_containers;
41244c28dbdSSrinivas Kandagatla } __packed;
41344c28dbdSSrinivas Kandagatla 
41444c28dbdSSrinivas Kandagatla struct apm_container_cfg {
41544c28dbdSSrinivas Kandagatla 	uint32_t container_id;
41644c28dbdSSrinivas Kandagatla 	uint32_t num_prop;
41744c28dbdSSrinivas Kandagatla } __packed;
41844c28dbdSSrinivas Kandagatla 
41944c28dbdSSrinivas Kandagatla struct apm_cont_capability  {
42044c28dbdSSrinivas Kandagatla 	uint32_t capability_id;
42144c28dbdSSrinivas Kandagatla } __packed;
42244c28dbdSSrinivas Kandagatla 
42344c28dbdSSrinivas Kandagatla #define APM_CONTAINER_PROP_ID_CAPABILITY_LIST	0x08001011
42444c28dbdSSrinivas Kandagatla #define APM_CONTAINER_PROP_ID_CAPABILITY_SIZE	8
42544c28dbdSSrinivas Kandagatla 
42644c28dbdSSrinivas Kandagatla #define APM_PROP_ID_INVALID			0x0
42744c28dbdSSrinivas Kandagatla #define APM_CONTAINER_CAP_ID_PP			0x1
42844c28dbdSSrinivas Kandagatla #define APM_CONTAINER_CAP_ID_PP			0x1
42944c28dbdSSrinivas Kandagatla 
43044c28dbdSSrinivas Kandagatla struct apm_cont_prop_id_cap_list  {
43144c28dbdSSrinivas Kandagatla 	uint32_t num_capability_id;
43244c28dbdSSrinivas Kandagatla } __packed;
43344c28dbdSSrinivas Kandagatla 
43444c28dbdSSrinivas Kandagatla #define APM_CONTAINER_PROP_ID_GRAPH_POS		0x08001012
43544c28dbdSSrinivas Kandagatla 
43644c28dbdSSrinivas Kandagatla struct apm_cont_prop_id_graph_pos  {
43744c28dbdSSrinivas Kandagatla 	uint32_t graph_pos;
43844c28dbdSSrinivas Kandagatla } __packed;
43944c28dbdSSrinivas Kandagatla 
44044c28dbdSSrinivas Kandagatla #define APM_CONTAINER_PROP_ID_STACK_SIZE	0x08001013
44144c28dbdSSrinivas Kandagatla 
44244c28dbdSSrinivas Kandagatla struct apm_cont_prop_id_stack_size  {
44344c28dbdSSrinivas Kandagatla 	uint32_t stack_size;
44444c28dbdSSrinivas Kandagatla } __packed;
44544c28dbdSSrinivas Kandagatla 
44644c28dbdSSrinivas Kandagatla #define APM_CONTAINER_PROP_ID_PROC_DOMAIN	0x08001014
44744c28dbdSSrinivas Kandagatla 
44844c28dbdSSrinivas Kandagatla struct apm_cont_prop_id_domain  {
44944c28dbdSSrinivas Kandagatla 	uint32_t proc_domain;
45044c28dbdSSrinivas Kandagatla } __packed;
45144c28dbdSSrinivas Kandagatla 
45244c28dbdSSrinivas Kandagatla #define CONFIG_I2S_WS_SRC_EXTERNAL		0x0
45344c28dbdSSrinivas Kandagatla #define CONFIG_I2S_WS_SRC_INTERNAL		0x1
45444c28dbdSSrinivas Kandagatla 
45544c28dbdSSrinivas Kandagatla #define PARAM_ID_I2S_INTF_CFG			0x08001019
45644c28dbdSSrinivas Kandagatla struct param_id_i2s_intf_cfg {
45744c28dbdSSrinivas Kandagatla 	uint32_t lpaif_type;
45844c28dbdSSrinivas Kandagatla 	uint32_t intf_idx;
45944c28dbdSSrinivas Kandagatla 	uint16_t sd_line_idx;
46044c28dbdSSrinivas Kandagatla 	uint16_t ws_src;
46144c28dbdSSrinivas Kandagatla } __packed;
46244c28dbdSSrinivas Kandagatla 
46344c28dbdSSrinivas Kandagatla #define I2S_INTF_TYPE_PRIMARY		0
46444c28dbdSSrinivas Kandagatla #define I2S_INTF_TYPE_SECOINDARY	1
46544c28dbdSSrinivas Kandagatla #define I2S_INTF_TYPE_TERTINARY		2
46644c28dbdSSrinivas Kandagatla #define I2S_INTF_TYPE_QUATERNARY	3
46744c28dbdSSrinivas Kandagatla #define I2S_INTF_TYPE_QUINARY		4
46844c28dbdSSrinivas Kandagatla #define I2S_SD0				1
46944c28dbdSSrinivas Kandagatla #define I2S_SD1				2
47044c28dbdSSrinivas Kandagatla #define I2S_SD2				3
47144c28dbdSSrinivas Kandagatla #define I2S_SD3				4
47244c28dbdSSrinivas Kandagatla 
47344c28dbdSSrinivas Kandagatla #define PORT_ID_I2S_INPUT		2
47444c28dbdSSrinivas Kandagatla #define PORT_ID_I2S_OUPUT		1
47544c28dbdSSrinivas Kandagatla #define I2S_STACK_SIZE			2048
47644c28dbdSSrinivas Kandagatla 
477a8ab6541SSrinivas Kandagatla #define PARAM_ID_DISPLAY_PORT_INTF_CFG		0x08001154
478a8ab6541SSrinivas Kandagatla 
479a8ab6541SSrinivas Kandagatla struct param_id_display_port_intf_cfg {
480a8ab6541SSrinivas Kandagatla 	uint32_t channel_allocation;
481a8ab6541SSrinivas Kandagatla 	/* Multi-Steam Transport index */
482a8ab6541SSrinivas Kandagatla 	uint32_t mst_idx;
483a8ab6541SSrinivas Kandagatla 	uint32_t dptx_idx;
484a8ab6541SSrinivas Kandagatla } __packed;
485a8ab6541SSrinivas Kandagatla 
48644c28dbdSSrinivas Kandagatla #define PARAM_ID_HW_EP_MF_CFG			0x08001017
48744c28dbdSSrinivas Kandagatla struct param_id_hw_ep_mf {
48844c28dbdSSrinivas Kandagatla 	uint32_t sample_rate;
48944c28dbdSSrinivas Kandagatla 	uint16_t bit_width;
49044c28dbdSSrinivas Kandagatla 	uint16_t num_channels;
49144c28dbdSSrinivas Kandagatla 	uint32_t data_format;
49244c28dbdSSrinivas Kandagatla } __packed;
49344c28dbdSSrinivas Kandagatla 
49444c28dbdSSrinivas Kandagatla #define PARAM_ID_HW_EP_FRAME_SIZE_FACTOR	0x08001018
49544c28dbdSSrinivas Kandagatla 
49644c28dbdSSrinivas Kandagatla struct param_id_fram_size_factor {
49744c28dbdSSrinivas Kandagatla 	uint32_t frame_size_factor;
49844c28dbdSSrinivas Kandagatla } __packed;
49944c28dbdSSrinivas Kandagatla 
50044c28dbdSSrinivas Kandagatla #define APM_CONTAINER_PROP_ID_PARENT_CONTAINER_ID	0x080010CB
50144c28dbdSSrinivas Kandagatla 
50244c28dbdSSrinivas Kandagatla struct apm_cont_prop_id_parent_container  {
50344c28dbdSSrinivas Kandagatla 	uint32_t parent_container_id;
50444c28dbdSSrinivas Kandagatla } __packed;
50544c28dbdSSrinivas Kandagatla 
50644c28dbdSSrinivas Kandagatla #define APM_CONTAINER_PROP_ID_HEAP_ID			0x08001174
50744c28dbdSSrinivas Kandagatla #define APM_CONT_HEAP_DEFAULT				0x1
50844c28dbdSSrinivas Kandagatla #define APM_CONT_HEAP_LOW_POWER				0x2
50944c28dbdSSrinivas Kandagatla 
51044c28dbdSSrinivas Kandagatla struct apm_cont_prop_id_headp_id  {
51144c28dbdSSrinivas Kandagatla 	uint32_t heap_id;
51244c28dbdSSrinivas Kandagatla } __packed;
51344c28dbdSSrinivas Kandagatla 
51444c28dbdSSrinivas Kandagatla struct apm_modules_list {
51544c28dbdSSrinivas Kandagatla 	uint32_t sub_graph_id;
51644c28dbdSSrinivas Kandagatla 	uint32_t container_id;
51744c28dbdSSrinivas Kandagatla 	uint32_t num_modules;
51844c28dbdSSrinivas Kandagatla } __packed;
51944c28dbdSSrinivas Kandagatla 
52044c28dbdSSrinivas Kandagatla struct apm_module_obj {
52144c28dbdSSrinivas Kandagatla 	uint32_t module_id;
52244c28dbdSSrinivas Kandagatla 	uint32_t instance_id;
52344c28dbdSSrinivas Kandagatla } __packed;
52444c28dbdSSrinivas Kandagatla 
52544c28dbdSSrinivas Kandagatla #define APM_MODULE_PROP_ID_PORT_INFO		0x08001015
52644c28dbdSSrinivas Kandagatla #define APM_MODULE_PROP_ID_PORT_INFO_SZ		8
52744c28dbdSSrinivas Kandagatla struct apm_module_prop_id_port_info {
52844c28dbdSSrinivas Kandagatla 	uint32_t max_ip_port;
52944c28dbdSSrinivas Kandagatla 	uint32_t max_op_port;
53044c28dbdSSrinivas Kandagatla } __packed;
53144c28dbdSSrinivas Kandagatla 
53244c28dbdSSrinivas Kandagatla #define DATA_LOGGING_MAX_INPUT_PORTS		0x1
53344c28dbdSSrinivas Kandagatla #define DATA_LOGGING_MAX_OUTPUT_PORTS		0x1
53444c28dbdSSrinivas Kandagatla #define DATA_LOGGING_STACK_SIZE			2048
53544c28dbdSSrinivas Kandagatla #define PARAM_ID_DATA_LOGGING_CONFIG		0x08001031
53644c28dbdSSrinivas Kandagatla 
53744c28dbdSSrinivas Kandagatla struct data_logging_config {
53844c28dbdSSrinivas Kandagatla 	uint32_t log_code;
53944c28dbdSSrinivas Kandagatla 	uint32_t log_tap_point_id;
54044c28dbdSSrinivas Kandagatla 	uint32_t mode;
54144c28dbdSSrinivas Kandagatla } __packed;
54244c28dbdSSrinivas Kandagatla 
543a934afdbSSrinivas Kandagatla #define PARAM_ID_SAL_OUTPUT_CFG			0x08001016
544a934afdbSSrinivas Kandagatla struct param_id_sal_output_config {
545a934afdbSSrinivas Kandagatla 	uint32_t bits_per_sample;
546a934afdbSSrinivas Kandagatla } __packed;
547a934afdbSSrinivas Kandagatla 
548a934afdbSSrinivas Kandagatla #define PARAM_ID_SAL_LIMITER_ENABLE		0x0800101E
549a934afdbSSrinivas Kandagatla struct param_id_sal_limiter_enable {
550a934afdbSSrinivas Kandagatla 	uint32_t enable_lim;
551a934afdbSSrinivas Kandagatla } __packed;
552a934afdbSSrinivas Kandagatla 
55344c28dbdSSrinivas Kandagatla #define PARAM_ID_MFC_OUTPUT_MEDIA_FORMAT	0x08001024
5542c954a37SMohammad Rafi Shaik #define PARAM_ID_EARLY_EOS_DELAY		0x0800114C
5552c954a37SMohammad Rafi Shaik #define EARLY_EOS_DELAY_MS			150
55644c28dbdSSrinivas Kandagatla 
55744c28dbdSSrinivas Kandagatla struct param_id_mfc_media_format {
55844c28dbdSSrinivas Kandagatla 	uint32_t sample_rate;
55944c28dbdSSrinivas Kandagatla 	uint16_t bit_width;
56044c28dbdSSrinivas Kandagatla 	uint16_t num_channels;
56144c28dbdSSrinivas Kandagatla 	uint16_t channel_mapping[];
56244c28dbdSSrinivas Kandagatla } __packed;
56344c28dbdSSrinivas Kandagatla 
5642c954a37SMohammad Rafi Shaik struct param_id_gapless_early_eos_delay_t {
5652c954a37SMohammad Rafi Shaik 	uint32_t early_eos_delay_ms;
5662c954a37SMohammad Rafi Shaik } __packed;
5672c954a37SMohammad Rafi Shaik 
56844c28dbdSSrinivas Kandagatla struct media_format {
56944c28dbdSSrinivas Kandagatla 	uint32_t data_format;
57044c28dbdSSrinivas Kandagatla 	uint32_t fmt_id;
57144c28dbdSSrinivas Kandagatla 	uint32_t payload_size;
57244c28dbdSSrinivas Kandagatla } __packed;
57344c28dbdSSrinivas Kandagatla 
57444c28dbdSSrinivas Kandagatla struct payload_media_fmt_pcm {
57544c28dbdSSrinivas Kandagatla 	uint32_t sample_rate;
57644c28dbdSSrinivas Kandagatla 	uint16_t bit_width;
57744c28dbdSSrinivas Kandagatla 	uint16_t alignment;
57844c28dbdSSrinivas Kandagatla 	uint16_t bits_per_sample;
57944c28dbdSSrinivas Kandagatla 	uint16_t q_factor;
58044c28dbdSSrinivas Kandagatla 	uint16_t endianness;
58144c28dbdSSrinivas Kandagatla 	uint16_t num_channels;
58244c28dbdSSrinivas Kandagatla 	uint8_t channel_mapping[];
58344c28dbdSSrinivas Kandagatla } __packed;
58444c28dbdSSrinivas Kandagatla 
5856648a6dcSSrinivas Kandagatla #define PARAM_ID_MODULE_ENABLE			0x08001026
5866648a6dcSSrinivas Kandagatla struct param_id_module_enable {
5876648a6dcSSrinivas Kandagatla 	uint32_t enable;
5886648a6dcSSrinivas Kandagatla } __packed;
5896648a6dcSSrinivas Kandagatla 
59044c28dbdSSrinivas Kandagatla #define PARAM_ID_CODEC_DMA_INTF_CFG		0x08001063
59144c28dbdSSrinivas Kandagatla 
59244c28dbdSSrinivas Kandagatla struct param_id_codec_dma_intf_cfg {
59344c28dbdSSrinivas Kandagatla 	/* 1 - RXTX
59444c28dbdSSrinivas Kandagatla 	 * 2 - WSA
59544c28dbdSSrinivas Kandagatla 	 * 3 - VA
59644c28dbdSSrinivas Kandagatla 	 * 4 - AXI
59744c28dbdSSrinivas Kandagatla 	 */
59844c28dbdSSrinivas Kandagatla 	uint32_t lpaif_type;
59944c28dbdSSrinivas Kandagatla 	/*
60044c28dbdSSrinivas Kandagatla 	 *  RX0 | TX0 = 1
60144c28dbdSSrinivas Kandagatla 	 *  RX1 | TX1 = 2
60244c28dbdSSrinivas Kandagatla 	 *  RX2 | TX2 = 3... so on
60344c28dbdSSrinivas Kandagatla 	 */
60444c28dbdSSrinivas Kandagatla 	uint32_t intf_index;
60544c28dbdSSrinivas Kandagatla 	uint32_t active_channels_mask;
60644c28dbdSSrinivas Kandagatla } __packed;
60744c28dbdSSrinivas Kandagatla 
60844c28dbdSSrinivas Kandagatla struct audio_hw_clk_cfg {
60944c28dbdSSrinivas Kandagatla 	uint32_t clock_id;
61044c28dbdSSrinivas Kandagatla 	uint32_t clock_freq;
61144c28dbdSSrinivas Kandagatla 	uint32_t clock_attri;
61244c28dbdSSrinivas Kandagatla 	uint32_t clock_root;
61344c28dbdSSrinivas Kandagatla } __packed;
61444c28dbdSSrinivas Kandagatla 
6152f206404SSrinivas Kandagatla struct audio_hw_clk_rel_cfg {
6162f206404SSrinivas Kandagatla 	uint32_t clock_id;
6172f206404SSrinivas Kandagatla } __packed;
6182f206404SSrinivas Kandagatla 
61944c28dbdSSrinivas Kandagatla #define PARAM_ID_HW_EP_POWER_MODE_CFG	0x8001176
62044c28dbdSSrinivas Kandagatla #define AR_HW_EP_POWER_MODE_0	0 /* default */
62144c28dbdSSrinivas Kandagatla #define AR_HW_EP_POWER_MODE_1	1 /* XO Shutdown allowed */
62244c28dbdSSrinivas Kandagatla #define AR_HW_EP_POWER_MODE_2	2 /* XO Shutdown not allowed */
62344c28dbdSSrinivas Kandagatla 
62444c28dbdSSrinivas Kandagatla struct param_id_hw_ep_power_mode_cfg {
62544c28dbdSSrinivas Kandagatla 	uint32_t power_mode;
62644c28dbdSSrinivas Kandagatla } __packed;
62744c28dbdSSrinivas Kandagatla 
62844c28dbdSSrinivas Kandagatla #define PARAM_ID_HW_EP_DMA_DATA_ALIGN	0x08001233
62944c28dbdSSrinivas Kandagatla #define AR_HW_EP_DMA_DATA_ALIGN_MSB	0
63044c28dbdSSrinivas Kandagatla #define AR_HW_EP_DMA_DATA_ALIGN_LSB	1
63144c28dbdSSrinivas Kandagatla #define AR_PCM_MAX_NUM_CHANNEL		8
63244c28dbdSSrinivas Kandagatla 
63344c28dbdSSrinivas Kandagatla struct param_id_hw_ep_dma_data_align {
63444c28dbdSSrinivas Kandagatla 	uint32_t dma_data_align;
63544c28dbdSSrinivas Kandagatla } __packed;
63644c28dbdSSrinivas Kandagatla 
63725ab80dbSSrinivas Kandagatla #define PARAM_ID_VOL_CTRL_MASTER_GAIN	0x08001035
63825ab80dbSSrinivas Kandagatla #define VOL_CTRL_DEFAULT_GAIN		0x2000
63925ab80dbSSrinivas Kandagatla 
64025ab80dbSSrinivas Kandagatla struct param_id_vol_ctrl_master_gain {
64125ab80dbSSrinivas Kandagatla 	uint16_t master_gain;
64225ab80dbSSrinivas Kandagatla 	uint16_t reserved;
64325ab80dbSSrinivas Kandagatla } __packed;
64425ab80dbSSrinivas Kandagatla 
64525ab80dbSSrinivas Kandagatla 
646c7548f59SSrinivas Kandagatla #define PARAM_ID_REMOVE_INITIAL_SILENCE		0x0800114B
647c7548f59SSrinivas Kandagatla #define PARAM_ID_REMOVE_TRAILING_SILENCE	0x0800115D
648c7548f59SSrinivas Kandagatla 
649c7548f59SSrinivas Kandagatla #define PARAM_ID_REAL_MODULE_ID	0x0800100B
650c7548f59SSrinivas Kandagatla 
651c7548f59SSrinivas Kandagatla struct param_id_placeholder_real_module_id {
652c7548f59SSrinivas Kandagatla 	uint32_t real_module_id;
653c7548f59SSrinivas Kandagatla } __packed;
654c7548f59SSrinivas Kandagatla 
65544c28dbdSSrinivas Kandagatla /* Graph */
65644c28dbdSSrinivas Kandagatla struct audioreach_connection {
65744c28dbdSSrinivas Kandagatla 	/* Connections */
65844c28dbdSSrinivas Kandagatla 	uint32_t src_mod_inst_id;
65944c28dbdSSrinivas Kandagatla 	uint32_t src_mod_op_port_id;
66044c28dbdSSrinivas Kandagatla 	uint32_t dst_mod_inst_id;
66144c28dbdSSrinivas Kandagatla 	uint32_t dst_mod_ip_port_id;
66244c28dbdSSrinivas Kandagatla 	struct list_head node;
66344c28dbdSSrinivas Kandagatla };
66444c28dbdSSrinivas Kandagatla 
66544c28dbdSSrinivas Kandagatla struct audioreach_graph_info {
66644c28dbdSSrinivas Kandagatla 	int id;
66744c28dbdSSrinivas Kandagatla 	uint32_t num_sub_graphs;
66844c28dbdSSrinivas Kandagatla 	struct list_head sg_list;
669e4977b91SSrinivas Kandagatla 	/* DPCM connection from FE Graph to BE graph */
670e4977b91SSrinivas Kandagatla 	uint32_t src_mod_inst_id;
671e4977b91SSrinivas Kandagatla 	uint32_t src_mod_op_port_id;
672e4977b91SSrinivas Kandagatla 	uint32_t dst_mod_inst_id;
673e4977b91SSrinivas Kandagatla 	uint32_t dst_mod_ip_port_id;
67444c28dbdSSrinivas Kandagatla };
67544c28dbdSSrinivas Kandagatla 
67644c28dbdSSrinivas Kandagatla struct audioreach_sub_graph {
67744c28dbdSSrinivas Kandagatla 	uint32_t sub_graph_id;
67844c28dbdSSrinivas Kandagatla 	uint32_t perf_mode;
67944c28dbdSSrinivas Kandagatla 	uint32_t direction;
68044c28dbdSSrinivas Kandagatla 	uint32_t scenario_id;
68144c28dbdSSrinivas Kandagatla 	struct list_head node;
68244c28dbdSSrinivas Kandagatla 
68344c28dbdSSrinivas Kandagatla 	struct audioreach_graph_info *info;
68444c28dbdSSrinivas Kandagatla 	uint32_t num_containers;
68544c28dbdSSrinivas Kandagatla 	struct list_head container_list;
68644c28dbdSSrinivas Kandagatla };
68744c28dbdSSrinivas Kandagatla 
68844c28dbdSSrinivas Kandagatla struct audioreach_container {
68944c28dbdSSrinivas Kandagatla 	uint32_t container_id;
69044c28dbdSSrinivas Kandagatla 	uint32_t capability_id;
69144c28dbdSSrinivas Kandagatla 	uint32_t graph_pos;
69244c28dbdSSrinivas Kandagatla 	uint32_t stack_size;
69344c28dbdSSrinivas Kandagatla 	uint32_t proc_domain;
69444c28dbdSSrinivas Kandagatla 	struct list_head node;
69544c28dbdSSrinivas Kandagatla 
69644c28dbdSSrinivas Kandagatla 	uint32_t num_modules;
69744c28dbdSSrinivas Kandagatla 	struct list_head modules_list;
69844c28dbdSSrinivas Kandagatla 	struct audioreach_sub_graph *sub_graph;
69944c28dbdSSrinivas Kandagatla };
70044c28dbdSSrinivas Kandagatla 
70103365d6aSSrinivas Kandagatla #define AR_MAX_MOD_LINKS	8
70203365d6aSSrinivas Kandagatla 
70344c28dbdSSrinivas Kandagatla struct audioreach_module {
70444c28dbdSSrinivas Kandagatla 	uint32_t module_id;
70544c28dbdSSrinivas Kandagatla 	uint32_t instance_id;
70644c28dbdSSrinivas Kandagatla 
70744c28dbdSSrinivas Kandagatla 	uint32_t max_ip_port;
70844c28dbdSSrinivas Kandagatla 	uint32_t max_op_port;
70944c28dbdSSrinivas Kandagatla 
71044c28dbdSSrinivas Kandagatla 	uint32_t in_port;
71144c28dbdSSrinivas Kandagatla 	uint32_t out_port;
71244c28dbdSSrinivas Kandagatla 
71303365d6aSSrinivas Kandagatla 	uint32_t num_connections;
71444c28dbdSSrinivas Kandagatla 	/* Connections */
71544c28dbdSSrinivas Kandagatla 	uint32_t src_mod_inst_id;
71603365d6aSSrinivas Kandagatla 	uint32_t src_mod_op_port_id[AR_MAX_MOD_LINKS];
71703365d6aSSrinivas Kandagatla 	uint32_t dst_mod_inst_id[AR_MAX_MOD_LINKS];
71803365d6aSSrinivas Kandagatla 	uint32_t dst_mod_ip_port_id[AR_MAX_MOD_LINKS];
71944c28dbdSSrinivas Kandagatla 
72044c28dbdSSrinivas Kandagatla 	/* Format specifics */
72144c28dbdSSrinivas Kandagatla 	uint32_t ch_fmt;
72244c28dbdSSrinivas Kandagatla 	uint32_t rate;
72344c28dbdSSrinivas Kandagatla 	uint32_t bit_depth;
72444c28dbdSSrinivas Kandagatla 
72544c28dbdSSrinivas Kandagatla 	/* I2S module */
72644c28dbdSSrinivas Kandagatla 	uint32_t hw_interface_idx;
72744c28dbdSSrinivas Kandagatla 	uint32_t sd_line_idx;
72844c28dbdSSrinivas Kandagatla 	uint32_t ws_src;
72944c28dbdSSrinivas Kandagatla 	uint32_t frame_size_factor;
73044c28dbdSSrinivas Kandagatla 	uint32_t data_format;
73144c28dbdSSrinivas Kandagatla 	uint32_t hw_interface_type;
73244c28dbdSSrinivas Kandagatla 
73344c28dbdSSrinivas Kandagatla 	/* PCM module specific */
73444c28dbdSSrinivas Kandagatla 	uint32_t interleave_type;
73544c28dbdSSrinivas Kandagatla 
73644c28dbdSSrinivas Kandagatla 	/* GAIN/Vol Control Module */
73744c28dbdSSrinivas Kandagatla 	uint16_t gain;
73844c28dbdSSrinivas Kandagatla 
73944c28dbdSSrinivas Kandagatla 	/* Logging */
74044c28dbdSSrinivas Kandagatla 	uint32_t log_code;
74144c28dbdSSrinivas Kandagatla 	uint32_t log_tap_point_id;
74244c28dbdSSrinivas Kandagatla 	uint32_t log_mode;
74344c28dbdSSrinivas Kandagatla 
74444c28dbdSSrinivas Kandagatla 	/* bookkeeping */
74544c28dbdSSrinivas Kandagatla 	struct list_head node;
74644c28dbdSSrinivas Kandagatla 	struct audioreach_container *container;
74744c28dbdSSrinivas Kandagatla 	struct snd_soc_dapm_widget *widget;
74844c28dbdSSrinivas Kandagatla };
74944c28dbdSSrinivas Kandagatla 
7505477518bSSrinivas Kandagatla struct audioreach_module_config {
7515477518bSSrinivas Kandagatla 	int	direction;
7525477518bSSrinivas Kandagatla 	u32	sample_rate;
7535477518bSSrinivas Kandagatla 	u16	bit_width;
7545477518bSSrinivas Kandagatla 	u16	bits_per_sample;
7555477518bSSrinivas Kandagatla 
7565477518bSSrinivas Kandagatla 	u16	data_format;
7575477518bSSrinivas Kandagatla 	u16	num_channels;
758a8ab6541SSrinivas Kandagatla 	u16	dp_idx;
759a8ab6541SSrinivas Kandagatla 	u32	channel_allocation;
7605477518bSSrinivas Kandagatla 	u32	sd_line_mask;
7615477518bSSrinivas Kandagatla 	int	fmt;
762e41521b6SMohammad Rafi Shaik 	struct snd_codec codec;
7635477518bSSrinivas Kandagatla 	u8 channel_map[AR_PCM_MAX_NUM_CHANNEL];
7645477518bSSrinivas Kandagatla };
7655477518bSSrinivas Kandagatla 
76644c28dbdSSrinivas Kandagatla /* Packet Allocation routines */
76744c28dbdSSrinivas Kandagatla void *audioreach_alloc_apm_cmd_pkt(int pkt_size, uint32_t opcode, uint32_t
76844c28dbdSSrinivas Kandagatla 				    token);
7695d5dd9bbSKrzysztof Kozlowski void audioreach_set_default_channel_mapping(u8 *ch_map, int num_channels);
77044c28dbdSSrinivas Kandagatla void *audioreach_alloc_cmd_pkt(int payload_size, uint32_t opcode,
77144c28dbdSSrinivas Kandagatla 			       uint32_t token, uint32_t src_port,
77244c28dbdSSrinivas Kandagatla 			       uint32_t dest_port);
77344c28dbdSSrinivas Kandagatla void *audioreach_alloc_apm_pkt(int pkt_size, uint32_t opcode, uint32_t token,
77444c28dbdSSrinivas Kandagatla 				uint32_t src_port);
77544c28dbdSSrinivas Kandagatla void *audioreach_alloc_pkt(int payload_size, uint32_t opcode,
77644c28dbdSSrinivas Kandagatla 			   uint32_t token, uint32_t src_port,
77744c28dbdSSrinivas Kandagatla 			   uint32_t dest_port);
778e4977b91SSrinivas Kandagatla void *audioreach_alloc_graph_pkt(struct q6apm *apm, struct audioreach_graph_info
779e4977b91SSrinivas Kandagatla 				 *info);
78036ad9bf1SSrinivas Kandagatla /* Topology specific */
78136ad9bf1SSrinivas Kandagatla int audioreach_tplg_init(struct snd_soc_component *component);
78236ad9bf1SSrinivas Kandagatla 
78325ab80dbSSrinivas Kandagatla /* Module specific */
78425ab80dbSSrinivas Kandagatla void audioreach_graph_free_buf(struct q6apm_graph *graph);
78525ab80dbSSrinivas Kandagatla int audioreach_map_memory_regions(struct q6apm_graph *graph,
78625ab80dbSSrinivas Kandagatla 				  unsigned int dir, size_t period_sz,
78725ab80dbSSrinivas Kandagatla 				  unsigned int periods,
78825ab80dbSSrinivas Kandagatla 				  bool is_contiguous);
78925ab80dbSSrinivas Kandagatla int audioreach_send_cmd_sync(struct device *dev, gpr_device_t *gdev, struct gpr_ibasic_rsp_result_t *result,
79025ab80dbSSrinivas Kandagatla 			     struct mutex *cmd_lock, gpr_port_t *port, wait_queue_head_t *cmd_wait,
79125ab80dbSSrinivas Kandagatla 			     struct gpr_pkt *pkt, uint32_t rsp_opcode);
79225ab80dbSSrinivas Kandagatla int audioreach_graph_send_cmd_sync(struct q6apm_graph *graph, struct gpr_pkt *pkt,
79325ab80dbSSrinivas Kandagatla 				   uint32_t rsp_opcode);
79425ab80dbSSrinivas Kandagatla int audioreach_set_media_format(struct q6apm_graph *graph,
79525ab80dbSSrinivas Kandagatla 				struct audioreach_module *module,
79625ab80dbSSrinivas Kandagatla 				struct audioreach_module_config *cfg);
79725ab80dbSSrinivas Kandagatla int audioreach_shared_memory_send_eos(struct q6apm_graph *graph);
79825ab80dbSSrinivas Kandagatla int audioreach_gain_set_vol_ctrl(struct q6apm *apm,
79925ab80dbSSrinivas Kandagatla 				 struct audioreach_module *module, int vol);
80069bff594SSrinivas Kandagatla int audioreach_send_u32_param(struct q6apm_graph *graph, struct audioreach_module *module,
80169bff594SSrinivas Kandagatla 			      uint32_t param_id, uint32_t param_val);
802e41521b6SMohammad Rafi Shaik int audioreach_compr_set_param(struct q6apm_graph *graph, struct audioreach_module_config *mcfg);
803e41521b6SMohammad Rafi Shaik 
80444c28dbdSSrinivas Kandagatla #endif /* __AUDIOREACH_H__ */
805