diff options
author | 2001-06-25 06:21:18 +0000 | |
---|---|---|
committer | 2001-06-25 06:21:18 +0000 | |
commit | 745be758a2f40cbafc840bd1b36cfb8a6f38cb44 (patch) | |
tree | 9b81404a334b385ab06c94b79dbd6edc7c90aef0 | |
parent | PENDING_TDB tag handling (same as ip_output) (diff) | |
download | wireguard-openbsd-745be758a2f40cbafc840bd1b36cfb8a6f38cb44.tar.xz wireguard-openbsd-745be758a2f40cbafc840bd1b36cfb8a6f38cb44.zip |
implement bus_space_set_multi_*, based on netbsd code; drahn@ ok
-rw-r--r-- | sys/arch/powerpc/include/bus.h | 65 |
1 files changed, 64 insertions, 1 deletions
diff --git a/sys/arch/powerpc/include/bus.h b/sys/arch/powerpc/include/bus.h index f0b09535599..7738668ed5e 100644 --- a/sys/arch/powerpc/include/bus.h +++ b/sys/arch/powerpc/include/bus.h @@ -1,4 +1,4 @@ -/* $OpenBSD: bus.h,v 1.13 2001/06/24 04:44:19 drahn Exp $ */ +/* $OpenBSD: bus.h,v 1.14 2001/06/25 06:21:18 mickey Exp $ */ /* * Copyright (c) 1997 Per Fogelstrom. All rights reserved. @@ -237,6 +237,69 @@ bus_space_write_region_4(bus_space_tag_t tag, bus_space_handle_t bsh, #define bus_space_write_region_8 !!! bus_space_write_region_8 unimplemented !!! #endif +/* + * void bus_space_set_multi_N __P((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 __P((bus_space_tag_t, + bus_space_handle_t, bus_size_t, u_int8_t, size_t)); +static __inline void bus_space_set_multi_2 __P((bus_space_tag_t, + bus_space_handle_t, bus_size_t, u_int16_t, size_t)); +static __inline void bus_space_set_multi_4 __P((bus_space_tag_t, + bus_space_handle_t, bus_size_t, u_int32_t, size_t)); + +static __inline void +bus_space_set_multi_1(tag, bsh, offset, val, count) + bus_space_tag_t tag; + bus_space_handle_t bsh; + bus_size_t offset; + u_int8_t val; + size_t count; +{ + volatile u_int8_t *d = __BA(tag, bsh, offset); + + while (count--) + *d = val; + __asm__ volatile("eieio; sync"); +} + +static __inline void +bus_space_set_multi_2(tag, bsh, offset, val, count) + bus_space_tag_t tag; + bus_space_handle_t bsh; + bus_size_t offset; + u_int16_t val; + size_t count; +{ + volatile u_int16_t *d = __BA(tag, bsh, offset); + + while (count--) + __asm__ volatile("sthbrx %0, 0, %1" :: + "r"(val), "r"(d)); + __asm__ volatile("eieio; sync"); +} + +static __inline void +bus_space_set_multi_4(tag, bsh, offset, val, count) + bus_space_tag_t tag; + bus_space_handle_t bsh; + bus_size_t offset; + u_int32_t val; + size_t count; +{ + volatile u_int32_t *d = __BA(tag, bsh, offset); + + while (count--) + __asm__ volatile("stwbrx %0, 0, %1" :: + "r"(val), "r"(d)); + __asm__ volatile("eieio; sync"); +} + +#define bus_space_set_multi_8 !!! bus_space_set_multi_8 unimplemented !!! /* These are OpenBSD extensions to the general NetBSD bus interface. */ void |