diff options
author | tmm <tmm@FreeBSD.org> | 2002-02-27 17:16:18 +0000 |
---|---|---|
committer | tmm <tmm@FreeBSD.org> | 2002-02-27 17:16:18 +0000 |
commit | 3ed05b7b8966710c5cffbf0ba479dd2e07c91c0a (patch) | |
tree | 46353f300fd15b6b132ccde617d8726a2e38d224 /sys/sys/mchain.h | |
parent | e9d577adb2ffdd3b7300415775c1212a087ce0dc (diff) | |
download | FreeBSD-src-3ed05b7b8966710c5cffbf0ba479dd2e07c91c0a.zip FreeBSD-src-3ed05b7b8966710c5cffbf0ba479dd2e07c91c0a.tar.gz |
Add the following functions/macros to support byte order conversions and
device drivers for bus system with other endinesses than the CPU (using
interfaces compatible to NetBSD):
- bwap16() and bswap32(). These have optimized implementations on some
architectures; for those that don't, there exist generic implementations.
- macros to convert from a certain byte order to host byte order and vice
versa, using a naming scheme like le16toh(), htole16().
These are implemented using the bswap functions.
- stream bus space access functions, which do not perform a byte order
conversion (while the normal access functions would if the bus endianess
differs from the CPU endianess).
htons(), htonl(), ntohs() and ntohl() are implemented using the new
functions above for kernel usage. None of the above interfaces is currently
exported to user land.
Make use of the new functions in a few places where local implementations
of the same functionality existed.
Reviewed by: mike, bde
Tested on alpha by: mike
Diffstat (limited to 'sys/sys/mchain.h')
-rw-r--r-- | sys/sys/mchain.h | 23 |
1 files changed, 23 insertions, 0 deletions
diff --git a/sys/sys/mchain.h b/sys/sys/mchain.h index 57278f4..7b4f7ec 100644 --- a/sys/sys/mchain.h +++ b/sys/sys/mchain.h @@ -36,6 +36,28 @@ #include <machine/endian.h> +#ifdef _KERNEL + +/* + * XXX: remove these defines and change the function calls in the code. Use + * it unconditionally if (when) the extended byte order functions become + * available in user space. + */ +#define htoles(x) htole16((x)) +#define letohs(x) le16toh((x)) +#define htolel(x) htole32((x)) +#define letohl(x) le32toh((x)) +#define htoleq(x) htole64((int64_t)(x)) +#define letohq(x) le64toh((int64_t)(x)) + +#define htobes(x) htobe16((x)) +#define betohs(x) be16toh((x)) +#define htobel(x) htobe32((x)) +#define betohl(x) be32toh((x)) +#define htobeq(x) htobe64((int64_t)(x)) +#define betohq(x) be64toh((int64_t)(x)) + +#else /* * This macros probably belongs to the endian.h */ @@ -78,6 +100,7 @@ betohq(int64_t x) #define letohl(x) ((u_int32_t)(x)) */ #endif /* (BYTE_ORDER == LITTLE_ENDIAN) */ +#endif /* _KERNEL */ #ifdef _KERNEL |