ipc4-topology.h 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537
  1. /* SPDX-License-Identifier: (GPL-2.0-only OR BSD-3-Clause) */
  2. /*
  3. * This file is provided under a dual BSD/GPLv2 license. When using or
  4. * redistributing this file, you may do so under either license.
  5. *
  6. * Copyright(c) 2022 Intel Corporation
  7. */
  8. #ifndef __INCLUDE_SOUND_SOF_IPC4_TOPOLOGY_H__
  9. #define __INCLUDE_SOUND_SOF_IPC4_TOPOLOGY_H__
  10. #include <sound/sof/ipc4/header.h>
  11. #define SOF_IPC4_FW_PAGE_SIZE BIT(12)
  12. #define SOF_IPC4_FW_PAGE(x) ((((x) + BIT(12) - 1) & ~(BIT(12) - 1)) >> 12)
  13. #define SOF_IPC4_FW_ROUNDUP(x) (((x) + BIT(6) - 1) & (~(BIT(6) - 1)))
  14. #define SOF_IPC4_MODULE_LOAD_TYPE GENMASK(3, 0)
  15. #define SOF_IPC4_MODULE_AUTO_START BIT(4)
  16. /*
  17. * Two module schedule domains in fw :
  18. * LL domain - Low latency domain
  19. * DP domain - Data processing domain
  20. * The LL setting should be equal to !DP setting
  21. */
  22. #define SOF_IPC4_MODULE_LL BIT(5)
  23. #define SOF_IPC4_MODULE_DP BIT(6)
  24. #define SOF_IPC4_MODULE_LIB_CODE BIT(7)
  25. #define SOF_IPC4_MODULE_INIT_CONFIG_MASK GENMASK(11, 8)
  26. #define SOF_IPC4_MODULE_INIT_CONFIG_TYPE_BASE_CFG 0
  27. #define SOF_IPC4_MODULE_INIT_CONFIG_TYPE_BASE_CFG_WITH_EXT 1
  28. #define SOF_IPC4_MODULE_INSTANCE_LIST_ITEM_SIZE 12
  29. #define SOF_IPC4_PIPELINE_OBJECT_SIZE 448
  30. #define SOF_IPC4_DATA_QUEUE_OBJECT_SIZE 128
  31. #define SOF_IPC4_LL_TASK_OBJECT_SIZE 72
  32. #define SOF_IPC4_DP_TASK_OBJECT_SIZE 104
  33. #define SOF_IPC4_DP_TASK_LIST_SIZE (12 + 8)
  34. #define SOF_IPC4_LL_TASK_LIST_ITEM_SIZE 12
  35. #define SOF_IPC4_FW_MAX_PAGE_COUNT 20
  36. #define SOF_IPC4_FW_MAX_QUEUE_COUNT 8
  37. /* IPC4 sample types */
  38. #define SOF_IPC4_TYPE_MSB_INTEGER 0
  39. #define SOF_IPC4_TYPE_LSB_INTEGER 1
  40. #define SOF_IPC4_TYPE_SIGNED_INTEGER 2
  41. #define SOF_IPC4_TYPE_UNSIGNED_INTEGER 3
  42. #define SOF_IPC4_TYPE_FLOAT 4
  43. #define SOF_IPC4_TYPE_A_LAW 5
  44. #define SOF_IPC4_TYPE_MU_LAW 6
  45. /* Node index and mask applicable for host copier and ALH/HDA type DAI copiers */
  46. #define SOF_IPC4_NODE_INDEX_MASK 0xFF
  47. #define SOF_IPC4_NODE_INDEX(x) ((x) & SOF_IPC4_NODE_INDEX_MASK)
  48. #define SOF_IPC4_NODE_TYPE(x) ((x) << 8)
  49. #define SOF_IPC4_GET_NODE_TYPE(node_id) ((node_id) >> 8)
  50. /* Node ID for SSP type DAI copiers */
  51. #define SOF_IPC4_NODE_INDEX_INTEL_SSP(x) (((x) & 0xf) << 4)
  52. /* Node ID for DMIC type DAI copiers */
  53. #define SOF_IPC4_NODE_INDEX_INTEL_DMIC(x) ((x) & 0x7)
  54. #define SOF_IPC4_GAIN_ALL_CHANNELS_MASK 0xffffffff
  55. #define SOF_IPC4_VOL_ZERO_DB 0x7fffffff
  56. #define SOF_IPC4_DMA_DEVICE_MAX_COUNT 16
  57. #define SOF_IPC4_CHAIN_DMA_NODE_ID 0x7fffffff
  58. #define SOF_IPC4_INVALID_NODE_ID 0xffffffff
  59. /* FW requires minimum 4ms DMA buffer size */
  60. #define SOF_IPC4_MIN_DMA_BUFFER_SIZE 4
  61. /* ChainDMA in fw uses 5ms DMA buffer */
  62. #define SOF_IPC4_CHAIN_DMA_BUFFER_SIZE 5
  63. /*
  64. * The base of multi-gateways. Multi-gateways addressing starts from
  65. * ALH_MULTI_GTW_BASE and there are ALH_MULTI_GTW_COUNT multi-sources
  66. * and ALH_MULTI_GTW_COUNT multi-sinks available.
  67. * Addressing is continuous from ALH_MULTI_GTW_BASE to
  68. * ALH_MULTI_GTW_BASE + ALH_MULTI_GTW_COUNT - 1.
  69. */
  70. #define ALH_MULTI_GTW_BASE 0x50
  71. /* A magic number from FW */
  72. #define ALH_MULTI_GTW_COUNT 8
  73. enum sof_ipc4_copier_module_config_params {
  74. /*
  75. * Use LARGE_CONFIG_SET to initialize timestamp event. Ipc mailbox must
  76. * contain properly built CopierConfigTimestampInitData struct.
  77. */
  78. SOF_IPC4_COPIER_MODULE_CFG_PARAM_TIMESTAMP_INIT = 1,
  79. /*
  80. * Use LARGE_CONFIG_SET to initialize copier sink. Ipc mailbox must contain
  81. * properly built CopierConfigSetSinkFormat struct.
  82. */
  83. SOF_IPC4_COPIER_MODULE_CFG_PARAM_SET_SINK_FORMAT,
  84. /*
  85. * Use LARGE_CONFIG_SET to initialize and enable on Copier data segment
  86. * event. Ipc mailbox must contain properly built DataSegmentEnabled struct.
  87. */
  88. SOF_IPC4_COPIER_MODULE_CFG_PARAM_DATA_SEGMENT_ENABLED,
  89. /*
  90. * Use LARGE_CONFIG_GET to retrieve Linear Link Position (LLP) value for non
  91. * HD-A gateways.
  92. */
  93. SOF_IPC4_COPIER_MODULE_CFG_PARAM_LLP_READING,
  94. /*
  95. * Use LARGE_CONFIG_GET to retrieve Linear Link Position (LLP) value for non
  96. * HD-A gateways and corresponding total processed data
  97. */
  98. SOF_IPC4_COPIER_MODULE_CFG_PARAM_LLP_READING_EXTENDED,
  99. /*
  100. * Use LARGE_CONFIG_SET to setup attenuation on output pins. Data is just uint32_t.
  101. * note Config is only allowed when output pin is set up for 32bit and source
  102. * is connected to Gateway
  103. */
  104. SOF_IPC4_COPIER_MODULE_CFG_ATTENUATION,
  105. };
  106. /* Scheduling domain, unset, Low Latency, or Data Processing */
  107. enum sof_comp_domain {
  108. SOF_COMP_DOMAIN_UNSET = 0, /* Take domain value from manifest */
  109. SOF_COMP_DOMAIN_LL, /* Low Latency scheduling domain */
  110. SOF_COMP_DOMAIN_DP, /* Data Processing scheduling domain */
  111. };
  112. struct sof_ipc4_copier_config_set_sink_format {
  113. /* Id of sink */
  114. u32 sink_id;
  115. /*
  116. * Input format used by the source
  117. * attention must be the same as present if already initialized.
  118. */
  119. struct sof_ipc4_audio_format source_fmt;
  120. /* Output format used by the sink */
  121. struct sof_ipc4_audio_format sink_fmt;
  122. } __packed __aligned(4);
  123. /**
  124. * struct sof_ipc4_pipeline - pipeline config data
  125. * @priority: Priority of this pipeline
  126. * @lp_mode: Low power mode
  127. * @mem_usage: Memory usage
  128. * @core_id: Target core for the pipeline
  129. * @state: Pipeline state
  130. * @use_chain_dma: flag to indicate if the firmware shall use chained DMA
  131. * @msg: message structure for pipeline
  132. * @skip_during_fe_trigger: skip triggering this pipeline during the FE DAI trigger
  133. * @direction_valid: flag indicating if valid direction is set in topology
  134. * @direction: pipeline direction set in topology if direction_valid is true
  135. */
  136. struct sof_ipc4_pipeline {
  137. uint32_t priority;
  138. uint32_t lp_mode;
  139. uint32_t mem_usage;
  140. uint32_t core_id;
  141. int state;
  142. bool use_chain_dma;
  143. struct sof_ipc4_msg msg;
  144. bool skip_during_fe_trigger;
  145. bool direction_valid;
  146. u32 direction;
  147. };
  148. /**
  149. * struct sof_ipc4_multi_pipeline_data - multi pipeline trigger IPC data
  150. * @count: Number of pipelines to be triggered
  151. * @pipeline_instance_ids: Flexible array of IDs of the pipelines to be triggered
  152. */
  153. struct ipc4_pipeline_set_state_data {
  154. u32 count;
  155. DECLARE_FLEX_ARRAY(u32, pipeline_instance_ids);
  156. } __packed;
  157. /**
  158. * struct sof_ipc4_pin_format - Module pin format
  159. * @pin_index: pin index
  160. * @buffer_size: buffer size in bytes
  161. * @audio_fmt: audio format for the pin
  162. *
  163. * This structure can be used for both output or input pins and the pin_index is relative to the
  164. * pin type i.e output/input pin
  165. */
  166. struct sof_ipc4_pin_format {
  167. u32 pin_index;
  168. u32 buffer_size;
  169. struct sof_ipc4_audio_format audio_fmt;
  170. };
  171. /**
  172. * struct sof_ipc4_available_audio_format - Available audio formats
  173. * @output_pin_fmts: Available output pin formats
  174. * @input_pin_fmts: Available input pin formats
  175. * @num_input_formats: Number of input pin formats
  176. * @num_output_formats: Number of output pin formats
  177. */
  178. struct sof_ipc4_available_audio_format {
  179. struct sof_ipc4_pin_format *output_pin_fmts;
  180. struct sof_ipc4_pin_format *input_pin_fmts;
  181. u32 num_input_formats;
  182. u32 num_output_formats;
  183. };
  184. /**
  185. * struct sof_copier_gateway_cfg - IPC gateway configuration
  186. * @node_id: ID of Gateway Node
  187. * @dma_buffer_size: Preferred Gateway DMA buffer size (in bytes)
  188. * @config_length: Length of gateway node configuration blob specified in #config_data
  189. * config_data: Gateway node configuration blob
  190. */
  191. struct sof_copier_gateway_cfg {
  192. uint32_t node_id;
  193. uint32_t dma_buffer_size;
  194. uint32_t config_length;
  195. uint32_t config_data[];
  196. };
  197. /**
  198. * struct sof_ipc4_copier_data - IPC data for copier
  199. * @base_config: Base configuration including input audio format
  200. * @out_format: Output audio format
  201. * @copier_feature_mask: Copier feature mask
  202. * @gtw_cfg: Gateway configuration
  203. */
  204. struct sof_ipc4_copier_data {
  205. struct sof_ipc4_base_module_cfg base_config;
  206. struct sof_ipc4_audio_format out_format;
  207. uint32_t copier_feature_mask;
  208. struct sof_copier_gateway_cfg gtw_cfg;
  209. };
  210. /**
  211. * struct sof_ipc4_gtw_attributes: Gateway attributes
  212. * @lp_buffer_alloc: Gateway data requested in low power memory
  213. * @alloc_from_reg_file: Gateway data requested in register file memory
  214. * @rsvd: reserved for future use
  215. */
  216. struct sof_ipc4_gtw_attributes {
  217. uint32_t lp_buffer_alloc : 1;
  218. uint32_t alloc_from_reg_file : 1;
  219. uint32_t rsvd : 30;
  220. };
  221. /**
  222. * struct sof_ipc4_dma_device_stream_ch_map: abstract representation of
  223. * channel mapping to DMAs
  224. * @device: representation of hardware device address or FIFO
  225. * @channel_mask: channels handled by @device. Channels are expected to be
  226. * contiguous
  227. */
  228. struct sof_ipc4_dma_device_stream_ch_map {
  229. uint32_t device;
  230. uint32_t channel_mask;
  231. };
  232. /**
  233. * struct sof_ipc4_dma_stream_ch_map: DMA configuration data
  234. * @device_count: Number valid items in mapping array
  235. * @mapping: device address and channel mask
  236. */
  237. struct sof_ipc4_dma_stream_ch_map {
  238. uint32_t device_count;
  239. struct sof_ipc4_dma_device_stream_ch_map mapping[SOF_IPC4_DMA_DEVICE_MAX_COUNT];
  240. } __packed;
  241. #define SOF_IPC4_DMA_METHOD_HDA 1
  242. #define SOF_IPC4_DMA_METHOD_GPDMA 2 /* defined for consistency but not used */
  243. #define SOF_IPC4_CHAIN_DMA_BUF_SIZE_MS 2
  244. /**
  245. * struct sof_ipc4_dma_config: DMA configuration
  246. * @dma_method: HDAudio or GPDMA
  247. * @pre_allocated_by_host: 1 if host driver allocates DMA channels, 0 otherwise
  248. * @dma_channel_id: for HDaudio defined as @stream_id - 1
  249. * @stream_id: HDaudio stream tag
  250. * @dma_stream_channel_map: array of device/channel mappings
  251. * @dma_priv_config_size: currently not used
  252. * @dma_priv_config: currently not used
  253. */
  254. struct sof_ipc4_dma_config {
  255. uint8_t dma_method;
  256. uint8_t pre_allocated_by_host;
  257. uint16_t rsvd;
  258. uint32_t dma_channel_id;
  259. uint32_t stream_id;
  260. struct sof_ipc4_dma_stream_ch_map dma_stream_channel_map;
  261. uint32_t dma_priv_config_size;
  262. uint8_t dma_priv_config[];
  263. } __packed;
  264. #define SOF_IPC4_GTW_DMA_CONFIG_ID 0x1000
  265. /**
  266. * struct sof_ipc4_dma_config: DMA configuration
  267. * @type: set to SOF_IPC4_GTW_DMA_CONFIG_ID
  268. * @length: sizeof(struct sof_ipc4_dma_config) + dma_config.dma_priv_config_size
  269. * @dma_config: actual DMA configuration
  270. */
  271. struct sof_ipc4_dma_config_tlv {
  272. uint32_t type;
  273. uint32_t length;
  274. struct sof_ipc4_dma_config dma_config;
  275. } __packed;
  276. /** struct sof_ipc4_alh_configuration_blob: ALH blob
  277. * @gw_attr: Gateway attributes
  278. * @alh_cfg: ALH configuration data
  279. */
  280. struct sof_ipc4_alh_configuration_blob {
  281. struct sof_ipc4_gtw_attributes gw_attr;
  282. struct sof_ipc4_dma_stream_ch_map alh_cfg;
  283. };
  284. /**
  285. * struct sof_ipc4_copier - copier config data
  286. * @data: IPC copier data
  287. * @copier_config: Copier + blob
  288. * @ipc_config_size: Size of copier_config
  289. * @available_fmt: Available audio format
  290. * @frame_fmt: frame format
  291. * @msg: message structure for copier
  292. * @gtw_attr: Gateway attributes for copier blob
  293. * @dai_type: DAI type
  294. * @dai_index: DAI index
  295. * @dma_config_tlv: DMA configuration
  296. */
  297. struct sof_ipc4_copier {
  298. struct sof_ipc4_copier_data data;
  299. u32 *copier_config;
  300. uint32_t ipc_config_size;
  301. void *ipc_config_data;
  302. struct sof_ipc4_available_audio_format available_fmt;
  303. u32 frame_fmt;
  304. struct sof_ipc4_msg msg;
  305. struct sof_ipc4_gtw_attributes *gtw_attr;
  306. u32 dai_type;
  307. int dai_index;
  308. struct sof_ipc4_dma_config_tlv dma_config_tlv[SOF_IPC4_DMA_DEVICE_MAX_COUNT];
  309. };
  310. /**
  311. * struct sof_ipc4_ctrl_value_chan: generic channel mapped value data
  312. * @channel: Channel ID
  313. * @value: Value associated with @channel
  314. */
  315. struct sof_ipc4_ctrl_value_chan {
  316. u32 channel;
  317. u32 value;
  318. };
  319. /**
  320. * struct sof_ipc4_control_data - IPC data for kcontrol IO
  321. * @msg: message structure for kcontrol IO
  322. * @index: pipeline ID
  323. * @chanv: channel ID and value array used by volume type controls
  324. * @data: data for binary kcontrols
  325. */
  326. struct sof_ipc4_control_data {
  327. struct sof_ipc4_msg msg;
  328. int index;
  329. union {
  330. DECLARE_FLEX_ARRAY(struct sof_ipc4_ctrl_value_chan, chanv);
  331. DECLARE_FLEX_ARRAY(struct sof_abi_hdr, data);
  332. };
  333. };
  334. #define SOF_IPC4_SWITCH_CONTROL_PARAM_ID 200
  335. #define SOF_IPC4_ENUM_CONTROL_PARAM_ID 201
  336. #define SOF_IPC4_BYTES_CONTROL_PARAM_ID 202
  337. /**
  338. * struct sof_ipc4_control_msg_payload - IPC payload for kcontrol parameters
  339. * @id: unique id of the control
  340. * @num_elems: Number of elements in the chanv array or number of bytes in data
  341. * @reserved: reserved for future use, must be set to 0
  342. * @chanv: channel ID and value array
  343. * @data: binary payload
  344. */
  345. struct sof_ipc4_control_msg_payload {
  346. uint16_t id;
  347. uint16_t num_elems;
  348. uint32_t reserved[4];
  349. union {
  350. DECLARE_FLEX_ARRAY(struct sof_ipc4_ctrl_value_chan, chanv);
  351. DECLARE_FLEX_ARRAY(uint8_t, data);
  352. };
  353. } __packed;
  354. /**
  355. * struct sof_ipc4_gain_params - IPC gain parameters
  356. * @channels: Channels
  357. * @init_val: Initial value
  358. * @curve_type: Curve type
  359. * @reserved: reserved for future use
  360. * @curve_duration_l: Curve duration low part
  361. * @curve_duration_h: Curve duration high part
  362. */
  363. struct sof_ipc4_gain_params {
  364. uint32_t channels;
  365. uint32_t init_val;
  366. uint32_t curve_type;
  367. uint32_t reserved;
  368. uint32_t curve_duration_l;
  369. uint32_t curve_duration_h;
  370. } __packed __aligned(4);
  371. /**
  372. * struct sof_ipc4_gain_data - IPC gain init blob
  373. * @base_config: IPC base config data
  374. * @params: Initial parameters for the gain module
  375. */
  376. struct sof_ipc4_gain_data {
  377. struct sof_ipc4_base_module_cfg base_config;
  378. struct sof_ipc4_gain_params params;
  379. } __packed __aligned(4);
  380. /**
  381. * struct sof_ipc4_gain - gain config data
  382. * @data: IPC gain blob
  383. * @available_fmt: Available audio format
  384. * @msg: message structure for gain
  385. */
  386. struct sof_ipc4_gain {
  387. struct sof_ipc4_gain_data data;
  388. struct sof_ipc4_available_audio_format available_fmt;
  389. struct sof_ipc4_msg msg;
  390. };
  391. /**
  392. * struct sof_ipc4_mixer - mixer config data
  393. * @base_config: IPC base config data
  394. * @available_fmt: Available audio format
  395. * @msg: IPC4 message struct containing header and data info
  396. */
  397. struct sof_ipc4_mixer {
  398. struct sof_ipc4_base_module_cfg base_config;
  399. struct sof_ipc4_available_audio_format available_fmt;
  400. struct sof_ipc4_msg msg;
  401. };
  402. /*
  403. * struct sof_ipc4_src_data - IPC data for SRC
  404. * @base_config: IPC base config data
  405. * @sink_rate: Output rate for sink module
  406. */
  407. struct sof_ipc4_src_data {
  408. struct sof_ipc4_base_module_cfg base_config;
  409. uint32_t sink_rate;
  410. } __packed __aligned(4);
  411. /**
  412. * struct sof_ipc4_src - SRC config data
  413. * @data: IPC base config data
  414. * @available_fmt: Available audio format
  415. * @msg: IPC4 message struct containing header and data info
  416. */
  417. struct sof_ipc4_src {
  418. struct sof_ipc4_src_data data;
  419. struct sof_ipc4_available_audio_format available_fmt;
  420. struct sof_ipc4_msg msg;
  421. };
  422. /*
  423. * struct sof_ipc4_asrc_data - IPC data for ASRC
  424. * @base_config: IPC base config data
  425. * @out_freq: Output rate for sink module, passed as such from topology to FW.
  426. * @asrc_mode: Control for ASRC features with bit-fields, passed as such from topolgy to FW.
  427. */
  428. struct sof_ipc4_asrc_data {
  429. struct sof_ipc4_base_module_cfg base_config;
  430. uint32_t out_freq;
  431. uint32_t asrc_mode;
  432. } __packed __aligned(4);
  433. /**
  434. * struct sof_ipc4_asrc - ASRC config data
  435. * @data: IPC base config data
  436. * @available_fmt: Available audio format
  437. * @msg: IPC4 message struct containing header and data info
  438. */
  439. struct sof_ipc4_asrc {
  440. struct sof_ipc4_asrc_data data;
  441. struct sof_ipc4_available_audio_format available_fmt;
  442. struct sof_ipc4_msg msg;
  443. };
  444. /**
  445. * struct sof_ipc4_base_module_cfg_ext - base module config extension containing the pin format
  446. * information for the module. Both @num_input_pin_fmts and @num_output_pin_fmts cannot be 0 for a
  447. * module.
  448. * @num_input_pin_fmts: number of input pin formats in the @pin_formats array
  449. * @num_output_pin_fmts: number of output pin formats in the @pin_formats array
  450. * @reserved: reserved for future use
  451. * @pin_formats: flexible array consisting of @num_input_pin_fmts input pin format items followed
  452. * by @num_output_pin_fmts output pin format items
  453. */
  454. struct sof_ipc4_base_module_cfg_ext {
  455. u16 num_input_pin_fmts;
  456. u16 num_output_pin_fmts;
  457. u8 reserved[12];
  458. DECLARE_FLEX_ARRAY(struct sof_ipc4_pin_format, pin_formats);
  459. } __packed;
  460. /**
  461. * struct sof_ipc4_process - process config data
  462. * @base_config: IPC base config data
  463. * @base_config_ext: Base config extension data for module init
  464. * @output_format: Output audio format
  465. * @available_fmt: Available audio format
  466. * @ipc_config_data: Process module config data
  467. * @ipc_config_size: Size of process module config data
  468. * @msg: IPC4 message struct containing header and data info
  469. * @base_config_ext_size: Size of the base config extension data in bytes
  470. * @init_config: Module init config type (SOF_IPC4_MODULE_INIT_CONFIG_TYPE_*)
  471. */
  472. struct sof_ipc4_process {
  473. struct sof_ipc4_base_module_cfg base_config;
  474. struct sof_ipc4_base_module_cfg_ext *base_config_ext;
  475. struct sof_ipc4_audio_format output_format;
  476. struct sof_ipc4_available_audio_format available_fmt;
  477. void *ipc_config_data;
  478. uint32_t ipc_config_size;
  479. struct sof_ipc4_msg msg;
  480. u32 base_config_ext_size;
  481. u32 init_config;
  482. };
  483. bool sof_ipc4_copier_is_single_bitdepth(struct snd_sof_dev *sdev,
  484. struct sof_ipc4_pin_format *pin_fmts,
  485. u32 pin_fmts_size);
  486. #endif