xref: /freebsd/sys/arm/allwinner/sunxi_dma_if.m (revision c697fb7f)
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# $FreeBSD$
27#
28
29#include <sys/bus.h>
30
31INTERFACE sunxi_dma;
32
33HEADER {
34	#include <machine/bus.h>
35
36	struct sunxi_dma_config {
37		unsigned int dst_width;
38		unsigned int dst_burst_len;
39		unsigned int dst_drqtype;
40		bool dst_noincr;
41		unsigned int dst_blksize;	/* DDMA-only */
42		unsigned int dst_wait_cyc;	/* DDMA-only */
43		unsigned int src_width;
44		unsigned int src_burst_len;
45		unsigned int src_drqtype;
46		bool src_noincr;
47		unsigned int src_blksize;	/* DDMA-only */
48		unsigned int src_wait_cyc;	/* DDMA-only */
49	};
50
51	typedef void (*sunxi_dma_callback)(void *);
52}
53
54#
55# Allocate DMA channel
56#
57METHOD void * alloc {
58	device_t dev;
59	bool dedicated;
60	sunxi_dma_callback callback;
61	void *callback_arg;
62};
63
64#
65# Free DMA channel
66#
67METHOD void free {
68	device_t dev;
69	void *dmachan;
70};
71
72#
73# Set DMA channel configuration
74#
75METHOD int set_config {
76	device_t dev;
77	void *dmachan;
78	const struct sunxi_dma_config *cfg;
79};
80
81#
82# Start DMA channel transfer
83#
84METHOD int transfer {
85	device_t dev;
86	void *dmachan;
87	bus_addr_t src;
88	bus_addr_t dst;
89	size_t nbytes;
90};
91
92#
93# Halt DMA channel transfer
94#
95METHOD void halt {
96	device_t dev;
97	void *dmachan;
98};
99