svn commit: r278727 - in stable/10/sys: arm/allwinner arm/allwinner/a20 arm/arm arm/at91 arm/broadcom/bcm2835 arm/cavium/cns11xx arm/freescale/imx arm/freescale/vybrid arm/include arm/lpc arm/mv ar...

Ian Lepore ian at FreeBSD.org
Fri Feb 13 22:32:07 UTC 2015


Author: ian
Date: Fri Feb 13 22:32:02 2015
New Revision: 278727
URL: https://svnweb.freebsd.org/changeset/base/278727

Log:
  MFC r277454, r277460, r277465, r277466, r277467, r277469, r277470, r277471,
      r277472, r277473, r277474, r277475, r277476, r277477, r277478, r277479,
      r277480, r277512, r277516:
  
    Add inline implementations of arm bus_space_read/write_N().
  
    Revise the arm bus_space implementation to avoid dereferencing the tag on
    every operation to retrieve the bs_cookie value almost nothing actually uses.
  
    Use the explicit member initializer style to init the bus_space struct.
  
    Use arm/bus_space-v6.c for all armv6 systems
  
    Consolidate many identical implementations of bus_space to a single
    common tag and implementation shared by armv4 and armv6.
  
    Micro-optimize the new arm inline bus_space implementation by grouping all
    the data the inline functions access together at the start of the bus_space
    struct so that they all fit in a single cache line.

Added:
  stable/10/sys/arm/arm/bus_space_base.c
     - copied, changed from r277472, head/sys/arm/arm/bus_space_base.c
Deleted:
  stable/10/sys/arm/arm/bus_space-v6.c
  stable/10/sys/arm/lpc/lpc_space.c
  stable/10/sys/arm/mv/bus_space.c
  stable/10/sys/arm/samsung/s3c2xx0/s3c2xx0_space.c
  stable/10/sys/arm/versatile/bus_space.c
  stable/10/sys/arm/versatile/versatile_pci_bus_space.c
  stable/10/sys/arm/versatile/versatile_pci_bus_space.h
  stable/10/sys/arm/xilinx/zy7_bus_space.c
  stable/10/sys/arm/xscale/i80321/obio_space.c
  stable/10/sys/arm/xscale/i8134x/obio_space.c
Modified:
  stable/10/sys/arm/allwinner/a20/files.a20
  stable/10/sys/arm/allwinner/files.a10
  stable/10/sys/arm/arm/bus_space_asm_generic.S
  stable/10/sys/arm/arm/bus_space_generic.c
  stable/10/sys/arm/at91/at91.c
  stable/10/sys/arm/at91/files.at91
  stable/10/sys/arm/broadcom/bcm2835/files.bcm2835
  stable/10/sys/arm/cavium/cns11xx/econa.c
  stable/10/sys/arm/cavium/cns11xx/files.econa
  stable/10/sys/arm/freescale/imx/files.imx51
  stable/10/sys/arm/freescale/imx/files.imx53
  stable/10/sys/arm/freescale/imx/files.imx6
  stable/10/sys/arm/freescale/vybrid/files.vybrid
  stable/10/sys/arm/include/bus.h
  stable/10/sys/arm/lpc/files.lpc
  stable/10/sys/arm/mv/files.mv
  stable/10/sys/arm/rockchip/files.rk30xx
  stable/10/sys/arm/samsung/exynos/files.exynos5
  stable/10/sys/arm/samsung/s3c2xx0/files.s3c2xx0
  stable/10/sys/arm/samsung/s3c2xx0/s3c24x0.c
  stable/10/sys/arm/samsung/s3c2xx0/s3c2xx0var.h
  stable/10/sys/arm/samsung/s3c2xx0/uart_cpu_s3c2410.c
  stable/10/sys/arm/ti/files.ti
  stable/10/sys/arm/versatile/files.versatile
  stable/10/sys/arm/versatile/versatile_pci.c
  stable/10/sys/arm/xilinx/files.zynq7
  stable/10/sys/arm/xscale/i80321/ep80219_machdep.c
  stable/10/sys/arm/xscale/i80321/files.ep80219
  stable/10/sys/arm/xscale/i80321/files.i80219
  stable/10/sys/arm/xscale/i80321/files.i80321
  stable/10/sys/arm/xscale/i80321/files.iq31244
  stable/10/sys/arm/xscale/i80321/i80321_space.c
  stable/10/sys/arm/xscale/i80321/iq31244_machdep.c
  stable/10/sys/arm/xscale/i80321/obio.c
  stable/10/sys/arm/xscale/i80321/obiovar.h
  stable/10/sys/arm/xscale/i80321/uart_cpu_i80321.c
  stable/10/sys/arm/xscale/i8134x/crb_machdep.c
  stable/10/sys/arm/xscale/i8134x/files.i81342
  stable/10/sys/arm/xscale/i8134x/i81342_space.c
  stable/10/sys/arm/xscale/i8134x/obio.c
  stable/10/sys/arm/xscale/i8134x/obiovar.h
  stable/10/sys/arm/xscale/i8134x/uart_cpu_i81342.c
  stable/10/sys/arm/xscale/ixp425/avila_ata.c
  stable/10/sys/arm/xscale/ixp425/cambria_exp_space.c
  stable/10/sys/arm/xscale/ixp425/ixp425_a4x_space.c
  stable/10/sys/arm/xscale/ixp425/ixp425_pci_space.c
  stable/10/sys/arm/xscale/ixp425/ixp425_space.c
  stable/10/sys/arm/xscale/pxa/pxa_space.c
  stable/10/sys/dev/usb/controller/ehci_ixp4xx.c
Directory Properties:
  stable/10/   (props changed)

Modified: stable/10/sys/arm/allwinner/a20/files.a20
==============================================================================
--- stable/10/sys/arm/allwinner/a20/files.a20	Fri Feb 13 22:08:19 2015	(r278726)
+++ stable/10/sys/arm/allwinner/a20/files.a20	Fri Feb 13 22:32:02 2015	(r278727)
@@ -17,7 +17,7 @@ arm/allwinner/a10_ehci.c		optional	ehci
 arm/allwinner/if_emac.c			optional	emac
 arm/allwinner/a10_wdog.c		standard
 arm/allwinner/timer.c			standard
-arm/arm/bus_space-v6.c			standard
-arm/allwinner/a10_common.c			standard
+arm/arm/bus_space_base.c		standard
+arm/allwinner/a10_common.c		standard
 arm/allwinner/a10_machdep.c		standard
 arm/allwinner/a20/a20_mp.c		optional	smp

Modified: stable/10/sys/arm/allwinner/files.a10
==============================================================================
--- stable/10/sys/arm/allwinner/files.a10	Fri Feb 13 22:08:19 2015	(r278726)
+++ stable/10/sys/arm/allwinner/files.a10	Fri Feb 13 22:32:02 2015	(r278727)
@@ -19,5 +19,5 @@ arm/allwinner/a20/a20_cpu_cfg.c 	standar
 arm/allwinner/aintc.c			standard
 arm/allwinner/if_emac.c			optional	emac
 arm/allwinner/timer.c			standard
