Module Name: src
Committed By: matt
Date: Wed Jul 6 10:01:02 UTC 2011
Modified Files:
src/sys/arch/mips/mips: bus_space_alignstride_chipdep.c
Log Message:
Make this play nicely with GCC 4.5. While there, make everything static,
get rid of global inlines, and move the init function to the end.
To generate a diff of this commit:
cvs rdiff -u -r1.13 -r1.14 \
src/sys/arch/mips/mips/bus_space_alignstride_chipdep.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/mips/mips/bus_space_alignstride_chipdep.c
diff -u src/sys/arch/mips/mips/bus_space_alignstride_chipdep.c:1.13 src/sys/arch/mips/mips/bus_space_alignstride_chipdep.c:1.14
--- src/sys/arch/mips/mips/bus_space_alignstride_chipdep.c:1.13 Sun Feb 20 07:45:47 2011
+++ src/sys/arch/mips/mips/bus_space_alignstride_chipdep.c Wed Jul 6 10:01:02 2011
@@ -1,4 +1,4 @@
-/* $NetBSD: bus_space_alignstride_chipdep.c,v 1.13 2011/02/20 07:45:47 matt Exp $ */
+/* $NetBSD: bus_space_alignstride_chipdep.c,v 1.14 2011/07/06 10:01:02 matt Exp $ */
/*-
* Copyright (c) 1998, 2000, 2001 The NetBSD Foundation, Inc.
@@ -81,7 +81,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: bus_space_alignstride_chipdep.c,v 1.13 2011/02/20 07:45:47 matt Exp $");
+__KERNEL_RCSID(0, "$NetBSD: bus_space_alignstride_chipdep.c,v 1.14 2011/07/06 10:01:02 matt Exp $");
#ifdef CHIP_EXTENT
#include <sys/extent.h>
@@ -181,172 +181,6 @@
#error "Invalid chip access size!"
#endif
-/* mapping/unmapping */
-int __BS(map)(void *, bus_addr_t, bus_size_t, int,
- bus_space_handle_t *, int);
-void __BS(unmap)(void *, bus_space_handle_t, bus_size_t, int);
-int __BS(subregion)(void *, bus_space_handle_t, bus_size_t,
- bus_size_t, bus_space_handle_t *);
-
-int __BS(translate)(void *, bus_addr_t, bus_size_t, int,
- struct mips_bus_space_translation *);
-int __BS(get_window)(void *, int,
- struct mips_bus_space_translation *);
-
-/* allocation/deallocation */
-int __BS(alloc)(void *, bus_addr_t, bus_addr_t, bus_size_t,
- bus_size_t, bus_addr_t, int, bus_addr_t *,
- bus_space_handle_t *);
-void __BS(free)(void *, bus_space_handle_t, bus_size_t);
-
-/* get kernel virtual address */
-void * __BS(vaddr)(void *, bus_space_handle_t);
-
-/* mmap for user */
-paddr_t __BS(mmap)(void *, bus_addr_t, off_t, int, int);
-
-/* barrier */
-inline void __BS(barrier)(void *, bus_space_handle_t, bus_size_t,
- bus_size_t, int);
-
-/* read (single) */
-inline uint8_t __BS(read_1)(void *, bus_space_handle_t, bus_size_t);
-inline uint16_t __BS(read_2)(void *, bus_space_handle_t, bus_size_t);
-inline uint32_t __BS(read_4)(void *, bus_space_handle_t, bus_size_t);
-inline uint64_t __BS(read_8)(void *, bus_space_handle_t, bus_size_t);
-
-/* read multiple */
-void __BS(read_multi_1)(void *, bus_space_handle_t, bus_size_t,
- uint8_t *, bus_size_t);
-void __BS(read_multi_2)(void *, bus_space_handle_t, bus_size_t,
- uint16_t *, bus_size_t);
-void __BS(read_multi_4)(void *, bus_space_handle_t, bus_size_t,
- uint32_t *, bus_size_t);
-void __BS(read_multi_8)(void *, bus_space_handle_t, bus_size_t,
- uint64_t *, bus_size_t);
-
-/* read region */
-void __BS(read_region_1)(void *, bus_space_handle_t, bus_size_t,
- uint8_t *, bus_size_t);
-void __BS(read_region_2)(void *, bus_space_handle_t, bus_size_t,
- uint16_t *, bus_size_t);
-void __BS(read_region_4)(void *, bus_space_handle_t, bus_size_t,
- uint32_t *, bus_size_t);
-void __BS(read_region_8)(void *, bus_space_handle_t, bus_size_t,
- uint64_t *, bus_size_t);
-
-/* write (single) */
-inline void __BS(write_1)(void *, bus_space_handle_t, bus_size_t, uint8_t);
-inline void __BS(write_2)(void *, bus_space_handle_t, bus_size_t, uint16_t);
-inline void __BS(write_4)(void *, bus_space_handle_t, bus_size_t, uint32_t);
-inline void __BS(write_8)(void *, bus_space_handle_t, bus_size_t, uint64_t);
-
-/* write multiple */
-void __BS(write_multi_1)(void *, bus_space_handle_t, bus_size_t,
- const uint8_t *, bus_size_t);
-void __BS(write_multi_2)(void *, bus_space_handle_t, bus_size_t,
- const uint16_t *, bus_size_t);
-void __BS(write_multi_4)(void *, bus_space_handle_t, bus_size_t,
- const uint32_t *, bus_size_t);
-void __BS(write_multi_8)(void *, bus_space_handle_t, bus_size_t,
- const uint64_t *, bus_size_t);
-
-/* write region */
-void __BS(write_region_1)(void *, bus_space_handle_t, bus_size_t,
- const uint8_t *, bus_size_t);
-void __BS(write_region_2)(void *, bus_space_handle_t, bus_size_t,
- const uint16_t *, bus_size_t);
-void __BS(write_region_4)(void *, bus_space_handle_t, bus_size_t,
- const uint32_t *, bus_size_t);
-void __BS(write_region_8)(void *, bus_space_handle_t, bus_size_t,
- const uint64_t *, bus_size_t);
-
-/* set multiple */
-void __BS(set_multi_1)(void *, bus_space_handle_t, bus_size_t,
- uint8_t, bus_size_t);
-void __BS(set_multi_2)(void *, bus_space_handle_t, bus_size_t,
- uint16_t, bus_size_t);
-void __BS(set_multi_4)(void *, bus_space_handle_t, bus_size_t,
- uint32_t, bus_size_t);
-void __BS(set_multi_8)(void *, bus_space_handle_t, bus_size_t,
- uint64_t, bus_size_t);
-
-/* set region */
-void __BS(set_region_1)(void *, bus_space_handle_t, bus_size_t,
- uint8_t, bus_size_t);
-void __BS(set_region_2)(void *, bus_space_handle_t, bus_size_t,
- uint16_t, bus_size_t);
-void __BS(set_region_4)(void *, bus_space_handle_t, bus_size_t,
- uint32_t, bus_size_t);
-void __BS(set_region_8)(void *, bus_space_handle_t, bus_size_t,
- uint64_t, bus_size_t);
-
-/* copy */
-void __BS(copy_region_1)(void *, bus_space_handle_t, bus_size_t,
- bus_space_handle_t, bus_size_t, bus_size_t);
-void __BS(copy_region_2)(void *, bus_space_handle_t, bus_size_t,
- bus_space_handle_t, bus_size_t, bus_size_t);
-void __BS(copy_region_4)(void *, bus_space_handle_t, bus_size_t,
- bus_space_handle_t, bus_size_t, bus_size_t);
-void __BS(copy_region_8)(void *, bus_space_handle_t, bus_size_t,
- bus_space_handle_t, bus_size_t, bus_size_t);
-
-#ifdef CHIP_NEED_STREAM
-
-/* read (single), stream */
-inline uint8_t __BS(read_stream_1)(void *, bus_space_handle_t, bus_size_t);
-inline uint16_t __BS(read_stream_2)(void *, bus_space_handle_t, bus_size_t);
-inline uint32_t __BS(read_stream_4)(void *, bus_space_handle_t, bus_size_t);
-inline uint64_t __BS(read_stream_8)(void *, bus_space_handle_t, bus_size_t);
-
-/* read multiple, stream */
-void __BS(read_multi_stream_1)(void *, bus_space_handle_t, bus_size_t,
- uint8_t *, bus_size_t);
-void __BS(read_multi_stream_2)(void *, bus_space_handle_t, bus_size_t,
- uint16_t *, bus_size_t);
-void __BS(read_multi_stream_4)(void *, bus_space_handle_t, bus_size_t,
- uint32_t *, bus_size_t);
-void __BS(read_multi_stream_8)(void *, bus_space_handle_t, bus_size_t,
- uint64_t *, bus_size_t);
-
-/* read region, stream */
-void __BS(read_region_stream_1)(void *, bus_space_handle_t, bus_size_t,
- uint8_t *, bus_size_t);
-void __BS(read_region_stream_2)(void *, bus_space_handle_t, bus_size_t,
- uint16_t *, bus_size_t);
-void __BS(read_region_stream_4)(void *, bus_space_handle_t, bus_size_t,
- uint32_t *, bus_size_t);
-void __BS(read_region_stream_8)(void *, bus_space_handle_t, bus_size_t,
- uint64_t *, bus_size_t);
-
-/* write (single), stream */
-inline void __BS(write_stream_1)(void *, bus_space_handle_t, bus_size_t, uint8_t);
-inline void __BS(write_stream_2)(void *, bus_space_handle_t, bus_size_t, uint16_t);
-inline void __BS(write_stream_4)(void *, bus_space_handle_t, bus_size_t, uint32_t);
-inline void __BS(write_stream_8)(void *, bus_space_handle_t, bus_size_t, uint64_t);
-
-/* write multiple, stream */
-void __BS(write_multi_stream_1)(void *, bus_space_handle_t, bus_size_t,
- const uint8_t *, bus_size_t);
-void __BS(write_multi_stream_2)(void *, bus_space_handle_t, bus_size_t,
- const uint16_t *, bus_size_t);
-void __BS(write_multi_stream_4)(void *, bus_space_handle_t, bus_size_t,
- const uint32_t *, bus_size_t);
-void __BS(write_multi_stream_8)(void *, bus_space_handle_t, bus_size_t,
- const uint64_t *, bus_size_t);
-
-/* write region, stream */
-void __BS(write_region_stream_1)(void *, bus_space_handle_t, bus_size_t,
- const uint8_t *, bus_size_t);
-void __BS(write_region_stream_2)(void *, bus_space_handle_t, bus_size_t,
- const uint16_t *, bus_size_t);
-void __BS(write_region_stream_4)(void *, bus_space_handle_t, bus_size_t,
- const uint32_t *, bus_size_t);
-void __BS(write_region_stream_8)(void *, bus_space_handle_t, bus_size_t,
- const uint64_t *, bus_size_t);
-
-#endif /* CHIP_NEED_STREAM */
-
#ifdef CHIP_EXTENT
#ifndef CHIP_EX_STORE
static long
@@ -385,237 +219,53 @@
#endif
-void
-__BS(init)(bus_space_tag_t t, void *v)
+static int
+__BS(get_window)(void *v, int window, struct mips_bus_space_translation *mbst)
{
-#ifdef CHIP_EXTENT
- struct extent *ex;
-#endif
-
- /*
- * Initialize the bus space tag.
- */
-
- /* cookie */
- t->bs_cookie = v;
-
- /* mapping/unmapping */
- t->bs_map = __BS(map);
- t->bs_unmap = __BS(unmap);
- t->bs_subregion = __BS(subregion);
-
- t->bs_translate = __BS(translate);
- t->bs_get_window = __BS(get_window);
-
- /* allocation/deallocation */
- t->bs_alloc = __BS(alloc);
- t->bs_free = __BS(free);
-
- /* get kernel virtual address */
- t->bs_vaddr = __BS(vaddr);
-
- /* mmap for user */
- t->bs_mmap = __BS(mmap);
-
- /* barrier */
- t->bs_barrier = __BS(barrier);
-
- /* read (single) */
- t->bs_r_1 = __BS(read_1);
- t->bs_r_2 = __BS(read_2);
- t->bs_r_4 = __BS(read_4);
- t->bs_r_8 = __BS(read_8);
-
- /* read multiple */
- t->bs_rm_1 = __BS(read_multi_1);
- t->bs_rm_2 = __BS(read_multi_2);
- t->bs_rm_4 = __BS(read_multi_4);
- t->bs_rm_8 = __BS(read_multi_8);
-
- /* read region */
- t->bs_rr_1 = __BS(read_region_1);
- t->bs_rr_2 = __BS(read_region_2);
- t->bs_rr_4 = __BS(read_region_4);
- t->bs_rr_8 = __BS(read_region_8);
-
- /* write (single) */
- t->bs_w_1 = __BS(write_1);
- t->bs_w_2 = __BS(write_2);
- t->bs_w_4 = __BS(write_4);
- t->bs_w_8 = __BS(write_8);
-
- /* write multiple */
- t->bs_wm_1 = __BS(write_multi_1);
- t->bs_wm_2 = __BS(write_multi_2);
- t->bs_wm_4 = __BS(write_multi_4);
- t->bs_wm_8 = __BS(write_multi_8);
-
- /* write region */
- t->bs_wr_1 = __BS(write_region_1);
- t->bs_wr_2 = __BS(write_region_2);
- t->bs_wr_4 = __BS(write_region_4);
- t->bs_wr_8 = __BS(write_region_8);
-
- /* set multiple */
- t->bs_sm_1 = __BS(set_multi_1);
- t->bs_sm_2 = __BS(set_multi_2);
- t->bs_sm_4 = __BS(set_multi_4);
- t->bs_sm_8 = __BS(set_multi_8);
-
- /* set region */
- t->bs_sr_1 = __BS(set_region_1);
- t->bs_sr_2 = __BS(set_region_2);
- t->bs_sr_4 = __BS(set_region_4);
- t->bs_sr_8 = __BS(set_region_8);
-
- /* copy */
- t->bs_c_1 = __BS(copy_region_1);
- t->bs_c_2 = __BS(copy_region_2);
- t->bs_c_4 = __BS(copy_region_4);
- t->bs_c_8 = __BS(copy_region_8);
-
-#ifdef CHIP_NEED_STREAM
- /* read (single), stream */
- t->bs_rs_1 = __BS(read_stream_1);
- t->bs_rs_2 = __BS(read_stream_2);
- t->bs_rs_4 = __BS(read_stream_4);
- t->bs_rs_8 = __BS(read_stream_8);
-
- /* read multiple, stream */
- t->bs_rms_1 = __BS(read_multi_stream_1);
- t->bs_rms_2 = __BS(read_multi_stream_2);
- t->bs_rms_4 = __BS(read_multi_stream_4);
- t->bs_rms_8 = __BS(read_multi_stream_8);
-
- /* read region, stream */
- t->bs_rrs_1 = __BS(read_region_stream_1);
- t->bs_rrs_2 = __BS(read_region_stream_2);
- t->bs_rrs_4 = __BS(read_region_stream_4);
- t->bs_rrs_8 = __BS(read_region_stream_8);
-
- /* write (single), stream */
- t->bs_ws_1 = __BS(write_stream_1);
- t->bs_ws_2 = __BS(write_stream_2);
- t->bs_ws_4 = __BS(write_stream_4);
- t->bs_ws_8 = __BS(write_stream_8);
-
- /* write multiple, stream */
- t->bs_wms_1 = __BS(write_multi_stream_1);
- t->bs_wms_2 = __BS(write_multi_stream_2);
- t->bs_wms_4 = __BS(write_multi_stream_4);
- t->bs_wms_8 = __BS(write_multi_stream_8);
-
- /* write region, stream */
- t->bs_wrs_1 = __BS(write_region_stream_1);
- t->bs_wrs_2 = __BS(write_region_stream_2);
- t->bs_wrs_4 = __BS(write_region_stream_4);
- t->bs_wrs_8 = __BS(write_region_stream_8);
-
-#else /* CHIP_NEED_STREAM */
-
- /* read (single), stream */
- t->bs_rs_1 = __BS(read_1);
- t->bs_rs_2 = __BS(read_2);
- t->bs_rs_4 = __BS(read_4);
- t->bs_rs_8 = __BS(read_8);
-
- /* read multiple, stream */
- t->bs_rms_1 = __BS(read_multi_1);
- t->bs_rms_2 = __BS(read_multi_2);
- t->bs_rms_4 = __BS(read_multi_4);
- t->bs_rms_8 = __BS(read_multi_8);
-
- /* read region, stream */
- t->bs_rrs_1 = __BS(read_region_1);
- t->bs_rrs_2 = __BS(read_region_2);
- t->bs_rrs_4 = __BS(read_region_4);
- t->bs_rrs_8 = __BS(read_region_8);
-
- /* write (single), stream */
- t->bs_ws_1 = __BS(write_1);
- t->bs_ws_2 = __BS(write_2);
- t->bs_ws_4 = __BS(write_4);
- t->bs_ws_8 = __BS(write_8);
-
- /* write multiple, stream */
- t->bs_wms_1 = __BS(write_multi_1);
- t->bs_wms_2 = __BS(write_multi_2);
- t->bs_wms_4 = __BS(write_multi_4);
- t->bs_wms_8 = __BS(write_multi_8);
-
- /* write region, stream */
- t->bs_wrs_1 = __BS(write_region_1);
- t->bs_wrs_2 = __BS(write_region_2);
- t->bs_wrs_4 = __BS(write_region_4);
- t->bs_wrs_8 = __BS(write_region_8);
-#endif /* CHIP_NEED_STREAM */
-
-#ifdef CHIP_EXTENT
- /* XXX WE WANT EXTENT_NOCOALESCE, BUT WE CAN'T USE IT. XXX */
- ex = extent_create(__S(__BS(bus)), 0x0UL, ~0UL, M_DEVBUF,
- (void *)CHIP_EX_STORE(v), CHIP_EX_STORE_SIZE(v), EX_NOWAIT);
- extent_alloc_region(ex, 0, ~0UL, EX_NOWAIT);
+ switch (window) {
#ifdef CHIP_W1_BUS_START
- /*
- * The window may be disabled. We notice this by seeing
- * -1 as the bus base address.
- */
- if (CHIP_W1_BUS_START(v) == (bus_addr_t) -1) {
-#ifdef EXTENT_DEBUG
- printf("%s: this space is disabled\n", __S(__BS(init)));
+ case 0:
+ mbst->mbst_bus_start = CHIP_W1_BUS_START(v);
+ mbst->mbst_bus_end = CHIP_W1_BUS_END(v);
+ mbst->mbst_sys_start = CHIP_W1_SYS_START(v);
+ mbst->mbst_sys_end = CHIP_W1_SYS_END(v);
+ mbst->mbst_align_stride = CHIP_ALIGN_STRIDE;
+ mbst->mbst_flags = 0;
+ break;
#endif
- return;
- }
-#ifdef EXTENT_DEBUG
- printf("%s: freeing from %#"PRIxBUSADDR" to %#"PRIxBUSADDR"\n",
- __S(__BS(init)), (bus_addr_t)CHIP_W1_BUS_START(v),
- (bus_addr_t)CHIP_W1_BUS_END(v));
-#endif
- extent_free(ex, CHIP_W1_BUS_START(v),
- CHIP_W1_BUS_END(v) - CHIP_W1_BUS_START(v) + 1, EX_NOWAIT);
-#endif
#ifdef CHIP_W2_BUS_START
- if (CHIP_W2_BUS_START(v) != CHIP_W1_BUS_START(v)) {
-#ifdef EXTENT_DEBUG
- printf("xxx: freeing from 0x%lx to 0x%lx\n",
- (u_long)CHIP_W2_BUS_START(v), (u_long)CHIP_W2_BUS_END(v));
-#endif
- extent_free(ex, CHIP_W2_BUS_START(v),
- CHIP_W2_BUS_END(v) - CHIP_W2_BUS_START(v) + 1, EX_NOWAIT);
- } else {
-#ifdef EXTENT_DEBUG
- printf("xxx: window 2 (0x%lx to 0x%lx) overlaps window 1\n",
- (u_long)CHIP_W2_BUS_START(v), (u_long)CHIP_W2_BUS_END(v));
-#endif
- }
+ case 1:
+ mbst->mbst_bus_start = CHIP_W2_BUS_START(v);
+ mbst->mbst_bus_end = CHIP_W2_BUS_END(v);
+ mbst->mbst_sys_start = CHIP_W2_SYS_START(v);
+ mbst->mbst_sys_end = CHIP_W2_SYS_END(v);
+ mbst->mbst_align_stride = CHIP_ALIGN_STRIDE;
+ mbst->mbst_flags = 0;
+ break;
#endif
+
#ifdef CHIP_W3_BUS_START
- if (CHIP_W3_BUS_START(v) != CHIP_W1_BUS_START(v) &&
- CHIP_W3_BUS_START(v) != CHIP_W2_BUS_START(v)) {
-#ifdef EXTENT_DEBUG
- printf("xxx: freeing from 0x%lx to 0x%lx\n",
- (u_long)CHIP_W3_BUS_START(v), (u_long)CHIP_W3_BUS_END(v));
-#endif
- extent_free(ex, CHIP_W3_BUS_START(v),
- CHIP_W3_BUS_END(v) - CHIP_W3_BUS_START(v) + 1, EX_NOWAIT);
- } else {
-#ifdef EXTENT_DEBUG
- printf("xxx: window 2 (0x%lx to 0x%lx) overlaps window 1\n",
- (u_long)CHIP_W2_BUS_START(v), (u_long)CHIP_W2_BUS_END(v));
+ case 2:
+ mbst->mbst_bus_start = CHIP_W3_BUS_START(v);
+ mbst->mbst_bus_end = CHIP_W3_BUS_END(v);
+ mbst->mbst_sys_start = CHIP_W3_SYS_START(v);
+ mbst->mbst_sys_end = CHIP_W3_SYS_END(v);
+ mbst->mbst_align_stride = CHIP_ALIGN_STRIDE;
+ mbst->mbst_flags = 0;
+ break;
#endif
+
+ default:
+ panic(__S(__BS(get_window)) ": invalid window %d",
+ window);
}
-#endif
-#ifdef EXTENT_DEBUG
- extent_print(ex);
-#endif
- CHIP_EXTENT(v) = ex;
-#endif /* CHIP_EXTENT */
+ return (0);
}
-int
+static int
__BS(translate)(void *v, bus_addr_t addr, bus_size_t len, int flags,
struct mips_bus_space_translation *mbst)
{
@@ -652,65 +302,19 @@
(u_long)CHIP_W1_BUS_START(v), (u_long)CHIP_W1_BUS_END(v));
#endif
#ifdef CHIP_W2_BUS_START
- printf("%s: window[2]=0x%lx-0x%lx\n", __S(__BS(map)),
- (u_long)CHIP_W2_BUS_START(v), (u_long)CHIP_W2_BUS_END(v));
-#endif
-#ifdef CHIP_W3_BUS_START
- printf("%s: window[3]=0x%lx-0x%lx\n", __S(__BS(map)),
- (u_long)CHIP_W3_BUS_START(v), (u_long)CHIP_W3_BUS_END(v));
-#endif
-#endif /* EXTENT_DEBUG */
- /* No translation. */
- return (EINVAL);
-}
-
-int
-__BS(get_window)(void *v, int window, struct mips_bus_space_translation *mbst)
-{
-
- switch (window) {
-#ifdef CHIP_W1_BUS_START
- case 0:
- mbst->mbst_bus_start = CHIP_W1_BUS_START(v);
- mbst->mbst_bus_end = CHIP_W1_BUS_END(v);
- mbst->mbst_sys_start = CHIP_W1_SYS_START(v);
- mbst->mbst_sys_end = CHIP_W1_SYS_END(v);
- mbst->mbst_align_stride = CHIP_ALIGN_STRIDE;
- mbst->mbst_flags = 0;
- break;
-#endif
-
-#ifdef CHIP_W2_BUS_START
- case 1:
- mbst->mbst_bus_start = CHIP_W2_BUS_START(v);
- mbst->mbst_bus_end = CHIP_W2_BUS_END(v);
- mbst->mbst_sys_start = CHIP_W2_SYS_START(v);
- mbst->mbst_sys_end = CHIP_W2_SYS_END(v);
- mbst->mbst_align_stride = CHIP_ALIGN_STRIDE;
- mbst->mbst_flags = 0;
- break;
+ printf("%s: window[2]=0x%lx-0x%lx\n", __S(__BS(map)),
+ (u_long)CHIP_W2_BUS_START(v), (u_long)CHIP_W2_BUS_END(v));
#endif
-
#ifdef CHIP_W3_BUS_START
- case 2:
- mbst->mbst_bus_start = CHIP_W3_BUS_START(v);
- mbst->mbst_bus_end = CHIP_W3_BUS_END(v);
- mbst->mbst_sys_start = CHIP_W3_SYS_START(v);
- mbst->mbst_sys_end = CHIP_W3_SYS_END(v);
- mbst->mbst_align_stride = CHIP_ALIGN_STRIDE;
- mbst->mbst_flags = 0;
- break;
+ printf("%s: window[3]=0x%lx-0x%lx\n", __S(__BS(map)),
+ (u_long)CHIP_W3_BUS_START(v), (u_long)CHIP_W3_BUS_END(v));
#endif
-
- default:
- panic(__S(__BS(get_window)) ": invalid window %d",
- window);
- }
-
- return (0);
+#endif /* EXTENT_DEBUG */
+ /* No translation. */
+ return (EINVAL);
}
-int
+static int
__BS(map)(void *v, bus_addr_t addr, bus_size_t size, int flags,
bus_space_handle_t *hp, int acct)
{
@@ -790,7 +394,7 @@
return (0);
}
-void
+static void
__BS(unmap)(void *v, bus_space_handle_t h, bus_size_t size, int acct)
{
#if !defined(_LP64) || defined(CHIP_EXTENT)
@@ -901,7 +505,7 @@
#endif /* CHIP_EXTENT */
}
-int
+static int
__BS(subregion)(void *v, bus_space_handle_t h, bus_size_t offset,
bus_size_t size, bus_space_handle_t *nh)
{
@@ -910,7 +514,7 @@
return (0);
}
-int
+static int
__BS(alloc)(void *v, bus_addr_t rstart, bus_addr_t rend, bus_size_t size,
bus_size_t align, bus_size_t boundary, int flags, bus_addr_t *addrp,
bus_space_handle_t *bshp)
@@ -983,7 +587,7 @@
#endif /* CHIP_EXTENT */
}
-void
+static void
__BS(free)(void *v, bus_space_handle_t bsh, bus_size_t size)
{
@@ -991,7 +595,7 @@
__BS(unmap)(v, bsh, size, 1);
}
-void *
+static void *
__BS(vaddr)(void *v, bus_space_handle_t bsh)
{
@@ -1003,7 +607,7 @@
#endif
}
-paddr_t
+static paddr_t
__BS(mmap)(void *v, bus_addr_t addr, off_t off, int prot, int flags)
{
#ifdef CHIP_IO
@@ -1029,7 +633,7 @@
#endif
}
-inline void
+static void
__BS(barrier)(void *v, bus_space_handle_t h, bus_size_t o, bus_size_t l, int f)
{
@@ -1038,7 +642,7 @@
wbflush();
}
-inline uint8_t
+static uint8_t
__BS(read_1)(void *v, bus_space_handle_t h, bus_size_t off)
{
#if CHIP_ACCESS_SIZE > 1
@@ -1057,7 +661,7 @@
return r;
}
-inline uint16_t
+static uint16_t
__BS(read_2)(void *v, bus_space_handle_t h, bus_size_t off)
{
#if CHIP_ACCESS_SIZE > 2
@@ -1077,7 +681,7 @@
return r;
}
-inline uint32_t
+static uint32_t
__BS(read_4)(void *v, bus_space_handle_t h, bus_size_t off)
{
#if CHIP_ACCESS_SIZE > 4
@@ -1097,7 +701,7 @@
return r;
}
-inline uint64_t
+static uint64_t
__BS(read_8)(void *v, bus_space_handle_t h, bus_size_t off)
{
volatile uint64_t *ptr;
@@ -1115,7 +719,7 @@
#define CHIP_read_multi_N(BYTES,TYPE) \
-void \
+static void \
__C(__BS(read_multi_),BYTES)(void *v, bus_space_handle_t h, \
bus_size_t o, TYPE *a, bus_size_t c) \
{ \
@@ -1132,7 +736,7 @@
CHIP_read_multi_N(8,uint64_t)
#define CHIP_read_region_N(BYTES,TYPE) \
-void \
+static void \
__C(__BS(read_region_),BYTES)(void *v, bus_space_handle_t h, \
bus_size_t o, TYPE *a, bus_size_t c) \
{ \
@@ -1148,7 +752,7 @@
CHIP_read_region_N(8,uint64_t)
-inline void
+static void
__BS(write_1)(void *v, bus_space_handle_t h, bus_size_t off, uint8_t val)
{
#if CHIP_ACCESS_SIZE > 1
@@ -1164,7 +768,7 @@
*ptr = CHIP_SWAP_ACCESS(((CHIP_TYPE)val) << shift);
}
-inline void
+static void
__BS(write_2)(void *v, bus_space_handle_t h, bus_size_t off, uint16_t val)
{
#if CHIP_ACCESS_SIZE > 2
@@ -1184,7 +788,7 @@
*ptr = CHIP_SWAP16(val);
}
-inline void
+static void
__BS(write_4)(void *v, bus_space_handle_t h, bus_size_t off, uint32_t val)
{
#if CHIP_ACCESS_SIZE > 4
@@ -1204,7 +808,7 @@
*ptr = CHIP_SWAP32(val);
}
-inline void
+static void
__BS(write_8)(void *v, bus_space_handle_t h, bus_size_t off, uint64_t val)
{
volatile uint64_t *ptr;
@@ -1218,7 +822,7 @@
}
#define CHIP_write_multi_N(BYTES,TYPE) \
-void \
+static void \
__C(__BS(write_multi_),BYTES)(void *v, bus_space_handle_t h, \
bus_size_t o, const TYPE *a, bus_size_t c) \
{ \
@@ -1235,7 +839,7 @@
CHIP_write_multi_N(8,uint64_t)
#define CHIP_write_region_N(BYTES,TYPE) \
-void \
+static void \
__C(__BS(write_region_),BYTES)(void *v, bus_space_handle_t h, \
bus_size_t o, const TYPE *a, bus_size_t c) \
{ \
@@ -1251,7 +855,7 @@
CHIP_write_region_N(8,uint64_t)
#define CHIP_set_multi_N(BYTES,TYPE) \
-void \
+static void \
__C(__BS(set_multi_),BYTES)(void *v, bus_space_handle_t h, \
bus_size_t o, TYPE val, bus_size_t c) \
{ \
@@ -1268,7 +872,7 @@
CHIP_set_multi_N(8,uint64_t)
#define CHIP_set_region_N(BYTES,TYPE) \
-void \
+static void \
__C(__BS(set_region_),BYTES)(void *v, bus_space_handle_t h, \
bus_size_t o, TYPE val, bus_size_t c) \
{ \
@@ -1284,7 +888,7 @@
CHIP_set_region_N(8,uint64_t)
#define CHIP_copy_region_N(BYTES) \
-void \
+static void \
__C(__BS(copy_region_),BYTES)(void *v, bus_space_handle_t h1, \
bus_size_t o1, bus_space_handle_t h2, bus_size_t o2, bus_size_t c) \
{ \
@@ -1309,7 +913,7 @@
#ifdef CHIP_NEED_STREAM
-inline uint8_t
+static uint8_t
__BS(read_stream_1)(void *v, bus_space_handle_t h, bus_size_t off)
{
#if CHIP_ACCESS_SIZE > 1
@@ -1322,7 +926,7 @@
return *ptr & 0xff;
}
-inline uint16_t
+static uint16_t
__BS(read_stream_2)(void *v, bus_space_handle_t h, bus_size_t off)
{
#if CHIP_ACCESS_SIZE > 2
@@ -1335,7 +939,7 @@
return *ptr & 0xffff;
}
-inline uint32_t
+static uint32_t
__BS(read_stream_4)(void *v, bus_space_handle_t h, bus_size_t off)
{
#if CHIP_ACCESS_SIZE > 4
@@ -1348,7 +952,7 @@
return *ptr & 0xffffffff;
}
-inline uint64_t
+static uint64_t
__BS(read_stream_8)(void *v, bus_space_handle_t h, bus_size_t off)
{
volatile uint64_t *ptr;
@@ -1358,7 +962,7 @@
}
#define CHIP_read_multi_stream_N(BYTES,TYPE) \
-void \
+static void \
__C(__BS(read_multi_stream_),BYTES)(void *v, bus_space_handle_t h, \
bus_size_t o, TYPE *a, bus_size_t c) \
{ \
@@ -1375,7 +979,7 @@
CHIP_read_multi_stream_N(8,uint64_t)
#define CHIP_read_region_stream_N(BYTES,TYPE) \
-void \
+static void \
__C(__BS(read_region_stream_),BYTES)(void *v, bus_space_handle_t h, \
bus_size_t o, TYPE *a, bus_size_t c) \
{ \
@@ -1390,7 +994,7 @@
CHIP_read_region_stream_N(4,uint32_t)
CHIP_read_region_stream_N(8,uint64_t)
-inline void
+static void
__BS(write_stream_1)(void *v, bus_space_handle_t h, bus_size_t off,
uint8_t val)
{
@@ -1404,7 +1008,7 @@
*ptr = val;
}
-inline void
+static void
__BS(write_stream_2)(void *v, bus_space_handle_t h, bus_size_t off,
uint16_t val)
{
@@ -1418,7 +1022,7 @@
*ptr = val;
}
-inline void
+static void
__BS(write_stream_4)(void *v, bus_space_handle_t h, bus_size_t off,
uint32_t val)
{
@@ -1432,7 +1036,7 @@
*ptr = val;
}
-inline void
+static void
__BS(write_stream_8)(void *v, bus_space_handle_t h, bus_size_t off,
uint64_t val)
{
@@ -1443,7 +1047,7 @@
}
#define CHIP_write_multi_stream_N(BYTES,TYPE) \
-void \
+static void \
__C(__BS(write_multi_stream_),BYTES)(void *v, bus_space_handle_t h, \
bus_size_t o, const TYPE *a, bus_size_t c) \
{ \
@@ -1460,7 +1064,7 @@
CHIP_write_multi_stream_N(8,uint64_t)
#define CHIP_write_region_stream_N(BYTES,TYPE) \
-void \
+static void \
__C(__BS(write_region_stream_),BYTES)(void *v, bus_space_handle_t h, \
bus_size_t o, const TYPE *a, bus_size_t c) \
{ \
@@ -1476,3 +1080,234 @@
CHIP_write_region_stream_N(8,uint64_t)
#endif /* CHIP_NEED_STREAM */
+
+void
+__BS(init)(bus_space_tag_t t, void *v)
+{
+#ifdef CHIP_EXTENT
+ struct extent *ex;
+#endif
+
+ /*
+ * Initialize the bus space tag.
+ */
+
+ /* cookie */
+ t->bs_cookie = v;
+
+ /* mapping/unmapping */
+ t->bs_map = __BS(map);
+ t->bs_unmap = __BS(unmap);
+ t->bs_subregion = __BS(subregion);
+
+ t->bs_translate = __BS(translate);
+ t->bs_get_window = __BS(get_window);
+
+ /* allocation/deallocation */
+ t->bs_alloc = __BS(alloc);
+ t->bs_free = __BS(free);
+
+ /* get kernel virtual address */
+ t->bs_vaddr = __BS(vaddr);
+
+ /* mmap for user */
+ t->bs_mmap = __BS(mmap);
+
+ /* barrier */
+ t->bs_barrier = __BS(barrier);
+
+ /* read (single) */
+ t->bs_r_1 = __BS(read_1);
+ t->bs_r_2 = __BS(read_2);
+ t->bs_r_4 = __BS(read_4);
+ t->bs_r_8 = __BS(read_8);
+
+ /* read multiple */
+ t->bs_rm_1 = __BS(read_multi_1);
+ t->bs_rm_2 = __BS(read_multi_2);
+ t->bs_rm_4 = __BS(read_multi_4);
+ t->bs_rm_8 = __BS(read_multi_8);
+
+ /* read region */
+ t->bs_rr_1 = __BS(read_region_1);
+ t->bs_rr_2 = __BS(read_region_2);
+ t->bs_rr_4 = __BS(read_region_4);
+ t->bs_rr_8 = __BS(read_region_8);
+
+ /* write (single) */
+ t->bs_w_1 = __BS(write_1);
+ t->bs_w_2 = __BS(write_2);
+ t->bs_w_4 = __BS(write_4);
+ t->bs_w_8 = __BS(write_8);
+
+ /* write multiple */
+ t->bs_wm_1 = __BS(write_multi_1);
+ t->bs_wm_2 = __BS(write_multi_2);
+ t->bs_wm_4 = __BS(write_multi_4);
+ t->bs_wm_8 = __BS(write_multi_8);
+
+ /* write region */
+ t->bs_wr_1 = __BS(write_region_1);
+ t->bs_wr_2 = __BS(write_region_2);
+ t->bs_wr_4 = __BS(write_region_4);
+ t->bs_wr_8 = __BS(write_region_8);
+
+ /* set multiple */
+ t->bs_sm_1 = __BS(set_multi_1);
+ t->bs_sm_2 = __BS(set_multi_2);
+ t->bs_sm_4 = __BS(set_multi_4);
+ t->bs_sm_8 = __BS(set_multi_8);
+
+ /* set region */
+ t->bs_sr_1 = __BS(set_region_1);
+ t->bs_sr_2 = __BS(set_region_2);
+ t->bs_sr_4 = __BS(set_region_4);
+ t->bs_sr_8 = __BS(set_region_8);
+
+ /* copy */
+ t->bs_c_1 = __BS(copy_region_1);
+ t->bs_c_2 = __BS(copy_region_2);
+ t->bs_c_4 = __BS(copy_region_4);
+ t->bs_c_8 = __BS(copy_region_8);
+
+#ifdef CHIP_NEED_STREAM
+ /* read (single), stream */
+ t->bs_rs_1 = __BS(read_stream_1);
+ t->bs_rs_2 = __BS(read_stream_2);
+ t->bs_rs_4 = __BS(read_stream_4);
+ t->bs_rs_8 = __BS(read_stream_8);
+
+ /* read multiple, stream */
+ t->bs_rms_1 = __BS(read_multi_stream_1);
+ t->bs_rms_2 = __BS(read_multi_stream_2);
+ t->bs_rms_4 = __BS(read_multi_stream_4);
+ t->bs_rms_8 = __BS(read_multi_stream_8);
+
+ /* read region, stream */
+ t->bs_rrs_1 = __BS(read_region_stream_1);
+ t->bs_rrs_2 = __BS(read_region_stream_2);
+ t->bs_rrs_4 = __BS(read_region_stream_4);
+ t->bs_rrs_8 = __BS(read_region_stream_8);
+
+ /* write (single), stream */
+ t->bs_ws_1 = __BS(write_stream_1);
+ t->bs_ws_2 = __BS(write_stream_2);
+ t->bs_ws_4 = __BS(write_stream_4);
+ t->bs_ws_8 = __BS(write_stream_8);
+
+ /* write multiple, stream */
+ t->bs_wms_1 = __BS(write_multi_stream_1);
+ t->bs_wms_2 = __BS(write_multi_stream_2);
+ t->bs_wms_4 = __BS(write_multi_stream_4);
+ t->bs_wms_8 = __BS(write_multi_stream_8);
+
+ /* write region, stream */
+ t->bs_wrs_1 = __BS(write_region_stream_1);
+ t->bs_wrs_2 = __BS(write_region_stream_2);
+ t->bs_wrs_4 = __BS(write_region_stream_4);
+ t->bs_wrs_8 = __BS(write_region_stream_8);
+
+#else /* CHIP_NEED_STREAM */
+
+ /* read (single), stream */
+ t->bs_rs_1 = __BS(read_1);
+ t->bs_rs_2 = __BS(read_2);
+ t->bs_rs_4 = __BS(read_4);
+ t->bs_rs_8 = __BS(read_8);
+
+ /* read multiple, stream */
+ t->bs_rms_1 = __BS(read_multi_1);
+ t->bs_rms_2 = __BS(read_multi_2);
+ t->bs_rms_4 = __BS(read_multi_4);
+ t->bs_rms_8 = __BS(read_multi_8);
+
+ /* read region, stream */
+ t->bs_rrs_1 = __BS(read_region_1);
+ t->bs_rrs_2 = __BS(read_region_2);
+ t->bs_rrs_4 = __BS(read_region_4);
+ t->bs_rrs_8 = __BS(read_region_8);
+
+ /* write (single), stream */
+ t->bs_ws_1 = __BS(write_1);
+ t->bs_ws_2 = __BS(write_2);
+ t->bs_ws_4 = __BS(write_4);
+ t->bs_ws_8 = __BS(write_8);
+
+ /* write multiple, stream */
+ t->bs_wms_1 = __BS(write_multi_1);
+ t->bs_wms_2 = __BS(write_multi_2);
+ t->bs_wms_4 = __BS(write_multi_4);
+ t->bs_wms_8 = __BS(write_multi_8);
+
+ /* write region, stream */
+ t->bs_wrs_1 = __BS(write_region_1);
+ t->bs_wrs_2 = __BS(write_region_2);
+ t->bs_wrs_4 = __BS(write_region_4);
+ t->bs_wrs_8 = __BS(write_region_8);
+#endif /* CHIP_NEED_STREAM */
+
+#ifdef CHIP_EXTENT
+ /* XXX WE WANT EXTENT_NOCOALESCE, BUT WE CAN'T USE IT. XXX */
+ ex = extent_create(__S(__BS(bus)), 0x0UL, ~0UL, M_DEVBUF,
+ (void *)CHIP_EX_STORE(v), CHIP_EX_STORE_SIZE(v), EX_NOWAIT);
+ extent_alloc_region(ex, 0, ~0UL, EX_NOWAIT);
+
+#ifdef CHIP_W1_BUS_START
+ /*
+ * The window may be disabled. We notice this by seeing
+ * -1 as the bus base address.
+ */
+ if (CHIP_W1_BUS_START(v) == (bus_addr_t) -1) {
+#ifdef EXTENT_DEBUG
+ printf("%s: this space is disabled\n", __S(__BS(init)));
+#endif
+ return;
+ }
+
+#ifdef EXTENT_DEBUG
+ printf("%s: freeing from %#"PRIxBUSADDR" to %#"PRIxBUSADDR"\n",
+ __S(__BS(init)), (bus_addr_t)CHIP_W1_BUS_START(v),
+ (bus_addr_t)CHIP_W1_BUS_END(v));
+#endif
+ extent_free(ex, CHIP_W1_BUS_START(v),
+ CHIP_W1_BUS_END(v) - CHIP_W1_BUS_START(v) + 1, EX_NOWAIT);
+#endif
+#ifdef CHIP_W2_BUS_START
+ if (CHIP_W2_BUS_START(v) != CHIP_W1_BUS_START(v)) {
+#ifdef EXTENT_DEBUG
+ printf("xxx: freeing from 0x%lx to 0x%lx\n",
+ (u_long)CHIP_W2_BUS_START(v), (u_long)CHIP_W2_BUS_END(v));
+#endif
+ extent_free(ex, CHIP_W2_BUS_START(v),
+ CHIP_W2_BUS_END(v) - CHIP_W2_BUS_START(v) + 1, EX_NOWAIT);
+ } else {
+#ifdef EXTENT_DEBUG
+ printf("xxx: window 2 (0x%lx to 0x%lx) overlaps window 1\n",
+ (u_long)CHIP_W2_BUS_START(v), (u_long)CHIP_W2_BUS_END(v));
+#endif
+ }
+#endif
+#ifdef CHIP_W3_BUS_START
+ if (CHIP_W3_BUS_START(v) != CHIP_W1_BUS_START(v) &&
+ CHIP_W3_BUS_START(v) != CHIP_W2_BUS_START(v)) {
+#ifdef EXTENT_DEBUG
+ printf("xxx: freeing from 0x%lx to 0x%lx\n",
+ (u_long)CHIP_W3_BUS_START(v), (u_long)CHIP_W3_BUS_END(v));
+#endif
+ extent_free(ex, CHIP_W3_BUS_START(v),
+ CHIP_W3_BUS_END(v) - CHIP_W3_BUS_START(v) + 1, EX_NOWAIT);
+ } else {
+#ifdef EXTENT_DEBUG
+ printf("xxx: window 2 (0x%lx to 0x%lx) overlaps window 1\n",
+ (u_long)CHIP_W2_BUS_START(v), (u_long)CHIP_W2_BUS_END(v));
+#endif
+ }
+#endif
+
+#ifdef EXTENT_DEBUG
+ extent_print(ex);
+#endif
+ CHIP_EXTENT(v) = ex;
+#endif /* CHIP_EXTENT */
+}
+