/****************************************************************************
 ****************************************************************************
 ***
 ***   This header was automatically generated from a Linux kernel header
 ***   of the same name, to make information necessary for userspace to
 ***   call into the kernel available to libc.  It contains only constants,
 ***   structures, and macros generated from the original header, and thus,
 ***   contains no copyrightable information.
 ***
 ***   To edit the content of this header, modify the corresponding
 ***   source file (e.g. under external/kernel-headers/original/) then
 ***   run bionic/libc/kernel/tools/update_all.py
 ***
 ***   Any manual change here will be lost the next time this script will
 ***   be run. You've been warned!
 ***
 ****************************************************************************
 ****************************************************************************/
#ifndef __HDA_TPLG_INTERFACE_H__
#define __HDA_TPLG_INTERFACE_H__
#include <linux/types.h>
#define SKL_CONTROL_TYPE_BYTE_TLV 0x100
#define SKL_CONTROL_TYPE_MIC_SELECT 0x102
#define SKL_CONTROL_TYPE_MULTI_IO_SELECT 0x103
#define SKL_CONTROL_TYPE_MULTI_IO_SELECT_DMIC 0x104
#define HDA_SST_CFG_MAX 900
#define MAX_IN_QUEUE 8
#define MAX_OUT_QUEUE 8
#define SKL_UUID_STR_SZ 40
enum skl_event_types {
  SKL_EVENT_NONE = 0,
  SKL_MIXER_EVENT,
  SKL_MUX_EVENT,
  SKL_VMIXER_EVENT,
  SKL_PGA_EVENT
};
enum skl_ch_cfg {
  SKL_CH_CFG_MONO = 0,
  SKL_CH_CFG_STEREO = 1,
  SKL_CH_CFG_2_1 = 2,
  SKL_CH_CFG_3_0 = 3,
  SKL_CH_CFG_3_1 = 4,
  SKL_CH_CFG_QUATRO = 5,
  SKL_CH_CFG_4_0 = 6,
  SKL_CH_CFG_5_0 = 7,
  SKL_CH_CFG_5_1 = 8,
  SKL_CH_CFG_DUAL_MONO = 9,
  SKL_CH_CFG_I2S_DUAL_STEREO_0 = 10,
  SKL_CH_CFG_I2S_DUAL_STEREO_1 = 11,
  SKL_CH_CFG_7_1 = 12,
  SKL_CH_CFG_4_CHANNEL = SKL_CH_CFG_7_1,
  SKL_CH_CFG_INVALID
};
enum skl_module_type {
  SKL_MODULE_TYPE_MIXER = 0,
  SKL_MODULE_TYPE_COPIER,
  SKL_MODULE_TYPE_UPDWMIX,
  SKL_MODULE_TYPE_SRCINT,
  SKL_MODULE_TYPE_ALGO,
  SKL_MODULE_TYPE_BASE_OUTFMT,
  SKL_MODULE_TYPE_KPB,
  SKL_MODULE_TYPE_MIC_SELECT,
};
enum skl_core_affinity {
  SKL_AFFINITY_CORE_0 = 0,
  SKL_AFFINITY_CORE_1,
  SKL_AFFINITY_CORE_MAX
};
enum skl_pipe_conn_type {
  SKL_PIPE_CONN_TYPE_NONE = 0,
  SKL_PIPE_CONN_TYPE_FE,
  SKL_PIPE_CONN_TYPE_BE
};
enum skl_hw_conn_type {
  SKL_CONN_NONE = 0,
  SKL_CONN_SOURCE = 1,
  SKL_CONN_SINK = 2
};
enum skl_dev_type {
  SKL_DEVICE_BT = 0x0,
  SKL_DEVICE_DMIC = 0x1,
  SKL_DEVICE_I2S = 0x2,
  SKL_DEVICE_SLIMBUS = 0x3,
  SKL_DEVICE_HDALINK = 0x4,
  SKL_DEVICE_HDAHOST = 0x5,
  SKL_DEVICE_NONE
};
enum skl_interleaving {
  SKL_INTERLEAVING_PER_CHANNEL = 0,
  SKL_INTERLEAVING_PER_SAMPLE = 1,
};
enum skl_sample_type {
  SKL_SAMPLE_TYPE_INT_MSB = 0,
  SKL_SAMPLE_TYPE_INT_LSB = 1,
  SKL_SAMPLE_TYPE_INT_SIGNED = 2,
  SKL_SAMPLE_TYPE_INT_UNSIGNED = 3,
  SKL_SAMPLE_TYPE_FLOAT = 4
};
enum module_pin_type {
  SKL_PIN_TYPE_HOMOGENEOUS,
  SKL_PIN_TYPE_HETEROGENEOUS,
};
enum skl_module_param_type {
  SKL_PARAM_DEFAULT = 0,
  SKL_PARAM_INIT,
  SKL_PARAM_SET,
  SKL_PARAM_BIND
};
struct skl_dfw_algo_data {
  __u32 set_params : 2;
  __u32 rsvd : 30;
  __u32 param_id;
  __u32 max;
  char params[];
} __attribute__((__packed__));
enum skl_tkn_dir {
  SKL_DIR_IN,
  SKL_DIR_OUT
};
enum skl_tuple_type {
  SKL_TYPE_TUPLE,
  SKL_TYPE_DATA
};
struct skl_dfw_v4_module_pin {
  __u16 module_id;
  __u16 instance_id;
} __attribute__((__packed__));
struct skl_dfw_v4_module_fmt {
  __u32 channels;
  __u32 freq;
  __u32 bit_depth;
  __u32 valid_bit_depth;
  __u32 ch_cfg;
  __u32 interleaving_style;
  __u32 sample_type;
  __u32 ch_map;
} __attribute__((__packed__));
struct skl_dfw_v4_module_caps {
  __u32 set_params : 2;
  __u32 rsvd : 30;
  __u32 param_id;
  __u32 caps_size;
  __u32 caps[HDA_SST_CFG_MAX];
} __attribute__((__packed__));
struct skl_dfw_v4_pipe {
  __u8 pipe_id;
  __u8 pipe_priority;
  __u16 conn_type : 4;
  __u16 rsvd : 4;
  __u16 memory_pages : 8;
} __attribute__((__packed__));
struct skl_dfw_v4_module {
  char uuid[SKL_UUID_STR_SZ];
  __u16 module_id;
  __u16 instance_id;
  __u32 max_mcps;
  __u32 mem_pages;
  __u32 obs;
  __u32 ibs;
  __u32 vbus_id;
  __u32 max_in_queue : 8;
  __u32 max_out_queue : 8;
  __u32 time_slot : 8;
  __u32 core_id : 4;
  __u32 rsvd1 : 4;
  __u32 module_type : 8;
  __u32 conn_type : 4;
  __u32 dev_type : 4;
  __u32 hw_conn_type : 4;
  __u32 rsvd2 : 12;
  __u32 params_fixup : 8;
  __u32 converter : 8;
  __u32 input_pin_type : 1;
  __u32 output_pin_type : 1;
  __u32 is_dynamic_in_pin : 1;
  __u32 is_dynamic_out_pin : 1;
  __u32 is_loadable : 1;
  __u32 rsvd3 : 11;
  struct skl_dfw_v4_pipe pipe;
  struct skl_dfw_v4_module_fmt in_fmt[MAX_IN_QUEUE];
  struct skl_dfw_v4_module_fmt out_fmt[MAX_OUT_QUEUE];
  struct skl_dfw_v4_module_pin in_pin[MAX_IN_QUEUE];
  struct skl_dfw_v4_module_pin out_pin[MAX_OUT_QUEUE];
  struct skl_dfw_v4_module_caps caps;
} __attribute__((__packed__));
#endif
