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