-arm/arm/bus_space-v6.c			standard
-#arm/allwinner/console.c			standard
+arm/arm/bus_space_base.c		standard
+#arm/allwinner/console.c		standard

Modified: stable/10/sys/arm/arm/bus_space_asm_generic.S
==============================================================================
--- stable/10/sys/arm/arm/bus_space_asm_generic.S	Fri Feb 13 22:08:19 2015	(r278726)
+++ stable/10/sys/arm/arm/bus_space_asm_generic.S	Fri Feb 13 22:32:02 2015	(r278727)
@@ -52,10 +52,10 @@ ENTRY(generic_bs_r_1)
 	RET
 END(generic_bs_r_1)
 
-ENTRY(generic_armv4_bs_r_2)
+ENTRY(generic_bs_r_2)
 	ldrh	r0, [r1, r2]
 	RET
-END(generic_armv4_bs_r_2)
+END(generic_bs_r_2)
 
 ENTRY(generic_bs_r_4)
 	ldr	r0, [r1, r2]
@@ -71,10 +71,10 @@ ENTRY(generic_bs_w_1)
 	RET
 END(generic_bs_w_1)
 
-ENTRY(generic_armv4_bs_w_2)
+ENTRY(generic_bs_w_2)
 	strh	r3, [r1, r2]
 	RET
-END(generic_armv4_bs_w_2)
+END(generic_bs_w_2)
 
 ENTRY(generic_bs_w_4)
 	str	r3, [r1, r2]
@@ -100,7 +100,7 @@ ENTRY(generic_bs_rm_1)
 	RET
 END(generic_bs_rm_1)
 
