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.