diff options
author | 2015-02-14 14:54:13 +0000 | |
---|---|---|
committer | 2015-02-14 14:54:13 +0000 | |
commit | 98bf244e3ed109e57d7c6096fcbc35802777ec42 (patch) | |
tree | 56d58aee3adf93c4172ae2e86f3db23818d7ada9 | |
parent | Attempt to correctly free temporary storage upon error. With help from (diff) | |
download | wireguard-openbsd-98bf244e3ed109e57d7c6096fcbc35802777ec42.tar.xz wireguard-openbsd-98bf244e3ed109e57d7c6096fcbc35802777ec42.zip |
Add simple bus_space_{map,unmap,subregion} implementation on luna88k.
These are preliminaries for upcoming pcic(4) support on cbus(4/luna88k).
suggestions and ok miod@
-rw-r--r-- | sys/arch/luna88k/cbus/necsb.c | 3 | ||||
-rw-r--r-- | sys/arch/luna88k/dev/spc.c | 3 | ||||
-rw-r--r-- | sys/arch/luna88k/include/bus.h | 93 |
3 files changed, 85 insertions, 14 deletions
diff --git a/sys/arch/luna88k/cbus/necsb.c b/sys/arch/luna88k/cbus/necsb.c index 70c89366e96..3d2eeefc54c 100644 --- a/sys/arch/luna88k/cbus/necsb.c +++ b/sys/arch/luna88k/cbus/necsb.c @@ -1,4 +1,4 @@ -/* $OpenBSD: necsb.c,v 1.1 2014/12/28 13:03:18 aoyama Exp $ */ +/* $OpenBSD: necsb.c,v 1.2 2015/02/14 14:54:13 aoyama Exp $ */ /* $NecBSD: nec86_isa.c,v 1.9 1998/09/26 11:31:11 kmatsuda Exp $ */ /* $NetBSD$ */ @@ -67,6 +67,7 @@ struct luna88k_bus_space_tag necsb_bst = { 0, 0, 0, + 0, /* no offset */ }; int diff --git a/sys/arch/luna88k/dev/spc.c b/sys/arch/luna88k/dev/spc.c index 08d0f682a5b..ee7e3bb53a1 100644 --- a/sys/arch/luna88k/dev/spc.c +++ b/sys/arch/luna88k/dev/spc.c @@ -1,4 +1,4 @@ -/* $OpenBSD: spc.c,v 1.7 2014/06/07 11:55:35 aoyama Exp $ */ +/* $OpenBSD: spc.c,v 1.8 2015/02/14 14:54:13 aoyama Exp $ */ /* $NetBSD: spc.c,v 1.4 2003/07/05 19:00:17 tsutsui Exp $ */ /*- @@ -72,6 +72,7 @@ struct luna88k_bus_space_tag spc_bst = { 0, /* not used */ 0, /* not used */ 0, /* not used */ + 0, /* no offset */ }; int diff --git a/sys/arch/luna88k/include/bus.h b/sys/arch/luna88k/include/bus.h index 47f31ef8162..49afebd81d0 100644 --- a/sys/arch/luna88k/include/bus.h +++ b/sys/arch/luna88k/include/bus.h @@ -1,4 +1,4 @@ -/* $OpenBSD: bus.h,v 1.8 2011/03/23 16:54:35 pirofti Exp $ */ +/* $OpenBSD: bus.h,v 1.9 2015/02/14 14:54:13 aoyama Exp $ */ /* $NetBSD: bus.h,v 1.9 1998/01/13 18:32:15 scottr Exp $ */ /*- @@ -78,6 +78,7 @@ struct luna88k_bus_space_tag { uint8_t bs_stride_2; uint8_t bs_stride_4; uint8_t bs_stride_8; + bus_size_t bs_offset; }; /* @@ -90,8 +91,14 @@ struct luna88k_bus_space_tag { #define BUS_SPACE_MAP_CACHEABLE 0x01 #define BUS_SPACE_MAP_LINEAR 0x02 -int bus_space_map(bus_space_tag_t, bus_addr_t, bus_size_t, - int, bus_space_handle_t *); +static __inline__ int +bus_space_map(bus_space_tag_t t, bus_addr_t bpa, bus_size_t size, int flags, + bus_space_handle_t *bshp) +{ + /* direct-mapped on luna88k, with offset */ + *bshp = (bus_space_handle_t)(bpa + (t->bs_offset)); + return 0; +} /* * void bus_space_unmap(bus_space_tag_t t, @@ -100,7 +107,12 @@ int bus_space_map(bus_space_tag_t, bus_addr_t, bus_size_t, * Unmap a region of bus space. */ -void bus_space_unmap(bus_space_tag_t, bus_space_handle_t, bus_size_t); +static __inline__ void +bus_space_unmap(bus_space_tag_t t, bus_space_handle_t bsh, bus_size_t size) +{ + /* direct-mapped on luna88k; nothing to do */ + return; +} /* * int bus_space_subregion(bus_space_tag_t t, @@ -110,8 +122,13 @@ void bus_space_unmap(bus_space_tag_t, bus_space_handle_t, bus_size_t); * Get a new handle for a subregion of an already-mapped area of bus space. */ -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); +static __inline__ 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) +{ + *nbshp = bsh + offset; + return 0; +} /* * int bus_space_alloc(bus_space_tag_t t, bus_addr_t, rstart, @@ -122,10 +139,13 @@ int bus_space_subregion(bus_space_tag_t t, bus_space_handle_t bsh, * Allocate a region of bus space. */ -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); +static __inline__ int +bus_space_alloc(bus_space_tag_t tag, bus_addr_t rstart, bus_addr_t rend, + bus_size_t size, bus_size_t alignment, bus_size_t boundary, int flags, + bus_addr_t *addrp, bus_space_handle_t *handlep) +{ + panic("bus_space_alloc: unimplemented"); +} /* * int bus_space_free(bus_space_tag_t t, @@ -134,8 +154,11 @@ int bus_space_alloc(bus_space_tag_t t, bus_addr_t rstart, * Free a region of bus space. */ -void bus_space_free(bus_space_tag_t t, bus_space_handle_t bsh, - bus_size_t size); +static __inline__ void +bus_space_free(bus_space_tag_t tag, bus_space_handle_t handle, bus_size_t size) +{ + panic("bus_space_free: unimplemented"); +} /* * u_intN_t bus_space_read_N(bus_space_tag_t tag, @@ -195,6 +218,30 @@ bus_space_read_multi_4(bus_space_tag_t tag, bus_space_handle_t handle, #define bus_space_read_multi_8 !!! bus_space_read_multi_8 unimplemented !!! #endif +static __inline__ void +bus_space_read_raw_multi_2(bus_space_tag_t tag, bus_space_handle_t handle, + bus_addr_t offset, u_int8_t *dest, size_t size) +{ + size >>= 1; + while ((int)--size >= 0) { + *(u_int16_t *)dest = + bus_space_read_2(tag, handle, offset); + dest += 2; + } +} + +static __inline__ void +bus_space_read_raw_multi_4(bus_space_tag_t tag, bus_space_handle_t handle, + bus_addr_t offset, u_int8_t *dest, size_t size) +{ + size >>= 2; + while ((int)--size >= 0) { + *(u_int32_t *)dest = + bus_space_read_4(tag, handle, offset); + dest += 4; + } +} + /* * void bus_space_read_region_N(bus_space_tag_t tag, * bus_space_handle_t bsh, bus_size_t offset, @@ -297,6 +344,28 @@ bus_space_write_multi_4(bus_space_tag_t tag, bus_space_handle_t handle, !!! bus_space_write_multi_8 unimplemented !!! #endif +static __inline__ void +bus_space_write_raw_multi_2(bus_space_tag_t tag, bus_space_handle_t handle, + bus_addr_t offset, u_int8_t *dest, size_t size) +{ + size >>= 1; + while ((int)--size >= 0) { + bus_space_write_2(tag, handle, offset,*(u_int16_t *)dest); + dest += 2; + } +} + +static __inline__ void +bus_space_write_raw_multi_4(bus_space_tag_t tag, bus_space_handle_t handle, + bus_addr_t offset, u_int8_t *dest, size_t size) +{ + size >>= 2; + while ((int)--size >= 0) { + bus_space_write_4(tag, handle, offset, *(u_int32_t *)dest); + dest += 4; + } +} + /* * void bus_space_write_region_N(bus_space_tag_t tag, * bus_space_handle_t bsh, bus_size_t offset, |