731 lines
		
	
	
		
			17 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			731 lines
		
	
	
		
			17 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| /* SPDX-License-Identifier: GPL-2.0 */
 | |
| 
 | |
| #ifndef __AUDIOREACH_H__
 | |
| #define __AUDIOREACH_H__
 | |
| #include <linux/types.h>
 | |
| #include <linux/soc/qcom/apr.h>
 | |
| #include <sound/soc.h>
 | |
| struct q6apm;
 | |
| struct q6apm_graph;
 | |
| 
 | |
| /* Module IDs */
 | |
| #define MODULE_ID_WR_SHARED_MEM_EP	0x07001000
 | |
| #define MODULE_ID_RD_SHARED_MEM_EP	0x07001001
 | |
| #define MODULE_ID_GAIN			0x07001002
 | |
| #define MODULE_ID_PCM_CNV		0x07001003
 | |
| #define MODULE_ID_PCM_ENC		0x07001004
 | |
| #define MODULE_ID_PCM_DEC		0x07001005
 | |
| #define MODULE_ID_CODEC_DMA_SINK	0x07001023
 | |
| #define MODULE_ID_CODEC_DMA_SOURCE	0x07001024
 | |
| #define MODULE_ID_I2S_SINK		0x0700100A
 | |
| #define MODULE_ID_I2S_SOURCE		0x0700100B
 | |
| #define MODULE_ID_DATA_LOGGING		0x0700101A
 | |
| 
 | |
| #define APM_CMD_GET_SPF_STATE		0x01001021
 | |
| #define APM_CMD_RSP_GET_SPF_STATE	0x02001007
 | |
| 
 | |
| #define APM_MODULE_INSTANCE_ID		0x00000001
 | |
| #define PRM_MODULE_INSTANCE_ID		0x00000002
 | |
| #define AMDB_MODULE_INSTANCE_ID		0x00000003
 | |
| #define VCPM_MODULE_INSTANCE_ID		0x00000004
 | |
| #define AR_MODULE_INSTANCE_ID_START	0x00006000
 | |
| #define AR_MODULE_INSTANCE_ID_END	0x00007000
 | |
| #define AR_MODULE_DYNAMIC_INSTANCE_ID_START	0x00007000
 | |
| #define AR_MODULE_DYNAMIC_INSTANCE_ID_END	0x00008000
 | |
| #define AR_CONT_INSTANCE_ID_START	0x00005000
 | |
| #define AR_CONT_INSTANCE_ID_END		0x00006000
 | |
| #define AR_SG_INSTANCE_ID_START		0x00004000
 | |
| 
 | |
| #define APM_CMD_GRAPH_OPEN			0x01001000
 | |
| #define APM_CMD_GRAPH_PREPARE			0x01001001
 | |
| #define APM_CMD_GRAPH_START			0x01001002
 | |
| #define APM_CMD_GRAPH_STOP			0x01001003
 | |
| #define APM_CMD_GRAPH_CLOSE			0x01001004
 | |
| #define APM_CMD_GRAPH_FLUSH			0x01001005
 | |
| #define APM_CMD_SET_CFG				0x01001006
 | |
| #define APM_CMD_GET_CFG				0x01001007
 | |
| #define APM_CMD_SHARED_MEM_MAP_REGIONS		0x0100100C
 | |
| #define APM_CMD_SHARED_MEM_UNMAP_REGIONS	0x0100100D
 | |
| #define APM_CMD_RSP_SHARED_MEM_MAP_REGIONS	0x02001001
 | |
| #define APM_CMD_RSP_GET_CFG			0x02001000
 | |
| #define APM_CMD_CLOSE_ALL			0x01001013
 | |
| #define APM_CMD_REGISTER_SHARED_CFG		0x0100100A
 | |
| 
 | |
| #define APM_MEMORY_MAP_SHMEM8_4K_POOL		3
 | |
| 
 | |
| struct apm_cmd_shared_mem_map_regions {
 | |
| 	uint16_t mem_pool_id;
 | |
| 	uint16_t num_regions;
 | |
| 	uint32_t property_flag;
 | |
| } __packed;
 | |
| 
 | |
| struct apm_shared_map_region_payload {
 | |
| 	uint32_t shm_addr_lsw;
 | |
| 	uint32_t shm_addr_msw;
 | |
| 	uint32_t mem_size_bytes;
 | |
| } __packed;
 | |
| 
 | |
| struct apm_cmd_shared_mem_unmap_regions {
 | |
| 	uint32_t mem_map_handle;
 | |
| } __packed;
 | |
| 
 | |
| struct apm_cmd_rsp_shared_mem_map_regions {
 | |
| 	uint32_t mem_map_handle;
 | |
| } __packed;
 | |
| 
 | |
| /* APM module */
 | |
| #define APM_PARAM_ID_SUB_GRAPH_LIST		0x08001005
 | |
| 
 | |
| #define APM_PARAM_ID_MODULE_LIST		0x08001002
 | |
| 
 | |
| struct apm_param_id_modules_list {
 | |
| 	uint32_t num_modules_list;
 | |
| } __packed;
 | |
