Source-Changes-HG archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
[src/trunk]: src/sys/arch/mac68k Add byte-swap and stride options to bus_spac...
details: https://anonhg.NetBSD.org/src/rev/1898ccc2610b
branches: trunk
changeset: 495526:1898ccc2610b
user: briggs <briggs%NetBSD.org@localhost>
date: Sun Jul 30 21:38:02 2000 +0000
description:
Add byte-swap and stride options to bus_space. Allocate as normal, then
call mac68k_bus_space_handle_swapped() or mac68k_bus_space_handle_set_stride().
Stride is untested. Swapped code works for SMC ethernet.
diffstat:
sys/arch/mac68k/include/bus.h | 478 ++++++++----------
sys/arch/mac68k/mac68k/bus_space.c | 926 ++++++++++++++++++++++++++++++++++++-
2 files changed, 1135 insertions(+), 269 deletions(-)
diffs (truncated from 1529 to 300 lines):
diff -r d1ad3b77d241 -r 1898ccc2610b sys/arch/mac68k/include/bus.h
--- a/sys/arch/mac68k/include/bus.h Sun Jul 30 21:36:04 2000 +0000
+++ b/sys/arch/mac68k/include/bus.h Sun Jul 30 21:38:02 2000 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: bus.h,v 1.13 2000/01/25 22:13:22 drochner Exp $ */
+/* $NetBSD: bus.h,v 1.14 2000/07/30 21:38:02 briggs Exp $ */
/*-
* Copyright (c) 1996, 1997, 1998 The NetBSD Foundation, Inc.
@@ -80,8 +80,68 @@
/*
* Access methods for bus resources and address space.
*/
+#define BUS_SPACE_HANDLE_T struct bus_space_handle_s
typedef int bus_space_tag_t;
-typedef u_long bus_space_handle_t;
+typedef struct bus_space_handle_s {
+ u_long base;
+ int swapped;
+ int stride;
+
+ u_int8_t (*bsr1) __P((bus_space_tag_t t,
+ BUS_SPACE_HANDLE_T *h, bus_size_t o));
+ u_int16_t (*bsr2) __P((bus_space_tag_t t,
+ BUS_SPACE_HANDLE_T *h, bus_size_t o));
+ u_int32_t (*bsr4) __P((bus_space_tag_t t,
+ BUS_SPACE_HANDLE_T *h, bus_size_t o));
+ void (*bsrm1) __P((bus_space_tag_t t, BUS_SPACE_HANDLE_T *h,
+ bus_size_t o, u_int8_t *a, size_t c));
+ void (*bsrm2) __P((bus_space_tag_t t, BUS_SPACE_HANDLE_T *h,
+ bus_size_t o, u_int16_t *a, size_t c));
+ void (*bsrm4) __P((bus_space_tag_t t, BUS_SPACE_HANDLE_T *h,
+ bus_size_t o, u_int32_t *a, size_t c));
+ void (*bsrr1) __P((bus_space_tag_t t, BUS_SPACE_HANDLE_T *h,
+ bus_size_t o, u_int8_t *a, size_t c));
+ void (*bsrr2) __P((bus_space_tag_t t, BUS_SPACE_HANDLE_T *h,
+ bus_size_t o, u_int16_t *a, size_t c));
+ void (*bsrr4) __P((bus_space_tag_t t, BUS_SPACE_HANDLE_T *h,
+ bus_size_t o, u_int32_t *a, size_t c));
+ void (*bsw1) __P((bus_space_tag_t t, BUS_SPACE_HANDLE_T *h,
+ bus_size_t o, u_int8_t v));
+ void (*bsw2) __P((bus_space_tag_t t, BUS_SPACE_HANDLE_T *h,
+ bus_size_t o, u_int16_t v));
+ void (*bsw4) __P((bus_space_tag_t t, BUS_SPACE_HANDLE_T *h,
+ bus_size_t o, u_int32_t v));
+ void (*bswm1) __P((bus_space_tag_t t, BUS_SPACE_HANDLE_T *h,
+ bus_size_t o, u_int8_t *a, size_t c));
+ void (*bswm2) __P((bus_space_tag_t t, BUS_SPACE_HANDLE_T *h,
+ bus_size_t o, u_int16_t *a, size_t c));
+ void (*bswm4) __P((bus_space_tag_t t, BUS_SPACE_HANDLE_T *h,
+ bus_size_t o, u_int32_t *a, size_t c));
+ void (*bswr1) __P((bus_space_tag_t t, BUS_SPACE_HANDLE_T *h,
+ bus_size_t o, u_int8_t *a, size_t c));
+ void (*bswr2) __P((bus_space_tag_t t, BUS_SPACE_HANDLE_T *h,
+ bus_size_t o, u_int16_t *a, size_t c));
+ void (*bswr4) __P((bus_space_tag_t t, BUS_SPACE_HANDLE_T *h,
+ bus_size_t o, u_int32_t *a, size_t c));
+ void (*bssm1) __P((bus_space_tag_t t, BUS_SPACE_HANDLE_T *h,
+ bus_size_t o, u_int8_t v, size_t c));
+ void (*bssm2) __P((bus_space_tag_t t, BUS_SPACE_HANDLE_T *h,
+ bus_size_t o, u_int16_t v, size_t c));
+ void (*bssm4) __P((bus_space_tag_t t, BUS_SPACE_HANDLE_T *h,
+ bus_size_t o, u_int32_t v, size_t c));
+ void (*bssr1) __P((bus_space_tag_t t, BUS_SPACE_HANDLE_T *h,
+ bus_size_t o, u_int8_t v, size_t c));
+ void (*bssr2) __P((bus_space_tag_t t, BUS_SPACE_HANDLE_T *h,
+ bus_size_t o, u_int16_t v, size_t c));
+ void (*bssr4) __P((bus_space_tag_t t, BUS_SPACE_HANDLE_T *h,
+ bus_size_t o, u_int32_t v, size_t c));
+} bus_space_handle_t;
+#undef BUS_SPACE_HANDLE_T
+
+void mac68k_bus_space_handle_swapped __P((bus_space_tag_t t,
+ bus_space_handle_t *h));
+void mac68k_bus_space_handle_set_stride __P((bus_space_tag_t t,
+ bus_space_handle_t *h, int stride));
/*
* int bus_space_map __P((bus_space_tag_t t, bus_addr_t addr,
@@ -162,14 +222,26 @@
* described by tag/handle/offset.
*/
-#define bus_space_read_1(t, h, o) \
- ((void) t, (*(volatile u_int8_t *)((h) + (o))))
+u_int8_t mac68k_bsr1 __P((bus_space_tag_t tag, bus_space_handle_t *bsh,
+ bus_size_t offset));
+u_int8_t mac68k_bsr1_gen __P((bus_space_tag_t tag, bus_space_handle_t *bsh,
+ bus_size_t offset));
+u_int16_t mac68k_bsr2 __P((bus_space_tag_t tag, bus_space_handle_t *bsh,
+ bus_size_t offset));
+u_int16_t mac68k_bsr2_swap __P((bus_space_tag_t tag, bus_space_handle_t *bsh,
+ bus_size_t offset));
+u_int16_t mac68k_bsr2_gen __P((bus_space_tag_t tag, bus_space_handle_t *bsh,
+ bus_size_t offset));
+u_int32_t mac68k_bsr4 __P((bus_space_tag_t tag, bus_space_handle_t *bsh,
+ bus_size_t offset));
+u_int32_t mac68k_bsr4_swap __P((bus_space_tag_t tag, bus_space_handle_t *bsh,
+ bus_size_t offset));
+u_int32_t mac68k_bsr4_gen __P((bus_space_tag_t tag, bus_space_handle_t *bsh,
+ bus_size_t offset));
-#define bus_space_read_2(t, h, o) \
- ((void) t, (*(volatile u_int16_t *)((h) + (o))))
-
-#define bus_space_read_4(t, h, o) \
- ((void) t, (*(volatile u_int32_t *)((h) + (o))))
+#define bus_space_read_1(t,h,o) (h).bsr1((t), &(h), (o))
+#define bus_space_read_2(t,h,o) (h).bsr2((t), &(h), (o))
+#define bus_space_read_4(t,h,o) (h).bsr4((t), &(h), (o))
#if 0 /* Cause a link error for bus_space_read_8 */
#define bus_space_read_8(t, h, o) !!! bus_space_read_8 unimplemented !!!
@@ -184,47 +256,26 @@
* described by tag/handle/offset and copy into buffer provided.
*/
-#define bus_space_read_multi_1(t, h, o, a, c) do { \
- (void) t; \
- __asm __volatile (" \
- movl %0,a0 ; \
- movl %1,a1 ; \
- movl %2,d0 ; \
- 1: movb a0@,a1@+ ; \
- subql #1,d0 ; \
- jne 1b" : \
- : \
- "r" ((h) + (o)), "g" (a), "g" ((size_t)(c)) : \
- "a0","a1","d0"); \
-} while (0)
+void mac68k_bsrm1 __P((bus_space_tag_t t, bus_space_handle_t *h,
+ bus_size_t o, u_int8_t *a, size_t c));
+void mac68k_bsrm1_gen __P((bus_space_tag_t t, bus_space_handle_t *h,
+ bus_size_t o, u_int8_t *a, size_t c));
+void mac68k_bsrm2 __P((bus_space_tag_t t, bus_space_handle_t *h,
+ bus_size_t o, u_int16_t *a, size_t c));
+void mac68k_bsrm2_swap __P((bus_space_tag_t t, bus_space_handle_t *h,
+ bus_size_t o, u_int16_t *a, size_t c));
+void mac68k_bsrm2_gen __P((bus_space_tag_t t, bus_space_handle_t *h,
+ bus_size_t o, u_int16_t *a, size_t c));
+void mac68k_bsrm4 __P((bus_space_tag_t t, bus_space_handle_t *h,
+ bus_size_t o, u_int32_t *a, size_t c));
+void mac68k_bsrm4_swap __P((bus_space_tag_t t, bus_space_handle_t *h,
+ bus_size_t o, u_int32_t *a, size_t c));
+void mac68k_bsrm4_gen __P((bus_space_tag_t t, bus_space_handle_t *h,
+ bus_size_t o, u_int32_t *a, size_t c));
-#define bus_space_read_multi_2(t, h, o, a, c) do { \
- (void) t; \
- __asm __volatile (" \
- movl %0,a0 ; \
- movl %1,a1 ; \
- movl %2,d0 ; \
- 1: movw a0@,a1@+ ; \
- subql #1,d0 ; \
- jne 1b" : \
- : \
- "r" ((h) + (o)), "g" (a), "g" ((size_t)(c)) : \
- "a0","a1","d0"); \
-} while (0)
-
-#define bus_space_read_multi_4(t, h, o, a, c) do { \
- (void) t; \
- __asm __volatile (" \
- movl %0,a0 ; \
- movl %1,a1 ; \
- movl %2,d0 ; \
- 1: movl a0@,a1@+ ; \
- subql #1,d0 ; \
- jne 1b" : \
- : \
- "r" ((h) + (o)), "g" (a), "g" ((size_t)(c)) : \
- "a0","a1","d0"); \
-} while (0)
+#define bus_space_read_multi_1(t, h, o, a, c) (h).bsrm1(t, &(h), o, a, c)
+#define bus_space_read_multi_2(t, h, o, a, c) (h).bsrm2(t, &(h), o, a, c)
+#define bus_space_read_multi_4(t, h, o, a, c) (h).bsrm4(t, &(h), o, a, c)
#if 0 /* Cause a link error for bus_space_read_multi_8 */
#define bus_space_read_multi_8 !!! bus_space_read_multi_8 unimplemented !!!
@@ -240,47 +291,26 @@
* buffer provided.
*/
-#define bus_space_read_region_1(t, h, o, a, c) do { \
- (void) t; \
- __asm __volatile (" \
- movl %0,a0 ; \
- movl %1,a1 ; \
- movl %2,d0 ; \
- 1: movb a0@+,a1@+ ; \
- subql #1,d0 ; \
- jne 1b" : \
- : \
- "r" ((h) + (o)), "g" (a), "g" ((size_t)(c)) : \
- "a0","a1","d0"); \
-} while (0)
+void mac68k_bsrr1 __P((bus_space_tag_t t, bus_space_handle_t *h,
+ bus_size_t o, u_int8_t *a, size_t c));
+void mac68k_bsrr1_gen __P((bus_space_tag_t t, bus_space_handle_t *h,
+ bus_size_t o, u_int8_t *a, size_t c));
+void mac68k_bsrr2 __P((bus_space_tag_t t, bus_space_handle_t *h,
+ bus_size_t o, u_int16_t *a, size_t c));
+void mac68k_bsrr2_swap __P((bus_space_tag_t t, bus_space_handle_t *h,
+ bus_size_t o, u_int16_t *a, size_t c));
+void mac68k_bsrr2_gen __P((bus_space_tag_t t, bus_space_handle_t *h,
+ bus_size_t o, u_int16_t *a, size_t c));
+void mac68k_bsrr4 __P((bus_space_tag_t t, bus_space_handle_t *h,
+ bus_size_t o, u_int32_t *a, size_t c));
+void mac68k_bsrr4_swap __P((bus_space_tag_t t, bus_space_handle_t *h,
+ bus_size_t o, u_int32_t *a, size_t c));
+void mac68k_bsrr4_gen __P((bus_space_tag_t t, bus_space_handle_t *h,
+ bus_size_t o, u_int32_t *a, size_t c));
-#define bus_space_read_region_2(t, h, o, a, c) do { \
- (void) t; \
- __asm __volatile (" \
- movl %0,a0 ; \
- movl %1,a1 ; \
- movl %2,d0 ; \
- 1: movw a0@+,a1@+ ; \
- subql #1,d0 ; \
- jne 1b" : \
- : \
- "r" ((h) + (o)), "g" (a), "g" ((size_t)(c)) : \
- "a0","a1","d0"); \
-} while (0)
-
-#define bus_space_read_region_4(t, h, o, a, c) do { \
- (void) t; \
- __asm __volatile (" \
- movl %0,a0 ; \
- movl %1,a1 ; \
- movl %2,d0 ; \
- 1: movl a0@+,a1@+ ; \
- subql #1,d0 ; \
- jne 1b" : \
- : \
- "r" ((h) + (o)), "g" (a), "g" ((size_t)(c)) : \
- "a0","a1","d0"); \
-} while (0)
+#define bus_space_read_region_1(t, h, o, a, c) (h).bsrr1(t,&(h),o,a,c)
+#define bus_space_read_region_2(t, h, o, a, c) (h).bsrr2(t,&(h),o,a,c)
+#define bus_space_read_region_4(t, h, o, a, c) (h).bsrr4(t,&(h),o,a,c)
#if 0 /* Cause a link error for bus_space_read_region_8 */
#define bus_space_read_region_8 !!! bus_space_read_region_8 unimplemented !!!
@@ -295,14 +325,26 @@
* described by tag/handle/offset.
*/
-#define bus_space_write_1(t, h, o, v) \
- ((void) t, ((void)(*(volatile u_int8_t *)((h) + (o)) = (v))))
+void mac68k_bsw1 __P((bus_space_tag_t tag, bus_space_handle_t *bsh,
+ bus_size_t offset, u_int8_t v));
+void mac68k_bsw1_gen __P((bus_space_tag_t tag, bus_space_handle_t *bsh,
+ bus_size_t offset, u_int8_t v));
+void mac68k_bsw2 __P((bus_space_tag_t tag, bus_space_handle_t *bsh,
+ bus_size_t offset, u_int16_t v));
+void mac68k_bsw2_swap __P((bus_space_tag_t tag, bus_space_handle_t *bsh,
+ bus_size_t offset, u_int16_t v));
+void mac68k_bsw2_gen __P((bus_space_tag_t tag, bus_space_handle_t *bsh,
+ bus_size_t offset, u_int16_t v));
+void mac68k_bsw4 __P((bus_space_tag_t tag, bus_space_handle_t *bsh,
+ bus_size_t offset, u_int32_t v));
+void mac68k_bsw4_swap __P((bus_space_tag_t tag, bus_space_handle_t *bsh,
+ bus_size_t offset, u_int32_t v));
+void mac68k_bsw4_gen __P((bus_space_tag_t tag, bus_space_handle_t *bsh,
+ bus_size_t offset, u_int32_t v));
-#define bus_space_write_2(t, h, o, v) \
- ((void) t, ((void)(*(volatile u_int16_t *)((h) + (o)) = (v))))
-
-#define bus_space_write_4(t, h, o, v) \
- ((void) t, ((void)(*(volatile u_int32_t *)((h) + (o)) = (v))))
+#define bus_space_write_1(t, h, o, v) (h).bsw1(t, &(h), o, v)
+#define bus_space_write_2(t, h, o, v) (h).bsw2(t, &(h), o, v)
+#define bus_space_write_4(t, h, o, v) (h).bsw4(t, &(h), o, v)
#if 0 /* Cause a link error for bus_space_write_8 */
#define bus_space_write_8 !!! bus_space_write_8 not implemented !!!
@@ -317,47 +359,26 @@
* provided to bus space described by tag/handle/offset.
*/
-#define bus_space_write_multi_1(t, h, o, a, c) do { \
- (void) t; \
- __asm __volatile (" \
- movl %0,a0 ; \
- movl %1,a1 ; \
- movl %2,d0 ; \
- 1: movb a1@+,a0@ ; \
- subql #1,d0 ; \
- jne 1b" : \
- : \
- "r" ((h) + (o)), "g" (a), "g" ((size_t)(c)) : \
- "a0","a1","d0"); \
-} while (0)
+void mac68k_bswm1 __P((bus_space_tag_t t, bus_space_handle_t *h,
+ bus_size_t o, u_int8_t *a, size_t c));
Home |
Main Index |
Thread Index |
Old Index