bus_dma.h revision 259510
1/*-
2 * Copyright (c) 1996, 1997, 1998, 2001 The NetBSD Foundation, Inc.
3 * All rights reserved.
4 *
5 * This code is derived from software contributed to The NetBSD Foundation
6 * by Jason R. Thorpe of the Numerical Aerospace Simulation Facility,
7 * NASA Ames Research Center.
8 *
9 * Redistribution and use in source and binary forms, with or without
10 * modification, are permitted provided that the following conditions
11 * are met:
12 * 1. Redistributions of source code must retain the above copyright
13 *    notice, this list of conditions and the following disclaimer.
14 * 2. Redistributions in binary form must reproduce the above copyright
15 *    notice, this list of conditions and the following disclaimer in the
16 *    documentation and/or other materials provided with the distribution.
17 *
18 * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
19 * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
20 * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
21 * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
22 * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
23 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
24 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
25 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
26 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
27 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
28 * POSSIBILITY OF SUCH DAMAGE.
29 */
30/*
31 * Copyright (c) 1997-1999 Eduardo E. Horvath. All rights reserved.
32 * Copyright (c) 1996 Charles M. Hannum.  All rights reserved.
33 * Copyright (c) 1996 Christopher G. Demetriou.  All rights reserved.
34 *
35 * Redistribution and use in source and binary forms, with or without
36 * modification, are permitted provided that the following conditions
37 * are met:
38 * 1. Redistributions of source code must retain the above copyright
39 *    notice, this list of conditions and the following disclaimer.
40 * 2. Redistributions in binary form must reproduce the above copyright
41 *    notice, this list of conditions and the following disclaimer in the
42 *    documentation and/or other materials provided with the distribution.
43 * 3. All advertising materials mentioning features or use of this software
44 *    must display the following acknowledgement:
45 *      This product includes software developed by Christopher G. Demetriou
46 *	for the NetBSD Project.
47 * 4. The name of the author may not be used to endorse or promote products
48 *    derived from this software without specific prior written permission
49 *
50 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
51 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
52 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
53 * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
54 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
55 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
56 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
57 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
58 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
59 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
60 *
61 * 	from: NetBSD: bus.h,v 1.58 2008/04/28 20:23:36 martin Exp
62 *	and
63 *	from: FreeBSD: src/sys/alpha/include/bus.h,v 1.9 2001/01/09
64 *
65 * $FreeBSD: stable/10/sys/sparc64/include/bus_dma.h 259510 2013-12-17 13:38:21Z kib $
66 */
67
68#ifndef _SPARC64_BUS_DMA_H
69#define _SPARC64_BUS_DMA_H
70
71#include <sys/bus_dma.h>
72
73/* DMA support */
74
75/*
76 * Method table for a bus_dma_tag.
77 */
78struct bus_dma_methods {
79	int	(*dm_dmamap_create)(bus_dma_tag_t, int, bus_dmamap_t *);
80	int	(*dm_dmamap_destroy)(bus_dma_tag_t, bus_dmamap_t);
81	int	(*dm_dmamap_load_phys)(bus_dma_tag_t dmat, bus_dmamap_t map,
82	    vm_paddr_t buf, bus_size_t buflen, int flags,
83	    bus_dma_segment_t *segs, int *segp);
84	int	(*dm_dmamap_load_buffer)(bus_dma_tag_t dmat, bus_dmamap_t map,
85	    void *buf, bus_size_t buflen, struct pmap *pmap, int flags,
86	    bus_dma_segment_t *segs, int *segp);
87	void	(*dm_dmamap_waitok)(bus_dma_tag_t dmat, bus_dmamap_t map,
88	    struct memdesc *mem, bus_dmamap_callback_t *callback,
89	    void *callback_arg);
90	bus_dma_segment_t *(*dm_dmamap_complete)(bus_dma_tag_t dmat,
91	    bus_dmamap_t map, bus_dma_segment_t *segs, int nsegs, int error);
92	void	(*dm_dmamap_unload)(bus_dma_tag_t, bus_dmamap_t);
93	void	(*dm_dmamap_sync)(bus_dma_tag_t, bus_dmamap_t,
94	    bus_dmasync_op_t);
95	int	(*dm_dmamem_alloc)(bus_dma_tag_t, void **, int, bus_dmamap_t *);
96	void	(*dm_dmamem_free)(bus_dma_tag_t, void *, bus_dmamap_t);
97};
98
99/*
100 * bus_dma_tag_t
101 *
102 * A machine-dependent opaque type describing the implementation of
103 * DMA for a given bus.
104 */
105struct bus_dma_tag {
106	void		*dt_cookie;		/* cookie used in the guts */
107	bus_dma_tag_t	dt_parent;
108	bus_size_t	dt_alignment;
109	bus_addr_t	dt_boundary;
110	bus_addr_t	dt_lowaddr;
111	bus_addr_t	dt_highaddr;
112	bus_dma_filter_t	*dt_filter;
113	void		*dt_filterarg;
114	bus_size_t	dt_maxsize;
115	int		dt_nsegments;
116	bus_size_t	dt_maxsegsz;
117	int		dt_flags;
118	int		dt_ref_count;
119	int		dt_map_count;
120	bus_dma_lock_t	*dt_lockfunc;
121	void *		*dt_lockfuncarg;
122	bus_dma_segment_t *dt_segments;
123
124	struct bus_dma_methods	*dt_mt;
125};
126
127#define	bus_dmamap_create(t, f, p)					\
128	((t)->dt_mt->dm_dmamap_create((t), (f), (p)))
129#define	bus_dmamap_destroy(t, p)					\
130	((t)->dt_mt->dm_dmamap_destroy((t), (p)))
131#define	_bus_dmamap_load_phys(t, m, b, l, f, s, sp)			\
132	((t)->dt_mt->dm_dmamap_load_phys((t), (m), (b), (l),		\
133	    (f), (s), (sp)))
134#define	_bus_dmamap_load_buffer(t, m, b, l, p, f, s, sp)		\
135	((t)->dt_mt->dm_dmamap_load_buffer((t), (m), (b), (l), (p),	\
136	    (f), (s), (sp)))
137#define	_bus_dmamap_waitok(t, m, mem, c, ca)				\
138	((t)->dt_mt->dm_dmamap_waitok((t), (m), (mem), (c), (ca)))
139#define	_bus_dmamap_complete(t, m, s, n, e)				\
140	((t)->dt_mt->dm_dmamap_complete((t), (m), (s), (n), (e)))
141#define	bus_dmamap_unload(t, p)						\
142	((t)->dt_mt->dm_dmamap_unload((t), (p)))
143#define	bus_dmamap_sync(t, m, op)					\
144	((t)->dt_mt->dm_dmamap_sync((t), (m), (op)))
145#define	bus_dmamem_alloc(t, v, f, m)					\
146	((t)->dt_mt->dm_dmamem_alloc((t), (v), (f), (m)))
147#define	bus_dmamem_free(t, v, m)					\
148	((t)->dt_mt->dm_dmamem_free((t), (v), (m)))
149#define _bus_dmamap_load_ma(t, m, a, tt, o, f, s, p)			\
150	bus_dmamap_load_ma_triv((t), (m), (a), (tt), (o), (f), (s), (p))
151
152#endif /* !_SPARC64_BUS_DMA_H_ */
153