xref: /netbsd-src/sys/arch/sun3/dev/dmavar.h (revision 78a1d236b60fe5601ed9827887f6d785b6668624)
1*78a1d236Stsutsui /*	$NetBSD: dmavar.h,v 1.10 2008/04/13 04:55:53 tsutsui Exp $ */
2ad9700faSjeremy 
3ad9700faSjeremy /*
4ad9700faSjeremy  * Copyright (c) 1994 Peter Galbavy.  All rights reserved.
5ad9700faSjeremy  * Redistribution and use in source and binary forms, with or without
6ad9700faSjeremy  * modification, are permitted provided that the following conditions
7ad9700faSjeremy  * are met:
8ad9700faSjeremy  * 1. Redistributions of source code must retain the above copyright
9ad9700faSjeremy  *    notice, this list of conditions and the following disclaimer.
10ad9700faSjeremy  * 2. Redistributions in binary form must reproduce the above copyright
11ad9700faSjeremy  *    notice, this list of conditions and the following disclaimer in the
12ad9700faSjeremy  *    documentation and/or other materials provided with the distribution.
13ad9700faSjeremy  * 3. All advertising materials mentioning features or use of this software
14ad9700faSjeremy  *    must display the following acknowledgement:
15ad9700faSjeremy  *	This product includes software developed by Peter Galbavy.
16ad9700faSjeremy  * 4. The name of the author may not be used to endorse or promote products
17ad9700faSjeremy  *    derived from this software without specific prior written permission.
18ad9700faSjeremy  *
19ad9700faSjeremy  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
20ad9700faSjeremy  * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
21ad9700faSjeremy  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
22ad9700faSjeremy  * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
23ad9700faSjeremy  * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
24ad9700faSjeremy  * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
25ad9700faSjeremy  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
26ad9700faSjeremy  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
27ad9700faSjeremy  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
28ad9700faSjeremy  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
29ad9700faSjeremy  */
30ad9700faSjeremy 
31ad9700faSjeremy struct dma_softc {
32*78a1d236Stsutsui 	device_t sc_dev;			/* us as a device */
33b19c5b0bStsutsui 	bus_space_tag_t sc_bst;			/* bus space tag */
34b19c5b0bStsutsui 	bus_dma_tag_t sc_dmatag;		/* bus dma tag */
35b19c5b0bStsutsui 
36b19c5b0bStsutsui 	bus_space_handle_t sc_bsh;		/* bus space handle */
37b19c5b0bStsutsui 	void *sc_client;			/* my client */
38b19c5b0bStsutsui 
39ad9700faSjeremy 	int	sc_active;			/* DMA active ? */
40b19c5b0bStsutsui 	bus_dmamap_t sc_dmamap;			/* bus dma map */
41ad9700faSjeremy 	u_int	sc_rev;				/* revision */
42ad9700faSjeremy 	int	sc_burst;			/* DVMA burst size in effect */
43ad9700faSjeremy 	size_t	sc_dmasize;
44*78a1d236Stsutsui 	uint8_t	**sc_dmaaddr;
45ad9700faSjeremy 	size_t  *sc_dmalen;
46c3f299a5Sgwr #if 0
47ad9700faSjeremy 	void (*reset)(struct dma_softc *);	/* reset routine */
48ad9700faSjeremy 	int (*intr)(struct dma_softc *);	/* interrupt ! */
49*78a1d236Stsutsui 	int (*setup)(struct dma_softc *, uint8_t **, size_t *, int, size_t *);
50c3f299a5Sgwr #endif
51ad9700faSjeremy };
52ad9700faSjeremy 
53b19c5b0bStsutsui #define DMA_GCSR(sc)		\
54b19c5b0bStsutsui 	bus_space_read_4((sc)->sc_bst, (sc)->sc_bsh, DMA_REG_CSR)
55b19c5b0bStsutsui #define DMA_SCSR(sc, csr)	\
56b19c5b0bStsutsui 	bus_space_write_4((sc)->sc_bst, (sc)->sc_bsh, DMA_REG_CSR, (csr))
57b19c5b0bStsutsui 
58b19c5b0bStsutsui /*
59b19c5b0bStsutsui  * DMA engine interface functions.
60b19c5b0bStsutsui  */
61b19c5b0bStsutsui #if 0
62b19c5b0bStsutsui #define DMA_RESET(sc)			(((sc)->reset)(sc))
63b19c5b0bStsutsui #define DMA_INTR(sc)			(((sc)->intr)(sc))
64b19c5b0bStsutsui #define DMA_SETUP(sc, a, l, d, s)	(((sc)->setup)(sc, a, l, d, s))
65b19c5b0bStsutsui #endif
66b19c5b0bStsutsui 
67b19c5b0bStsutsui #define DMA_ISACTIVE(sc)		((sc)->sc_active)
68b19c5b0bStsutsui 
69b19c5b0bStsutsui #define DMA_ENINTR(sc) do {			\
70b19c5b0bStsutsui 	uint32_t _csr = DMA_GCSR(sc);		\
71b19c5b0bStsutsui 	_csr |= D_INT_EN;			\
72b19c5b0bStsutsui 	DMA_SCSR(sc, _csr);			\
73b19c5b0bStsutsui } while (/* CONSTCOND */0)
74b19c5b0bStsutsui 
75b19c5b0bStsutsui #define DMA_ISINTR(sc)	(DMA_GCSR(sc) & (D_INT_PEND|D_ERR_PEND))
76b19c5b0bStsutsui 
77b19c5b0bStsutsui #define DMA_GO(sc) do {				\
78b19c5b0bStsutsui 	uint32_t _csr = DMA_GCSR(sc);		\
79b19c5b0bStsutsui 	_csr |= D_EN_DMA;			\
80b19c5b0bStsutsui 	DMA_SCSR(sc, _csr);			\
81b19c5b0bStsutsui 	sc->sc_active = 1;			\
82b19c5b0bStsutsui } while (/* CONSTCOND */0)
83b19c5b0bStsutsui 
84b19c5b0bStsutsui #define DMA_STOP(sc) do {			\
85b19c5b0bStsutsui 	uint32_t _csr = DMA_GCSR(sc);		\
86b19c5b0bStsutsui 	_csr &= ~D_EN_DMA;			\
87b19c5b0bStsutsui 	DMA_SCSR(sc, _csr);			\
88b19c5b0bStsutsui 	sc->sc_active = 0;			\
89b19c5b0bStsutsui } while (/* CONSTCOND */0)
90ad9700faSjeremy 
9110b1a7beSchs struct dma_softc *espdmafind(int);
92b19c5b0bStsutsui int espdmaintr(struct dma_softc *);
93c3f299a5Sgwr 
9410b1a7beSchs void dma_reset(struct dma_softc *);
95*78a1d236Stsutsui int  dma_setup(struct dma_softc *, uint8_t **, size_t *, int, size_t *);
96c3f299a5Sgwr 
97