Module Name: src Committed By: dyoung Date: Sun Jul 17 23:29:10 UTC 2011
Modified Files: src/sys/arch/sparc/include: types.h src/sys/arch/sparc/sparc: machdep.c src/sys/arch/sparc64/include: bus_defs.h bus_funcs.h src/sys/arch/sparc64/sparc64: machdep.c Removed Files: src/sys/arch/sparc/include: bus.h src/sys/arch/sparc64/include: bus.h Log Message: Switch sparc and sparc64 to new-style <sys/bus.h>. To generate a diff of this commit: cvs rdiff -u -r1.56 -r0 src/sys/arch/sparc/include/bus.h cvs rdiff -u -r1.59 -r1.60 src/sys/arch/sparc/include/types.h cvs rdiff -u -r1.312 -r1.313 src/sys/arch/sparc/sparc/machdep.c cvs rdiff -u -r1.61 -r0 src/sys/arch/sparc64/include/bus.h cvs rdiff -u -r1.1 -r1.2 src/sys/arch/sparc64/include/bus_defs.h \ src/sys/arch/sparc64/include/bus_funcs.h cvs rdiff -u -r1.260 -r1.261 src/sys/arch/sparc64/sparc64/machdep.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/sys/arch/sparc/include/types.h diff -u src/sys/arch/sparc/include/types.h:1.59 src/sys/arch/sparc/include/types.h:1.60 --- src/sys/arch/sparc/include/types.h:1.59 Sat Jun 18 18:51:17 2011 +++ src/sys/arch/sparc/include/types.h Sun Jul 17 23:29:10 2011 @@ -1,4 +1,4 @@ -/* $NetBSD: types.h,v 1.59 2011/06/18 18:51:17 nakayama Exp $ */ +/* $NetBSD: types.h,v 1.60 2011/07/17 23:29:10 dyoung Exp $ */ /* * Copyright (c) 1992, 1993 @@ -117,7 +117,7 @@ #endif /* _LOCORE */ -#define __HAVE_DEVICE_REGISTER +#define __HAVE_NEW_STYLE_BUS_H #define __HAVE_SYSCALL_INTERN #define __GENERIC_SOFT_INTERRUPTS_ALL_LEVELS #define __HAVE_CPU_DATA_FIRST Index: src/sys/arch/sparc/sparc/machdep.c diff -u src/sys/arch/sparc/sparc/machdep.c:1.312 src/sys/arch/sparc/sparc/machdep.c:1.313 --- src/sys/arch/sparc/sparc/machdep.c:1.312 Sat Jul 2 13:10:53 2011 +++ src/sys/arch/sparc/sparc/machdep.c Sun Jul 17 23:29:10 2011 @@ -1,4 +1,4 @@ -/* $NetBSD: machdep.c,v 1.312 2011/07/02 13:10:53 mrg Exp $ */ +/* $NetBSD: machdep.c,v 1.313 2011/07/17 23:29:10 dyoung Exp $ */ /*- * Copyright (c) 1996, 1997, 1998 The NetBSD Foundation, Inc. @@ -71,7 +71,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: machdep.c,v 1.312 2011/07/02 13:10:53 mrg Exp $"); +__KERNEL_RCSID(0, "$NetBSD: machdep.c,v 1.313 2011/07/17 23:29:10 dyoung Exp $"); #include "opt_compat_netbsd.h" #include "opt_compat_sunos.h" @@ -118,7 +118,7 @@ #define _SPARC_BUS_DMA_PRIVATE #include <machine/autoconf.h> -#include <machine/bus.h> +#include <sys/bus.h> #include <machine/frame.h> #include <machine/cpu.h> #include <machine/pcb.h> @@ -1863,6 +1863,892 @@ static void sparc_bus_barrier(bus_space_tag_t, bus_space_handle_t, bus_size_t, bus_size_t, int); +int +bus_space_map(t, a, s, f, hp) + bus_space_tag_t t; + bus_addr_t a; + bus_size_t s; + int f; + bus_space_handle_t *hp; +{ + return (*t->sparc_bus_map)(t, a, s, f, (vaddr_t)0, hp); +} + +int +bus_space_map2(t, a, s, f, v, hp) + bus_space_tag_t t; + bus_addr_t a; + bus_size_t s; + int f; + vaddr_t v; + bus_space_handle_t *hp; +{ + return (*t->sparc_bus_map)(t, a, s, f, v, hp); +} + +void +bus_space_unmap(t, h, s) + bus_space_tag_t t; + bus_space_handle_t h; + bus_size_t s; +{ + (*t->sparc_bus_unmap)(t, h, s); +} + +int +bus_space_subregion(t, h, o, s, hp) + bus_space_tag_t t; + bus_space_handle_t h; + bus_size_t o; + bus_size_t s; + bus_space_handle_t *hp; +{ + return (*t->sparc_bus_subregion)(t, h, o, s, hp); +} + +paddr_t +bus_space_mmap(t, a, o, p, f) + bus_space_tag_t t; + bus_addr_t a; + off_t o; + int p; + int f; +{ + return (*t->sparc_bus_mmap)(t, a, o, p, f); +} + +void * +bus_intr_establish(t, p, l, h, a) + bus_space_tag_t t; + int p; + int l; + int (*h)(void *); + void *a; +{ + return (*t->sparc_intr_establish)(t, p, l, h, a, NULL); +} + +void * +bus_intr_establish2(t, p, l, h, a, v) + bus_space_tag_t t; + int p; + int l; + int (*h)(void *); + void *a; + void (*v)(void); +{ + return (*t->sparc_intr_establish)(t, p, l, h, a, v); +} + +void +bus_space_barrier(t, h, o, s, f) + bus_space_tag_t t; + bus_space_handle_t h; + bus_size_t o; + bus_size_t s; + int f; +{ + (*t->sparc_bus_barrier)(t, h, o, s, f); +} + +void +bus_space_write_multi_stream_2(t, h, o, a, c) + bus_space_tag_t t; + bus_space_handle_t h; + bus_size_t o, c; + const uint16_t *a; +{ + while (c-- > 0) + bus_space_write_2_real(t, h, o, *a++); +} + +void +bus_space_write_multi_stream_4(t, h, o, a, c) + bus_space_tag_t t; + bus_space_handle_t h; + bus_size_t o, c; + const uint32_t *a; +{ + while (c-- > 0) + bus_space_write_4_real(t, h, o, *a++); +} + +void +bus_space_write_multi_stream_8(t, h, o, a, c) + bus_space_tag_t t; + bus_space_handle_t h; + bus_size_t o, c; + const uint64_t *a; +{ + while (c-- > 0) + bus_space_write_8_real(t, h, o, *a++); +} + + +/* + * void bus_space_set_multi_N(bus_space_tag_t tag, + * bus_space_handle_t bsh, bus_size_t offset, u_intN_t val, + * bus_size_t count); + * + * Write the 1, 2, 4, or 8 byte value `val' to bus space described + * by tag/handle/offset `count' times. + */ +void +bus_space_set_multi_1(t, h, o, v, c) + bus_space_tag_t t; + bus_space_handle_t h; + bus_size_t o, c; + const uint8_t v; +{ + while (c-- > 0) + bus_space_write_1(t, h, o, v); +} + +void +bus_space_set_multi_2(t, h, o, v, c) + bus_space_tag_t t; + bus_space_handle_t h; + bus_size_t o, c; + const uint16_t v; +{ + while (c-- > 0) + bus_space_write_2(t, h, o, v); +} + +void +bus_space_set_multi_4(t, h, o, v, c) + bus_space_tag_t t; + bus_space_handle_t h; + bus_size_t o, c; + const uint32_t v; +{ + while (c-- > 0) + bus_space_write_4(t, h, o, v); +} + +void +bus_space_set_multi_8(t, h, o, v, c) + bus_space_tag_t t; + bus_space_handle_t h; + bus_size_t o, c; + const uint64_t v; +{ + while (c-- > 0) + bus_space_write_8(t, h, o, v); +} + + +/* + * void bus_space_read_region_N(bus_space_tag_t tag, + * bus_space_handle_t bsh, bus_size_t off, + * u_intN_t *addr, bus_size_t count); + * + */ +void +bus_space_read_region_1(t, h, o, a, c) + bus_space_tag_t t; + bus_space_handle_t h; + bus_size_t o, c; + uint8_t *a; +{ + for (; c; a++, c--, o++) + *a = bus_space_read_1(t, h, o); +} + +void +bus_space_read_region_2(t, h, o, a, c) + bus_space_tag_t t; + bus_space_handle_t h; + bus_size_t o, c; + uint16_t *a; +{ + for (; c; a++, c--, o+=2) + *a = bus_space_read_2(t, h, o); +} + +void +bus_space_read_region_4(t, h, o, a, c) + bus_space_tag_t t; + bus_space_handle_t h; + bus_size_t o, c; + uint32_t *a; +{ + for (; c; a++, c--, o+=4) + *a = bus_space_read_4(t, h, o); +} + +void +bus_space_read_region_8(t, h, o, a, c) + bus_space_tag_t t; + bus_space_handle_t h; + bus_size_t o, c; + uint64_t *a; +{ + for (; c; a++, c--, o+=8) + *a = bus_space_read_8(t, h, o); +} + +/* + * void bus_space_write_region_N(bus_space_tag_t tag, + * bus_space_handle_t bsh, bus_size_t off, + * u_intN_t *addr, bus_size_t count); + * + */ +void +bus_space_write_region_1(t, h, o, a, c) + bus_space_tag_t t; + bus_space_handle_t h; + bus_size_t o, c; + const uint8_t *a; +{ + for (; c; a++, c--, o++) + bus_space_write_1(t, h, o, *a); +} + +void +bus_space_write_region_2(t, h, o, a, c) + bus_space_tag_t t; + bus_space_handle_t h; + bus_size_t o, c; + const uint16_t *a; +{ + for (; c; a++, c--, o+=2) + bus_space_write_2(t, h, o, *a); +} + +void +bus_space_write_region_4(t, h, o, a, c) + bus_space_tag_t t; + bus_space_handle_t h; + bus_size_t o, c; + const uint32_t *a; +{ + for (; c; a++, c--, o+=4) + bus_space_write_4(t, h, o, *a); +} + +void +bus_space_write_region_8(t, h, o, a, c) + bus_space_tag_t t; + bus_space_handle_t h; + bus_size_t o, c; + const uint64_t *a; +{ + for (; c; a++, c--, o+=8) + bus_space_write_8(t, h, o, *a); +} + + +/* + * void bus_space_set_region_N(bus_space_tag_t tag, + * bus_space_handle_t bsh, bus_size_t off, + * u_intN_t *addr, bus_size_t count); + * + */ +void +bus_space_set_region_1(t, h, o, v, c) + bus_space_tag_t t; + bus_space_handle_t h; + bus_size_t o, c; + const uint8_t v; +{ + for (; c; c--, o++) + bus_space_write_1(t, h, o, v); +} + +void +bus_space_set_region_2(t, h, o, v, c) + bus_space_tag_t t; + bus_space_handle_t h; + bus_size_t o, c; + const uint16_t v; +{ + for (; c; c--, o+=2) + bus_space_write_2(t, h, o, v); +} + +void +bus_space_set_region_4(t, h, o, v, c) + bus_space_tag_t t; + bus_space_handle_t h; + bus_size_t o, c; + const uint32_t v; +{ + for (; c; c--, o+=4) + bus_space_write_4(t, h, o, v); +} + +void +bus_space_set_region_8(t, h, o, v, c) + bus_space_tag_t t; + bus_space_handle_t h; + bus_size_t o, c; + const uint64_t v; +{ + for (; c; c--, o+=8) + bus_space_write_8(t, h, o, v); +} + + +/* + * void bus_space_copy_region_N(bus_space_tag_t tag, + * bus_space_handle_t bsh1, bus_size_t off1, + * bus_space_handle_t bsh2, bus_size_t off2, + * bus_size_t count); + * + * Copy `count' 1, 2, 4, or 8 byte values from bus space starting + * at tag/bsh1/off1 to bus space starting at tag/bsh2/off2. + */ +void +bus_space_copy_region_1(t, h1, o1, h2, o2, c) + bus_space_tag_t t; + bus_space_handle_t h1, h2; + bus_size_t o1, o2; + bus_size_t c; +{ + for (; c; c--, o1++, o2++) + bus_space_write_1(t, h1, o1, bus_space_read_1(t, h2, o2)); +} + +void +bus_space_copy_region_2(t, h1, o1, h2, o2, c) + bus_space_tag_t t; + bus_space_handle_t h1, h2; + bus_size_t o1, o2; + bus_size_t c; +{ + for (; c; c--, o1+=2, o2+=2) + bus_space_write_2(t, h1, o1, bus_space_read_2(t, h2, o2)); +} + +void +bus_space_copy_region_4(t, h1, o1, h2, o2, c) + bus_space_tag_t t; + bus_space_handle_t h1, h2; + bus_size_t o1, o2; + bus_size_t c; +{ + for (; c; c--, o1+=4, o2+=4) + bus_space_write_4(t, h1, o1, bus_space_read_4(t, h2, o2)); +} + +void +bus_space_copy_region_8(t, h1, o1, h2, o2, c) + bus_space_tag_t t; + bus_space_handle_t h1, h2; + bus_size_t o1, o2; + bus_size_t c; +{ + for (; c; c--, o1+=8, o2+=8) + bus_space_write_8(t, h1, o1, bus_space_read_8(t, h2, o2)); +} + +/* + * void bus_space_read_region_stream_N(bus_space_tag_t tag, + * bus_space_handle_t bsh, bus_size_t off, + * u_intN_t *addr, bus_size_t count); + * + */ +void +bus_space_read_region_stream_1(t, h, o, a, c) + bus_space_tag_t t; + bus_space_handle_t h; + bus_size_t o, c; + uint8_t *a; +{ + for (; c; a++, c--, o++) + *a = bus_space_read_stream_1(t, h, o); +} +void +bus_space_read_region_stream_2(t, h, o, a, c) + bus_space_tag_t t; + bus_space_handle_t h; + bus_size_t o, c; + uint16_t *a; +{ + for (; c; a++, c--, o+=2) + *a = bus_space_read_stream_2(t, h, o); + } +void +bus_space_read_region_stream_4(t, h, o, a, c) + bus_space_tag_t t; + bus_space_handle_t h; + bus_size_t o, c; + uint32_t *a; +{ + for (; c; a++, c--, o+=4) + *a = bus_space_read_stream_4(t, h, o); +} +void +bus_space_read_region_stream_8(t, h, o, a, c) + bus_space_tag_t t; + bus_space_handle_t h; + bus_size_t o, c; + uint64_t *a; +{ + for (; c; a++, c--, o+=8) + *a = bus_space_read_stream_8(t, h, o); +} + +/* + * void bus_space_write_region_stream_N(bus_space_tag_t tag, + * bus_space_handle_t bsh, bus_size_t off, + * u_intN_t *addr, bus_size_t count); + * + */ +void +bus_space_write_region_stream_1(t, h, o, a, c) + bus_space_tag_t t; + bus_space_handle_t h; + bus_size_t o, c; + const uint8_t *a; +{ + for (; c; a++, c--, o++) + bus_space_write_stream_1(t, h, o, *a); +} + +void +bus_space_write_region_stream_2(t, h, o, a, c) + bus_space_tag_t t; + bus_space_handle_t h; + bus_size_t o, c; + const uint16_t *a; +{ + for (; c; a++, c--, o+=2) + bus_space_write_stream_2(t, h, o, *a); +} + +void +bus_space_write_region_stream_4(t, h, o, a, c) + bus_space_tag_t t; + bus_space_handle_t h; + bus_size_t o, c; + const uint32_t *a; +{ + for (; c; a++, c--, o+=4) + bus_space_write_stream_4(t, h, o, *a); +} + +void +bus_space_write_region_stream_8(t, h, o, a, c) + bus_space_tag_t t; + bus_space_handle_t h; + bus_size_t o, c; + const uint64_t *a; +{ + for (; c; a++, c--, o+=8) + bus_space_write_stream_8(t, h, o, *a); +} + + +/* + * void bus_space_set_region_stream_N(bus_space_tag_t tag, + * bus_space_handle_t bsh, bus_size_t off, + * u_intN_t *addr, bus_size_t count); + * + */ +void +bus_space_set_region_stream_1(t, h, o, v, c) + bus_space_tag_t t; + bus_space_handle_t h; + bus_size_t o, c; + const uint8_t v; +{ + for (; c; c--, o++) + bus_space_write_stream_1(t, h, o, v); +} + +void +bus_space_set_region_stream_2(t, h, o, v, c) + bus_space_tag_t t; + bus_space_handle_t h; + bus_size_t o, c; + const uint16_t v; +{ + for (; c; c--, o+=2) + bus_space_write_stream_2(t, h, o, v); +} + +void +bus_space_set_region_stream_4(t, h, o, v, c) + bus_space_tag_t t; + bus_space_handle_t h; + bus_size_t o, c; + const uint32_t v; +{ + for (; c; c--, o+=4) + bus_space_write_stream_4(t, h, o, v); +} + +void +bus_space_set_region_stream_8(t, h, o, v, c) + bus_space_tag_t t; + bus_space_handle_t h; + bus_size_t o, c; + const uint64_t v; +{ + for (; c; c--, o+=8) + bus_space_write_stream_8(t, h, o, v); +} + +/* + * void bus_space_copy_region_stream_N(bus_space_tag_t tag, + * bus_space_handle_t bsh1, bus_size_t off1, + * bus_space_handle_t bsh2, bus_size_t off2, + * bus_size_t count); + * + * Copy `count' 1, 2, 4, or 8 byte values from bus space starting + * at tag/bsh1/off1 to bus space starting at tag/bsh2/off2. + */ + +void +bus_space_copy_region_stream_1(t, h1, o1, h2, o2, c) + bus_space_tag_t t; + bus_space_handle_t h1, h2; + bus_size_t o1, o2; + bus_size_t c; +{ + for (; c; c--, o1++, o2++) + bus_space_write_stream_1(t, h1, o1, bus_space_read_stream_1(t, h2, o2)); +} + +void +bus_space_copy_region_stream_2(t, h1, o1, h2, o2, c) + bus_space_tag_t t; + bus_space_handle_t h1, h2; + bus_size_t o1, o2; + bus_size_t c; +{ + for (; c; c--, o1+=2, o2+=2) + bus_space_write_stream_2(t, h1, o1, bus_space_read_stream_2(t, h2, o2)); +} + +void +bus_space_copy_region_stream_4(t, h1, o1, h2, o2, c) + bus_space_tag_t t; + bus_space_handle_t h1, h2; + bus_size_t o1, o2; + bus_size_t c; +{ + for (; c; c--, o1+=4, o2+=4) + bus_space_write_stream_4(t, h1, o1, bus_space_read_stream_4(t, h2, o2)); +} + +void +bus_space_copy_region_stream_8(t, h1, o1, h2, o2, c) + bus_space_tag_t t; + bus_space_handle_t h1, h2; + bus_size_t o1, o2; + bus_size_t c; +{ + for (; c; c--, o1+=8, o2+=8) + bus_space_write_stream_8(t, h1, o1, bus_space_read_8(t, h2, o2)); +} + +void +bus_space_write_1(t, h, o, v) + bus_space_tag_t t; + bus_space_handle_t h; + bus_size_t o; + uint8_t v; +{ + (*t->sparc_write_1)(t, h, o, v); +} + +void +bus_space_write_2(t, h, o, v) + bus_space_tag_t t; + bus_space_handle_t h; + bus_size_t o; + uint16_t v; +{ + (*t->sparc_write_2)(t, h, o, v); +} + +void +bus_space_write_4(t, h, o, v) + bus_space_tag_t t; + bus_space_handle_t h; + bus_size_t o; + uint32_t v; +{ + (*t->sparc_write_4)(t, h, o, v); +} + +void +bus_space_write_8(t, h, o, v) + bus_space_tag_t t; + bus_space_handle_t h; + bus_size_t o; + uint64_t v; +{ + (*t->sparc_write_8)(t, h, o, v); +} + +#if __SLIM_SPARC_BUS_SPACE + +void +bus_space_write_1(t, h, o, v) + bus_space_tag_t t; + bus_space_handle_t h; + bus_size_t o; + uint8_t v; +{ + __insn_barrier(); + bus_space_write_1_real(t, h, o, v); +} + +void +bus_space_write_2(t, h, o, v) + bus_space_tag_t t; + bus_space_handle_t h; + bus_size_t o; + uint16_t v; +{ + __insn_barrier(); + bus_space_write_2_real(t, h, o, v); +} + +void +bus_space_write_4(t, h, o, v) + bus_space_tag_t t; + bus_space_handle_t h; + bus_size_t o; + uint32_t v; +{ + __insn_barrier(); + bus_space_write_4_real(t, h, o, v); +} + +void +bus_space_write_8(t, h, o, v) + bus_space_tag_t t; + bus_space_handle_t h; + bus_size_t o; + uint64_t v; +{ + __insn_barrier(); + bus_space_write_8_real(t, h, o, v); +} + +#endif /* __SLIM_SPARC_BUS_SPACE */ + +uint8_t +bus_space_read_1(t, h, o) + bus_space_tag_t t; + bus_space_handle_t h; + bus_size_t o; +{ + return (*t->sparc_read_1)(t, h, o); +} + +uint16_t +bus_space_read_2(t, h, o) + bus_space_tag_t t; + bus_space_handle_t h; + bus_size_t o; +{ + return (*t->sparc_read_2)(t, h, o); +} + +uint32_t +bus_space_read_4(t, h, o) + bus_space_tag_t t; + bus_space_handle_t h; + bus_size_t o; +{ + return (*t->sparc_read_4)(t, h, o); +} + +uint64_t +bus_space_read_8(t, h, o) + bus_space_tag_t t; + bus_space_handle_t h; + bus_size_t o; +{ + return (*t->sparc_read_8)(t, h, o); +} + +#if __SLIM_SPARC_BUS_SPACE +uint8_t +bus_space_read_1(t, h, o) + bus_space_tag_t t; + bus_space_handle_t h; + bus_size_t o; +{ + __insn_barrier(); + return bus_space_read_1_real(t, h, o); +} + +uint16_t +bus_space_read_2(t, h, o) + bus_space_tag_t t; + bus_space_handle_t h; + bus_size_t o; +{ + __insn_barrier(); + return bus_space_read_2_real(t, h, o); +} + +uint32_t +bus_space_read_4(t, h, o) + bus_space_tag_t t; + bus_space_handle_t h; + bus_size_t o; +{ + __insn_barrier(); + return bus_space_read_4_real(t, h, o); +} + +uint64_t +bus_space_read_8(t, h, o) + bus_space_tag_t t; + bus_space_handle_t h; + bus_size_t o; +{ + __insn_barrier(); + return bus_space_read_8_real(t, h, o); +} + +#endif /* __SLIM_SPARC_BUS_SPACE */ + +void +bus_space_read_multi_1(t, h, o, a, c) + bus_space_tag_t t; + bus_space_handle_t h; + bus_size_t o, c; + uint8_t *a; +{ + while (c-- > 0) + *a++ = bus_space_read_1(t, h, o); +} + +void +bus_space_read_multi_2(t, h, o, a, c) + bus_space_tag_t t; + bus_space_handle_t h; + bus_size_t o, c; + uint16_t *a; +{ + while (c-- > 0) + *a++ = bus_space_read_2(t, h, o); +} + +void +bus_space_read_multi_4(t, h, o, a, c) + bus_space_tag_t t; + bus_space_handle_t h; + bus_size_t o, c; + uint32_t *a; +{ + while (c-- > 0) + *a++ = bus_space_read_4(t, h, o); +} + +void +bus_space_read_multi_8(t, h, o, a, c) + bus_space_tag_t t; + bus_space_handle_t h; + bus_size_t o, c; + uint64_t *a; +{ + while (c-- > 0) + *a++ = bus_space_read_8(t, h, o); +} + +/* + * void bus_space_read_multi_N(bus_space_tag_t tag, + * bus_space_handle_t bsh, bus_size_t offset, + * u_intN_t *addr, bus_size_t count); + * + * Read `count' 1, 2, 4, or 8 byte quantities from bus space + * described by tag/handle/offset and copy into buffer provided. + */ +void +bus_space_read_multi_stream_2(t, h, o, a, c) + bus_space_tag_t t; + bus_space_handle_t h; + bus_size_t o, c; + uint16_t *a; +{ + while (c-- > 0) + *a++ = bus_space_read_2_real(t, h, o); +} + +void +bus_space_read_multi_stream_4(t, h, o, a, c) + bus_space_tag_t t; + bus_space_handle_t h; + bus_size_t o, c; + uint32_t *a; +{ + while (c-- > 0) + *a++ = bus_space_read_4_real(t, h, o); +} + +void +bus_space_read_multi_stream_8(t, h, o, a, c) + bus_space_tag_t t; + bus_space_handle_t h; + bus_size_t o, c; + uint64_t *a; +{ + while (c-- > 0) + *a++ = bus_space_read_8_real(t, h, o); +} + +/* + * void bus_space_write_multi_N(bus_space_tag_t tag, + * bus_space_handle_t bsh, bus_size_t offset, + * const u_intN_t *addr, bus_size_t count); + * + * Write `count' 1, 2, 4, or 8 byte quantities from the buffer + * provided to bus space described by tag/handle/offset. + */ +void +bus_space_write_multi_1(t, h, o, a, c) + bus_space_tag_t t; + bus_space_handle_t h; + bus_size_t o, c; + const uint8_t *a; +{ + while (c-- > 0) + bus_space_write_1(t, h, o, *a++); +} + +void +bus_space_write_multi_2(t, h, o, a, c) + bus_space_tag_t t; + bus_space_handle_t h; + bus_size_t o, c; + const uint16_t *a; +{ + while (c-- > 0) + bus_space_write_2(t, h, o, *a++); +} + +void +bus_space_write_multi_4(t, h, o, a, c) + bus_space_tag_t t; + bus_space_handle_t h; + bus_size_t o, c; + const uint32_t *a; +{ + while (c-- > 0) + bus_space_write_4(t, h, o, *a++); +} + +void +bus_space_write_multi_8(t, h, o, a, c) + bus_space_tag_t t; + bus_space_handle_t h; + bus_size_t o, c; + const uint64_t *a; +{ + while (c-- > 0) + bus_space_write_8(t, h, o, *a++); +} + /* * Allocate a new bus tag and have it inherit the methods of the * given parent. Index: src/sys/arch/sparc64/include/bus_defs.h diff -u src/sys/arch/sparc64/include/bus_defs.h:1.1 src/sys/arch/sparc64/include/bus_defs.h:1.2 --- src/sys/arch/sparc64/include/bus_defs.h:1.1 Fri Jul 1 17:10:01 2011 +++ src/sys/arch/sparc64/include/bus_defs.h Sun Jul 17 23:29:10 2011 @@ -1,4 +1,4 @@ -/* $NetBSD: bus_defs.h,v 1.1 2011/07/01 17:10:01 dyoung Exp $ */ +/* $NetBSD: bus_defs.h,v 1.2 2011/07/17 23:29:10 dyoung Exp $ */ /*- * Copyright (c) 1996, 1997, 1998, 2001 The NetBSD Foundation, Inc. @@ -62,8 +62,8 @@ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -#ifndef _SPARC_BUS_DEFS_H_ -#define _SPARC_BUS_DEFS_H_ +#ifndef _SPARC64_BUS_DEFS_H_ +#define _SPARC64_BUS_DEFS_H_ #include <machine/types.h> #include <machine/ctlreg.h> @@ -295,4 +295,4 @@ bus_dma_segment_t dm_segs[1]; /* segments; variable length */ }; -#endif /* _SPARC_BUS_DEFS_H_ */ +#endif /* _SPARC64_BUS_DEFS_H_ */ Index: src/sys/arch/sparc64/include/bus_funcs.h diff -u src/sys/arch/sparc64/include/bus_funcs.h:1.1 src/sys/arch/sparc64/include/bus_funcs.h:1.2 --- src/sys/arch/sparc64/include/bus_funcs.h:1.1 Fri Jul 1 17:10:01 2011 +++ src/sys/arch/sparc64/include/bus_funcs.h Sun Jul 17 23:29:10 2011 @@ -1,4 +1,4 @@ -/* $NetBSD: bus_funcs.h,v 1.1 2011/07/01 17:10:01 dyoung Exp $ */ +/* $NetBSD: bus_funcs.h,v 1.2 2011/07/17 23:29:10 dyoung Exp $ */ /*- * Copyright (c) 1996, 1997, 1998, 2001 The NetBSD Foundation, Inc. @@ -62,8 +62,8 @@ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -#ifndef _SPARC_BUS_FUNCS_H_ -#define _SPARC_BUS_FUNCS_H_ +#ifndef _SPARC64_BUS_FUNCS_H_ +#define _SPARC64_BUS_FUNCS_H_ /* * Debug hooks @@ -405,4 +405,4 @@ vaddr_t low, vaddr_t high); #endif /* _SPARC_BUS_DMA_PRIVATE */ -#endif /* _SPARC_BUS_FUNCS_H_ */ +#endif /* _SPARC64_BUS_FUNCS_H_ */ Index: src/sys/arch/sparc64/sparc64/machdep.c diff -u src/sys/arch/sparc64/sparc64/machdep.c:1.260 src/sys/arch/sparc64/sparc64/machdep.c:1.261 --- src/sys/arch/sparc64/sparc64/machdep.c:1.260 Sat Jul 2 13:11:48 2011 +++ src/sys/arch/sparc64/sparc64/machdep.c Sun Jul 17 23:29:10 2011 @@ -1,4 +1,4 @@ -/* $NetBSD: machdep.c,v 1.260 2011/07/02 13:11:48 mrg Exp $ */ +/* $NetBSD: machdep.c,v 1.261 2011/07/17 23:29:10 dyoung Exp $ */ /*- * Copyright (c) 1996, 1997, 1998 The NetBSD Foundation, Inc. @@ -71,7 +71,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: machdep.c,v 1.260 2011/07/02 13:11:48 mrg Exp $"); +__KERNEL_RCSID(0, "$NetBSD: machdep.c,v 1.261 2011/07/17 23:29:10 dyoung Exp $"); #include "opt_ddb.h" #include "opt_multiprocessor.h" @@ -123,7 +123,7 @@ #define _SPARC_BUS_DMA_PRIVATE #include <machine/autoconf.h> -#include <machine/bus.h> +#include <sys/bus.h> #include <machine/frame.h> #include <machine/cpu.h> #include <machine/pcb.h> @@ -1617,6 +1617,634 @@ struct extent *io_space = NULL; +void +bus_space_barrier(bus_space_tag_t t, bus_space_handle_t h, + bus_size_t o, bus_size_t s, int f) +{ + /* + * We have a bit of a problem with the bus_space_barrier() + * interface. It defines a read barrier and a write barrier + * which really don't map to the 7 different types of memory + * barriers in the SPARC v9 instruction set. + */ + if (f == BUS_SPACE_BARRIER_READ) + /* A load followed by a load to the same location? */ + __asm volatile("membar #Lookaside"); + else if (f == BUS_SPACE_BARRIER_WRITE) + /* A store followed by a store? */ + __asm volatile("membar #StoreStore"); + else + /* A store followed by a load? */ + __asm volatile("membar #StoreLoad|#MemIssue|#Lookaside"); +} + +int +bus_space_alloc(bus_space_tag_t t, bus_addr_t rs, bus_addr_t re, bus_size_t s, + bus_size_t a, bus_size_t b, int f, bus_addr_t *ap, + bus_space_handle_t *hp) +{ + _BS_CALL(t, sparc_bus_alloc)(t, rs, re, s, a, b, f, ap, hp); +} + +void +bus_space_free(bus_space_tag_t t, bus_space_handle_t h, bus_size_t s) +{ + _BS_CALL(t, sparc_bus_free)(t, h, s); +} + +int +bus_space_map(bus_space_tag_t t, bus_addr_t a, bus_size_t s, int f, + bus_space_handle_t *hp) +{ + _BS_CALL(t, sparc_bus_map)(t, a, s, f, 0, hp); +} + +void +bus_space_unmap(bus_space_tag_t t, bus_space_handle_t h, bus_size_t s) +{ + _BS_VOID_CALL(t, sparc_bus_unmap)(t, h, s); +} + +int +bus_space_subregion(bus_space_tag_t t, bus_space_handle_t h, bus_size_t o, + bus_size_t s, bus_space_handle_t *hp) +{ + _BS_CALL(t, sparc_bus_subregion)(t, h, o, s, hp); +} + +paddr_t +bus_space_mmap(bus_space_tag_t t, bus_addr_t a, off_t o, int p, int f) +{ + _BS_CALL(t, sparc_bus_mmap)(t, a, o, p, f); +} + +/* + * void bus_space_read_multi_N(bus_space_tag_t tag, + * bus_space_handle_t bsh, bus_size_t offset, + * uintN_t *addr, bus_size_t count); + * + * Read `count' 1, 2, 4, or 8 byte quantities from bus space + * described by tag/handle/offset and copy into buffer provided. + */ +void +bus_space_read_multi_1(bus_space_tag_t t, bus_space_handle_t h, + bus_size_t o, uint8_t * a, bus_size_t c) +{ + while (c-- > 0) + *a++ = bus_space_read_1(t, h, o); +} + +void +bus_space_read_multi_2(bus_space_tag_t t, bus_space_handle_t h, + bus_size_t o, uint16_t * a, bus_size_t c) +{ + while (c-- > 0) + *a++ = bus_space_read_2(t, h, o); +} + +void +bus_space_read_multi_4(bus_space_tag_t t, bus_space_handle_t h, + bus_size_t o, uint32_t * a, bus_size_t c) +{ + while (c-- > 0) + *a++ = bus_space_read_4(t, h, o); +} + +void +bus_space_read_multi_8(bus_space_tag_t t, bus_space_handle_t h, + bus_size_t o, uint64_t * a, bus_size_t c) +{ + while (c-- > 0) + *a++ = bus_space_read_8(t, h, o); +} + +/* + * void bus_space_write_multi_N(bus_space_tag_t tag, + * bus_space_handle_t bsh, bus_size_t offset, + * const uintN_t *addr, bus_size_t count); + * + * Write `count' 1, 2, 4, or 8 byte quantities from the buffer + * provided to bus space described by tag/handle/offset. + */ +void +bus_space_write_multi_1(bus_space_tag_t t, + bus_space_handle_t h, bus_size_t o, + const uint8_t *a, bus_size_t c) +{ + while (c-- > 0) + bus_space_write_1(t, h, o, *a++); +} + +void +bus_space_write_multi_2(bus_space_tag_t t, + bus_space_handle_t h, bus_size_t o, + const uint16_t *a, bus_size_t c) +{ + while (c-- > 0) + bus_space_write_2(t, h, o, *a++); +} + +void +bus_space_write_multi_4(bus_space_tag_t t, + bus_space_handle_t h, bus_size_t o, + const uint32_t *a, bus_size_t c) +{ + while (c-- > 0) + bus_space_write_4(t, h, o, *a++); +} + +void +bus_space_write_multi_8(bus_space_tag_t t, + bus_space_handle_t h, bus_size_t o, + const uint64_t *a, bus_size_t c) +{ + while (c-- > 0) + bus_space_write_8(t, h, o, *a++); +} + +/* + * void bus_space_set_multi_stream_N(bus_space_tag_t tag, + * bus_space_handle_t bsh, bus_size_t offset, uintN_t val, + * bus_size_t count); + * + * Write the 1, 2, 4, or 8 byte value `val' to bus space described + * by tag/handle/offset `count' times. + */ +void +bus_space_set_multi_stream_1(bus_space_tag_t t, + bus_space_handle_t h, bus_size_t o, uint8_t v, + bus_size_t c) +{ + while (c-- > 0) + bus_space_write_stream_1(t, h, o, v); +} + +void +bus_space_set_multi_stream_2(bus_space_tag_t t, + bus_space_handle_t h, bus_size_t o, uint16_t v, + bus_size_t c) +{ + while (c-- > 0) + bus_space_write_stream_2(t, h, o, v); +} + +void +bus_space_set_multi_stream_4(bus_space_tag_t t, + bus_space_handle_t h, bus_size_t o, uint32_t v, + bus_size_t c) +{ + while (c-- > 0) + bus_space_write_stream_4(t, h, o, v); +} + +void +bus_space_set_multi_stream_8(bus_space_tag_t t, + bus_space_handle_t h, bus_size_t o, uint64_t v, + bus_size_t c) +{ + while (c-- > 0) + bus_space_write_stream_8(t, h, o, v); +} + +/* + * void bus_space_copy_region_stream_N(bus_space_tag_t tag, + * bus_space_handle_t bsh1, bus_size_t off1, + * bus_space_handle_t bsh2, bus_size_t off2, + * bus_size_t count); + * + * Copy `count' 1, 2, 4, or 8 byte values from bus space starting + * at tag/bsh1/off1 to bus space starting at tag/bsh2/off2. + */ +void +bus_space_copy_region_stream_1(bus_space_tag_t t, bus_space_handle_t h1, + bus_size_t o1, bus_space_handle_t h2, bus_size_t o2, bus_size_t c) +{ + for (; c; c--, o1++, o2++) + bus_space_write_stream_1(t, h1, o1, bus_space_read_stream_1(t, h2, o2)); +} + +void +bus_space_copy_region_stream_2(bus_space_tag_t t, bus_space_handle_t h1, + bus_size_t o1, bus_space_handle_t h2, bus_size_t o2, bus_size_t c) +{ + for (; c; c--, o1+=2, o2+=2) + bus_space_write_stream_2(t, h1, o1, bus_space_read_stream_2(t, h2, o2)); +} + +void +bus_space_copy_region_stream_4(bus_space_tag_t t, bus_space_handle_t h1, + bus_size_t o1, bus_space_handle_t h2, bus_size_t o2, bus_size_t c) +{ + for (; c; c--, o1+=4, o2+=4) + bus_space_write_stream_4(t, h1, o1, bus_space_read_stream_4(t, h2, o2)); +} + +void +bus_space_copy_region_stream_8(bus_space_tag_t t, bus_space_handle_t h1, + bus_size_t o1, bus_space_handle_t h2, bus_size_t o2, bus_size_t c) +{ + for (; c; c--, o1+=8, o2+=8) + bus_space_write_stream_8(t, h1, o1, bus_space_read_8(t, h2, o2)); +} + +/* + * void bus_space_set_region_stream_N(bus_space_tag_t tag, + * bus_space_handle_t bsh, bus_size_t off, + * uintN_t *addr, bus_size_t count); + * + */ +void +bus_space_set_region_stream_1(bus_space_tag_t t, bus_space_handle_t h, + bus_size_t o, const uint8_t v, bus_size_t c) +{ + for (; c; c--, o++) + bus_space_write_stream_1(t, h, o, v); +} + +void +bus_space_set_region_stream_2(bus_space_tag_t t, bus_space_handle_t h, + bus_size_t o, const uint16_t v, bus_size_t c) +{ + for (; c; c--, o+=2) + bus_space_write_stream_2(t, h, o, v); +} + +void +bus_space_set_region_stream_4(bus_space_tag_t t, bus_space_handle_t h, + bus_size_t o, const uint32_t v, bus_size_t c) +{ + for (; c; c--, o+=4) + bus_space_write_stream_4(t, h, o, v); +} + +void +bus_space_set_region_stream_8(bus_space_tag_t t, bus_space_handle_t h, + bus_size_t o, const uint64_t v, bus_size_t c) +{ + for (; c; c--, o+=8) + bus_space_write_stream_8(t, h, o, v); +} + + +/* + * void bus_space_read_multi_stream_N(bus_space_tag_t tag, + * bus_space_handle_t bsh, bus_size_t offset, + * uintN_t *addr, bus_size_t count); + * + * Read `count' 1, 2, 4, or 8 byte quantities from bus space + * described by tag/handle/offset and copy into buffer provided. + */ +void +bus_space_read_multi_stream_1(bus_space_tag_t t, + bus_space_handle_t h, bus_size_t o, + uint8_t *a, bus_size_t c) +{ + while (c-- > 0) + *a++ = bus_space_read_stream_1(t, h, o); +} + +void +bus_space_read_multi_stream_2(bus_space_tag_t t, + bus_space_handle_t h, bus_size_t o, + uint16_t *a, bus_size_t c) +{ + while (c-- > 0) + *a++ = bus_space_read_stream_2(t, h, o); +} + +void +bus_space_read_multi_stream_4(bus_space_tag_t t, + bus_space_handle_t h, bus_size_t o, + uint32_t *a, bus_size_t c) +{ + while (c-- > 0) + *a++ = bus_space_read_stream_4(t, h, o); +} + +void +bus_space_read_multi_stream_8(bus_space_tag_t t, + bus_space_handle_t h, bus_size_t o, + uint64_t *a, bus_size_t c) +{ + while (c-- > 0) + *a++ = bus_space_read_stream_8(t, h, o); +} + +/* + * void bus_space_read_region_stream_N(bus_space_tag_t tag, + * bus_space_handle_t bsh, bus_size_t off, + * uintN_t *addr, bus_size_t count); + * + */ +void +bus_space_read_region_stream_1(bus_space_tag_t t, bus_space_handle_t h, + bus_size_t o, uint8_t *a, bus_size_t c) +{ + for (; c; a++, c--, o++) + *a = bus_space_read_stream_1(t, h, o); +} +void +bus_space_read_region_stream_2(bus_space_tag_t t, bus_space_handle_t h, + bus_size_t o, uint16_t *a, bus_size_t c) +{ + for (; c; a++, c--, o+=2) + *a = bus_space_read_stream_2(t, h, o); + } +void +bus_space_read_region_stream_4(bus_space_tag_t t, bus_space_handle_t h, + bus_size_t o, uint32_t *a, bus_size_t c) +{ + for (; c; a++, c--, o+=4) + *a = bus_space_read_stream_4(t, h, o); +} +void +bus_space_read_region_stream_8(bus_space_tag_t t, bus_space_handle_t h, + bus_size_t o, uint64_t *a, bus_size_t c) +{ + for (; c; a++, c--, o+=8) + *a = bus_space_read_stream_8(t, h, o); +} + +/* + * void bus_space_write_multi_stream_N(bus_space_tag_t tag, + * bus_space_handle_t bsh, bus_size_t offset, + * const uintN_t *addr, bus_size_t count); + * + * Write `count' 1, 2, 4, or 8 byte quantities from the buffer + * provided to bus space described by tag/handle/offset. + */ +void +bus_space_write_multi_stream_1(bus_space_tag_t t, + bus_space_handle_t h, bus_size_t o, + const uint8_t *a, bus_size_t c) +{ + while (c-- > 0) + bus_space_write_stream_1(t, h, o, *a++); +} + +void +bus_space_write_multi_stream_2(bus_space_tag_t t, + bus_space_handle_t h, bus_size_t o, + const uint16_t *a, bus_size_t c) +{ + while (c-- > 0) + bus_space_write_stream_2(t, h, o, *a++); +} + +void +bus_space_write_multi_stream_4(bus_space_tag_t t, + bus_space_handle_t h, bus_size_t o, + const uint32_t *a, bus_size_t c) +{ + while (c-- > 0) + bus_space_write_stream_4(t, h, o, *a++); +} + +void +bus_space_write_multi_stream_8(bus_space_tag_t t, + bus_space_handle_t h, bus_size_t o, + const uint64_t *a, bus_size_t c) +{ + while (c-- > 0) + bus_space_write_stream_8(t, h, o, *a++); +} + +/* + * void bus_space_copy_region_N(bus_space_tag_t tag, + * bus_space_handle_t bsh1, bus_size_t off1, + * bus_space_handle_t bsh2, bus_size_t off2, + * bus_size_t count); + * + * Copy `count' 1, 2, 4, or 8 byte values from bus space starting + * at tag/bsh1/off1 to bus space starting at tag/bsh2/off2. + */ +void +bus_space_copy_region_1(bus_space_tag_t t, bus_space_handle_t h1, bus_size_t o1, + bus_space_handle_t h2, bus_size_t o2, bus_size_t c) +{ + for (; c; c--, o1++, o2++) + bus_space_write_1(t, h1, o1, bus_space_read_1(t, h2, o2)); +} + +void +bus_space_copy_region_2(bus_space_tag_t t, bus_space_handle_t h1, bus_size_t o1, + bus_space_handle_t h2, bus_size_t o2, bus_size_t c) +{ + for (; c; c--, o1+=2, o2+=2) + bus_space_write_2(t, h1, o1, bus_space_read_2(t, h2, o2)); +} + +void +bus_space_copy_region_4(bus_space_tag_t t, bus_space_handle_t h1, bus_size_t o1, + bus_space_handle_t h2, bus_size_t o2, bus_size_t c) +{ + for (; c; c--, o1+=4, o2+=4) + bus_space_write_4(t, h1, o1, bus_space_read_4(t, h2, o2)); +} + +void +bus_space_copy_region_8(bus_space_tag_t t, bus_space_handle_t h1, bus_size_t o1, + bus_space_handle_t h2, bus_size_t o2, bus_size_t c) +{ + for (; c; c--, o1+=8, o2+=8) + bus_space_write_8(t, h1, o1, bus_space_read_8(t, h2, o2)); +} + +/* + * void bus_space_set_region_N(bus_space_tag_t tag, + * bus_space_handle_t bsh, bus_size_t off, + * uintN_t *addr, bus_size_t count); + * + */ +void +bus_space_set_region_1(bus_space_tag_t t, bus_space_handle_t h, bus_size_t o, + const uint8_t v, bus_size_t c) +{ + for (; c; c--, o++) + bus_space_write_1(t, h, o, v); +} + +void +bus_space_set_region_2(bus_space_tag_t t, bus_space_handle_t h, bus_size_t o, + const uint16_t v, bus_size_t c) +{ + for (; c; c--, o+=2) + bus_space_write_2(t, h, o, v); +} + +void +bus_space_set_region_4(bus_space_tag_t t, bus_space_handle_t h, bus_size_t o, + const uint32_t v, bus_size_t c) +{ + for (; c; c--, o+=4) + bus_space_write_4(t, h, o, v); +} + +void +bus_space_set_region_8(bus_space_tag_t t, bus_space_handle_t h, bus_size_t o, + const uint64_t v, bus_size_t c) +{ + for (; c; c--, o+=8) + bus_space_write_8(t, h, o, v); +} + + +/* + * void bus_space_set_multi_N(bus_space_tag_t tag, + * bus_space_handle_t bsh, bus_size_t offset, uintN_t val, + * bus_size_t count); + * + * Write the 1, 2, 4, or 8 byte value `val' to bus space described + * by tag/handle/offset `count' times. + */ +void +bus_space_set_multi_1(bus_space_tag_t t, + bus_space_handle_t h, bus_size_t o, uint8_t v, + bus_size_t c) +{ + while (c-- > 0) + bus_space_write_1(t, h, o, v); +} + +void +bus_space_set_multi_2(bus_space_tag_t t, + bus_space_handle_t h, bus_size_t o, uint16_t v, + bus_size_t c) +{ + while (c-- > 0) + bus_space_write_2(t, h, o, v); +} + +void +bus_space_set_multi_4(bus_space_tag_t t, + bus_space_handle_t h, bus_size_t o, uint32_t v, + bus_size_t c) +{ + while (c-- > 0) + bus_space_write_4(t, h, o, v); +} + +void +bus_space_set_multi_8(bus_space_tag_t t, + bus_space_handle_t h, bus_size_t o, uint64_t v, + bus_size_t c) +{ + while (c-- > 0) + bus_space_write_8(t, h, o, v); +} + +/* + * void bus_space_write_region_N(bus_space_tag_t tag, + * bus_space_handle_t bsh, bus_size_t off, + * uintN_t *addr, bus_size_t count); + * + */ +void +bus_space_write_region_1(bus_space_tag_t t, bus_space_handle_t h, bus_size_t o, + const uint8_t *a, bus_size_t c) +{ + for (; c; a++, c--, o++) + bus_space_write_1(t, h, o, *a); +} + +void +bus_space_write_region_2(bus_space_tag_t t, bus_space_handle_t h, bus_size_t o, + const uint16_t *a, bus_size_t c) +{ + for (; c; a++, c--, o+=2) + bus_space_write_2(t, h, o, *a); +} + +void +bus_space_write_region_4(bus_space_tag_t t, bus_space_handle_t h, bus_size_t o, + const uint32_t *a, bus_size_t c) +{ + for (; c; a++, c--, o+=4) + bus_space_write_4(t, h, o, *a); +} + +void +bus_space_write_region_8(bus_space_tag_t t, bus_space_handle_t h, bus_size_t o, + const uint64_t *a, bus_size_t c) +{ + for (; c; a++, c--, o+=8) + bus_space_write_8(t, h, o, *a); +} + + +/* + * void bus_space_read_region_N(bus_space_tag_t tag, + * bus_space_handle_t bsh, bus_size_t off, + * uintN_t *addr, bus_size_t count); + * + */ +void +bus_space_read_region_1(bus_space_tag_t t, bus_space_handle_t h, bus_size_t o, + uint8_t *a, bus_size_t c) +{ + for (; c; a++, c--, o++) + *a = bus_space_read_1(t, h, o); +} +void +bus_space_read_region_2(bus_space_tag_t t, bus_space_handle_t h, bus_size_t o, + uint16_t *a, bus_size_t c) +{ + for (; c; a++, c--, o+=2) + *a = bus_space_read_2(t, h, o); + } +void +bus_space_read_region_4(bus_space_tag_t t, bus_space_handle_t h, bus_size_t o, + uint32_t *a, bus_size_t c) +{ + for (; c; a++, c--, o+=4) + *a = bus_space_read_4(t, h, o); +} +void +bus_space_read_region_8(bus_space_tag_t t, bus_space_handle_t h, bus_size_t o, + uint64_t *a, bus_size_t c) +{ + for (; c; a++, c--, o+=8) + *a = bus_space_read_8(t, h, o); +} + +/* + * void bus_space_write_region_stream_N(bus_space_tag_t tag, + * bus_space_handle_t bsh, bus_size_t off, + * uintN_t *addr, bus_size_t count); + * + */ +void +bus_space_write_region_stream_1(bus_space_tag_t t, bus_space_handle_t h, + bus_size_t o, const uint8_t *a, bus_size_t c) +{ + for (; c; a++, c--, o++) + bus_space_write_stream_1(t, h, o, *a); +} + +void +bus_space_write_region_stream_2(bus_space_tag_t t, bus_space_handle_t h, + bus_size_t o, const uint16_t *a, bus_size_t c) +{ + for (; c; a++, c--, o+=2) + bus_space_write_stream_2(t, h, o, *a); +} + +void +bus_space_write_region_stream_4(bus_space_tag_t t, bus_space_handle_t h, + bus_size_t o, const uint32_t *a, bus_size_t c) +{ + for (; c; a++, c--, o+=4) + bus_space_write_stream_4(t, h, o, *a); +} + +void +bus_space_write_region_stream_8(bus_space_tag_t t, bus_space_handle_t h, + bus_size_t o, const uint64_t *a, bus_size_t c) +{ + for (; c; a++, c--, o+=8) + bus_space_write_stream_8(t, h, o, *a); +} + /* * Allocate a new bus tag and have it inherit the methods of the * given parent.