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.

Reply via email to