sgmap.h revision 1.4.108.1 1 1.4.108.1 mjf /* $NetBSD: sgmap.h,v 1.4.108.1 2008/02/18 21:05:15 mjf Exp $ */
2 1.1 ragge
3 1.1 ragge /*-
4 1.1 ragge * Copyright (c) 1997, 1998 The NetBSD Foundation, Inc.
5 1.1 ragge * All rights reserved.
6 1.1 ragge *
7 1.1 ragge * This code is derived from software contributed to The NetBSD Foundation
8 1.1 ragge * by Jason R. Thorpe of the Numerical Aerospace Simulation Facility,
9 1.1 ragge * NASA Ames Research Center.
10 1.1 ragge *
11 1.1 ragge * Redistribution and use in source and binary forms, with or without
12 1.1 ragge * modification, are permitted provided that the following conditions
13 1.1 ragge * are met:
14 1.1 ragge * 1. Redistributions of source code must retain the above copyright
15 1.1 ragge * notice, this list of conditions and the following disclaimer.
16 1.1 ragge * 2. Redistributions in binary form must reproduce the above copyright
17 1.1 ragge * notice, this list of conditions and the following disclaimer in the
18 1.1 ragge * documentation and/or other materials provided with the distribution.
19 1.1 ragge * 3. All advertising materials mentioning features or use of this software
20 1.1 ragge * must display the following acknowledgement:
21 1.1 ragge * This product includes software developed by the NetBSD
22 1.1 ragge * Foundation, Inc. and its contributors.
23 1.1 ragge * 4. Neither the name of The NetBSD Foundation nor the names of its
24 1.1 ragge * contributors may be used to endorse or promote products derived
25 1.1 ragge * from this software without specific prior written permission.
26 1.1 ragge *
27 1.1 ragge * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
28 1.1 ragge * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
29 1.1 ragge * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
30 1.1 ragge * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
31 1.1 ragge * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
32 1.1 ragge * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
33 1.1 ragge * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
34 1.1 ragge * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
35 1.1 ragge * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
36 1.1 ragge * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
37 1.1 ragge * POSSIBILITY OF SUCH DAMAGE.
38 1.1 ragge */
39 1.1 ragge
40 1.4.108.1 mjf #ifndef _VAX_SGMAP_H
41 1.4.108.1 mjf #define _VAX_SGMAP_H
42 1.1 ragge
43 1.1 ragge #include <sys/extent.h>
44 1.1 ragge #include <machine/bus.h>
45 1.1 ragge #include <machine/pte.h>
46 1.1 ragge
47 1.1 ragge /*
48 1.1 ragge * A VAX SGMAP's state information. Nothing in the sgmap requires
49 1.1 ragge * locking[*], with the exception of the extent map. Locking of the
50 1.1 ragge * extent map is handled within the extent manager itself.
51 1.1 ragge *
52 1.1 ragge * [*] While the page table is a `global' resource, access to it is
53 1.1 ragge * controlled by the extent map; once a region has been allocated from
54 1.1 ragge * the map, that region is effectively `locked'.
55 1.1 ragge */
56 1.1 ragge struct vax_sgmap {
57 1.1 ragge struct extent *aps_ex; /* extent map to manage sgva space */
58 1.1 ragge struct pte *aps_pt; /* page table */
59 1.1 ragge bus_addr_t aps_sgvabase; /* base of the sgva space */
60 1.1 ragge bus_size_t aps_sgvasize; /* size of the sgva space */
61 1.1 ragge bus_addr_t aps_pa; /* Address in region */
62 1.3 matt unsigned int aps_flags; /* flags */
63 1.1 ragge };
64 1.1 ragge
65 1.4.108.1 mjf void vax_sgmap_dmatag_init(bus_dma_tag_t, void *, size_t);
66 1.1 ragge
67 1.4.108.1 mjf void vax_sgmap_init(bus_dma_tag_t, struct vax_sgmap *, const char *,
68 1.4.108.1 mjf bus_addr_t, bus_size_t, struct pte *, bus_size_t);
69 1.1 ragge
70 1.4.108.1 mjf int vax_sgmap_alloc(bus_dmamap_t, bus_size_t, struct vax_sgmap *, int);
71 1.4.108.1 mjf void vax_sgmap_free(bus_dmamap_t, struct vax_sgmap *);
72 1.1 ragge
73 1.4.108.1 mjf int vax_sgmap_load(bus_dma_tag_t, bus_dmamap_t, void *, bus_size_t,
74 1.4.108.1 mjf struct proc *, int, struct vax_sgmap *);
75 1.4.108.1 mjf
76 1.4.108.1 mjf int vax_sgmap_load_mbuf(bus_dma_tag_t, bus_dmamap_t, struct mbuf *, int,
77 1.4.108.1 mjf struct vax_sgmap *);
78 1.1 ragge
79 1.4.108.1 mjf int vax_sgmap_load_uio(bus_dma_tag_t, bus_dmamap_t, struct uio *, int,
80 1.4.108.1 mjf struct vax_sgmap *);
81 1.1 ragge
82 1.4.108.1 mjf int vax_sgmap_load_raw(bus_dma_tag_t, bus_dmamap_t, bus_dma_segment_t *,
83 1.4.108.1 mjf int, bus_size_t, int, struct vax_sgmap *);
84 1.1 ragge
85 1.4.108.1 mjf void vax_sgmap_unload(bus_dma_tag_t, bus_dmamap_t, struct vax_sgmap *);
86 1.1 ragge
87 1.4.108.1 mjf #endif /* _VAX_SGMAP_H */
88