Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. =================================================================== RCS file: /ftp/cvs/cvsroot/src/sys/arch/hp300/include/bus.h,v rcsdiff: /ftp/cvs/cvsroot/src/sys/arch/hp300/include/bus.h,v: warning: Unknown phrases like `commitid ...;' are present. retrieving revision 1.6 retrieving revision 1.6.16.1 diff -u -p -r1.6 -r1.6.16.1 --- src/sys/arch/hp300/include/bus.h 2001/12/02 01:20:33 1.6 +++ src/sys/arch/hp300/include/bus.h 2004/08/03 10:34:37 1.6.16.1 @@ -1,4 +1,4 @@ -/* $NetBSD: bus.h,v 1.6 2001/12/02 01:20:33 gmcgarry Exp $ */ +/* $NetBSD: bus.h,v 1.6.16.1 2004/08/03 10:34:37 skrll Exp $ */ /*- * Copyright (c) 1996, 1997, 1998 The NetBSD Foundation, Inc. @@ -81,8 +81,67 @@ typedef u_long bus_size_t; /* * Access methods for bus resources and address space. */ -typedef int bus_space_tag_t; -typedef u_long bus_space_handle_t; +typedef struct bus_space_tag *bus_space_tag_t; +typedef u_long bus_space_handle_t; + +/* + * Implementation specific structures. + * XXX Don't use outside of bus_space definitions! + * XXX maybe this should be encapsuled in a non-global .h file? + */ + +struct bus_space_tag { + u_int bustype; + + u_int8_t (*bsr1) __P((bus_space_tag_t, bus_space_handle_t, + bus_size_t)); + u_int16_t (*bsr2) __P((bus_space_tag_t, bus_space_handle_t, + bus_size_t)); + u_int32_t (*bsr4) __P((bus_space_tag_t, bus_space_handle_t, + bus_size_t)); + void (*bsrm1) __P((bus_space_tag_t, bus_space_handle_t, + bus_size_t, u_int8_t *, bus_size_t)); + void (*bsrm2) __P((bus_space_tag_t, bus_space_handle_t, + bus_size_t, u_int16_t *, bus_size_t)); + void (*bsrm4) __P((bus_space_tag_t, bus_space_handle_t, + bus_size_t, u_int32_t *, bus_size_t)); + void (*bsrr1) __P((bus_space_tag_t, bus_space_handle_t, + bus_size_t, u_int8_t *, bus_size_t)); + void (*bsrr2) __P((bus_space_tag_t, bus_space_handle_t, + bus_size_t, u_int16_t *, bus_size_t)); + void (*bsrr4) __P((bus_space_tag_t, bus_space_handle_t, + bus_size_t, u_int32_t *, bus_size_t)); + void (*bsw1) __P((bus_space_tag_t, bus_space_handle_t, + bus_size_t, u_int8_t)); + void (*bsw2) __P((bus_space_tag_t, bus_space_handle_t, + bus_size_t, u_int16_t)); + void (*bsw4) __P((bus_space_tag_t, bus_space_handle_t, + bus_size_t, u_int32_t)); + void (*bswm1) __P((bus_space_tag_t, bus_space_handle_t, + bus_size_t, const u_int8_t *, bus_size_t)); + void (*bswm2) __P((bus_space_tag_t, bus_space_handle_t, + bus_size_t, const u_int16_t *, bus_size_t)); + void (*bswm4) __P((bus_space_tag_t, bus_space_handle_t, + bus_size_t, const u_int32_t *, bus_size_t)); + void (*bswr1) __P((bus_space_tag_t, bus_space_handle_t , + bus_size_t, const u_int8_t *, bus_size_t)); + void (*bswr2) __P((bus_space_tag_t, bus_space_handle_t, + bus_size_t, const u_int16_t *, bus_size_t)); + void (*bswr4) __P((bus_space_tag_t, bus_space_handle_t, + bus_size_t, const u_int32_t *, bus_size_t)); + void (*bssm1) __P((bus_space_tag_t, bus_space_handle_t, + bus_size_t, u_int8_t, bus_size_t)); + void (*bssm2) __P((bus_space_tag_t, bus_space_handle_t, + bus_size_t, u_int16_t, bus_size_t)); + void (*bssm4) __P((bus_space_tag_t, bus_space_handle_t, + bus_size_t, u_int32_t, bus_size_t)); + void (*bssr1) __P((bus_space_tag_t, bus_space_handle_t, + bus_size_t, u_int8_t, bus_size_t)); + void (*bssr2) __P((bus_space_tag_t, bus_space_handle_t, + bus_size_t, u_int16_t, bus_size_t)); + void (*bssr4) __P((bus_space_tag_t, bus_space_handle_t, + bus_size_t, u_int32_t, bus_size_t)); +}; /* * int bus_space_map __P((bus_space_tag_t t, bus_addr_t addr, @@ -93,7 +152,7 @@ typedef u_long bus_space_handle_t; #define BUS_SPACE_MAP_CACHEABLE 0x01 #define BUS_SPACE_MAP_LINEAR 0x02 -#define BUS_SPACE_MAP_PREFETCHABLE 0x04 +#define BUS_SPACE_MAP_PREFETCHABLE 0x04 int bus_space_map __P((bus_space_tag_t, bus_addr_t, bus_size_t, int, bus_space_handle_t *)); @@ -173,13 +232,16 @@ int hp300_bus_space_probe __P((bus_space */ #define bus_space_read_1(t, h, o) \ - ((void) t, (*(volatile u_int8_t *)((h) + (o)))) + (((t)->bsr1 != NULL) ? ((t)->bsr1)(t, h, o) : \ + (*(volatile u_int8_t *)((h) + (o)))) #define bus_space_read_2(t, h, o) \ - ((void) t, (*(volatile u_int16_t *)((h) + (o)))) + (((t)->bsr2 != NULL) ? ((t)->bsr2)(t, h, o) : \ + (*(volatile u_int16_t *)((h) + (o)))) #define bus_space_read_4(t, h, o) \ - ((void) t, (*(volatile u_int32_t *)((h) + (o)))) + (((t)->bsr4 != NULL) ? ((t)->bsr4)(t, h, o) : \ + (*(volatile u_int32_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 !!! @@ -194,47 +256,58 @@ int hp300_bus_space_probe __P((bus_space * 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" (c) : \ - "%a0","%a1","%d0"); \ -} while (0) +#define bus_space_read_multi_1(t, h, o, a, c) \ +do { \ + if ((t)->bsrm1 != NULL) \ + ((t)->bsrm1)(t, h, o, a, c); \ + else { \ + __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" (c) : \ + "%a0","%a1","%d0"); \ + } \ +} while (/* CONSTCOND */ 0) -#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" (c) : \ - "%a0","%a1","%d0"); \ -} while (0) +#define bus_space_read_multi_2(t, h, o, a, c) \ +do { \ + if ((t)->bsrm2 != NULL) \ + ((t)->bsrm2)(t, h, o, a, c); \ + else { \ + __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" (c) : \ + "%a0","%a1","%d0"); \ + } \ +} while (/* CONSTCOND */ 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" (c) : \ - "%a0","%a1","%d0"); \ -} while (0) + if ((t)->bsrm4 != NULL) \ + ((t)->bsrm4)(t, h, o, a, c); \ + else { \ + __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" (c) : \ + "%a0","%a1","%d0"); \ + } \ +} while (/* CONSTCOND */ 0) #if 0 /* Cause a link error for bus_space_read_multi_8 */ #define bus_space_read_multi_8 !!! bus_space_read_multi_8 unimplemented !!! @@ -250,47 +323,59 @@ int hp300_bus_space_probe __P((bus_space * 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" (c) : \ - "%a0","%a1","%d0"); \ -} while (0) +#define bus_space_read_region_1(t, h, o, a, c) \ +do { \ + if ((t)->bsrr1 != NULL) \ + ((t)->bsrr1)(t, h, o, a, c); \ + else { \ + __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" (c) : \ + "%a0","%a1","%d0"); \ + } \ +} while (/* CONSTCOND */ 0) -#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" (c) : \ - "%a0","%a1","%d0"); \ -} while (0) +#define bus_space_read_region_2(t, h, o, a, c) \ +do { \ + if ((t)->bsrr2 != NULL) \ + ((t)->bsrr2)(t, h, o, a, c); \ + else { \ + __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" (c) : \ + "%a0","%a1","%d0"); \ + } \ +} while (/* CONSTCOND */ 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" (c) : \ - "%a0","%a1","%d0"); \ -} while (0) +#define bus_space_read_region_4(t, h, o, a, c) \ +do { \ + if ((t)->bsrr4 != NULL) \ + ((t)->bsrr4)(t, h, o, a, c); \ + else { \ + __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" (c) : \ + "%a0","%a1","%d0"); \ + } \ +} while (/* CONSTCOND */ 0) #if 0 /* Cause a link error for bus_space_read_region_8 */ #define bus_space_read_region_8 !!! bus_space_read_region_8 unimplemented !!! @@ -306,13 +391,28 @@ int hp300_bus_space_probe __P((bus_space */ #define bus_space_write_1(t, h, o, v) \ - ((void) t, ((void)(*(volatile u_int8_t *)((h) + (o)) = (v)))) +do { \ + if ((t)->bsw1 != NULL) \ + ((t)->bsw1)(t, h, o, v); \ + else \ + ((void)(*(volatile u_int8_t *)((h) + (o)) = (v))); \ +} while (/* CONSTCOND */ 0) #define bus_space_write_2(t, h, o, v) \ - ((void) t, ((void)(*(volatile u_int16_t *)((h) + (o)) = (v)))) +do { \ + if ((t)->bsw2 != NULL) \ + ((t)->bsw2)(t, h, o, v); \ + else \ + ((void)(*(volatile u_int16_t *)((h) + (o)) = (v))); \ +} while (/* CONSTCOND */ 0) #define bus_space_write_4(t, h, o, v) \ - ((void) t, ((void)(*(volatile u_int32_t *)((h) + (o)) = (v)))) +do { \ + if ((t)->bsw4 != NULL) \ + ((t)->bsw4)(t, h, o, v); \ + else \ + ((void)(*(volatile u_int32_t *)((h) + (o)) = (v))); \ +} while (/* CONSTCOND */ 0) #if 0 /* Cause a link error for bus_space_write_8 */ #define bus_space_write_8 !!! bus_space_write_8 not implemented !!! @@ -327,47 +427,60 @@ int hp300_bus_space_probe __P((bus_space * 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" (c) : \ - "%a0","%a1","%d0"); \ -} while (0) +#define bus_space_write_multi_1(t, h, o, a, c) \ +do { \ + if ((t)->bswm1 != NULL) \ + ((t)->bswm1)(t, h, o, a, c); \ + else { \ + __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" (c) : \ + "%a0","%a1","%d0"); \ + } \ +} while (/* CONSTCOND */ 0) -#define bus_space_write_multi_2(t, h, o, a, c) do { \ - (void) t; \ - __asm __volatile (" \ - movl %0,%%a0 ; \ - movl %1,%%a1 ; \ - movl %2,%%d0 ; \ - 1: movw %%a1@+,%%a0@ ; \ - subql #1,%%d0 ; \ - jne 1b" : \ - : \ - "r" ((h) + (o)), "g" (a), "g" (c) : \ - "%a0","%a1","%d0"); \ -} while (0) +#define bus_space_write_multi_2(t, h, o, a, c) \ +do { \ + if ((t)->bswm2 != NULL) \ + ((t)->bswm2)(t, h, o, a, c); \ + else { \ + __asm __volatile (" \ + movl %0,%%a0 ; \ + movl %1,%%a1 ; \ + movl %2,%%d0 ; \ + 1: movw %%a1@+,%%a0@ ; \ + subql #1,%%d0 ; \ + jne 1b" : \ + : \ + "r" ((h) + (o)), "g" (a), "g" (c) : \ + "%a0","%a1","%d0"); \ + } \ +} while (/* CONSTCOND */ 0) -#define bus_space_write_multi_4(t, h, o, a, c) do { \ +#define bus_space_write_multi_4(t, h, o, a, c) \ +do { \ (void) t; \ - __asm __volatile (" \ - movl %0,%%a0 ; \ - movl %1,%%a1 ; \ - movl %2,%%d0 ; \ - 1: movl %%a1@+,%%a0@ ; \ - subql #1,%%d0 ; \ - jne 1b" : \ - : \ - "r" ((h) + (o)), "g" (a), "g" (c) : \ - "%a0","%a1","%d0"); \ -} while (0) + if ((t)->bswm4 != NULL) \ + ((t)->bswm4)(t, h, o, a, c); \ + else { \ + __asm __volatile (" \ + movl %0,%%a0 ; \ + movl %1,%%a1 ; \ + movl %2,%%d0 ; \ + 1: movl %%a1@+,%%a0@ ; \ + subql #1,%%d0 ; \ + jne 1b" : \ + : \ + "r" ((h) + (o)), "g" (a), "g" (c) : \ + "%a0","%a1","%d0"); \ + } \ +} while (/* CONSTCOND */ 0) #if 0 /* Cause a link error for bus_space_write_8 */ #define bus_space_write_multi_8(t, h, o, a, c) \ @@ -383,47 +496,59 @@ int hp300_bus_space_probe __P((bus_space * to bus space described by tag/handle starting at `offset'. */ -#define bus_space_write_region_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" (c) : \ - "%a0","%a1","%d0"); \ -} while (0) +#define bus_space_write_region_1(t, h, o, a, c) \ +do { \ + if ((t)->bswr1 != NULL) \ + ((t)->bswr1)(t, h, o, a, c); \ + else { \ + __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" (c) : \ + "%a0","%a1","%d0"); \ + } \ +} while (/* CONSTCOND */ 0) -#define bus_space_write_region_2(t, h, o, a, c) do { \ - (void) t; \ - __asm __volatile (" \ - movl %0,%%a0 ; \ - movl %1,%%a1 ; \ - movl %2,%%d0 ; \ - 1: movw %%a1@+,%%a0@+ ; \ - subql #1,%%d0 ; \ - jne 1b" : \ - : \ - "r" ((h) + (o)), "g" (a), "g" (c) : \ - "%a0","%a1","%d0"); \ -} while (0) +#define bus_space_write_region_2(t, h, o, a, c) \ +do { \ + if ((t)->bswr2) != NULL) \ + ((t)->bswr2)(t, h, o, a, c); \ + else { \ + __asm __volatile (" \ + movl %0,%%a0 ; \ + movl %1,%%a1 ; \ + movl %2,%%d0 ; \ + 1: movw %%a1@+,%%a0@+ ; \ + subql #1,%%d0 ; \ + jne 1b" : \ + : \ + "r" ((h) + (o)), "g" (a), "g" (c) : \ + "%a0","%a1","%d0"); \ + } \ +} while (/* CONSTCOND */ 0) -#define bus_space_write_region_4(t, h, o, a, c) do { \ - (void) t; \ - __asm __volatile (" \ - movl %0,%%a0 ; \ - movl %1,%%a1 ; \ - movl %2,%%d0 ; \ - 1: movl %%a1@+,%%a0@+ ; \ - subql #1,%%d0 ; \ - jne 1b" : \ - : \ - "r" ((h) + (o)), "g" (a), "g" (c) : \ - "%a0","%a1","%d0"); \ -} while (0) +#define bus_space_write_region_4(t, h, o, a, c) \ +do { \ + if ((t)->bswr4) != NULL) \ + ((t)->bswr4)(t, h, o, a, c); \ + else { \ + __asm __volatile (" \ + movl %0,%%a0 ; \ + movl %1,%%a1 ; \ + movl %2,%%d0 ; \ + 1: movl %%a1@+,%%a0@+ ; \ + subql #1,%%d0 ; \ + jne 1b" : \ + : \ + "r" ((h) + (o)), "g" (a), "g" (c) : \ + "%a0","%a1","%d0"); \ + } \ +} while (/* CONSTCOND */ 0) #if 0 /* Cause a link error for bus_space_write_region_8 */ #define bus_space_write_region_8 \ @@ -439,47 +564,59 @@ int hp300_bus_space_probe __P((bus_space * by tag/handle/offset `count' times. */ -#define bus_space_set_multi_1(t, h, o, val, c) do { \ - (void) t; \ - __asm __volatile (" \ - movl %0,%%a0 ; \ - movl %1,%%d1 ; \ - movl %2,%%d0 ; \ - 1: movb %%d1,%%a0@ ; \ - subql #1,%%d0 ; \ - jne 1b" : \ - : \ - "r" ((h) + (o)), "g" (val), "g" (c) : \ - "%a0","%d0","%d1"); \ -} while (0) +#define bus_space_set_multi_1(t, h, o, val, c) \ +do { \ + if ((t)->bssm1 != NULL) \ + ((t)->bssm1)(t, h, o, val, c); \ + else { \ + __asm __volatile (" \ + movl %0,%%a0 ; \ + movl %1,%%d1 ; \ + movl %2,%%d0 ; \ + 1: movb %%d1,%%a0@ ; \ + subql #1,%%d0 ; \ + jne 1b" : \ + : \ + "r" ((h) + (o)), "g" (val), "g" (c) : \ + "%a0","%d0","%d1"); \ + } \ +} while (/* CONSTCOND */ 0) -#define bus_space_set_multi_2(t, h, o, val, c) do { \ - (void) t; \ - __asm __volatile (" \ - movl %0,%%a0 ; \ - movl %1,%%d1 ; \ - movl %2,%%d0 ; \ - 1: movw %%d1,%%a0@ ; \ - subql #1,%%d0 ; \ - jne 1b" : \ - : \ - "r" ((h) + (o)), "g" (val), "g" (c) : \ - "%a0","%d0","%d1"); \ -} while (0) +#define bus_space_set_multi_2(t, h, o, val, c) \ +do { \ + if ((t)->bssm2 != NULL) \ + ((t)->bssm2)(t, h, o, val, c); \ + else { \ + __asm __volatile (" \ + movl %0,%%a0 ; \ + movl %1,%%d1 ; \ + movl %2,%%d0 ; \ + 1: movw %%d1,%%a0@ ; \ + subql #1,%%d0 ; \ + jne 1b" : \ + : \ + "r" ((h) + (o)), "g" (val), "g" (c) : \ + "%a0","%d0","%d1"); \ + } \ +} while (/* CONSTCOND */ 0) -#define bus_space_set_multi_4(t, h, o, val, c) do { \ - (void) t; \ - __asm __volatile (" \ - movl %0,%%a0 ; \ - movl %1,%%d1 ; \ - movl %2,%%d0 ; \ - 1: movl %%d1,%%a0@ ; \ - subql #1,%%d0 ; \ - jne 1b" : \ - : \ - "r" ((h) + (o)), "g" (val), "g" (c) : \ - "%a0","%d0","%d1"); \ -} while (0) +#define bus_space_set_multi_4(t, h, o, val, c) \ +do { \ + if ((t)->bssm4 != NULL) \ + ((t)->bssm4)(t, h, o, val, c); \ + else { \ + __asm __volatile (" \ + movl %0,%%a0 ; \ + movl %1,%%d1 ; \ + movl %2,%%d0 ; \ + 1: movl %%d1,%%a0@ ; \ + subql #1,%%d0 ; \ + jne 1b" : \ + : \ + "r" ((h) + (o)), "g" (val), "g" (c) : \ + "%a0","%d0","%d1"); \ + } \ +} while (/* CONSTCOND */ 0) #if 0 /* Cause a link error for bus_space_set_multi_8 */ #define bus_space_set_multi_8 \ @@ -495,47 +632,60 @@ int hp300_bus_space_probe __P((bus_space * by tag/handle starting at `offset'. */ -#define bus_space_set_region_1(t, h, o, val, c) do { \ - (void) t; \ - __asm __volatile (" \ - movl %0,%%a0 ; \ - movl %1,%%d1 ; \ - movl %2,%%d0 ; \ - 1: movb %%d1,%%a0@+ ; \ - subql #1,%%d0 ; \ - jne 1b" : \ - : \ - "r" ((h) + (o)), "g" (val), "g" (c) : \ - "%a0","%d0","%d1"); \ -} while (0) +#define bus_space_set_region_1(t, h, o, val, c) \ +do { \ + if ((t)->bssr1 != NULL) \ + ((t)->bssr1)(t, h, o, val, c); \ + else { \ + __asm __volatile (" \ + movl %0,%%a0 ; \ + movl %1,%%d1 ; \ + movl %2,%%d0 ; \ + 1: movb %%d1,%%a0@+ ; \ + subql #1,%%d0 ; \ + jne 1b" : \ + : \ + "r" ((h) + (o)), "g" (val), "g" (c) : \ + "%a0","%d0","%d1"); \ + } \ +} while (/* CONSTCOND */ 0) -#define bus_space_set_region_2(t, h, o, val, c) do { \ - (void) t; \ - __asm __volatile (" \ - movl %0,%%a0 ; \ - movl %1,%%d1 ; \ - movl %2,%%d0 ; \ - 1: movw %%d1,%%a0@+ ; \ - subql #1,%%d0 ; \ - jne 1b" : \ - : \ - "r" ((h) + (o)), "g" (val), "g" (c) : \ - "%a0","%d0","%d1"); \ -} while (0) +#define bus_space_set_region_2(t, h, o, val, c) \ +do { \ + if ((t)->bssr2 != NULL) \ + ((t)->bssr2)(t, h, o, val, c); \ + else { \ + __asm __volatile (" \ + movl %0,%%a0 ; \ + movl %1,%%d1 ; \ + movl %2,%%d0 ; \ + 1: movw %%d1,%%a0@+ ; \ + subql #1,%%d0 ; \ + jne 1b" : \ + : \ + "r" ((h) + (o)), "g" (val), "g" (c) : \ + "%a0","%d0","%d1"); \ + } \ +} while (/* CONSTCOND */ 0) -#define bus_space_set_region_4(t, h, o, val, c) do { \ +#define bus_space_set_region_4(t, h, o, val, c) \ +do { \ (void) t; \ - __asm __volatile (" \ - movl %0,%%a0 ; \ - movl %1,%%d1 ; \ - movl %2,%%d0 ; \ - 1: movl %%d1,%%a0@+ ; \ - subql #1,%%d0 ; \ - jne 1b" : \ - : \ - "r" ((h) + (o)), "g" (val), "g" (c) : \ - "%a0","%d0","%d1"); \ -} while (0) + if ((t)->bssr4 != NULL) \ + ((t)->bssr4)(t, h, o, val, c); \ + else { \ + __asm __volatile (" \ + movl %0,%%a0 ; \ + movl %1,%%d1 ; \ + movl %2,%%d0 ; \ + 1: movl %%d1,%%a0@+ ; \ + subql #1,%%d0 ; \ + jne 1b" : \ + : \ + "r" ((h) + (o)), "g" (val), "g" (c) : \ + "%a0","%d0","%d1"); \ + } \ +} while (/* CONSTCOND */ 0) #if 0 /* Cause a link error for bus_space_set_region_8 */ #define bus_space_set_region_8 \ @@ -555,9 +705,9 @@ int hp300_bus_space_probe __P((bus_space #define __HP300_copy_region_N(BYTES) \ static __inline void __CONCAT(bus_space_copy_region_,BYTES) \ __P((bus_space_tag_t, \ - bus_space_handle_t bsh1, bus_size_t off1, \ - bus_space_handle_t bsh2, bus_size_t off2, \ - bus_size_t count)); \ + bus_space_handle_t, bus_size_t, \ + bus_space_handle_t, bus_size_t, \ + bus_size_t)); \ \ static __inline void \ __CONCAT(bus_space_copy_region_,BYTES)(t, h1, o1, h2, o2, c) \