xref: /netbsd/sys/arch/mips/alchemy/au_wired_space.c (revision 712239e3)
1*712239e3Sthorpej /* $NetBSD: au_wired_space.c,v 1.4 2007/02/21 22:59:47 thorpej Exp $ */
2d8b2de51Sgdamore 
3d8b2de51Sgdamore /*-
4d8b2de51Sgdamore  * Copyright (c) 2006 Itronix Inc.
5d8b2de51Sgdamore  * All rights reserved.
6d8b2de51Sgdamore  *
7d8b2de51Sgdamore  * Written by Garrett D'Amore for Itronix Inc.
8d8b2de51Sgdamore  *
9d8b2de51Sgdamore  * Redistribution and use in source and binary forms, with or without
10d8b2de51Sgdamore  * modification, are permitted provided that the following conditions
11d8b2de51Sgdamore  * are met:
12d8b2de51Sgdamore  * 1. Redistributions of source code must retain the above copyright
13d8b2de51Sgdamore  *    notice, this list of conditions and the following disclaimer.
14d8b2de51Sgdamore  * 2. Redistributions in binary form must reproduce the above copyright
15d8b2de51Sgdamore  *    notice, this list of conditions and the following disclaimer in the
16d8b2de51Sgdamore  *    documentation and/or other materials provided with the distribution.
17d8b2de51Sgdamore  * 3. The name of Itronix Inc. may not be used to endorse
18d8b2de51Sgdamore  *    or promote products derived from this software without specific
19d8b2de51Sgdamore  *    prior written permission.
20d8b2de51Sgdamore  *
21d8b2de51Sgdamore  * THIS SOFTWARE IS PROVIDED BY ITRONIX INC. ``AS IS'' AND
22d8b2de51Sgdamore  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
23d8b2de51Sgdamore  * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
24d8b2de51Sgdamore  * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL ITRONIX INC. BE LIABLE FOR ANY
25d8b2de51Sgdamore  * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
26d8b2de51Sgdamore  * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
27d8b2de51Sgdamore  * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
28d8b2de51Sgdamore  * ON ANY THEORY OF LIABILITY, WHETHER IN
29d8b2de51Sgdamore  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
30d8b2de51Sgdamore  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
31d8b2de51Sgdamore  * POSSIBILITY OF SUCH DAMAGE.
32d8b2de51Sgdamore  */
33d8b2de51Sgdamore /*
34d8b2de51Sgdamore  * Copyright (c) 1996, 1997, 1998 The NetBSD Foundation, Inc.
35d8b2de51Sgdamore  * All rights reserved.
36d8b2de51Sgdamore  *
37d8b2de51Sgdamore  * This code is derived from software contributed to The NetBSD Foundation
38d8b2de51Sgdamore  * by Charles M. Hannum and by Jason R. Thorpe of the Numerical Aerospace
39d8b2de51Sgdamore  * Simulation Facility, NASA Ames Research Center.
40d8b2de51Sgdamore  *
41d8b2de51Sgdamore  * Redistribution and use in source and binary forms, with or without
42d8b2de51Sgdamore  * modification, are permitted provided that the following conditions
43d8b2de51Sgdamore  * are met:
44d8b2de51Sgdamore  * 1. Redistributions of source code must retain the above copyright
45d8b2de51Sgdamore  *    notice, this list of conditions and the following disclaimer.
46d8b2de51Sgdamore  * 2. Redistributions in binary form must reproduce the above copyright
47d8b2de51Sgdamore  *    notice, this list of conditions and the following disclaimer in the
48d8b2de51Sgdamore  *    documentation and/or other materials provided with the distribution.
49d8b2de51Sgdamore  * 3. All advertising materials mentioning features or use of this software
50d8b2de51Sgdamore  *    must display the following acknowledgement:
51d8b2de51Sgdamore  *	This product includes software developed by the NetBSD
52d8b2de51Sgdamore  *	Foundation, Inc. and its contributors.
53d8b2de51Sgdamore  * 4. Neither the name of The NetBSD Foundation nor the names of its
54d8b2de51Sgdamore  *    contributors may be used to endorse or promote products derived
55d8b2de51Sgdamore  *    from this software without specific prior written permission.
56d8b2de51Sgdamore  *
57d8b2de51Sgdamore  * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
58d8b2de51Sgdamore  * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
59d8b2de51Sgdamore  * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
60d8b2de51Sgdamore  * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
61d8b2de51Sgdamore  * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
62d8b2de51Sgdamore  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
63d8b2de51Sgdamore  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
64d8b2de51Sgdamore  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
65d8b2de51Sgdamore  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
66d8b2de51Sgdamore  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
67d8b2de51Sgdamore  * POSSIBILITY OF SUCH DAMAGE.
68d8b2de51Sgdamore  */
69d8b2de51Sgdamore 
70d8b2de51Sgdamore #include <sys/cdefs.h>
71*712239e3Sthorpej __KERNEL_RCSID(0, "$NetBSD: au_wired_space.c,v 1.4 2007/02/21 22:59:47 thorpej Exp $");
72d8b2de51Sgdamore 
73d8b2de51Sgdamore /*
74d8b2de51Sgdamore  * This provides mappings for the upper I/O regions used on some
75c050474dSsimonb  * Alchemy parts, e.g. PCI and PCMCIA spaces.  These spaces can be
76c050474dSsimonb  * accessed using wired TLB entries.
77d8b2de51Sgdamore  */
78d8b2de51Sgdamore 
79d8b2de51Sgdamore #include <sys/param.h>
80d8b2de51Sgdamore #include <sys/systm.h>
81d8b2de51Sgdamore #include <sys/extent.h>
82d8b2de51Sgdamore #include <sys/malloc.h>
83d8b2de51Sgdamore #include <sys/endian.h>
84d8b2de51Sgdamore 
85d8b2de51Sgdamore #include <machine/bus.h>
86d8b2de51Sgdamore #include <machine/locore.h>
87d8b2de51Sgdamore #include <machine/wired_map.h>
88d8b2de51Sgdamore #include <mips/alchemy/include/au_wired_space.h>
89d8b2de51Sgdamore 
90d8b2de51Sgdamore #ifndef	AU_WIRED_EXTENT_SZ
91d8b2de51Sgdamore #define	AU_WIRED_EXTENT_SZ	EXTENT_FIXED_STORAGE_SIZE(10)
92d8b2de51Sgdamore #endif
93d8b2de51Sgdamore 
94d8b2de51Sgdamore typedef struct au_wired_cookie {
95d8b2de51Sgdamore 	const char	*c_name;
96d8b2de51Sgdamore 	bus_addr_t	c_start;
97d8b2de51Sgdamore 	bus_size_t	c_size;
98d8b2de51Sgdamore 	paddr_t		c_pbase;
99d8b2de51Sgdamore 	int		c_flags;
100d8b2de51Sgdamore 	int		c_swswap;
101*712239e3Sthorpej 	bool		c_hwswap;
102d8b2de51Sgdamore 	struct extent	*c_extent;
103d8b2de51Sgdamore 	long		c_exstore[AU_WIRED_EXTENT_SZ/sizeof (long)];
104d8b2de51Sgdamore } au_wired_cookie_t;
105d8b2de51Sgdamore 
106d8b2de51Sgdamore int au_wired_map(void *, bus_addr_t, bus_size_t, int,
107d8b2de51Sgdamore     bus_space_handle_t *, int);
108d8b2de51Sgdamore void au_wired_unmap(void *, bus_space_handle_t, bus_size_t, int);
109d8b2de51Sgdamore void *au_wired_vaddr(void *, bus_space_handle_t);
110d8b2de51Sgdamore int au_wired_subregion(void *, bus_space_handle_t, bus_size_t, bus_size_t,
111d8b2de51Sgdamore     bus_space_handle_t *);
112d8b2de51Sgdamore paddr_t au_wired_mmap(void *, bus_addr_t, off_t, int, int);
113d8b2de51Sgdamore int au_wired_alloc(void *, bus_addr_t, bus_addr_t, bus_size_t, bus_size_t,
114d8b2de51Sgdamore     bus_size_t, int, bus_addr_t *, bus_space_handle_t *);
115d8b2de51Sgdamore void au_wired_free(void *, bus_space_handle_t, bus_size_t);
116d8b2de51Sgdamore void au_wired_barrier(void *, bus_space_handle_t, bus_size_t, bus_size_t, int);
117d8b2de51Sgdamore uint8_t au_wired_r_1(void *, bus_space_handle_t, bus_size_t);
118d8b2de51Sgdamore uint16_t au_wired_r_2(void *, bus_space_handle_t, bus_size_t);
119d8b2de51Sgdamore uint32_t au_wired_r_4(void *, bus_space_handle_t, bus_size_t);
120d8b2de51Sgdamore uint64_t au_wired_r_8(void *, bus_space_handle_t, bus_size_t);
121d8b2de51Sgdamore void au_wired_rm_1(void *, bus_space_handle_t, bus_size_t, uint8_t *,
122d8b2de51Sgdamore     bus_size_t);
123d8b2de51Sgdamore void au_wired_rm_2(void *, bus_space_handle_t, bus_size_t, uint16_t *,
124d8b2de51Sgdamore     bus_size_t);
125d8b2de51Sgdamore void au_wired_rm_4(void *, bus_space_handle_t, bus_size_t, uint32_t *,
126d8b2de51Sgdamore     bus_size_t);
127d8b2de51Sgdamore void au_wired_rm_8(void *, bus_space_handle_t, bus_size_t, uint64_t *,
128d8b2de51Sgdamore     bus_size_t);
129d8b2de51Sgdamore void au_wired_rr_1(void *, bus_space_handle_t, bus_size_t, uint8_t *,
130d8b2de51Sgdamore     bus_size_t);
131d8b2de51Sgdamore void au_wired_rr_2(void *, bus_space_handle_t, bus_size_t, uint16_t *,
132d8b2de51Sgdamore     bus_size_t);
133d8b2de51Sgdamore void au_wired_rr_4(void *, bus_space_handle_t, bus_size_t, uint32_t *,
134d8b2de51Sgdamore     bus_size_t);
135d8b2de51Sgdamore void au_wired_rr_8(void *, bus_space_handle_t, bus_size_t, uint64_t *,
136d8b2de51Sgdamore     bus_size_t);
137d8b2de51Sgdamore void au_wired_w_1(void *, bus_space_handle_t, bus_size_t, uint8_t);
138d8b2de51Sgdamore void au_wired_w_2(void *, bus_space_handle_t, bus_size_t, uint16_t);
139d8b2de51Sgdamore void au_wired_w_4(void *, bus_space_handle_t, bus_size_t, uint32_t);
140d8b2de51Sgdamore void au_wired_w_8(void *, bus_space_handle_t, bus_size_t, uint64_t);
141d8b2de51Sgdamore void au_wired_wm_1(void *, bus_space_handle_t, bus_size_t, const uint8_t *,
142d8b2de51Sgdamore     bus_size_t);
143d8b2de51Sgdamore void au_wired_wm_2(void *, bus_space_handle_t, bus_size_t, const uint16_t *,
144d8b2de51Sgdamore     bus_size_t);
145d8b2de51Sgdamore void au_wired_wm_4(void *, bus_space_handle_t, bus_size_t, const uint32_t *,
146d8b2de51Sgdamore     bus_size_t);
147d8b2de51Sgdamore void au_wired_wm_8(void *, bus_space_handle_t, bus_size_t, const uint64_t *,
148d8b2de51Sgdamore     bus_size_t);
149d8b2de51Sgdamore void au_wired_wr_1(void *, bus_space_handle_t, bus_size_t, const uint8_t *,
150d8b2de51Sgdamore     bus_size_t);
151d8b2de51Sgdamore void au_wired_wr_2(void *, bus_space_handle_t, bus_size_t, const uint16_t *,
152d8b2de51Sgdamore     bus_size_t);
153d8b2de51Sgdamore void au_wired_wr_4(void *, bus_space_handle_t, bus_size_t, const uint32_t *,
154d8b2de51Sgdamore     bus_size_t);
155d8b2de51Sgdamore void au_wired_wr_8(void *, bus_space_handle_t, bus_size_t, const uint64_t *,
156d8b2de51Sgdamore     bus_size_t);
157d8b2de51Sgdamore void au_wired_sm_1(void *, bus_space_handle_t, bus_size_t, uint8_t,
158d8b2de51Sgdamore     bus_size_t);
159d8b2de51Sgdamore void au_wired_sm_2(void *, bus_space_handle_t, bus_size_t, uint16_t,
160d8b2de51Sgdamore     bus_size_t);
161d8b2de51Sgdamore void au_wired_sm_4(void *, bus_space_handle_t, bus_size_t, uint32_t,
162d8b2de51Sgdamore     bus_size_t);
163d8b2de51Sgdamore void au_wired_sm_8(void *, bus_space_handle_t, bus_size_t, uint64_t,
164d8b2de51Sgdamore     bus_size_t);
165d8b2de51Sgdamore void au_wired_sr_1(void *, bus_space_handle_t, bus_size_t, uint8_t,
166d8b2de51Sgdamore     bus_size_t);
167d8b2de51Sgdamore void au_wired_sr_2(void *, bus_space_handle_t, bus_size_t, uint16_t,
168d8b2de51Sgdamore     bus_size_t);
169d8b2de51Sgdamore void au_wired_sr_4(void *, bus_space_handle_t, bus_size_t, uint32_t,
170d8b2de51Sgdamore     bus_size_t);
171d8b2de51Sgdamore void au_wired_sr_8(void *, bus_space_handle_t, bus_size_t, uint64_t,
172d8b2de51Sgdamore     bus_size_t);
173d8b2de51Sgdamore void au_wired_c_1(void *, bus_space_handle_t, bus_size_t,
174d8b2de51Sgdamore     bus_space_handle_t, bus_size_t, bus_size_t);
175d8b2de51Sgdamore void au_wired_c_2(void *, bus_space_handle_t, bus_size_t,
176d8b2de51Sgdamore     bus_space_handle_t, bus_size_t, bus_size_t);
177d8b2de51Sgdamore void au_wired_c_4(void *, bus_space_handle_t, bus_size_t,
178d8b2de51Sgdamore     bus_space_handle_t, bus_size_t, bus_size_t);
179d8b2de51Sgdamore void au_wired_c_8(void *, bus_space_handle_t, bus_size_t,
180d8b2de51Sgdamore     bus_space_handle_t, bus_size_t, bus_size_t);
181d8b2de51Sgdamore uint16_t au_wired_rs_2(void *, bus_space_handle_t, bus_size_t);
182d8b2de51Sgdamore uint32_t au_wired_rs_4(void *, bus_space_handle_t, bus_size_t);
183d8b2de51Sgdamore uint64_t au_wired_rs_8(void *, bus_space_handle_t, bus_size_t);
184d8b2de51Sgdamore void au_wired_ws_2(void *, bus_space_handle_t, bus_size_t, uint16_t);
185d8b2de51Sgdamore void au_wired_ws_4(void *, bus_space_handle_t, bus_size_t, uint32_t);
186d8b2de51Sgdamore void au_wired_ws_8(void *, bus_space_handle_t, bus_size_t, uint64_t);
187d8b2de51Sgdamore void au_wired_rms_2(void *, bus_space_handle_t, bus_size_t, uint16_t *,
188d8b2de51Sgdamore     bus_size_t);
189d8b2de51Sgdamore void au_wired_rms_4(void *, bus_space_handle_t, bus_size_t, uint32_t *,
190d8b2de51Sgdamore     bus_size_t);
191d8b2de51Sgdamore void au_wired_rms_8(void *, bus_space_handle_t, bus_size_t, uint64_t *,
192d8b2de51Sgdamore     bus_size_t);
193d8b2de51Sgdamore void au_wired_rrs_2(void *, bus_space_handle_t, bus_size_t, uint16_t *,
194d8b2de51Sgdamore     bus_size_t);
195d8b2de51Sgdamore void au_wired_rrs_4(void *, bus_space_handle_t, bus_size_t, uint32_t *,
196d8b2de51Sgdamore     bus_size_t);
197d8b2de51Sgdamore void au_wired_rrs_8(void *, bus_space_handle_t, bus_size_t, uint64_t *,
198d8b2de51Sgdamore     bus_size_t);
199d8b2de51Sgdamore void au_wired_wms_2(void *, bus_space_handle_t, bus_size_t, const uint16_t *,
200d8b2de51Sgdamore     bus_size_t);
201d8b2de51Sgdamore void au_wired_wms_4(void *, bus_space_handle_t, bus_size_t, const uint32_t *,
202d8b2de51Sgdamore     bus_size_t);
203d8b2de51Sgdamore void au_wired_wms_8(void *, bus_space_handle_t, bus_size_t, const uint64_t *,
204d8b2de51Sgdamore     bus_size_t);
205d8b2de51Sgdamore void au_wired_wrs_2(void *, bus_space_handle_t, bus_size_t, const uint16_t *,
206d8b2de51Sgdamore     bus_size_t);
207d8b2de51Sgdamore void au_wired_wrs_4(void *, bus_space_handle_t, bus_size_t, const uint32_t *,
208d8b2de51Sgdamore     bus_size_t);
209d8b2de51Sgdamore void au_wired_wrs_8(void *, bus_space_handle_t, bus_size_t, const uint64_t *,
210d8b2de51Sgdamore     bus_size_t);
211d8b2de51Sgdamore 
212d8b2de51Sgdamore int
213d8b2de51Sgdamore au_wired_map(void *cookie, bus_addr_t addr, bus_size_t size,
214d8b2de51Sgdamore     int flags, bus_space_handle_t *bshp, int acct)
215d8b2de51Sgdamore {
216d8b2de51Sgdamore 	int			err;
217d8b2de51Sgdamore 	au_wired_cookie_t	*c = (au_wired_cookie_t *)cookie;
218d8b2de51Sgdamore 	paddr_t			pa;
219d8b2de51Sgdamore 
220d8b2de51Sgdamore 	/* make sure we can map this bus address */
221d8b2de51Sgdamore 	if (addr < c->c_start ||
222d8b2de51Sgdamore 	    addr + size > c->c_start + c->c_size)
223d8b2de51Sgdamore 		return EINVAL;
224d8b2de51Sgdamore 
225d8b2de51Sgdamore 	pa = c->c_pbase + (addr - c->c_start);
226d8b2de51Sgdamore 
227d8b2de51Sgdamore 	if (!mips3_wired_enter_region(addr, pa, size))
228d8b2de51Sgdamore 		return ENOMEM;
229d8b2de51Sgdamore 
230d8b2de51Sgdamore 	/*
231d8b2de51Sgdamore 	 * bus addresses are taken from virtual address space.
232d8b2de51Sgdamore 	 */
233d8b2de51Sgdamore 	if (acct && c->c_extent != NULL) {
234d8b2de51Sgdamore 		err = extent_alloc_region(c->c_extent, addr, size, EX_NOWAIT);
235d8b2de51Sgdamore 		if (err)
236d8b2de51Sgdamore 			return err;
237d8b2de51Sgdamore 	}
238d8b2de51Sgdamore 
239d8b2de51Sgdamore 	*bshp = addr;
240d8b2de51Sgdamore 
241d8b2de51Sgdamore 	return 0;
242d8b2de51Sgdamore }
243d8b2de51Sgdamore 
244d8b2de51Sgdamore void
245d8b2de51Sgdamore au_wired_unmap(void *cookie, bus_space_handle_t bsh, bus_size_t size, int acct)
246d8b2de51Sgdamore {
247d8b2de51Sgdamore 	au_wired_cookie_t	*c = (au_wired_cookie_t *)cookie;
248d8b2de51Sgdamore 
249d8b2de51Sgdamore 	if (acct != 0 && c->c_extent != NULL) {
250d8b2de51Sgdamore 		extent_free(c->c_extent, (vaddr_t)bsh, size, EX_NOWAIT);
251d8b2de51Sgdamore 	}
252d8b2de51Sgdamore }
253d8b2de51Sgdamore 
254d8b2de51Sgdamore int
255d8b2de51Sgdamore au_wired_subregion(void *cookie, bus_space_handle_t bsh,
256d8b2de51Sgdamore     bus_size_t offset, bus_size_t size, bus_space_handle_t *nbshp)
257d8b2de51Sgdamore {
258d8b2de51Sgdamore 
259d8b2de51Sgdamore 	*nbshp = bsh + offset;
260d8b2de51Sgdamore 	return 0;
261d8b2de51Sgdamore }
262d8b2de51Sgdamore 
263d8b2de51Sgdamore void *
264d8b2de51Sgdamore au_wired_vaddr(void *cookie, bus_space_handle_t bsh)
265d8b2de51Sgdamore {
266d8b2de51Sgdamore 
267d8b2de51Sgdamore 	return ((void *)bsh);
268d8b2de51Sgdamore }
269d8b2de51Sgdamore 
270d8b2de51Sgdamore paddr_t
271d8b2de51Sgdamore au_wired_mmap(void *cookie, bus_addr_t addr, off_t off, int prot, int flags)
272d8b2de51Sgdamore {
273d8b2de51Sgdamore 	au_wired_cookie_t	*c = (au_wired_cookie_t *)cookie;
274d8b2de51Sgdamore 
275d8b2de51Sgdamore 	/* I/O spaces should not be directly mmap'ed */
276d8b2de51Sgdamore 	if (c->c_flags & AU_WIRED_SPACE_IO)
277d8b2de51Sgdamore 		return -1;
278d8b2de51Sgdamore 
279d8b2de51Sgdamore 	if (addr < c->c_start || (addr + off) >= (c->c_start + c->c_size))
280d8b2de51Sgdamore 		return -1;
281d8b2de51Sgdamore 
282d8b2de51Sgdamore 	return mips_btop(c->c_pbase + (addr - c->c_start) + off);
283d8b2de51Sgdamore }
284d8b2de51Sgdamore 
285d8b2de51Sgdamore int
286d8b2de51Sgdamore au_wired_alloc(void *cookie, bus_addr_t start, bus_addr_t end,
287d8b2de51Sgdamore     bus_size_t size, bus_size_t align, bus_size_t boundary, int flags,
288d8b2de51Sgdamore     bus_addr_t *addrp, bus_space_handle_t *bshp)
289d8b2de51Sgdamore {
290d8b2de51Sgdamore 	au_wired_cookie_t	*c = (au_wired_cookie_t *)cookie;
291d8b2de51Sgdamore 	vaddr_t addr;
292d8b2de51Sgdamore 	int err;
293d8b2de51Sgdamore 	paddr_t pa;
294d8b2de51Sgdamore 
295d8b2de51Sgdamore 	if (c->c_extent == NULL)
296d8b2de51Sgdamore 		panic("au_wired_alloc: extent map %s not avail", c->c_name);
297d8b2de51Sgdamore 
298d8b2de51Sgdamore 	if (start < c->c_start || ((start + size) > (c->c_start + c->c_size)))
299d8b2de51Sgdamore 		return EINVAL;
300d8b2de51Sgdamore 
301d8b2de51Sgdamore 	err = extent_alloc_subregion(c->c_extent, start, end, size,
302d8b2de51Sgdamore 	    align, boundary, EX_FAST | EX_NOWAIT, &addr);
303d8b2de51Sgdamore 	if (err)
304d8b2de51Sgdamore 		return err;
305d8b2de51Sgdamore 
306d8b2de51Sgdamore 	pa = c->c_pbase + (addr - c->c_start);
307d8b2de51Sgdamore 
308d8b2de51Sgdamore 	if (!mips3_wired_enter_region(addr, pa, size))
309d8b2de51Sgdamore 		return ENOMEM;
310d8b2de51Sgdamore 
311d8b2de51Sgdamore 	*bshp = addr;
312d8b2de51Sgdamore 	*addrp = addr;
313d8b2de51Sgdamore 	return 0;
314d8b2de51Sgdamore }
315d8b2de51Sgdamore 
316d8b2de51Sgdamore void
317d8b2de51Sgdamore au_wired_free(void *cookie, bus_space_handle_t bsh, bus_size_t size)
318d8b2de51Sgdamore {
319d8b2de51Sgdamore 
320d8b2de51Sgdamore 	/* unmap takes care of it all */
321d8b2de51Sgdamore 	au_wired_unmap(cookie, bsh, size, 1);
322d8b2de51Sgdamore }
323d8b2de51Sgdamore 
324d8b2de51Sgdamore inline void
325d8b2de51Sgdamore au_wired_barrier(void *cookie, bus_space_handle_t bsh, bus_size_t o,
326d8b2de51Sgdamore     bus_size_t l, int f)
327d8b2de51Sgdamore {
328d8b2de51Sgdamore 
329d8b2de51Sgdamore 	if (f & BUS_SPACE_BARRIER_WRITE)
330d8b2de51Sgdamore 		wbflush();
331d8b2de51Sgdamore }
332d8b2de51Sgdamore 
333d8b2de51Sgdamore inline uint8_t
334d8b2de51Sgdamore au_wired_r_1(void *v, bus_space_handle_t h, bus_size_t o)
335d8b2de51Sgdamore {
336d8b2de51Sgdamore 
337d8b2de51Sgdamore 	return (*(volatile uint8_t *)(h + o));
338d8b2de51Sgdamore }
339d8b2de51Sgdamore 
340d8b2de51Sgdamore inline uint16_t
341d8b2de51Sgdamore au_wired_r_2(void *v, bus_space_handle_t h, bus_size_t o)
342d8b2de51Sgdamore {
343d8b2de51Sgdamore 	uint16_t		val = (*(volatile uint16_t *)(h + o));
344d8b2de51Sgdamore 	au_wired_cookie_t	*c = (au_wired_cookie_t *)v;
345d8b2de51Sgdamore 
346d8b2de51Sgdamore 	return (c->c_swswap ? bswap16(val) : val);
347d8b2de51Sgdamore }
348d8b2de51Sgdamore 
349d8b2de51Sgdamore inline uint32_t
350d8b2de51Sgdamore au_wired_r_4(void *v, bus_space_handle_t h, bus_size_t o)
351d8b2de51Sgdamore {
352d8b2de51Sgdamore 	uint32_t		val = (*(volatile uint32_t *)(h + o));
353d8b2de51Sgdamore 	au_wired_cookie_t	*c = (au_wired_cookie_t *)v;
354d8b2de51Sgdamore 
355d8b2de51Sgdamore 	return (c->c_swswap ? bswap32(val) : val);
356d8b2de51Sgdamore }
357d8b2de51Sgdamore 
358d8b2de51Sgdamore inline uint64_t
359d8b2de51Sgdamore au_wired_r_8(void *v, bus_space_handle_t h, bus_size_t o)
360d8b2de51Sgdamore {
361d8b2de51Sgdamore 	uint64_t		val = (*(volatile uint64_t *)(h + o));
362d8b2de51Sgdamore 	au_wired_cookie_t	*c = (au_wired_cookie_t *)v;
363d8b2de51Sgdamore 
364d8b2de51Sgdamore 	return (c->c_swswap ? bswap64(val) : val);
365d8b2de51Sgdamore }
366d8b2de51Sgdamore 
367d8b2de51Sgdamore inline void
368d8b2de51Sgdamore au_wired_w_1(void *v, bus_space_handle_t h, bus_size_t o, uint8_t val)
369d8b2de51Sgdamore {
370d8b2de51Sgdamore 
371d8b2de51Sgdamore 	*(volatile uint8_t *)(h + o) = val;
372d8b2de51Sgdamore }
373d8b2de51Sgdamore 
374d8b2de51Sgdamore inline void
375d8b2de51Sgdamore au_wired_w_2(void *v, bus_space_handle_t h, bus_size_t o, uint16_t val)
376d8b2de51Sgdamore {
377d8b2de51Sgdamore 	au_wired_cookie_t	*c = (au_wired_cookie_t *)v;
378d8b2de51Sgdamore 
379d8b2de51Sgdamore 	*(volatile uint16_t *)(h + o) = c->c_swswap ? bswap16(val) : val;
380d8b2de51Sgdamore }
381d8b2de51Sgdamore 
382d8b2de51Sgdamore inline void
383d8b2de51Sgdamore au_wired_w_4(void *v, bus_space_handle_t h, bus_size_t o, uint32_t val)
384d8b2de51Sgdamore {
385d8b2de51Sgdamore 	au_wired_cookie_t	*c = (au_wired_cookie_t *)v;
386d8b2de51Sgdamore 
387d8b2de51Sgdamore 	*(volatile uint32_t *)(h + o) = c->c_swswap ? bswap32(val) : val;
388d8b2de51Sgdamore }
389d8b2de51Sgdamore 
390d8b2de51Sgdamore inline void
391d8b2de51Sgdamore au_wired_w_8(void *v, bus_space_handle_t h, bus_size_t o, uint64_t val)
392d8b2de51Sgdamore {
393d8b2de51Sgdamore 	au_wired_cookie_t	*c = (au_wired_cookie_t *)v;
394d8b2de51Sgdamore 
395d8b2de51Sgdamore 	*(volatile uint64_t *)(h + o) = c->c_swswap ? bswap64(val) : val;
396d8b2de51Sgdamore }
397d8b2de51Sgdamore 
398d8b2de51Sgdamore inline uint16_t
399d8b2de51Sgdamore au_wired_rs_2(void *v, bus_space_handle_t h, bus_size_t o)
400d8b2de51Sgdamore {
401d8b2de51Sgdamore 	uint16_t		val = (*(volatile uint16_t *)(h + o));
402d8b2de51Sgdamore 	au_wired_cookie_t	*c = (au_wired_cookie_t *)v;
403d8b2de51Sgdamore 
404d8b2de51Sgdamore 	return (c->c_hwswap ? bswap16(val) : val);
405d8b2de51Sgdamore }
406d8b2de51Sgdamore 
407d8b2de51Sgdamore inline uint32_t
408d8b2de51Sgdamore au_wired_rs_4(void *v, bus_space_handle_t h, bus_size_t o)
409d8b2de51Sgdamore {
410d8b2de51Sgdamore 	uint32_t		val = (*(volatile uint32_t *)(h + o));
411d8b2de51Sgdamore 	au_wired_cookie_t	*c = (au_wired_cookie_t *)v;
412d8b2de51Sgdamore 
413d8b2de51Sgdamore 	return (c->c_hwswap ? bswap32(val) : val);
414d8b2de51Sgdamore }
415d8b2de51Sgdamore 
416d8b2de51Sgdamore inline uint64_t
417d8b2de51Sgdamore au_wired_rs_8(void *v, bus_space_handle_t h, bus_size_t o)
418d8b2de51Sgdamore {
419d8b2de51Sgdamore 	uint64_t		val = (*(volatile uint64_t *)(h + o));
420d8b2de51Sgdamore 	au_wired_cookie_t	*c = (au_wired_cookie_t *)v;
421d8b2de51Sgdamore 
422d8b2de51Sgdamore 	return (c->c_hwswap ? bswap64(val) : val);
423d8b2de51Sgdamore }
424d8b2de51Sgdamore 
425d8b2de51Sgdamore inline void
426d8b2de51Sgdamore au_wired_ws_2(void *v, bus_space_handle_t h, bus_size_t o, uint16_t val)
427d8b2de51Sgdamore {
428d8b2de51Sgdamore 	au_wired_cookie_t	*c = (au_wired_cookie_t *)v;
429d8b2de51Sgdamore 
430d8b2de51Sgdamore 	*(volatile uint16_t *)(h + o) = c->c_hwswap ? bswap16(val) : val;
431d8b2de51Sgdamore }
432d8b2de51Sgdamore 
433d8b2de51Sgdamore inline void
434d8b2de51Sgdamore au_wired_ws_4(void *v, bus_space_handle_t h, bus_size_t o, uint32_t val)
435d8b2de51Sgdamore {
436d8b2de51Sgdamore 	au_wired_cookie_t	*c = (au_wired_cookie_t *)v;
437d8b2de51Sgdamore 
438d8b2de51Sgdamore 	*(volatile uint32_t *)(h + o) = c->c_hwswap ? bswap32(val) : val;
439d8b2de51Sgdamore }
440d8b2de51Sgdamore 
441d8b2de51Sgdamore inline void
442d8b2de51Sgdamore au_wired_ws_8(void *v, bus_space_handle_t h, bus_size_t o, uint64_t val)
443d8b2de51Sgdamore {
444d8b2de51Sgdamore 	au_wired_cookie_t	*c = (au_wired_cookie_t *)v;
445d8b2de51Sgdamore 
446d8b2de51Sgdamore 	*(volatile uint64_t *)(h + o) = c->c_hwswap ? bswap64(val) : val;
447d8b2de51Sgdamore }
448d8b2de51Sgdamore 
449d8b2de51Sgdamore #define	AU_WIRED_RM(TYPE,BYTES)						\
450d8b2de51Sgdamore void									\
451d8b2de51Sgdamore __CONCAT(au_wired_rm_,BYTES)(void *v,					\
452d8b2de51Sgdamore     bus_space_handle_t h, bus_size_t o, TYPE *dst, bus_size_t cnt)	\
453d8b2de51Sgdamore {									\
454d8b2de51Sgdamore 									\
455d8b2de51Sgdamore 	while (cnt-- > 0)						\
456d8b2de51Sgdamore 		*dst ++ = __CONCAT(au_wired_r_,BYTES)(v, h, o);		\
457d8b2de51Sgdamore }
458d8b2de51Sgdamore AU_WIRED_RM(uint8_t,1)
459d8b2de51Sgdamore AU_WIRED_RM(uint16_t,2)
460d8b2de51Sgdamore AU_WIRED_RM(uint32_t,4)
461d8b2de51Sgdamore AU_WIRED_RM(uint64_t,8)
462d8b2de51Sgdamore 
463d8b2de51Sgdamore #define	AU_WIRED_RMS(TYPE,BYTES)					\
464d8b2de51Sgdamore void									\
465d8b2de51Sgdamore __CONCAT(au_wired_rms_,BYTES)(void *v,					\
466d8b2de51Sgdamore     bus_space_handle_t h, bus_size_t o, TYPE *dst, bus_size_t cnt)	\
467d8b2de51Sgdamore {									\
468d8b2de51Sgdamore 									\
469d8b2de51Sgdamore 	while (cnt-- > 0) {						\
470d8b2de51Sgdamore 		wbflush();						\
471d8b2de51Sgdamore 		*dst++ = __CONCAT(au_wired_rs_,BYTES)(v, h, o);		\
472d8b2de51Sgdamore 	}								\
473d8b2de51Sgdamore }
474d8b2de51Sgdamore AU_WIRED_RMS(uint16_t,2)
475d8b2de51Sgdamore AU_WIRED_RMS(uint32_t,4)
476d8b2de51Sgdamore AU_WIRED_RMS(uint64_t,8)
477d8b2de51Sgdamore 
478d8b2de51Sgdamore #define AU_WIRED_RR(TYPE,BYTES)						\
479d8b2de51Sgdamore void									\
480d8b2de51Sgdamore __CONCAT(au_wired_rr_,BYTES)(void *v,					\
481d8b2de51Sgdamore     bus_space_handle_t h, bus_size_t o, TYPE *dst, bus_size_t cnt)	\
482d8b2de51Sgdamore {									\
483d8b2de51Sgdamore 									\
484d8b2de51Sgdamore 	while (cnt-- > 0) {						\
485d8b2de51Sgdamore 		*dst++ = __CONCAT(au_wired_r_,BYTES)(v, h, o);		\
486d8b2de51Sgdamore 		o += BYTES;						\
487d8b2de51Sgdamore 	}								\
488d8b2de51Sgdamore }
489d8b2de51Sgdamore AU_WIRED_RR(uint8_t,1)
490d8b2de51Sgdamore AU_WIRED_RR(uint16_t,2)
491d8b2de51Sgdamore AU_WIRED_RR(uint32_t,4)
492d8b2de51Sgdamore AU_WIRED_RR(uint64_t,8)
493d8b2de51Sgdamore 
494d8b2de51Sgdamore #define AU_WIRED_RRS(TYPE,BYTES)					\
495d8b2de51Sgdamore void									\
496d8b2de51Sgdamore __CONCAT(au_wired_rrs_,BYTES)(void *v,					\
497d8b2de51Sgdamore     bus_space_handle_t h, bus_size_t o, TYPE *dst, bus_size_t cnt)	\
498d8b2de51Sgdamore {									\
499d8b2de51Sgdamore 									\
500d8b2de51Sgdamore 	while (cnt-- > 0) {						\
501d8b2de51Sgdamore 		*dst++ = __CONCAT(au_wired_rs_,BYTES)(v, h, o);		\
502d8b2de51Sgdamore 		o += BYTES;						\
503d8b2de51Sgdamore 	}								\
504d8b2de51Sgdamore }
505d8b2de51Sgdamore AU_WIRED_RRS(uint16_t,2)
506d8b2de51Sgdamore AU_WIRED_RRS(uint32_t,4)
507d8b2de51Sgdamore AU_WIRED_RRS(uint64_t,8)
508d8b2de51Sgdamore 
509d8b2de51Sgdamore #define	AU_WIRED_WM(TYPE,BYTES)						\
510d8b2de51Sgdamore void									\
511d8b2de51Sgdamore __CONCAT(au_wired_wm_,BYTES)(void *v,					\
512d8b2de51Sgdamore     bus_space_handle_t h, bus_size_t o, const TYPE *src,		\
513d8b2de51Sgdamore     bus_size_t cnt)							\
514d8b2de51Sgdamore {									\
515d8b2de51Sgdamore 									\
516d8b2de51Sgdamore 	while (cnt-- > 0) {						\
517d8b2de51Sgdamore 		__CONCAT(au_wired_w_,BYTES)(v, h, o, *src++);		\
518d8b2de51Sgdamore 		wbflush();						\
519d8b2de51Sgdamore 	}								\
520d8b2de51Sgdamore }
521d8b2de51Sgdamore AU_WIRED_WM(uint8_t,1)
522d8b2de51Sgdamore AU_WIRED_WM(uint16_t,2)
523d8b2de51Sgdamore AU_WIRED_WM(uint32_t,4)
524d8b2de51Sgdamore AU_WIRED_WM(uint64_t,8)
525d8b2de51Sgdamore 
526d8b2de51Sgdamore #define	AU_WIRED_WMS(TYPE,BYTES)					\
527d8b2de51Sgdamore void									\
528d8b2de51Sgdamore __CONCAT(au_wired_wms_,BYTES)(void *v,					\
529d8b2de51Sgdamore     bus_space_handle_t h, bus_size_t o, const TYPE *src,		\
530d8b2de51Sgdamore     bus_size_t cnt)							\
531d8b2de51Sgdamore {									\
532d8b2de51Sgdamore 									\
533d8b2de51Sgdamore 	while (cnt-- > 0) {						\
534d8b2de51Sgdamore 		__CONCAT(au_wired_ws_,BYTES)(v, h, o, *src++);		\
535d8b2de51Sgdamore 		wbflush();						\
536d8b2de51Sgdamore 	}								\
537d8b2de51Sgdamore }
538d8b2de51Sgdamore AU_WIRED_WMS(uint16_t,2)
539d8b2de51Sgdamore AU_WIRED_WMS(uint32_t,4)
540d8b2de51Sgdamore AU_WIRED_WMS(uint64_t,8)
541d8b2de51Sgdamore 
542d8b2de51Sgdamore #define	AU_WIRED_WR(TYPE,BYTES)						\
543d8b2de51Sgdamore void									\
544d8b2de51Sgdamore __CONCAT(au_wired_wr_,BYTES)(void *v,					\
545d8b2de51Sgdamore     bus_space_handle_t h, bus_size_t o, const TYPE *src,		\
546d8b2de51Sgdamore     bus_size_t cnt)							\
547d8b2de51Sgdamore {									\
548d8b2de51Sgdamore 									\
549d8b2de51Sgdamore 	while (cnt-- > 0) {						\
550d8b2de51Sgdamore 		__CONCAT(au_wired_w_,BYTES)(v, h, o, *src++);		\
551d8b2de51Sgdamore 		o += BYTES;						\
552d8b2de51Sgdamore 	}								\
553d8b2de51Sgdamore }
554d8b2de51Sgdamore AU_WIRED_WR(uint8_t,1)
555d8b2de51Sgdamore AU_WIRED_WR(uint16_t,2)
556d8b2de51Sgdamore AU_WIRED_WR(uint32_t,4)
557d8b2de51Sgdamore AU_WIRED_WR(uint64_t,8)
558d8b2de51Sgdamore 
559d8b2de51Sgdamore #define	AU_WIRED_WRS(TYPE,BYTES)					\
560d8b2de51Sgdamore void									\
561d8b2de51Sgdamore __CONCAT(au_wired_wrs_,BYTES)(void *v,					\
562d8b2de51Sgdamore     bus_space_handle_t h, bus_size_t o, const TYPE *src,		\
563d8b2de51Sgdamore     bus_size_t cnt)							\
564d8b2de51Sgdamore {									\
565d8b2de51Sgdamore 									\
566d8b2de51Sgdamore 	while (cnt-- > 0) {						\
567d8b2de51Sgdamore 		__CONCAT(au_wired_ws_,BYTES)(v, h, o, *src++);		\
568d8b2de51Sgdamore 		o += BYTES;						\
569d8b2de51Sgdamore 	}								\
570d8b2de51Sgdamore }
571d8b2de51Sgdamore AU_WIRED_WRS(uint16_t,2)
572d8b2de51Sgdamore AU_WIRED_WRS(uint32_t,4)
573d8b2de51Sgdamore AU_WIRED_WRS(uint64_t,8)
574d8b2de51Sgdamore 
575d8b2de51Sgdamore #define	AU_WIRED_SM(TYPE,BYTES)						\
576d8b2de51Sgdamore void									\
577d8b2de51Sgdamore __CONCAT(au_wired_sm_,BYTES)(void *v,					\
578d8b2de51Sgdamore     bus_space_handle_t h, bus_size_t o, TYPE val,			\
579d8b2de51Sgdamore     bus_size_t cnt)							\
580d8b2de51Sgdamore {									\
581d8b2de51Sgdamore 									\
582d8b2de51Sgdamore 	while (cnt-- > 0) {						\
583d8b2de51Sgdamore 		__CONCAT(au_wired_w_,BYTES)(v, h, o, val);		\
584d8b2de51Sgdamore 		wbflush();						\
585d8b2de51Sgdamore 	}								\
586d8b2de51Sgdamore }
587d8b2de51Sgdamore AU_WIRED_SM(uint8_t,1)
588d8b2de51Sgdamore AU_WIRED_SM(uint16_t,2)
589d8b2de51Sgdamore AU_WIRED_SM(uint32_t,4)
590d8b2de51Sgdamore AU_WIRED_SM(uint64_t,8)
591d8b2de51Sgdamore 
592d8b2de51Sgdamore #define	AU_WIRED_SR(TYPE,BYTES)						\
593d8b2de51Sgdamore void									\
594d8b2de51Sgdamore __CONCAT(au_wired_sr_,BYTES)(void *v,					\
595d8b2de51Sgdamore     bus_space_handle_t h, bus_size_t o, TYPE val,			\
596d8b2de51Sgdamore     bus_size_t cnt)							\
597d8b2de51Sgdamore {									\
598d8b2de51Sgdamore 									\
599d8b2de51Sgdamore 	while (cnt-- > 0) {						\
600d8b2de51Sgdamore 		__CONCAT(au_wired_w_,BYTES)(v, h, o, val);		\
601d8b2de51Sgdamore 		o += BYTES;						\
602d8b2de51Sgdamore 	}								\
603d8b2de51Sgdamore }
604d8b2de51Sgdamore AU_WIRED_SR(uint8_t,1)
605d8b2de51Sgdamore AU_WIRED_SR(uint16_t,2)
606d8b2de51Sgdamore AU_WIRED_SR(uint32_t,4)
607d8b2de51Sgdamore AU_WIRED_SR(uint64_t,8)
608d8b2de51Sgdamore 
609d8b2de51Sgdamore 
610d8b2de51Sgdamore #define	AU_WIRED_C(TYPE,BYTES)						\
611d8b2de51Sgdamore void									\
612d8b2de51Sgdamore __CONCAT(au_wired_c_,BYTES)(void *v,					\
613d8b2de51Sgdamore     bus_space_handle_t h1, bus_size_t o1, bus_space_handle_t h2,	\
614d8b2de51Sgdamore     bus_space_handle_t o2, bus_size_t cnt)				\
615d8b2de51Sgdamore {									\
616d8b2de51Sgdamore 	volatile TYPE *src, *dst;					\
617d8b2de51Sgdamore 	src = (volatile TYPE *)(h1 + o1);				\
618d8b2de51Sgdamore 	dst = (volatile TYPE *)(h2 + o2);				\
619d8b2de51Sgdamore 									\
620d8b2de51Sgdamore 	if (src >= dst) {						\
621d8b2de51Sgdamore 		while (cnt-- > 0)					\
622d8b2de51Sgdamore 			*dst++ = *src++;				\
623d8b2de51Sgdamore 	} else {							\
624d8b2de51Sgdamore 		src += cnt - 1;						\
625d8b2de51Sgdamore 		dst += cnt - 1;						\
626d8b2de51Sgdamore 		while (cnt-- > 0)					\
627d8b2de51Sgdamore 			*dst-- = *src--;				\
628d8b2de51Sgdamore 	}								\
629d8b2de51Sgdamore }
630d8b2de51Sgdamore AU_WIRED_C(uint8_t,1)
631d8b2de51Sgdamore AU_WIRED_C(uint16_t,2)
632d8b2de51Sgdamore AU_WIRED_C(uint32_t,4)
633d8b2de51Sgdamore AU_WIRED_C(uint64_t,8)
634d8b2de51Sgdamore 
635d8b2de51Sgdamore 
636d8b2de51Sgdamore void
637d8b2de51Sgdamore au_wired_space_init(bus_space_tag_t bst, const char *name,
638d8b2de51Sgdamore     paddr_t paddr, bus_addr_t start, bus_size_t size, int flags)
639d8b2de51Sgdamore {
640d8b2de51Sgdamore 	au_wired_cookie_t	*c;
641d8b2de51Sgdamore 
642d8b2de51Sgdamore 	c = malloc(sizeof (struct au_wired_cookie), M_DEVBUF,
643d8b2de51Sgdamore 	    M_NOWAIT | M_ZERO);
644d8b2de51Sgdamore 
645d8b2de51Sgdamore 	c->c_pbase = paddr;
646d8b2de51Sgdamore 	c->c_name = name;
647d8b2de51Sgdamore 	c->c_start = start;
648d8b2de51Sgdamore 	c->c_size = size;
649d8b2de51Sgdamore 
650d8b2de51Sgdamore 	/* allocate extent manager */
651d8b2de51Sgdamore 	c->c_extent = extent_create(name, start, start + size, M_DEVBUF,
652d8b2de51Sgdamore 	    (caddr_t)c->c_exstore, sizeof (c->c_exstore), EX_NOWAIT);
653d8b2de51Sgdamore 	if (c->c_extent == NULL)
654d8b2de51Sgdamore 		panic("au_wired_space_init: %s: cannot create extent", name);
655d8b2de51Sgdamore 
656d8b2de51Sgdamore #if	_BYTE_ORDER == _BIG_ENDIAN
657d8b2de51Sgdamore 	if (flags & AU_WIRED_SPACE_LITTLE_ENDIAN) {
658d8b2de51Sgdamore 		if (flags & AU_WIRED_SPACE_SWAP_HW)
659d8b2de51Sgdamore 			c->c_hwswap = 1;
660d8b2de51Sgdamore 		else
661d8b2de51Sgdamore 			c->c_swswap = 1;
662d8b2de51Sgdamore 	}
663d8b2de51Sgdamore 
664d8b2de51Sgdamore #elif	_BYTE_ORDER == _LITTLE_ENDIAN
665d8b2de51Sgdamore 	if (flags & AU_WIRED_SPACE_BIG_ENDIAN) {
666d8b2de51Sgdamore 		if (flags & AU_WIRED_SPACE_SWAP_HW)
667d8b2de51Sgdamore 			c->c_hwswap = 1;
668d8b2de51Sgdamore 		else
669d8b2de51Sgdamore 			c->c_swswap = 1;
670d8b2de51Sgdamore 	}
671d8b2de51Sgdamore #endif
672d8b2de51Sgdamore 
673d8b2de51Sgdamore 	bst->bs_cookie = c;
674d8b2de51Sgdamore 	bst->bs_map = au_wired_map;
675d8b2de51Sgdamore 	bst->bs_unmap = au_wired_unmap;
676d8b2de51Sgdamore 	bst->bs_subregion = au_wired_subregion;
677d8b2de51Sgdamore 	bst->bs_translate = NULL;	/* we don't use these */
678d8b2de51Sgdamore 	bst->bs_get_window = NULL;	/* we don't use these */
679d8b2de51Sgdamore 	bst->bs_alloc = au_wired_alloc;
680d8b2de51Sgdamore 	bst->bs_free = au_wired_free;
681d8b2de51Sgdamore 	bst->bs_vaddr = au_wired_vaddr;
682d8b2de51Sgdamore 	bst->bs_mmap = au_wired_mmap;
683d8b2de51Sgdamore 	bst->bs_barrier = au_wired_barrier;
684d8b2de51Sgdamore 	bst->bs_r_1 = au_wired_r_1;
685d8b2de51Sgdamore 	bst->bs_w_1 = au_wired_w_1;
686d8b2de51Sgdamore 	bst->bs_r_2 = au_wired_r_2;
687d8b2de51Sgdamore 	bst->bs_r_4 = au_wired_r_4;
688d8b2de51Sgdamore 	bst->bs_r_8 = au_wired_r_8;
689d8b2de51Sgdamore 	bst->bs_w_2 = au_wired_w_2;
690d8b2de51Sgdamore 	bst->bs_w_4 = au_wired_w_4;
691d8b2de51Sgdamore 	bst->bs_w_8 = au_wired_w_8;
692d8b2de51Sgdamore 	bst->bs_rm_1 = au_wired_rm_1;
693d8b2de51Sgdamore 	bst->bs_rm_2 = au_wired_rm_2;
694d8b2de51Sgdamore 	bst->bs_rm_4 = au_wired_rm_4;
695d8b2de51Sgdamore 	bst->bs_rm_8 = au_wired_rm_8;
696d8b2de51Sgdamore 	bst->bs_rr_1 = au_wired_rr_1;
697d8b2de51Sgdamore 	bst->bs_rr_2 = au_wired_rr_2;
698d8b2de51Sgdamore 	bst->bs_rr_4 = au_wired_rr_4;
699d8b2de51Sgdamore 	bst->bs_rr_8 = au_wired_rr_8;
700d8b2de51Sgdamore 	bst->bs_wm_1 = au_wired_wm_1;
701d8b2de51Sgdamore 	bst->bs_wm_2 = au_wired_wm_2;
702d8b2de51Sgdamore 	bst->bs_wm_4 = au_wired_wm_4;
703d8b2de51Sgdamore 	bst->bs_wm_8 = au_wired_wm_8;
704d8b2de51Sgdamore 	bst->bs_wr_1 = au_wired_wr_1;
705d8b2de51Sgdamore 	bst->bs_wr_2 = au_wired_wr_2;
706d8b2de51Sgdamore 	bst->bs_wr_4 = au_wired_wr_4;
707d8b2de51Sgdamore 	bst->bs_wr_8 = au_wired_wr_8;
708d8b2de51Sgdamore 	bst->bs_sm_1 = au_wired_sm_1;
709d8b2de51Sgdamore 	bst->bs_sm_2 = au_wired_sm_2;
710d8b2de51Sgdamore 	bst->bs_sm_4 = au_wired_sm_4;
711d8b2de51Sgdamore 	bst->bs_sm_8 = au_wired_sm_8;
712d8b2de51Sgdamore 	bst->bs_sr_1 = au_wired_sr_1;
713d8b2de51Sgdamore 	bst->bs_sr_2 = au_wired_sr_2;
714d8b2de51Sgdamore 	bst->bs_sr_4 = au_wired_sr_4;
715d8b2de51Sgdamore 	bst->bs_sr_8 = au_wired_sr_8;
716d8b2de51Sgdamore 	bst->bs_c_1 = au_wired_c_1;
717d8b2de51Sgdamore 	bst->bs_c_2 = au_wired_c_2;
718d8b2de51Sgdamore 	bst->bs_c_4 = au_wired_c_4;
719d8b2de51Sgdamore 	bst->bs_c_8 = au_wired_c_8;
720d8b2de51Sgdamore 
721d8b2de51Sgdamore 	bst->bs_rs_1 = au_wired_r_1;
722d8b2de51Sgdamore 	bst->bs_rs_2 = au_wired_rs_2;
723d8b2de51Sgdamore 	bst->bs_rs_4 = au_wired_rs_4;
724d8b2de51Sgdamore 	bst->bs_rs_8 = au_wired_rs_8;
725d8b2de51Sgdamore 	bst->bs_rms_1 = au_wired_rm_1;
726d8b2de51Sgdamore 	bst->bs_rms_2 = au_wired_rms_2;
727d8b2de51Sgdamore 	bst->bs_rms_4 = au_wired_rms_4;
728d8b2de51Sgdamore 	bst->bs_rms_8 = au_wired_rms_8;
729d8b2de51Sgdamore 	bst->bs_rrs_1 = au_wired_rr_1;
730d8b2de51Sgdamore 	bst->bs_rrs_2 = au_wired_rrs_2;
731d8b2de51Sgdamore 	bst->bs_rrs_4 = au_wired_rrs_4;
732d8b2de51Sgdamore 	bst->bs_rrs_8 = au_wired_rrs_8;
733d8b2de51Sgdamore 	bst->bs_ws_1 = au_wired_w_1;
734d8b2de51Sgdamore 	bst->bs_ws_2 = au_wired_ws_2;
735d8b2de51Sgdamore 	bst->bs_ws_4 = au_wired_ws_4;
736d8b2de51Sgdamore 	bst->bs_ws_8 = au_wired_ws_8;
737d8b2de51Sgdamore 	bst->bs_wms_1 = au_wired_wm_1;
738d8b2de51Sgdamore 	bst->bs_wms_2 = au_wired_wms_2;
739d8b2de51Sgdamore 	bst->bs_wms_4 = au_wired_wms_4;
740d8b2de51Sgdamore 	bst->bs_wms_8 = au_wired_wms_8;
741d8b2de51Sgdamore 	bst->bs_wrs_1 = au_wired_wr_1;
742d8b2de51Sgdamore 	bst->bs_wrs_2 = au_wired_wrs_2;
743d8b2de51Sgdamore 	bst->bs_wrs_4 = au_wired_wrs_4;
744d8b2de51Sgdamore 	bst->bs_wrs_8 = au_wired_wrs_8;
745d8b2de51Sgdamore }
746