Sound Open Firmware
Loading...
Searching...
No Matches
topology.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
9#ifndef __SOF_IPC_TOPOLOGY_H__
10#define __SOF_IPC_TOPOLOGY_H__
11
12#include <sof/audio/buffer.h>
14#include <sof/audio/pipeline.h>
15#include <rtos/alloc.h>
16#include <sof/list.h>
17#include <rtos/task.h>
18#include <rtos/sof.h>
19#include <rtos/spinlock.h>
20#include <sof/trace/trace.h>
21#include <sof/ipc/common.h>
22#include <stdbool.h>
23#include <stdint.h>
24
25/* generic IPC pipeline regardless of ABI MAJOR type that is always 4 byte aligned */
26typedef uint32_t ipc_pipe_new;
27typedef uint32_t ipc_pipe_comp_connect;
28typedef uint32_t ipc_comp;
29
30/*
31 * Topology IPC logic uses standard types for abstract IPC features. This means all ABI MAJOR
32 * abstraction is done in the IPC layer only and not in the surrounding infrastructure.
33 */
34#if CONFIG_IPC_MAJOR_3
35#include <ipc/topology.h>
36#define ipc_from_pipe_new(x) ((struct sof_ipc_pipe_new *)x)
37#define ipc_from_pipe_connect(x) ((struct sof_ipc_pipe_comp_connect *)x)
38#define ipc_from_comp_new(x) ((struct sof_ipc_comp *)x)
39#define ipc_from_dai_config(x) ((struct sof_ipc_dai_config *)x)
40#elif CONFIG_IPC_MAJOR_4
41#include <ipc4/pipeline.h>
42#include <ipc4/module.h>
43#include <ipc4/gateway.h>
44#define ipc_from_pipe_new(x) ((struct ipc4_pipeline_create *)x)
45#define ipc_from_pipe_connect(x) ((struct ipc4_module_bind_unbind *)x)
46
47struct ipc_comp_dev;
48const struct comp_driver *ipc4_get_comp_drv(uint32_t module_id);
49struct comp_dev *ipc4_get_comp_dev(uint32_t comp_id);
50int ipc4_add_comp_dev(struct comp_dev *dev);
51#ifdef CONFIG_SOF_USERSPACE_LL
53struct comp_driver;
54struct comp_dev *comp_new_ipc4_user(struct ipc4_message_request *ipc4,
55 const struct comp_driver *drv);
56#endif
57int ipc4_chain_manager_create(const struct ipc4_chain_dma *cdma);
58int ipc4_chain_dma_state(struct comp_dev *dev, const struct ipc4_chain_dma *cdma);
59int ipc4_create_chain_dma(struct ipc *ipc, struct ipc4_chain_dma *cdma);
60int ipc4_trigger_chain_dma(struct ipc *ipc, struct ipc4_chain_dma *cdma, bool *delay);
61int ipc4_process_on_core(uint32_t core, bool blocking);
62int ipc4_pipeline_complete(struct ipc *ipc, uint32_t comp_id, uint32_t cmd);
63int ipc4_find_dma_config(struct ipc_config_dai *dai, uint8_t *data_buffer, uint32_t size);
64int ipc4_find_all_dma_configs_tlvs_only(struct ipc_config_dai *dai,
65 uint8_t *data_buffer, size_t size);
66int ipc4_pipeline_prepare(struct ipc_comp_dev *ppl_icd, uint32_t cmd);
67int ipc4_pipeline_trigger(struct ipc_comp_dev *ppl_icd, uint32_t cmd, bool *delayed);
68int ipc4_find_dma_config_multiple(struct ipc_config_dai *dai, uint8_t *data_buffer,
69 uint32_t size, uint32_t device_id, int dma_cfg_idx);
70const struct ipc4_pipeline_set_state_data *ipc4_get_pipeline_data_wrapper(void);
71
72#else
73#error "No or invalid IPC MAJOR version selected."
74#endif
75
76#define ipc_to_pipe_new(x) ((ipc_pipe_new *)x)
77#define ipc_to_pipe_connect(x) ((ipc_pipe_comp_connect *)x)
78#define ipc_to_comp_new(x) ((ipc_comp *)x)
79
80struct ipc_msg;
81
82#define COMP_TYPE_ANY 0
83#define COMP_TYPE_COMPONENT 1
84#define COMP_TYPE_BUFFER 2
85#define COMP_TYPE_PIPELINE 3
86
87#define IPC_COMP_ALL 0
88#define IPC_COMP_IGNORE_REMOTE 1
89
90/* IPC generic component device */
92 uint16_t type; /* COMP_TYPE_ */
93 uint16_t core;
94 uint32_t id;
95
96 /* component type data */
97 union {
98 struct comp_dev *cd;
99 struct comp_buffer *cb;
101 };
102
103 /* lists */
104 struct list_item list; /* list in components */
105};
106
113int ipc_comp_new(struct ipc *ipc, ipc_comp *new);
114
121int ipc_comp_free(struct ipc *ipc, uint32_t comp_id);
122
129int ipc_buffer_new(struct ipc *ipc, const struct sof_ipc_buffer *buffer);
130
137int ipc_buffer_free(struct ipc *ipc, uint32_t buffer_id);
138
146
153int ipc_pipeline_free(struct ipc *ipc, uint32_t comp_id);
154
161int ipc_pipeline_complete(struct ipc *ipc, uint32_t comp_id);
162
170
178
186struct ipc_comp_dev *ipc_get_comp_dev(struct ipc *ipc, uint16_t type, uint32_t id);
187
197 uint32_t ppl_id, uint32_t ignore_remote);
206 uint32_t pipeline_id, int dir);
207
213int32_t ipc_comp_pipe_id(const struct ipc_comp_dev *icd);
214
222int ipc_comp_dai_config(struct ipc *ipc, struct ipc_config_dai *common_config,
223 void *spec_config);
224
232int comp_verify_params(struct comp_dev *dev, uint32_t flag,
233 struct sof_ipc_stream_params *params);
234
243int comp_buffer_connect(struct comp_dev *comp, uint32_t comp_core,
244 struct comp_buffer *buffer, uint32_t dir);
245
246#define ipc_get_comp_by_id(ipc, comp_id) ipc_get_comp_dev(ipc, COMP_TYPE_COMPONENT, comp_id)
247#define ipc_get_pipeline_by_id(ipc, ppln_id) ipc_get_comp_dev(ipc, COMP_TYPE_PIPELINE, ppln_id)
248#define ipc_get_buffer_by_id(ipc, buf_id) ipc_get_comp_dev(ipc, COMP_TYPE_BUFFER, buf_id)
249
250#endif
Memory allocation API, zones, heaps, and alignment utilities.
Component interconnect buffer allocation and stream handling.
IPC4 audio gateway attributes, ALH, HDA, and SoundWire gateway definitions.
static uint32_t pipeline_id(struct pipeline *p)
Retrieves pipeline ID from pipeline structure.
Definition pipeline.h:291
uint16_t module_id
Module ID of the originator of the notification.
Definition header.h:1
uint32_t type
Message type, symmetric to the incoming request.
Definition header.h:8
IPC4 pipeline creation, states, priorities, and management commands.
IPC4 module instantiation, binding, pin configuration, and parameter definitions.
Audio pipeline management, graph scheduling, and execution control.
int ipc_comp_free(struct ipc *ipc, uint32_t comp_id)
Free an IPC component.
int ipc_pipeline_complete(struct ipc *ipc, uint32_t comp_id)
Complete an IPC pipeline.
int ipc_buffer_free(struct ipc *ipc, uint32_t buffer_id)
Free an IPC buffer.
int ipc_pipeline_new(struct ipc *ipc, ipc_pipe_new *pipeline)
Create a new IPC pipeline.
int ipc_buffer_new(struct ipc *ipc, const struct sof_ipc_buffer *buffer)
Create a new IPC buffer.
int ipc_comp_new(struct ipc *ipc, ipc_comp *new)
Create a new IPC component.
int comp_verify_params(struct comp_dev *dev, uint32_t flag, struct sof_ipc_stream_params *params)
Verify stream parameters against component capabilities.
int32_t ipc_comp_pipe_id(const struct ipc_comp_dev *icd)
Get pipeline ID from component.
int ipc_comp_dai_config(struct ipc *ipc, struct ipc_config_dai *common_config, void *spec_config)
Configure all DAI components attached to DAI.
int ipc_comp_connect(struct ipc *ipc, ipc_pipe_comp_connect *connect)
Connect components together on a pipeline.
int comp_buffer_connect(struct comp_dev *comp, uint32_t comp_core, struct comp_buffer *buffer, uint32_t dir)
connect component and buffer
uint32_t ipc_comp
Definition topology.h:28
uint32_t ipc_pipe_comp_connect
Definition topology.h:27
struct ipc_comp_dev * ipc_get_comp_by_ppl_id(struct ipc *ipc, uint16_t type, uint32_t ppl_id, uint32_t ignore_remote)
Get component device from pipeline ID and type.
struct ipc_comp_dev * ipc_get_ppl_comp(struct ipc *ipc, uint32_t pipeline_id, int dir)
Get buffer device from pipeline ID.
uint32_t ipc_pipe_new
Definition topology.h:26
int ipc_comp_disconnect(struct ipc *ipc, ipc_pipe_comp_connect *connect)
Disconnect components in a pipeline.
struct ipc_comp_dev * ipc_get_comp_dev(struct ipc *ipc, uint16_t type, uint32_t id)
Get component device from component type and ID.
int ipc_pipeline_free(struct ipc *ipc, uint32_t comp_id)
Free an IPC pipeline.
Sound Open Firmware global runtime context.
RTOS spinlock primitives and initialization.
Audio component interconnect buffer connecting two pipeline components.
Definition buffer.h:150
Audio component base device "class" used by all other component types.
Definition component.h:587
uint32_t size
Component allocated size in bytes.
Definition component.h:595
const struct comp_driver * drv
Component driver.
Definition component.h:608
Audio component base driver "class".
Definition component.h:528
Definition dai-zephyr.h:49
Direct DMA Chaining configuration command (SOF_IPC4_GLB_CHAIN_DMA).
Definition pipeline.h:391
Standard 64-bit IPC4 message request envelope.
Definition header.h:127
Payload array containing pipeline IDs for multi-pipeline state transitions.
Definition pipeline.h:197
Definition topology.h:91
struct list_item list
Definition topology.h:104
uint16_t core
Definition topology.h:93
uint32_t id
Definition topology.h:94
struct comp_buffer * cb
Definition topology.h:99
uint16_t type
Definition topology.h:92
struct pipeline * pipeline
Definition topology.h:100
struct comp_dev * cd
Definition topology.h:98
Definition ipc-config.h:65
Definition msg.h:34
Definition common.h:97
Definition list.h:16
Audio pipeline structure representing a stream graph and execution context.
Definition pipeline.h:72
Definition topology.h:107
Definition stream.h:71
Core task descriptor, task operations, and task execution state machine.