xref: /freebsd/sys/powerpc/powerpc/bus_machdep.c (revision a3d6e0de)
1de2fa7b8SMarcel Moolenaar /*-
24d846d26SWarner Losh  * SPDX-License-Identifier: BSD-2-Clause
371e3c308SPedro F. Giffuni  *
4de2fa7b8SMarcel Moolenaar  * Copyright (c) 2006 Semihalf, Rafal Jaworowski <raj@semihalf.com>
5de2fa7b8SMarcel Moolenaar  * Copyright (c) 1996, 1997, 1998 The NetBSD Foundation, Inc.
6de2fa7b8SMarcel Moolenaar  * All rights reserved.
7de2fa7b8SMarcel Moolenaar  *
8de2fa7b8SMarcel Moolenaar  * This code is derived from software contributed to The NetBSD Foundation
9de2fa7b8SMarcel Moolenaar  * by Jason R. Thorpe of the Numerical Aerospace Simulation Facility,
10de2fa7b8SMarcel Moolenaar  * NASA Ames Research Center.
11de2fa7b8SMarcel Moolenaar  *
12de2fa7b8SMarcel Moolenaar  * Redistribution and use in source and binary forms, with or without
13de2fa7b8SMarcel Moolenaar  * modification, are permitted provided that the following conditions
14de2fa7b8SMarcel Moolenaar  * are met:
15de2fa7b8SMarcel Moolenaar  * 1. Redistributions of source code must retain the above copyright
16de2fa7b8SMarcel Moolenaar  *    notice, this list of conditions and the following disclaimer.
17de2fa7b8SMarcel Moolenaar  * 2. Redistributions in binary form must reproduce the above copyright
18de2fa7b8SMarcel Moolenaar  *    notice, this list of conditions and the following disclaimer in the
19de2fa7b8SMarcel Moolenaar  *    documentation and/or other materials provided with the distribution.
20de2fa7b8SMarcel Moolenaar  *
21de2fa7b8SMarcel Moolenaar  * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
22de2fa7b8SMarcel Moolenaar  * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
23de2fa7b8SMarcel Moolenaar  * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
24de2fa7b8SMarcel Moolenaar  * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
25de2fa7b8SMarcel Moolenaar  * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
26de2fa7b8SMarcel Moolenaar  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
27de2fa7b8SMarcel Moolenaar  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
28de2fa7b8SMarcel Moolenaar  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
29de2fa7b8SMarcel Moolenaar  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
30de2fa7b8SMarcel Moolenaar  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
31de2fa7b8SMarcel Moolenaar  * POSSIBILITY OF SUCH DAMAGE.
32de2fa7b8SMarcel Moolenaar  */
33de2fa7b8SMarcel Moolenaar 
34de2fa7b8SMarcel Moolenaar #include <sys/cdefs.h>
355a7189f8SMarcel Moolenaar #define	KTR_BE_IO	0
365a7189f8SMarcel Moolenaar #define	KTR_LE_IO	0
375a7189f8SMarcel Moolenaar 
38de2fa7b8SMarcel Moolenaar #include <sys/param.h>
39de2fa7b8SMarcel Moolenaar #include <sys/systm.h>
40de2fa7b8SMarcel Moolenaar #include <sys/bus.h>
415a7189f8SMarcel Moolenaar #include <sys/ktr.h>
421c96bdd1SNathan Whitehorn #include <vm/vm.h>
431c96bdd1SNathan Whitehorn #include <vm/pmap.h>
44f7b509a1SWojciech Macek #include <sys/endian.h>
45de2fa7b8SMarcel Moolenaar 
46de2fa7b8SMarcel Moolenaar #include <machine/bus.h>
47de2fa7b8SMarcel Moolenaar #include <machine/pio.h>
481c96bdd1SNathan Whitehorn #include <machine/md_var.h>
49de2fa7b8SMarcel Moolenaar 
50de2fa7b8SMarcel Moolenaar #define TODO panic("%s: not implemented", __func__)
51de2fa7b8SMarcel Moolenaar 
521c96bdd1SNathan Whitehorn #define	MAX_EARLYBOOT_MAPPINGS	6
531c96bdd1SNathan Whitehorn 
541c96bdd1SNathan Whitehorn static struct {
5533724f17SNathan Whitehorn 	vm_offset_t virt;
561c96bdd1SNathan Whitehorn 	bus_addr_t addr;
571c96bdd1SNathan Whitehorn 	bus_size_t size;
58c1f4123bSNathan Whitehorn 	int flags;
591c96bdd1SNathan Whitehorn } earlyboot_mappings[MAX_EARLYBOOT_MAPPINGS];
601c96bdd1SNathan Whitehorn static int earlyboot_map_idx = 0;
611c96bdd1SNathan Whitehorn 
621c96bdd1SNathan Whitehorn void bs_remap_earlyboot(void);
631c96bdd1SNathan Whitehorn 
64de2fa7b8SMarcel Moolenaar static __inline void *
__ppc_ba(bus_space_handle_t bsh,bus_size_t ofs)65de2fa7b8SMarcel Moolenaar __ppc_ba(bus_space_handle_t bsh, bus_size_t ofs)
66de2fa7b8SMarcel Moolenaar {
67de2fa7b8SMarcel Moolenaar 	return ((void *)(bsh + ofs));
68de2fa7b8SMarcel Moolenaar }
69de2fa7b8SMarcel Moolenaar 
70de2fa7b8SMarcel Moolenaar static int
bs_gen_map(bus_addr_t addr,bus_size_t size,int flags,bus_space_handle_t * bshp)71c1f4123bSNathan Whitehorn bs_gen_map(bus_addr_t addr, bus_size_t size, int flags,
72de2fa7b8SMarcel Moolenaar     bus_space_handle_t *bshp)
73de2fa7b8SMarcel Moolenaar {
74c1f4123bSNathan Whitehorn 	vm_memattr_t ma;
75c1f4123bSNathan Whitehorn 
761c96bdd1SNathan Whitehorn 	/*
771c96bdd1SNathan Whitehorn 	 * Record what we did if we haven't enabled the MMU yet. We
781c96bdd1SNathan Whitehorn 	 * will need to remap it as soon as the MMU comes up.
791c96bdd1SNathan Whitehorn 	 */
801c96bdd1SNathan Whitehorn 	if (!pmap_bootstrapped) {
811c96bdd1SNathan Whitehorn 		KASSERT(earlyboot_map_idx < MAX_EARLYBOOT_MAPPINGS,
821c96bdd1SNathan Whitehorn 		    ("%s: too many early boot mapping requests", __func__));
831c96bdd1SNathan Whitehorn 		earlyboot_mappings[earlyboot_map_idx].addr = addr;
8433724f17SNathan Whitehorn 		earlyboot_mappings[earlyboot_map_idx].virt =
8533724f17SNathan Whitehorn 		    pmap_early_io_map(addr, size);
861c96bdd1SNathan Whitehorn 		earlyboot_mappings[earlyboot_map_idx].size = size;
87c1f4123bSNathan Whitehorn 		earlyboot_mappings[earlyboot_map_idx].flags = flags;
8833724f17SNathan Whitehorn 		*bshp = earlyboot_mappings[earlyboot_map_idx].virt;
891c96bdd1SNathan Whitehorn 		earlyboot_map_idx++;
901c96bdd1SNathan Whitehorn 	} else {
91c1f4123bSNathan Whitehorn 		ma = VM_MEMATTR_DEFAULT;
92c1f4123bSNathan Whitehorn 		switch (flags) {
93c1f4123bSNathan Whitehorn 			case BUS_SPACE_MAP_CACHEABLE:
94c1f4123bSNathan Whitehorn 				ma = VM_MEMATTR_CACHEABLE;
95c1f4123bSNathan Whitehorn 				break;
96c1f4123bSNathan Whitehorn 			case BUS_SPACE_MAP_PREFETCHABLE:
97c1f4123bSNathan Whitehorn 				ma = VM_MEMATTR_PREFETCHABLE;
98c1f4123bSNathan Whitehorn 				break;
99c1f4123bSNathan Whitehorn 		}
100c1f4123bSNathan Whitehorn 		*bshp = (bus_space_handle_t)pmap_mapdev_attr(addr, size, ma);
1011c96bdd1SNathan Whitehorn 	}
1021c96bdd1SNathan Whitehorn 
103de2fa7b8SMarcel Moolenaar 	return (0);
104de2fa7b8SMarcel Moolenaar }
105de2fa7b8SMarcel Moolenaar 
1061c96bdd1SNathan Whitehorn void
bs_remap_earlyboot(void)1071c96bdd1SNathan Whitehorn bs_remap_earlyboot(void)
1081c96bdd1SNathan Whitehorn {
109611aec25SJustin Hibbits 	vm_paddr_t pa, spa;
110611aec25SJustin Hibbits 	vm_offset_t va;
1111c96bdd1SNathan Whitehorn 	int i;
112c1f4123bSNathan Whitehorn 	vm_memattr_t ma;
1131c96bdd1SNathan Whitehorn 
1141c96bdd1SNathan Whitehorn 	for (i = 0; i < earlyboot_map_idx; i++) {
1151c96bdd1SNathan Whitehorn 		spa = earlyboot_mappings[i].addr;
116f9edb09dSNathan Whitehorn 
117f9edb09dSNathan Whitehorn 		if (hw_direct_map &&
118f9edb09dSNathan Whitehorn 		   PHYS_TO_DMAP(spa) == earlyboot_mappings[i].virt &&
11933724f17SNathan Whitehorn 		   pmap_dev_direct_mapped(spa, earlyboot_mappings[i].size) == 0)
1200e8792a1SNathan Whitehorn 			continue;
1211c96bdd1SNathan Whitehorn 
122c1f4123bSNathan Whitehorn 		ma = VM_MEMATTR_DEFAULT;
123c1f4123bSNathan Whitehorn 		switch (earlyboot_mappings[i].flags) {
124c1f4123bSNathan Whitehorn 			case BUS_SPACE_MAP_CACHEABLE:
125c1f4123bSNathan Whitehorn 				ma = VM_MEMATTR_CACHEABLE;
126c1f4123bSNathan Whitehorn 				break;
127c1f4123bSNathan Whitehorn 			case BUS_SPACE_MAP_PREFETCHABLE:
128c1f4123bSNathan Whitehorn 				ma = VM_MEMATTR_PREFETCHABLE;
129c1f4123bSNathan Whitehorn 				break;
130c1f4123bSNathan Whitehorn 		}
131c1f4123bSNathan Whitehorn 
1321c96bdd1SNathan Whitehorn 		pa = trunc_page(spa);
13333724f17SNathan Whitehorn 		va = trunc_page(earlyboot_mappings[i].virt);
1341c96bdd1SNathan Whitehorn 		while (pa < spa + earlyboot_mappings[i].size) {
13533724f17SNathan Whitehorn 			pmap_kenter_attr(va, pa, ma);
13633724f17SNathan Whitehorn 			va += PAGE_SIZE;
1371c96bdd1SNathan Whitehorn 			pa += PAGE_SIZE;
1381c96bdd1SNathan Whitehorn 		}
1391c96bdd1SNathan Whitehorn 	}
1401c96bdd1SNathan Whitehorn }
1411c96bdd1SNathan Whitehorn 
142de2fa7b8SMarcel Moolenaar static void
bs_gen_unmap(bus_space_handle_t bsh,bus_size_t size)143*a3d6e0deSJohn Baldwin bs_gen_unmap(bus_space_handle_t bsh, bus_size_t size)
144de2fa7b8SMarcel Moolenaar {
145*a3d6e0deSJohn Baldwin 
146*a3d6e0deSJohn Baldwin 	if (!pmap_bootstrapped)
147*a3d6e0deSJohn Baldwin 		return;
148*a3d6e0deSJohn Baldwin 
149*a3d6e0deSJohn Baldwin 	pmap_unmapdev((void *)bsh, size);
150de2fa7b8SMarcel Moolenaar }
151de2fa7b8SMarcel Moolenaar 
152de2fa7b8SMarcel Moolenaar static int
bs_gen_subregion(bus_space_handle_t bsh,bus_size_t ofs,bus_size_t size __unused,bus_space_handle_t * nbshp)153de2fa7b8SMarcel Moolenaar bs_gen_subregion(bus_space_handle_t bsh, bus_size_t ofs,
154de2fa7b8SMarcel Moolenaar     bus_size_t size __unused, bus_space_handle_t *nbshp)
155de2fa7b8SMarcel Moolenaar {
156de2fa7b8SMarcel Moolenaar 	*nbshp = bsh + ofs;
157de2fa7b8SMarcel Moolenaar 	return (0);
158de2fa7b8SMarcel Moolenaar }
159de2fa7b8SMarcel Moolenaar 
160de2fa7b8SMarcel Moolenaar static int
bs_gen_alloc(bus_addr_t rstart __unused,bus_addr_t rend __unused,bus_size_t size __unused,bus_size_t alignment __unused,bus_size_t boundary __unused,int flags __unused,bus_addr_t * bpap __unused,bus_space_handle_t * bshp __unused)161de2fa7b8SMarcel Moolenaar bs_gen_alloc(bus_addr_t rstart __unused, bus_addr_t rend __unused,
162de2fa7b8SMarcel Moolenaar     bus_size_t size __unused, bus_size_t alignment __unused,
163de2fa7b8SMarcel Moolenaar     bus_size_t boundary __unused, int flags __unused,
164de2fa7b8SMarcel Moolenaar     bus_addr_t *bpap __unused, bus_space_handle_t *bshp __unused)
165de2fa7b8SMarcel Moolenaar {
166de2fa7b8SMarcel Moolenaar 	TODO;
167de2fa7b8SMarcel Moolenaar }
168de2fa7b8SMarcel Moolenaar 
169de2fa7b8SMarcel Moolenaar static void
bs_gen_free(bus_space_handle_t bsh __unused,bus_size_t size __unused)170de2fa7b8SMarcel Moolenaar bs_gen_free(bus_space_handle_t bsh __unused, bus_size_t size __unused)
171de2fa7b8SMarcel Moolenaar {
172de2fa7b8SMarcel Moolenaar 	TODO;
173de2fa7b8SMarcel Moolenaar }
174de2fa7b8SMarcel Moolenaar 
175de2fa7b8SMarcel Moolenaar static void
bs_gen_barrier(bus_space_handle_t bsh __unused,bus_size_t ofs __unused,bus_size_t size __unused,int flags __unused)176de2fa7b8SMarcel Moolenaar bs_gen_barrier(bus_space_handle_t bsh __unused, bus_size_t ofs __unused,
177de2fa7b8SMarcel Moolenaar     bus_size_t size __unused, int flags __unused)
178de2fa7b8SMarcel Moolenaar {
17913d47f30SNathan Whitehorn 
18013d47f30SNathan Whitehorn 	powerpc_iomb();
181de2fa7b8SMarcel Moolenaar }
182de2fa7b8SMarcel Moolenaar 
183de2fa7b8SMarcel Moolenaar /*
18488e3d5dfSBrandon Bergren  * Native-endian access functions
185de2fa7b8SMarcel Moolenaar  */
186de2fa7b8SMarcel Moolenaar static uint8_t
native_bs_rs_1(bus_space_handle_t bsh,bus_size_t ofs)18788e3d5dfSBrandon Bergren native_bs_rs_1(bus_space_handle_t bsh, bus_size_t ofs)
188de2fa7b8SMarcel Moolenaar {
1895a7189f8SMarcel Moolenaar 	volatile uint8_t *addr;
1905a7189f8SMarcel Moolenaar 	uint8_t res;
1915a7189f8SMarcel Moolenaar 
1925a7189f8SMarcel Moolenaar 	addr = __ppc_ba(bsh, ofs);
1935a7189f8SMarcel Moolenaar 	res = *addr;
19413d47f30SNathan Whitehorn 	powerpc_iomb();
1955a7189f8SMarcel Moolenaar 	CTR4(KTR_BE_IO, "%s(bsh=%#x, ofs=%#x) = %#x", __func__, bsh, ofs, res);
1965a7189f8SMarcel Moolenaar 	return (res);
197de2fa7b8SMarcel Moolenaar }
198de2fa7b8SMarcel Moolenaar 
199de2fa7b8SMarcel Moolenaar static uint16_t
native_bs_rs_2(bus_space_handle_t bsh,bus_size_t ofs)20088e3d5dfSBrandon Bergren native_bs_rs_2(bus_space_handle_t bsh, bus_size_t ofs)
201de2fa7b8SMarcel Moolenaar {
2025a7189f8SMarcel Moolenaar 	volatile uint16_t *addr;
2035a7189f8SMarcel Moolenaar 	uint16_t res;
2045a7189f8SMarcel Moolenaar 
2055a7189f8SMarcel Moolenaar 	addr = __ppc_ba(bsh, ofs);
2065a7189f8SMarcel Moolenaar 	res = *addr;
20713d47f30SNathan Whitehorn 	powerpc_iomb();
2085a7189f8SMarcel Moolenaar 	CTR4(KTR_BE_IO, "%s(bsh=%#x, ofs=%#x) = %#x", __func__, bsh, ofs, res);
2095a7189f8SMarcel Moolenaar 	return (res);
210de2fa7b8SMarcel Moolenaar }
211de2fa7b8SMarcel Moolenaar 
212de2fa7b8SMarcel Moolenaar static uint32_t
native_bs_rs_4(bus_space_handle_t bsh,bus_size_t ofs)21388e3d5dfSBrandon Bergren native_bs_rs_4(bus_space_handle_t bsh, bus_size_t ofs)
214de2fa7b8SMarcel Moolenaar {
2155a7189f8SMarcel Moolenaar 	volatile uint32_t *addr;
2165a7189f8SMarcel Moolenaar 	uint32_t res;
2175a7189f8SMarcel Moolenaar 
2185a7189f8SMarcel Moolenaar 	addr = __ppc_ba(bsh, ofs);
2195a7189f8SMarcel Moolenaar 	res = *addr;
22013d47f30SNathan Whitehorn 	powerpc_iomb();
2215a7189f8SMarcel Moolenaar 	CTR4(KTR_BE_IO, "%s(bsh=%#x, ofs=%#x) = %#x", __func__, bsh, ofs, res);
2225a7189f8SMarcel Moolenaar 	return (res);
223de2fa7b8SMarcel Moolenaar }
224de2fa7b8SMarcel Moolenaar 
225de2fa7b8SMarcel Moolenaar static uint64_t
native_bs_rs_8(bus_space_handle_t bsh,bus_size_t ofs)22688e3d5dfSBrandon Bergren native_bs_rs_8(bus_space_handle_t bsh, bus_size_t ofs)
227de2fa7b8SMarcel Moolenaar {
228ef0e1c23SRafal Jaworowski 	volatile uint64_t *addr;
229ef0e1c23SRafal Jaworowski 	uint64_t res;
230ef0e1c23SRafal Jaworowski 
231ef0e1c23SRafal Jaworowski 	addr = __ppc_ba(bsh, ofs);
232ef0e1c23SRafal Jaworowski 	res = *addr;
23313d47f30SNathan Whitehorn 	powerpc_iomb();
234ef0e1c23SRafal Jaworowski 	return (res);
235de2fa7b8SMarcel Moolenaar }
236de2fa7b8SMarcel Moolenaar 
237de2fa7b8SMarcel Moolenaar static void
native_bs_rm_1(bus_space_handle_t bsh,bus_size_t ofs,uint8_t * addr,size_t cnt)23888e3d5dfSBrandon Bergren native_bs_rm_1(bus_space_handle_t bsh, bus_size_t ofs, uint8_t *addr, size_t cnt)
239de2fa7b8SMarcel Moolenaar {
240de2fa7b8SMarcel Moolenaar 	ins8(__ppc_ba(bsh, ofs), addr, cnt);
241de2fa7b8SMarcel Moolenaar }
242de2fa7b8SMarcel Moolenaar 
243de2fa7b8SMarcel Moolenaar static void
native_bs_rm_2(bus_space_handle_t bsh,bus_size_t ofs,uint16_t * addr,size_t cnt)24488e3d5dfSBrandon Bergren native_bs_rm_2(bus_space_handle_t bsh, bus_size_t ofs, uint16_t *addr, size_t cnt)
245de2fa7b8SMarcel Moolenaar {
246de2fa7b8SMarcel Moolenaar 	ins16(__ppc_ba(bsh, ofs), addr, cnt);
247de2fa7b8SMarcel Moolenaar }
248de2fa7b8SMarcel Moolenaar 
249de2fa7b8SMarcel Moolenaar static void
native_bs_rm_4(bus_space_handle_t bsh,bus_size_t ofs,uint32_t * addr,size_t cnt)25088e3d5dfSBrandon Bergren native_bs_rm_4(bus_space_handle_t bsh, bus_size_t ofs, uint32_t *addr, size_t cnt)
251de2fa7b8SMarcel Moolenaar {
252de2fa7b8SMarcel Moolenaar 	ins32(__ppc_ba(bsh, ofs), addr, cnt);
253de2fa7b8SMarcel Moolenaar }
254de2fa7b8SMarcel Moolenaar 
255de2fa7b8SMarcel Moolenaar static void
native_bs_rm_8(bus_space_handle_t bsh,bus_size_t ofs,uint64_t * addr,size_t cnt)25688e3d5dfSBrandon Bergren native_bs_rm_8(bus_space_handle_t bsh, bus_size_t ofs, uint64_t *addr, size_t cnt)
257de2fa7b8SMarcel Moolenaar {
258ef0e1c23SRafal Jaworowski 	ins64(__ppc_ba(bsh, ofs), addr, cnt);
259de2fa7b8SMarcel Moolenaar }
260de2fa7b8SMarcel Moolenaar 
261de2fa7b8SMarcel Moolenaar static void
native_bs_rr_1(bus_space_handle_t bsh,bus_size_t ofs,uint8_t * addr,size_t cnt)26288e3d5dfSBrandon Bergren native_bs_rr_1(bus_space_handle_t bsh, bus_size_t ofs, uint8_t *addr, size_t cnt)
263de2fa7b8SMarcel Moolenaar {
264de2fa7b8SMarcel Moolenaar 	volatile uint8_t *s = __ppc_ba(bsh, ofs);
265de2fa7b8SMarcel Moolenaar 
266de2fa7b8SMarcel Moolenaar 	while (cnt--)
267de2fa7b8SMarcel Moolenaar 		*addr++ = *s++;
26813d47f30SNathan Whitehorn 	powerpc_iomb();
269de2fa7b8SMarcel Moolenaar }
270de2fa7b8SMarcel Moolenaar 
271de2fa7b8SMarcel Moolenaar static void
native_bs_rr_2(bus_space_handle_t bsh,bus_size_t ofs,uint16_t * addr,size_t cnt)27288e3d5dfSBrandon Bergren native_bs_rr_2(bus_space_handle_t bsh, bus_size_t ofs, uint16_t *addr, size_t cnt)
273de2fa7b8SMarcel Moolenaar {
274de2fa7b8SMarcel Moolenaar 	volatile uint16_t *s = __ppc_ba(bsh, ofs);
275de2fa7b8SMarcel Moolenaar 
276de2fa7b8SMarcel Moolenaar 	while (cnt--)
277de2fa7b8SMarcel Moolenaar 		*addr++ = *s++;
27813d47f30SNathan Whitehorn 	powerpc_iomb();
279de2fa7b8SMarcel Moolenaar }
280de2fa7b8SMarcel Moolenaar 
281de2fa7b8SMarcel Moolenaar static void
native_bs_rr_4(bus_space_handle_t bsh,bus_size_t ofs,uint32_t * addr,size_t cnt)28288e3d5dfSBrandon Bergren native_bs_rr_4(bus_space_handle_t bsh, bus_size_t ofs, uint32_t *addr, size_t cnt)
283de2fa7b8SMarcel Moolenaar {
284de2fa7b8SMarcel Moolenaar 	volatile uint32_t *s = __ppc_ba(bsh, ofs);
285de2fa7b8SMarcel Moolenaar 
286de2fa7b8SMarcel Moolenaar 	while (cnt--)
287de2fa7b8SMarcel Moolenaar 		*addr++ = *s++;
28813d47f30SNathan Whitehorn 	powerpc_iomb();
289de2fa7b8SMarcel Moolenaar }
290de2fa7b8SMarcel Moolenaar 
291de2fa7b8SMarcel Moolenaar static void
native_bs_rr_8(bus_space_handle_t bsh,bus_size_t ofs,uint64_t * addr,size_t cnt)29288e3d5dfSBrandon Bergren native_bs_rr_8(bus_space_handle_t bsh, bus_size_t ofs, uint64_t *addr, size_t cnt)
293de2fa7b8SMarcel Moolenaar {
294ef0e1c23SRafal Jaworowski 	volatile uint64_t *s = __ppc_ba(bsh, ofs);
295ef0e1c23SRafal Jaworowski 
296ef0e1c23SRafal Jaworowski 	while (cnt--)
297ef0e1c23SRafal Jaworowski 		*addr++ = *s++;
29813d47f30SNathan Whitehorn 	powerpc_iomb();
299de2fa7b8SMarcel Moolenaar }
300de2fa7b8SMarcel Moolenaar 
301de2fa7b8SMarcel Moolenaar static void
native_bs_ws_1(bus_space_handle_t bsh,bus_size_t ofs,uint8_t val)30288e3d5dfSBrandon Bergren native_bs_ws_1(bus_space_handle_t bsh, bus_size_t ofs, uint8_t val)
303de2fa7b8SMarcel Moolenaar {
3045a7189f8SMarcel Moolenaar 	volatile uint8_t *addr;
3055a7189f8SMarcel Moolenaar 
3065a7189f8SMarcel Moolenaar 	addr = __ppc_ba(bsh, ofs);
3075a7189f8SMarcel Moolenaar 	*addr = val;
30813d47f30SNathan Whitehorn 	powerpc_iomb();
3095a7189f8SMarcel Moolenaar 	CTR4(KTR_BE_IO, "%s(bsh=%#x, ofs=%#x, val=%#x)", __func__, bsh, ofs, val);
310de2fa7b8SMarcel Moolenaar }
311de2fa7b8SMarcel Moolenaar 
312de2fa7b8SMarcel Moolenaar static void
native_bs_ws_2(bus_space_handle_t bsh,bus_size_t ofs,uint16_t val)31388e3d5dfSBrandon Bergren native_bs_ws_2(bus_space_handle_t bsh, bus_size_t ofs, uint16_t val)
314de2fa7b8SMarcel Moolenaar {
3155a7189f8SMarcel Moolenaar 	volatile uint16_t *addr;
3165a7189f8SMarcel Moolenaar 
3175a7189f8SMarcel Moolenaar 	addr = __ppc_ba(bsh, ofs);
3185a7189f8SMarcel Moolenaar 	*addr = val;
31913d47f30SNathan Whitehorn 	powerpc_iomb();
3205a7189f8SMarcel Moolenaar 	CTR4(KTR_BE_IO, "%s(bsh=%#x, ofs=%#x, val=%#x)", __func__, bsh, ofs, val);
321de2fa7b8SMarcel Moolenaar }
322de2fa7b8SMarcel Moolenaar 
323de2fa7b8SMarcel Moolenaar static void
native_bs_ws_4(bus_space_handle_t bsh,bus_size_t ofs,uint32_t val)32488e3d5dfSBrandon Bergren native_bs_ws_4(bus_space_handle_t bsh, bus_size_t ofs, uint32_t val)
325de2fa7b8SMarcel Moolenaar {
3265a7189f8SMarcel Moolenaar 	volatile uint32_t *addr;
3275a7189f8SMarcel Moolenaar 
3285a7189f8SMarcel Moolenaar 	addr = __ppc_ba(bsh, ofs);
3295a7189f8SMarcel Moolenaar 	*addr = val;
33013d47f30SNathan Whitehorn 	powerpc_iomb();
3315a7189f8SMarcel Moolenaar 	CTR4(KTR_BE_IO, "%s(bsh=%#x, ofs=%#x, val=%#x)", __func__, bsh, ofs, val);
332de2fa7b8SMarcel Moolenaar }
333de2fa7b8SMarcel Moolenaar 
334de2fa7b8SMarcel Moolenaar static void
native_bs_ws_8(bus_space_handle_t bsh,bus_size_t ofs,uint64_t val)33588e3d5dfSBrandon Bergren native_bs_ws_8(bus_space_handle_t bsh, bus_size_t ofs, uint64_t val)
336de2fa7b8SMarcel Moolenaar {
337ef0e1c23SRafal Jaworowski 	volatile uint64_t *addr;
338ef0e1c23SRafal Jaworowski 
339ef0e1c23SRafal Jaworowski 	addr = __ppc_ba(bsh, ofs);
340ef0e1c23SRafal Jaworowski 	*addr = val;
34113d47f30SNathan Whitehorn 	powerpc_iomb();
342f7b509a1SWojciech Macek 	CTR4(KTR_BE_IO, "%s(bsh=%#x, ofs=%#x, val=%#x)", __func__, bsh, ofs, val);
343de2fa7b8SMarcel Moolenaar }
344de2fa7b8SMarcel Moolenaar 
345de2fa7b8SMarcel Moolenaar static void
native_bs_wm_1(bus_space_handle_t bsh,bus_size_t ofs,const uint8_t * addr,bus_size_t cnt)34688e3d5dfSBrandon Bergren native_bs_wm_1(bus_space_handle_t bsh, bus_size_t ofs, const uint8_t *addr,
347de2fa7b8SMarcel Moolenaar     bus_size_t cnt)
348de2fa7b8SMarcel Moolenaar {
349de2fa7b8SMarcel Moolenaar 	outsb(__ppc_ba(bsh, ofs), addr, cnt);
350de2fa7b8SMarcel Moolenaar }
351de2fa7b8SMarcel Moolenaar 
352de2fa7b8SMarcel Moolenaar static void
native_bs_wm_2(bus_space_handle_t bsh,bus_size_t ofs,const uint16_t * addr,bus_size_t cnt)35388e3d5dfSBrandon Bergren native_bs_wm_2(bus_space_handle_t bsh, bus_size_t ofs, const uint16_t *addr,
354de2fa7b8SMarcel Moolenaar     bus_size_t cnt)
355de2fa7b8SMarcel Moolenaar {
356de2fa7b8SMarcel Moolenaar 	outsw(__ppc_ba(bsh, ofs), addr, cnt);
357de2fa7b8SMarcel Moolenaar }
358de2fa7b8SMarcel Moolenaar 
359de2fa7b8SMarcel Moolenaar static void
native_bs_wm_4(bus_space_handle_t bsh,bus_size_t ofs,const uint32_t * addr,bus_size_t cnt)36088e3d5dfSBrandon Bergren native_bs_wm_4(bus_space_handle_t bsh, bus_size_t ofs, const uint32_t *addr,
361de2fa7b8SMarcel Moolenaar     bus_size_t cnt)
362de2fa7b8SMarcel Moolenaar {
363de2fa7b8SMarcel Moolenaar 	outsl(__ppc_ba(bsh, ofs), addr, cnt);
364de2fa7b8SMarcel Moolenaar }
365de2fa7b8SMarcel Moolenaar 
366de2fa7b8SMarcel Moolenaar static void
native_bs_wm_8(bus_space_handle_t bsh,bus_size_t ofs,const uint64_t * addr,bus_size_t cnt)36788e3d5dfSBrandon Bergren native_bs_wm_8(bus_space_handle_t bsh, bus_size_t ofs, const uint64_t *addr,
368de2fa7b8SMarcel Moolenaar     bus_size_t cnt)
369de2fa7b8SMarcel Moolenaar {
370ef0e1c23SRafal Jaworowski 	outsll(__ppc_ba(bsh, ofs), addr, cnt);
371de2fa7b8SMarcel Moolenaar }
372de2fa7b8SMarcel Moolenaar 
373de2fa7b8SMarcel Moolenaar static void
native_bs_wr_1(bus_space_handle_t bsh,bus_size_t ofs,const uint8_t * addr,size_t cnt)37488e3d5dfSBrandon Bergren native_bs_wr_1(bus_space_handle_t bsh, bus_size_t ofs, const uint8_t *addr,
375de2fa7b8SMarcel Moolenaar     size_t cnt)
376de2fa7b8SMarcel Moolenaar {
377de2fa7b8SMarcel Moolenaar 	volatile uint8_t *d = __ppc_ba(bsh, ofs);
378de2fa7b8SMarcel Moolenaar 
379de2fa7b8SMarcel Moolenaar 	while (cnt--)
380de2fa7b8SMarcel Moolenaar 		*d++ = *addr++;
38113d47f30SNathan Whitehorn 	powerpc_iomb();
382de2fa7b8SMarcel Moolenaar }
383de2fa7b8SMarcel Moolenaar 
384de2fa7b8SMarcel Moolenaar static void
native_bs_wr_2(bus_space_handle_t bsh,bus_size_t ofs,const uint16_t * addr,size_t cnt)38588e3d5dfSBrandon Bergren native_bs_wr_2(bus_space_handle_t bsh, bus_size_t ofs, const uint16_t *addr,
386de2fa7b8SMarcel Moolenaar     size_t cnt)
387de2fa7b8SMarcel Moolenaar {
388de2fa7b8SMarcel Moolenaar 	volatile uint16_t *d = __ppc_ba(bsh, ofs);
389de2fa7b8SMarcel Moolenaar 
390de2fa7b8SMarcel Moolenaar 	while (cnt--)
391de2fa7b8SMarcel Moolenaar 		*d++ = *addr++;
39213d47f30SNathan Whitehorn 	powerpc_iomb();
393de2fa7b8SMarcel Moolenaar }
394de2fa7b8SMarcel Moolenaar 
395de2fa7b8SMarcel Moolenaar static void
native_bs_wr_4(bus_space_handle_t bsh,bus_size_t ofs,const uint32_t * addr,size_t cnt)39688e3d5dfSBrandon Bergren native_bs_wr_4(bus_space_handle_t bsh, bus_size_t ofs, const uint32_t *addr,
397de2fa7b8SMarcel Moolenaar     size_t cnt)
398de2fa7b8SMarcel Moolenaar {
399de2fa7b8SMarcel Moolenaar 	volatile uint32_t *d = __ppc_ba(bsh, ofs);
400de2fa7b8SMarcel Moolenaar 
401de2fa7b8SMarcel Moolenaar 	while (cnt--)
402de2fa7b8SMarcel Moolenaar 		*d++ = *addr++;
40313d47f30SNathan Whitehorn 	powerpc_iomb();
404de2fa7b8SMarcel Moolenaar }
405de2fa7b8SMarcel Moolenaar 
406de2fa7b8SMarcel Moolenaar static void
native_bs_wr_8(bus_space_handle_t bsh,bus_size_t ofs,const uint64_t * addr,size_t cnt)40788e3d5dfSBrandon Bergren native_bs_wr_8(bus_space_handle_t bsh, bus_size_t ofs, const uint64_t *addr,
408de2fa7b8SMarcel Moolenaar     size_t cnt)
409de2fa7b8SMarcel Moolenaar {
410ef0e1c23SRafal Jaworowski 	volatile uint64_t *d = __ppc_ba(bsh, ofs);
411ef0e1c23SRafal Jaworowski 
412ef0e1c23SRafal Jaworowski 	while (cnt--)
413ef0e1c23SRafal Jaworowski 		*d++ = *addr++;
41413d47f30SNathan Whitehorn 	powerpc_iomb();
415de2fa7b8SMarcel Moolenaar }
416de2fa7b8SMarcel Moolenaar 
417de2fa7b8SMarcel Moolenaar static void
native_bs_sm_1(bus_space_handle_t bsh,bus_size_t ofs,uint8_t val,size_t cnt)41888e3d5dfSBrandon Bergren native_bs_sm_1(bus_space_handle_t bsh, bus_size_t ofs, uint8_t val, size_t cnt)
419de2fa7b8SMarcel Moolenaar {
420de2fa7b8SMarcel Moolenaar 	volatile uint8_t *d = __ppc_ba(bsh, ofs);
421de2fa7b8SMarcel Moolenaar 
422de2fa7b8SMarcel Moolenaar 	while (cnt--)
423de2fa7b8SMarcel Moolenaar 		*d = val;
42413d47f30SNathan Whitehorn 	powerpc_iomb();
425de2fa7b8SMarcel Moolenaar }
426de2fa7b8SMarcel Moolenaar 
427de2fa7b8SMarcel Moolenaar static void
native_bs_sm_2(bus_space_handle_t bsh,bus_size_t ofs,uint16_t val,size_t cnt)42888e3d5dfSBrandon Bergren native_bs_sm_2(bus_space_handle_t bsh, bus_size_t ofs, uint16_t val, size_t cnt)
429de2fa7b8SMarcel Moolenaar {
430de2fa7b8SMarcel Moolenaar 	volatile uint16_t *d = __ppc_ba(bsh, ofs);
431de2fa7b8SMarcel Moolenaar 
432de2fa7b8SMarcel Moolenaar 	while (cnt--)
433de2fa7b8SMarcel Moolenaar 		*d = val;
43413d47f30SNathan Whitehorn 	powerpc_iomb();
435de2fa7b8SMarcel Moolenaar }
436de2fa7b8SMarcel Moolenaar 
437de2fa7b8SMarcel Moolenaar static void
native_bs_sm_4(bus_space_handle_t bsh,bus_size_t ofs,uint32_t val,size_t cnt)43888e3d5dfSBrandon Bergren native_bs_sm_4(bus_space_handle_t bsh, bus_size_t ofs, uint32_t val, size_t cnt)
439de2fa7b8SMarcel Moolenaar {
440de2fa7b8SMarcel Moolenaar 	volatile uint32_t *d = __ppc_ba(bsh, ofs);
441de2fa7b8SMarcel Moolenaar 
442de2fa7b8SMarcel Moolenaar 	while (cnt--)
443de2fa7b8SMarcel Moolenaar 		*d = val;
44413d47f30SNathan Whitehorn 	powerpc_iomb();
445de2fa7b8SMarcel Moolenaar }
446de2fa7b8SMarcel Moolenaar 
447de2fa7b8SMarcel Moolenaar static void
native_bs_sm_8(bus_space_handle_t bsh,bus_size_t ofs,uint64_t val,size_t cnt)44888e3d5dfSBrandon Bergren native_bs_sm_8(bus_space_handle_t bsh, bus_size_t ofs, uint64_t val, size_t cnt)
449de2fa7b8SMarcel Moolenaar {
450ef0e1c23SRafal Jaworowski 	volatile uint64_t *d = __ppc_ba(bsh, ofs);
451ef0e1c23SRafal Jaworowski 
452ef0e1c23SRafal Jaworowski 	while (cnt--)
453ef0e1c23SRafal Jaworowski 		*d = val;
45413d47f30SNathan Whitehorn 	powerpc_iomb();
455de2fa7b8SMarcel Moolenaar }
456de2fa7b8SMarcel Moolenaar 
457de2fa7b8SMarcel Moolenaar static void
native_bs_sr_1(bus_space_handle_t bsh,bus_size_t ofs,uint8_t val,size_t cnt)45888e3d5dfSBrandon Bergren native_bs_sr_1(bus_space_handle_t bsh, bus_size_t ofs, uint8_t val, size_t cnt)
459de2fa7b8SMarcel Moolenaar {
460de2fa7b8SMarcel Moolenaar 	volatile uint8_t *d = __ppc_ba(bsh, ofs);
461de2fa7b8SMarcel Moolenaar 
462de2fa7b8SMarcel Moolenaar 	while (cnt--)
463de2fa7b8SMarcel Moolenaar 		*d++ = val;
46413d47f30SNathan Whitehorn 	powerpc_iomb();
465de2fa7b8SMarcel Moolenaar }
466de2fa7b8SMarcel Moolenaar 
467de2fa7b8SMarcel Moolenaar static void
native_bs_sr_2(bus_space_handle_t bsh,bus_size_t ofs,uint16_t val,size_t cnt)46888e3d5dfSBrandon Bergren native_bs_sr_2(bus_space_handle_t bsh, bus_size_t ofs, uint16_t val, size_t cnt)
469de2fa7b8SMarcel Moolenaar {
470de2fa7b8SMarcel Moolenaar 	volatile uint16_t *d = __ppc_ba(bsh, ofs);
471de2fa7b8SMarcel Moolenaar 
472de2fa7b8SMarcel Moolenaar 	while (cnt--)
473de2fa7b8SMarcel Moolenaar 		*d++ = val;
47413d47f30SNathan Whitehorn 	powerpc_iomb();
475de2fa7b8SMarcel Moolenaar }
476de2fa7b8SMarcel Moolenaar 
477de2fa7b8SMarcel Moolenaar static void
native_bs_sr_4(bus_space_handle_t bsh,bus_size_t ofs,uint32_t val,size_t cnt)47888e3d5dfSBrandon Bergren native_bs_sr_4(bus_space_handle_t bsh, bus_size_t ofs, uint32_t val, size_t cnt)
479de2fa7b8SMarcel Moolenaar {
480de2fa7b8SMarcel Moolenaar 	volatile uint32_t *d = __ppc_ba(bsh, ofs);
481de2fa7b8SMarcel Moolenaar 
482de2fa7b8SMarcel Moolenaar 	while (cnt--)
483de2fa7b8SMarcel Moolenaar 		*d++ = val;
48413d47f30SNathan Whitehorn 	powerpc_iomb();
485de2fa7b8SMarcel Moolenaar }
486de2fa7b8SMarcel Moolenaar 
487de2fa7b8SMarcel Moolenaar static void
native_bs_sr_8(bus_space_handle_t bsh,bus_size_t ofs,uint64_t val,size_t cnt)48888e3d5dfSBrandon Bergren native_bs_sr_8(bus_space_handle_t bsh, bus_size_t ofs, uint64_t val, size_t cnt)
489de2fa7b8SMarcel Moolenaar {
490ef0e1c23SRafal Jaworowski 	volatile uint64_t *d = __ppc_ba(bsh, ofs);
491ef0e1c23SRafal Jaworowski 
492ef0e1c23SRafal Jaworowski 	while (cnt--)
493ef0e1c23SRafal Jaworowski 		*d++ = val;
49413d47f30SNathan Whitehorn 	powerpc_iomb();
495de2fa7b8SMarcel Moolenaar }
496de2fa7b8SMarcel Moolenaar 
497de2fa7b8SMarcel Moolenaar /*
49888e3d5dfSBrandon Bergren  * Byteswapped access functions
499de2fa7b8SMarcel Moolenaar  */
500de2fa7b8SMarcel Moolenaar static uint8_t
swapped_bs_rs_1(bus_space_handle_t bsh,bus_size_t ofs)50188e3d5dfSBrandon Bergren swapped_bs_rs_1(bus_space_handle_t bsh, bus_size_t ofs)
502de2fa7b8SMarcel Moolenaar {
5035a7189f8SMarcel Moolenaar 	volatile uint8_t *addr;
5045a7189f8SMarcel Moolenaar 	uint8_t res;
5055a7189f8SMarcel Moolenaar 
5065a7189f8SMarcel Moolenaar 	addr = __ppc_ba(bsh, ofs);
5075a7189f8SMarcel Moolenaar 	res = *addr;
50813d47f30SNathan Whitehorn 	powerpc_iomb();
5095a7189f8SMarcel Moolenaar 	CTR4(KTR_LE_IO, "%s(bsh=%#x, ofs=%#x) = %#x", __func__, bsh, ofs, res);
5105a7189f8SMarcel Moolenaar 	return (res);
511de2fa7b8SMarcel Moolenaar }
512de2fa7b8SMarcel Moolenaar 
513de2fa7b8SMarcel Moolenaar static uint16_t
swapped_bs_rs_2(bus_space_handle_t bsh,bus_size_t ofs)51488e3d5dfSBrandon Bergren swapped_bs_rs_2(bus_space_handle_t bsh, bus_size_t ofs)
515de2fa7b8SMarcel Moolenaar {
5165a7189f8SMarcel Moolenaar 	volatile uint16_t *addr;
5175a7189f8SMarcel Moolenaar 	uint16_t res;
5185a7189f8SMarcel Moolenaar 
5195a7189f8SMarcel Moolenaar 	addr = __ppc_ba(bsh, ofs);
5205a7189f8SMarcel Moolenaar 	__asm __volatile("lhbrx %0, 0, %1" : "=r"(res) : "r"(addr));
52113d47f30SNathan Whitehorn 	powerpc_iomb();
5225a7189f8SMarcel Moolenaar 	CTR4(KTR_LE_IO, "%s(bsh=%#x, ofs=%#x) = %#x", __func__, bsh, ofs, res);
5235a7189f8SMarcel Moolenaar 	return (res);
524de2fa7b8SMarcel Moolenaar }
525de2fa7b8SMarcel Moolenaar 
526de2fa7b8SMarcel Moolenaar static uint32_t
swapped_bs_rs_4(bus_space_handle_t bsh,bus_size_t ofs)52788e3d5dfSBrandon Bergren swapped_bs_rs_4(bus_space_handle_t bsh, bus_size_t ofs)
528de2fa7b8SMarcel Moolenaar {
5295a7189f8SMarcel Moolenaar 	volatile uint32_t *addr;
5305a7189f8SMarcel Moolenaar 	uint32_t res;
5315a7189f8SMarcel Moolenaar 
5325a7189f8SMarcel Moolenaar 	addr = __ppc_ba(bsh, ofs);
5335a7189f8SMarcel Moolenaar 	__asm __volatile("lwbrx %0, 0, %1" : "=r"(res) : "r"(addr));
53413d47f30SNathan Whitehorn 	powerpc_iomb();
5355a7189f8SMarcel Moolenaar 	CTR4(KTR_LE_IO, "%s(bsh=%#x, ofs=%#x) = %#x", __func__, bsh, ofs, res);
5365a7189f8SMarcel Moolenaar 	return (res);
537de2fa7b8SMarcel Moolenaar }
538de2fa7b8SMarcel Moolenaar 
539de2fa7b8SMarcel Moolenaar static uint64_t
swapped_bs_rs_8(bus_space_handle_t bsh,bus_size_t ofs)54088e3d5dfSBrandon Bergren swapped_bs_rs_8(bus_space_handle_t bsh, bus_size_t ofs)
541de2fa7b8SMarcel Moolenaar {
542f7b509a1SWojciech Macek 	volatile uint64_t *addr;
543f7b509a1SWojciech Macek 	uint64_t res;
544f7b509a1SWojciech Macek 
545f7b509a1SWojciech Macek 	addr = __ppc_ba(bsh, ofs);
546f7b509a1SWojciech Macek 	res = le64toh(*addr);
547f7b509a1SWojciech Macek 	powerpc_iomb();
548f7b509a1SWojciech Macek 	CTR4(KTR_LE_IO, "%s(bsh=%#x, ofs=%#x) = %#x", __func__, bsh, ofs, res);
549f7b509a1SWojciech Macek 	return (res);
550de2fa7b8SMarcel Moolenaar }
551de2fa7b8SMarcel Moolenaar 
552de2fa7b8SMarcel Moolenaar static void
swapped_bs_rm_1(bus_space_handle_t bsh,bus_size_t ofs,uint8_t * addr,size_t cnt)55388e3d5dfSBrandon Bergren swapped_bs_rm_1(bus_space_handle_t bsh, bus_size_t ofs, uint8_t *addr, size_t cnt)
554de2fa7b8SMarcel Moolenaar {
555de2fa7b8SMarcel Moolenaar 	ins8(__ppc_ba(bsh, ofs), addr, cnt);
556de2fa7b8SMarcel Moolenaar }
557de2fa7b8SMarcel Moolenaar 
558de2fa7b8SMarcel Moolenaar static void
swapped_bs_rm_2(bus_space_handle_t bsh,bus_size_t ofs,uint16_t * addr,size_t cnt)55988e3d5dfSBrandon Bergren swapped_bs_rm_2(bus_space_handle_t bsh, bus_size_t ofs, uint16_t *addr, size_t cnt)
560de2fa7b8SMarcel Moolenaar {
561de2fa7b8SMarcel Moolenaar 	ins16rb(__ppc_ba(bsh, ofs), addr, cnt);
562de2fa7b8SMarcel Moolenaar }
563de2fa7b8SMarcel Moolenaar 
564de2fa7b8SMarcel Moolenaar static void
swapped_bs_rm_4(bus_space_handle_t bsh,bus_size_t ofs,uint32_t * addr,size_t cnt)56588e3d5dfSBrandon Bergren swapped_bs_rm_4(bus_space_handle_t bsh, bus_size_t ofs, uint32_t *addr, size_t cnt)
566de2fa7b8SMarcel Moolenaar {
567de2fa7b8SMarcel Moolenaar 	ins32rb(__ppc_ba(bsh, ofs), addr, cnt);
568de2fa7b8SMarcel Moolenaar }
569de2fa7b8SMarcel Moolenaar 
570de2fa7b8SMarcel Moolenaar static void
swapped_bs_rm_8(bus_space_handle_t bshh,bus_size_t ofs,uint64_t * addr,size_t cnt)57188e3d5dfSBrandon Bergren swapped_bs_rm_8(bus_space_handle_t bshh, bus_size_t ofs, uint64_t *addr, size_t cnt)
572de2fa7b8SMarcel Moolenaar {
573de2fa7b8SMarcel Moolenaar 	TODO;
574de2fa7b8SMarcel Moolenaar }
575de2fa7b8SMarcel Moolenaar 
576de2fa7b8SMarcel Moolenaar static void
swapped_bs_rr_1(bus_space_handle_t bsh,bus_size_t ofs,uint8_t * addr,size_t cnt)57788e3d5dfSBrandon Bergren swapped_bs_rr_1(bus_space_handle_t bsh, bus_size_t ofs, uint8_t *addr, size_t cnt)
578de2fa7b8SMarcel Moolenaar {
579de2fa7b8SMarcel Moolenaar 	volatile uint8_t *s = __ppc_ba(bsh, ofs);
580de2fa7b8SMarcel Moolenaar 
581de2fa7b8SMarcel Moolenaar 	while (cnt--)
582de2fa7b8SMarcel Moolenaar 		*addr++ = *s++;
58313d47f30SNathan Whitehorn 	powerpc_iomb();
584de2fa7b8SMarcel Moolenaar }
585de2fa7b8SMarcel Moolenaar 
586de2fa7b8SMarcel Moolenaar static void
swapped_bs_rr_2(bus_space_handle_t bsh,bus_size_t ofs,uint16_t * addr,size_t cnt)58788e3d5dfSBrandon Bergren swapped_bs_rr_2(bus_space_handle_t bsh, bus_size_t ofs, uint16_t *addr, size_t cnt)
588de2fa7b8SMarcel Moolenaar {
589de2fa7b8SMarcel Moolenaar 	volatile uint16_t *s = __ppc_ba(bsh, ofs);
590de2fa7b8SMarcel Moolenaar 
591de2fa7b8SMarcel Moolenaar 	while (cnt--)
592de2fa7b8SMarcel Moolenaar 		*addr++ = in16rb(s++);
59313d47f30SNathan Whitehorn 	powerpc_iomb();
594de2fa7b8SMarcel Moolenaar }
595de2fa7b8SMarcel Moolenaar 
596de2fa7b8SMarcel Moolenaar static void
swapped_bs_rr_4(bus_space_handle_t bsh,bus_size_t ofs,uint32_t * addr,size_t cnt)59788e3d5dfSBrandon Bergren swapped_bs_rr_4(bus_space_handle_t bsh, bus_size_t ofs, uint32_t *addr, size_t cnt)
598de2fa7b8SMarcel Moolenaar {
599de2fa7b8SMarcel Moolenaar 	volatile uint32_t *s = __ppc_ba(bsh, ofs);
600de2fa7b8SMarcel Moolenaar 
601de2fa7b8SMarcel Moolenaar 	while (cnt--)
602de2fa7b8SMarcel Moolenaar 		*addr++ = in32rb(s++);
60313d47f30SNathan Whitehorn 	powerpc_iomb();
604de2fa7b8SMarcel Moolenaar }
605de2fa7b8SMarcel Moolenaar 
606de2fa7b8SMarcel Moolenaar static void
swapped_bs_rr_8(bus_space_handle_t bsh,bus_size_t ofs,uint64_t * addr,size_t cnt)60788e3d5dfSBrandon Bergren swapped_bs_rr_8(bus_space_handle_t bsh, bus_size_t ofs, uint64_t *addr, size_t cnt)
608de2fa7b8SMarcel Moolenaar {
609de2fa7b8SMarcel Moolenaar 	TODO;
610de2fa7b8SMarcel Moolenaar }
611de2fa7b8SMarcel Moolenaar 
612de2fa7b8SMarcel Moolenaar static void
swapped_bs_ws_1(bus_space_handle_t bsh,bus_size_t ofs,uint8_t val)61388e3d5dfSBrandon Bergren swapped_bs_ws_1(bus_space_handle_t bsh, bus_size_t ofs, uint8_t val)
614de2fa7b8SMarcel Moolenaar {
6155a7189f8SMarcel Moolenaar 	volatile uint8_t *addr;
6165a7189f8SMarcel Moolenaar 
6175a7189f8SMarcel Moolenaar 	addr = __ppc_ba(bsh, ofs);
6185a7189f8SMarcel Moolenaar 	*addr = val;
61913d47f30SNathan Whitehorn 	powerpc_iomb();
6205a7189f8SMarcel Moolenaar 	CTR4(KTR_LE_IO, "%s(bsh=%#x, ofs=%#x, val=%#x)", __func__, bsh, ofs, val);
621de2fa7b8SMarcel Moolenaar }
622de2fa7b8SMarcel Moolenaar 
623de2fa7b8SMarcel Moolenaar static void
swapped_bs_ws_2(bus_space_handle_t bsh,bus_size_t ofs,uint16_t val)62488e3d5dfSBrandon Bergren swapped_bs_ws_2(bus_space_handle_t bsh, bus_size_t ofs, uint16_t val)
625de2fa7b8SMarcel Moolenaar {
6265a7189f8SMarcel Moolenaar 	volatile uint16_t *addr;
6275a7189f8SMarcel Moolenaar 
6285a7189f8SMarcel Moolenaar 	addr = __ppc_ba(bsh, ofs);
6295a7189f8SMarcel Moolenaar 	__asm __volatile("sthbrx %0, 0, %1" :: "r"(val), "r"(addr));
63013d47f30SNathan Whitehorn 	powerpc_iomb();
6315a7189f8SMarcel Moolenaar 	CTR4(KTR_LE_IO, "%s(bsh=%#x, ofs=%#x, val=%#x)", __func__, bsh, ofs, val);
632de2fa7b8SMarcel Moolenaar }
633de2fa7b8SMarcel Moolenaar 
634de2fa7b8SMarcel Moolenaar static void
swapped_bs_ws_4(bus_space_handle_t bsh,bus_size_t ofs,uint32_t val)63588e3d5dfSBrandon Bergren swapped_bs_ws_4(bus_space_handle_t bsh, bus_size_t ofs, uint32_t val)
636de2fa7b8SMarcel Moolenaar {
6375a7189f8SMarcel Moolenaar 	volatile uint32_t *addr;
6385a7189f8SMarcel Moolenaar 
6395a7189f8SMarcel Moolenaar 	addr = __ppc_ba(bsh, ofs);
6405a7189f8SMarcel Moolenaar 	__asm __volatile("stwbrx %0, 0, %1" :: "r"(val), "r"(addr));
64113d47f30SNathan Whitehorn 	powerpc_iomb();
6425a7189f8SMarcel Moolenaar 	CTR4(KTR_LE_IO, "%s(bsh=%#x, ofs=%#x, val=%#x)", __func__, bsh, ofs, val);
643de2fa7b8SMarcel Moolenaar }
644de2fa7b8SMarcel Moolenaar 
645de2fa7b8SMarcel Moolenaar static void
swapped_bs_ws_8(bus_space_handle_t bsh,bus_size_t ofs,uint64_t val)64688e3d5dfSBrandon Bergren swapped_bs_ws_8(bus_space_handle_t bsh, bus_size_t ofs, uint64_t val)
647de2fa7b8SMarcel Moolenaar {
648f7b509a1SWojciech Macek 	volatile uint64_t *addr;
649f7b509a1SWojciech Macek 
650f7b509a1SWojciech Macek 	addr = __ppc_ba(bsh, ofs);
651f7b509a1SWojciech Macek 	*addr = htole64(val);
652f7b509a1SWojciech Macek 	powerpc_iomb();
653f7b509a1SWojciech Macek 	CTR4(KTR_LE_IO, "%s(bsh=%#x, ofs=%#x, val=%#x)", __func__, bsh, ofs, val);
654de2fa7b8SMarcel Moolenaar }
655de2fa7b8SMarcel Moolenaar 
656de2fa7b8SMarcel Moolenaar static void
swapped_bs_wm_1(bus_space_handle_t bsh,bus_size_t ofs,const uint8_t * addr,bus_size_t cnt)65788e3d5dfSBrandon Bergren swapped_bs_wm_1(bus_space_handle_t bsh, bus_size_t ofs, const uint8_t *addr,
658de2fa7b8SMarcel Moolenaar     bus_size_t cnt)
659de2fa7b8SMarcel Moolenaar {
660de2fa7b8SMarcel Moolenaar 	outs8(__ppc_ba(bsh, ofs), addr, cnt);
661de2fa7b8SMarcel Moolenaar }
662de2fa7b8SMarcel Moolenaar 
663de2fa7b8SMarcel Moolenaar static void
swapped_bs_wm_2(bus_space_handle_t bsh,bus_size_t ofs,const uint16_t * addr,bus_size_t cnt)66488e3d5dfSBrandon Bergren swapped_bs_wm_2(bus_space_handle_t bsh, bus_size_t ofs, const uint16_t *addr,
665de2fa7b8SMarcel Moolenaar     bus_size_t cnt)
666de2fa7b8SMarcel Moolenaar {
667de2fa7b8SMarcel Moolenaar 	outs16rb(__ppc_ba(bsh, ofs), addr, cnt);
668de2fa7b8SMarcel Moolenaar }
669de2fa7b8SMarcel Moolenaar 
670de2fa7b8SMarcel Moolenaar static void
swapped_bs_wm_4(bus_space_handle_t bsh,bus_size_t ofs,const uint32_t * addr,bus_size_t cnt)67188e3d5dfSBrandon Bergren swapped_bs_wm_4(bus_space_handle_t bsh, bus_size_t ofs, const uint32_t *addr,
672de2fa7b8SMarcel Moolenaar     bus_size_t cnt)
673de2fa7b8SMarcel Moolenaar {
674de2fa7b8SMarcel Moolenaar 	outs32rb(__ppc_ba(bsh, ofs), addr, cnt);
675de2fa7b8SMarcel Moolenaar }
676de2fa7b8SMarcel Moolenaar 
677de2fa7b8SMarcel Moolenaar static void
swapped_bs_wm_8(bus_space_handle_t bsh,bus_size_t ofs,const uint64_t * addr,bus_size_t cnt)67888e3d5dfSBrandon Bergren swapped_bs_wm_8(bus_space_handle_t bsh, bus_size_t ofs, const uint64_t *addr,
679de2fa7b8SMarcel Moolenaar     bus_size_t cnt)
680de2fa7b8SMarcel Moolenaar {
681de2fa7b8SMarcel Moolenaar 	TODO;
682de2fa7b8SMarcel Moolenaar }
683de2fa7b8SMarcel Moolenaar 
684de2fa7b8SMarcel Moolenaar static void
swapped_bs_wr_1(bus_space_handle_t bsh,bus_size_t ofs,const uint8_t * addr,size_t cnt)68588e3d5dfSBrandon Bergren swapped_bs_wr_1(bus_space_handle_t bsh, bus_size_t ofs, const uint8_t *addr,
686de2fa7b8SMarcel Moolenaar     size_t cnt)
687de2fa7b8SMarcel Moolenaar {
688de2fa7b8SMarcel Moolenaar 	volatile uint8_t *d = __ppc_ba(bsh, ofs);
689de2fa7b8SMarcel Moolenaar 
690de2fa7b8SMarcel Moolenaar 	while (cnt--)
691de2fa7b8SMarcel Moolenaar 		*d++ = *addr++;
69213d47f30SNathan Whitehorn 	powerpc_iomb();
693de2fa7b8SMarcel Moolenaar }
694de2fa7b8SMarcel Moolenaar 
695de2fa7b8SMarcel Moolenaar static void
swapped_bs_wr_2(bus_space_handle_t bsh,bus_size_t ofs,const uint16_t * addr,size_t cnt)69688e3d5dfSBrandon Bergren swapped_bs_wr_2(bus_space_handle_t bsh, bus_size_t ofs, const uint16_t *addr,
697de2fa7b8SMarcel Moolenaar     size_t cnt)
698de2fa7b8SMarcel Moolenaar {
699de2fa7b8SMarcel Moolenaar 	volatile uint16_t *d = __ppc_ba(bsh, ofs);
700de2fa7b8SMarcel Moolenaar 
701de2fa7b8SMarcel Moolenaar 	while (cnt--)
702de2fa7b8SMarcel Moolenaar 		out16rb(d++, *addr++);
70313d47f30SNathan Whitehorn 	powerpc_iomb();
704de2fa7b8SMarcel Moolenaar }
705de2fa7b8SMarcel Moolenaar 
706de2fa7b8SMarcel Moolenaar static void
swapped_bs_wr_4(bus_space_handle_t bsh,bus_size_t ofs,const uint32_t * addr,size_t cnt)70788e3d5dfSBrandon Bergren swapped_bs_wr_4(bus_space_handle_t bsh, bus_size_t ofs, const uint32_t *addr,
708de2fa7b8SMarcel Moolenaar     size_t cnt)
709de2fa7b8SMarcel Moolenaar {
710de2fa7b8SMarcel Moolenaar 	volatile uint32_t *d = __ppc_ba(bsh, ofs);
711de2fa7b8SMarcel Moolenaar 
712de2fa7b8SMarcel Moolenaar 	while (cnt--)
713de2fa7b8SMarcel Moolenaar 		out32rb(d++, *addr++);
71413d47f30SNathan Whitehorn 	powerpc_iomb();
715de2fa7b8SMarcel Moolenaar }
716de2fa7b8SMarcel Moolenaar 
717de2fa7b8SMarcel Moolenaar static void
swapped_bs_wr_8(bus_space_handle_t bsh,bus_size_t ofs,const uint64_t * addr,size_t cnt)71888e3d5dfSBrandon Bergren swapped_bs_wr_8(bus_space_handle_t bsh, bus_size_t ofs, const uint64_t *addr,
719de2fa7b8SMarcel Moolenaar     size_t cnt)
720de2fa7b8SMarcel Moolenaar {
721de2fa7b8SMarcel Moolenaar 	TODO;
722de2fa7b8SMarcel Moolenaar }
723de2fa7b8SMarcel Moolenaar 
724de2fa7b8SMarcel Moolenaar static void
swapped_bs_sm_1(bus_space_handle_t bsh,bus_size_t ofs,uint8_t val,size_t cnt)72588e3d5dfSBrandon Bergren swapped_bs_sm_1(bus_space_handle_t bsh, bus_size_t ofs, uint8_t val, size_t cnt)
726de2fa7b8SMarcel Moolenaar {
727de2fa7b8SMarcel Moolenaar 	volatile uint8_t *d = __ppc_ba(bsh, ofs);
728de2fa7b8SMarcel Moolenaar 
729de2fa7b8SMarcel Moolenaar 	while (cnt--)
730de2fa7b8SMarcel Moolenaar 		*d = val;
73113d47f30SNathan Whitehorn 	powerpc_iomb();
732de2fa7b8SMarcel Moolenaar }
733de2fa7b8SMarcel Moolenaar 
734de2fa7b8SMarcel Moolenaar static void
swapped_bs_sm_2(bus_space_handle_t bsh,bus_size_t ofs,uint16_t val,size_t cnt)73588e3d5dfSBrandon Bergren swapped_bs_sm_2(bus_space_handle_t bsh, bus_size_t ofs, uint16_t val, size_t cnt)
736de2fa7b8SMarcel Moolenaar {
737de2fa7b8SMarcel Moolenaar 	volatile uint16_t *d = __ppc_ba(bsh, ofs);
738de2fa7b8SMarcel Moolenaar 
739de2fa7b8SMarcel Moolenaar 	while (cnt--)
740de2fa7b8SMarcel Moolenaar 		out16rb(d, val);
74113d47f30SNathan Whitehorn 	powerpc_iomb();
742de2fa7b8SMarcel Moolenaar }
743de2fa7b8SMarcel Moolenaar 
744de2fa7b8SMarcel Moolenaar static void
swapped_bs_sm_4(bus_space_handle_t bsh,bus_size_t ofs,uint32_t val,size_t cnt)74588e3d5dfSBrandon Bergren swapped_bs_sm_4(bus_space_handle_t bsh, bus_size_t ofs, uint32_t val, size_t cnt)
746de2fa7b8SMarcel Moolenaar {
747de2fa7b8SMarcel Moolenaar 	volatile uint32_t *d = __ppc_ba(bsh, ofs);
748de2fa7b8SMarcel Moolenaar 
749de2fa7b8SMarcel Moolenaar 	while (cnt--)
750de2fa7b8SMarcel Moolenaar 		out32rb(d, val);
75113d47f30SNathan Whitehorn 	powerpc_iomb();
752de2fa7b8SMarcel Moolenaar }
753de2fa7b8SMarcel Moolenaar 
754de2fa7b8SMarcel Moolenaar static void
swapped_bs_sm_8(bus_space_handle_t bsh,bus_size_t ofs,uint64_t val,size_t cnt)75588e3d5dfSBrandon Bergren swapped_bs_sm_8(bus_space_handle_t bsh, bus_size_t ofs, uint64_t val, size_t cnt)
756de2fa7b8SMarcel Moolenaar {
757de2fa7b8SMarcel Moolenaar 	TODO;
758de2fa7b8SMarcel Moolenaar }
759de2fa7b8SMarcel Moolenaar 
760de2fa7b8SMarcel Moolenaar static void
swapped_bs_sr_1(bus_space_handle_t bsh,bus_size_t ofs,uint8_t val,size_t cnt)76188e3d5dfSBrandon Bergren swapped_bs_sr_1(bus_space_handle_t bsh, bus_size_t ofs, uint8_t val, size_t cnt)
762de2fa7b8SMarcel Moolenaar {
763de2fa7b8SMarcel Moolenaar 	volatile uint8_t *d = __ppc_ba(bsh, ofs);
764de2fa7b8SMarcel Moolenaar 
765de2fa7b8SMarcel Moolenaar 	while (cnt--)
766de2fa7b8SMarcel Moolenaar 		*d++ = val;
76713d47f30SNathan Whitehorn 	powerpc_iomb();
768de2fa7b8SMarcel Moolenaar }
769de2fa7b8SMarcel Moolenaar 
770de2fa7b8SMarcel Moolenaar static void
swapped_bs_sr_2(bus_space_handle_t bsh,bus_size_t ofs,uint16_t val,size_t cnt)77188e3d5dfSBrandon Bergren swapped_bs_sr_2(bus_space_handle_t bsh, bus_size_t ofs, uint16_t val, size_t cnt)
772de2fa7b8SMarcel Moolenaar {
773de2fa7b8SMarcel Moolenaar 	volatile uint16_t *d = __ppc_ba(bsh, ofs);
774de2fa7b8SMarcel Moolenaar 
775de2fa7b8SMarcel Moolenaar 	while (cnt--)
776de2fa7b8SMarcel Moolenaar 		out16rb(d++, val);
77713d47f30SNathan Whitehorn 	powerpc_iomb();
778de2fa7b8SMarcel Moolenaar }
779de2fa7b8SMarcel Moolenaar 
780de2fa7b8SMarcel Moolenaar static void
swapped_bs_sr_4(bus_space_handle_t bsh,bus_size_t ofs,uint32_t val,size_t cnt)78188e3d5dfSBrandon Bergren swapped_bs_sr_4(bus_space_handle_t bsh, bus_size_t ofs, uint32_t val, size_t cnt)
782de2fa7b8SMarcel Moolenaar {
783de2fa7b8SMarcel Moolenaar 	volatile uint32_t *d = __ppc_ba(bsh, ofs);
784de2fa7b8SMarcel Moolenaar 
785de2fa7b8SMarcel Moolenaar 	while (cnt--)
786de2fa7b8SMarcel Moolenaar 		out32rb(d++, val);
78713d47f30SNathan Whitehorn 	powerpc_iomb();
788de2fa7b8SMarcel Moolenaar }
789de2fa7b8SMarcel Moolenaar 
790de2fa7b8SMarcel Moolenaar static void
swapped_bs_sr_8(bus_space_handle_t bsh,bus_size_t ofs,uint64_t val,size_t cnt)79188e3d5dfSBrandon Bergren swapped_bs_sr_8(bus_space_handle_t bsh, bus_size_t ofs, uint64_t val, size_t cnt)
792de2fa7b8SMarcel Moolenaar {
793de2fa7b8SMarcel Moolenaar 	TODO;
794de2fa7b8SMarcel Moolenaar }
795de2fa7b8SMarcel Moolenaar 
796edf21519SBrandon Bergren #if BYTE_ORDER == LITTLE_ENDIAN
797edf21519SBrandon Bergren struct bus_space bs_le_tag = {
798edf21519SBrandon Bergren #else
799de2fa7b8SMarcel Moolenaar struct bus_space bs_be_tag = {
800edf21519SBrandon Bergren #endif
801de2fa7b8SMarcel Moolenaar 	/* mapping/unmapping */
802e44d8673SBrandon Bergren 	.bs_map =	bs_gen_map,
803e44d8673SBrandon Bergren 	.bs_unmap =	bs_gen_unmap,
804e44d8673SBrandon Bergren 	.bs_subregion =	bs_gen_subregion,
805de2fa7b8SMarcel Moolenaar 
806de2fa7b8SMarcel Moolenaar 	/* allocation/deallocation */
807e44d8673SBrandon Bergren 	.bs_alloc =	bs_gen_alloc,
808e44d8673SBrandon Bergren 	.bs_free =	bs_gen_free,
809de2fa7b8SMarcel Moolenaar 
810de2fa7b8SMarcel Moolenaar 	/* barrier */
811e44d8673SBrandon Bergren 	.bs_barrier =	bs_gen_barrier,
812de2fa7b8SMarcel Moolenaar 
813de2fa7b8SMarcel Moolenaar 	/* read (single) */
814e44d8673SBrandon Bergren 	.bs_r_1 =	native_bs_rs_1,
815e44d8673SBrandon Bergren 	.bs_r_2 =	native_bs_rs_2,
816e44d8673SBrandon Bergren 	.bs_r_4 =	native_bs_rs_4,
817e44d8673SBrandon Bergren 	.bs_r_8 =	native_bs_rs_8,
818de2fa7b8SMarcel Moolenaar 
819e44d8673SBrandon Bergren 	/* read (single) stream */
820e44d8673SBrandon Bergren 	.bs_r_s_2 =	native_bs_rs_2,
821e44d8673SBrandon Bergren 	.bs_r_s_4 =	native_bs_rs_4,
822e44d8673SBrandon Bergren 	.bs_r_s_8 =	native_bs_rs_8,
823de2fa7b8SMarcel Moolenaar 
824de2fa7b8SMarcel Moolenaar 	/* read multiple */
825e44d8673SBrandon Bergren 	.bs_rm_1 =	native_bs_rm_1,
826e44d8673SBrandon Bergren 	.bs_rm_2 =	native_bs_rm_2,
827e44d8673SBrandon Bergren 	.bs_rm_4 =	native_bs_rm_4,
828e44d8673SBrandon Bergren 	.bs_rm_8 =	native_bs_rm_8,
829de2fa7b8SMarcel Moolenaar 
830e44d8673SBrandon Bergren 	/* read multiple stream */
831e44d8673SBrandon Bergren 	.bs_rm_s_2 =	native_bs_rm_2,
832e44d8673SBrandon Bergren 	.bs_rm_s_4 =	native_bs_rm_4,
833e44d8673SBrandon Bergren 	.bs_rm_s_8 =	native_bs_rm_8,
834de2fa7b8SMarcel Moolenaar 
835de2fa7b8SMarcel Moolenaar 	/* read region */
836e44d8673SBrandon Bergren 	.bs_rr_1 =	native_bs_rr_1,
837e44d8673SBrandon Bergren 	.bs_rr_2 =	native_bs_rr_2,
838e44d8673SBrandon Bergren 	.bs_rr_4 =	native_bs_rr_4,
839e44d8673SBrandon Bergren 	.bs_rr_8 =	native_bs_rr_8,
840de2fa7b8SMarcel Moolenaar 
841e44d8673SBrandon Bergren 	/* read region stream */
842e44d8673SBrandon Bergren 	.bs_rr_s_2 =	native_bs_rr_2,
843e44d8673SBrandon Bergren 	.bs_rr_s_4 =	native_bs_rr_4,
844e44d8673SBrandon Bergren 	.bs_rr_s_8 =	native_bs_rr_8,
845de2fa7b8SMarcel Moolenaar 
846de2fa7b8SMarcel Moolenaar 	/* write (single) */
847e44d8673SBrandon Bergren 	.bs_w_1 =	native_bs_ws_1,
848e44d8673SBrandon Bergren 	.bs_w_2 =	native_bs_ws_2,
849e44d8673SBrandon Bergren 	.bs_w_4 =	native_bs_ws_4,
850e44d8673SBrandon Bergren 	.bs_w_8 =	native_bs_ws_8,
851de2fa7b8SMarcel Moolenaar 
852e44d8673SBrandon Bergren 	/* write (single) stream */
853e44d8673SBrandon Bergren 	.bs_w_s_2 =	native_bs_ws_2,
854e44d8673SBrandon Bergren 	.bs_w_s_4 =	native_bs_ws_4,
855e44d8673SBrandon Bergren 	.bs_w_s_8 =	native_bs_ws_8,
856de2fa7b8SMarcel Moolenaar 
857de2fa7b8SMarcel Moolenaar 	/* write multiple */
858e44d8673SBrandon Bergren 	.bs_wm_1 =	native_bs_wm_1,
859e44d8673SBrandon Bergren 	.bs_wm_2 =	native_bs_wm_2,
860e44d8673SBrandon Bergren 	.bs_wm_4 =	native_bs_wm_4,
861e44d8673SBrandon Bergren 	.bs_wm_8 =	native_bs_wm_8,
862de2fa7b8SMarcel Moolenaar 
863e44d8673SBrandon Bergren 	/* write multiple stream */
864e44d8673SBrandon Bergren 	.bs_wm_s_2 =	native_bs_wm_2,
865e44d8673SBrandon Bergren 	.bs_wm_s_4 =	native_bs_wm_4,
866e44d8673SBrandon Bergren 	.bs_wm_s_8 =	native_bs_wm_8,
867de2fa7b8SMarcel Moolenaar 
868de2fa7b8SMarcel Moolenaar 	/* write region */
869e44d8673SBrandon Bergren 	.bs_wr_1 =	native_bs_wr_1,
870e44d8673SBrandon Bergren 	.bs_wr_2 =	native_bs_wr_2,
871e44d8673SBrandon Bergren 	.bs_wr_4 =	native_bs_wr_4,
872e44d8673SBrandon Bergren 	.bs_wr_8 =	native_bs_wr_8,
873de2fa7b8SMarcel Moolenaar 
874e44d8673SBrandon Bergren 	/* write region stream */
875e44d8673SBrandon Bergren 	.bs_wr_s_2 =	native_bs_wr_2,
876e44d8673SBrandon Bergren 	.bs_wr_s_4 =	native_bs_wr_4,
877e44d8673SBrandon Bergren 	.bs_wr_s_8 =	native_bs_wr_8,
878de2fa7b8SMarcel Moolenaar 
879de2fa7b8SMarcel Moolenaar 	/* set multiple */
880e44d8673SBrandon Bergren 	.bs_sm_1 =	native_bs_sm_1,
881e44d8673SBrandon Bergren 	.bs_sm_2 =	native_bs_sm_2,
882e44d8673SBrandon Bergren 	.bs_sm_4 =	native_bs_sm_4,
883e44d8673SBrandon Bergren 	.bs_sm_8 =	native_bs_sm_8,
884de2fa7b8SMarcel Moolenaar 
885e44d8673SBrandon Bergren 	/* set multiple stream */
886e44d8673SBrandon Bergren 	.bs_sm_s_2 =	native_bs_sm_2,
887e44d8673SBrandon Bergren 	.bs_sm_s_4 =	native_bs_sm_4,
888e44d8673SBrandon Bergren 	.bs_sm_s_8 =	native_bs_sm_8,
889de2fa7b8SMarcel Moolenaar 
890de2fa7b8SMarcel Moolenaar 	/* set region */
891e44d8673SBrandon Bergren 	.bs_sr_1 =	native_bs_sr_1,
892e44d8673SBrandon Bergren 	.bs_sr_2 =	native_bs_sr_2,
893e44d8673SBrandon Bergren 	.bs_sr_4 =	native_bs_sr_4,
894e44d8673SBrandon Bergren 	.bs_sr_8 =	native_bs_sr_8,
895de2fa7b8SMarcel Moolenaar 
896e44d8673SBrandon Bergren 	/* set region stream */
897e44d8673SBrandon Bergren 	.bs_sr_s_2 =	native_bs_sr_2,
898e44d8673SBrandon Bergren 	.bs_sr_s_4 =	native_bs_sr_4,
899e44d8673SBrandon Bergren 	.bs_sr_s_8 =	native_bs_sr_8,
900e44d8673SBrandon Bergren 
901e44d8673SBrandon Bergren 	/* copy region */
902e44d8673SBrandon Bergren 	.bs_cr_1 =	NULL, /* UNIMPLEMENTED */
903e44d8673SBrandon Bergren 	.bs_cr_2 =	NULL, /* UNIMPLEMENTED */
904e44d8673SBrandon Bergren 	.bs_cr_4 =	NULL, /* UNIMPLEMENTED */
905e44d8673SBrandon Bergren 	.bs_cr_8 =	NULL, /* UNIMPLEMENTED */
906e44d8673SBrandon Bergren 
907e44d8673SBrandon Bergren 	/* copy region stream */
908e44d8673SBrandon Bergren 	.bs_cr_s_2 =	NULL, /* UNIMPLEMENTED */
909e44d8673SBrandon Bergren 	.bs_cr_s_4 =	NULL, /* UNIMPLEMENTED */
910e44d8673SBrandon Bergren 	.bs_cr_s_8 =	NULL, /* UNIMPLEMENTED */
911de2fa7b8SMarcel Moolenaar };
912de2fa7b8SMarcel Moolenaar 
913edf21519SBrandon Bergren #if BYTE_ORDER == LITTLE_ENDIAN
914edf21519SBrandon Bergren struct bus_space bs_be_tag = {
915edf21519SBrandon Bergren #else
916de2fa7b8SMarcel Moolenaar struct bus_space bs_le_tag = {
917edf21519SBrandon Bergren #endif
918de2fa7b8SMarcel Moolenaar 	/* mapping/unmapping */
919e44d8673SBrandon Bergren 	.bs_map =	bs_gen_map,
920e44d8673SBrandon Bergren 	.bs_unmap =	bs_gen_unmap,
921e44d8673SBrandon Bergren 	.bs_subregion =	bs_gen_subregion,
922de2fa7b8SMarcel Moolenaar 
923de2fa7b8SMarcel Moolenaar 	/* allocation/deallocation */
924e44d8673SBrandon Bergren 	.bs_alloc =	bs_gen_alloc,
925e44d8673SBrandon Bergren 	.bs_free =	bs_gen_free,
926de2fa7b8SMarcel Moolenaar 
927de2fa7b8SMarcel Moolenaar 	/* barrier */
928e44d8673SBrandon Bergren 	.bs_barrier =	bs_gen_barrier,
929de2fa7b8SMarcel Moolenaar 
930de2fa7b8SMarcel Moolenaar 	/* read (single) */
931e44d8673SBrandon Bergren 	.bs_r_1 =	swapped_bs_rs_1,
932e44d8673SBrandon Bergren 	.bs_r_2 =	swapped_bs_rs_2,
933e44d8673SBrandon Bergren 	.bs_r_4 =	swapped_bs_rs_4,
934e44d8673SBrandon Bergren 	.bs_r_8 =	swapped_bs_rs_8,
935de2fa7b8SMarcel Moolenaar 
936e44d8673SBrandon Bergren 	/* read (single) stream */
937e44d8673SBrandon Bergren 	.bs_r_s_2 =	native_bs_rs_2,
938e44d8673SBrandon Bergren 	.bs_r_s_4 =	native_bs_rs_4,
939e44d8673SBrandon Bergren 	.bs_r_s_8 =	native_bs_rs_8,
940de2fa7b8SMarcel Moolenaar 
941de2fa7b8SMarcel Moolenaar 	/* read multiple */
942e44d8673SBrandon Bergren 	.bs_rm_1 =	swapped_bs_rm_1,
943e44d8673SBrandon Bergren 	.bs_rm_2 =	swapped_bs_rm_2,
944e44d8673SBrandon Bergren 	.bs_rm_4 =	swapped_bs_rm_4,
945e44d8673SBrandon Bergren 	.bs_rm_8 =	swapped_bs_rm_8,
946de2fa7b8SMarcel Moolenaar 
947e44d8673SBrandon Bergren 	/* read multiple stream */
948e44d8673SBrandon Bergren 	.bs_rm_s_2 =	native_bs_rm_2,
949e44d8673SBrandon Bergren 	.bs_rm_s_4 =	native_bs_rm_4,
950e44d8673SBrandon Bergren 	.bs_rm_s_8 =	native_bs_rm_8,
951de2fa7b8SMarcel Moolenaar 
952de2fa7b8SMarcel Moolenaar 	/* read region */
953e44d8673SBrandon Bergren 	.bs_rr_1 =	swapped_bs_rr_1,
954e44d8673SBrandon Bergren 	.bs_rr_2 =	swapped_bs_rr_2,
955e44d8673SBrandon Bergren 	.bs_rr_4 =	swapped_bs_rr_4,
956e44d8673SBrandon Bergren 	.bs_rr_8 =	swapped_bs_rr_8,
957de2fa7b8SMarcel Moolenaar 
958e44d8673SBrandon Bergren 	/* read region stream */
959e44d8673SBrandon Bergren 	.bs_rr_s_2 =	native_bs_rr_2,
960e44d8673SBrandon Bergren 	.bs_rr_s_4 =	native_bs_rr_4,
961e44d8673SBrandon Bergren 	.bs_rr_s_8 =	native_bs_rr_8,
962de2fa7b8SMarcel Moolenaar 
963de2fa7b8SMarcel Moolenaar 	/* write (single) */
964e44d8673SBrandon Bergren 	.bs_w_1 =	swapped_bs_ws_1,
965e44d8673SBrandon Bergren 	.bs_w_2 =	swapped_bs_ws_2,
966e44d8673SBrandon Bergren 	.bs_w_4 =	swapped_bs_ws_4,
967e44d8673SBrandon Bergren 	.bs_w_8 =	swapped_bs_ws_8,
968de2fa7b8SMarcel Moolenaar 
969e44d8673SBrandon Bergren 	/* write (single) stream */
970e44d8673SBrandon Bergren 	.bs_w_s_2 =	native_bs_ws_2,
971e44d8673SBrandon Bergren 	.bs_w_s_4 =	native_bs_ws_4,
972e44d8673SBrandon Bergren 	.bs_w_s_8 =	native_bs_ws_8,
973de2fa7b8SMarcel Moolenaar 
974de2fa7b8SMarcel Moolenaar 	/* write multiple */
975e44d8673SBrandon Bergren 	.bs_wm_1 =	swapped_bs_wm_1,
976e44d8673SBrandon Bergren 	.bs_wm_2 =	swapped_bs_wm_2,
977e44d8673SBrandon Bergren 	.bs_wm_4 =	swapped_bs_wm_4,
978e44d8673SBrandon Bergren 	.bs_wm_8 =	swapped_bs_wm_8,
979de2fa7b8SMarcel Moolenaar 
980e44d8673SBrandon Bergren 	/* write multiple stream */
981e44d8673SBrandon Bergren 	.bs_wm_s_2 =	native_bs_wm_2,
982e44d8673SBrandon Bergren 	.bs_wm_s_4 =	native_bs_wm_4,
983e44d8673SBrandon Bergren 	.bs_wm_s_8 =	native_bs_wm_8,
984de2fa7b8SMarcel Moolenaar 
985de2fa7b8SMarcel Moolenaar 	/* write region */
986e44d8673SBrandon Bergren 	.bs_wr_1 =	swapped_bs_wr_1,
987e44d8673SBrandon Bergren 	.bs_wr_2 =	swapped_bs_wr_2,
988e44d8673SBrandon Bergren 	.bs_wr_4 =	swapped_bs_wr_4,
989e44d8673SBrandon Bergren 	.bs_wr_8 =	swapped_bs_wr_8,
990de2fa7b8SMarcel Moolenaar 
991e44d8673SBrandon Bergren 	/* write region stream */
992e44d8673SBrandon Bergren 	.bs_wr_s_2 =	native_bs_wr_2,
993e44d8673SBrandon Bergren 	.bs_wr_s_4 =	native_bs_wr_4,
994e44d8673SBrandon Bergren 	.bs_wr_s_8 =	native_bs_wr_8,
995de2fa7b8SMarcel Moolenaar 
996de2fa7b8SMarcel Moolenaar 	/* set multiple */
997e44d8673SBrandon Bergren 	.bs_sm_1 =	swapped_bs_sm_1,
998e44d8673SBrandon Bergren 	.bs_sm_2 =	swapped_bs_sm_2,
999e44d8673SBrandon Bergren 	.bs_sm_4 =	swapped_bs_sm_4,
1000e44d8673SBrandon Bergren 	.bs_sm_8 =	swapped_bs_sm_8,
1001de2fa7b8SMarcel Moolenaar 
1002e44d8673SBrandon Bergren 	/* set multiple stream */
1003e44d8673SBrandon Bergren 	.bs_sm_s_2 =	native_bs_sm_2,
1004e44d8673SBrandon Bergren 	.bs_sm_s_4 =	native_bs_sm_4,
1005e44d8673SBrandon Bergren 	.bs_sm_s_8 =	native_bs_sm_8,
1006de2fa7b8SMarcel Moolenaar 
1007de2fa7b8SMarcel Moolenaar 	/* set region */
1008e44d8673SBrandon Bergren 	.bs_sr_1 =	swapped_bs_sr_1,
1009e44d8673SBrandon Bergren 	.bs_sr_2 =	swapped_bs_sr_2,
1010e44d8673SBrandon Bergren 	.bs_sr_4 =	swapped_bs_sr_4,
1011e44d8673SBrandon Bergren 	.bs_sr_8 =	swapped_bs_sr_8,
1012de2fa7b8SMarcel Moolenaar 
1013e44d8673SBrandon Bergren 	/* set region stream */
1014e44d8673SBrandon Bergren 	.bs_sr_s_2 =	native_bs_sr_2,
1015e44d8673SBrandon Bergren 	.bs_sr_s_4 =	native_bs_sr_4,
1016e44d8673SBrandon Bergren 	.bs_sr_s_8 =	native_bs_sr_8,
1017e44d8673SBrandon Bergren 
1018e44d8673SBrandon Bergren 	/* copy region */
1019e44d8673SBrandon Bergren 	.bs_cr_1 =	NULL, /* UNIMPLEMENTED */
1020e44d8673SBrandon Bergren 	.bs_cr_2 =	NULL, /* UNIMPLEMENTED */
1021e44d8673SBrandon Bergren 	.bs_cr_4 =	NULL, /* UNIMPLEMENTED */
1022e44d8673SBrandon Bergren 	.bs_cr_8 =	NULL, /* UNIMPLEMENTED */
1023e44d8673SBrandon Bergren 
1024e44d8673SBrandon Bergren 	/* copy region stream */
1025e44d8673SBrandon Bergren 	.bs_cr_s_2 =	NULL, /* UNIMPLEMENTED */
1026e44d8673SBrandon Bergren 	.bs_cr_s_4 =	NULL, /* UNIMPLEMENTED */
1027e44d8673SBrandon Bergren 	.bs_cr_s_8 =	NULL, /* UNIMPLEMENTED */
1028de2fa7b8SMarcel Moolenaar };
1029