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