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
212 struct k_spinlock lock;
222#ifdef CONFIG_ZEPHYR_NATIVE_DRIVERS
244#ifdef CONFIG_ZEPHYR_NATIVE_DRIVERS
245 struct sof_dma *dma_array;
255#ifdef CONFIG_ZEPHYR_NATIVE_DRIVERS
256 struct sof_dma *dmac;
279#ifdef CONFIG_ZEPHYR_NATIVE_DRIVERS
285#if defined(CONFIG_SCHEDULE_DMA_MULTI_CHANNEL) || \
286 defined(CONFIG_SCHEDULE_DMA_SINGLE_CHANNEL)
290 return channel->is_scheduling_source;
320 for (
i = 0 ;
i <
ea->count;
i++)
321 size +=
ea->elems[
i].size;
340 uint32_t source_bytes, uint32_t chmap);
Memory allocation API, zones, heaps, and alignment utilities.
Memory attributes, cold/hot execution paths, and platform memory inclusions.
Sound Open Firmware global runtime context.
struct sof * sof_get(void)
Get the global Sound Open Firmware runtime instance pointer.
RTOS spinlock primitives and initialization.
Writable view of sink data in a circular buffer.
Definition audio_stream.h:128
void * ptr
Current write pointer within the buffer.
Definition audio_stream.h:131
Read-only view of source data in a circular buffer.
Definition audio_stream.h:116
const void * ptr
Current read pointer within the buffer.
Definition audio_stream.h:119
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
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
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
General firmware context.
Definition sof.h:50
const struct dma_info * dma_info
Definition sof.h:96