Sound Open Firmware
Loading...
Searching...
No Matches
sof_dma.h
Go to the documentation of this file.
1/* SPDX-License-Identifier: BSD-3-Clause
2 *
3 * Copyright (c) 2025, Intel Corporation.
4 */
5
6/*
7 * Need to use sof_dma.h to avoid "syscalls/dma.h" name conflict
8 * with Zephyr autogenerated headers for syscall support.
9 */
10
11#ifndef SOF_DMA_H
12#define SOF_DMA_H
13
22__syscall struct sof_dma *sof_dma_get(uint32_t dir, uint32_t caps, uint32_t dev, uint32_t flags);
23
24struct sof_dma *z_impl_sof_dma_get(uint32_t dir, uint32_t cap, uint32_t dev, uint32_t flags);
25
26
32__syscall void sof_dma_put(struct sof_dma *dma);
33
34void z_impl_sof_dma_put(struct sof_dma *dma);
35
36__syscall int sof_dma_get_attribute(struct sof_dma *dma, uint32_t type, uint32_t *value);
37
38__syscall int sof_dma_request_channel(struct sof_dma *dma, uint32_t stream_tag);
39
40__syscall void sof_dma_release_channel(struct sof_dma *dma,
41 uint32_t channel);
42
43__syscall int sof_dma_config(struct sof_dma *dma, uint32_t channel,
44 struct dma_config *config);
45
46__syscall int sof_dma_start(struct sof_dma *dma, uint32_t channel);
47
48__syscall int sof_dma_stop(struct sof_dma *dma, uint32_t channel);
49
50__syscall int sof_dma_get_status(struct sof_dma *dma, uint32_t channel, struct dma_status *stat);
51
52__syscall int sof_dma_reload(struct sof_dma *dma, uint32_t channel, size_t size);
53
54__syscall int sof_dma_suspend(struct sof_dma *dma, uint32_t channel);
55
56__syscall int sof_dma_resume(struct sof_dma *dma, uint32_t channel);
57
58static inline int z_impl_sof_dma_get_attribute(struct sof_dma *dma, uint32_t type, uint32_t *value)
59{
60 return dma_get_attribute(dma->z_dev, type, value);
61}
62
63static inline int z_impl_sof_dma_request_channel(struct sof_dma *dma, uint32_t stream_tag)
64{
65 return dma_request_channel(dma->z_dev, &stream_tag);
66}
67
68static inline void z_impl_sof_dma_release_channel(struct sof_dma *dma,
69 uint32_t channel)
70{
71 dma_release_channel(dma->z_dev, channel);
72}
73
74static inline int z_impl_sof_dma_config(struct sof_dma *dma, uint32_t channel,
75 struct dma_config *config)
76{
77 return dma_config(dma->z_dev, channel, config);
78}
79
80
81static inline int z_impl_sof_dma_start(struct sof_dma *dma, uint32_t channel)
82{
83 return dma_start(dma->z_dev, channel);
84}
85
86static inline int z_impl_sof_dma_stop(struct sof_dma *dma, uint32_t channel)
87{
88 return dma_stop(dma->z_dev, channel);
89}
90
91static inline int z_impl_sof_dma_get_status(struct sof_dma *dma, uint32_t channel,
92 struct dma_status *stat)
93{
94 return dma_get_status(dma->z_dev, channel, stat);
95}
96
97static inline int z_impl_sof_dma_reload(struct sof_dma *dma, uint32_t channel, size_t size)
98{
99 return dma_reload(dma->z_dev, channel, 0, 0, size);
100}
101
102static inline int z_impl_sof_dma_suspend(struct sof_dma *dma, uint32_t channel)
103{
104 return dma_suspend(dma->z_dev, channel);
105}
106
107static inline int z_impl_sof_dma_resume(struct sof_dma *dma, uint32_t channel)
108{
109 return dma_resume(dma->z_dev, channel);
110}
111
112#ifdef CONFIG_SOF_USERSPACE_INTERFACE_DMA
113
114/* include definitions from generated file */
115#include <zephyr/syscalls/sof_dma.h>
116
117#else /* !CONFIG_SOF_USERSPACE_INTERFACE_DMA */
118
119/*
120 * SOF-specific mechanism to allow building SOF with user-space
121 * support enabled in Zephyr, but not including all syscall
122 * interfaces in the SOF binary. Thee downside is we cannot
123 * use the zephyr/syscalls/sof_dma.h boilerplate that is autogenerated
124 * but instead need a manual wrapper that is below here.
125 *
126 * This can be removed if DMA is used in all SOF user-space builds.
127 */
128
129static inline struct sof_dma *sof_dma_get(uint32_t dir, uint32_t caps, uint32_t dev, uint32_t flags)
130{
131 return z_impl_sof_dma_get(dir, caps, dev, flags);
132}
133
134static inline void sof_dma_put(struct sof_dma *dma)
135{
136 return z_impl_sof_dma_put(dma);
137}
138
139static inline int sof_dma_get_attribute(struct sof_dma *dma, uint32_t type, uint32_t *value)
140{
142}
143
144static inline int sof_dma_request_channel(struct sof_dma *dma, uint32_t stream_tag)
145{
146 return z_impl_sof_dma_request_channel(dma, stream_tag);
147}
148
149static inline void sof_dma_release_channel(struct sof_dma *dma,
150 uint32_t channel)
151{
152 return z_impl_sof_dma_release_channel(dma, channel);
153}
154
155static inline int sof_dma_config(struct sof_dma *dma, uint32_t channel,
156 struct dma_config *config)
157{
158 return z_impl_sof_dma_config(dma, channel, config);
159}
160
161static inline int sof_dma_start(struct sof_dma *dma, uint32_t channel)
162{
163 return z_impl_sof_dma_start(dma, channel);
164}
165
166static inline int sof_dma_stop(struct sof_dma *dma, uint32_t channel)
167{
168 return z_impl_sof_dma_stop(dma, channel);
169}
170
171static inline int sof_dma_get_status(struct sof_dma *dma, uint32_t channel, struct dma_status *stat)
172{
173 return z_impl_sof_dma_get_status(dma, channel, stat);
174}
175
176static inline int sof_dma_reload(struct sof_dma *dma, uint32_t channel, size_t size)
177{
178 return z_impl_sof_dma_reload(dma, channel, size);
179}
180
181static inline int sof_dma_suspend(struct sof_dma *dma, uint32_t channel)
182{
183 return z_impl_sof_dma_suspend(dma, channel);
184}
185
186static inline int sof_dma_resume(struct sof_dma *dma, uint32_t channel)
187{
188 return z_impl_sof_dma_resume(dma, channel);
189}
190
191#endif /* CONFIG_SOF_USERSPACE_INTERFACE_DMA */
192
193#endif
static int z_impl_sof_dma_request_channel(struct sof_dma *dma, uint32_t stream_tag)
Definition sof_dma.h:63
__syscall int sof_dma_get_status(struct sof_dma *dma, uint32_t channel, struct dma_status *stat)
Definition sof_dma.h:171
__syscall int sof_dma_stop(struct sof_dma *dma, uint32_t channel)
Definition sof_dma.h:166
__syscall int sof_dma_suspend(struct sof_dma *dma, uint32_t channel)
Definition sof_dma.h:181
static int z_impl_sof_dma_get_status(struct sof_dma *dma, uint32_t channel, struct dma_status *stat)
Definition sof_dma.h:91
static int z_impl_sof_dma_suspend(struct sof_dma *dma, uint32_t channel)
Definition sof_dma.h:102
static int z_impl_sof_dma_config(struct sof_dma *dma, uint32_t channel, struct dma_config *config)
Definition sof_dma.h:74
__syscall struct sof_dma * sof_dma_get(uint32_t dir, uint32_t caps, uint32_t dev, uint32_t flags)
API to request a platform DMAC.
Definition sof_dma.h:129
static int z_impl_sof_dma_start(struct sof_dma *dma, uint32_t channel)
Definition sof_dma.h:81
__syscall int sof_dma_reload(struct sof_dma *dma, uint32_t channel, size_t size)
Definition sof_dma.h:176
__syscall int sof_dma_start(struct sof_dma *dma, uint32_t channel)
Definition sof_dma.h:161
__syscall void sof_dma_release_channel(struct sof_dma *dma, uint32_t channel)
Definition sof_dma.h:149
__syscall void sof_dma_put(struct sof_dma *dma)
API to release a platform DMAC.
Definition sof_dma.h:134
static int z_impl_sof_dma_reload(struct sof_dma *dma, uint32_t channel, size_t size)
Definition sof_dma.h:97
__syscall int sof_dma_resume(struct sof_dma *dma, uint32_t channel)
Definition sof_dma.h:186
void z_impl_sof_dma_put(struct sof_dma *dma)
static void z_impl_sof_dma_release_channel(struct sof_dma *dma, uint32_t channel)
Definition sof_dma.h:68
static int z_impl_sof_dma_stop(struct sof_dma *dma, uint32_t channel)
Definition sof_dma.h:86
__syscall int sof_dma_get_attribute(struct sof_dma *dma, uint32_t type, uint32_t *value)
Definition sof_dma.h:139
__syscall int sof_dma_request_channel(struct sof_dma *dma, uint32_t stream_tag)
Definition sof_dma.h:144
static int z_impl_sof_dma_resume(struct sof_dma *dma, uint32_t channel)
Definition sof_dma.h:107
struct sof_dma * z_impl_sof_dma_get(uint32_t dir, uint32_t cap, uint32_t dev, uint32_t flags)
__syscall int sof_dma_config(struct sof_dma *dma, uint32_t channel, struct dma_config *config)
Definition sof_dma.h:155
static int z_impl_sof_dma_get_attribute(struct sof_dma *dma, uint32_t type, uint32_t *value)
Definition sof_dma.h:58
Definition dma.h:209
const struct device * z_dev
Definition dma.h:217
char value[]
Definition tlv.h:2
uint32_t type
Definition tlv.h:0