162306a36Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0-only */ 262306a36Sopenharmony_ci/* 362306a36Sopenharmony_ci * Copyright(c) 2021-2022 Intel Corporation. All rights reserved. 462306a36Sopenharmony_ci * 562306a36Sopenharmony_ci * Authors: Cezary Rojewski <cezary.rojewski@intel.com> 662306a36Sopenharmony_ci * Amadeusz Slawinski <amadeuszx.slawinski@linux.intel.com> 762306a36Sopenharmony_ci */ 862306a36Sopenharmony_ci 962306a36Sopenharmony_ci#ifndef __SOUND_SOC_INTEL_AVS_MSGS_H 1062306a36Sopenharmony_ci#define __SOUND_SOC_INTEL_AVS_MSGS_H 1162306a36Sopenharmony_ci 1262306a36Sopenharmony_cistruct avs_dev; 1362306a36Sopenharmony_ci 1462306a36Sopenharmony_ci#define AVS_MAILBOX_SIZE 4096 1562306a36Sopenharmony_ci 1662306a36Sopenharmony_cienum avs_msg_target { 1762306a36Sopenharmony_ci AVS_FW_GEN_MSG = 0, 1862306a36Sopenharmony_ci AVS_MOD_MSG = 1 1962306a36Sopenharmony_ci}; 2062306a36Sopenharmony_ci 2162306a36Sopenharmony_cienum avs_msg_direction { 2262306a36Sopenharmony_ci AVS_MSG_REQUEST = 0, 2362306a36Sopenharmony_ci AVS_MSG_REPLY = 1 2462306a36Sopenharmony_ci}; 2562306a36Sopenharmony_ci 2662306a36Sopenharmony_cienum avs_global_msg_type { 2762306a36Sopenharmony_ci AVS_GLB_ROM_CONTROL = 1, 2862306a36Sopenharmony_ci AVS_GLB_LOAD_MULTIPLE_MODULES = 15, 2962306a36Sopenharmony_ci AVS_GLB_UNLOAD_MULTIPLE_MODULES = 16, 3062306a36Sopenharmony_ci AVS_GLB_CREATE_PIPELINE = 17, 3162306a36Sopenharmony_ci AVS_GLB_DELETE_PIPELINE = 18, 3262306a36Sopenharmony_ci AVS_GLB_SET_PIPELINE_STATE = 19, 3362306a36Sopenharmony_ci AVS_GLB_GET_PIPELINE_STATE = 20, 3462306a36Sopenharmony_ci AVS_GLB_LOAD_LIBRARY = 24, 3562306a36Sopenharmony_ci AVS_GLB_NOTIFICATION = 27, 3662306a36Sopenharmony_ci}; 3762306a36Sopenharmony_ci 3862306a36Sopenharmony_ciunion avs_global_msg { 3962306a36Sopenharmony_ci u64 val; 4062306a36Sopenharmony_ci struct { 4162306a36Sopenharmony_ci union { 4262306a36Sopenharmony_ci u32 primary; 4362306a36Sopenharmony_ci struct { 4462306a36Sopenharmony_ci u32 rsvd:24; 4562306a36Sopenharmony_ci u32 global_msg_type:5; 4662306a36Sopenharmony_ci u32 msg_direction:1; 4762306a36Sopenharmony_ci u32 msg_target:1; 4862306a36Sopenharmony_ci }; 4962306a36Sopenharmony_ci /* set boot config */ 5062306a36Sopenharmony_ci struct { 5162306a36Sopenharmony_ci u32 rom_ctrl_msg_type:9; 5262306a36Sopenharmony_ci u32 dma_id:5; 5362306a36Sopenharmony_ci u32 purge_request:1; 5462306a36Sopenharmony_ci } boot_cfg; 5562306a36Sopenharmony_ci /* module loading */ 5662306a36Sopenharmony_ci struct { 5762306a36Sopenharmony_ci u32 mod_cnt:8; 5862306a36Sopenharmony_ci } load_multi_mods; 5962306a36Sopenharmony_ci /* pipeline management */ 6062306a36Sopenharmony_ci struct { 6162306a36Sopenharmony_ci u32 ppl_mem_size:11; 6262306a36Sopenharmony_ci u32 ppl_priority:5; 6362306a36Sopenharmony_ci u32 instance_id:8; 6462306a36Sopenharmony_ci } create_ppl; 6562306a36Sopenharmony_ci struct { 6662306a36Sopenharmony_ci u32 rsvd:16; 6762306a36Sopenharmony_ci u32 instance_id:8; 6862306a36Sopenharmony_ci } ppl; /* generic ppl request */ 6962306a36Sopenharmony_ci struct { 7062306a36Sopenharmony_ci u32 state:16; 7162306a36Sopenharmony_ci u32 ppl_id:8; 7262306a36Sopenharmony_ci } set_ppl_state; 7362306a36Sopenharmony_ci struct { 7462306a36Sopenharmony_ci u32 ppl_id:8; 7562306a36Sopenharmony_ci } get_ppl_state; 7662306a36Sopenharmony_ci /* library loading */ 7762306a36Sopenharmony_ci struct { 7862306a36Sopenharmony_ci u32 dma_id:5; 7962306a36Sopenharmony_ci u32 rsvd:11; 8062306a36Sopenharmony_ci u32 lib_id:4; 8162306a36Sopenharmony_ci } load_lib; 8262306a36Sopenharmony_ci }; 8362306a36Sopenharmony_ci union { 8462306a36Sopenharmony_ci u32 val; 8562306a36Sopenharmony_ci /* pipeline management */ 8662306a36Sopenharmony_ci struct { 8762306a36Sopenharmony_ci u32 lp:1; /* low power flag */ 8862306a36Sopenharmony_ci u32 rsvd:3; 8962306a36Sopenharmony_ci u32 attributes:16; /* additional scheduling flags */ 9062306a36Sopenharmony_ci } create_ppl; 9162306a36Sopenharmony_ci } ext; 9262306a36Sopenharmony_ci }; 9362306a36Sopenharmony_ci} __packed; 9462306a36Sopenharmony_ci 9562306a36Sopenharmony_cistruct avs_tlv { 9662306a36Sopenharmony_ci u32 type; 9762306a36Sopenharmony_ci u32 length; 9862306a36Sopenharmony_ci u32 value[]; 9962306a36Sopenharmony_ci} __packed; 10062306a36Sopenharmony_ci 10162306a36Sopenharmony_cienum avs_module_msg_type { 10262306a36Sopenharmony_ci AVS_MOD_INIT_INSTANCE = 0, 10362306a36Sopenharmony_ci AVS_MOD_LARGE_CONFIG_GET = 3, 10462306a36Sopenharmony_ci AVS_MOD_LARGE_CONFIG_SET = 4, 10562306a36Sopenharmony_ci AVS_MOD_BIND = 5, 10662306a36Sopenharmony_ci AVS_MOD_UNBIND = 6, 10762306a36Sopenharmony_ci AVS_MOD_SET_DX = 7, 10862306a36Sopenharmony_ci AVS_MOD_SET_D0IX = 8, 10962306a36Sopenharmony_ci AVS_MOD_DELETE_INSTANCE = 11, 11062306a36Sopenharmony_ci}; 11162306a36Sopenharmony_ci 11262306a36Sopenharmony_ciunion avs_module_msg { 11362306a36Sopenharmony_ci u64 val; 11462306a36Sopenharmony_ci struct { 11562306a36Sopenharmony_ci union { 11662306a36Sopenharmony_ci u32 primary; 11762306a36Sopenharmony_ci struct { 11862306a36Sopenharmony_ci u32 module_id:16; 11962306a36Sopenharmony_ci u32 instance_id:8; 12062306a36Sopenharmony_ci u32 module_msg_type:5; 12162306a36Sopenharmony_ci u32 msg_direction:1; 12262306a36Sopenharmony_ci u32 msg_target:1; 12362306a36Sopenharmony_ci }; 12462306a36Sopenharmony_ci }; 12562306a36Sopenharmony_ci union { 12662306a36Sopenharmony_ci u32 val; 12762306a36Sopenharmony_ci struct { 12862306a36Sopenharmony_ci u32 param_block_size:16; 12962306a36Sopenharmony_ci u32 ppl_instance_id:8; 13062306a36Sopenharmony_ci u32 core_id:4; 13162306a36Sopenharmony_ci u32 proc_domain:1; 13262306a36Sopenharmony_ci } init_instance; 13362306a36Sopenharmony_ci struct { 13462306a36Sopenharmony_ci u32 data_off_size:20; 13562306a36Sopenharmony_ci u32 large_param_id:8; 13662306a36Sopenharmony_ci u32 final_block:1; 13762306a36Sopenharmony_ci u32 init_block:1; 13862306a36Sopenharmony_ci } large_config; 13962306a36Sopenharmony_ci struct { 14062306a36Sopenharmony_ci u32 dst_module_id:16; 14162306a36Sopenharmony_ci u32 dst_instance_id:8; 14262306a36Sopenharmony_ci u32 dst_queue:3; 14362306a36Sopenharmony_ci u32 src_queue:3; 14462306a36Sopenharmony_ci } bind_unbind; 14562306a36Sopenharmony_ci struct { 14662306a36Sopenharmony_ci u32 wake:1; 14762306a36Sopenharmony_ci u32 streaming:1; 14862306a36Sopenharmony_ci } set_d0ix; 14962306a36Sopenharmony_ci } ext; 15062306a36Sopenharmony_ci }; 15162306a36Sopenharmony_ci} __packed; 15262306a36Sopenharmony_ci 15362306a36Sopenharmony_ci#define AVS_IPC_NOT_SUPPORTED 15 15462306a36Sopenharmony_ci 15562306a36Sopenharmony_ciunion avs_reply_msg { 15662306a36Sopenharmony_ci u64 val; 15762306a36Sopenharmony_ci struct { 15862306a36Sopenharmony_ci union { 15962306a36Sopenharmony_ci u32 primary; 16062306a36Sopenharmony_ci struct { 16162306a36Sopenharmony_ci u32 status:24; 16262306a36Sopenharmony_ci u32 global_msg_type:5; 16362306a36Sopenharmony_ci u32 msg_direction:1; 16462306a36Sopenharmony_ci u32 msg_target:1; 16562306a36Sopenharmony_ci }; 16662306a36Sopenharmony_ci }; 16762306a36Sopenharmony_ci union { 16862306a36Sopenharmony_ci u32 val; 16962306a36Sopenharmony_ci /* module loading */ 17062306a36Sopenharmony_ci struct { 17162306a36Sopenharmony_ci u32 err_mod_id:16; 17262306a36Sopenharmony_ci } load_multi_mods; 17362306a36Sopenharmony_ci /* pipeline management */ 17462306a36Sopenharmony_ci struct { 17562306a36Sopenharmony_ci u32 state:5; 17662306a36Sopenharmony_ci } get_ppl_state; 17762306a36Sopenharmony_ci /* module management */ 17862306a36Sopenharmony_ci struct { 17962306a36Sopenharmony_ci u32 data_off_size:20; 18062306a36Sopenharmony_ci u32 large_param_id:8; 18162306a36Sopenharmony_ci u32 final_block:1; 18262306a36Sopenharmony_ci u32 init_block:1; 18362306a36Sopenharmony_ci } large_config; 18462306a36Sopenharmony_ci } ext; 18562306a36Sopenharmony_ci }; 18662306a36Sopenharmony_ci} __packed; 18762306a36Sopenharmony_ci 18862306a36Sopenharmony_cienum avs_notify_msg_type { 18962306a36Sopenharmony_ci AVS_NOTIFY_PHRASE_DETECTED = 4, 19062306a36Sopenharmony_ci AVS_NOTIFY_RESOURCE_EVENT = 5, 19162306a36Sopenharmony_ci AVS_NOTIFY_LOG_BUFFER_STATUS = 6, 19262306a36Sopenharmony_ci AVS_NOTIFY_FW_READY = 8, 19362306a36Sopenharmony_ci AVS_NOTIFY_EXCEPTION_CAUGHT = 10, 19462306a36Sopenharmony_ci AVS_NOTIFY_MODULE_EVENT = 12, 19562306a36Sopenharmony_ci}; 19662306a36Sopenharmony_ci 19762306a36Sopenharmony_ciunion avs_notify_msg { 19862306a36Sopenharmony_ci u64 val; 19962306a36Sopenharmony_ci struct { 20062306a36Sopenharmony_ci union { 20162306a36Sopenharmony_ci u32 primary; 20262306a36Sopenharmony_ci struct { 20362306a36Sopenharmony_ci u32 rsvd:16; 20462306a36Sopenharmony_ci u32 notify_msg_type:8; 20562306a36Sopenharmony_ci u32 global_msg_type:5; 20662306a36Sopenharmony_ci u32 msg_direction:1; 20762306a36Sopenharmony_ci u32 msg_target:1; 20862306a36Sopenharmony_ci }; 20962306a36Sopenharmony_ci struct { 21062306a36Sopenharmony_ci u16 rsvd:12; 21162306a36Sopenharmony_ci u16 core:4; 21262306a36Sopenharmony_ci } log; 21362306a36Sopenharmony_ci }; 21462306a36Sopenharmony_ci union { 21562306a36Sopenharmony_ci u32 val; 21662306a36Sopenharmony_ci struct { 21762306a36Sopenharmony_ci u32 core_id:2; 21862306a36Sopenharmony_ci u32 stack_dump_size:16; 21962306a36Sopenharmony_ci } coredump; 22062306a36Sopenharmony_ci } ext; 22162306a36Sopenharmony_ci }; 22262306a36Sopenharmony_ci} __packed; 22362306a36Sopenharmony_ci 22462306a36Sopenharmony_ci#define AVS_MSG(hdr) { .val = hdr } 22562306a36Sopenharmony_ci 22662306a36Sopenharmony_ci#define AVS_GLOBAL_REQUEST(msg_type) \ 22762306a36Sopenharmony_ci{ \ 22862306a36Sopenharmony_ci .global_msg_type = AVS_GLB_##msg_type, \ 22962306a36Sopenharmony_ci .msg_direction = AVS_MSG_REQUEST, \ 23062306a36Sopenharmony_ci .msg_target = AVS_FW_GEN_MSG, \ 23162306a36Sopenharmony_ci} 23262306a36Sopenharmony_ci 23362306a36Sopenharmony_ci#define AVS_MODULE_REQUEST(msg_type) \ 23462306a36Sopenharmony_ci{ \ 23562306a36Sopenharmony_ci .module_msg_type = AVS_MOD_##msg_type, \ 23662306a36Sopenharmony_ci .msg_direction = AVS_MSG_REQUEST, \ 23762306a36Sopenharmony_ci .msg_target = AVS_MOD_MSG, \ 23862306a36Sopenharmony_ci} 23962306a36Sopenharmony_ci 24062306a36Sopenharmony_ci#define AVS_NOTIFICATION(msg_type) \ 24162306a36Sopenharmony_ci{ \ 24262306a36Sopenharmony_ci .notify_msg_type = AVS_NOTIFY_##msg_type,\ 24362306a36Sopenharmony_ci .global_msg_type = AVS_GLB_NOTIFICATION,\ 24462306a36Sopenharmony_ci .msg_direction = AVS_MSG_REPLY, \ 24562306a36Sopenharmony_ci .msg_target = AVS_FW_GEN_MSG, \ 24662306a36Sopenharmony_ci} 24762306a36Sopenharmony_ci 24862306a36Sopenharmony_ci#define avs_msg_is_reply(hdr) \ 24962306a36Sopenharmony_ci({ \ 25062306a36Sopenharmony_ci union avs_reply_msg __msg = AVS_MSG(hdr); \ 25162306a36Sopenharmony_ci __msg.msg_direction == AVS_MSG_REPLY && \ 25262306a36Sopenharmony_ci __msg.global_msg_type != AVS_GLB_NOTIFICATION; \ 25362306a36Sopenharmony_ci}) 25462306a36Sopenharmony_ci 25562306a36Sopenharmony_ci/* Notification types */ 25662306a36Sopenharmony_ci 25762306a36Sopenharmony_cistruct avs_notify_voice_data { 25862306a36Sopenharmony_ci u16 kpd_score; 25962306a36Sopenharmony_ci u16 reserved; 26062306a36Sopenharmony_ci} __packed; 26162306a36Sopenharmony_ci 26262306a36Sopenharmony_cistruct avs_notify_res_data { 26362306a36Sopenharmony_ci u32 resource_type; 26462306a36Sopenharmony_ci u32 resource_id; 26562306a36Sopenharmony_ci u32 event_type; 26662306a36Sopenharmony_ci u32 reserved; 26762306a36Sopenharmony_ci u32 data[6]; 26862306a36Sopenharmony_ci} __packed; 26962306a36Sopenharmony_ci 27062306a36Sopenharmony_cistruct avs_notify_mod_data { 27162306a36Sopenharmony_ci u32 module_instance_id; 27262306a36Sopenharmony_ci u32 event_id; 27362306a36Sopenharmony_ci u32 data_size; 27462306a36Sopenharmony_ci u32 data[]; 27562306a36Sopenharmony_ci} __packed; 27662306a36Sopenharmony_ci 27762306a36Sopenharmony_ci/* ROM messages */ 27862306a36Sopenharmony_cienum avs_rom_control_msg_type { 27962306a36Sopenharmony_ci AVS_ROM_SET_BOOT_CONFIG = 0, 28062306a36Sopenharmony_ci}; 28162306a36Sopenharmony_ci 28262306a36Sopenharmony_ciint avs_ipc_set_boot_config(struct avs_dev *adev, u32 dma_id, u32 purge); 28362306a36Sopenharmony_ci 28462306a36Sopenharmony_ci/* Code loading messages */ 28562306a36Sopenharmony_ciint avs_ipc_load_modules(struct avs_dev *adev, u16 *mod_ids, u32 num_mod_ids); 28662306a36Sopenharmony_ciint avs_ipc_unload_modules(struct avs_dev *adev, u16 *mod_ids, u32 num_mod_ids); 28762306a36Sopenharmony_ciint avs_ipc_load_library(struct avs_dev *adev, u32 dma_id, u32 lib_id); 28862306a36Sopenharmony_ci 28962306a36Sopenharmony_ci/* Pipeline management messages */ 29062306a36Sopenharmony_cienum avs_pipeline_state { 29162306a36Sopenharmony_ci AVS_PPL_STATE_INVALID, 29262306a36Sopenharmony_ci AVS_PPL_STATE_UNINITIALIZED, 29362306a36Sopenharmony_ci AVS_PPL_STATE_RESET, 29462306a36Sopenharmony_ci AVS_PPL_STATE_PAUSED, 29562306a36Sopenharmony_ci AVS_PPL_STATE_RUNNING, 29662306a36Sopenharmony_ci}; 29762306a36Sopenharmony_ci 29862306a36Sopenharmony_ciint avs_ipc_create_pipeline(struct avs_dev *adev, u16 req_size, u8 priority, 29962306a36Sopenharmony_ci u8 instance_id, bool lp, u16 attributes); 30062306a36Sopenharmony_ciint avs_ipc_delete_pipeline(struct avs_dev *adev, u8 instance_id); 30162306a36Sopenharmony_ciint avs_ipc_set_pipeline_state(struct avs_dev *adev, u8 instance_id, 30262306a36Sopenharmony_ci enum avs_pipeline_state state); 30362306a36Sopenharmony_ciint avs_ipc_get_pipeline_state(struct avs_dev *adev, u8 instance_id, 30462306a36Sopenharmony_ci enum avs_pipeline_state *state); 30562306a36Sopenharmony_ci 30662306a36Sopenharmony_ci/* Module management messages */ 30762306a36Sopenharmony_ciint avs_ipc_init_instance(struct avs_dev *adev, u16 module_id, u8 instance_id, 30862306a36Sopenharmony_ci u8 ppl_id, u8 core_id, u8 domain, 30962306a36Sopenharmony_ci void *param, u32 param_size); 31062306a36Sopenharmony_ciint avs_ipc_delete_instance(struct avs_dev *adev, u16 module_id, u8 instance_id); 31162306a36Sopenharmony_ciint avs_ipc_bind(struct avs_dev *adev, u16 module_id, u8 instance_id, 31262306a36Sopenharmony_ci u16 dst_module_id, u8 dst_instance_id, 31362306a36Sopenharmony_ci u8 dst_queue, u8 src_queue); 31462306a36Sopenharmony_ciint avs_ipc_unbind(struct avs_dev *adev, u16 module_id, u8 instance_id, 31562306a36Sopenharmony_ci u16 dst_module_id, u8 dst_instance_id, 31662306a36Sopenharmony_ci u8 dst_queue, u8 src_queue); 31762306a36Sopenharmony_ciint avs_ipc_set_large_config(struct avs_dev *adev, u16 module_id, 31862306a36Sopenharmony_ci u8 instance_id, u8 param_id, 31962306a36Sopenharmony_ci u8 *request, size_t request_size); 32062306a36Sopenharmony_ciint avs_ipc_get_large_config(struct avs_dev *adev, u16 module_id, u8 instance_id, 32162306a36Sopenharmony_ci u8 param_id, u8 *request_data, size_t request_size, 32262306a36Sopenharmony_ci u8 **reply_data, size_t *reply_size); 32362306a36Sopenharmony_ci 32462306a36Sopenharmony_ci/* DSP cores and domains power management messages */ 32562306a36Sopenharmony_cistruct avs_dxstate_info { 32662306a36Sopenharmony_ci u32 core_mask; /* which cores are subject for power transition */ 32762306a36Sopenharmony_ci u32 dx_mask; /* bit[n]=1 core n goes to D0, bit[n]=0 it goes to D3 */ 32862306a36Sopenharmony_ci} __packed; 32962306a36Sopenharmony_ci 33062306a36Sopenharmony_ciint avs_ipc_set_dx(struct avs_dev *adev, u32 core_mask, bool powerup); 33162306a36Sopenharmony_ciint avs_ipc_set_d0ix(struct avs_dev *adev, bool enable_pg, bool streaming); 33262306a36Sopenharmony_ci 33362306a36Sopenharmony_ci/* Base-firmware runtime parameters */ 33462306a36Sopenharmony_ci 33562306a36Sopenharmony_ci#define AVS_BASEFW_MOD_ID 0 33662306a36Sopenharmony_ci#define AVS_BASEFW_INST_ID 0 33762306a36Sopenharmony_ci 33862306a36Sopenharmony_cienum avs_basefw_runtime_param { 33962306a36Sopenharmony_ci AVS_BASEFW_ENABLE_LOGS = 6, 34062306a36Sopenharmony_ci AVS_BASEFW_FIRMWARE_CONFIG = 7, 34162306a36Sopenharmony_ci AVS_BASEFW_HARDWARE_CONFIG = 8, 34262306a36Sopenharmony_ci AVS_BASEFW_MODULES_INFO = 9, 34362306a36Sopenharmony_ci AVS_BASEFW_LIBRARIES_INFO = 16, 34462306a36Sopenharmony_ci AVS_BASEFW_SYSTEM_TIME = 20, 34562306a36Sopenharmony_ci}; 34662306a36Sopenharmony_ci 34762306a36Sopenharmony_cienum avs_log_enable { 34862306a36Sopenharmony_ci AVS_LOG_DISABLE = 0, 34962306a36Sopenharmony_ci AVS_LOG_ENABLE = 1 35062306a36Sopenharmony_ci}; 35162306a36Sopenharmony_ci 35262306a36Sopenharmony_cienum avs_skl_log_priority { 35362306a36Sopenharmony_ci AVS_SKL_LOG_CRITICAL = 1, 35462306a36Sopenharmony_ci AVS_SKL_LOG_HIGH, 35562306a36Sopenharmony_ci AVS_SKL_LOG_MEDIUM, 35662306a36Sopenharmony_ci AVS_SKL_LOG_LOW, 35762306a36Sopenharmony_ci AVS_SKL_LOG_VERBOSE, 35862306a36Sopenharmony_ci}; 35962306a36Sopenharmony_ci 36062306a36Sopenharmony_cistruct skl_log_state { 36162306a36Sopenharmony_ci u32 enable; 36262306a36Sopenharmony_ci u32 min_priority; 36362306a36Sopenharmony_ci} __packed; 36462306a36Sopenharmony_ci 36562306a36Sopenharmony_cistruct skl_log_state_info { 36662306a36Sopenharmony_ci u32 core_mask; 36762306a36Sopenharmony_ci struct skl_log_state logs_core[]; 36862306a36Sopenharmony_ci} __packed; 36962306a36Sopenharmony_ci 37062306a36Sopenharmony_cistruct apl_log_state_info { 37162306a36Sopenharmony_ci u32 aging_timer_period; 37262306a36Sopenharmony_ci u32 fifo_full_timer_period; 37362306a36Sopenharmony_ci u32 core_mask; 37462306a36Sopenharmony_ci struct skl_log_state logs_core[]; 37562306a36Sopenharmony_ci} __packed; 37662306a36Sopenharmony_ci 37762306a36Sopenharmony_ciint avs_ipc_set_enable_logs(struct avs_dev *adev, u8 *log_info, size_t size); 37862306a36Sopenharmony_ci 37962306a36Sopenharmony_cistruct avs_fw_version { 38062306a36Sopenharmony_ci u16 major; 38162306a36Sopenharmony_ci u16 minor; 38262306a36Sopenharmony_ci u16 hotfix; 38362306a36Sopenharmony_ci u16 build; 38462306a36Sopenharmony_ci}; 38562306a36Sopenharmony_ci 38662306a36Sopenharmony_cienum avs_fw_cfg_params { 38762306a36Sopenharmony_ci AVS_FW_CFG_FW_VERSION = 0, 38862306a36Sopenharmony_ci AVS_FW_CFG_MEMORY_RECLAIMED, 38962306a36Sopenharmony_ci AVS_FW_CFG_SLOW_CLOCK_FREQ_HZ, 39062306a36Sopenharmony_ci AVS_FW_CFG_FAST_CLOCK_FREQ_HZ, 39162306a36Sopenharmony_ci AVS_FW_CFG_DMA_BUFFER_CONFIG, 39262306a36Sopenharmony_ci AVS_FW_CFG_ALH_SUPPORT_LEVEL, 39362306a36Sopenharmony_ci AVS_FW_CFG_IPC_DL_MAILBOX_BYTES, 39462306a36Sopenharmony_ci AVS_FW_CFG_IPC_UL_MAILBOX_BYTES, 39562306a36Sopenharmony_ci AVS_FW_CFG_TRACE_LOG_BYTES, 39662306a36Sopenharmony_ci AVS_FW_CFG_MAX_PPL_COUNT, 39762306a36Sopenharmony_ci AVS_FW_CFG_MAX_ASTATE_COUNT, 39862306a36Sopenharmony_ci AVS_FW_CFG_MAX_MODULE_PIN_COUNT, 39962306a36Sopenharmony_ci AVS_FW_CFG_MODULES_COUNT, 40062306a36Sopenharmony_ci AVS_FW_CFG_MAX_MOD_INST_COUNT, 40162306a36Sopenharmony_ci AVS_FW_CFG_MAX_LL_TASKS_PER_PRI_COUNT, 40262306a36Sopenharmony_ci AVS_FW_CFG_LL_PRI_COUNT, 40362306a36Sopenharmony_ci AVS_FW_CFG_MAX_DP_TASKS_COUNT, 40462306a36Sopenharmony_ci AVS_FW_CFG_MAX_LIBS_COUNT, 40562306a36Sopenharmony_ci AVS_FW_CFG_SCHEDULER_CONFIG, 40662306a36Sopenharmony_ci AVS_FW_CFG_XTAL_FREQ_HZ, 40762306a36Sopenharmony_ci AVS_FW_CFG_CLOCKS_CONFIG, 40862306a36Sopenharmony_ci AVS_FW_CFG_RESERVED, 40962306a36Sopenharmony_ci AVS_FW_CFG_POWER_GATING_POLICY, 41062306a36Sopenharmony_ci AVS_FW_CFG_ASSERT_MODE, 41162306a36Sopenharmony_ci}; 41262306a36Sopenharmony_ci 41362306a36Sopenharmony_cistruct avs_fw_cfg { 41462306a36Sopenharmony_ci struct avs_fw_version fw_version; 41562306a36Sopenharmony_ci u32 memory_reclaimed; 41662306a36Sopenharmony_ci u32 slow_clock_freq_hz; 41762306a36Sopenharmony_ci u32 fast_clock_freq_hz; 41862306a36Sopenharmony_ci u32 alh_support; 41962306a36Sopenharmony_ci u32 ipc_dl_mailbox_bytes; 42062306a36Sopenharmony_ci u32 ipc_ul_mailbox_bytes; 42162306a36Sopenharmony_ci u32 trace_log_bytes; 42262306a36Sopenharmony_ci u32 max_ppl_count; 42362306a36Sopenharmony_ci u32 max_astate_count; 42462306a36Sopenharmony_ci u32 max_module_pin_count; 42562306a36Sopenharmony_ci u32 modules_count; 42662306a36Sopenharmony_ci u32 max_mod_inst_count; 42762306a36Sopenharmony_ci u32 max_ll_tasks_per_pri_count; 42862306a36Sopenharmony_ci u32 ll_pri_count; 42962306a36Sopenharmony_ci u32 max_dp_tasks_count; 43062306a36Sopenharmony_ci u32 max_libs_count; 43162306a36Sopenharmony_ci u32 xtal_freq_hz; 43262306a36Sopenharmony_ci u32 power_gating_policy; 43362306a36Sopenharmony_ci}; 43462306a36Sopenharmony_ci 43562306a36Sopenharmony_ciint avs_ipc_get_fw_config(struct avs_dev *adev, struct avs_fw_cfg *cfg); 43662306a36Sopenharmony_ci 43762306a36Sopenharmony_cienum avs_hw_cfg_params { 43862306a36Sopenharmony_ci AVS_HW_CFG_AVS_VER, 43962306a36Sopenharmony_ci AVS_HW_CFG_DSP_CORES, 44062306a36Sopenharmony_ci AVS_HW_CFG_MEM_PAGE_BYTES, 44162306a36Sopenharmony_ci AVS_HW_CFG_TOTAL_PHYS_MEM_PAGES, 44262306a36Sopenharmony_ci AVS_HW_CFG_I2S_CAPS, 44362306a36Sopenharmony_ci AVS_HW_CFG_GPDMA_CAPS, 44462306a36Sopenharmony_ci AVS_HW_CFG_GATEWAY_COUNT, 44562306a36Sopenharmony_ci AVS_HW_CFG_HP_EBB_COUNT, 44662306a36Sopenharmony_ci AVS_HW_CFG_LP_EBB_COUNT, 44762306a36Sopenharmony_ci AVS_HW_CFG_EBB_SIZE_BYTES, 44862306a36Sopenharmony_ci}; 44962306a36Sopenharmony_ci 45062306a36Sopenharmony_cienum avs_iface_version { 45162306a36Sopenharmony_ci AVS_AVS_VER_1_5 = 0x10005, 45262306a36Sopenharmony_ci AVS_AVS_VER_1_8 = 0x10008, 45362306a36Sopenharmony_ci}; 45462306a36Sopenharmony_ci 45562306a36Sopenharmony_cienum avs_i2s_version { 45662306a36Sopenharmony_ci AVS_I2S_VER_15_SKYLAKE = 0x00000, 45762306a36Sopenharmony_ci AVS_I2S_VER_15_BROXTON = 0x10000, 45862306a36Sopenharmony_ci AVS_I2S_VER_15_BROXTON_P = 0x20000, 45962306a36Sopenharmony_ci AVS_I2S_VER_18_KBL_CNL = 0x30000, 46062306a36Sopenharmony_ci}; 46162306a36Sopenharmony_ci 46262306a36Sopenharmony_cistruct avs_i2s_caps { 46362306a36Sopenharmony_ci u32 i2s_version; 46462306a36Sopenharmony_ci u32 ctrl_count; 46562306a36Sopenharmony_ci u32 *ctrl_base_addr; 46662306a36Sopenharmony_ci}; 46762306a36Sopenharmony_ci 46862306a36Sopenharmony_cistruct avs_hw_cfg { 46962306a36Sopenharmony_ci u32 avs_version; 47062306a36Sopenharmony_ci u32 dsp_cores; 47162306a36Sopenharmony_ci u32 mem_page_bytes; 47262306a36Sopenharmony_ci u32 total_phys_mem_pages; 47362306a36Sopenharmony_ci struct avs_i2s_caps i2s_caps; 47462306a36Sopenharmony_ci u32 gateway_count; 47562306a36Sopenharmony_ci u32 hp_ebb_count; 47662306a36Sopenharmony_ci u32 lp_ebb_count; 47762306a36Sopenharmony_ci u32 ebb_size_bytes; 47862306a36Sopenharmony_ci}; 47962306a36Sopenharmony_ci 48062306a36Sopenharmony_ciint avs_ipc_get_hw_config(struct avs_dev *adev, struct avs_hw_cfg *cfg); 48162306a36Sopenharmony_ci 48262306a36Sopenharmony_ci#define AVS_MODULE_LOAD_TYPE_BUILTIN 0 48362306a36Sopenharmony_ci#define AVS_MODULE_LOAD_TYPE_LOADABLE 1 48462306a36Sopenharmony_ci#define AVS_MODULE_STATE_LOADED BIT(0) 48562306a36Sopenharmony_ci 48662306a36Sopenharmony_cistruct avs_module_type { 48762306a36Sopenharmony_ci u32 load_type:4; 48862306a36Sopenharmony_ci u32 auto_start:1; 48962306a36Sopenharmony_ci u32 domain_ll:1; 49062306a36Sopenharmony_ci u32 domain_dp:1; 49162306a36Sopenharmony_ci u32 lib_code:1; 49262306a36Sopenharmony_ci u32 rsvd:24; 49362306a36Sopenharmony_ci} __packed; 49462306a36Sopenharmony_ci 49562306a36Sopenharmony_ciunion avs_segment_flags { 49662306a36Sopenharmony_ci u32 ul; 49762306a36Sopenharmony_ci struct { 49862306a36Sopenharmony_ci u32 contents:1; 49962306a36Sopenharmony_ci u32 alloc:1; 50062306a36Sopenharmony_ci u32 load:1; 50162306a36Sopenharmony_ci u32 readonly:1; 50262306a36Sopenharmony_ci u32 code:1; 50362306a36Sopenharmony_ci u32 data:1; 50462306a36Sopenharmony_ci u32 rsvd_1:2; 50562306a36Sopenharmony_ci u32 type:4; 50662306a36Sopenharmony_ci u32 rsvd_2:4; 50762306a36Sopenharmony_ci u32 length:16; 50862306a36Sopenharmony_ci }; 50962306a36Sopenharmony_ci} __packed; 51062306a36Sopenharmony_ci 51162306a36Sopenharmony_cistruct avs_segment_desc { 51262306a36Sopenharmony_ci union avs_segment_flags flags; 51362306a36Sopenharmony_ci u32 v_base_addr; 51462306a36Sopenharmony_ci u32 file_offset; 51562306a36Sopenharmony_ci} __packed; 51662306a36Sopenharmony_ci 51762306a36Sopenharmony_cistruct avs_module_entry { 51862306a36Sopenharmony_ci u16 module_id; 51962306a36Sopenharmony_ci u16 state_flags; 52062306a36Sopenharmony_ci u8 name[8]; 52162306a36Sopenharmony_ci guid_t uuid; 52262306a36Sopenharmony_ci struct avs_module_type type; 52362306a36Sopenharmony_ci u8 hash[32]; 52462306a36Sopenharmony_ci u32 entry_point; 52562306a36Sopenharmony_ci u16 cfg_offset; 52662306a36Sopenharmony_ci u16 cfg_count; 52762306a36Sopenharmony_ci u32 affinity_mask; 52862306a36Sopenharmony_ci u16 instance_max_count; 52962306a36Sopenharmony_ci u16 instance_bss_size; 53062306a36Sopenharmony_ci struct avs_segment_desc segments[3]; 53162306a36Sopenharmony_ci} __packed; 53262306a36Sopenharmony_ci 53362306a36Sopenharmony_cistruct avs_mods_info { 53462306a36Sopenharmony_ci u32 count; 53562306a36Sopenharmony_ci struct avs_module_entry entries[]; 53662306a36Sopenharmony_ci} __packed; 53762306a36Sopenharmony_ci 53862306a36Sopenharmony_cistatic inline bool avs_module_entry_is_loaded(struct avs_module_entry *mentry) 53962306a36Sopenharmony_ci{ 54062306a36Sopenharmony_ci return mentry->type.load_type == AVS_MODULE_LOAD_TYPE_BUILTIN || 54162306a36Sopenharmony_ci mentry->state_flags & AVS_MODULE_STATE_LOADED; 54262306a36Sopenharmony_ci} 54362306a36Sopenharmony_ci 54462306a36Sopenharmony_ciint avs_ipc_get_modules_info(struct avs_dev *adev, struct avs_mods_info **info); 54562306a36Sopenharmony_ci 54662306a36Sopenharmony_cistruct avs_sys_time { 54762306a36Sopenharmony_ci u32 val_l; 54862306a36Sopenharmony_ci u32 val_u; 54962306a36Sopenharmony_ci} __packed; 55062306a36Sopenharmony_ci 55162306a36Sopenharmony_ciint avs_ipc_set_system_time(struct avs_dev *adev); 55262306a36Sopenharmony_ci 55362306a36Sopenharmony_ci/* Module configuration */ 55462306a36Sopenharmony_ci 55562306a36Sopenharmony_ci#define AVS_MIXIN_MOD_UUID \ 55662306a36Sopenharmony_ci GUID_INIT(0x39656EB2, 0x3B71, 0x4049, 0x8D, 0x3F, 0xF9, 0x2C, 0xD5, 0xC4, 0x3C, 0x09) 55762306a36Sopenharmony_ci 55862306a36Sopenharmony_ci#define AVS_MIXOUT_MOD_UUID \ 55962306a36Sopenharmony_ci GUID_INIT(0x3C56505A, 0x24D7, 0x418F, 0xBD, 0xDC, 0xC1, 0xF5, 0xA3, 0xAC, 0x2A, 0xE0) 56062306a36Sopenharmony_ci 56162306a36Sopenharmony_ci#define AVS_COPIER_MOD_UUID \ 56262306a36Sopenharmony_ci GUID_INIT(0x9BA00C83, 0xCA12, 0x4A83, 0x94, 0x3C, 0x1F, 0xA2, 0xE8, 0x2F, 0x9D, 0xDA) 56362306a36Sopenharmony_ci 56462306a36Sopenharmony_ci#define AVS_PEAKVOL_MOD_UUID \ 56562306a36Sopenharmony_ci GUID_INIT(0x8A171323, 0x94A3, 0x4E1D, 0xAF, 0xE9, 0xFE, 0x5D, 0xBA, 0xa4, 0xC3, 0x93) 56662306a36Sopenharmony_ci 56762306a36Sopenharmony_ci#define AVS_GAIN_MOD_UUID \ 56862306a36Sopenharmony_ci GUID_INIT(0x61BCA9A8, 0x18D0, 0x4A18, 0x8E, 0x7B, 0x26, 0x39, 0x21, 0x98, 0x04, 0xB7) 56962306a36Sopenharmony_ci 57062306a36Sopenharmony_ci#define AVS_KPBUFF_MOD_UUID \ 57162306a36Sopenharmony_ci GUID_INIT(0xA8A0CB32, 0x4A77, 0x4DB1, 0x85, 0xC7, 0x53, 0xD7, 0xEE, 0x07, 0xBC, 0xE6) 57262306a36Sopenharmony_ci 57362306a36Sopenharmony_ci#define AVS_MICSEL_MOD_UUID \ 57462306a36Sopenharmony_ci GUID_INIT(0x32FE92C1, 0x1E17, 0x4FC2, 0x97, 0x58, 0xC7, 0xF3, 0x54, 0x2E, 0x98, 0x0A) 57562306a36Sopenharmony_ci 57662306a36Sopenharmony_ci#define AVS_MUX_MOD_UUID \ 57762306a36Sopenharmony_ci GUID_INIT(0x64CE6E35, 0x857A, 0x4878, 0xAC, 0xE8, 0xE2, 0xA2, 0xF4, 0x2e, 0x30, 0x69) 57862306a36Sopenharmony_ci 57962306a36Sopenharmony_ci#define AVS_UPDWMIX_MOD_UUID \ 58062306a36Sopenharmony_ci GUID_INIT(0x42F8060C, 0x832F, 0x4DBF, 0xB2, 0x47, 0x51, 0xE9, 0x61, 0x99, 0x7b, 0x35) 58162306a36Sopenharmony_ci 58262306a36Sopenharmony_ci#define AVS_SRCINTC_MOD_UUID \ 58362306a36Sopenharmony_ci GUID_INIT(0xE61BB28D, 0x149A, 0x4C1F, 0xB7, 0x09, 0x46, 0x82, 0x3E, 0xF5, 0xF5, 0xAE) 58462306a36Sopenharmony_ci 58562306a36Sopenharmony_ci#define AVS_PROBE_MOD_UUID \ 58662306a36Sopenharmony_ci GUID_INIT(0x7CAD0808, 0xAB10, 0xCD23, 0xEF, 0x45, 0x12, 0xAB, 0x34, 0xCD, 0x56, 0xEF) 58762306a36Sopenharmony_ci 58862306a36Sopenharmony_ci#define AVS_AEC_MOD_UUID \ 58962306a36Sopenharmony_ci GUID_INIT(0x46CB87FB, 0xD2C9, 0x4970, 0x96, 0xD2, 0x6D, 0x7E, 0x61, 0x4B, 0xB6, 0x05) 59062306a36Sopenharmony_ci 59162306a36Sopenharmony_ci#define AVS_ASRC_MOD_UUID \ 59262306a36Sopenharmony_ci GUID_INIT(0x66B4402D, 0xB468, 0x42F2, 0x81, 0xA7, 0xB3, 0x71, 0x21, 0x86, 0x3D, 0xD4) 59362306a36Sopenharmony_ci 59462306a36Sopenharmony_ci#define AVS_INTELWOV_MOD_UUID \ 59562306a36Sopenharmony_ci GUID_INIT(0xEC774FA9, 0x28D3, 0x424A, 0x90, 0xE4, 0x69, 0xF9, 0x84, 0xF1, 0xEE, 0xB7) 59662306a36Sopenharmony_ci 59762306a36Sopenharmony_ci/* channel map */ 59862306a36Sopenharmony_cienum avs_channel_index { 59962306a36Sopenharmony_ci AVS_CHANNEL_LEFT = 0, 60062306a36Sopenharmony_ci AVS_CHANNEL_RIGHT = 1, 60162306a36Sopenharmony_ci AVS_CHANNEL_CENTER = 2, 60262306a36Sopenharmony_ci AVS_CHANNEL_LEFT_SURROUND = 3, 60362306a36Sopenharmony_ci AVS_CHANNEL_CENTER_SURROUND = 3, 60462306a36Sopenharmony_ci AVS_CHANNEL_RIGHT_SURROUND = 4, 60562306a36Sopenharmony_ci AVS_CHANNEL_LFE = 7, 60662306a36Sopenharmony_ci AVS_CHANNEL_INVALID = 0xF, 60762306a36Sopenharmony_ci}; 60862306a36Sopenharmony_ci 60962306a36Sopenharmony_cienum avs_channel_config { 61062306a36Sopenharmony_ci AVS_CHANNEL_CONFIG_MONO = 0, 61162306a36Sopenharmony_ci AVS_CHANNEL_CONFIG_STEREO = 1, 61262306a36Sopenharmony_ci AVS_CHANNEL_CONFIG_2_1 = 2, 61362306a36Sopenharmony_ci AVS_CHANNEL_CONFIG_3_0 = 3, 61462306a36Sopenharmony_ci AVS_CHANNEL_CONFIG_3_1 = 4, 61562306a36Sopenharmony_ci AVS_CHANNEL_CONFIG_QUATRO = 5, 61662306a36Sopenharmony_ci AVS_CHANNEL_CONFIG_4_0 = 6, 61762306a36Sopenharmony_ci AVS_CHANNEL_CONFIG_5_0 = 7, 61862306a36Sopenharmony_ci AVS_CHANNEL_CONFIG_5_1 = 8, 61962306a36Sopenharmony_ci AVS_CHANNEL_CONFIG_DUAL_MONO = 9, 62062306a36Sopenharmony_ci AVS_CHANNEL_CONFIG_I2S_DUAL_STEREO_0 = 10, 62162306a36Sopenharmony_ci AVS_CHANNEL_CONFIG_I2S_DUAL_STEREO_1 = 11, 62262306a36Sopenharmony_ci AVS_CHANNEL_CONFIG_7_1 = 12, 62362306a36Sopenharmony_ci AVS_CHANNEL_CONFIG_INVALID 62462306a36Sopenharmony_ci}; 62562306a36Sopenharmony_ci 62662306a36Sopenharmony_cienum avs_interleaving { 62762306a36Sopenharmony_ci AVS_INTERLEAVING_PER_CHANNEL = 0, 62862306a36Sopenharmony_ci AVS_INTERLEAVING_PER_SAMPLE = 1, 62962306a36Sopenharmony_ci}; 63062306a36Sopenharmony_ci 63162306a36Sopenharmony_cienum avs_sample_type { 63262306a36Sopenharmony_ci AVS_SAMPLE_TYPE_INT_MSB = 0, 63362306a36Sopenharmony_ci AVS_SAMPLE_TYPE_INT_LSB = 1, 63462306a36Sopenharmony_ci AVS_SAMPLE_TYPE_INT_SIGNED = 2, 63562306a36Sopenharmony_ci AVS_SAMPLE_TYPE_INT_UNSIGNED = 3, 63662306a36Sopenharmony_ci AVS_SAMPLE_TYPE_FLOAT = 4, 63762306a36Sopenharmony_ci}; 63862306a36Sopenharmony_ci 63962306a36Sopenharmony_ci#define AVS_CHANNELS_MAX 8 64062306a36Sopenharmony_ci#define AVS_ALL_CHANNELS_MASK UINT_MAX 64162306a36Sopenharmony_ci 64262306a36Sopenharmony_cistruct avs_audio_format { 64362306a36Sopenharmony_ci u32 sampling_freq; 64462306a36Sopenharmony_ci u32 bit_depth; 64562306a36Sopenharmony_ci u32 channel_map; 64662306a36Sopenharmony_ci u32 channel_config; 64762306a36Sopenharmony_ci u32 interleaving; 64862306a36Sopenharmony_ci u32 num_channels:8; 64962306a36Sopenharmony_ci u32 valid_bit_depth:8; 65062306a36Sopenharmony_ci u32 sample_type:8; 65162306a36Sopenharmony_ci u32 reserved:8; 65262306a36Sopenharmony_ci} __packed; 65362306a36Sopenharmony_ci 65462306a36Sopenharmony_cistruct avs_modcfg_base { 65562306a36Sopenharmony_ci u32 cpc; 65662306a36Sopenharmony_ci u32 ibs; 65762306a36Sopenharmony_ci u32 obs; 65862306a36Sopenharmony_ci u32 is_pages; 65962306a36Sopenharmony_ci struct avs_audio_format audio_fmt; 66062306a36Sopenharmony_ci} __packed; 66162306a36Sopenharmony_ci 66262306a36Sopenharmony_cistruct avs_pin_format { 66362306a36Sopenharmony_ci u32 pin_index; 66462306a36Sopenharmony_ci u32 iobs; 66562306a36Sopenharmony_ci struct avs_audio_format audio_fmt; 66662306a36Sopenharmony_ci} __packed; 66762306a36Sopenharmony_ci 66862306a36Sopenharmony_cistruct avs_modcfg_ext { 66962306a36Sopenharmony_ci struct avs_modcfg_base base; 67062306a36Sopenharmony_ci u16 num_input_pins; 67162306a36Sopenharmony_ci u16 num_output_pins; 67262306a36Sopenharmony_ci u8 reserved[12]; 67362306a36Sopenharmony_ci /* input pin formats followed by output ones */ 67462306a36Sopenharmony_ci struct avs_pin_format pin_fmts[]; 67562306a36Sopenharmony_ci} __packed; 67662306a36Sopenharmony_ci 67762306a36Sopenharmony_cienum avs_dma_type { 67862306a36Sopenharmony_ci AVS_DMA_HDA_HOST_OUTPUT = 0, 67962306a36Sopenharmony_ci AVS_DMA_HDA_HOST_INPUT = 1, 68062306a36Sopenharmony_ci AVS_DMA_HDA_LINK_OUTPUT = 8, 68162306a36Sopenharmony_ci AVS_DMA_HDA_LINK_INPUT = 9, 68262306a36Sopenharmony_ci AVS_DMA_DMIC_LINK_INPUT = 11, 68362306a36Sopenharmony_ci AVS_DMA_I2S_LINK_OUTPUT = 12, 68462306a36Sopenharmony_ci AVS_DMA_I2S_LINK_INPUT = 13, 68562306a36Sopenharmony_ci}; 68662306a36Sopenharmony_ci 68762306a36Sopenharmony_ciunion avs_virtual_index { 68862306a36Sopenharmony_ci u8 val; 68962306a36Sopenharmony_ci struct { 69062306a36Sopenharmony_ci u8 time_slot:4; 69162306a36Sopenharmony_ci u8 instance:4; 69262306a36Sopenharmony_ci } i2s; 69362306a36Sopenharmony_ci struct { 69462306a36Sopenharmony_ci u8 queue_id:3; 69562306a36Sopenharmony_ci u8 time_slot:2; 69662306a36Sopenharmony_ci u8 instance:3; 69762306a36Sopenharmony_ci } dmic; 69862306a36Sopenharmony_ci} __packed; 69962306a36Sopenharmony_ci 70062306a36Sopenharmony_ciunion avs_connector_node_id { 70162306a36Sopenharmony_ci u32 val; 70262306a36Sopenharmony_ci struct { 70362306a36Sopenharmony_ci u32 vindex:8; 70462306a36Sopenharmony_ci u32 dma_type:5; 70562306a36Sopenharmony_ci u32 rsvd:19; 70662306a36Sopenharmony_ci }; 70762306a36Sopenharmony_ci} __packed; 70862306a36Sopenharmony_ci 70962306a36Sopenharmony_ci#define INVALID_PIPELINE_ID 0xFF 71062306a36Sopenharmony_ci#define INVALID_NODE_ID \ 71162306a36Sopenharmony_ci ((union avs_connector_node_id) { UINT_MAX }) 71262306a36Sopenharmony_ci 71362306a36Sopenharmony_ciunion avs_gtw_attributes { 71462306a36Sopenharmony_ci u32 val; 71562306a36Sopenharmony_ci struct { 71662306a36Sopenharmony_ci u32 lp_buffer_alloc:1; 71762306a36Sopenharmony_ci u32 rsvd:31; 71862306a36Sopenharmony_ci }; 71962306a36Sopenharmony_ci} __packed; 72062306a36Sopenharmony_ci 72162306a36Sopenharmony_cistruct avs_copier_gtw_cfg { 72262306a36Sopenharmony_ci union avs_connector_node_id node_id; 72362306a36Sopenharmony_ci u32 dma_buffer_size; 72462306a36Sopenharmony_ci u32 config_length; 72562306a36Sopenharmony_ci struct { 72662306a36Sopenharmony_ci union avs_gtw_attributes attrs; 72762306a36Sopenharmony_ci u32 blob[]; 72862306a36Sopenharmony_ci } config; 72962306a36Sopenharmony_ci} __packed; 73062306a36Sopenharmony_ci 73162306a36Sopenharmony_cistruct avs_copier_cfg { 73262306a36Sopenharmony_ci struct avs_modcfg_base base; 73362306a36Sopenharmony_ci struct avs_audio_format out_fmt; 73462306a36Sopenharmony_ci u32 feature_mask; 73562306a36Sopenharmony_ci struct avs_copier_gtw_cfg gtw_cfg; 73662306a36Sopenharmony_ci} __packed; 73762306a36Sopenharmony_ci 73862306a36Sopenharmony_cistruct avs_volume_cfg { 73962306a36Sopenharmony_ci u32 channel_id; 74062306a36Sopenharmony_ci u32 target_volume; 74162306a36Sopenharmony_ci u32 curve_type; 74262306a36Sopenharmony_ci u32 reserved; /* alignment */ 74362306a36Sopenharmony_ci u64 curve_duration; 74462306a36Sopenharmony_ci} __packed; 74562306a36Sopenharmony_ci 74662306a36Sopenharmony_cistruct avs_peakvol_cfg { 74762306a36Sopenharmony_ci struct avs_modcfg_base base; 74862306a36Sopenharmony_ci struct avs_volume_cfg vols[]; 74962306a36Sopenharmony_ci} __packed; 75062306a36Sopenharmony_ci 75162306a36Sopenharmony_cistruct avs_micsel_cfg { 75262306a36Sopenharmony_ci struct avs_modcfg_base base; 75362306a36Sopenharmony_ci struct avs_audio_format out_fmt; 75462306a36Sopenharmony_ci} __packed; 75562306a36Sopenharmony_ci 75662306a36Sopenharmony_cistruct avs_mux_cfg { 75762306a36Sopenharmony_ci struct avs_modcfg_base base; 75862306a36Sopenharmony_ci struct avs_audio_format ref_fmt; 75962306a36Sopenharmony_ci struct avs_audio_format out_fmt; 76062306a36Sopenharmony_ci} __packed; 76162306a36Sopenharmony_ci 76262306a36Sopenharmony_cistruct avs_updown_mixer_cfg { 76362306a36Sopenharmony_ci struct avs_modcfg_base base; 76462306a36Sopenharmony_ci u32 out_channel_config; 76562306a36Sopenharmony_ci u32 coefficients_select; 76662306a36Sopenharmony_ci s32 coefficients[AVS_CHANNELS_MAX]; 76762306a36Sopenharmony_ci u32 channel_map; 76862306a36Sopenharmony_ci} __packed; 76962306a36Sopenharmony_ci 77062306a36Sopenharmony_cistruct avs_src_cfg { 77162306a36Sopenharmony_ci struct avs_modcfg_base base; 77262306a36Sopenharmony_ci u32 out_freq; 77362306a36Sopenharmony_ci} __packed; 77462306a36Sopenharmony_ci 77562306a36Sopenharmony_cistruct avs_probe_gtw_cfg { 77662306a36Sopenharmony_ci union avs_connector_node_id node_id; 77762306a36Sopenharmony_ci u32 dma_buffer_size; 77862306a36Sopenharmony_ci} __packed; 77962306a36Sopenharmony_ci 78062306a36Sopenharmony_cistruct avs_probe_cfg { 78162306a36Sopenharmony_ci struct avs_modcfg_base base; 78262306a36Sopenharmony_ci struct avs_probe_gtw_cfg gtw_cfg; 78362306a36Sopenharmony_ci} __packed; 78462306a36Sopenharmony_ci 78562306a36Sopenharmony_cistruct avs_aec_cfg { 78662306a36Sopenharmony_ci struct avs_modcfg_base base; 78762306a36Sopenharmony_ci struct avs_audio_format ref_fmt; 78862306a36Sopenharmony_ci struct avs_audio_format out_fmt; 78962306a36Sopenharmony_ci u32 cpc_lp_mode; 79062306a36Sopenharmony_ci} __packed; 79162306a36Sopenharmony_ci 79262306a36Sopenharmony_cistruct avs_asrc_cfg { 79362306a36Sopenharmony_ci struct avs_modcfg_base base; 79462306a36Sopenharmony_ci u32 out_freq; 79562306a36Sopenharmony_ci u32 rsvd0:1; 79662306a36Sopenharmony_ci u32 mode:1; 79762306a36Sopenharmony_ci u32 rsvd2:2; 79862306a36Sopenharmony_ci u32 disable_jitter_buffer:1; 79962306a36Sopenharmony_ci u32 rsvd3:27; 80062306a36Sopenharmony_ci} __packed; 80162306a36Sopenharmony_ci 80262306a36Sopenharmony_cistruct avs_wov_cfg { 80362306a36Sopenharmony_ci struct avs_modcfg_base base; 80462306a36Sopenharmony_ci u32 cpc_lp_mode; 80562306a36Sopenharmony_ci} __packed; 80662306a36Sopenharmony_ci 80762306a36Sopenharmony_ci/* Module runtime parameters */ 80862306a36Sopenharmony_ci 80962306a36Sopenharmony_cienum avs_copier_runtime_param { 81062306a36Sopenharmony_ci AVS_COPIER_SET_SINK_FORMAT = 2, 81162306a36Sopenharmony_ci}; 81262306a36Sopenharmony_ci 81362306a36Sopenharmony_cistruct avs_copier_sink_format { 81462306a36Sopenharmony_ci u32 sink_id; 81562306a36Sopenharmony_ci struct avs_audio_format src_fmt; 81662306a36Sopenharmony_ci struct avs_audio_format sink_fmt; 81762306a36Sopenharmony_ci} __packed; 81862306a36Sopenharmony_ci 81962306a36Sopenharmony_ciint avs_ipc_copier_set_sink_format(struct avs_dev *adev, u16 module_id, 82062306a36Sopenharmony_ci u8 instance_id, u32 sink_id, 82162306a36Sopenharmony_ci const struct avs_audio_format *src_fmt, 82262306a36Sopenharmony_ci const struct avs_audio_format *sink_fmt); 82362306a36Sopenharmony_ci 82462306a36Sopenharmony_cienum avs_peakvol_runtime_param { 82562306a36Sopenharmony_ci AVS_PEAKVOL_VOLUME = 0, 82662306a36Sopenharmony_ci}; 82762306a36Sopenharmony_ci 82862306a36Sopenharmony_cienum avs_audio_curve_type { 82962306a36Sopenharmony_ci AVS_AUDIO_CURVE_NONE = 0, 83062306a36Sopenharmony_ci AVS_AUDIO_CURVE_WINDOWS_FADE = 1, 83162306a36Sopenharmony_ci}; 83262306a36Sopenharmony_ci 83362306a36Sopenharmony_ciint avs_ipc_peakvol_set_volume(struct avs_dev *adev, u16 module_id, u8 instance_id, 83462306a36Sopenharmony_ci struct avs_volume_cfg *vol); 83562306a36Sopenharmony_ciint avs_ipc_peakvol_get_volume(struct avs_dev *adev, u16 module_id, u8 instance_id, 83662306a36Sopenharmony_ci struct avs_volume_cfg **vols, size_t *num_vols); 83762306a36Sopenharmony_ci 83862306a36Sopenharmony_ci#define AVS_PROBE_INST_ID 0 83962306a36Sopenharmony_ci 84062306a36Sopenharmony_cienum avs_probe_runtime_param { 84162306a36Sopenharmony_ci AVS_PROBE_INJECTION_DMA = 1, 84262306a36Sopenharmony_ci AVS_PROBE_INJECTION_DMA_DETACH, 84362306a36Sopenharmony_ci AVS_PROBE_POINTS, 84462306a36Sopenharmony_ci AVS_PROBE_POINTS_DISCONNECT, 84562306a36Sopenharmony_ci}; 84662306a36Sopenharmony_ci 84762306a36Sopenharmony_cistruct avs_probe_dma { 84862306a36Sopenharmony_ci union avs_connector_node_id node_id; 84962306a36Sopenharmony_ci u32 dma_buffer_size; 85062306a36Sopenharmony_ci} __packed; 85162306a36Sopenharmony_ci 85262306a36Sopenharmony_cienum avs_probe_type { 85362306a36Sopenharmony_ci AVS_PROBE_TYPE_INPUT = 0, 85462306a36Sopenharmony_ci AVS_PROBE_TYPE_OUTPUT, 85562306a36Sopenharmony_ci AVS_PROBE_TYPE_INTERNAL 85662306a36Sopenharmony_ci}; 85762306a36Sopenharmony_ci 85862306a36Sopenharmony_ciunion avs_probe_point_id { 85962306a36Sopenharmony_ci u32 value; 86062306a36Sopenharmony_ci struct { 86162306a36Sopenharmony_ci u32 module_id:16; 86262306a36Sopenharmony_ci u32 instance_id:8; 86362306a36Sopenharmony_ci u32 type:2; 86462306a36Sopenharmony_ci u32 index:6; 86562306a36Sopenharmony_ci } id; 86662306a36Sopenharmony_ci} __packed; 86762306a36Sopenharmony_ci 86862306a36Sopenharmony_cienum avs_connection_purpose { 86962306a36Sopenharmony_ci AVS_CONNECTION_PURPOSE_EXTRACT = 0, 87062306a36Sopenharmony_ci AVS_CONNECTION_PURPOSE_INJECT, 87162306a36Sopenharmony_ci AVS_CONNECTION_PURPOSE_INJECT_REEXTRACT, 87262306a36Sopenharmony_ci}; 87362306a36Sopenharmony_ci 87462306a36Sopenharmony_cistruct avs_probe_point_desc { 87562306a36Sopenharmony_ci union avs_probe_point_id id; 87662306a36Sopenharmony_ci u32 purpose; 87762306a36Sopenharmony_ci union avs_connector_node_id node_id; 87862306a36Sopenharmony_ci} __packed; 87962306a36Sopenharmony_ci 88062306a36Sopenharmony_ciint avs_ipc_probe_get_dma(struct avs_dev *adev, struct avs_probe_dma **dmas, size_t *num_dmas); 88162306a36Sopenharmony_ciint avs_ipc_probe_attach_dma(struct avs_dev *adev, struct avs_probe_dma *dmas, size_t num_dmas); 88262306a36Sopenharmony_ciint avs_ipc_probe_detach_dma(struct avs_dev *adev, union avs_connector_node_id *node_ids, 88362306a36Sopenharmony_ci size_t num_node_ids); 88462306a36Sopenharmony_ciint avs_ipc_probe_get_points(struct avs_dev *adev, struct avs_probe_point_desc **descs, 88562306a36Sopenharmony_ci size_t *num_descs); 88662306a36Sopenharmony_ciint avs_ipc_probe_connect_points(struct avs_dev *adev, struct avs_probe_point_desc *descs, 88762306a36Sopenharmony_ci size_t num_descs); 88862306a36Sopenharmony_ciint avs_ipc_probe_disconnect_points(struct avs_dev *adev, union avs_probe_point_id *ids, 88962306a36Sopenharmony_ci size_t num_ids); 89062306a36Sopenharmony_ci 89162306a36Sopenharmony_ci#endif /* __SOUND_SOC_INTEL_AVS_MSGS_H */ 892