| 
 | |
| #define APM_PARAM_ID_MODULE_PROP		0x08001003
 | |
| 
 | |
| struct apm_param_id_module_prop {
 | |
| 	uint32_t num_modules_prop_cfg;
 | |
| } __packed;
 | |
| 
 | |
| struct apm_module_prop_cfg {
 | |
| 	uint32_t instance_id;
 | |
| 	uint32_t num_props;
 | |
| } __packed;
 | |
| 
 | |
| #define APM_PARAM_ID_MODULE_CONN		0x08001004
 | |
| 
 | |
| struct apm_param_id_module_conn {
 | |
| 	uint32_t num_connections;
 | |
| } __packed;
 | |
| 
 | |
| struct apm_module_conn_obj {
 | |
| 	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;
 | |
| } __packed;
 | |
| 
 | |
| #define APM_PARAM_ID_GAIN			0x08001006
 | |
| 
 | |
| struct param_id_gain_cfg {
 | |
| 	uint16_t gain;
 | |
| 	uint16_t reserved;
 | |
| } __packed;
 | |
| 
 | |
| #define PARAM_ID_PCM_OUTPUT_FORMAT_CFG		0x08001008
 | |
| 
 | |
| struct param_id_pcm_output_format_cfg {
 | |
| 	uint32_t data_format;
 | |
| 	uint32_t fmt_id;
 | |
| 	uint32_t payload_size;
 | |
| } __packed;
 | |
| 
 | |
| struct payload_pcm_output_format_cfg {
 | |
| 	uint16_t bit_width;
 | |
| 	uint16_t alignment;
 | |
| 	uint16_t bits_per_sample;
 | |
| 	uint16_t q_factor;
 | |
| 	uint16_t endianness;
 | |
| 	uint16_t interleaved;
 | |
| 	uint16_t reserved;
 | |
| 	uint16_t num_channels;
 | |
| 	uint8_t channel_mapping[];
 | |
| } __packed;
 | |
| 
 | |
| #define PARAM_ID_ENC_BITRATE			0x08001052
 | |
| 
 | |
| struct param_id_enc_bitrate_param {
 | |
| 	uint32_t bitrate;
 | |
| } __packed;
 | |
| 
 | |
| #define DATA_FORMAT_FIXED_POINT		1
 | |
| #define PCM_LSB_ALIGNED			1
 | |
| #define PCM_MSB_ALIGNED			2
 | |
| #define PCM_LITTLE_ENDIAN		1
 | |
| #define PCM_BIT_ENDIAN			2
 | |
| 
 | |
| #define MEDIA_FMT_ID_PCM	0x09001000
 | |
| #define PCM_CHANNEL_L		1
 | |
| #define PCM_CHANNEL_R		2
 | |
| #define SAMPLE_RATE_48K		48000
 | |
| #define BIT_WIDTH_16		16
 | |
| 
 | |
| #define APM_PARAM_ID_PROP_PORT_INFO		0x08001015
 | |
| 
 | |
| struct apm_modules_prop_info {
 | |
| 	uint32_t max_ip_port;
 | |
| 	uint32_t max_op_port;
 | |
| } __packed;
 | |
| 
 | |
| /* 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
 | |
| 
 | |
| 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
 | |
| 
 | |
| 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
 | |
| 
 | |
| 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
 | |
| 
 | |
| 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
 | |
| 
 | |
| 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;
 | |
| } __packed;
 | |
| 
 | |
| #define DATA_CMD_RSP_RD_SH_MEM_EP_DATA_BUFFER		0x05001002
 | |
| 
 | |
| 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;
 | |
| } __packed;
 | |
| 
 | |
| #define DATA_CMD_RD_SH_MEM_EP_DATA_BUFFER_V2		0x0400100B
 | |
| 
 | |
| 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;
 | |
| } __packed;
 | |
| 
 | |
| #define DATA_CMD_RSP_RD_SH_MEM_EP_DATA_BUFFER_V2	0x05001005
 | |
| 
 | |
| 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
 | |
| 
 | |
| struct param_id_rd_sh_mem_cfg {
 | |
| 	uint32_t num_frames_per_buffer;
 | |
| 	uint32_t metadata_control_flags;
 | |
| 
 | |
| } __packed;
 | |
| 
 | |
| #define DATA_CMD_WR_SH_MEM_EP_EOS_RENDERED		0x05001001
 | |
| 
 | |
| 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)
 | |
| 
 | |
| 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
 | |
| 
 | |
| 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_capability  {
 | |
| 	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_capability_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
 | |
| 
 | |
| struct apm_cont_prop_id_stack_size  {
 | |
| 	uint32_t stack_size;
 | |
| } __packed;
 | |
| 
 | |
| #define APM_CONTAINER_PROP_ID_PROC_DOMAIN	0x08001014
 | |
| 
 | |
| 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
 | |
| 
 | |
| 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
 | |
| 
 | |
| 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
 | |
| 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
 | |
| 
 | |
| 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
 | |
| 
 | |
| 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
 | |
| 
 | |
| 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;
 | |
| 
 | |
| struct audio_hw_clk_rel_cfg {
 | |
| 	uint32_t clock_id;
 | |
| } __packed;
 | |
| 
 | |
| #define PARAM_ID_HW_EP_POWER_MODE_CFG	0x8001176
 | |
| #define AR_HW_EP_POWER_MODE_0	0 /* default */
 | |
