6#ifndef __SOF_LIB_DMA_H__
7#define __SOF_LIB_DMA_H__
9#if defined(CONFIG_SCHEDULE_DMA_MULTI_CHANNEL) || \
10 defined(CONFIG_SCHEDULE_DMA_SINGLE_CHANNEL)
18#include <platform/lib/dma.h>
32#include <zephyr/device.h>
33#include <zephyr/drivers/dma.h>
66#define SOF_DMA_DIR_MEM_TO_MEM BIT(0)
67#define SOF_DMA_DIR_HMEM_TO_LMEM BIT(1)
68#define SOF_DMA_DIR_LMEM_TO_HMEM BIT(2)
69#define SOF_DMA_DIR_MEM_TO_DEV BIT(3)
70#define SOF_DMA_DIR_DEV_TO_MEM BIT(4)
71#define SOF_DMA_DIR_DEV_TO_DEV BIT(5)
74#define SOF_DMA_CAP_HDA BIT(0)
75#define SOF_DMA_CAP_GP_LP BIT(1)
76#define SOF_DMA_CAP_GP_HP BIT(2)
77#define SOF_DMA_CAP_BT BIT(3)
78#define SOF_DMA_CAP_SP BIT(4)
79#define SOF_DMA_CAP_DMIC BIT(5)
80#define SOF_DMA_CAP_SP_VIRTUAL BIT(6)
81#define SOF_DMA_CAP_HS_VIRTUAL BIT(7)
82#define SOF_DMA_CAP_HS BIT(8)
83#define SOF_DMA_CAP_SW BIT(9)
84#define SOF_DMA_CAP_TDM BIT(10)
88#define SOF_DMA_DEV_HOST BIT(0)
89#define SOF_DMA_DEV_HDA BIT(1)
90#define SOF_DMA_DEV_SSP BIT(2)
91#define SOF_DMA_DEV_DMIC BIT(3)
92#define SOF_DMA_DEV_SSI BIT(4)
93#define SOF_DMA_DEV_ALH BIT(5)
94#define SOF_DMA_DEV_SAI BIT(6)
95#define SOF_DMA_DEV_ESAI BIT(7)
96#define SOF_DMA_DEV_BT BIT(8)
97#define SOF_DMA_DEV_SP BIT(9)
98#define SOF_DMA_DEV_AFE_MEMIF BIT(10)
99#define SOF_DMA_DEV_SP_VIRTUAL BIT(11)
100#define SOF_DMA_DEV_HS_VIRTUAL BIT(12)
101#define SOF_DMA_DEV_HS BIT(13)
102#define SOF_DMA_DEV_MICFIL BIT(14)
103#define SOF_DMA_DEV_SW BIT(15)
104#define SOF_DMA_DEV_TDM BIT(16)
107#define SOF_DMA_ACCESS_EXCLUSIVE 1
108#define SOF_DMA_ACCESS_SHARED 0
111#define SOF_DMA_COPY_BLOCKING BIT(0)
112#define SOF_DMA_COPY_ONE_SHOT BIT(1)
122#define SOF_DMA_CHAN_INVALID 0xFFFFFFFF
123#define SOF_DMA_CORE_INVALID 0xFFFFFFFF
128#ifdef CONFIG_ZEPHYR_NATIVE_DRIVERS
204#ifdef CONFIG_ZEPHYR_NATIVE_DRIVERS
222#ifdef CONFIG_ZEPHYR_NATIVE_DRIVERS
244#ifdef CONFIG_ZEPHYR_NATIVE_DRIVERS
255#ifdef CONFIG_ZEPHYR_NATIVE_DRIVERS
256 struct sof_dma *
dmac;
262struct cir_buf_source;
265 uint32_t src_channels,
struct cir_buf_sink *sink,
266 uint32_t sink_channels,
size_t source_samples, uint32_t chmap);
279#ifdef CONFIG_ZEPHYR_NATIVE_DRIVERS
285#if defined(CONFIG_SCHEDULE_DMA_MULTI_CHANNEL) || \
286 defined(CONFIG_SCHEDULE_DMA_SINGLE_CHANNEL)
288static inline bool dma_is_scheduling_source(
struct dma_chan_data *channel)
304 uint32_t buffer_count, uint32_t buffer_bytes,
305 uintptr_t dma_buffer_addr, uintptr_t external_addr);
320 for (i = 0 ; i < ea->
count; i++)
340 uint32_t source_bytes, uint32_t chmap);
int dma_buffer_copy_to(struct comp_buffer *source, struct comp_buffer *sink, dma_process_func process, uint32_t sink_bytes, uint32_t chmap)
int dma_buffer_copy_from(struct comp_buffer *source, struct comp_buffer *sink, dma_process_func process, uint32_t source_bytes, uint32_t chmap)
void dma_sg_free(struct k_heap *heap, struct dma_sg_elem_array *ea)
static uint32_t dma_sg_get_size(struct dma_sg_elem_array *ea)
Get the total size of SG buffer.
Definition dma.h:315
int stream_copy_from_no_consume(struct comp_dev *dev, struct comp_buffer *source, struct comp_buffer *sink, dma_process_func process, uint32_t source_bytes, uint32_t chmap)
static void dma_sg_init(struct dma_sg_elem_array *ea)
Definition dma.h:294
int dma_sg_alloc(struct k_heap *heap, struct dma_sg_elem_array *ea, uint32_t flags, uint32_t direction, uint32_t buffer_count, uint32_t buffer_bytes, uintptr_t dma_buffer_addr, uintptr_t external_addr)
sof_dma_cb_status
Definition dma.h:117
int dmac_init(struct sof *sof)
API to initialize a platform DMA controllers.
static const struct dma_info * dma_info_get(void)
Definition dma.h:348
int(* dma_process_func)(const struct cir_buf_source *source, uint32_t src_channels, struct cir_buf_sink *sink, uint32_t sink_channels, size_t source_samples, uint32_t chmap)
Definition dma.h:264
@ SOF_DMA_CB_STATUS_RELOAD
Definition dma.h:118
@ SOF_DMA_CB_STATUS_END
Definition dma.h:119
struct sof * sof_get(void)
Audio component base device "class".
Definition component.h:645
Data used in DMA callbacks.
Definition dma.h:146
struct dma_chan_data * channel
Definition dma.h:147
enum sof_dma_cb_status status
Definition dma.h:149
struct dma_sg_elem elem
Definition dma.h:148
uint32_t desc_count
Definition dma.h:230
uint32_t core
Definition dma.h:232
uint32_t index
Definition dma.h:231
void * priv_data
Definition dma.h:240
uint32_t direction
Definition dma.h:229
uint32_t status
Definition dma.h:228
uint64_t period
Definition dma.h:233
void * dev_data
Definition dma.h:238
struct dma * dma
Definition dma.h:225
bool is_scheduling_source
Definition dma.h:235
uint32_t timestamp
Definition dma.h:182
uint32_t w_pos
Definition dma.h:180
void * ipc_posn_data
Definition dma.h:185
uint32_t flags
Definition dma.h:179
uint32_t r_pos
Definition dma.h:181
uint32_t state
Definition dma.h:178
struct dma * dmac
Definition dma.h:258
struct dma_chan_data * chan
Definition dma.h:254
size_t num_dmas
Definition dma.h:249
struct dma * dma_array
Definition dma.h:247
Definition dma-legacy.h:47
int irq
Definition dma.h:197
uint32_t caps
Definition dma.h:193
uint32_t chan_size
Definition dma.h:199
uint32_t period_count
Definition dma.h:201
uint32_t devs
Definition dma.h:194
const void * drv_plat_data
Definition dma.h:200
uint32_t channels
Definition dma.h:196
uint32_t id
Definition dma.h:191
const char * irq_name
Definition dma.h:198
uint32_t dir
Definition dma.h:192
uint32_t base
Definition dma.h:195
uint32_t dest_width
Definition dma.h:163
bool scatter
Definition dma.h:171
struct dma_sg_elem_array elem_array
Definition dma.h:170
uint64_t period
Definition dma.h:169
uint32_t direction
Definition dma.h:165
uint32_t burst_elems
Definition dma.h:164
bool is_scheduling_source
Definition dma.h:174
uint32_t dest_dev
Definition dma.h:167
uint32_t src_width
Definition dma.h:162
bool irq_disabled
Definition dma.h:172
uint32_t src_dev
Definition dma.h:166
uint32_t cyclic
Definition dma.h:168
SG elem array.
Definition dma.h:155
uint32_t count
number of elements in elems
Definition dma.h:156
struct dma_sg_elem * elems
elements
Definition dma.h:157
Element of SG list (as array item).
Definition dma.h:137
uint32_t dest
destination address
Definition dma.h:139
uint32_t src
source address
Definition dma.h:138
uint32_t size
size (in bytes)
Definition dma.h:140
struct dma_chan_data * chan
Definition dma.h:216
int sref
simple ref counter, guarded by lock
Definition dma.h:213
struct dma_plat_data plat_data
Definition dma.h:211
const struct dma_ops * ops
Definition dma.h:214
atomic_t num_channels_busy
Definition dma.h:215
void * priv_data
Definition dma.h:218
const struct device * z_dev
Definition dma.h:217
struct k_spinlock lock
locking mechanism
Definition dma.h:212
General firmware context.
Definition sof.h:44
const struct dma_info * dma_info
Definition sof.h:90