Module Name: src Committed By: dyoung Date: Wed Jul 20 21:30:13 UTC 2011
Modified Files: src/sys/arch/sh3/include: bus_funcs.h src/sys/arch/sh3/sh3: sh3_machdep.c Log Message: Remove redundant, static inline bus_space(9) declarations from sh3/bus_funcs.h and move the non-inline definitions to sh3/sh3_machdep.c. To generate a diff of this commit: cvs rdiff -u -r1.1 -r1.2 src/sys/arch/sh3/include/bus_funcs.h cvs rdiff -u -r1.92 -r1.93 src/sys/arch/sh3/sh3/sh3_machdep.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/sys/arch/sh3/include/bus_funcs.h diff -u src/sys/arch/sh3/include/bus_funcs.h:1.1 src/sys/arch/sh3/include/bus_funcs.h:1.2 --- src/sys/arch/sh3/include/bus_funcs.h:1.1 Fri Jul 1 17:10:01 2011 +++ src/sys/arch/sh3/include/bus_funcs.h Wed Jul 20 21:30:13 2011 @@ -1,4 +1,4 @@ -/* $NetBSD: bus_funcs.h,v 1.1 2011/07/01 17:10:01 dyoung Exp $ */ +/* $NetBSD: bus_funcs.h,v 1.2 2011/07/20 21:30:13 dyoung Exp $ */ /*- * Copyright (c) 1996, 1997 The NetBSD Foundation, Inc. @@ -64,9 +64,6 @@ #ifndef _SH3_BUS_FUNCS_H_ #define _SH3_BUS_FUNCS_H_ -int bus_space_map(bus_space_tag_t, bus_addr_t, bus_size_t size, - int, bus_space_handle_t *); - #ifdef SH4_PCMCIA int shpcmcia_memio_map(bus_space_tag_t, bus_addr_t, bus_size_t size, int, bus_space_handle_t *); @@ -82,694 +79,6 @@ #endif /* - * u_intN_t bus_space_read_N(bus_space_tag_t tag, - * bus_space_handle_t bsh, bus_size_t offset); - * - * Read a 1, 2, 4, or 8 byte quantity from bus space - * described by tag/handle/offset. - */ -static __inline uint8_t bus_space_read_1 - (bus_space_tag_t, bus_space_handle_t, bus_size_t); -static __inline uint16_t bus_space_read_2 - (bus_space_tag_t, bus_space_handle_t, bus_size_t); -static __inline uint32_t bus_space_read_4 - (bus_space_tag_t, bus_space_handle_t, bus_size_t); - -uint8_t -bus_space_read_1(bus_space_tag_t tag, bus_space_handle_t bsh, - bus_size_t offset) -{ - - return *(volatile uint8_t *)(bsh + offset); -} - -uint16_t -bus_space_read_2(bus_space_tag_t tag, bus_space_handle_t bsh, - bus_size_t offset) -{ - - return bswap16(*(volatile uint16_t *)(bsh + offset)); -} - -uint32_t -bus_space_read_4(bus_space_tag_t tag, bus_space_handle_t bsh, - bus_size_t offset) -{ - - return bswap32(*(volatile uint32_t *)(bsh + offset)); -} - -static __inline uint16_t bus_space_read_stream_2 - (bus_space_tag_t, bus_space_handle_t, bus_size_t); - -static __inline uint32_t bus_space_read_stream_4 - (bus_space_tag_t, bus_space_handle_t, bus_size_t); - -uint16_t -bus_space_read_stream_2(bus_space_tag_t tag, bus_space_handle_t bsh, - bus_size_t offset) -{ - - return *(volatile uint16_t *)(bsh + offset); -} - -uint32_t -bus_space_read_stream_4(bus_space_tag_t tag, bus_space_handle_t bsh, - bus_size_t offset) -{ - - return *(volatile uint32_t *)(bsh + offset); -} - -/* - * void bus_space_read_multi_N(bus_space_tag_t tag, - * bus_space_handle_t bsh, bus_size_t offset, - * u_intN_t *addr, size_t count); - * - * Read `count' 1, 2, 4, or 8 byte quantities from bus space - * described by tag/handle/offset and copy into buffer provided. - */ -static __inline void bus_space_read_multi_1(bus_space_tag_t, - bus_space_handle_t, bus_size_t, uint8_t *, bus_size_t); -static __inline void bus_space_read_multi_2(bus_space_tag_t, - bus_space_handle_t, bus_size_t, uint16_t *, bus_size_t); -static __inline void bus_space_read_multi_4(bus_space_tag_t, - bus_space_handle_t, bus_size_t, uint32_t *, bus_size_t); - -void -bus_space_read_multi_1(bus_space_tag_t tag, bus_space_handle_t bsh, - bus_size_t offset, uint8_t *addr, bus_size_t count) -{ - - while (count--) - *addr++ = bus_space_read_1(tag, bsh, offset); -} - -void -bus_space_read_multi_2(bus_space_tag_t tag, bus_space_handle_t bsh, - bus_size_t offset, uint16_t *addr, bus_size_t count) -{ - - while (count--) - *addr++ = bus_space_read_2(tag, bsh, offset); -} - -void -bus_space_read_multi_4(bus_space_tag_t tag, bus_space_handle_t bsh, - bus_size_t offset, uint32_t *addr, bus_size_t count) -{ - - while (count--) - *addr++ = bus_space_read_4(tag, bsh, offset); -} - -static __inline void bus_space_read_multi_stream_2(bus_space_tag_t, - bus_space_handle_t, bus_size_t, uint16_t *, bus_size_t); -static __inline void bus_space_read_multi_stream_4(bus_space_tag_t, - bus_space_handle_t, bus_size_t, uint32_t *, bus_size_t); - -void -bus_space_read_multi_stream_2(bus_space_tag_t tag, bus_space_handle_t bsh, - bus_size_t offset, uint16_t *addr, bus_size_t count) -{ - - while (count--) - *addr++ = *(volatile uint16_t *)(bsh + offset); -} - -void -bus_space_read_multi_stream_4(bus_space_tag_t tag, bus_space_handle_t bsh, - bus_size_t offset, uint32_t *addr, bus_size_t count) -{ - - while (count--) - *addr++ = *(volatile uint32_t *)(bsh + offset); -} - -/* - * int bus_space_alloc(bus_space_tag_t t, 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); - * - * Allocate a region of bus space. - */ -int sh_memio_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 *); - -#define bus_space_alloc(t, rs, re, s, a, b, f, ap, hp) \ - sh_memio_alloc((t), (rs), (re), (s), (a), (b), (f), (ap), (hp)) - -/* - * int bus_space_free(bus_space_tag_t t, - * bus_space_handle_t bsh, bus_size_t size); - * - * Free a region of bus space. - */ -void sh_memio_free(bus_space_tag_t, bus_space_handle_t, bus_size_t); - -#define bus_space_free(t, h, s) \ - sh_memio_free((t), (h), (s)) - -/* - * int bus_space_unmap(bus_space_tag_t t, - * bus_space_handle_t bsh, bus_size_t size); - * - * Unmap a region of bus space. - */ -void sh_memio_unmap(bus_space_tag_t, bus_space_handle_t, bus_size_t); - -#define bus_space_unmap(t, h, s) \ - sh_memio_unmap((t), (h), (s)) - -/* - * int bus_space_subregion(bus_space_tag_t t, - * bus_space_handle_t bsh, bus_size_t offset, bus_size_t size, - * bus_space_handle_t *nbshp); - * - * Get a new handle for a subregion of an already-mapped area of bus space. - */ -int sh_memio_subregion(bus_space_tag_t, bus_space_handle_t, - bus_size_t, bus_size_t, bus_space_handle_t *); - -#define bus_space_subregion(t, h, o, s, nhp) \ - sh_memio_subregion((t), (h), (o), (s), (nhp)) - -/* - * void bus_space_read_region_N(bus_space_tag_t tag, - * bus_space_handle_t bsh, bus_size_t offset, - * u_intN_t *addr, size_t count); - * - * Read `count' 1, 2, 4, or 8 byte quantities from bus space - * described by tag/handle and starting at `offset' and copy into - * buffer provided. - */ -static __inline void bus_space_read_region_1(bus_space_tag_t, - bus_space_handle_t, bus_size_t, uint8_t *, bus_size_t); -static __inline void bus_space_read_region_2(bus_space_tag_t, - bus_space_handle_t, bus_size_t, uint16_t *, bus_size_t); -static __inline void bus_space_read_region_4(bus_space_tag_t, - bus_space_handle_t, bus_size_t, uint32_t *, bus_size_t); - -void -bus_space_read_region_1(bus_space_tag_t tag, bus_space_handle_t bsh, - bus_size_t offset, uint8_t *addr, bus_size_t count) -{ - uint8_t *p = (uint8_t *)(bsh + offset); - - while (count--) - *addr++ = *p++; -} - -void -bus_space_read_region_2(bus_space_tag_t tag, bus_space_handle_t bsh, - bus_size_t offset, uint16_t *addr, bus_size_t count) -{ - uint16_t *p = (uint16_t *)(bsh + offset); - - while (count--) - *addr++ = bswap16(*p++); -} - -void -bus_space_read_region_4(bus_space_tag_t tag, bus_space_handle_t bsh, - bus_size_t offset, uint32_t *addr, bus_size_t count) -{ - uint32_t *p = (uint32_t *)(bsh + offset); - - while (count--) - *addr++ = bswap32(*p++); -} - -/* - * void bus_space_read_region_stream_N(bus_space_tag_t tag, - * bus_space_handle_t bsh, bus_size_t offset, - * u_intN_t *addr, size_t count); - * - * Read `count' 1, 2, 4, or 8 byte quantities from bus space - * described by tag/handle and starting at `offset' and copy into - * buffer provided. - */ -static __inline void bus_space_read_region_stream_1(bus_space_tag_t, - bus_space_handle_t, bus_size_t, uint8_t *, bus_size_t); -static __inline void bus_space_read_region_stream_2(bus_space_tag_t, - bus_space_handle_t, bus_size_t, uint16_t *, bus_size_t); -static __inline void bus_space_read_region_stream_4(bus_space_tag_t, - bus_space_handle_t, bus_size_t, uint32_t *, bus_size_t); - -void -bus_space_read_region_stream_1(bus_space_tag_t tag, bus_space_handle_t bsh, - bus_size_t offset, uint8_t *addr, bus_size_t count) -{ - uint8_t *p = (uint8_t *)(bsh + offset); - - while (count--) - *addr++ = *p++; -} - -void -bus_space_read_region_stream_2(bus_space_tag_t tag, bus_space_handle_t bsh, - bus_size_t offset, uint16_t *addr, bus_size_t count) -{ - uint16_t *p = (uint16_t *)(bsh + offset); - - while (count--) - *addr++ = *p++; -} - -void -bus_space_read_region_stream_4(bus_space_tag_t tag, bus_space_handle_t bsh, - bus_size_t offset, uint32_t *addr, bus_size_t count) -{ - uint32_t *p = (uint32_t *)(bsh + offset); - - while (count--) - *addr++ = *p++; -} - -/* - * void bus_space_write_region_N(bus_space_tag_t tag, - * bus_space_handle_t bsh, bus_size_t offset, - * const u_intN_t *addr, size_t count); - * - * Write `count' 1, 2, 4, or 8 byte quantities from the buffer provided - * to bus space described by tag/handle starting at `offset'. - */ -static __inline void bus_space_write_region_1(bus_space_tag_t, - bus_space_handle_t, bus_size_t, const uint8_t *, bus_size_t); -static __inline void bus_space_write_region_2(bus_space_tag_t, - bus_space_handle_t, bus_size_t, const uint16_t *, bus_size_t); -static __inline void bus_space_write_region_4(bus_space_tag_t, - bus_space_handle_t, bus_size_t, const uint32_t *, bus_size_t); - -void -bus_space_write_region_1(bus_space_tag_t tag, bus_space_handle_t bsh, - bus_size_t offset, const uint8_t *addr, bus_size_t count) -{ - uint8_t *p = (uint8_t *)(bsh + offset); - - while (count--) - *p++ = *addr++; -} - -void -bus_space_write_region_2(bus_space_tag_t tag, bus_space_handle_t bsh, - bus_size_t offset, const uint16_t *addr, bus_size_t count) -{ - uint16_t *p = (uint16_t *)(bsh + offset); - - while (count--) - *p++ = bswap16(*addr++); -} - -void -bus_space_write_region_4(bus_space_tag_t tag, bus_space_handle_t bsh, - bus_size_t offset, const uint32_t *addr, bus_size_t count) -{ - uint32_t *p = (uint32_t *)(bsh + offset); - - while (count--) - *p++ = bswap32(*addr++); -} - -/* - * void bus_space_write_region_stream_N(bus_space_tag_t tag, - * bus_space_handle_t bsh, bus_size_t offset, - * const u_intN_t *addr, size_t count); - * - * Write `count' 1, 2, 4, or 8 byte quantities from the buffer provided - * to bus space described by tag/handle starting at `offset'. - */ -static __inline void bus_space_write_region_stream_1(bus_space_tag_t, - bus_space_handle_t, bus_size_t, const uint8_t *, bus_size_t); -static __inline void bus_space_write_region_stream_2(bus_space_tag_t, - bus_space_handle_t, bus_size_t, const uint16_t *, bus_size_t); -static __inline void bus_space_write_region_stream_4(bus_space_tag_t, - bus_space_handle_t, bus_size_t, const uint32_t *, bus_size_t); - -void -bus_space_write_region_stream_1(bus_space_tag_t tag, bus_space_handle_t bsh, - bus_size_t offset, const uint8_t *addr, bus_size_t count) -{ - uint8_t *p = (uint8_t *)(bsh + offset); - - while (count--) - *p++ = *addr++; -} - -void -bus_space_write_region_stream_2(bus_space_tag_t tag, bus_space_handle_t bsh, - bus_size_t offset, const uint16_t *addr, bus_size_t count) -{ - uint16_t *p = (uint16_t *)(bsh + offset); - - while (count--) - *p++ = *addr++; -} - -void -bus_space_write_region_stream_4(bus_space_tag_t tag, bus_space_handle_t bsh, - bus_size_t offset, const uint32_t *addr, bus_size_t count) -{ - uint32_t *p = (uint32_t *)(bsh + offset); - - while (count--) - *p++ = *addr++; -} - -/* - * void bus_space_write_N(bus_space_tag_t tag, - * bus_space_handle_t bsh, bus_size_t offset, - * u_intN_t value); - * - * Write the 1, 2, 4, or 8 byte value `value' to bus space - * described by tag/handle/offset. - */ -static __inline void bus_space_write_1(bus_space_tag_t, - bus_space_handle_t, bus_size_t, uint8_t); -static __inline void bus_space_write_2(bus_space_tag_t, - bus_space_handle_t, bus_size_t, uint16_t); -static __inline void bus_space_write_4(bus_space_tag_t, - bus_space_handle_t, bus_size_t, uint32_t); - -void -bus_space_write_1(bus_space_tag_t tag, bus_space_handle_t bsh, - bus_size_t offset, uint8_t value) -{ - - *(volatile uint8_t *)(bsh + offset) = value; -} - -void -bus_space_write_2(bus_space_tag_t tag, bus_space_handle_t bsh, - bus_size_t offset, uint16_t value) -{ - - *(volatile uint16_t *)(bsh + offset) = bswap16(value); -} - -void -bus_space_write_4(bus_space_tag_t tag, bus_space_handle_t bsh, - bus_size_t offset, uint32_t value) -{ - - *(volatile uint32_t *)(bsh + offset) = bswap32(value); -} - -static __inline void bus_space_write_stream_2(bus_space_tag_t, - bus_space_handle_t, bus_size_t, uint16_t); -static __inline void bus_space_write_stream_4(bus_space_tag_t, - bus_space_handle_t, bus_size_t, uint32_t); - -void -bus_space_write_stream_2(bus_space_tag_t tag, bus_space_handle_t bsh, - bus_size_t offset, uint16_t value) -{ - - *(volatile uint16_t *)(bsh + offset) = value; -} - -void -bus_space_write_stream_4(bus_space_tag_t tag, bus_space_handle_t bsh, - bus_size_t offset, uint32_t value) -{ - - *(volatile uint32_t *)(bsh + offset) = value; -} - -/* - * void bus_space_write_multi_N(bus_space_tag_t tag, - * bus_space_handle_t bsh, bus_size_t offset, - * const u_intN_t *addr, size_t count); - * - * Write `count' 1, 2, 4, or 8 byte quantities from the buffer - * provided to bus space described by tag/handle/offset. - */ -static __inline void bus_space_write_multi_1(bus_space_tag_t, - bus_space_handle_t, bus_size_t, const uint8_t *, bus_size_t); -static __inline void bus_space_write_multi_2(bus_space_tag_t, - bus_space_handle_t, bus_size_t, const uint16_t *, bus_size_t); -static __inline void bus_space_write_multi_4(bus_space_tag_t, - bus_space_handle_t, bus_size_t, const uint32_t *, bus_size_t); - -void -bus_space_write_multi_1(bus_space_tag_t tag, bus_space_handle_t bsh, - bus_size_t offset, const uint8_t *addr, bus_size_t count) -{ - - while (count--) - bus_space_write_1(tag, bsh, offset, *addr++); -} - -void -bus_space_write_multi_2(bus_space_tag_t tag, bus_space_handle_t bsh, - bus_size_t offset, const uint16_t *addr, bus_size_t count) -{ - - while (count--) - bus_space_write_2(tag, bsh, offset, *addr++); -} - -void -bus_space_write_multi_4(bus_space_tag_t tag, bus_space_handle_t bsh, - bus_size_t offset, const uint32_t *addr, bus_size_t count) -{ - - while (count--) - bus_space_write_4(tag, bsh, offset, *addr++); -} - -static __inline void bus_space_write_multi_stream_2(bus_space_tag_t, - bus_space_handle_t, bus_size_t, const uint16_t *, bus_size_t); -static __inline void bus_space_write_multi_stream_4(bus_space_tag_t, - bus_space_handle_t, bus_size_t, const uint32_t *, bus_size_t); - -void -bus_space_write_multi_stream_2(bus_space_tag_t tag, bus_space_handle_t bsh, - bus_size_t offset, const uint16_t *addr, bus_size_t count) -{ - - while (count--) - bus_space_write_stream_2(tag, bsh, offset, *addr++); -} - -void -bus_space_write_multi_stream_4(bus_space_tag_t tag, bus_space_handle_t bsh, - bus_size_t offset, const uint32_t *addr, bus_size_t count) -{ - - while (count--) - bus_space_write_stream_4(tag, bsh, offset, *addr++); -} - -/* - * void bus_space_set_multi_N(bus_space_tag_t tag, - * bus_space_handle_t bsh, bus_size_t offset, u_intN_t val, - * size_t count); - * - * Write the 1, 2, 4, or 8 byte value `val' to bus space described - * by tag/handle/offset `count' times. - */ -static __inline void bus_space_set_multi_1(bus_space_tag_t, - bus_space_handle_t, bus_size_t, uint8_t, size_t); -static __inline void bus_space_set_multi_2(bus_space_tag_t, - bus_space_handle_t, bus_size_t, uint16_t, size_t); -static __inline void bus_space_set_multi_4(bus_space_tag_t, - bus_space_handle_t, bus_size_t, uint32_t, size_t); - -void -bus_space_set_multi_1(bus_space_tag_t tag, bus_space_handle_t bsh, - bus_size_t offset, uint8_t val, size_t count) -{ - - while (count--) - bus_space_write_1(tag, bsh, offset, val); -} - -void -bus_space_set_multi_2(bus_space_tag_t tag, bus_space_handle_t bsh, - bus_size_t offset, uint16_t val, size_t count) -{ - - while (count--) - bus_space_write_2(tag, bsh, offset, val); -} - -void -bus_space_set_multi_4(bus_space_tag_t tag, bus_space_handle_t bsh, - bus_size_t offset, uint32_t val, size_t count) -{ - - while (count--) - bus_space_write_4(tag, bsh, offset, val); -} - -/* - * void bus_space_set_region_N(bus_space_tag_t tag, - * bus_space_handle_t bsh, bus_size_t offset, u_intN_t val, - * size_t count); - * - * Write `count' 1, 2, 4, or 8 byte value `val' to bus space described - * by tag/handle starting at `offset'. - */ -static __inline void bus_space_set_region_1(bus_space_tag_t, - bus_space_handle_t, bus_size_t, uint8_t, size_t); -static __inline void bus_space_set_region_2(bus_space_tag_t, - bus_space_handle_t, bus_size_t, uint16_t, size_t); -static __inline void bus_space_set_region_4(bus_space_tag_t, - bus_space_handle_t, bus_size_t, uint32_t, size_t); - -void -bus_space_set_region_1(bus_space_tag_t tag, bus_space_handle_t bsh, - bus_size_t offset, uint8_t val, size_t count) -{ - volatile uint8_t *addr = (void *)(bsh + offset); - - while (count--) - *addr++ = val; -} - -void -bus_space_set_region_2(bus_space_tag_t tag, bus_space_handle_t bsh, - bus_size_t offset, uint16_t val, size_t count) -{ - volatile uint16_t *addr = (void *)(bsh + offset); - - val = bswap16(val); - while (count--) - *addr++ = val; -} - -void -bus_space_set_region_4(bus_space_tag_t tag, bus_space_handle_t bsh, - bus_size_t offset, uint32_t val, size_t count) -{ - volatile uint32_t *addr = (void *)(bsh + offset); - - val = bswap32(val); - while (count--) - *addr++ = val; -} - -/* - * void bus_space_set_region_stream_N(bus_space_tag_t tag, - * bus_space_handle_t bsh, bus_size_t offset, u_intN_t val, - * size_t count); - * - * Write `count' 1, 2, 4, or 8 byte value `val' to bus space described - * by tag/handle starting at `offset'. - */ -static __inline void bus_space_set_region_stream_1(bus_space_tag_t, - bus_space_handle_t, bus_size_t, uint8_t, bus_size_t); -static __inline void bus_space_set_region_stream_2(bus_space_tag_t, - bus_space_handle_t, bus_size_t, uint16_t, bus_size_t); -static __inline void bus_space_set_region_stream_4(bus_space_tag_t, - bus_space_handle_t, bus_size_t, uint32_t, bus_size_t); - -void -bus_space_set_region_stream_1(bus_space_tag_t tag, bus_space_handle_t bsh, - bus_size_t offset, uint8_t val, bus_size_t count) -{ - volatile uint8_t *addr = (void *)(bsh + offset); - - while (count--) - *addr++ = val; -} - -void -bus_space_set_region_stream_2(bus_space_tag_t tag, bus_space_handle_t bsh, - bus_size_t offset, uint16_t val, bus_size_t count) -{ - volatile uint16_t *addr = (void *)(bsh + offset); - - while (count--) - *addr++ = val; -} - -void -bus_space_set_region_stream_4(bus_space_tag_t tag, bus_space_handle_t bsh, - bus_size_t offset, uint32_t val, bus_size_t count) -{ - volatile uint32_t *addr = (void *)(bsh + offset); - - while (count--) - *addr++ = val; -} - -/* - * void bus_space_copy_region_N(bus_space_tag_t tag, - * bus_space_handle_t bsh1, bus_size_t off1, - * bus_space_handle_t bsh2, bus_size_t off2, - * size_t count); - * - * Copy `count' 1, 2, 4, or 8 byte values from bus space starting - * at tag/bsh1/off1 to bus space starting at tag/bsh2/off2. - */ -static __inline void bus_space_copy_region_1(bus_space_tag_t, - bus_space_handle_t, bus_size_t, bus_space_handle_t, bus_size_t, - size_t); -static __inline void bus_space_copy_region_2(bus_space_tag_t, - bus_space_handle_t, bus_size_t, bus_space_handle_t, bus_size_t, - size_t); -static __inline void bus_space_copy_region_4(bus_space_tag_t, - bus_space_handle_t, bus_size_t, bus_space_handle_t, bus_size_t, - size_t); - -void -bus_space_copy_region_1(bus_space_tag_t t, bus_space_handle_t h1, - bus_size_t o1, bus_space_handle_t h2, bus_size_t o2, size_t c) -{ - volatile uint8_t *addr1 = (void *)(h1 + o1); - volatile uint8_t *addr2 = (void *)(h2 + o2); - - if (addr1 >= addr2) { /* src after dest: copy forward */ - while (c--) - *addr2++ = *addr1++; - } else { /* dest after src: copy backwards */ - addr1 += c - 1; - addr2 += c - 1; - while (c--) - *addr2-- = *addr1--; - } -} - -void -bus_space_copy_region_2(bus_space_tag_t t, bus_space_handle_t h1, - bus_size_t o1, bus_space_handle_t h2, bus_size_t o2, size_t c) -{ - volatile uint16_t *addr1 = (void *)(h1 + o1); - volatile uint16_t *addr2 = (void *)(h2 + o2); - - if (addr1 >= addr2) { /* src after dest: copy forward */ - while (c--) - *addr2++ = *addr1++; - } else { /* dest after src: copy backwards */ - addr1 += c - 1; - addr2 += c - 1; - while (c--) - *addr2-- = *addr1--; - } -} - -void -bus_space_copy_region_4(bus_space_tag_t t, bus_space_handle_t h1, - bus_size_t o1, bus_space_handle_t h2, bus_size_t o2, size_t c) -{ - volatile uint32_t *addr1 = (void *)(h1 + o1); - volatile uint32_t *addr2 = (void *)(h2 + o2); - - if (addr1 >= addr2) { /* src after dest: copy forward */ - while (c--) - *addr2++ = *addr1++; - } else { /* dest after src: copy backwards */ - addr1 += c - 1; - addr2 += c - 1; - while (c--) - *addr2-- = *addr1--; - } -} - -/* * Bus read/write barrier methods. * * void bus_space_barrier(bus_space_tag_t tag, Index: src/sys/arch/sh3/sh3/sh3_machdep.c diff -u src/sys/arch/sh3/sh3/sh3_machdep.c:1.92 src/sys/arch/sh3/sh3/sh3_machdep.c:1.93 --- src/sys/arch/sh3/sh3/sh3_machdep.c:1.92 Fri Mar 4 22:25:28 2011 +++ src/sys/arch/sh3/sh3/sh3_machdep.c Wed Jul 20 21:30:13 2011 @@ -1,4 +1,4 @@ -/* $NetBSD: sh3_machdep.c,v 1.92 2011/03/04 22:25:28 joerg Exp $ */ +/* $NetBSD: sh3_machdep.c,v 1.93 2011/07/20 21:30:13 dyoung Exp $ */ /*- * Copyright (c) 1996, 1997, 1998, 2002 The NetBSD Foundation, Inc. @@ -65,7 +65,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: sh3_machdep.c,v 1.92 2011/03/04 22:25:28 joerg Exp $"); +__KERNEL_RCSID(0, "$NetBSD: sh3_machdep.c,v 1.93 2011/07/20 21:30:13 dyoung Exp $"); #include "opt_ddb.h" #include "opt_kgdb.h" @@ -597,3 +597,584 @@ l->l_md.md_regs->tf_gbr = (int)addr; return 0; } + +/* + * u_intN_t bus_space_read_N(bus_space_tag_t tag, + * bus_space_handle_t bsh, bus_size_t offset); + * + * Read a 1, 2, 4, or 8 byte quantity from bus space + * described by tag/handle/offset. + */ + +uint8_t +bus_space_read_1(bus_space_tag_t tag, bus_space_handle_t bsh, + bus_size_t offset) +{ + + return *(volatile uint8_t *)(bsh + offset); +} + +uint16_t +bus_space_read_2(bus_space_tag_t tag, bus_space_handle_t bsh, + bus_size_t offset) +{ + + return bswap16(*(volatile uint16_t *)(bsh + offset)); +} + +uint32_t +bus_space_read_4(bus_space_tag_t tag, bus_space_handle_t bsh, + bus_size_t offset) +{ + + return bswap32(*(volatile uint32_t *)(bsh + offset)); +} + +uint16_t +bus_space_read_stream_2(bus_space_tag_t tag, bus_space_handle_t bsh, + bus_size_t offset) +{ + + return *(volatile uint16_t *)(bsh + offset); +} + +uint32_t +bus_space_read_stream_4(bus_space_tag_t tag, bus_space_handle_t bsh, + bus_size_t offset) +{ + + return *(volatile uint32_t *)(bsh + offset); +} + +/* + * void bus_space_read_multi_N(bus_space_tag_t tag, + * bus_space_handle_t bsh, bus_size_t offset, + * u_intN_t *addr, size_t count); + * + * Read `count' 1, 2, 4, or 8 byte quantities from bus space + * described by tag/handle/offset and copy into buffer provided. + */ +void +bus_space_read_multi_1(bus_space_tag_t tag, bus_space_handle_t bsh, + bus_size_t offset, uint8_t *addr, bus_size_t count) +{ + + while (count--) + *addr++ = bus_space_read_1(tag, bsh, offset); +} + +void +bus_space_read_multi_2(bus_space_tag_t tag, bus_space_handle_t bsh, + bus_size_t offset, uint16_t *addr, bus_size_t count) +{ + + while (count--) + *addr++ = bus_space_read_2(tag, bsh, offset); +} + +void +bus_space_read_multi_4(bus_space_tag_t tag, bus_space_handle_t bsh, + bus_size_t offset, uint32_t *addr, bus_size_t count) +{ + + while (count--) + *addr++ = bus_space_read_4(tag, bsh, offset); +} + +void +bus_space_read_multi_stream_2(bus_space_tag_t tag, bus_space_handle_t bsh, + bus_size_t offset, uint16_t *addr, bus_size_t count) +{ + + while (count--) + *addr++ = *(volatile uint16_t *)(bsh + offset); +} + +void +bus_space_read_multi_stream_4(bus_space_tag_t tag, bus_space_handle_t bsh, + bus_size_t offset, uint32_t *addr, bus_size_t count) +{ + + while (count--) + *addr++ = *(volatile uint32_t *)(bsh + offset); +} + +/* + * int bus_space_alloc(bus_space_tag_t t, 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); + * + * Allocate a region of bus space. + */ +int sh_memio_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 *); + +#define bus_space_alloc(t, rs, re, s, a, b, f, ap, hp) \ + sh_memio_alloc((t), (rs), (re), (s), (a), (b), (f), (ap), (hp)) + +/* + * int bus_space_free(bus_space_tag_t t, + * bus_space_handle_t bsh, bus_size_t size); + * + * Free a region of bus space. + */ +void sh_memio_free(bus_space_tag_t, bus_space_handle_t, bus_size_t); + +#define bus_space_free(t, h, s) \ + sh_memio_free((t), (h), (s)) + +/* + * int bus_space_unmap(bus_space_tag_t t, + * bus_space_handle_t bsh, bus_size_t size); + * + * Unmap a region of bus space. + */ +void sh_memio_unmap(bus_space_tag_t, bus_space_handle_t, bus_size_t); + +#define bus_space_unmap(t, h, s) \ + sh_memio_unmap((t), (h), (s)) + +/* + * int bus_space_subregion(bus_space_tag_t t, + * bus_space_handle_t bsh, bus_size_t offset, bus_size_t size, + * bus_space_handle_t *nbshp); + * + * Get a new handle for a subregion of an already-mapped area of bus space. + */ +int sh_memio_subregion(bus_space_tag_t, bus_space_handle_t, + bus_size_t, bus_size_t, bus_space_handle_t *); + +#define bus_space_subregion(t, h, o, s, nhp) \ + sh_memio_subregion((t), (h), (o), (s), (nhp)) + +/* + * void bus_space_read_region_N(bus_space_tag_t tag, + * bus_space_handle_t bsh, bus_size_t offset, + * u_intN_t *addr, size_t count); + * + * Read `count' 1, 2, 4, or 8 byte quantities from bus space + * described by tag/handle and starting at `offset' and copy into + * buffer provided. + */ +void +bus_space_read_region_1(bus_space_tag_t tag, bus_space_handle_t bsh, + bus_size_t offset, uint8_t *addr, bus_size_t count) +{ + uint8_t *p = (uint8_t *)(bsh + offset); + + while (count--) + *addr++ = *p++; +} + +void +bus_space_read_region_2(bus_space_tag_t tag, bus_space_handle_t bsh, + bus_size_t offset, uint16_t *addr, bus_size_t count) +{ + uint16_t *p = (uint16_t *)(bsh + offset); + + while (count--) + *addr++ = bswap16(*p++); +} + +void +bus_space_read_region_4(bus_space_tag_t tag, bus_space_handle_t bsh, + bus_size_t offset, uint32_t *addr, bus_size_t count) +{ + uint32_t *p = (uint32_t *)(bsh + offset); + + while (count--) + *addr++ = bswap32(*p++); +} + +/* + * void bus_space_read_region_stream_N(bus_space_tag_t tag, + * bus_space_handle_t bsh, bus_size_t offset, + * u_intN_t *addr, size_t count); + * + * Read `count' 1, 2, 4, or 8 byte quantities from bus space + * described by tag/handle and starting at `offset' and copy into + * buffer provided. + */ +void +bus_space_read_region_stream_1(bus_space_tag_t tag, bus_space_handle_t bsh, + bus_size_t offset, uint8_t *addr, bus_size_t count) +{ + uint8_t *p = (uint8_t *)(bsh + offset); + + while (count--) + *addr++ = *p++; +} + +void +bus_space_read_region_stream_2(bus_space_tag_t tag, bus_space_handle_t bsh, + bus_size_t offset, uint16_t *addr, bus_size_t count) +{ + uint16_t *p = (uint16_t *)(bsh + offset); + + while (count--) + *addr++ = *p++; +} + +void +bus_space_read_region_stream_4(bus_space_tag_t tag, bus_space_handle_t bsh, + bus_size_t offset, uint32_t *addr, bus_size_t count) +{ + uint32_t *p = (uint32_t *)(bsh + offset); + + while (count--) + *addr++ = *p++; +} + +/* + * void bus_space_write_region_N(bus_space_tag_t tag, + * bus_space_handle_t bsh, bus_size_t offset, + * const u_intN_t *addr, size_t count); + * + * Write `count' 1, 2, 4, or 8 byte quantities from the buffer provided + * to bus space described by tag/handle starting at `offset'. + */ +void +bus_space_write_region_1(bus_space_tag_t tag, bus_space_handle_t bsh, + bus_size_t offset, const uint8_t *addr, bus_size_t count) +{ + uint8_t *p = (uint8_t *)(bsh + offset); + + while (count--) + *p++ = *addr++; +} + +void +bus_space_write_region_2(bus_space_tag_t tag, bus_space_handle_t bsh, + bus_size_t offset, const uint16_t *addr, bus_size_t count) +{ + uint16_t *p = (uint16_t *)(bsh + offset); + + while (count--) + *p++ = bswap16(*addr++); +} + +void +bus_space_write_region_4(bus_space_tag_t tag, bus_space_handle_t bsh, + bus_size_t offset, const uint32_t *addr, bus_size_t count) +{ + uint32_t *p = (uint32_t *)(bsh + offset); + + while (count--) + *p++ = bswap32(*addr++); +} + +/* + * void bus_space_write_region_stream_N(bus_space_tag_t tag, + * bus_space_handle_t bsh, bus_size_t offset, + * const u_intN_t *addr, size_t count); + * + * Write `count' 1, 2, 4, or 8 byte quantities from the buffer provided + * to bus space described by tag/handle starting at `offset'. + */ +void +bus_space_write_region_stream_1(bus_space_tag_t tag, bus_space_handle_t bsh, + bus_size_t offset, const uint8_t *addr, bus_size_t count) +{ + uint8_t *p = (uint8_t *)(bsh + offset); + + while (count--) + *p++ = *addr++; +} + +void +bus_space_write_region_stream_2(bus_space_tag_t tag, bus_space_handle_t bsh, + bus_size_t offset, const uint16_t *addr, bus_size_t count) +{ + uint16_t *p = (uint16_t *)(bsh + offset); + + while (count--) + *p++ = *addr++; +} + +void +bus_space_write_region_stream_4(bus_space_tag_t tag, bus_space_handle_t bsh, + bus_size_t offset, const uint32_t *addr, bus_size_t count) +{ + uint32_t *p = (uint32_t *)(bsh + offset); + + while (count--) + *p++ = *addr++; +} + +/* + * void bus_space_write_N(bus_space_tag_t tag, + * bus_space_handle_t bsh, bus_size_t offset, + * u_intN_t value); + * + * Write the 1, 2, 4, or 8 byte value `value' to bus space + * described by tag/handle/offset. + */ +void +bus_space_write_1(bus_space_tag_t tag, bus_space_handle_t bsh, + bus_size_t offset, uint8_t value) +{ + + *(volatile uint8_t *)(bsh + offset) = value; +} + +void +bus_space_write_2(bus_space_tag_t tag, bus_space_handle_t bsh, + bus_size_t offset, uint16_t value) +{ + + *(volatile uint16_t *)(bsh + offset) = bswap16(value); +} + +void +bus_space_write_4(bus_space_tag_t tag, bus_space_handle_t bsh, + bus_size_t offset, uint32_t value) +{ + + *(volatile uint32_t *)(bsh + offset) = bswap32(value); +} + +void +bus_space_write_stream_2(bus_space_tag_t tag, bus_space_handle_t bsh, + bus_size_t offset, uint16_t value) +{ + + *(volatile uint16_t *)(bsh + offset) = value; +} + +void +bus_space_write_stream_4(bus_space_tag_t tag, bus_space_handle_t bsh, + bus_size_t offset, uint32_t value) +{ + + *(volatile uint32_t *)(bsh + offset) = value; +} + +/* + * void bus_space_write_multi_N(bus_space_tag_t tag, + * bus_space_handle_t bsh, bus_size_t offset, + * const u_intN_t *addr, size_t count); + * + * Write `count' 1, 2, 4, or 8 byte quantities from the buffer + * provided to bus space described by tag/handle/offset. + */ +void +bus_space_write_multi_1(bus_space_tag_t tag, bus_space_handle_t bsh, + bus_size_t offset, const uint8_t *addr, bus_size_t count) +{ + + while (count--) + bus_space_write_1(tag, bsh, offset, *addr++); +} + +void +bus_space_write_multi_2(bus_space_tag_t tag, bus_space_handle_t bsh, + bus_size_t offset, const uint16_t *addr, bus_size_t count) +{ + + while (count--) + bus_space_write_2(tag, bsh, offset, *addr++); +} + +void +bus_space_write_multi_4(bus_space_tag_t tag, bus_space_handle_t bsh, + bus_size_t offset, const uint32_t *addr, bus_size_t count) +{ + + while (count--) + bus_space_write_4(tag, bsh, offset, *addr++); +} + +void +bus_space_write_multi_stream_2(bus_space_tag_t tag, bus_space_handle_t bsh, + bus_size_t offset, const uint16_t *addr, bus_size_t count) +{ + + while (count--) + bus_space_write_stream_2(tag, bsh, offset, *addr++); +} + +void +bus_space_write_multi_stream_4(bus_space_tag_t tag, bus_space_handle_t bsh, + bus_size_t offset, const uint32_t *addr, bus_size_t count) +{ + + while (count--) + bus_space_write_stream_4(tag, bsh, offset, *addr++); +} + +/* + * void bus_space_set_multi_N(bus_space_tag_t tag, + * bus_space_handle_t bsh, bus_size_t offset, u_intN_t val, + * size_t count); + * + * Write the 1, 2, 4, or 8 byte value `val' to bus space described + * by tag/handle/offset `count' times. + */ +void +bus_space_set_multi_1(bus_space_tag_t tag, bus_space_handle_t bsh, + bus_size_t offset, uint8_t val, size_t count) +{ + + while (count--) + bus_space_write_1(tag, bsh, offset, val); +} + +void +bus_space_set_multi_2(bus_space_tag_t tag, bus_space_handle_t bsh, + bus_size_t offset, uint16_t val, size_t count) +{ + + while (count--) + bus_space_write_2(tag, bsh, offset, val); +} + +void +bus_space_set_multi_4(bus_space_tag_t tag, bus_space_handle_t bsh, + bus_size_t offset, uint32_t val, size_t count) +{ + + while (count--) + bus_space_write_4(tag, bsh, offset, val); +} + +/* + * void bus_space_set_region_N(bus_space_tag_t tag, + * bus_space_handle_t bsh, bus_size_t offset, u_intN_t val, + * size_t count); + * + * Write `count' 1, 2, 4, or 8 byte value `val' to bus space described + * by tag/handle starting at `offset'. + */ +void +bus_space_set_region_1(bus_space_tag_t tag, bus_space_handle_t bsh, + bus_size_t offset, uint8_t val, size_t count) +{ + volatile uint8_t *addr = (void *)(bsh + offset); + + while (count--) + *addr++ = val; +} + +void +bus_space_set_region_2(bus_space_tag_t tag, bus_space_handle_t bsh, + bus_size_t offset, uint16_t val, size_t count) +{ + volatile uint16_t *addr = (void *)(bsh + offset); + + val = bswap16(val); + while (count--) + *addr++ = val; +} + +void +bus_space_set_region_4(bus_space_tag_t tag, bus_space_handle_t bsh, + bus_size_t offset, uint32_t val, size_t count) +{ + volatile uint32_t *addr = (void *)(bsh + offset); + + val = bswap32(val); + while (count--) + *addr++ = val; +} + +/* + * void bus_space_set_region_stream_N(bus_space_tag_t tag, + * bus_space_handle_t bsh, bus_size_t offset, u_intN_t val, + * size_t count); + * + * Write `count' 1, 2, 4, or 8 byte value `val' to bus space described + * by tag/handle starting at `offset'. + */ +void +bus_space_set_region_stream_1(bus_space_tag_t tag, bus_space_handle_t bsh, + bus_size_t offset, uint8_t val, bus_size_t count) +{ + volatile uint8_t *addr = (void *)(bsh + offset); + + while (count--) + *addr++ = val; +} + +void +bus_space_set_region_stream_2(bus_space_tag_t tag, bus_space_handle_t bsh, + bus_size_t offset, uint16_t val, bus_size_t count) +{ + volatile uint16_t *addr = (void *)(bsh + offset); + + while (count--) + *addr++ = val; +} + +void +bus_space_set_region_stream_4(bus_space_tag_t tag, bus_space_handle_t bsh, + bus_size_t offset, uint32_t val, bus_size_t count) +{ + volatile uint32_t *addr = (void *)(bsh + offset); + + while (count--) + *addr++ = val; +} + +/* + * void bus_space_copy_region_N(bus_space_tag_t tag, + * bus_space_handle_t bsh1, bus_size_t off1, + * bus_space_handle_t bsh2, bus_size_t off2, + * size_t count); + * + * Copy `count' 1, 2, 4, or 8 byte values from bus space starting + * at tag/bsh1/off1 to bus space starting at tag/bsh2/off2. + */ +void +bus_space_copy_region_1(bus_space_tag_t t, bus_space_handle_t h1, + bus_size_t o1, bus_space_handle_t h2, bus_size_t o2, size_t c) +{ + volatile uint8_t *addr1 = (void *)(h1 + o1); + volatile uint8_t *addr2 = (void *)(h2 + o2); + + if (addr1 >= addr2) { /* src after dest: copy forward */ + while (c--) + *addr2++ = *addr1++; + } else { /* dest after src: copy backwards */ + addr1 += c - 1; + addr2 += c - 1; + while (c--) + *addr2-- = *addr1--; + } +} + +void +bus_space_copy_region_2(bus_space_tag_t t, bus_space_handle_t h1, + bus_size_t o1, bus_space_handle_t h2, bus_size_t o2, size_t c) +{ + volatile uint16_t *addr1 = (void *)(h1 + o1); + volatile uint16_t *addr2 = (void *)(h2 + o2); + + if (addr1 >= addr2) { /* src after dest: copy forward */ + while (c--) + *addr2++ = *addr1++; + } else { /* dest after src: copy backwards */ + addr1 += c - 1; + addr2 += c - 1; + while (c--) + *addr2-- = *addr1--; + } +} + +void +bus_space_copy_region_4(bus_space_tag_t t, bus_space_handle_t h1, + bus_size_t o1, bus_space_handle_t h2, bus_size_t o2, size_t c) +{ + volatile uint32_t *addr1 = (void *)(h1 + o1); + volatile uint32_t *addr2 = (void *)(h2 + o2); + + if (addr1 >= addr2) { /* src after dest: copy forward */ + while (c--) + *addr2++ = *addr1++; + } else { /* dest after src: copy backwards */ + addr1 += c - 1; + addr2 += c - 1; + while (c--) + *addr2-- = *addr1--; + } +}