Zephyr Project API 3.7.0
A Scalable Open Source RTOS
|
DMA Interface. More...
Data Structures | |
struct | dma_block_config |
DMA block configuration structure. More... | |
struct | dma_config |
DMA configuration structure. More... | |
struct | dma_status |
DMA runtime status structure. More... | |
struct | dma_context |
DMA context structure Note: the dma_context shall be the first member of DMA client driver Data, got by dev->data. More... | |
Macros | |
#define | DMA_STATUS_COMPLETE 0 |
The DMA callback event has occurred at the completion of a transfer list. | |
#define | DMA_STATUS_BLOCK 1 |
The DMA callback has occurred at the completion of a single transfer block in a transfer list. | |
#define | DMA_MAGIC 0x47494749 |
Magic code to identify context content. | |
#define | DMA_BUF_ADDR_ALIGNMENT(node) DT_PROP(node, dma_buf_addr_alignment) |
Get the device tree property describing the buffer address alignment. | |
#define | DMA_BUF_SIZE_ALIGNMENT(node) DT_PROP(node, dma_buf_size_alignment) |
Get the device tree property describing the buffer size alignment. | |
#define | DMA_COPY_ALIGNMENT(node) DT_PROP(node, dma_copy_alignment) |
Get the device tree property describing the minimal chunk of data possible to be copied. | |
Typedefs | |
typedef void(* | dma_callback_t) (const struct device *dev, void *user_data, uint32_t channel, int status) |
Callback function for DMA transfer completion. | |
Enumerations | |
enum | dma_channel_direction { MEMORY_TO_MEMORY = 0x0 , MEMORY_TO_PERIPHERAL , PERIPHERAL_TO_MEMORY , PERIPHERAL_TO_PERIPHERAL , HOST_TO_MEMORY , MEMORY_TO_HOST , DMA_CHANNEL_DIRECTION_COMMON_COUNT , DMA_CHANNEL_DIRECTION_PRIV_START = DMA_CHANNEL_DIRECTION_COMMON_COUNT , DMA_CHANNEL_DIRECTION_MAX = 0x7 } |
DMA channel direction. More... | |
enum | dma_addr_adj { DMA_ADDR_ADJ_INCREMENT , DMA_ADDR_ADJ_DECREMENT , DMA_ADDR_ADJ_NO_CHANGE } |
DMA address adjustment. More... | |
enum | dma_channel_filter { DMA_CHANNEL_NORMAL , DMA_CHANNEL_PERIODIC } |
DMA channel attributes. More... | |
enum | dma_attribute_type { DMA_ATTR_BUFFER_ADDRESS_ALIGNMENT , DMA_ATTR_BUFFER_SIZE_ALIGNMENT , DMA_ATTR_COPY_ALIGNMENT , DMA_ATTR_MAX_BLOCK_COUNT } |
DMA attributes. More... | |
Functions | |
static int | dma_config (const struct device *dev, uint32_t channel, struct dma_config *config) |
Configure individual channel for DMA transfer. | |
static int | dma_reload (const struct device *dev, uint32_t channel, uint32_t src, uint32_t dst, size_t size) |
Reload buffer(s) for a DMA channel. | |
int | dma_start (const struct device *dev, uint32_t channel) |
Enables DMA channel and starts the transfer, the channel must be configured beforehand. | |
int | dma_stop (const struct device *dev, uint32_t channel) |
Stops the DMA transfer and disables the channel. | |
int | dma_suspend (const struct device *dev, uint32_t channel) |
Suspend a DMA channel transfer. | |
int | dma_resume (const struct device *dev, uint32_t channel) |
Resume a DMA channel transfer. | |
int | dma_request_channel (const struct device *dev, void *filter_param) |
request DMA channel. | |
void | dma_release_channel (const struct device *dev, uint32_t channel) |
release DMA channel. | |
int | dma_chan_filter (const struct device *dev, int channel, void *filter_param) |
DMA channel filter. | |
static int | dma_get_status (const struct device *dev, uint32_t channel, struct dma_status *stat) |
get current runtime status of DMA transfer | |
static int | dma_get_attribute (const struct device *dev, uint32_t type, uint32_t *value) |
get attribute of a dma controller | |
static uint32_t | dma_width_index (uint32_t size) |
Look-up generic width index to be used in registers. | |
static uint32_t | dma_burst_index (uint32_t burst) |
Look-up generic burst index to be used in registers. | |
DMA Interface.
#define DMA_BUF_ADDR_ALIGNMENT | ( | node | ) | DT_PROP(node, dma_buf_addr_alignment) |
#include <include/zephyr/drivers/dma.h>
Get the device tree property describing the buffer address alignment.
Useful when statically defining or allocating buffers for DMA usage where memory alignment often matters.
node | Node identifier, e.g. DT_NODELABEL(dma_0) |
#define DMA_BUF_SIZE_ALIGNMENT | ( | node | ) | DT_PROP(node, dma_buf_size_alignment) |
#include <include/zephyr/drivers/dma.h>
Get the device tree property describing the buffer size alignment.
Useful when statically defining or allocating buffers for DMA usage where memory alignment often matters.
node | Node identifier, e.g. DT_NODELABEL(dma_0) |
#define DMA_COPY_ALIGNMENT | ( | node | ) | DT_PROP(node, dma_copy_alignment) |
#include <include/zephyr/drivers/dma.h>
Get the device tree property describing the minimal chunk of data possible to be copied.
node | Node identifier, e.g. DT_NODELABEL(dma_0) |
#define DMA_MAGIC 0x47494749 |
#include <include/zephyr/drivers/dma.h>
Magic code to identify context content.
#define DMA_STATUS_BLOCK 1 |
#include <include/zephyr/drivers/dma.h>
The DMA callback has occurred at the completion of a single transfer block in a transfer list.
#define DMA_STATUS_COMPLETE 0 |
#include <include/zephyr/drivers/dma.h>
The DMA callback event has occurred at the completion of a transfer list.
dma_callback_t |
#include <include/zephyr/drivers/dma.h>
Callback function for DMA transfer completion.
If enabled, callback function will be invoked at transfer or block completion, or when an error happens. In circular mode, status
indicates that the DMA device has reached either the end of the buffer (DMA_STATUS_COMPLETE) or a water mark (DMA_STATUS_BLOCK).
dev | Pointer to the DMA device calling the callback. |
user_data | A pointer to some user data or NULL |
channel | The channel number |
status | Status of the transfer
|
enum dma_addr_adj |
#include <include/zephyr/drivers/dma.h>
DMA address adjustment.
Valid values for source_addr_adj and dest_addr_adj
Enumerator | |
---|---|
DMA_ADDR_ADJ_INCREMENT | Increment the address. |
DMA_ADDR_ADJ_DECREMENT | Decrement the address. |
DMA_ADDR_ADJ_NO_CHANGE | No change the address. |
enum dma_attribute_type |
#include <include/zephyr/drivers/dma.h>
DMA attributes.
Enumerator | |
---|---|
DMA_ATTR_BUFFER_ADDRESS_ALIGNMENT | |
DMA_ATTR_BUFFER_SIZE_ALIGNMENT | |
DMA_ATTR_COPY_ALIGNMENT | |
DMA_ATTR_MAX_BLOCK_COUNT |
#include <include/zephyr/drivers/dma.h>
DMA channel direction.
enum dma_channel_filter |
#include <include/zephyr/drivers/dma.h>
DMA channel attributes.
Enumerator | |
---|---|
DMA_CHANNEL_NORMAL | |
DMA_CHANNEL_PERIODIC |
#include <include/zephyr/drivers/dma.h>
Look-up generic burst index to be used in registers.
burst | number of bytes to be sent in a single burst |
common | DMA index to be placed into registers. |
int dma_chan_filter | ( | const struct device * | dev, |
int | channel, | ||
void * | filter_param | ||
) |
#include <include/zephyr/drivers/dma.h>
DMA channel filter.
filter channel by attribute
dev | Pointer to the device structure for the driver instance. |
channel | channel number |
filter_param | filter attribute |
Negative | errno code if not support |
|
inlinestatic |
#include <include/zephyr/drivers/dma.h>
Configure individual channel for DMA transfer.
dev | Pointer to the device structure for the driver instance. |
channel | Numeric identification of the channel to configure |
config | Data structure containing the intended configuration for the selected channel |
0 | if successful. |
Negative | errno code if failure. |
|
inlinestatic |
#include <include/zephyr/drivers/dma.h>
get attribute of a dma controller
This function allows to get a device specific static or runtime attribute like required address and size alignment of a buffer. Implementations must check the validity of the type passed in and return -EINVAL if it is invalid or -ENOSYS if not supported.
dev | Pointer to the device structure for the driver instance. |
type | Numeric identification of the attribute |
value | A non-NULL pointer to the variable where the read value is to be placed |
non-negative | if successful. |
Negative | errno code if failure. |
|
inlinestatic |
#include <include/zephyr/drivers/dma.h>
get current runtime status of DMA transfer
Implementations must check the validity of the channel ID passed in and return -EINVAL if it is invalid or -ENOSYS if not supported.
dev | Pointer to the device structure for the driver instance. |
channel | Numeric identification of the channel where the transfer was being processed |
stat | a non-NULL dma_status object for storing DMA status |
non-negative | if successful. |
Negative | errno code if failure. |
#include <include/zephyr/drivers/dma.h>
release DMA channel.
release DMA channel resources
dev | Pointer to the device structure for the driver instance. |
channel | channel number |
|
inlinestatic |
#include <include/zephyr/drivers/dma.h>
Reload buffer(s) for a DMA channel.
dev | Pointer to the device structure for the driver instance. |
channel | Numeric identification of the channel to configure selected channel |
src | source address for the DMA transfer |
dst | destination address for the DMA transfer |
size | size of DMA transfer |
0 | if successful. |
Negative | errno code if failure. |
int dma_request_channel | ( | const struct device * | dev, |
void * | filter_param | ||
) |
#include <include/zephyr/drivers/dma.h>
request DMA channel.
request DMA channel resources return -EINVAL if there is no valid channel available.
dev | Pointer to the device structure for the driver instance. |
filter_param | filter function parameter |
dma | channel if successful. |
Negative | errno code if failure. |
#include <include/zephyr/drivers/dma.h>
Resume a DMA channel transfer.
Implementations must check the validity of the channel state and ID passed in and return -EINVAL if either are invalid.
dev | Pointer to the device structure for the driver instance. |
channel | Numeric identification of the channel to resume |
0 | If successful. |
-ENOSYS | If not implemented |
-EINVAL | If invalid channel id or state. |
-errno | Other negative errno code failure. |
#include <include/zephyr/drivers/dma.h>
Enables DMA channel and starts the transfer, the channel must be configured beforehand.
Implementations must check the validity of the channel ID passed in and return -EINVAL if it is invalid.
Start is allowed on channels that have already been started and must report success.
dev | Pointer to the device structure for the driver instance. |
channel | Numeric identification of the channel where the transfer will be processed |
0 | if successful. |
Negative | errno code if failure. |
#include <include/zephyr/drivers/dma.h>
Stops the DMA transfer and disables the channel.
Implementations must check the validity of the channel ID passed in and return -EINVAL if it is invalid.
Stop is allowed on channels that have already been stopped and must report success.
dev | Pointer to the device structure for the driver instance. |
channel | Numeric identification of the channel where the transfer was being processed |
0 | if successful. |
Negative | errno code if failure. |
#include <include/zephyr/drivers/dma.h>
Suspend a DMA channel transfer.
Implementations must check the validity of the channel state and ID passed in and return -EINVAL if either are invalid.
dev | Pointer to the device structure for the driver instance. |
channel | Numeric identification of the channel to suspend |
0 | If successful. |
-ENOSYS | If not implemented. |
-EINVAL | If invalid channel id or state. |
-errno | Other negative errno code failure. |
#include <include/zephyr/drivers/dma.h>
Look-up generic width index to be used in registers.
size | width of bus (in bytes) |
common | DMA index to be placed into registers. |