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