xref: /freebsd/sys/arm/allwinner/sunxi_dma_if.m (revision 06c3fb27)
1#-
2# Copyright (c) 2016 Jared D. McNeill <jmcneill@invisible.ca>
3# All rights reserved.
4#
5# Redistribution and use in source and binary forms, with or without
6# modification, are permitted provided that the following conditions
7# are met:
8# 1. Redistributions of source code must retain the above copyright
9#    notice, this list of conditions and the following disclaimer.
10# 2. Redistributions in binary form must reproduce the above copyright
11#    notice, this list of conditions and the following disclaimer in the
12#    documentation and/or other materials provided with the distribution.
13#
14# THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
15# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
16# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
17# ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
18# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
19# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
20# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
21# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
22# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
23# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
24# SUCH DAMAGE.
25#
26#
27
28#include <sys/bus.h>
29
30INTERFACE sunxi_dma;
31
32HEADER {
33	#include <machine/bus.h>
34
35	struct sunxi_dma_config {
36		unsigned int dst_width;
37		unsigned int dst_burst_len;
38		unsigned int dst_drqtype;
39		bool dst_noincr;
40		unsigned int dst_blksize;	/* DDMA-only */
41		unsigned int dst_wait_cyc;	/* DDMA-only */
42		unsigned int src_width;
43		unsigned int src_burst_len;
44		unsigned int src_drqtype;
45		bool src_noincr;
46		unsigned int src_blksize;	/* DDMA-only */
47		unsigned int src_wait_cyc;	/* DDMA-only */
48	};
49
50	typedef void (*sunxi_dma_callback)(void *);
51}
52
53#
54# Allocate DMA channel
55#
56METHOD void * alloc {
57	device_t dev;
58	bool dedicated;
59	sunxi_dma_callback callback;
60	void *callback_arg;
61};
62
63#
64# Free DMA channel
65#
66METHOD void free {
67	device_t dev;
68	void *dmachan;
69};
70
71#
72# Set DMA channel configuration
73#
74METHOD int set_config {
75	device_t dev;
76	void *dmachan;
77	const struct sunxi_dma_config *cfg;
78};
79
80#
81# Start DMA channel transfer
82#
83METHOD int transfer {
84	device_t dev;
85	void *dmachan;
86	bus_addr_t src;
87	bus_addr_t dst;
88	size_t nbytes;
89};
90
91#
92# Halt DMA channel transfer
93#
94METHOD void halt {
95	device_t dev;
96	void *dmachan;
97};
98