| #define AR_HW_EP_POWER_MODE_1	1 /* XO Shutdown allowed */
 | |
| #define AR_HW_EP_POWER_MODE_2	2 /* XO Shutdown not allowed */
 | |
| 
 | |
| struct param_id_hw_ep_power_mode_cfg {
 | |
| 	uint32_t power_mode;
 | |
| } __packed;
 | |
| 
 | |
| #define PARAM_ID_HW_EP_DMA_DATA_ALIGN	0x08001233
 | |
| #define AR_HW_EP_DMA_DATA_ALIGN_MSB	0
 | |
| #define AR_HW_EP_DMA_DATA_ALIGN_LSB	1
 | |
| #define AR_PCM_MAX_NUM_CHANNEL		8
 | |
| 
 | |
| struct param_id_hw_ep_dma_data_align {
 | |
| 	uint32_t dma_data_align;
 | |
| } __packed;
 | |
| 
 | |
| #define PARAM_ID_VOL_CTRL_MASTER_GAIN	0x08001035
 | |
| #define VOL_CTRL_DEFAULT_GAIN		0x2000
 | |
| 
 | |
| struct param_id_vol_ctrl_master_gain {
 | |
| 	uint16_t master_gain;
 | |
| 	uint16_t reserved;
 | |
| } __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;
 | |
| };
 | |
| 
 | |
| 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;
 | |
| 
 | |
| 	/* Logging */
 | |
| 	uint32_t log_code;
 | |
| 	uint32_t log_tap_point_id;
 | |
| 	uint32_t log_mode;
 | |
| 
 | |
| 	/* bookkeeping */
 | |
| 	struct list_head node;
 | |
| 	struct audioreach_container *container;
 | |
| 	struct snd_soc_dapm_widget *widget;
 | |
| };
 | |
| 
 | |
| struct audioreach_module_config {
 | |
| 	int	direction;
 | |
| 	u32	sample_rate;
 | |
| 	u16	bit_width;
 | |
| 	u16	bits_per_sample;
 | |
| 
 | |
| 	u16	data_format;
 | |
| 	u16	num_channels;
 | |
| 	u16	active_channels_mask;
 | |
| 	u32	sd_line_mask;
 | |
| 	int	fmt;
 | |
| 	u8 channel_map[AR_PCM_MAX_NUM_CHANNEL];
 | |
| };
 | |
| 
 | |
| /* 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);
 | |
| void *audioreach_alloc_graph_pkt(struct q6apm *apm,
 | |
| 				 struct list_head *sg_list,
 | |
| 				  int graph_id);
 | |
| /* Topology specific */
 | |
| int audioreach_tplg_init(struct snd_soc_component *component);
 | |
| 
 | |
| /* Module specific */
 | |
| void audioreach_graph_free_buf(struct q6apm_graph *graph);
 | |
| int audioreach_map_memory_regions(struct q6apm_graph *graph,
 | |
| 				  unsigned int dir, size_t period_sz,
 | |
| 				  unsigned int periods,
 | |
| 				  bool is_contiguous);
 | |
| int audioreach_send_cmd_sync(struct device *dev, gpr_device_t *gdev, struct gpr_ibasic_rsp_result_t *result,
 | |
| 			     struct mutex *cmd_lock, gpr_port_t *port, wait_queue_head_t *cmd_wait,
 | |
| 			     struct gpr_pkt *pkt, uint32_t rsp_opcode);
 | |
| int audioreach_graph_send_cmd_sync(struct q6apm_graph *graph, struct gpr_pkt *pkt,
 | |
| 				   uint32_t rsp_opcode);
 | |
| int audioreach_set_media_format(struct q6apm_graph *graph,
 | |
| 				struct audioreach_module *module,
 | |
| 				struct audioreach_module_config *cfg);
 | |
| int audioreach_shared_memory_send_eos(struct q6apm_graph *graph);
 | |
| int audioreach_gain_set_vol_ctrl(struct q6apm *apm,
 | |
| 				 struct audioreach_module *module, int vol);
 | |
| struct audioreach_module *audioreach_get_container_last_module(
 | |
| 				struct audioreach_container *container);
 | |
| struct audioreach_module *audioreach_get_container_first_module(
 | |
| 				struct audioreach_container *container);
 | |
| struct audioreach_module *audioreach_get_container_next_module(
 | |
| 				struct audioreach_container *container,
 | |
| 				struct audioreach_module *module);
 | |
| #define list_for_each_container_module(mod, cont) \
 | |
| 	for (mod = audioreach_get_container_first_module(cont); mod != NULL; \
 | |
| 	     mod = audioreach_get_container_next_module(cont, mod))
 | |
| #endif /* __AUDIOREACH_H__ */
 |