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 */ +} +