Sound Open Firmware
Loading...
Searching...
No Matches
component_ext.h
Go to the documentation of this file.
1/* SPDX-License-Identifier: BSD-3-Clause
2 *
3 * Copyright(c) 2016 Intel Corporation. All rights reserved.
4 *
5 * Author: Liam Girdwood <liam.r.girdwood@linux.intel.com>
6 * Keyon Jie <yang.jie@linux.intel.com>
7 */
8
15
16#ifndef __SOF_AUDIO_COMPONENT_INT_H__
17#define __SOF_AUDIO_COMPONENT_INT_H__
18
19#include <sof/audio/component.h>
20#include <ipc/topology.h>
21
25
28 struct list_item list;
29};
30
32#define comp_buffer_list(comp, dir) \
33 ((dir) == PPL_DIR_DOWNSTREAM ? &(comp)->bsink_list : \
34 &(comp)->bsource_list)
35
37#if CONFIG_IPC_MAJOR_3
38struct comp_dev *comp_new(struct sof_ipc_comp *comp);
39#elif CONFIG_IPC_MAJOR_4
40struct comp_dev *comp_new_ipc4(const struct ipc4_module_init_instance *module_init);
41#endif
42
44static inline void comp_free(struct comp_dev *dev)
45{
46 const struct comp_driver *drv = dev->drv;
47
48 assert(drv->ops.free);
49
50 /*
51 * In DP case this will run in DP thread context, so the task can only
52 * be freed after this.
53 */
54 drv->ops.free(dev);
55}
56
63static inline int comp_params_remote(struct comp_dev *dev,
64 struct sof_ipc_stream_params *params)
65{
67 dev->ipc_config.core, sizeof(*params), params, };
68
69 return idc_send_msg(&msg, IDC_BLOCKING);
70}
71
73static inline int comp_params(struct comp_dev *dev,
74 struct sof_ipc_stream_params *params)
75{
76 int ret = 0;
77
78 if (dev->is_shared && !cpu_is_me(dev->ipc_config.core)) {
79 ret = comp_params_remote(dev, params);
80 } else {
81 if (dev->drv->ops.params) {
82 ret = dev->drv->ops.params(dev, params);
83 } else {
84 /* not defined, run the default handler */
85 ret = comp_verify_params(dev, 0, params);
86
87/* BugLink: https://github.com/zephyrproject-rtos/zephyr/issues/43786
88 * TODO: Remove this once the bug gets fixed.
89 */
90#ifndef __ZEPHYR__
91 if (ret < 0)
92 comp_err(dev, "pcm params verification failed");
93#endif
94 }
95 }
96
97 return ret;
98}
99
101static inline int comp_dai_get_hw_params(struct comp_dev *dev,
102 struct sof_ipc_stream_params *params,
103 int dir)
104{
105 if (dev->drv->ops.dai_get_hw_params)
106 return dev->drv->ops.dai_get_hw_params(dev, params, dir);
107
108 return -EINVAL;
109}
110
111#if CONFIG_IPC_MAJOR_3
113static inline int comp_cmd(struct comp_dev *dev, int cmd, void *data,
114 int max_data_size)
115{
116 LOG_MODULE_DECLARE(component, CONFIG_SOF_LOG_LEVEL);
117
118 struct sof_ipc_ctrl_data *cdata = ASSUME_ALIGNED(data, 4);
119
120 if (cmd == COMP_CMD_SET_DATA &&
121 (cdata->data->magic != SOF_ABI_MAGIC ||
123 comp_err(dev, "comp_cmd(): invalid version, data->magic = %u, data->abi = %u",
124 cdata->data->magic, cdata->data->abi);
125 return -EINVAL;
126 }
127
128 if (dev->drv->ops.cmd)
129 return dev->drv->ops.cmd(dev, cmd, data, max_data_size);
130
131 return -EINVAL;
132}
133#endif
134
138static inline int comp_trigger_remote(struct comp_dev *dev, int cmd)
139{
140 struct idc_msg msg = { IDC_MSG_TRIGGER,
141 IDC_MSG_TRIGGER_EXT(dev->ipc_config.id), dev->ipc_config.core, sizeof(cmd),
142 &cmd, };
143
144 return idc_send_msg(&msg, IDC_BLOCKING);
145}
146
147static inline int comp_trigger_local(struct comp_dev *dev, int cmd)
148{
149 int ret;
150
151 ret = dev->drv->ops.trigger(dev, cmd);
152 if (ret)
153 return ret;
154
155 /* start a thread in case of shared component or DP scheduling */
156 if (dev->task) {
157 /* schedule or cancel task */
158 switch (cmd) {
160 ret = schedule_task(dev->task, 0, dev->period);
161 break;
166 break;
167 }
168 }
169
170 return ret;
171}
172
174static inline int comp_trigger(struct comp_dev *dev, int cmd)
175{
176 int ret;
177 assert(dev->drv->ops.trigger);
178
179 if (dev->is_shared && !cpu_is_me(dev->ipc_config.core))
180 ret = comp_trigger_remote(dev, cmd);
181 else
182 ret = comp_trigger_local(dev, cmd);
183
184 return ret;
185}
186
188static inline int comp_prepare_remote(struct comp_dev *dev)
189{
190 struct idc_msg msg = { IDC_MSG_PREPARE,
192
193 return idc_send_msg(&msg, IDC_BLOCKING);
194}
195
197static inline int comp_prepare(struct comp_dev *dev)
198{
199 if (dev->drv->ops.prepare)
200 return (dev->is_shared && !cpu_is_me(dev->ipc_config.core)) ?
201 comp_prepare_remote(dev) : dev->drv->ops.prepare(dev);
202
203 return 0;
204}
205
206int comp_copy(struct comp_dev *dev);
207
208#if CONFIG_IPC_MAJOR_4
209struct get_attribute_remote_payload {
210 uint32_t type;
211 void *value;
212};
213
214static inline int comp_ipc4_get_attribute_remote(struct comp_dev *dev, uint32_t type,
215 void *value)
216{
217 struct ipc4_base_module_cfg *base_cfg;
218 struct get_attribute_remote_payload payload = {};
219 struct idc_msg msg = { IDC_MSG_GET_ATTRIBUTE,
221 sizeof(payload), &payload};
222 int ret;
223
224 /* Only COMP_ATTR_BASE_CONFIG is supported for remote access */
226 return -EINVAL;
227
228 base_cfg = rzalloc(SOF_MEM_FLAG_USER | SOF_MEM_FLAG_COHERENT, sizeof(*base_cfg));
229 if (!base_cfg)
230 return -ENOMEM;
231
232 payload.type = type;
233 payload.value = base_cfg;
234
235 ret = idc_send_msg(&msg, IDC_BLOCKING);
236
237 if (ret == 0)
238 memcpy_s(value, sizeof(struct ipc4_base_module_cfg),
239 base_cfg, sizeof(struct ipc4_base_module_cfg));
240
241 rfree(base_cfg);
242 return ret;
243}
244#endif /* CONFIG_IPC_MAJOR_4 */
245
247static inline int comp_get_attribute(struct comp_dev *dev, uint32_t type,
248 void *value)
249{
250#if CONFIG_IPC_MAJOR_4
251 if (dev->drv->ops.get_attribute)
252 return cpu_is_me(dev->ipc_config.core) ?
253 dev->drv->ops.get_attribute(dev, type, value) :
254 comp_ipc4_get_attribute_remote(dev, type, value);
255
256 return 0;
257#else
258 if (dev->drv->ops.get_attribute)
259 return dev->drv->ops.get_attribute(dev, type, value);
260
261 return 0;
262#endif
263}
264
266static inline int comp_set_attribute(struct comp_dev *dev, uint32_t type,
267 void *value)
268{
269 if (dev->drv->ops.set_attribute)
270 return dev->drv->ops.set_attribute(dev, type, value);
271
272 return 0;
273}
274
276static inline int comp_reset_remote(struct comp_dev *dev)
277{
278 struct idc_msg msg = { IDC_MSG_RESET,
280
281 return idc_send_msg(&msg, IDC_BLOCKING);
282}
283
289static inline int comp_reset(struct comp_dev *dev)
290{
291 if (dev->drv->ops.reset)
292 return (dev->is_shared && !cpu_is_me(dev->ipc_config.core)) ?
293 comp_reset_remote(dev) : dev->drv->ops.reset(dev);
294
295 return 0;
296}
297
298#if CONFIG_IPC_MAJOR_3
300static inline int comp_dai_config(struct comp_dev *dev, struct ipc_config_dai *config,
301 const void *spec_config)
302{
303 struct dai_data *dd = comp_get_drvdata(dev);
304
305 if (dev->drv->ops.dai_config)
306 return dev->drv->ops.dai_config(dd, dev, config, spec_config);
307
308 return 0;
309}
310#elif CONFIG_IPC_MAJOR_4
311static inline int comp_dai_config(struct dai_data *dd, struct comp_dev *dev,
312 struct ipc_config_dai *config, const void *spec_config)
313{
314 return dai_config(dd, dev, config, spec_config);
315}
316#else
317#error Unknown IPC major version
318#endif
320static inline int comp_position(struct comp_dev *dev,
321 struct sof_ipc_stream_posn *posn)
322{
323 if (dev->drv->ops.position)
324 return dev->drv->ops.position(dev, posn);
325
326 return 0;
327}
328
333void sys_comp_init(struct sof *sof);
334
341static inline int comp_is_single_pipeline(struct comp_dev *current,
342 struct comp_dev *previous)
343{
344 return dev_comp_pipe_id(current) == dev_comp_pipe_id(previous);
345}
346
352static inline int comp_is_active(struct comp_dev *current)
353{
354 return current->state == COMP_STATE_ACTIVE;
355}
356
362static inline int comp_get_requested_state(int cmd)
363{
364 int state = COMP_STATE_INIT;
365
366 switch (cmd) {
369 state = COMP_STATE_ACTIVE;
370 break;
373 state = COMP_STATE_PREPARE;
374 break;
376 state = COMP_STATE_PAUSED;
377 break;
380 state = COMP_STATE_READY;
381 break;
384 state = COMP_STATE_PRE_ACTIVE;
385 break;
386 }
387
388 return state;
389}
390
396static inline int comp_get_endpoint_type(struct comp_dev *dev)
397{
398 switch (dev_comp_type(dev)) {
399 case SOF_COMP_HOST:
400 return COMP_ENDPOINT_HOST;
401 case SOF_COMP_DAI:
402 return COMP_ENDPOINT_DAI;
403 default:
404 return COMP_ENDPOINT_NODE;
405 }
406}
407
413static inline bool comp_is_scheduling_source(struct comp_dev *dev)
414{
415 return dev == dev->pipeline->sched_comp;
416}
417
422static inline void comp_make_shared(struct comp_dev *dev)
423{
424 dev->is_shared = true;
425}
426
431#ifdef CONFIG_SOF_USERSPACE_LL
433#else
434static inline struct comp_driver_list *comp_drivers_get(void)
435{
436 return sof_get()->comp_drivers;
437}
438#endif
439
440#if CONFIG_IPC_MAJOR_4
441static inline int comp_ipc4_bind_remote(struct comp_dev *dev, const struct bind_info *bind_data)
442{
443 struct idc_msg msg = { IDC_MSG_BIND,
445 sizeof(*bind_data), bind_data};
446
447 return idc_send_msg(&msg, IDC_BLOCKING);
448}
449#endif
450
451static inline int comp_bind(struct comp_dev *dev, const struct bind_info *bind_data)
452{
453#if CONFIG_IPC_MAJOR_4
454 if (dev->drv->ops.bind)
455 return cpu_is_me(dev->ipc_config.core) ?
456 dev->drv->ops.bind(dev, bind_data) : comp_ipc4_bind_remote(dev, bind_data);
457
458 return 0;
459#else
460 int ret = 0;
461
462 if (dev->drv->ops.bind)
463 ret = dev->drv->ops.bind(dev, bind_data);
464
465 return ret;
466#endif
467}
468
469#if CONFIG_IPC_MAJOR_4
470static inline int comp_ipc4_unbind_remote(struct comp_dev *dev, const struct bind_info *unbind_data)
471{
472 struct idc_msg msg = { IDC_MSG_UNBIND,
474 sizeof(*unbind_data), unbind_data};
475
476 return idc_send_msg(&msg, IDC_BLOCKING);
477}
478#endif
479
480static inline int comp_unbind(struct comp_dev *dev, const struct bind_info *unbind_data)
481{
482#if CONFIG_IPC_MAJOR_4
483 if (dev->drv->ops.unbind)
484 return cpu_is_me(dev->ipc_config.core) ?
485 dev->drv->ops.unbind(dev, unbind_data) :
486 comp_ipc4_unbind_remote(dev, unbind_data);
487
488 return 0;
489#else
490 int ret = 0;
491
492 if (dev->drv->ops.unbind)
493 ret = dev->drv->ops.unbind(dev, unbind_data);
494
495 return ret;
496#endif
497}
498
499static inline uint64_t comp_get_total_data_processed(struct comp_dev *dev, uint32_t stream_no,
500 bool input)
501{
502 uint64_t ret = 0;
503
505 ret = dev->drv->ops.get_total_data_processed(dev, stream_no, input);
506
507 return ret;
508}
509
511static inline bool comp_same_dir(struct comp_dev *comp, enum sof_ipc_stream_direction dir)
512{
513 int end_type = comp_get_endpoint_type(comp->pipeline->sink_comp);
514
515 if (dir == SOF_IPC_STREAM_PLAYBACK && end_type != COMP_ENDPOINT_DAI)
516 return false;
517 if (dir == SOF_IPC_STREAM_CAPTURE && end_type != COMP_ENDPOINT_HOST)
518 return false;
519 return true;
520}
521
523
524#endif /* __SOF_AUDIO_COMPONENT_INT_H__ */
#define SOF_ABI_MAGIC
SOF ABI magic number "SOF\0".
Definition abi.h:63
#define SOF_ABI_VERSION_INCOMPATIBLE(sof_ver, client_ver)
Definition abi.h:55
#define SOF_ABI_VERSION
Definition abi.h:60
#define ASSUME_ALIGNED(x, a)
Definition common.h:244
Component API definition.
static bool cpu_is_me(int id)
Definition cpu.h:103
uint32_t data[]
Definition debug_stream_slot.h:2
int module_init(struct processing_module *mod)
void * rzalloc(uint32_t flags, size_t bytes)
Similar to rmalloc(), guarantees that returned block is zeroed.
#define SOF_MEM_FLAG_USER
Allocate user memory address.
Definition alloc.h:45
void rfree(void *ptr)
Frees the memory block.
#define SOF_MEM_FLAG_COHERENT
Allocate uncached address.
Definition alloc.h:37
static int comp_is_single_pipeline(struct comp_dev *current, struct comp_dev *previous)
Checks if two component devices belong to the same parent pipeline.
Definition component_ext.h:341
static int comp_trigger(struct comp_dev *dev, int cmd)
See comp_ops::trigger.
Definition component_ext.h:174
static int comp_params(struct comp_dev *dev, struct sof_ipc_stream_params *params)
See comp_ops::params.
Definition component_ext.h:73
static int comp_prepare_remote(struct comp_dev *dev)
Runs comp_ops::prepare on the target component's core.
Definition component_ext.h:188
static int comp_get_endpoint_type(struct comp_dev *dev)
Returns endpoint type of given component.
Definition component_ext.h:396
static int comp_trigger_remote(struct comp_dev *dev, int cmd)
Runs comp_ops::trigger on the core the target component is assigned to.
Definition component_ext.h:138
static int comp_dai_get_hw_params(struct comp_dev *dev, struct sof_ipc_stream_params *params, int dir)
See comp_ops::dai_get_hw_params.
Definition component_ext.h:101
static int comp_reset_remote(struct comp_dev *dev)
Runs comp_ops::reset on the target component's core.
Definition component_ext.h:276
static void comp_make_shared(struct comp_dev *dev)
Called to mark component as shared between cores.
Definition component_ext.h:422
static int comp_is_active(struct comp_dev *current)
Checks if component device is active.
Definition component_ext.h:352
static int comp_prepare(struct comp_dev *dev)
See comp_ops::prepare.
Definition component_ext.h:197
static bool comp_same_dir(struct comp_dev *comp, enum sof_ipc_stream_direction dir)
Returns true if the component's pipeline matches the specified direction.
Definition component_ext.h:511
static int comp_position(struct comp_dev *dev, struct sof_ipc_stream_posn *posn)
See comp_ops::position.
Definition component_ext.h:320
static bool comp_is_scheduling_source(struct comp_dev *dev)
Called to check whether component schedules its pipeline.
Definition component_ext.h:413
int comp_copy(struct comp_dev *dev)
static void comp_free(struct comp_dev *dev)
See comp_ops::new.
Definition component_ext.h:44
static struct comp_driver_list * comp_drivers_get(void)
Get the global component driver list.
Definition component_ext.h:434
static int comp_unbind(struct comp_dev *dev, const struct bind_info *unbind_data)
Definition component_ext.h:480
static int comp_params_remote(struct comp_dev *dev, struct sof_ipc_stream_params *params)
Parameter init for component on other core.
Definition component_ext.h:63
static uint64_t comp_get_total_data_processed(struct comp_dev *dev, uint32_t stream_no, bool input)
Definition component_ext.h:499
void sys_comp_init(struct sof *sof)
Allocates and initializes audio component list.
static int comp_set_attribute(struct comp_dev *dev, uint32_t type, void *value)
See comp_ops::set_attribute.
Definition component_ext.h:266
static int comp_get_requested_state(int cmd)
Returns component state based on requested command.
Definition component_ext.h:362
static int comp_bind(struct comp_dev *dev, const struct bind_info *bind_data)
Definition component_ext.h:451
static int comp_get_attribute(struct comp_dev *dev, uint32_t type, void *value)
See comp_ops::get_attribute.
Definition component_ext.h:247
static int comp_reset(struct comp_dev *dev)
Component reset and free runtime resources.
Definition component_ext.h:289
static int comp_trigger_local(struct comp_dev *dev, int cmd)
Definition component_ext.h:147
#define COMP_STATE_ACTIVE
Component active.
Definition component.h:58
#define comp_err(comp_p, __e,...)
Trace error message from component device.
Definition component.h:218
#define COMP_STATE_READY
Component inactive, but ready.
Definition component.h:54
#define COMP_STATE_PREPARE
Component prepared.
Definition component.h:56
#define COMP_CMD_SET_DATA
Set data to component.
Definition component.h:98
#define COMP_ATTR_BASE_CONFIG
Component base config.
Definition component.h:124
#define COMP_STATE_INIT
Component being initialised.
Definition component.h:53
#define COMP_STATE_PRE_ACTIVE
Component after early initialisation.
Definition component.h:59
#define COMP_STATE_PAUSED
Component paused.
Definition component.h:57
@ COMP_TRIGGER_STOP
Stop component stream.
Definition component.h:74
@ COMP_TRIGGER_XRUN
XRUN component.
Definition component.h:80
@ COMP_TRIGGER_PAUSE
Pause the component stream.
Definition component.h:76
@ COMP_TRIGGER_RESET
Reset component.
Definition component.h:78
@ COMP_TRIGGER_PREPARE
Prepare component.
Definition component.h:79
@ COMP_TRIGGER_START
Start component stream.
Definition component.h:75
@ COMP_TRIGGER_PRE_START
Prepare to start component stream.
Definition component.h:81
@ COMP_TRIGGER_RELEASE
Release paused component stream.
Definition component.h:77
@ COMP_TRIGGER_PRE_RELEASE
Prepare to release paused component stream.
Definition component.h:82
@ COMP_ENDPOINT_HOST
Connected to host dma.
Definition component.h:256
@ COMP_ENDPOINT_DAI
Connected to dai dma.
Definition component.h:257
@ COMP_ENDPOINT_NODE
No dma connection.
Definition component.h:258
static enum sof_comp_type dev_comp_type(const struct comp_dev *dev)
Retrieves component type from device.
Definition component.h:850
int comp_verify_params(struct comp_dev *dev, uint32_t flag, struct sof_ipc_stream_params *params)
Warning: duplicate declaration in topology.h.
static uint32_t dev_comp_pipe_id(const struct comp_dev *dev)
Retrieves Component pipeline id from device.
Definition component.h:840
#define comp_get_drvdata(c)
Retrieves driver private data from component device.
Definition component.h:935
static int schedule_task(struct task *task, uint64_t start, uint64_t period)
See scheduler_ops::schedule_task.
Definition schedule.h:241
int dai_config(struct dai_data *dd, struct comp_dev *dev, struct ipc_config_dai *common_cfg, const void *spec_cfg)
Configure DAI physical interface.
#define IDC_MSG_GET_ATTRIBUTE
Definition idc.h:105
#define IDC_MSG_TRIGGER
IDC component trigger message.
Definition idc.h:82
#define IDC_MSG_PARAMS
IDC component params message.
Definition idc.h:74
int idc_send_msg(struct idc_msg *msg, uint32_t mode)
#define IDC_EXTENSION(x)
Definition idc.h:54
#define IDC_MSG_UNBIND
Definition idc.h:104
#define IDC_BLOCKING
IDC send blocking flag.
Definition idc.h:26
#define IDC_MSG_BIND
Definition idc.h:103
#define IDC_MSG_TRIGGER_EXT(x)
Definition idc.h:83
#define IDC_MSG_PREPARE_EXT(x)
Definition idc.h:79
#define IDC_MSG_RESET_EXT(x)
Definition idc.h:87
#define IDC_MSG_RESET
IDC component reset message.
Definition idc.h:86
#define IDC_MSG_PARAMS_EXT(x)
Definition idc.h:75
#define IDC_MSG_PREPARE
IDC component prepare message.
Definition idc.h:78
sof_ipc_stream_direction
Definition stream.h:57
@ SOF_IPC_STREAM_CAPTURE
Definition stream.h:59
@ SOF_IPC_STREAM_PLAYBACK
Definition stream.h:58
@ SOF_COMP_DAI
Definition topology.h:30
@ SOF_COMP_HOST
Definition topology.h:29
#define list_item(item, type, member)
Definition list.h:80
#define assert(x)
Definition panic.h:19
struct sof * sof_get(void)
#define LOG_MODULE_DECLARE(ctx, level)
Definition trace.h:163
static int memcpy_s(void *dest, size_t dest_size, const void *src, size_t count)
Definition string.h:38
Definition component.h:284
Audio component base device "class".
Definition component.h:645
struct comp_ipc_config ipc_config
Component IPC configuration.
Definition component.h:668
bool is_shared
indicates whether component is shared across cores
Definition component.h:665
uint16_t state
COMP_STATE_.
Definition component.h:648
struct task * task
component's processing task used 1) for components running on different core than the rest of the pip...
Definition component.h:652
const struct comp_driver * drv
driver
Definition component.h:675
struct pipeline * pipeline
pipeline we belong to
Definition component.h:650
uint32_t period
component's processing period for LL modules is set to LL pipeline's period for DP module its meaning...
Definition component.h:658
Holds list of registered components' drivers.
Definition component_ext.h:27
struct list_item list
list of component drivers
Definition component_ext.h:28
Audio component base driver "class".
Definition component.h:587
struct comp_ops ops
component operations
Definition component.h:591
uint32_t id
component id
Definition component.h:615
uint32_t core
core we run on
Definition component.h:614
int(* set_attribute)(struct comp_dev *dev, uint32_t type, void *value)
Sets attribute in component.
Definition component.h:467
int(* get_attribute)(struct comp_dev *dev, uint32_t type, void *value)
Gets attribute in component.
Definition component.h:455
int(* prepare)(struct comp_dev *dev)
Prepares component after params are set.
Definition component.h:415
int(* reset)(struct comp_dev *dev)
Resets component.
Definition component.h:425
int(* params)(struct comp_dev *dev, struct sof_ipc_stream_params *params)
Sets component audio stream parameters.
Definition component.h:358
int(* bind)(struct comp_dev *dev, const struct bind_info *bind_data)
Bind, atomic - used to notify component of bind event.
Definition component.h:519
int(* dai_get_hw_params)(struct comp_dev *dev, struct sof_ipc_stream_params *params, int dir)
Fetches hardware stream parameters.
Definition component.h:371
int(* position)(struct comp_dev *dev, struct sof_ipc_stream_posn *posn)
Retrieves component rendering position.
Definition component.h:443
uint64_t(* get_total_data_processed)(struct comp_dev *dev, uint32_t stream_no, bool input)
Returns total data processed in number bytes.
Definition component.h:580
int(* dai_config)(struct dai_data *dd, struct comp_dev *dev, struct ipc_config_dai *dai_config, const void *dai_spec_config)
Configures attached DAI.
Definition component.h:382
int(* trigger)(struct comp_dev *dev, int cmd)
Trigger, atomic - used to start/stop/pause stream operations.
Definition component.h:405
int(* unbind)(struct comp_dev *dev, const struct bind_info *unbind_data)
Unbind, atomic - used to notify component of unbind event.
Definition component.h:528
void(* free)(struct comp_dev *dev)
Called to delete the specified component device.
Definition component.h:346
DAI runtime data.
Definition dai-zephyr.h:119
struct dma_sg_config config
Definition dai-zephyr.h:123
IDC message.
Definition idc.h:158
const void * payload
pointer to payload data
Definition idc.h:163
Definition ipc-config.h:65
struct comp_dev * sched_comp
Definition pipeline.h:84
struct comp_dev * sink_comp
Definition pipeline.h:88
uint32_t magic
Magic number for validation.
Definition header.h:34
uint32_t abi
SOF ABI version.
Definition header.h:41
Definition topology.h:62
Generic control data.
Definition control.h:120
struct sof_abi_hdr data[0]
Definition control.h:153
uint32_t cmd
enum sof_ipc_ctrl_cmd
Definition control.h:126
Definition stream.h:71
Definition stream.h:134
General firmware context.
Definition sof.h:44
struct comp_driver_list * comp_drivers
Definition sof.h:98
char value[]
Definition tlv.h:2
uint32_t type
Definition tlv.h:0