xref: /openbmc/linux/sound/soc/qcom/qdsp6/audioreach.h (revision 2612e3bbc0386368a850140a6c9b990cd496a5ec)
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
30*2c954a37SMohammad 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 PCM_CHANNEL_L		1
16244c28dbdSSrinivas Kandagatla #define PCM_CHANNEL_R		2
16344c28dbdSSrinivas Kandagatla #define SAMPLE_RATE_48K		48000
16444c28dbdSSrinivas Kandagatla #define BIT_WIDTH_16		16
16544c28dbdSSrinivas Kandagatla 
16644c28dbdSSrinivas Kandagatla #define APM_PARAM_ID_PROP_PORT_INFO		0x08001015
16744c28dbdSSrinivas Kandagatla 
16844c28dbdSSrinivas Kandagatla struct apm_modules_prop_info {
16944c28dbdSSrinivas Kandagatla 	uint32_t max_ip_port;
17044c28dbdSSrinivas Kandagatla 	uint32_t max_op_port;
17144c28dbdSSrinivas Kandagatla } __packed;
17244c28dbdSSrinivas Kandagatla 
17344c28dbdSSrinivas Kandagatla /* Shared memory module */
17444c28dbdSSrinivas Kandagatla #define DATA_CMD_WR_SH_MEM_EP_DATA_BUFFER	0x04001000
17544c28dbdSSrinivas Kandagatla #define WR_SH_MEM_EP_TIMESTAMP_VALID_FLAG	BIT(31)
17644c28dbdSSrinivas Kandagatla #define WR_SH_MEM_EP_LAST_BUFFER_FLAG		BIT(30)
17744c28dbdSSrinivas Kandagatla #define WR_SH_MEM_EP_TS_CONTINUE_FLAG		BIT(29)
17844c28dbdSSrinivas Kandagatla #define WR_SH_MEM_EP_EOF_FLAG			BIT(4)
17944c28dbdSSrinivas Kandagatla 
18044c28dbdSSrinivas Kandagatla struct apm_data_cmd_wr_sh_mem_ep_data_buffer {
18144c28dbdSSrinivas Kandagatla 	uint32_t buf_addr_lsw;
18244c28dbdSSrinivas Kandagatla 	uint32_t buf_addr_msw;
18344c28dbdSSrinivas Kandagatla 	uint32_t mem_map_handle;
18444c28dbdSSrinivas Kandagatla 	uint32_t buf_size;
18544c28dbdSSrinivas Kandagatla 	uint32_t timestamp_lsw;
18644c28dbdSSrinivas Kandagatla 	uint32_t timestamp_msw;
18744c28dbdSSrinivas Kandagatla 	uint32_t flags;
18844c28dbdSSrinivas Kandagatla } __packed;
18944c28dbdSSrinivas Kandagatla 
19044c28dbdSSrinivas Kandagatla #define DATA_CMD_WR_SH_MEM_EP_DATA_BUFFER_V2	0x0400100A
19144c28dbdSSrinivas Kandagatla 
19244c28dbdSSrinivas Kandagatla struct apm_data_cmd_wr_sh_mem_ep_data_buffer_v2 {
19344c28dbdSSrinivas Kandagatla 	uint32_t buf_addr_lsw;
19444c28dbdSSrinivas Kandagatla 	uint32_t buf_addr_msw;
19544c28dbdSSrinivas Kandagatla 	uint32_t mem_map_handle;
19644c28dbdSSrinivas Kandagatla 	uint32_t buf_size;
19744c28dbdSSrinivas Kandagatla 	uint32_t timestamp_lsw;
19844c28dbdSSrinivas Kandagatla 	uint32_t timestamp_msw;
19944c28dbdSSrinivas Kandagatla 	uint32_t flags;
20044c28dbdSSrinivas Kandagatla 	uint32_t md_addr_lsw;
20144c28dbdSSrinivas Kandagatla 	uint32_t md_addr_msw;
20244c28dbdSSrinivas Kandagatla 	uint32_t md_map_handle;
20344c28dbdSSrinivas Kandagatla 	uint32_t md_buf_size;
20444c28dbdSSrinivas Kandagatla } __packed;
20544c28dbdSSrinivas Kandagatla 
20644c28dbdSSrinivas Kandagatla #define DATA_CMD_RSP_WR_SH_MEM_EP_DATA_BUFFER_DONE	0x05001000
20744c28dbdSSrinivas Kandagatla 
20844c28dbdSSrinivas Kandagatla struct data_cmd_rsp_wr_sh_mem_ep_data_buffer_done {
20944c28dbdSSrinivas Kandagatla 	uint32_t buf_addr_lsw;
21044c28dbdSSrinivas Kandagatla 	uint32_t buf_addr_msw;
21144c28dbdSSrinivas Kandagatla 	uint32_t mem_map_handle;
21244c28dbdSSrinivas Kandagatla 	uint32_t status;
21344c28dbdSSrinivas Kandagatla 
21444c28dbdSSrinivas Kandagatla } __packed;
21544c28dbdSSrinivas Kandagatla 
21644c28dbdSSrinivas Kandagatla #define DATA_CMD_RSP_WR_SH_MEM_EP_DATA_BUFFER_DONE_V2	0x05001004
21744c28dbdSSrinivas Kandagatla 
21844c28dbdSSrinivas Kandagatla struct data_cmd_rsp_wr_sh_mem_ep_data_buffer_done_v2 {
21944c28dbdSSrinivas Kandagatla 	uint32_t buf_addr_lsw;
22044c28dbdSSrinivas Kandagatla 	uint32_t buf_addr_msw;
22144c28dbdSSrinivas Kandagatla 	uint32_t mem_map_handle;
22244c28dbdSSrinivas Kandagatla 	uint32_t status;
22344c28dbdSSrinivas Kandagatla 	uint32_t md_buf_addr_lsw;
22444c28dbdSSrinivas Kandagatla 	uint32_t md_buf_addr_msw;
22544c28dbdSSrinivas Kandagatla 	uint32_t md_mem_map_handle;
22644c28dbdSSrinivas Kandagatla 	uint32_t md_status;
22744c28dbdSSrinivas Kandagatla } __packed;
22844c28dbdSSrinivas Kandagatla 
22944c28dbdSSrinivas Kandagatla #define PARAM_ID_MEDIA_FORMAT				0x0800100C
23044c28dbdSSrinivas Kandagatla #define DATA_CMD_WR_SH_MEM_EP_MEDIA_FORMAT		0x04001001
23144c28dbdSSrinivas Kandagatla 
23244c28dbdSSrinivas Kandagatla struct apm_media_format {
23344c28dbdSSrinivas Kandagatla 	uint32_t data_format;
23444c28dbdSSrinivas Kandagatla 	uint32_t fmt_id;
23544c28dbdSSrinivas Kandagatla 	uint32_t payload_size;
23644c28dbdSSrinivas Kandagatla } __packed;
23744c28dbdSSrinivas Kandagatla 
238e41521b6SMohammad Rafi Shaik #define MEDIA_FMT_ID_FLAC	0x09001004
239e41521b6SMohammad Rafi Shaik 
240e41521b6SMohammad Rafi Shaik struct payload_media_fmt_flac_t {
241e41521b6SMohammad Rafi Shaik 	uint16_t num_channels;
242e41521b6SMohammad Rafi Shaik 	uint16_t sample_size;
243e41521b6SMohammad Rafi Shaik 	uint16_t min_blk_size;
244e41521b6SMohammad Rafi Shaik 	uint16_t max_blk_size;
245e41521b6SMohammad Rafi Shaik 	uint32_t sample_rate;
246e41521b6SMohammad Rafi Shaik 	uint32_t min_frame_size;
247e41521b6SMohammad Rafi Shaik 	uint32_t max_frame_size;
248e41521b6SMohammad Rafi Shaik } __packed;
249e41521b6SMohammad Rafi Shaik 
250e41521b6SMohammad Rafi Shaik #define MEDIA_FMT_ID_AAC	0x09001001
251e41521b6SMohammad Rafi Shaik 
252e41521b6SMohammad Rafi Shaik struct payload_media_fmt_aac_t {
253e41521b6SMohammad Rafi Shaik 	uint16_t aac_fmt_flag;
254e41521b6SMohammad Rafi Shaik 	uint16_t audio_obj_type;
255e41521b6SMohammad Rafi Shaik 	uint16_t num_channels;
256e41521b6SMohammad Rafi Shaik 	uint16_t total_size_of_PCE_bits;
257e41521b6SMohammad Rafi Shaik 	uint32_t sample_rate;
258e41521b6SMohammad Rafi Shaik } __packed;
259e41521b6SMohammad Rafi Shaik 
26044c28dbdSSrinivas Kandagatla #define DATA_CMD_WR_SH_MEM_EP_EOS			0x04001002
26144c28dbdSSrinivas Kandagatla #define WR_SH_MEM_EP_EOS_POLICY_LAST	1
26244c28dbdSSrinivas Kandagatla #define WR_SH_MEM_EP_EOS_POLICY_EACH	2
26344c28dbdSSrinivas Kandagatla 
26444c28dbdSSrinivas Kandagatla struct data_cmd_wr_sh_mem_ep_eos {
26544c28dbdSSrinivas Kandagatla 	uint32_t policy;
26644c28dbdSSrinivas Kandagatla 
26744c28dbdSSrinivas Kandagatla } __packed;
26844c28dbdSSrinivas Kandagatla 
26944c28dbdSSrinivas Kandagatla #define DATA_CMD_RD_SH_MEM_EP_DATA_BUFFER		0x04001003
27044c28dbdSSrinivas Kandagatla 
27144c28dbdSSrinivas Kandagatla struct data_cmd_rd_sh_mem_ep_data_buffer {
27244c28dbdSSrinivas Kandagatla 	uint32_t buf_addr_lsw;
27344c28dbdSSrinivas Kandagatla 	uint32_t buf_addr_msw;
27444c28dbdSSrinivas Kandagatla 	uint32_t mem_map_handle;
27544c28dbdSSrinivas Kandagatla 	uint32_t buf_size;
27644c28dbdSSrinivas Kandagatla } __packed;
27744c28dbdSSrinivas Kandagatla 
27844c28dbdSSrinivas Kandagatla #define DATA_CMD_RSP_RD_SH_MEM_EP_DATA_BUFFER		0x05001002
27944c28dbdSSrinivas Kandagatla 
28044c28dbdSSrinivas Kandagatla struct data_cmd_rsp_rd_sh_mem_ep_data_buffer_done {
28144c28dbdSSrinivas Kandagatla 	uint32_t status;
28244c28dbdSSrinivas Kandagatla 	uint32_t buf_addr_lsw;
28344c28dbdSSrinivas Kandagatla 	uint32_t buf_addr_msw;
28444c28dbdSSrinivas Kandagatla 	uint32_t mem_map_handle;
28544c28dbdSSrinivas Kandagatla 	uint32_t data_size;
28644c28dbdSSrinivas Kandagatla 	uint32_t offset;
28744c28dbdSSrinivas Kandagatla 	uint32_t timestamp_lsw;
28844c28dbdSSrinivas Kandagatla 	uint32_t timestamp_msw;
28944c28dbdSSrinivas Kandagatla 	uint32_t flags;
29044c28dbdSSrinivas Kandagatla 	uint32_t num_frames;
29144c28dbdSSrinivas Kandagatla } __packed;
29244c28dbdSSrinivas Kandagatla 
29344c28dbdSSrinivas Kandagatla #define DATA_CMD_RD_SH_MEM_EP_DATA_BUFFER_V2		0x0400100B
29444c28dbdSSrinivas Kandagatla 
29544c28dbdSSrinivas Kandagatla struct data_cmd_rd_sh_mem_ep_data_buffer_v2 {
29644c28dbdSSrinivas Kandagatla 	uint32_t buf_addr_lsw;
29744c28dbdSSrinivas Kandagatla 	uint32_t buf_addr_msw;
29844c28dbdSSrinivas Kandagatla 	uint32_t mem_map_handle;
29944c28dbdSSrinivas Kandagatla 	uint32_t buf_size;
30044c28dbdSSrinivas Kandagatla 	uint32_t md_buf_addr_lsw;
30144c28dbdSSrinivas Kandagatla 	uint32_t md_buf_addr_msw;
30244c28dbdSSrinivas Kandagatla 	uint32_t md_mem_map_handle;
30344c28dbdSSrinivas Kandagatla 	uint32_t md_buf_size;
30444c28dbdSSrinivas Kandagatla } __packed;
30544c28dbdSSrinivas Kandagatla 
30644c28dbdSSrinivas Kandagatla #define DATA_CMD_RSP_RD_SH_MEM_EP_DATA_BUFFER_V2	0x05001005
30744c28dbdSSrinivas Kandagatla 
30844c28dbdSSrinivas Kandagatla struct data_cmd_rsp_rd_sh_mem_ep_data_buffer_done_v2 {
30944c28dbdSSrinivas Kandagatla 	uint32_t status;
31044c28dbdSSrinivas Kandagatla 	uint32_t buf_addr_lsw;
31144c28dbdSSrinivas Kandagatla 	uint32_t buf_addr_msw;
31244c28dbdSSrinivas Kandagatla 	uint32_t mem_map_handle;
31344c28dbdSSrinivas Kandagatla 	uint32_t data_size;
31444c28dbdSSrinivas Kandagatla 	uint32_t offset;
31544c28dbdSSrinivas Kandagatla 	uint32_t timestamp_lsw;
31644c28dbdSSrinivas Kandagatla 	uint32_t timestamp_msw;
31744c28dbdSSrinivas Kandagatla 	uint32_t flags;
31844c28dbdSSrinivas Kandagatla 	uint32_t num_frames;
31944c28dbdSSrinivas Kandagatla 	uint32_t md_status;
32044c28dbdSSrinivas Kandagatla 	uint32_t md_buf_addr_lsw;
32144c28dbdSSrinivas Kandagatla 	uint32_t md_buf_addr_msw;
32244c28dbdSSrinivas Kandagatla 	uint32_t md_mem_map_handle;
32344c28dbdSSrinivas Kandagatla 	uint32_t md_size;
32444c28dbdSSrinivas Kandagatla } __packed;
32544c28dbdSSrinivas Kandagatla 
32644c28dbdSSrinivas Kandagatla #define PARAM_ID_RD_SH_MEM_CFG				0x08001007
32744c28dbdSSrinivas Kandagatla 
32844c28dbdSSrinivas Kandagatla struct param_id_rd_sh_mem_cfg {
32944c28dbdSSrinivas Kandagatla 	uint32_t num_frames_per_buffer;
33044c28dbdSSrinivas Kandagatla 	uint32_t metadata_control_flags;
33144c28dbdSSrinivas Kandagatla 
33244c28dbdSSrinivas Kandagatla } __packed;
33344c28dbdSSrinivas Kandagatla 
33444c28dbdSSrinivas Kandagatla #define DATA_CMD_WR_SH_MEM_EP_EOS_RENDERED		0x05001001
33544c28dbdSSrinivas Kandagatla 
33644c28dbdSSrinivas Kandagatla struct data_cmd_wr_sh_mem_ep_eos_rendered {
33744c28dbdSSrinivas Kandagatla 	uint32_t module_instance_id;
33844c28dbdSSrinivas Kandagatla 	uint32_t render_status;
33944c28dbdSSrinivas Kandagatla } __packed;
34044c28dbdSSrinivas Kandagatla 
34144c28dbdSSrinivas Kandagatla #define MODULE_ID_WR_SHARED_MEM_EP			0x07001000
34244c28dbdSSrinivas Kandagatla 
34344c28dbdSSrinivas Kandagatla struct apm_cmd_header {
34444c28dbdSSrinivas Kandagatla 	uint32_t payload_address_lsw;
34544c28dbdSSrinivas Kandagatla 	uint32_t payload_address_msw;
34644c28dbdSSrinivas Kandagatla 	uint32_t mem_map_handle;
34744c28dbdSSrinivas Kandagatla 	uint32_t payload_size;
34844c28dbdSSrinivas Kandagatla } __packed;
34944c28dbdSSrinivas Kandagatla 
35044c28dbdSSrinivas Kandagatla #define APM_CMD_HDR_SIZE sizeof(struct apm_cmd_header)
35144c28dbdSSrinivas Kandagatla 
35244c28dbdSSrinivas Kandagatla struct apm_module_param_data  {
35344c28dbdSSrinivas Kandagatla 	uint32_t module_instance_id;
35444c28dbdSSrinivas Kandagatla 	uint32_t param_id;
35544c28dbdSSrinivas Kandagatla 	uint32_t param_size;
35644c28dbdSSrinivas Kandagatla 	uint32_t error_code;
35744c28dbdSSrinivas Kandagatla } __packed;
35844c28dbdSSrinivas Kandagatla 
35944c28dbdSSrinivas Kandagatla #define APM_MODULE_PARAM_DATA_SIZE	sizeof(struct apm_module_param_data)
36044c28dbdSSrinivas Kandagatla 
36144c28dbdSSrinivas Kandagatla struct apm_module_param_shared_data  {
36244c28dbdSSrinivas Kandagatla 	uint32_t param_id;
36344c28dbdSSrinivas Kandagatla 	uint32_t param_size;
36444c28dbdSSrinivas Kandagatla } __packed;
36544c28dbdSSrinivas Kandagatla 
36644c28dbdSSrinivas Kandagatla struct apm_prop_data {
36744c28dbdSSrinivas Kandagatla 	uint32_t prop_id;
36844c28dbdSSrinivas Kandagatla 	uint32_t prop_size;
36944c28dbdSSrinivas Kandagatla } __packed;
37044c28dbdSSrinivas Kandagatla 
37144c28dbdSSrinivas Kandagatla /* Sub-Graph Properties */
37244c28dbdSSrinivas Kandagatla #define APM_PARAM_ID_SUB_GRAPH_CONFIG	0x08001001
37344c28dbdSSrinivas Kandagatla 
37444c28dbdSSrinivas Kandagatla struct apm_param_id_sub_graph_cfg {
37544c28dbdSSrinivas Kandagatla 	uint32_t num_sub_graphs;
37644c28dbdSSrinivas Kandagatla } __packed;
37744c28dbdSSrinivas Kandagatla 
37844c28dbdSSrinivas Kandagatla struct apm_sub_graph_cfg {
37944c28dbdSSrinivas Kandagatla 	uint32_t sub_graph_id;
38044c28dbdSSrinivas Kandagatla 	uint32_t num_sub_graph_prop;
38144c28dbdSSrinivas Kandagatla } __packed;
38244c28dbdSSrinivas Kandagatla 
38344c28dbdSSrinivas Kandagatla #define APM_SUB_GRAPH_PROP_ID_PERF_MODE		0x0800100E
38444c28dbdSSrinivas Kandagatla 
38544c28dbdSSrinivas Kandagatla struct apm_sg_prop_id_perf_mode {
38644c28dbdSSrinivas Kandagatla 	uint32_t perf_mode;
38744c28dbdSSrinivas Kandagatla } __packed;
38844c28dbdSSrinivas Kandagatla 
38944c28dbdSSrinivas Kandagatla #define APM_SG_PROP_ID_PERF_MODE_SIZE	4
39044c28dbdSSrinivas Kandagatla 
39144c28dbdSSrinivas Kandagatla #define APM_SUB_GRAPH_PROP_ID_DIRECTION	0x0800100F
39244c28dbdSSrinivas Kandagatla 
39344c28dbdSSrinivas Kandagatla struct apm_sg_prop_id_direction {
39444c28dbdSSrinivas Kandagatla 	uint32_t direction;
39544c28dbdSSrinivas Kandagatla } __packed;
39644c28dbdSSrinivas Kandagatla 
39744c28dbdSSrinivas Kandagatla #define APM_SG_PROP_ID_DIR_SIZE		4
39844c28dbdSSrinivas Kandagatla 
39944c28dbdSSrinivas Kandagatla #define APM_SUB_GRAPH_PROP_ID_SCENARIO_ID	0x08001010
40044c28dbdSSrinivas Kandagatla #define APM_SUB_GRAPH_SID_AUDIO_PLAYBACK	0x1
40144c28dbdSSrinivas Kandagatla #define APM_SUB_GRAPH_SID_AUDIO_RECORD		0x2
40244c28dbdSSrinivas Kandagatla #define APM_SUB_GRAPH_SID_AUDIO_VOICE_CALL	0x3
40344c28dbdSSrinivas Kandagatla 
40444c28dbdSSrinivas Kandagatla struct apm_sg_prop_id_scenario_id {
40544c28dbdSSrinivas Kandagatla 	uint32_t scenario_id;
40644c28dbdSSrinivas Kandagatla } __packed;
40744c28dbdSSrinivas Kandagatla 
40844c28dbdSSrinivas Kandagatla #define APM_SG_PROP_ID_SID_SIZE			4
40944c28dbdSSrinivas Kandagatla /* container api */
41044c28dbdSSrinivas Kandagatla #define APM_PARAM_ID_CONTAINER_CONFIG		0x08001000
41144c28dbdSSrinivas Kandagatla 
41244c28dbdSSrinivas Kandagatla struct apm_param_id_container_cfg {
41344c28dbdSSrinivas Kandagatla 	uint32_t num_containers;
41444c28dbdSSrinivas Kandagatla } __packed;
41544c28dbdSSrinivas Kandagatla 
41644c28dbdSSrinivas Kandagatla struct apm_container_cfg {
41744c28dbdSSrinivas Kandagatla 	uint32_t container_id;
41844c28dbdSSrinivas Kandagatla 	uint32_t num_prop;
41944c28dbdSSrinivas Kandagatla } __packed;
42044c28dbdSSrinivas Kandagatla 
42144c28dbdSSrinivas Kandagatla struct apm_cont_capability  {
42244c28dbdSSrinivas Kandagatla 	uint32_t capability_id;
42344c28dbdSSrinivas Kandagatla } __packed;
42444c28dbdSSrinivas Kandagatla 
42544c28dbdSSrinivas Kandagatla #define APM_CONTAINER_PROP_ID_CAPABILITY_LIST	0x08001011
42644c28dbdSSrinivas Kandagatla #define APM_CONTAINER_PROP_ID_CAPABILITY_SIZE	8
42744c28dbdSSrinivas Kandagatla 
42844c28dbdSSrinivas Kandagatla #define APM_PROP_ID_INVALID			0x0
42944c28dbdSSrinivas Kandagatla #define APM_CONTAINER_CAP_ID_PP			0x1
43044c28dbdSSrinivas Kandagatla #define APM_CONTAINER_CAP_ID_PP			0x1
43144c28dbdSSrinivas Kandagatla 
43244c28dbdSSrinivas Kandagatla struct apm_cont_prop_id_cap_list  {
43344c28dbdSSrinivas Kandagatla 	uint32_t num_capability_id;
43444c28dbdSSrinivas Kandagatla } __packed;
43544c28dbdSSrinivas Kandagatla 
43644c28dbdSSrinivas Kandagatla #define APM_CONTAINER_PROP_ID_GRAPH_POS		0x08001012
43744c28dbdSSrinivas Kandagatla 
43844c28dbdSSrinivas Kandagatla struct apm_cont_prop_id_graph_pos  {
43944c28dbdSSrinivas Kandagatla 	uint32_t graph_pos;
44044c28dbdSSrinivas Kandagatla } __packed;
44144c28dbdSSrinivas Kandagatla 
44244c28dbdSSrinivas Kandagatla #define APM_CONTAINER_PROP_ID_STACK_SIZE	0x08001013
44344c28dbdSSrinivas Kandagatla 
44444c28dbdSSrinivas Kandagatla struct apm_cont_prop_id_stack_size  {
44544c28dbdSSrinivas Kandagatla 	uint32_t stack_size;
44644c28dbdSSrinivas Kandagatla } __packed;
44744c28dbdSSrinivas Kandagatla 
44844c28dbdSSrinivas Kandagatla #define APM_CONTAINER_PROP_ID_PROC_DOMAIN	0x08001014
44944c28dbdSSrinivas Kandagatla 
45044c28dbdSSrinivas Kandagatla struct apm_cont_prop_id_domain  {
45144c28dbdSSrinivas Kandagatla 	uint32_t proc_domain;
45244c28dbdSSrinivas Kandagatla } __packed;
45344c28dbdSSrinivas Kandagatla 
45444c28dbdSSrinivas Kandagatla #define CONFIG_I2S_WS_SRC_EXTERNAL		0x0
45544c28dbdSSrinivas Kandagatla #define CONFIG_I2S_WS_SRC_INTERNAL		0x1
45644c28dbdSSrinivas Kandagatla 
45744c28dbdSSrinivas Kandagatla #define PARAM_ID_I2S_INTF_CFG			0x08001019
45844c28dbdSSrinivas Kandagatla struct param_id_i2s_intf_cfg {
45944c28dbdSSrinivas Kandagatla 	uint32_t lpaif_type;
46044c28dbdSSrinivas Kandagatla 	uint32_t intf_idx;
46144c28dbdSSrinivas Kandagatla 	uint16_t sd_line_idx;
46244c28dbdSSrinivas Kandagatla 	uint16_t ws_src;
46344c28dbdSSrinivas Kandagatla } __packed;
46444c28dbdSSrinivas Kandagatla 
46544c28dbdSSrinivas Kandagatla #define I2S_INTF_TYPE_PRIMARY		0
46644c28dbdSSrinivas Kandagatla #define I2S_INTF_TYPE_SECOINDARY	1
46744c28dbdSSrinivas Kandagatla #define I2S_INTF_TYPE_TERTINARY		2
46844c28dbdSSrinivas Kandagatla #define I2S_INTF_TYPE_QUATERNARY	3
46944c28dbdSSrinivas Kandagatla #define I2S_INTF_TYPE_QUINARY		4
47044c28dbdSSrinivas Kandagatla #define I2S_SD0				1
47144c28dbdSSrinivas Kandagatla #define I2S_SD1				2
47244c28dbdSSrinivas Kandagatla #define I2S_SD2				3
47344c28dbdSSrinivas Kandagatla #define I2S_SD3				4
47444c28dbdSSrinivas Kandagatla 
47544c28dbdSSrinivas Kandagatla #define PORT_ID_I2S_INPUT		2
47644c28dbdSSrinivas Kandagatla #define PORT_ID_I2S_OUPUT		1
47744c28dbdSSrinivas Kandagatla #define I2S_STACK_SIZE			2048
47844c28dbdSSrinivas Kandagatla 
479a8ab6541SSrinivas Kandagatla #define PARAM_ID_DISPLAY_PORT_INTF_CFG		0x08001154
480a8ab6541SSrinivas Kandagatla 
481a8ab6541SSrinivas Kandagatla struct param_id_display_port_intf_cfg {
482a8ab6541SSrinivas Kandagatla 	uint32_t channel_allocation;
483a8ab6541SSrinivas Kandagatla 	/* Multi-Steam Transport index */
484a8ab6541SSrinivas Kandagatla 	uint32_t mst_idx;
485a8ab6541SSrinivas Kandagatla 	uint32_t dptx_idx;
486a8ab6541SSrinivas Kandagatla } __packed;
487a8ab6541SSrinivas Kandagatla 
48844c28dbdSSrinivas Kandagatla #define PARAM_ID_HW_EP_MF_CFG			0x08001017
48944c28dbdSSrinivas Kandagatla struct param_id_hw_ep_mf {
49044c28dbdSSrinivas Kandagatla 	uint32_t sample_rate;
49144c28dbdSSrinivas Kandagatla 	uint16_t bit_width;
49244c28dbdSSrinivas Kandagatla 	uint16_t num_channels;
49344c28dbdSSrinivas Kandagatla 	uint32_t data_format;
49444c28dbdSSrinivas Kandagatla } __packed;
49544c28dbdSSrinivas Kandagatla 
49644c28dbdSSrinivas Kandagatla #define PARAM_ID_HW_EP_FRAME_SIZE_FACTOR	0x08001018
49744c28dbdSSrinivas Kandagatla 
49844c28dbdSSrinivas Kandagatla struct param_id_fram_size_factor {
49944c28dbdSSrinivas Kandagatla 	uint32_t frame_size_factor;
50044c28dbdSSrinivas Kandagatla } __packed;
50144c28dbdSSrinivas Kandagatla 
50244c28dbdSSrinivas Kandagatla #define APM_CONTAINER_PROP_ID_PARENT_CONTAINER_ID	0x080010CB
50344c28dbdSSrinivas Kandagatla 
50444c28dbdSSrinivas Kandagatla struct apm_cont_prop_id_parent_container  {
50544c28dbdSSrinivas Kandagatla 	uint32_t parent_container_id;
50644c28dbdSSrinivas Kandagatla } __packed;
50744c28dbdSSrinivas Kandagatla 
50844c28dbdSSrinivas Kandagatla #define APM_CONTAINER_PROP_ID_HEAP_ID			0x08001174
50944c28dbdSSrinivas Kandagatla #define APM_CONT_HEAP_DEFAULT				0x1
51044c28dbdSSrinivas Kandagatla #define APM_CONT_HEAP_LOW_POWER				0x2
51144c28dbdSSrinivas Kandagatla 
51244c28dbdSSrinivas Kandagatla struct apm_cont_prop_id_headp_id  {
51344c28dbdSSrinivas Kandagatla 	uint32_t heap_id;
51444c28dbdSSrinivas Kandagatla } __packed;
51544c28dbdSSrinivas Kandagatla 
51644c28dbdSSrinivas Kandagatla struct apm_modules_list {
51744c28dbdSSrinivas Kandagatla 	uint32_t sub_graph_id;
51844c28dbdSSrinivas Kandagatla 	uint32_t container_id;
51944c28dbdSSrinivas Kandagatla 	uint32_t num_modules;
52044c28dbdSSrinivas Kandagatla } __packed;
52144c28dbdSSrinivas Kandagatla 
52244c28dbdSSrinivas Kandagatla struct apm_module_obj {
52344c28dbdSSrinivas Kandagatla 	uint32_t module_id;
52444c28dbdSSrinivas Kandagatla 	uint32_t instance_id;
52544c28dbdSSrinivas Kandagatla } __packed;
52644c28dbdSSrinivas Kandagatla 
52744c28dbdSSrinivas Kandagatla #define APM_MODULE_PROP_ID_PORT_INFO		0x08001015
52844c28dbdSSrinivas Kandagatla #define APM_MODULE_PROP_ID_PORT_INFO_SZ		8
52944c28dbdSSrinivas Kandagatla struct apm_module_prop_id_port_info {
53044c28dbdSSrinivas Kandagatla 	uint32_t max_ip_port;
53144c28dbdSSrinivas Kandagatla 	uint32_t max_op_port;
53244c28dbdSSrinivas Kandagatla } __packed;
53344c28dbdSSrinivas Kandagatla 
53444c28dbdSSrinivas Kandagatla #define DATA_LOGGING_MAX_INPUT_PORTS		0x1
53544c28dbdSSrinivas Kandagatla #define DATA_LOGGING_MAX_OUTPUT_PORTS		0x1
53644c28dbdSSrinivas Kandagatla #define DATA_LOGGING_STACK_SIZE			2048
53744c28dbdSSrinivas Kandagatla #define PARAM_ID_DATA_LOGGING_CONFIG		0x08001031
53844c28dbdSSrinivas Kandagatla 
53944c28dbdSSrinivas Kandagatla struct data_logging_config {
54044c28dbdSSrinivas Kandagatla 	uint32_t log_code;
54144c28dbdSSrinivas Kandagatla 	uint32_t log_tap_point_id;
54244c28dbdSSrinivas Kandagatla 	uint32_t mode;
54344c28dbdSSrinivas Kandagatla } __packed;
54444c28dbdSSrinivas Kandagatla 
545a934afdbSSrinivas Kandagatla #define PARAM_ID_SAL_OUTPUT_CFG			0x08001016
546a934afdbSSrinivas Kandagatla struct param_id_sal_output_config {
547a934afdbSSrinivas Kandagatla 	uint32_t bits_per_sample;
548a934afdbSSrinivas Kandagatla } __packed;
549a934afdbSSrinivas Kandagatla 
550a934afdbSSrinivas Kandagatla #define PARAM_ID_SAL_LIMITER_ENABLE		0x0800101E
551a934afdbSSrinivas Kandagatla struct param_id_sal_limiter_enable {
552a934afdbSSrinivas Kandagatla 	uint32_t enable_lim;
553a934afdbSSrinivas Kandagatla } __packed;
554a934afdbSSrinivas Kandagatla 
55544c28dbdSSrinivas Kandagatla #define PARAM_ID_MFC_OUTPUT_MEDIA_FORMAT	0x08001024
556*2c954a37SMohammad Rafi Shaik #define PARAM_ID_EARLY_EOS_DELAY		0x0800114C
557*2c954a37SMohammad Rafi Shaik #define EARLY_EOS_DELAY_MS			150
55844c28dbdSSrinivas Kandagatla 
55944c28dbdSSrinivas Kandagatla struct param_id_mfc_media_format {
56044c28dbdSSrinivas Kandagatla 	uint32_t sample_rate;
56144c28dbdSSrinivas Kandagatla 	uint16_t bit_width;
56244c28dbdSSrinivas Kandagatla 	uint16_t num_channels;
56344c28dbdSSrinivas Kandagatla 	uint16_t channel_mapping[];
56444c28dbdSSrinivas Kandagatla } __packed;
56544c28dbdSSrinivas Kandagatla 
566*2c954a37SMohammad Rafi Shaik struct param_id_gapless_early_eos_delay_t {
567*2c954a37SMohammad Rafi Shaik 	uint32_t early_eos_delay_ms;
568*2c954a37SMohammad Rafi Shaik } __packed;
569*2c954a37SMohammad Rafi Shaik 
57044c28dbdSSrinivas Kandagatla struct media_format {
57144c28dbdSSrinivas Kandagatla 	uint32_t data_format;
57244c28dbdSSrinivas Kandagatla 	uint32_t fmt_id;
57344c28dbdSSrinivas Kandagatla 	uint32_t payload_size;
57444c28dbdSSrinivas Kandagatla } __packed;
57544c28dbdSSrinivas Kandagatla 
57644c28dbdSSrinivas Kandagatla struct payload_media_fmt_pcm {
57744c28dbdSSrinivas Kandagatla 	uint32_t sample_rate;
57844c28dbdSSrinivas Kandagatla 	uint16_t bit_width;
57944c28dbdSSrinivas Kandagatla 	uint16_t alignment;
58044c28dbdSSrinivas Kandagatla 	uint16_t bits_per_sample;
58144c28dbdSSrinivas Kandagatla 	uint16_t q_factor;
58244c28dbdSSrinivas Kandagatla 	uint16_t endianness;
58344c28dbdSSrinivas Kandagatla 	uint16_t num_channels;
58444c28dbdSSrinivas Kandagatla 	uint8_t channel_mapping[];
58544c28dbdSSrinivas Kandagatla } __packed;
58644c28dbdSSrinivas Kandagatla 
5876648a6dcSSrinivas Kandagatla #define PARAM_ID_MODULE_ENABLE			0x08001026
5886648a6dcSSrinivas Kandagatla struct param_id_module_enable {
5896648a6dcSSrinivas Kandagatla 	uint32_t enable;
5906648a6dcSSrinivas Kandagatla } __packed;
5916648a6dcSSrinivas Kandagatla 
59244c28dbdSSrinivas Kandagatla #define PARAM_ID_CODEC_DMA_INTF_CFG		0x08001063
59344c28dbdSSrinivas Kandagatla 
59444c28dbdSSrinivas Kandagatla struct param_id_codec_dma_intf_cfg {
59544c28dbdSSrinivas Kandagatla 	/* 1 - RXTX
59644c28dbdSSrinivas Kandagatla 	 * 2 - WSA
59744c28dbdSSrinivas Kandagatla 	 * 3 - VA
59844c28dbdSSrinivas Kandagatla 	 * 4 - AXI
59944c28dbdSSrinivas Kandagatla 	 */
60044c28dbdSSrinivas Kandagatla 	uint32_t lpaif_type;
60144c28dbdSSrinivas Kandagatla 	/*
60244c28dbdSSrinivas Kandagatla 	 *  RX0 | TX0 = 1
60344c28dbdSSrinivas Kandagatla 	 *  RX1 | TX1 = 2
60444c28dbdSSrinivas Kandagatla 	 *  RX2 | TX2 = 3... so on
60544c28dbdSSrinivas Kandagatla 	 */
60644c28dbdSSrinivas Kandagatla 	uint32_t intf_index;
60744c28dbdSSrinivas Kandagatla 	uint32_t active_channels_mask;
60844c28dbdSSrinivas Kandagatla } __packed;
60944c28dbdSSrinivas Kandagatla 
61044c28dbdSSrinivas Kandagatla struct audio_hw_clk_cfg {
61144c28dbdSSrinivas Kandagatla 	uint32_t clock_id;
61244c28dbdSSrinivas Kandagatla 	uint32_t clock_freq;
61344c28dbdSSrinivas Kandagatla 	uint32_t clock_attri;
61444c28dbdSSrinivas Kandagatla 	uint32_t clock_root;
61544c28dbdSSrinivas Kandagatla } __packed;
61644c28dbdSSrinivas Kandagatla 
6172f206404SSrinivas Kandagatla struct audio_hw_clk_rel_cfg {
6182f206404SSrinivas Kandagatla 	uint32_t clock_id;
6192f206404SSrinivas Kandagatla } __packed;
6202f206404SSrinivas Kandagatla 
62144c28dbdSSrinivas Kandagatla #define PARAM_ID_HW_EP_POWER_MODE_CFG	0x8001176
62244c28dbdSSrinivas Kandagatla #define AR_HW_EP_POWER_MODE_0	0 /* default */
62344c28dbdSSrinivas Kandagatla #define AR_HW_EP_POWER_MODE_1	1 /* XO Shutdown allowed */
62444c28dbdSSrinivas Kandagatla #define AR_HW_EP_POWER_MODE_2	2 /* XO Shutdown not allowed */
62544c28dbdSSrinivas Kandagatla 
62644c28dbdSSrinivas Kandagatla struct param_id_hw_ep_power_mode_cfg {
62744c28dbdSSrinivas Kandagatla 	uint32_t power_mode;
62844c28dbdSSrinivas Kandagatla } __packed;
62944c28dbdSSrinivas Kandagatla 
63044c28dbdSSrinivas Kandagatla #define PARAM_ID_HW_EP_DMA_DATA_ALIGN	0x08001233
63144c28dbdSSrinivas Kandagatla #define AR_HW_EP_DMA_DATA_ALIGN_MSB	0
63244c28dbdSSrinivas Kandagatla #define AR_HW_EP_DMA_DATA_ALIGN_LSB	1
63344c28dbdSSrinivas Kandagatla #define AR_PCM_MAX_NUM_CHANNEL		8
63444c28dbdSSrinivas Kandagatla 
63544c28dbdSSrinivas Kandagatla struct param_id_hw_ep_dma_data_align {
63644c28dbdSSrinivas Kandagatla 	uint32_t dma_data_align;
63744c28dbdSSrinivas Kandagatla } __packed;
63844c28dbdSSrinivas Kandagatla 
63925ab80dbSSrinivas Kandagatla #define PARAM_ID_VOL_CTRL_MASTER_GAIN	0x08001035
64025ab80dbSSrinivas Kandagatla #define VOL_CTRL_DEFAULT_GAIN		0x2000
64125ab80dbSSrinivas Kandagatla 
64225ab80dbSSrinivas Kandagatla struct param_id_vol_ctrl_master_gain {
64325ab80dbSSrinivas Kandagatla 	uint16_t master_gain;
64425ab80dbSSrinivas Kandagatla 	uint16_t reserved;
64525ab80dbSSrinivas Kandagatla } __packed;
64625ab80dbSSrinivas Kandagatla 
64725ab80dbSSrinivas Kandagatla 
648c7548f59SSrinivas Kandagatla #define PARAM_ID_REMOVE_INITIAL_SILENCE		0x0800114B
649c7548f59SSrinivas Kandagatla #define PARAM_ID_REMOVE_TRAILING_SILENCE	0x0800115D
650c7548f59SSrinivas Kandagatla 
651c7548f59SSrinivas Kandagatla #define PARAM_ID_REAL_MODULE_ID	0x0800100B
652c7548f59SSrinivas Kandagatla 
653c7548f59SSrinivas Kandagatla struct param_id_placeholder_real_module_id {
654c7548f59SSrinivas Kandagatla 	uint32_t real_module_id;
655c7548f59SSrinivas Kandagatla } __packed;
656c7548f59SSrinivas Kandagatla 
65744c28dbdSSrinivas Kandagatla /* Graph */
65844c28dbdSSrinivas Kandagatla struct audioreach_connection {
65944c28dbdSSrinivas Kandagatla 	/* Connections */
66044c28dbdSSrinivas Kandagatla 	uint32_t src_mod_inst_id;
66144c28dbdSSrinivas Kandagatla 	uint32_t src_mod_op_port_id;
66244c28dbdSSrinivas Kandagatla 	uint32_t dst_mod_inst_id;
66344c28dbdSSrinivas Kandagatla 	uint32_t dst_mod_ip_port_id;
66444c28dbdSSrinivas Kandagatla 	struct list_head node;
66544c28dbdSSrinivas Kandagatla };
66644c28dbdSSrinivas Kandagatla 
66744c28dbdSSrinivas Kandagatla struct audioreach_graph_info {
66844c28dbdSSrinivas Kandagatla 	int id;
66944c28dbdSSrinivas Kandagatla 	uint32_t num_sub_graphs;
67044c28dbdSSrinivas Kandagatla 	struct list_head sg_list;
671e4977b91SSrinivas Kandagatla 	/* DPCM connection from FE Graph to BE graph */
672e4977b91SSrinivas Kandagatla 	uint32_t src_mod_inst_id;
673e4977b91SSrinivas Kandagatla 	uint32_t src_mod_op_port_id;
674e4977b91SSrinivas Kandagatla 	uint32_t dst_mod_inst_id;
675e4977b91SSrinivas Kandagatla 	uint32_t dst_mod_ip_port_id;
67644c28dbdSSrinivas Kandagatla };
67744c28dbdSSrinivas Kandagatla 
67844c28dbdSSrinivas Kandagatla struct audioreach_sub_graph {
67944c28dbdSSrinivas Kandagatla 	uint32_t sub_graph_id;
68044c28dbdSSrinivas Kandagatla 	uint32_t perf_mode;
68144c28dbdSSrinivas Kandagatla 	uint32_t direction;
68244c28dbdSSrinivas Kandagatla 	uint32_t scenario_id;
68344c28dbdSSrinivas Kandagatla 	struct list_head node;
68444c28dbdSSrinivas Kandagatla 
68544c28dbdSSrinivas Kandagatla 	struct audioreach_graph_info *info;
68644c28dbdSSrinivas Kandagatla 	uint32_t num_containers;
68744c28dbdSSrinivas Kandagatla 	struct list_head container_list;
68844c28dbdSSrinivas Kandagatla };
68944c28dbdSSrinivas Kandagatla 
69044c28dbdSSrinivas Kandagatla struct audioreach_container {
69144c28dbdSSrinivas Kandagatla 	uint32_t container_id;
69244c28dbdSSrinivas Kandagatla 	uint32_t capability_id;
69344c28dbdSSrinivas Kandagatla 	uint32_t graph_pos;
69444c28dbdSSrinivas Kandagatla 	uint32_t stack_size;
69544c28dbdSSrinivas Kandagatla 	uint32_t proc_domain;
69644c28dbdSSrinivas Kandagatla 	struct list_head node;
69744c28dbdSSrinivas Kandagatla 
69844c28dbdSSrinivas Kandagatla 	uint32_t num_modules;
69944c28dbdSSrinivas Kandagatla 	struct list_head modules_list;
70044c28dbdSSrinivas Kandagatla 	struct audioreach_sub_graph *sub_graph;
70144c28dbdSSrinivas Kandagatla };
70244c28dbdSSrinivas Kandagatla 
70303365d6aSSrinivas Kandagatla #define AR_MAX_MOD_LINKS	8
70403365d6aSSrinivas Kandagatla 
70544c28dbdSSrinivas Kandagatla struct audioreach_module {
70644c28dbdSSrinivas Kandagatla 	uint32_t module_id;
70744c28dbdSSrinivas Kandagatla 	uint32_t instance_id;
70844c28dbdSSrinivas Kandagatla 
70944c28dbdSSrinivas Kandagatla 	uint32_t max_ip_port;
71044c28dbdSSrinivas Kandagatla 	uint32_t max_op_port;
71144c28dbdSSrinivas Kandagatla 
71244c28dbdSSrinivas Kandagatla 	uint32_t in_port;
71344c28dbdSSrinivas Kandagatla 	uint32_t out_port;
71444c28dbdSSrinivas Kandagatla 
71503365d6aSSrinivas Kandagatla 	uint32_t num_connections;
71644c28dbdSSrinivas Kandagatla 	/* Connections */
71744c28dbdSSrinivas Kandagatla 	uint32_t src_mod_inst_id;
71803365d6aSSrinivas Kandagatla 	uint32_t src_mod_op_port_id[AR_MAX_MOD_LINKS];
71903365d6aSSrinivas Kandagatla 	uint32_t dst_mod_inst_id[AR_MAX_MOD_LINKS];
72003365d6aSSrinivas Kandagatla 	uint32_t dst_mod_ip_port_id[AR_MAX_MOD_LINKS];
72144c28dbdSSrinivas Kandagatla 
72244c28dbdSSrinivas Kandagatla 	/* Format specifics */
72344c28dbdSSrinivas Kandagatla 	uint32_t ch_fmt;
72444c28dbdSSrinivas Kandagatla 	uint32_t rate;
72544c28dbdSSrinivas Kandagatla 	uint32_t bit_depth;
72644c28dbdSSrinivas Kandagatla 
72744c28dbdSSrinivas Kandagatla 	/* I2S module */
72844c28dbdSSrinivas Kandagatla 	uint32_t hw_interface_idx;
72944c28dbdSSrinivas Kandagatla 	uint32_t sd_line_idx;
73044c28dbdSSrinivas Kandagatla 	uint32_t ws_src;
73144c28dbdSSrinivas Kandagatla 	uint32_t frame_size_factor;
73244c28dbdSSrinivas Kandagatla 	uint32_t data_format;
73344c28dbdSSrinivas Kandagatla 	uint32_t hw_interface_type;
73444c28dbdSSrinivas Kandagatla 
73544c28dbdSSrinivas Kandagatla 	/* PCM module specific */
73644c28dbdSSrinivas Kandagatla 	uint32_t interleave_type;
73744c28dbdSSrinivas Kandagatla 
73844c28dbdSSrinivas Kandagatla 	/* GAIN/Vol Control Module */
73944c28dbdSSrinivas Kandagatla 	uint16_t gain;
74044c28dbdSSrinivas Kandagatla 
74144c28dbdSSrinivas Kandagatla 	/* Logging */
74244c28dbdSSrinivas Kandagatla 	uint32_t log_code;
74344c28dbdSSrinivas Kandagatla 	uint32_t log_tap_point_id;
74444c28dbdSSrinivas Kandagatla 	uint32_t log_mode;
74544c28dbdSSrinivas Kandagatla 
74644c28dbdSSrinivas Kandagatla 	/* bookkeeping */
74744c28dbdSSrinivas Kandagatla 	struct list_head node;
74844c28dbdSSrinivas Kandagatla 	struct audioreach_container *container;
74944c28dbdSSrinivas Kandagatla 	struct snd_soc_dapm_widget *widget;
75044c28dbdSSrinivas Kandagatla };
75144c28dbdSSrinivas Kandagatla 
7525477518bSSrinivas Kandagatla struct audioreach_module_config {
7535477518bSSrinivas Kandagatla 	int	direction;
7545477518bSSrinivas Kandagatla 	u32	sample_rate;
7555477518bSSrinivas Kandagatla 	u16	bit_width;
7565477518bSSrinivas Kandagatla 	u16	bits_per_sample;
7575477518bSSrinivas Kandagatla 
7585477518bSSrinivas Kandagatla 	u16	data_format;
7595477518bSSrinivas Kandagatla 	u16	num_channels;
7605477518bSSrinivas Kandagatla 	u16	active_channels_mask;
761a8ab6541SSrinivas Kandagatla 	u16	dp_idx;
762a8ab6541SSrinivas Kandagatla 	u32	channel_allocation;
7635477518bSSrinivas Kandagatla 	u32	sd_line_mask;
7645477518bSSrinivas Kandagatla 	int	fmt;
765e41521b6SMohammad Rafi Shaik 	struct snd_codec codec;
7665477518bSSrinivas Kandagatla 	u8 channel_map[AR_PCM_MAX_NUM_CHANNEL];
7675477518bSSrinivas Kandagatla };
7685477518bSSrinivas Kandagatla 
76944c28dbdSSrinivas Kandagatla /* Packet Allocation routines */
77044c28dbdSSrinivas Kandagatla void *audioreach_alloc_apm_cmd_pkt(int pkt_size, uint32_t opcode, uint32_t
77144c28dbdSSrinivas Kandagatla 				    token);
77244c28dbdSSrinivas Kandagatla void *audioreach_alloc_cmd_pkt(int payload_size, uint32_t opcode,
77344c28dbdSSrinivas Kandagatla 			       uint32_t token, uint32_t src_port,
77444c28dbdSSrinivas Kandagatla 			       uint32_t dest_port);
77544c28dbdSSrinivas Kandagatla void *audioreach_alloc_apm_pkt(int pkt_size, uint32_t opcode, uint32_t token,
77644c28dbdSSrinivas Kandagatla 				uint32_t src_port);
77744c28dbdSSrinivas Kandagatla void *audioreach_alloc_pkt(int payload_size, uint32_t opcode,
77844c28dbdSSrinivas Kandagatla 			   uint32_t token, uint32_t src_port,
77944c28dbdSSrinivas Kandagatla 			   uint32_t dest_port);
780e4977b91SSrinivas Kandagatla void *audioreach_alloc_graph_pkt(struct q6apm *apm, struct audioreach_graph_info
781e4977b91SSrinivas Kandagatla 				 *info);
78236ad9bf1SSrinivas Kandagatla /* Topology specific */
78336ad9bf1SSrinivas Kandagatla int audioreach_tplg_init(struct snd_soc_component *component);
78436ad9bf1SSrinivas Kandagatla 
78525ab80dbSSrinivas Kandagatla /* Module specific */
78625ab80dbSSrinivas Kandagatla void audioreach_graph_free_buf(struct q6apm_graph *graph);
78725ab80dbSSrinivas Kandagatla int audioreach_map_memory_regions(struct q6apm_graph *graph,
78825ab80dbSSrinivas Kandagatla 				  unsigned int dir, size_t period_sz,
78925ab80dbSSrinivas Kandagatla 				  unsigned int periods,
79025ab80dbSSrinivas Kandagatla 				  bool is_contiguous);
79125ab80dbSSrinivas Kandagatla int audioreach_send_cmd_sync(struct device *dev, gpr_device_t *gdev, struct gpr_ibasic_rsp_result_t *result,
79225ab80dbSSrinivas Kandagatla 			     struct mutex *cmd_lock, gpr_port_t *port, wait_queue_head_t *cmd_wait,
79325ab80dbSSrinivas Kandagatla 			     struct gpr_pkt *pkt, uint32_t rsp_opcode);
79425ab80dbSSrinivas Kandagatla int audioreach_graph_send_cmd_sync(struct q6apm_graph *graph, struct gpr_pkt *pkt,
79525ab80dbSSrinivas Kandagatla 				   uint32_t rsp_opcode);
79625ab80dbSSrinivas Kandagatla int audioreach_set_media_format(struct q6apm_graph *graph,
79725ab80dbSSrinivas Kandagatla 				struct audioreach_module *module,
79825ab80dbSSrinivas Kandagatla 				struct audioreach_module_config *cfg);
79925ab80dbSSrinivas Kandagatla int audioreach_shared_memory_send_eos(struct q6apm_graph *graph);
80025ab80dbSSrinivas Kandagatla int audioreach_gain_set_vol_ctrl(struct q6apm *apm,
80125ab80dbSSrinivas Kandagatla 				 struct audioreach_module *module, int vol);
80269bff594SSrinivas Kandagatla int audioreach_send_u32_param(struct q6apm_graph *graph, struct audioreach_module *module,
80369bff594SSrinivas Kandagatla 			      uint32_t param_id, uint32_t param_val);
804e41521b6SMohammad Rafi Shaik int audioreach_compr_set_param(struct q6apm_graph *graph, struct audioreach_module_config *mcfg);
805e41521b6SMohammad Rafi Shaik 
80644c28dbdSSrinivas Kandagatla #endif /* __AUDIOREACH_H__ */
807