162306a36Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */ 262306a36Sopenharmony_ci/* 362306a36Sopenharmony_ci * skl-tplg-interface.h - Intel DSP FW private data interface 462306a36Sopenharmony_ci * 562306a36Sopenharmony_ci * Copyright (C) 2015 Intel Corp 662306a36Sopenharmony_ci * Author: Jeeja KP <jeeja.kp@intel.com> 762306a36Sopenharmony_ci * Nilofer, Samreen <samreen.nilofer@intel.com> 862306a36Sopenharmony_ci */ 962306a36Sopenharmony_ci 1062306a36Sopenharmony_ci#ifndef __HDA_TPLG_INTERFACE_H__ 1162306a36Sopenharmony_ci#define __HDA_TPLG_INTERFACE_H__ 1262306a36Sopenharmony_ci 1362306a36Sopenharmony_ci#include <linux/types.h> 1462306a36Sopenharmony_ci 1562306a36Sopenharmony_ci/* 1662306a36Sopenharmony_ci * Default types range from 0~12. type can range from 0 to 0xff 1762306a36Sopenharmony_ci * SST types start at higher to avoid any overlapping in future 1862306a36Sopenharmony_ci */ 1962306a36Sopenharmony_ci#define SKL_CONTROL_TYPE_BYTE_TLV 0x100 2062306a36Sopenharmony_ci#define SKL_CONTROL_TYPE_MIC_SELECT 0x102 2162306a36Sopenharmony_ci#define SKL_CONTROL_TYPE_MULTI_IO_SELECT 0x103 2262306a36Sopenharmony_ci#define SKL_CONTROL_TYPE_MULTI_IO_SELECT_DMIC 0x104 2362306a36Sopenharmony_ci 2462306a36Sopenharmony_ci#define HDA_SST_CFG_MAX 900 /* size of copier cfg*/ 2562306a36Sopenharmony_ci#define MAX_IN_QUEUE 8 2662306a36Sopenharmony_ci#define MAX_OUT_QUEUE 8 2762306a36Sopenharmony_ci 2862306a36Sopenharmony_ci#define SKL_UUID_STR_SZ 40 2962306a36Sopenharmony_ci/* Event types goes here */ 3062306a36Sopenharmony_ci/* Reserve event type 0 for no event handlers */ 3162306a36Sopenharmony_cienum skl_event_types { 3262306a36Sopenharmony_ci SKL_EVENT_NONE = 0, 3362306a36Sopenharmony_ci SKL_MIXER_EVENT, 3462306a36Sopenharmony_ci SKL_MUX_EVENT, 3562306a36Sopenharmony_ci SKL_VMIXER_EVENT, 3662306a36Sopenharmony_ci SKL_PGA_EVENT 3762306a36Sopenharmony_ci}; 3862306a36Sopenharmony_ci 3962306a36Sopenharmony_ci/** 4062306a36Sopenharmony_ci * enum skl_ch_cfg - channel configuration 4162306a36Sopenharmony_ci * 4262306a36Sopenharmony_ci * @SKL_CH_CFG_MONO: One channel only 4362306a36Sopenharmony_ci * @SKL_CH_CFG_STEREO: L & R 4462306a36Sopenharmony_ci * @SKL_CH_CFG_2_1: L, R & LFE 4562306a36Sopenharmony_ci * @SKL_CH_CFG_3_0: L, C & R 4662306a36Sopenharmony_ci * @SKL_CH_CFG_3_1: L, C, R & LFE 4762306a36Sopenharmony_ci * @SKL_CH_CFG_QUATRO: L, R, Ls & Rs 4862306a36Sopenharmony_ci * @SKL_CH_CFG_4_0: L, C, R & Cs 4962306a36Sopenharmony_ci * @SKL_CH_CFG_5_0: L, C, R, Ls & Rs 5062306a36Sopenharmony_ci * @SKL_CH_CFG_5_1: L, C, R, Ls, Rs & LFE 5162306a36Sopenharmony_ci * @SKL_CH_CFG_DUAL_MONO: One channel replicated in two 5262306a36Sopenharmony_ci * @SKL_CH_CFG_I2S_DUAL_STEREO_0: Stereo(L,R) in 4 slots, 1st stream:[ L, R, -, - ] 5362306a36Sopenharmony_ci * @SKL_CH_CFG_I2S_DUAL_STEREO_1: Stereo(L,R) in 4 slots, 2nd stream:[ -, -, L, R ] 5462306a36Sopenharmony_ci * @SKL_CH_CFG_INVALID: Invalid 5562306a36Sopenharmony_ci */ 5662306a36Sopenharmony_cienum skl_ch_cfg { 5762306a36Sopenharmony_ci SKL_CH_CFG_MONO = 0, 5862306a36Sopenharmony_ci SKL_CH_CFG_STEREO = 1, 5962306a36Sopenharmony_ci SKL_CH_CFG_2_1 = 2, 6062306a36Sopenharmony_ci SKL_CH_CFG_3_0 = 3, 6162306a36Sopenharmony_ci SKL_CH_CFG_3_1 = 4, 6262306a36Sopenharmony_ci SKL_CH_CFG_QUATRO = 5, 6362306a36Sopenharmony_ci SKL_CH_CFG_4_0 = 6, 6462306a36Sopenharmony_ci SKL_CH_CFG_5_0 = 7, 6562306a36Sopenharmony_ci SKL_CH_CFG_5_1 = 8, 6662306a36Sopenharmony_ci SKL_CH_CFG_DUAL_MONO = 9, 6762306a36Sopenharmony_ci SKL_CH_CFG_I2S_DUAL_STEREO_0 = 10, 6862306a36Sopenharmony_ci SKL_CH_CFG_I2S_DUAL_STEREO_1 = 11, 6962306a36Sopenharmony_ci SKL_CH_CFG_7_1 = 12, 7062306a36Sopenharmony_ci SKL_CH_CFG_4_CHANNEL = SKL_CH_CFG_7_1, 7162306a36Sopenharmony_ci SKL_CH_CFG_INVALID 7262306a36Sopenharmony_ci}; 7362306a36Sopenharmony_ci 7462306a36Sopenharmony_cienum skl_module_type { 7562306a36Sopenharmony_ci SKL_MODULE_TYPE_MIXER = 0, 7662306a36Sopenharmony_ci SKL_MODULE_TYPE_COPIER, 7762306a36Sopenharmony_ci SKL_MODULE_TYPE_UPDWMIX, 7862306a36Sopenharmony_ci SKL_MODULE_TYPE_SRCINT, 7962306a36Sopenharmony_ci SKL_MODULE_TYPE_ALGO, 8062306a36Sopenharmony_ci SKL_MODULE_TYPE_BASE_OUTFMT, 8162306a36Sopenharmony_ci SKL_MODULE_TYPE_KPB, 8262306a36Sopenharmony_ci SKL_MODULE_TYPE_MIC_SELECT, 8362306a36Sopenharmony_ci}; 8462306a36Sopenharmony_ci 8562306a36Sopenharmony_cienum skl_core_affinity { 8662306a36Sopenharmony_ci SKL_AFFINITY_CORE_0 = 0, 8762306a36Sopenharmony_ci SKL_AFFINITY_CORE_1, 8862306a36Sopenharmony_ci SKL_AFFINITY_CORE_MAX 8962306a36Sopenharmony_ci}; 9062306a36Sopenharmony_ci 9162306a36Sopenharmony_cienum skl_pipe_conn_type { 9262306a36Sopenharmony_ci SKL_PIPE_CONN_TYPE_NONE = 0, 9362306a36Sopenharmony_ci SKL_PIPE_CONN_TYPE_FE, 9462306a36Sopenharmony_ci SKL_PIPE_CONN_TYPE_BE 9562306a36Sopenharmony_ci}; 9662306a36Sopenharmony_ci 9762306a36Sopenharmony_cienum skl_hw_conn_type { 9862306a36Sopenharmony_ci SKL_CONN_NONE = 0, 9962306a36Sopenharmony_ci SKL_CONN_SOURCE = 1, 10062306a36Sopenharmony_ci SKL_CONN_SINK = 2 10162306a36Sopenharmony_ci}; 10262306a36Sopenharmony_ci 10362306a36Sopenharmony_cienum skl_dev_type { 10462306a36Sopenharmony_ci SKL_DEVICE_BT = 0x0, 10562306a36Sopenharmony_ci SKL_DEVICE_DMIC = 0x1, 10662306a36Sopenharmony_ci SKL_DEVICE_I2S = 0x2, 10762306a36Sopenharmony_ci SKL_DEVICE_SLIMBUS = 0x3, 10862306a36Sopenharmony_ci SKL_DEVICE_HDALINK = 0x4, 10962306a36Sopenharmony_ci SKL_DEVICE_HDAHOST = 0x5, 11062306a36Sopenharmony_ci SKL_DEVICE_NONE 11162306a36Sopenharmony_ci}; 11262306a36Sopenharmony_ci 11362306a36Sopenharmony_ci/** 11462306a36Sopenharmony_ci * enum skl_interleaving - interleaving style 11562306a36Sopenharmony_ci * 11662306a36Sopenharmony_ci * @SKL_INTERLEAVING_PER_CHANNEL: [s1_ch1...s1_chN,...,sM_ch1...sM_chN] 11762306a36Sopenharmony_ci * @SKL_INTERLEAVING_PER_SAMPLE: [s1_ch1...sM_ch1,...,s1_chN...sM_chN] 11862306a36Sopenharmony_ci */ 11962306a36Sopenharmony_cienum skl_interleaving { 12062306a36Sopenharmony_ci SKL_INTERLEAVING_PER_CHANNEL = 0, 12162306a36Sopenharmony_ci SKL_INTERLEAVING_PER_SAMPLE = 1, 12262306a36Sopenharmony_ci}; 12362306a36Sopenharmony_ci 12462306a36Sopenharmony_cienum skl_sample_type { 12562306a36Sopenharmony_ci SKL_SAMPLE_TYPE_INT_MSB = 0, 12662306a36Sopenharmony_ci SKL_SAMPLE_TYPE_INT_LSB = 1, 12762306a36Sopenharmony_ci SKL_SAMPLE_TYPE_INT_SIGNED = 2, 12862306a36Sopenharmony_ci SKL_SAMPLE_TYPE_INT_UNSIGNED = 3, 12962306a36Sopenharmony_ci SKL_SAMPLE_TYPE_FLOAT = 4 13062306a36Sopenharmony_ci}; 13162306a36Sopenharmony_ci 13262306a36Sopenharmony_cienum module_pin_type { 13362306a36Sopenharmony_ci /* All pins of the module takes same PCM inputs or outputs 13462306a36Sopenharmony_ci * e.g. mixout 13562306a36Sopenharmony_ci */ 13662306a36Sopenharmony_ci SKL_PIN_TYPE_HOMOGENEOUS, 13762306a36Sopenharmony_ci /* All pins of the module takes different PCM inputs or outputs 13862306a36Sopenharmony_ci * e.g mux 13962306a36Sopenharmony_ci */ 14062306a36Sopenharmony_ci SKL_PIN_TYPE_HETEROGENEOUS, 14162306a36Sopenharmony_ci}; 14262306a36Sopenharmony_ci 14362306a36Sopenharmony_cienum skl_module_param_type { 14462306a36Sopenharmony_ci SKL_PARAM_DEFAULT = 0, 14562306a36Sopenharmony_ci SKL_PARAM_INIT, 14662306a36Sopenharmony_ci SKL_PARAM_SET, 14762306a36Sopenharmony_ci SKL_PARAM_BIND 14862306a36Sopenharmony_ci}; 14962306a36Sopenharmony_ci 15062306a36Sopenharmony_cistruct skl_dfw_algo_data { 15162306a36Sopenharmony_ci __u32 set_params:2; 15262306a36Sopenharmony_ci __u32 rsvd:30; 15362306a36Sopenharmony_ci __u32 param_id; 15462306a36Sopenharmony_ci __u32 max; 15562306a36Sopenharmony_ci char params[]; 15662306a36Sopenharmony_ci} __packed; 15762306a36Sopenharmony_ci 15862306a36Sopenharmony_cienum skl_tkn_dir { 15962306a36Sopenharmony_ci SKL_DIR_IN, 16062306a36Sopenharmony_ci SKL_DIR_OUT 16162306a36Sopenharmony_ci}; 16262306a36Sopenharmony_ci 16362306a36Sopenharmony_cienum skl_tuple_type { 16462306a36Sopenharmony_ci SKL_TYPE_TUPLE, 16562306a36Sopenharmony_ci SKL_TYPE_DATA 16662306a36Sopenharmony_ci}; 16762306a36Sopenharmony_ci 16862306a36Sopenharmony_ci/* v4 configuration data */ 16962306a36Sopenharmony_ci 17062306a36Sopenharmony_cistruct skl_dfw_v4_module_pin { 17162306a36Sopenharmony_ci __u16 module_id; 17262306a36Sopenharmony_ci __u16 instance_id; 17362306a36Sopenharmony_ci} __packed; 17462306a36Sopenharmony_ci 17562306a36Sopenharmony_cistruct skl_dfw_v4_module_fmt { 17662306a36Sopenharmony_ci __u32 channels; 17762306a36Sopenharmony_ci __u32 freq; 17862306a36Sopenharmony_ci __u32 bit_depth; 17962306a36Sopenharmony_ci __u32 valid_bit_depth; 18062306a36Sopenharmony_ci __u32 ch_cfg; 18162306a36Sopenharmony_ci __u32 interleaving_style; 18262306a36Sopenharmony_ci __u32 sample_type; 18362306a36Sopenharmony_ci __u32 ch_map; 18462306a36Sopenharmony_ci} __packed; 18562306a36Sopenharmony_ci 18662306a36Sopenharmony_cistruct skl_dfw_v4_module_caps { 18762306a36Sopenharmony_ci __u32 set_params:2; 18862306a36Sopenharmony_ci __u32 rsvd:30; 18962306a36Sopenharmony_ci __u32 param_id; 19062306a36Sopenharmony_ci __u32 caps_size; 19162306a36Sopenharmony_ci __u32 caps[HDA_SST_CFG_MAX]; 19262306a36Sopenharmony_ci} __packed; 19362306a36Sopenharmony_ci 19462306a36Sopenharmony_cistruct skl_dfw_v4_pipe { 19562306a36Sopenharmony_ci __u8 pipe_id; 19662306a36Sopenharmony_ci __u8 pipe_priority; 19762306a36Sopenharmony_ci __u16 conn_type:4; 19862306a36Sopenharmony_ci __u16 rsvd:4; 19962306a36Sopenharmony_ci __u16 memory_pages:8; 20062306a36Sopenharmony_ci} __packed; 20162306a36Sopenharmony_ci 20262306a36Sopenharmony_cistruct skl_dfw_v4_module { 20362306a36Sopenharmony_ci char uuid[SKL_UUID_STR_SZ]; 20462306a36Sopenharmony_ci 20562306a36Sopenharmony_ci __u16 module_id; 20662306a36Sopenharmony_ci __u16 instance_id; 20762306a36Sopenharmony_ci __u32 max_mcps; 20862306a36Sopenharmony_ci __u32 mem_pages; 20962306a36Sopenharmony_ci __u32 obs; 21062306a36Sopenharmony_ci __u32 ibs; 21162306a36Sopenharmony_ci __u32 vbus_id; 21262306a36Sopenharmony_ci 21362306a36Sopenharmony_ci __u32 max_in_queue:8; 21462306a36Sopenharmony_ci __u32 max_out_queue:8; 21562306a36Sopenharmony_ci __u32 time_slot:8; 21662306a36Sopenharmony_ci __u32 core_id:4; 21762306a36Sopenharmony_ci __u32 rsvd1:4; 21862306a36Sopenharmony_ci 21962306a36Sopenharmony_ci __u32 module_type:8; 22062306a36Sopenharmony_ci __u32 conn_type:4; 22162306a36Sopenharmony_ci __u32 dev_type:4; 22262306a36Sopenharmony_ci __u32 hw_conn_type:4; 22362306a36Sopenharmony_ci __u32 rsvd2:12; 22462306a36Sopenharmony_ci 22562306a36Sopenharmony_ci __u32 params_fixup:8; 22662306a36Sopenharmony_ci __u32 converter:8; 22762306a36Sopenharmony_ci __u32 input_pin_type:1; 22862306a36Sopenharmony_ci __u32 output_pin_type:1; 22962306a36Sopenharmony_ci __u32 is_dynamic_in_pin:1; 23062306a36Sopenharmony_ci __u32 is_dynamic_out_pin:1; 23162306a36Sopenharmony_ci __u32 is_loadable:1; 23262306a36Sopenharmony_ci __u32 rsvd3:11; 23362306a36Sopenharmony_ci 23462306a36Sopenharmony_ci struct skl_dfw_v4_pipe pipe; 23562306a36Sopenharmony_ci struct skl_dfw_v4_module_fmt in_fmt[MAX_IN_QUEUE]; 23662306a36Sopenharmony_ci struct skl_dfw_v4_module_fmt out_fmt[MAX_OUT_QUEUE]; 23762306a36Sopenharmony_ci struct skl_dfw_v4_module_pin in_pin[MAX_IN_QUEUE]; 23862306a36Sopenharmony_ci struct skl_dfw_v4_module_pin out_pin[MAX_OUT_QUEUE]; 23962306a36Sopenharmony_ci struct skl_dfw_v4_module_caps caps; 24062306a36Sopenharmony_ci} __packed; 24162306a36Sopenharmony_ci 24262306a36Sopenharmony_ci#endif 243