-ENTRY(generic_armv4_bs_rm_2)
+ENTRY(generic_bs_rm_2)
 	add	r0, r1, r2
 	mov	r1, r3
 	ldr	r2, [sp, #0]
@@ -113,7 +113,7 @@ ENTRY(generic_armv4_bs_rm_2)
 	bne	1b
 
 	RET
-END(generic_armv4_bs_rm_2)
+END(generic_bs_rm_2)
 
 ENTRY(generic_bs_rm_4)
 	add	r0, r1, r2
@@ -149,7 +149,7 @@ ENTRY(generic_bs_wm_1)
 	RET
 END(generic_bs_wm_1)
 
-ENTRY(generic_armv4_bs_wm_2)
+ENTRY(generic_bs_wm_2)
 	add	r0, r1, r2
 	mov	r1, r3
 	ldr	r2, [sp, #0]
@@ -162,7 +162,7 @@ ENTRY(generic_armv4_bs_wm_2)
 	bne	1b
 
 	RET
-END(generic_armv4_bs_wm_2)
+END(generic_bs_wm_2)
 
 ENTRY(generic_bs_wm_4)
 	add	r0, r1, r2
@@ -198,7 +198,7 @@ ENTRY(generic_bs_rr_1)
 	RET
 END(generic_bs_rr_1)
 
-ENTRY(generic_armv4_bs_rr_2)
+ENTRY(generic_bs_rr_2)
 	add	r0, r1, r2
 	mov	r1, r3
 	ldr	r2, [sp, #0]
@@ -211,7 +211,7 @@ ENTRY(generic_armv4_bs_rr_2)
 	bne	1b
 
 	RET
-END(generic_armv4_bs_rr_2)
+END(generic_bs_rr_2)
 
 ENTRY(generic_bs_rr_4)
 	add	r0, r1, r2
@@ -247,7 +247,7 @@ ENTRY(generic_bs_wr_1)
 	RET
 END(generic_bs_wr_1)
 
-ENTRY(generic_armv4_bs_wr_2)
+ENTRY(generic_bs_wr_2)
 	add	r0, r1, r2
 	mov	r1, r3
 	ldr	r2, [sp, #0]
@@ -260,7 +260,7 @@ ENTRY(generic_armv4_bs_wr_2)
 	bne	1b
 
 	RET
-END(generic_armv4_bs_wr_2)
+END(generic_bs_wr_2)
 
 ENTRY(generic_bs_wr_4)
 	add	r0, r1, r2
@@ -295,7 +295,7 @@ ENTRY(generic_bs_sr_1)
 	RET
 END(generic_bs_sr_1)
 
-ENTRY(generic_armv4_bs_sr_2)
+ENTRY(generic_bs_sr_2)
 	add	r0, r1, r2
 	mov	r1, r3
 	ldr	r2, [sp, #0]
@@ -307,7 +307,7 @@ ENTRY(generic_armv4_bs_sr_2)
 	bne	1b
 
 	RET
-END(generic_armv4_bs_sr_2)
+END(generic_bs_sr_2)
 
 ENTRY(generic_bs_sr_4)
 	add	r0, r1, r2
@@ -327,7 +327,7 @@ END(generic_bs_sr_4)
  * copy region
  */
 
-ENTRY(generic_armv4_bs_c_2)
+ENTRY(generic_bs_c_2)
 	add	r0, r1, r2
 	ldr	r2, [sp, #0]
 	add	r1, r2, r3
@@ -356,5 +356,5 @@ ENTRY(generic_armv4_bs_c_2)
 	bne	3b
 
 	RET
-END(generic_armv4_bs_c_2)
+END(generic_bs_c_2)
 

Copied and modified: stable/10/sys/arm/arm/bus_space_base.c (from r277472, head/sys/arm/arm/bus_space_base.c)
==============================================================================
--- head/sys/arm/arm/bus_space_base.c	Wed Jan 21 03:44:29 2015	(r277472, copy source)
+++ stable/10/sys/arm/arm/bus_space_base.c	Fri Feb 13 22:32:02 2015	(r278727)
@@ -45,7 +45,7 @@ bs_protos(generic);
  * The bus space tag.  This is constant for all instances, so
  * we never have to explicitly "create" it.
  */
-static struct bus_space arm_base_tag = {
+static struct bus_space arm_base_bus_space __aligned(CACHE_LINE_SIZE) = {
 	/* privdata is whatever the implementer wants; unused in base tag */
 	.bs_privdata	= NULL,
 
@@ -153,5 +153,7 @@ static struct bus_space arm_base_tag = {
 };
 
 #ifdef FDT
-bus_space_tag_t fdtbus_bs_tag = &arm_base_tag;
+bus_space_tag_t fdtbus_bs_tag = &arm_base_bus_space;
 #endif
+
+bus_space_tag_t arm_base_bs_tag = &arm_base_bus_space;

Modified: stable/10/sys/arm/arm/bus_space_generic.c
==============================================================================
--- stable/10/sys/arm/arm/bus_space_generic.c	Fri Feb 13 22:08:19 2015	(r278726)
+++ stable/10/sys/arm/arm/bus_space_generic.c	Fri Feb 13 22:32:02 2015	(r278727)
@@ -53,11 +53,18 @@ __FBSDID("$FreeBSD$");
 #include <machine/cpufunc.h>
 #include <machine/devmap.h>
 
+void
+generic_bs_unimplemented(void)
+{
+
+	panic("unimplemented bus_space function called");
+}
+
 /* Prototypes for all the bus_space structure functions */
 bs_protos(generic);
 
 int
-generic_bs_map(void *t, bus_addr_t bpa, bus_size_t size, int flags,
+generic_bs_map(bus_space_tag_t t, bus_addr_t bpa, bus_size_t size, int flags,
     bus_space_handle_t *bshp)
 {
 	void *va;
@@ -74,7 +81,7 @@ generic_bs_map(void *t, bus_addr_t bpa, 
 }
 
 int
-generic_bs_alloc(void *t, bus_addr_t rstart, bus_addr_t rend, bus_size_t size,
+generic_bs_alloc(bus_space_tag_t t, bus_addr_t rstart, bus_addr_t rend, bus_size_t size,
     bus_size_t alignment, bus_size_t boundary, int flags, bus_addr_t *bpap,
     bus_space_handle_t *bshp)
 {
@@ -84,21 +91,21 @@ generic_bs_alloc(void *t, bus_addr_t rst
 
 
 void
-generic_bs_unmap(void *t, bus_space_handle_t h, bus_size_t size)
+generic_bs_unmap(bus_space_tag_t t, bus_space_handle_t h, bus_size_t size)
 {
 
 	pmap_unmapdev((vm_offset_t)h, size);
 }
 
 void
-generic_bs_free(void *t, bus_space_handle_t bsh, bus_size_t size)
+generic_bs_free(bus_space_tag_t t, bus_space_handle_t bsh, bus_size_t size)
 {
 
 	panic("generic_bs_free(): not implemented");
 }
 
 int
-generic_bs_subregion(void *t, bus_space_handle_t bsh, bus_size_t offset,
+generic_bs_subregion(bus_space_tag_t t, bus_space_handle_t bsh, bus_size_t offset,
     bus_size_t size, bus_space_handle_t *nbshp)
 {
 
@@ -107,7 +114,7 @@ generic_bs_subregion(void *t, bus_space_
 }
 
 void
-generic_bs_barrier(void *t, bus_space_handle_t bsh, bus_size_t offset,
+generic_bs_barrier(bus_space_tag_t t, bus_space_handle_t bsh, bus_size_t offset,
     bus_size_t len, int flags)
 {
 

Modified: stable/10/sys/arm/at91/at91.c
==============================================================================
--- stable/10/sys/arm/at91/at91.c	Fri Feb 13 22:08:19 2015	(r278726)
+++ stable/10/sys/arm/at91/at91.c	Fri Feb 13 22:32:02 2015	(r278727)
@@ -55,7 +55,7 @@ __FBSDID("$FreeBSD$");
 uint32_t at91_master_clock;
 
 static int
-at91_bs_map(void *t, bus_addr_t bpa, bus_size_t size, int flags,
+at91_bs_map(bus_space_tag_t tag, bus_addr_t bpa, bus_size_t size, int flags,
     bus_space_handle_t *bshp)
 {
 	vm_paddr_t pa, endpa;
@@ -77,23 +77,18 @@ at91_bs_map(void *t, bus_addr_t bpa, bus
 }
 
 static void
-at91_bs_unmap(void *t, bus_space_handle_t h, bus_size_t size)
+at91_bs_unmap(bus_space_tag_t tag, bus_space_handle_t h, bus_size_t size)
 {
-	vm_offset_t va, endva;
+	vm_offset_t va;
 
-	if (t == 0)
-		return;
-	va = trunc_page((vm_offset_t)t);
+	va = (vm_offset_t)h;
 	if (va >= AT91_BASE && va <= AT91_BASE + 0xff00000)
 		return;
-	endva = round_page((vm_offset_t)t + size);
-
-	/* Free the kernel virtual mapping. */
-	kva_free(va, endva - va);
+	pmap_unmapdev(va, size);
 }
 
 static int
-at91_bs_subregion(void *t, bus_space_handle_t bsh, bus_size_t offset,
+at91_bs_subregion(bus_space_tag_t tag, bus_space_handle_t bsh, bus_size_t offset,
     bus_size_t size, bus_space_handle_t *nbshp)
 {
 
@@ -102,7 +97,7 @@ at91_bs_subregion(void *t, bus_space_han
 }
 
 static void
-at91_barrier(void *t, bus_space_handle_t bsh, bus_size_t size, bus_size_t b,
+at91_barrier(bus_space_tag_t tag, bus_space_handle_t bsh, bus_size_t size, bus_size_t b,
     int a)
 {
 }
@@ -121,113 +116,112 @@ bus_dma_get_range_nb(void)
 }
 
 bs_protos(generic);
-bs_protos(generic_armv4);
 
 struct bus_space at91_bs_tag = {
-	/* cookie */
-	(void *) 0,
+	/* privdata is whatever the implementer wants; unused in base tag */
+	.bs_privdata	= NULL,
 
 	/* mapping/unmapping */
-	at91_bs_map,
-	at91_bs_unmap,
-	at91_bs_subregion,
+	.bs_map		= at91_bs_map,
+	.bs_unmap	= at91_bs_unmap,
+	.bs_subregion	= at91_bs_subregion,
 
 	/* allocation/deallocation */
-	NULL,
-	NULL,
+	.bs_alloc	= generic_bs_alloc,
+	.bs_free	= generic_bs_free,
 
 	/* barrier */
-	at91_barrier,
+	.bs_barrier	= at91_barrier,
 
 	/* read (single) */
-	generic_bs_r_1,
-	generic_armv4_bs_r_2,
-	generic_bs_r_4,
-	NULL,
+	.bs_r_1		= NULL,	/* Use inline code in bus.h */
+	.bs_r_2		= NULL,	/* Use inline code in bus.h */
+	.bs_r_4		= NULL,	/* Use inline code in bus.h */
+	.bs_r_8		= NULL,	/* Use inline code in bus.h */
 
 	/* read multiple */
-	generic_bs_rm_1,
-	generic_armv4_bs_rm_2,
-	generic_bs_rm_4,
-	NULL,
+	.bs_rm_1	= generic_bs_rm_1,
+	.bs_rm_2	= generic_bs_rm_2,
+	.bs_rm_4	= generic_bs_rm_4,
+	.bs_rm_8	= BS_UNIMPLEMENTED,
 
 	/* read region */
-	generic_bs_rr_1,
-	generic_armv4_bs_rr_2,
-	generic_bs_rr_4,
-	NULL,
+	.bs_rr_1	= generic_bs_rr_1,
+	.bs_rr_2	= generic_bs_rr_2,
+	.bs_rr_4	= generic_bs_rr_4,
+	.bs_rr_8	= BS_UNIMPLEMENTED,
 
 	/* write (single) */
-	generic_bs_w_1,
-	generic_armv4_bs_w_2,
-	generic_bs_w_4,
-	NULL,
+	.bs_w_1		= NULL,	/* Use inline code in bus.h */
+	.bs_w_2		= NULL,	/* Use inline code in bus.h */
+	.bs_w_4		= NULL,	/* Use inline code in bus.h */
+	.bs_w_8		= NULL,	/* Use inline code in bus.h */
 
 	/* write multiple */
-	generic_bs_wm_1,
-	generic_armv4_bs_wm_2,
-	generic_bs_wm_4,
-	NULL,
+	.bs_wm_1	= generic_bs_wm_1,
+	.bs_wm_2	= generic_bs_wm_2,
+	.bs_wm_4	= generic_bs_wm_4,
+	.bs_wm_8	= BS_UNIMPLEMENTED,
 
 	/* write region */
-	NULL,
-	generic_armv4_bs_wr_2,
-	generic_bs_wr_4,
-	NULL,
+	.bs_wr_1	= generic_bs_wr_1,
+	.bs_wr_2	= generic_bs_wr_2,
+	.bs_wr_4	= generic_bs_wr_4,
+	.bs_wr_8	= BS_UNIMPLEMENTED,
 
 	/* set multiple */
-	NULL,
-	NULL,
-	NULL,
-	NULL,
+	.bs_sm_1	= BS_UNIMPLEMENTED,
+	.bs_sm_2	= BS_UNIMPLEMENTED,
+	.bs_sm_4	= BS_UNIMPLEMENTED,
+	.bs_sm_8	= BS_UNIMPLEMENTED,
 
 	/* set region */
-	NULL,
-	generic_armv4_bs_sr_2,
-	generic_bs_sr_4,
-	NULL,
+	.bs_sr_1	= generic_bs_sr_1,
+	.bs_sr_2	= generic_bs_sr_2,
+	.bs_sr_4	= generic_bs_sr_4,
+	.bs_sr_8	= BS_UNIMPLEMENTED,
 
 	/* copy */
-	NULL,
-	generic_armv4_bs_c_2,
-	NULL,
-	NULL,
-
-	/* read (single) stream */
-	generic_bs_r_1,
-	generic_armv4_bs_r_2,
-	generic_bs_r_4,
-	NULL,
+	.bs_c_1		= BS_UNIMPLEMENTED,
+	.bs_c_2		= generic_bs_c_2,
+	.bs_c_4		= BS_UNIMPLEMENTED,
+	.bs_c_8		= BS_UNIMPLEMENTED,
+
+	/* read stream (single) */
+	.bs_r_1_s	= NULL,   /* Use inline code in bus.h */ 
+	.bs_r_2_s	= NULL,   /* Use inline code in bus.h */ 
+	.bs_r_4_s	= NULL,   /* Use inline code in bus.h */ 
+	.bs_r_8_s	= NULL,   /* Use inline code in bus.h */ 
 
 	/* read multiple stream */
-	generic_bs_rm_1,
-	generic_armv4_bs_rm_2,
-	generic_bs_rm_4,
-	NULL,
+	.bs_rm_1_s	= generic_bs_rm_1,
+	.bs_rm_2_s	= generic_bs_rm_2,
+	.bs_rm_4_s	= generic_bs_rm_4,
+	.bs_rm_8_s	= BS_UNIMPLEMENTED,
 
 	/* read region stream */
-	generic_bs_rr_1,
-	generic_armv4_bs_rr_2,
-	generic_bs_rr_4,
-	NULL,
-
-	/* write (single) stream */
-	generic_bs_w_1,
-	generic_armv4_bs_w_2,
-	generic_bs_w_4,
-	NULL,
+	.bs_rr_1_s	= generic_bs_rr_1,
+	.bs_rr_2_s	= generic_bs_rr_2,
+	.bs_rr_4_s	= generic_bs_rr_4,
+	.bs_rr_8_s	= BS_UNIMPLEMENTED,
+
+	/* write stream (single) */
+	.bs_w_1_s	= NULL,   /* Use inline code in bus.h */ 
+	.bs_w_2_s	= NULL,   /* Use inline code in bus.h */ 
+	.bs_w_4_s	= NULL,   /* Use inline code in bus.h */ 
+	.bs_w_8_s	= NULL,   /* Use inline code in bus.h */ 
 
 	/* write multiple stream */
-	generic_bs_wm_1,
-	generic_armv4_bs_wm_2,
-	generic_bs_wm_4,
-	NULL,
+	.bs_wm_1_s	= generic_bs_wm_1,
+	.bs_wm_2_s	= generic_bs_wm_2,
+	.bs_wm_4_s	= generic_bs_wm_4,
+	.bs_wm_8_s	= BS_UNIMPLEMENTED,
 
 	/* write region stream */
-	NULL,
-	generic_armv4_bs_wr_2,
-	generic_bs_wr_4,
-	NULL,
+	.bs_wr_1_s	= generic_bs_wr_1,
+	.bs_wr_2_s	= generic_bs_wr_2,
+	.bs_wr_4_s	= generic_bs_wr_4,
+	.bs_wr_8_s	= BS_UNIMPLEMENTED,
 };
 
 #ifndef FDT

Modified: stable/10/sys/arm/at91/files.at91
==============================================================================
--- stable/10/sys/arm/at91/files.at91	Fri Feb 13 22:08:19 2015	(r278726)
+++ stable/10/sys/arm/at91/files.at91	Fri Feb 13 22:32:02 2015	(r278727)
@@ -1,4 +1,5 @@
 # $FreeBSD$
+arm/arm/bus_space_generic.c	standard
 arm/arm/cpufunc_asm_arm9.S	standard
 arm/at91/at91_machdep.c		standard
 arm/at91/at91_aic.c		standard

Modified: stable/10/sys/arm/broadcom/bcm2835/files.bcm2835
==============================================================================
--- stable/10/sys/arm/broadcom/bcm2835/files.bcm2835	Fri Feb 13 22:08:19 2015	(r278726)
+++ stable/10/sys/arm/broadcom/bcm2835/files.bcm2835	Fri Feb 13 22:32:02 2015	(r278727)
@@ -16,7 +16,7 @@ arm/broadcom/bcm2835/bcm2835_systimer.c	
 arm/broadcom/bcm2835/bcm2835_wdog.c		standard
 dev/usb/controller/dwc_otg_fdt.c		optional dwcotg
 
-arm/arm/bus_space-v6.c				standard
+arm/arm/bus_space_base.c			standard
 arm/arm/bus_space_generic.c                     standard
 arm/arm/bus_space_asm_generic.S                 standard
 arm/arm/cpufunc_asm_arm11.S                     standard

Modified: stable/10/sys/arm/cavium/cns11xx/econa.c
==============================================================================
--- stable/10/sys/arm/cavium/cns11xx/econa.c	Fri Feb 13 22:08:19 2015	(r278726)
+++ stable/10/sys/arm/cavium/cns11xx/econa.c	Fri Feb 13 22:32:02 2015	(r278727)
@@ -56,117 +56,7 @@ unsigned int CPU_clock = 200000000;
 unsigned int AHB_clock;
 unsigned int APB_clock;
 
-bs_protos(generic);
-bs_protos(generic_armv4);
-
-struct bus_space econa_bs_tag = {
-	/* cookie */
-	(void *) 0,
-
-	/* mapping/unmapping */
-	generic_bs_map,
-	generic_bs_unmap,
-	generic_bs_subregion,
-
-	/* allocation/deallocation */
-	generic_bs_alloc,
-	generic_bs_free,
-
-	/* barrier */
-	generic_bs_barrier,
-
-	/* read (single) */
-	generic_bs_r_1,
-	generic_armv4_bs_r_2,
-	generic_bs_r_4,
-	NULL,
-
-	/* read multiple */
-	generic_bs_rm_1,
-	generic_armv4_bs_rm_2,
-	generic_bs_rm_4,
-	NULL,
-
-	/* read region */
-	generic_bs_rr_1,
-	generic_armv4_bs_rr_2,
-	generic_bs_rr_4,
-	NULL,
-
-	/* write (single) */
-	generic_bs_w_1,
-	generic_armv4_bs_w_2,
-	generic_bs_w_4,
-	NULL,
-
-	/* write multiple */
-	generic_bs_wm_1,
-	generic_armv4_bs_wm_2,
-	generic_bs_wm_4,
-	NULL,
-
-	/* write region */
-	NULL,
-	NULL,
-	NULL,
-	NULL,
-
-	/* set multiple */
-	NULL,
-	NULL,
-	NULL,
-	NULL,
-
-	/* set region */
-	NULL,
-	NULL,
-	NULL,
-	NULL,
-
-	/* copy */
-	NULL,
-	NULL,
-	NULL,
-	NULL,
-
-	/* read (single) stream */
-	NULL,
-	NULL,
-	NULL,
-	NULL,
-
-	/* read multiple stream */
-	NULL,
-	generic_armv4_bs_rm_2,
-	NULL,
-	NULL,
-
-	/* read region stream */
-	NULL,
-	NULL,
-	NULL,
-	NULL,
-
-	/* write (single) stream */
-	NULL,
-	NULL,
-	NULL,
-	NULL,
-
-	/* write multiple stream */
-	NULL,
-	generic_armv4_bs_wm_2,
-	NULL,
-	NULL,
-
-	/* write region stream */
-	NULL,
-	NULL,
-	NULL,
-	NULL
-};
-
-bus_space_tag_t obio_tag = &econa_bs_tag;
+bus_space_tag_t obio_tag;
 
 static int
 econa_probe(device_t dev)
@@ -465,8 +355,10 @@ econa_attach(device_t dev)
 	struct econa_softc *sc = device_get_softc(dev);
 	int i;
 
+	obio_tag = arm_base_bs_tag;
+
 	econa_softc = sc;
-	sc->ec_st = &econa_bs_tag;
+	sc->ec_st = arm_base_bs_tag;
 	sc->ec_sh = ECONA_IO_BASE;
 	sc->dev = dev;
 	if (bus_space_subregion(sc->ec_st, sc->ec_sh, ECONA_PIC_BASE,
@@ -548,7 +440,7 @@ econa_alloc_resource(device_t dev, devic
 		rle->res = rman_reserve_resource(&sc->ec_mem_rman,
 		    start, end, count, flags, child);
 		if (rle->res != NULL) {
-			rman_set_bustag(rle->res, &econa_bs_tag);
+			rman_set_bustag(rle->res, arm_base_bs_tag);
 			rman_set_bushandle(rle->res, start);
 		}
 		break;

Modified: stable/10/sys/arm/cavium/cns11xx/files.econa
==============================================================================
--- stable/10/sys/arm/cavium/cns11xx/files.econa	Fri Feb 13 22:08:19 2015	(r278726)
+++ stable/10/sys/arm/cavium/cns11xx/files.econa	Fri Feb 13 22:32:02 2015	(r278727)
@@ -6,6 +6,7 @@ arm/cavium/cns11xx/timer.c			standard
 arm/cavium/cns11xx/uart_bus_ec.c		optional	uart
 arm/cavium/cns11xx/uart_cpu_ec.c		optional	uart
 dev/uart/uart_dev_ns8250.c	optional	uart
+arm/arm/bus_space_base.c		standard
 arm/arm/bus_space_generic.c		standard
 arm/cavium/cns11xx/ehci_ebus.c	optional	ehci
 arm/cavium/cns11xx/ohci_ec.c	optional	ohci

Modified: stable/10/sys/arm/freescale/imx/files.imx51
==============================================================================
--- stable/10/sys/arm/freescale/imx/files.imx51	Fri Feb 13 22:08:19 2015	(r278726)
+++ stable/10/sys/arm/freescale/imx/files.imx51	Fri Feb 13 22:32:02 2015	(r278727)
@@ -10,7 +10,7 @@ kern/kern_clocksource.c			standard
 arm/freescale/imx/imx_common.c		standard
 arm/freescale/imx/imx_machdep.c		standard
 arm/freescale/imx/imx51_machdep.c	standard
-arm/arm/bus_space-v6.c			standard
+arm/arm/bus_space_base.c		standard
 
 # Dummy serial console
 #arm/freescale/imx/console.c		standard

Modified: stable/10/sys/arm/freescale/imx/files.imx53
==============================================================================
--- stable/10/sys/arm/freescale/imx/files.imx53	Fri Feb 13 22:08:19 2015	(r278726)
+++ stable/10/sys/arm/freescale/imx/files.imx53	Fri Feb 13 22:32:02 2015	(r278727)
@@ -10,7 +10,7 @@ kern/kern_clocksource.c			standard
 arm/freescale/imx/imx_common.c		standard
 arm/freescale/imx/imx_machdep.c		standard
 arm/freescale/imx/imx53_machdep.c	standard
-arm/arm/bus_space-v6.c			standard
+arm/arm/bus_space_base.c		standard
 
 # Special serial console for debuging early boot code
 #arm/freescale/imx/console.c		standard

Modified: stable/10/sys/arm/freescale/imx/files.imx6
==============================================================================
--- stable/10/sys/arm/freescale/imx/files.imx6	Fri Feb 13 22:08:19 2015	(r278726)
+++ stable/10/sys/arm/freescale/imx/files.imx6	Fri Feb 13 22:32:02 2015	(r278727)
@@ -15,7 +15,7 @@ kern/kern_clocksource.c			standard
 #
 arm/arm/gic.c				standard
 arm/arm/pl310.c				standard
-arm/arm/bus_space-v6.c			standard
+arm/arm/bus_space_base.c		standard
 arm/arm/mpcore_timer.c			standard
 arm/freescale/fsl_ocotp.c		standard
 arm/freescale/imx/imx6_anatop.c		standard

Modified: stable/10/sys/arm/freescale/vybrid/files.vybrid
==============================================================================
--- stable/10/sys/arm/freescale/vybrid/files.vybrid	Fri Feb 13 22:08:19 2015	(r278726)
+++ stable/10/sys/arm/freescale/vybrid/files.vybrid	Fri Feb 13 22:32:02 2015	(r278727)
@@ -9,7 +9,7 @@ arm/arm/cpufunc_asm_arm10.S			standard
 arm/arm/cpufunc_asm_arm11.S			standard
 arm/arm/cpufunc_asm_armv7.S			standard
 
-arm/arm/bus_space-v6.c				standard
+arm/arm/bus_space_base.c			standard
 arm/arm/gic.c					standard
 arm/arm/mpcore_timer.c				standard
 

Modified: stable/10/sys/arm/include/bus.h
==============================================================================
--- stable/10/sys/arm/include/bus.h	Fri Feb 13 22:08:19 2015	(r278726)
+++ stable/10/sys/arm/include/bus.h	Fri Feb 13 22:32:02 2015	(r278727)
@@ -79,172 +79,180 @@
 #define	BUS_SPACE_MAP_LINEAR		0x02
 #define	BUS_SPACE_MAP_PREFETCHABLE     	0x04
 
+/*
+ * Bus space for ARM.
+ *
+ * The functions used most often are grouped together at the beginning to ensure
+ * that all the data fits into a single cache line.  The inline implementations
+ * of single read/write access these values a lot.
+ */
 struct bus_space {
-	/* cookie */
-	void		*bs_cookie;
+	/* Read/write single and barrier: the most commonly used functions. */
+	uint8_t	 (*bs_r_1)(bus_space_tag_t, bus_space_handle_t, bus_size_t);
+	uint32_t (*bs_r_4)(bus_space_tag_t, bus_space_handle_t, bus_size_t);
+	void	 (*bs_w_1)(bus_space_tag_t, bus_space_handle_t,
+			   bus_size_t, uint8_t);
+	void	 (*bs_w_4)(bus_space_tag_t, bus_space_handle_t,
+			   bus_size_t, uint32_t);
+	void	 (*bs_barrier)(bus_space_tag_t, bus_space_handle_t,
+			       bus_size_t, bus_size_t, int);
+
+	/* Backlink to parent (if copied), and implementation private data. */
+	struct bus_space *bs_parent;
+	void		 *bs_privdata;
 
 	/* mapping/unmapping */
-	int		(*bs_map) (void *, bus_addr_t, bus_size_t,
+	int		(*bs_map) (bus_space_tag_t, bus_addr_t, bus_size_t,
 			    int, bus_space_handle_t *);
-	void		(*bs_unmap) (void *, bus_space_handle_t, bus_size_t);
-	int		(*bs_subregion) (void *, bus_space_handle_t,
+	void		(*bs_unmap) (bus_space_tag_t, bus_space_handle_t, bus_size_t);
+	int		(*bs_subregion) (bus_space_tag_t, bus_space_handle_t,
 			    bus_size_t, bus_size_t, bus_space_handle_t *);
 
 	/* allocation/deallocation */
-	int		(*bs_alloc) (void *, bus_addr_t, bus_addr_t,
+	int		(*bs_alloc) (bus_space_tag_t, bus_addr_t, bus_addr_t,
 			    bus_size_t, bus_size_t, bus_size_t, int,
 			    bus_addr_t *, bus_space_handle_t *);
-	void		(*bs_free) (void *, bus_space_handle_t,
+	void		(*bs_free) (bus_space_tag_t, bus_space_handle_t,
 			    bus_size_t);
 
-	/* get kernel virtual address */
-	/* barrier */
-	void		(*bs_barrier) (void *, bus_space_handle_t,
-			    bus_size_t, bus_size_t, int);
-
-	/* read (single) */
-	u_int8_t	(*bs_r_1) (void *, bus_space_handle_t, bus_size_t);
-	u_int16_t	(*bs_r_2) (void *, bus_space_handle_t, bus_size_t);
-	u_int32_t	(*bs_r_4) (void *, bus_space_handle_t, bus_size_t);
-	u_int64_t	(*bs_r_8) (void *, bus_space_handle_t, bus_size_t);
+	/* Read single, the less commonly used functions. */
+	uint16_t	(*bs_r_2) (bus_space_tag_t, bus_space_handle_t, bus_size_t);
+	uint64_t	(*bs_r_8) (bus_space_tag_t, bus_space_handle_t, bus_size_t);
 
 	/* read multiple */
-	void		(*bs_rm_1) (void *, bus_space_handle_t, bus_size_t,
-	    u_int8_t *, bus_size_t);
-	void		(*bs_rm_2) (void *, bus_space_handle_t, bus_size_t,
-	    u_int16_t *, bus_size_t);
-	void		(*bs_rm_4) (void *, bus_space_handle_t,
-			    bus_size_t, u_int32_t *, bus_size_t);
-	void		(*bs_rm_8) (void *, bus_space_handle_t,
-			    bus_size_t, u_int64_t *, bus_size_t);
+	void		(*bs_rm_1) (bus_space_tag_t, bus_space_handle_t, bus_size_t,
+	    uint8_t *, bus_size_t);
+	void		(*bs_rm_2) (bus_space_tag_t, bus_space_handle_t, bus_size_t,
+	    uint16_t *, bus_size_t);
+	void		(*bs_rm_4) (bus_space_tag_t, bus_space_handle_t,
+			    bus_size_t, uint32_t *, bus_size_t);
+	void		(*bs_rm_8) (bus_space_tag_t, bus_space_handle_t,
+			    bus_size_t, uint64_t *, bus_size_t);
 					
 	/* read region */
-	void		(*bs_rr_1) (void *, bus_space_handle_t,
-			    bus_size_t, u_int8_t *, bus_size_t);
-	void		(*bs_rr_2) (void *, bus_space_handle_t,
-			    bus_size_t, u_int16_t *, bus_size_t);
-	void		(*bs_rr_4) (void *, bus_space_handle_t,
-			    bus_size_t, u_int32_t *, bus_size_t);
-	void		(*bs_rr_8) (void *, bus_space_handle_t,
-			    bus_size_t, u_int64_t *, bus_size_t);
+	void		(*bs_rr_1) (bus_space_tag_t, bus_space_handle_t,
+			    bus_size_t, uint8_t *, bus_size_t);
+	void		(*bs_rr_2) (bus_space_tag_t, bus_space_handle_t,
+			    bus_size_t, uint16_t *, bus_size_t);
+	void		(*bs_rr_4) (bus_space_tag_t, bus_space_handle_t,
+			    bus_size_t, uint32_t *, bus_size_t);
+	void		(*bs_rr_8) (bus_space_tag_t, bus_space_handle_t,
+			    bus_size_t, uint64_t *, bus_size_t);
 					
-	/* write (single) */
-	void		(*bs_w_1) (void *, bus_space_handle_t,
-			    bus_size_t, u_int8_t);
-	void		(*bs_w_2) (void *, bus_space_handle_t,
-			    bus_size_t, u_int16_t);
-	void		(*bs_w_4) (void *, bus_space_handle_t,
-			    bus_size_t, u_int32_t);
-	void		(*bs_w_8) (void *, bus_space_handle_t,
-			    bus_size_t, u_int64_t);
+	/* Write single, the less commonly used functions. */
+	void		(*bs_w_2) (bus_space_tag_t, bus_space_handle_t,
+			    bus_size_t, uint16_t);
+	void		(*bs_w_8) (bus_space_tag_t, bus_space_handle_t,
+			    bus_size_t, uint64_t);
 
 	/* write multiple */
-	void		(*bs_wm_1) (void *, bus_space_handle_t,
-			    bus_size_t, const u_int8_t *, bus_size_t);
-	void		(*bs_wm_2) (void *, bus_space_handle_t,
-			    bus_size_t, const u_int16_t *, bus_size_t);
-	void		(*bs_wm_4) (void *, bus_space_handle_t,
-			    bus_size_t, const u_int32_t *, bus_size_t);
-	void		(*bs_wm_8) (void *, bus_space_handle_t,
-			    bus_size_t, const u_int64_t *, bus_size_t);
+	void		(*bs_wm_1) (bus_space_tag_t, bus_space_handle_t,
+			    bus_size_t, const uint8_t *, bus_size_t);
+	void		(*bs_wm_2) (bus_space_tag_t, bus_space_handle_t,
+			    bus_size_t, const uint16_t *, bus_size_t);
+	void		(*bs_wm_4) (bus_space_tag_t, bus_space_handle_t,
+			    bus_size_t, const uint32_t *, bus_size_t);
+	void		(*bs_wm_8) (bus_space_tag_t, bus_space_handle_t,
+			    bus_size_t, const uint64_t *, bus_size_t);
 					
 	/* write region */
-	void		(*bs_wr_1) (void *, bus_space_handle_t,
-			    bus_size_t, const u_int8_t *, bus_size_t);
-	void		(*bs_wr_2) (void *, bus_space_handle_t,
-			    bus_size_t, const u_int16_t *, bus_size_t);
-	void		(*bs_wr_4) (void *, bus_space_handle_t,
-			    bus_size_t, const u_int32_t *, bus_size_t);
-	void		(*bs_wr_8) (void *, bus_space_handle_t,
-			    bus_size_t, const u_int64_t *, bus_size_t);
+	void		(*bs_wr_1) (bus_space_tag_t, bus_space_handle_t,
+			    bus_size_t, const uint8_t *, bus_size_t);
+	void		(*bs_wr_2) (bus_space_tag_t, bus_space_handle_t,
+			    bus_size_t, const uint16_t *, bus_size_t);
+	void		(*bs_wr_4) (bus_space_tag_t, bus_space_handle_t,
+			    bus_size_t, const uint32_t *, bus_size_t);
+	void		(*bs_wr_8) (bus_space_tag_t, bus_space_handle_t,
+			    bus_size_t, const uint64_t *, bus_size_t);
 
 	/* set multiple */
-	void		(*bs_sm_1) (void *, bus_space_handle_t,
-			    bus_size_t, u_int8_t, bus_size_t);
-	void		(*bs_sm_2) (void *, bus_space_handle_t,
-			    bus_size_t, u_int16_t, bus_size_t);
-	void		(*bs_sm_4) (void *, bus_space_handle_t,
-			    bus_size_t, u_int32_t, bus_size_t);
-	void		(*bs_sm_8) (void *, bus_space_handle_t,
-			    bus_size_t, u_int64_t, bus_size_t);
+	void		(*bs_sm_1) (bus_space_tag_t, bus_space_handle_t,
+			    bus_size_t, uint8_t, bus_size_t);
+	void		(*bs_sm_2) (bus_space_tag_t, bus_space_handle_t,
+			    bus_size_t, uint16_t, bus_size_t);
+	void		(*bs_sm_4) (bus_space_tag_t, bus_space_handle_t,
+			    bus_size_t, uint32_t, bus_size_t);
+	void		(*bs_sm_8) (bus_space_tag_t, bus_space_handle_t,
+			    bus_size_t, uint64_t, bus_size_t);
 
 	/* set region */
-	void		(*bs_sr_1) (void *, bus_space_handle_t,
-			    bus_size_t, u_int8_t, bus_size_t);
-	void		(*bs_sr_2) (void *, bus_space_handle_t,
-			    bus_size_t, u_int16_t, bus_size_t);
-	void		(*bs_sr_4) (void *, bus_space_handle_t,
-			    bus_size_t, u_int32_t, bus_size_t);
-	void		(*bs_sr_8) (void *, bus_space_handle_t,
-			    bus_size_t, u_int64_t, bus_size_t);
+	void		(*bs_sr_1) (bus_space_tag_t, bus_space_handle_t,
+			    bus_size_t, uint8_t, bus_size_t);
+	void		(*bs_sr_2) (bus_space_tag_t, bus_space_handle_t,
+			    bus_size_t, uint16_t, bus_size_t);
+	void		(*bs_sr_4) (bus_space_tag_t, bus_space_handle_t,
+			    bus_size_t, uint32_t, bus_size_t);
+	void		(*bs_sr_8) (bus_space_tag_t, bus_space_handle_t,
+			    bus_size_t, uint64_t, bus_size_t);
 
 	/* copy */
-	void		(*bs_c_1) (void *, bus_space_handle_t, bus_size_t,
+	void		(*bs_c_1) (bus_space_tag_t, bus_space_handle_t, bus_size_t,
 			    bus_space_handle_t, bus_size_t, bus_size_t);
-	void		(*bs_c_2) (void *, bus_space_handle_t, bus_size_t,
+	void		(*bs_c_2) (bus_space_tag_t, bus_space_handle_t, bus_size_t,
 			    bus_space_handle_t, bus_size_t, bus_size_t);
-	void		(*bs_c_4) (void *, bus_space_handle_t, bus_size_t,
+	void		(*bs_c_4) (bus_space_tag_t, bus_space_handle_t, bus_size_t,
 			    bus_space_handle_t, bus_size_t, bus_size_t);
-	void		(*bs_c_8) (void *, bus_space_handle_t, bus_size_t,
+	void		(*bs_c_8) (bus_space_tag_t, bus_space_handle_t, bus_size_t,
 			    bus_space_handle_t, bus_size_t, bus_size_t);
 
 	/* read stream (single) */
-	u_int8_t	(*bs_r_1_s) (void *, bus_space_handle_t, bus_size_t);
-	u_int16_t	(*bs_r_2_s) (void *, bus_space_handle_t, bus_size_t);
-	u_int32_t	(*bs_r_4_s) (void *, bus_space_handle_t, bus_size_t);
-	u_int64_t	(*bs_r_8_s) (void *, bus_space_handle_t, bus_size_t);
+	uint8_t	(*bs_r_1_s) (bus_space_tag_t, bus_space_handle_t, bus_size_t);
+	uint16_t	(*bs_r_2_s) (bus_space_tag_t, bus_space_handle_t, bus_size_t);
+	uint32_t	(*bs_r_4_s) (bus_space_tag_t, bus_space_handle_t, bus_size_t);
+	uint64_t	(*bs_r_8_s) (bus_space_tag_t, bus_space_handle_t, bus_size_t);
 
 	/* read multiple stream */
-	void		(*bs_rm_1_s) (void *, bus_space_handle_t, bus_size_t,
-	    u_int8_t *, bus_size_t);
-	void		(*bs_rm_2_s) (void *, bus_space_handle_t, bus_size_t,
-	    u_int16_t *, bus_size_t);
-	void		(*bs_rm_4_s) (void *, bus_space_handle_t,
-			    bus_size_t, u_int32_t *, bus_size_t);
-	void		(*bs_rm_8_s) (void *, bus_space_handle_t,
-			    bus_size_t, u_int64_t *, bus_size_t);
+	void		(*bs_rm_1_s) (bus_space_tag_t, bus_space_handle_t, bus_size_t,
+	    uint8_t *, bus_size_t);
+	void		(*bs_rm_2_s) (bus_space_tag_t, bus_space_handle_t, bus_size_t,
+	    uint16_t *, bus_size_t);
+	void		(*bs_rm_4_s) (bus_space_tag_t, bus_space_handle_t,
+			    bus_size_t, uint32_t *, bus_size_t);
+	void		(*bs_rm_8_s) (bus_space_tag_t, bus_space_handle_t,
+			    bus_size_t, uint64_t *, bus_size_t);
 					
 	/* read region stream */
-	void		(*bs_rr_1_s) (void *, bus_space_handle_t,
-			    bus_size_t, u_int8_t *, bus_size_t);
-	void		(*bs_rr_2_s) (void *, bus_space_handle_t,
-			    bus_size_t, u_int16_t *, bus_size_t);
-	void		(*bs_rr_4_s) (void *, bus_space_handle_t,
-			    bus_size_t, u_int32_t *, bus_size_t);
-	void		(*bs_rr_8_s) (void *, bus_space_handle_t,
-			    bus_size_t, u_int64_t *, bus_size_t);
+	void		(*bs_rr_1_s) (bus_space_tag_t, bus_space_handle_t,
+			    bus_size_t, uint8_t *, bus_size_t);
+	void		(*bs_rr_2_s) (bus_space_tag_t, bus_space_handle_t,
+			    bus_size_t, uint16_t *, bus_size_t);
+	void		(*bs_rr_4_s) (bus_space_tag_t, bus_space_handle_t,
+			    bus_size_t, uint32_t *, bus_size_t);
+	void		(*bs_rr_8_s) (bus_space_tag_t, bus_space_handle_t,
+			    bus_size_t, uint64_t *, bus_size_t);
 					
 	/* write stream (single) */
-	void		(*bs_w_1_s) (void *, bus_space_handle_t,
-			    bus_size_t, u_int8_t);
-	void		(*bs_w_2_s) (void *, bus_space_handle_t,
-			    bus_size_t, u_int16_t);
-	void		(*bs_w_4_s) (void *, bus_space_handle_t,
-			    bus_size_t, u_int32_t);
-	void		(*bs_w_8_s) (void *, bus_space_handle_t,
-			    bus_size_t, u_int64_t);
+	void		(*bs_w_1_s) (bus_space_tag_t, bus_space_handle_t,
+			    bus_size_t, uint8_t);
+	void		(*bs_w_2_s) (bus_space_tag_t, bus_space_handle_t,
+			    bus_size_t, uint16_t);
+	void		(*bs_w_4_s) (bus_space_tag_t, bus_space_handle_t,
+			    bus_size_t, uint32_t);
+	void		(*bs_w_8_s) (bus_space_tag_t, bus_space_handle_t,
+			    bus_size_t, uint64_t);
 
 	/* write multiple stream */
-	void		(*bs_wm_1_s) (void *, bus_space_handle_t,
-			    bus_size_t, const u_int8_t *, bus_size_t);
-	void		(*bs_wm_2_s) (void *, bus_space_handle_t,
-			    bus_size_t, const u_int16_t *, bus_size_t);
-	void		(*bs_wm_4_s) (void *, bus_space_handle_t,
-			    bus_size_t, const u_int32_t *, bus_size_t);
-	void		(*bs_wm_8_s) (void *, bus_space_handle_t,
-			    bus_size_t, const u_int64_t *, bus_size_t);
+	void		(*bs_wm_1_s) (bus_space_tag_t, bus_space_handle_t,
+			    bus_size_t, const uint8_t *, bus_size_t);
+	void		(*bs_wm_2_s) (bus_space_tag_t, bus_space_handle_t,
+			    bus_size_t, const uint16_t *, bus_size_t);
+	void		(*bs_wm_4_s) (bus_space_tag_t, bus_space_handle_t,
+			    bus_size_t, const uint32_t *, bus_size_t);
+	void		(*bs_wm_8_s) (bus_space_tag_t, bus_space_handle_t,
+			    bus_size_t, const uint64_t *, bus_size_t);
 					
 	/* write region stream */
-	void		(*bs_wr_1_s) (void *, bus_space_handle_t,
-			    bus_size_t, const u_int8_t *, bus_size_t);
-	void		(*bs_wr_2_s) (void *, bus_space_handle_t,
-			    bus_size_t, const u_int16_t *, bus_size_t);
-	void		(*bs_wr_4_s) (void *, bus_space_handle_t,
-			    bus_size_t, const u_int32_t *, bus_size_t);
-	void		(*bs_wr_8_s) (void *, bus_space_handle_t,
-			    bus_size_t, const u_int64_t *, bus_size_t);
+	void		(*bs_wr_1_s) (bus_space_tag_t, bus_space_handle_t,
+			    bus_size_t, const uint8_t *, bus_size_t);
+	void		(*bs_wr_2_s) (bus_space_tag_t, bus_space_handle_t,
+			    bus_size_t, const uint16_t *, bus_size_t);
+	void		(*bs_wr_4_s) (bus_space_tag_t, bus_space_handle_t,
+			    bus_size_t, const uint32_t *, bus_size_t);
+	void		(*bs_wr_8_s) (bus_space_tag_t, bus_space_handle_t,
+			    bus_size_t, const uint64_t *, bus_size_t);
 };
 
+extern bus_space_tag_t arm_base_bs_tag;
 
 /*
  * Utility macros; INTERNAL USE ONLY.
@@ -252,51 +260,69 @@ struct bus_space {
 #define	__bs_c(a,b)		__CONCAT(a,b)
 #define	__bs_opname(op,size)	__bs_c(__bs_c(__bs_c(bs_,op),_),size)
 

*** DIFF OUTPUT TRUNCATED AT 1000 LINES ***


More information about the svn-src-all mailing list