summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authoraoyama <aoyama@openbsd.org>2015-02-14 14:54:13 +0000
committeraoyama <aoyama@openbsd.org>2015-02-14 14:54:13 +0000
commit98bf244e3ed109e57d7c6096fcbc35802777ec42 (patch)
tree56d58aee3adf93c4172ae2e86f3db23818d7ada9
parentAttempt to correctly free temporary storage upon error. With help from (diff)
downloadwireguard-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.c3
-rw-r--r--sys/arch/luna88k/dev/spc.c3
-rw-r--r--sys/arch/luna88k/include/bus.h93
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,