SyterKit 0.4.0.x
SyterKit is a bare-metal framework
Loading...
Searching...
No Matches
sys-dma.h
Go to the documentation of this file.
1/* SPDX-License-Identifier: GPL-2.0+ */
2
3#ifndef _SUNXI_DMA_H
4#define _SUNXI_DMA_H
5
6#include <io.h>
7#include <stdarg.h>
8#include <stdbool.h>
9#include <stddef.h>
10#include <stdint.h>
11#include <types.h>
12
13#include <common.h>
14#include <log.h>
15
16#include <reg-dma.h>
17#include <sys-clk.h>
18
19#ifdef __cplusplus
20extern "C" {
21#endif// __cplusplus
22
23typedef struct {
24 uint32_t volatile config;
29 uint32_t volatile link;
30 uint32_t volatile reserved[2];
32
33typedef struct {
34 uint32_t volatile src_drq_type : 6;
36 uint32_t volatile src_addr_mode : 1;
38 uint32_t volatile reserved0 : 5;
39 uint32_t volatile dst_drq_type : 6;
41 uint32_t volatile dst_addr_mode : 1;
43 uint32_t volatile reserved1 : 5;
45
52
53typedef struct {
54 void *m_data;
55 void (*m_func)(void);
57
58typedef struct {
59 uint32_t volatile enable;
60 uint32_t volatile pause;
62 uint32_t volatile config;
67 uint32_t volatile mode;
69 uint32_t volatile pkg_num;
70 uint32_t volatile res[5];
72
73typedef struct {
74 uint32_t volatile irq_en0; /* 0x0 dma irq enable register 0 */
75 uint32_t volatile irq_en1; /* 0x4 dma irq enable register 1 */
76 uint32_t volatile reserved0[2];
77 uint32_t volatile irq_pending0; /* 0x10 dma irq pending register 0 */
78 uint32_t volatile irq_pending1; /* 0x14 dma irq pending register 1 */
79 uint32_t volatile reserved1[2];
80 uint32_t volatile security; /* 0x20 dma security register */
81 uint32_t volatile reserved3[1];
82 uint32_t volatile auto_gate; /* 0x28 dma auto gating register */
83 uint32_t volatile reserved4[1];
84 uint32_t volatile status; /* 0x30 dma status register */
85 uint32_t volatile reserved5[3];
86 uint32_t volatile version; /* 0x40 dma Version register */
87 uint32_t volatile reserved6[47];
88 sunxi_dma_channel_reg_t channel[16]; /* 0x100 dma channel register */
90
99
105
106#define DMA_DEFAULT_CLK_RST_OFFSET (16)
107#define DMA_DEFAULT_CLK_GATE_OFFSET (0)
108
112void sunxi_dma_init(sunxi_dma_t *dma);
113
117void sunxi_dma_exit(sunxi_dma_t *dma);
118
126
134
141int sunxi_dma_release(uint32_t dma_fd);
142
151
161int sunxi_dma_start(uint32_t dma_fd, uint32_t saddr, uint32_t daddr, uint32_t bytes);
162
169int sunxi_dma_stop(uint32_t dma_fd);
170
178
191int sunxi_dma_install_int(uint32_t dma_fd, void *p);
192
205
218
230int sunxi_dma_free_int(uint32_t dma_fd);
231
239int sunxi_dma_test(uint32_t *src_addr, uint32_t *dst_addr, uint32_t len);
240
241#ifdef __cplusplus
242}
243#endif// __cplusplus
244
245#endif /* _SUNXI_DMA_H */
unsigned char bytes[UL_LEN/8]
Definition memtester.c:32
u32_t uint32_t
Definition stdint.h:13
Definition sys-clk.h:17
Definition sys-dma.h:33
uint32_t volatile dst_burst_length
Definition sys-dma.h:40
uint32_t volatile dst_drq_type
Definition sys-dma.h:39
uint32_t volatile reserved1
Definition sys-dma.h:43
uint32_t volatile dst_addr_mode
Definition sys-dma.h:41
uint32_t volatile src_data_width
Definition sys-dma.h:37
uint32_t volatile src_addr_mode
Definition sys-dma.h:36
uint32_t volatile src_burst_length
Definition sys-dma.h:35
uint32_t volatile src_drq_type
Definition sys-dma.h:34
uint32_t volatile reserved0
Definition sys-dma.h:38
uint32_t volatile dst_data_width
Definition sys-dma.h:42
Definition sys-dma.h:58
uint32_t volatile enable
Definition sys-dma.h:59
uint32_t volatile fdesc_addr
Definition sys-dma.h:68
uint32_t volatile desc_addr
Definition sys-dma.h:61
uint32_t volatile mode
Definition sys-dma.h:67
uint32_t volatile parameters
Definition sys-dma.h:66
uint32_t volatile left_bytes
Definition sys-dma.h:65
uint32_t volatile pkg_num
Definition sys-dma.h:69
uint32_t volatile pause
Definition sys-dma.h:60
uint32_t volatile cur_dst_addr
Definition sys-dma.h:64
uint32_t volatile config
Definition sys-dma.h:62
uint32_t volatile cur_src_addr
Definition sys-dma.h:63
Definition sys-dma.h:23
uint32_t volatile source_addr
Definition sys-dma.h:25
uint32_t volatile link
Definition sys-dma.h:29
uint32_t volatile config
Definition sys-dma.h:24
uint32_t volatile dest_addr
Definition sys-dma.h:26
uint32_t volatile byte_count
Definition sys-dma.h:27
uint32_t volatile commit_para
Definition sys-dma.h:28
Definition sys-dma.h:53
void * m_data
Definition sys-dma.h:54
Definition sys-dma.h:73
uint32_t volatile irq_pending0
Definition sys-dma.h:77
uint32_t volatile security
Definition sys-dma.h:80
uint32_t volatile irq_en0
Definition sys-dma.h:74
uint32_t volatile status
Definition sys-dma.h:84
uint32_t volatile version
Definition sys-dma.h:86
uint32_t volatile irq_pending1
Definition sys-dma.h:78
uint32_t volatile auto_gate
Definition sys-dma.h:82
uint32_t volatile irq_en1
Definition sys-dma.h:75
Definition sys-dma.h:46
uint32_t wait_cyc
Definition sys-dma.h:50
uint32_t data_block_size
Definition sys-dma.h:49
sunxi_dma_channel_config_t channel_cfg
Definition sys-dma.h:47
uint32_t loop_mode
Definition sys-dma.h:48
Definition sys-dma.h:91
uint32_t used
Definition sys-dma.h:92
uint32_t channel_count
Definition sys-dma.h:93
sunxi_dma_channel_reg_t * channel
Definition sys-dma.h:94
sunxi_dma_irq_handler_t dma_func
Definition sys-dma.h:97
uint32_t reserved
Definition sys-dma.h:95
sunxi_dma_desc_t * desc
Definition sys-dma.h:96
Definition sys-dma.h:100
sunxi_clk_t dma_clk
Definition sys-dma.h:102
uint32_t dma_reg_base
Definition sys-dma.h:101
sunxi_clk_t bus_clk
Definition sys-dma.h:103
int sunxi_dma_install_int(uint32_t dma_fd, void *p)
Installs an interrupt handler for the DMA.
Definition sys-dma.c:324
int sunxi_dma_stop(uint32_t dma_fd)
Stop a currently running DMA transfer.
Definition sys-dma.c:284
int sunxi_dma_start(uint32_t dma_fd, uint32_t saddr, uint32_t daddr, uint32_t bytes)
Start a DMA transfer.
Definition sys-dma.c:258
int sunxi_dma_enable_int(uint32_t dma_fd)
Enables interrupts for the specified DMA.
Definition sys-dma.c:357
uint32_t sunxi_dma_request(uint32_t dmatype)
Request a DMA channel of the specified type.
Definition sys-dma.c:179
int sunxi_dma_free_int(uint32_t dma_fd)
Frees the interrupt resources for the specified DMA.
Definition sys-dma.c:436
void sunxi_dma_exit(sunxi_dma_t *dma)
Clean up and exit the DMA subsystem.
Definition sys-dma.c:125
int sunxi_dma_disable_int(uint32_t dma_fd)
Disables interrupts for the specified DMA.
Definition sys-dma.c:396
int sunxi_dma_release(uint32_t dma_fd)
Release a previously requested DMA channel.
Definition sys-dma.c:198
void sunxi_dma_init(sunxi_dma_t *dma)
Initialize the DMA subsystem.
Definition sys-dma.c:83
uint32_t sunxi_dma_request_from_last(uint32_t dmatype)
Request a DMA channel from the last allocated channel of the specified type.
Definition sys-dma.c:161
int sunxi_dma_querystatus(uint32_t dma_fd)
Query the status of a DMA transfer.
Definition sys-dma.c:303
int sunxi_dma_setting(uint32_t dma_fd, sunxi_dma_set_t *cfg)
Configure the settings of a DMA channel.
Definition sys-dma.c:223
int sunxi_dma_test(uint32_t *src_addr, uint32_t *dst_addr, uint32_t len)
Perform a test DMA transfer between the specified source and destination addresses.
Definition sys-dma.c:472