Improve the endian support for DragonFly by providing functions to convert
authorJoerg Sonnenberger <joerg@dragonflybsd.org>
Mon, 23 Aug 2004 16:03:44 +0000 (16:03 +0000)
committerJoerg Sonnenberger <joerg@dragonflybsd.org>
Mon, 23 Aug 2004 16:03:44 +0000 (16:03 +0000)
16/32/64 bit variables and parts of byte streams between host order and
big / little endian.

Reduce the namespace pollution for normal usage, e.g. of sys/types.h.
The duplication of ntohl and friends in arpa/inet.h and sys/param.h comes
from byteorder(3) showing sys/param.h as header file and SUS requiring
arpa/inet.h to provide this functions.

Remove local hacks in acpidump and usb_port.h.

The prototype of ntohl and friends is in sync with SUS, warnings e.g. for
implicit sign casts or use of int/long will be handled separately.

Written-by: Hitten Pandya and Joerg Sonnenberger
Inspired-by: FreeBSD

include/arpa/inet.h
sys/bus/usb/usb_port.h
sys/cpu/i386/include/endian.h
sys/i386/include/endian.h
sys/sys/endian.h
sys/sys/param.h
usr.sbin/acpi/acpidump/acpi.c

index b361180..6cb65a4 100644 (file)
@@ -1,4 +1,6 @@
 /*
+ * Copyright (c) 2004 The DragonFly Project.  All rights reserved.
+ *
  * Copyright (c) 1983, 1993
  *     The Regents of the University of California.  All rights reserved.
  *
@@ -53,7 +55,7 @@
  *     @(#)inet.h      8.1 (Berkeley) 6/2/93
  *     From: Id: inet.h,v 8.5 1997/01/29 08:48:09 vixie Exp $
  * $FreeBSD: src/include/arpa/inet.h,v 1.11.2.1 2001/04/21 14:53:03 ume Exp $
- * $DragonFly: src/include/arpa/inet.h,v 1.3 2003/11/14 01:01:47 dillon Exp $
+ * $DragonFly: src/include/arpa/inet.h,v 1.4 2004/08/23 16:03:44 joerg Exp $
  */
 
 #ifndef _ARPA_INET_H_
@@ -82,6 +84,19 @@ struct in_addr;
 #define        inet_nsap_addr  __inet_nsap_addr
 #define        inet_nsap_ntoa  __inet_nsap_ntoa
 
+#ifndef htonl
+#define        htonl(x)        __htonl(x)
+#endif
+#ifndef htons
+#define        htons(x)        __htons(x)
+#endif
+#ifndef ntohl
+#define        ntohl(x)        __ntohl(x)
+#endif
+#ifndef ntohs
+#define        ntohs(x)        __ntohs(x)
+#endif
+
 __BEGIN_DECLS
 int             ascii2addr (int, const char *, void *);
 char           *addr2ascii (int, const void *, int, char *);
index 1ed84da..e9179f2 100644 (file)
@@ -2,7 +2,7 @@
  * $OpenBSD: usb_port.h,v 1.18 2000/09/06 22:42:10 rahnds Exp $
  * $NetBSD: usb_port.h,v 1.54 2002/03/28 21:49:19 ichiro Exp $
  * $FreeBSD: src/sys/dev/usb/usb_port.h,v 1.65 2003/11/09 23:54:21 joe Exp $
- * $DragonFly: src/sys/bus/usb/usb_port.h,v 1.9 2004/07/23 07:16:24 joerg Exp $
+ * $DragonFly: src/sys/bus/usb/usb_port.h,v 1.10 2004/08/23 16:03:44 joerg Exp $
  */
 
 /* Also already merged from NetBSD:
@@ -373,7 +373,6 @@ typedef struct thread *usb_proc_ptr;
 /* XXX Change this when FreeBSD has memset */
 #define memcpy(d, s, l)         bcopy((s),(d),(l))
 #define memset(d, v, l)         bzero((d),(l))
-#define bswap32(x)              swap32(x)
 
 #define        config_pending_incr()
 #define        config_pending_decr()
index e298ea8..cc0c4d3 100644 (file)
@@ -1,4 +1,6 @@
 /*
+ * Copyright (c) 2004 The DragonFly Project.  All rights reserved.
+ *
  * Copyright (c) 1987, 1991 Regents of the University of California.
  * All rights reserved.
  *
  *
  *     from: @(#)endian.h      7.8 (Berkeley) 4/3/91
  * $FreeBSD: src/sys/i386/include/endian.h,v 1.18 1999/12/29 04:33:01 peter Exp $
- * $DragonFly: src/sys/cpu/i386/include/endian.h,v 1.3 2003/08/26 21:42:18 rob Exp $
+ * $DragonFly: src/sys/cpu/i386/include/endian.h,v 1.4 2004/08/23 16:03:44 joerg Exp $
  */
 
 #ifndef _MACHINE_ENDIAN_H_
 #define        _MACHINE_ENDIAN_H_
 
+#include <sys/cdefs.h>
+#include <machine/stdint.h>
+
 /*
  * Define the order of 32-bit words in 64-bit words.
  */
 #define        _QUAD_HIGHWORD 1
 #define        _QUAD_LOWWORD 0
 
-#ifndef _POSIX_SOURCE
-
 /*
  * Definitions for byte order, according to byte significance from low
  * address to high.
  */
-#define        LITTLE_ENDIAN   1234    /* LSB first: i386, vax */
-#define        BIG_ENDIAN      4321    /* MSB first: 68000, ibm, net */
-#define        PDP_ENDIAN      3412    /* LSB first in word, MSW first in long */
+#define        _LITTLE_ENDIAN  1234    /* LSB first: i386, vax */
+#define        _BIG_ENDIAN     4321    /* MSB first: 68000, ibm, net */
+#define        _PDP_ENDIAN     3412    /* LSB first in word, MSW first in long */
 
-#define        BYTE_ORDER      LITTLE_ENDIAN
+#define        _BYTE_ORDER     _LITTLE_ENDIAN
 
-#ifndef _KERNEL
-#include <sys/cdefs.h>
+/*
+ * Deprecated variants that don't have enough underscores to be useful in more
+ * strict namespaces.
+ */
+#if __BSD_VISIBLE
+#define        LITTLE_ENDIAN   _LITTLE_ENDIAN
+#define        BIG_ENDIAN      _BIG_ENDIAN
+#define        PDP_ENDIAN      _PDP_ENDIAN
+#define        BYTE_ORDER      _BYTE_ORDER
 #endif
 
-__BEGIN_DECLS
-unsigned long  htonl (unsigned long);
-unsigned short htons (unsigned short);
-unsigned long  ntohl (unsigned long);
-unsigned short ntohs (unsigned short);
-__END_DECLS
-
-#define __word_swap_long(x) \
-__extension__ ({ register u_long __X = (x); \
-   __asm ("rorl $16, %1" \
-       : "=r" (__X) \
-       : "0" (__X)); \
-   __X; })
-
-#if defined(_KERNEL) && (defined(I486_CPU) || defined(I586_CPU) || defined(I686_CPU)) && !defined(I386_CPU)
-
-#define __byte_swap_long(x) \
-__extension__ ({ register u_long __X = (x); \
-   __asm ("bswap %0" \
-       : "=r" (__X) \
-       : "0" (__X)); \
-   __X; })
-#else
-
-#define __byte_swap_long(x) \
-__extension__ ({ register u_long __X = (x); \
-   __asm ("xchgb %h1, %b1\n\trorl $16, %1\n\txchgb %h1, %b1" \
-       : "=q" (__X) \
-       : "0" (__X)); \
-   __X; })
+#define        __htonl(x)      __bswap32(x)
+#define        __htons(x)      __bswap16(x)
+#define        __ntohl(x)      __bswap32(x)
+#define        __ntohs(x)      __bswap16(x)
+
+#define        __byte_swap16_const(x) \
+       ((((x) & 0xff00) >> 8) | \
+        (((x) & 0x00ff) << 8))
+
+#define        __byte_swap32_const(x) \
+       ((((x) & 0xff000000) >> 24) | \
+        (((x) & 0x00ff0000) >>  8) | \
+        (((x) & 0x0000ff00) <<  8) | \
+        (((x) & 0x000000ff) << 24))
+
+#define        __byte_swap64_const(x) \
+       (((x) >> 56) | (((x) >> 40) & 0xff00) | (((x) >> 24) & 0xff0000) | \
+        (((x) >> 8) & 0xff000000) | (((x) << 8) & ((__uint64_t)0xff << 32)) | \
+        (((x) << 24) & ((__uint64_t)0xff << 40)) | \
+        (((x) << 40) & ((__uint64_t)0xff << 48)) | (((x) << 56)))
+
+#if defined(__INTEL_COMPILER)
+# if !defined(__cplusplus) || (defined(__cplusplus) && __INTEL_COMPILER >= 800)
+#  define __INTEL_COMPILER_with_DragonFly_endian 1
+# endif
 #endif
 
-#define __byte_swap_word(x) \
-__extension__ ({ register u_short __X = (x); \
-   __asm ("xchgb %h1, %b1" \
-       : "=q" (__X) \
-       : "0" (__X)); \
-   __X; })
+#if defined(__GNUC__) || defined(__INTEL_COMPILER_with_DragonFly_endian)
+
+#if (defined(_KERNEL)  && !defined(I386_CPU) && \
+       (defined(I486_CPU) || defined(I586_CPU) || defined(I686_CPU))) || \
+    defined(__i486__) || defined(__i586__) || defined(__i686__)
+
+#define __byte_swap32_var(x) \
+       __extension__ ({ register __uint32_t __X = (x); \
+          __asm ("bswap %0" : "+r" (__X)); \
+
+#else /* !I386_CPU */
+
+#define __byte_swap32_var(x) \
+       __extension__ ({ register __uint32_t __X = (x); \
+          __asm ("xchgb %h0, %b0\n\trorl $16, %0\n\txchgb %h0, %b0" \
+              : "+q" (__X)); \
+          __X; })
+#endif /* !I386_CPU */
+
+#define __byte_swap16_var(x) \
+       __extension__ ({ register __uint16_t __X = (x); \
+          __asm ("xchgb %h0, %b0" : "+q" (__X)); \
+          __X; })
+
+#ifdef __OPTIMIZE__
+
+#define        __byte_swap16(x) (__builtin_constant_p(x) ? \
+       __byte_swap16_const(x) : __byte_swap16_var(x))
+
+#define        __byte_swap32(x) (__builtin_constant_p(x) ? \
+       __byte_swap32_const(x) : __byte_swap32_var(x))
+
+#else  /* __OPTIMIZE__ */
+
+#define __byte_swap16(x) __byte_swap16_var(x)
+#define __byte_swap32(x) __byte_swap32_var(x)
+
+#endif /* __OPTIMIZE__ */
+
+#endif /* __GNUC__ || __INTEL_COMPILER_with_DragonFly_endian */
 
 /*
- * Macros for network/external number representation conversion.
+ * If the compiler-specific part didn't provide this, fallback
+ * to the generic versions.
  */
-#ifdef __GNUC__
-#define        ntohl   __byte_swap_long
-#define        ntohs   __byte_swap_word
-#define        htonl   __byte_swap_long
-#define        htons   __byte_swap_word
+
+#ifndef __byte_swap16
+#define        __byte_swap16(x) __byte_swap16_const(x)
+#endif
+
+#ifndef __byte_swap32
+#define        __byte_swap32(x) __byte_swap32_const(x)
+#endif
+
+#ifndef __byte_swap64
+#define        __byte_swap64(x) __byte_swap64_const(x)
 #endif
 
-#define        NTOHL(x)        ((x) = ntohl((u_long)(x)))
-#define        NTOHS(x)        ((x) = ntohs((u_short)(x)))
-#define        HTONL(x)        ((x) = htonl((u_long)(x)))
-#define        HTONS(x)        ((x) = htons((u_short)(x)))
+__BEGIN_DECLS
+
+static __inline __uint16_t
+__bswap16(__uint16_t _x)
+{
+       return (__byte_swap16(_x));
+}
+
+static __inline __uint32_t
+__bswap32(__uint32_t _x)
+{
+       return (__byte_swap32(_x));
+}
 
-#endif /* ! _POSIX_SOURCE */
+static __inline __uint64_t
+__bswap64(__uint64_t _x)
+{
+       return (__byte_swap64(_x));
+}
+
+__END_DECLS
 
 #endif /* !_MACHINE_ENDIAN_H_ */
index 41fdce1..8254710 100644 (file)
@@ -1,4 +1,6 @@
 /*
+ * Copyright (c) 2004 The DragonFly Project.  All rights reserved.
+ *
  * Copyright (c) 1987, 1991 Regents of the University of California.
  * All rights reserved.
  *
  *
  *     from: @(#)endian.h      7.8 (Berkeley) 4/3/91
  * $FreeBSD: src/sys/i386/include/endian.h,v 1.18 1999/12/29 04:33:01 peter Exp $
- * $DragonFly: src/sys/i386/include/Attic/endian.h,v 1.3 2003/08/26 21:42:18 rob Exp $
+ * $DragonFly: src/sys/i386/include/Attic/endian.h,v 1.4 2004/08/23 16:03:44 joerg Exp $
  */
 
 #ifndef _MACHINE_ENDIAN_H_
 #define        _MACHINE_ENDIAN_H_
 
+#include <sys/cdefs.h>
+#include <machine/stdint.h>
+
 /*
  * Define the order of 32-bit words in 64-bit words.
  */
 #define        _QUAD_HIGHWORD 1
 #define        _QUAD_LOWWORD 0
 
-#ifndef _POSIX_SOURCE
-
 /*
  * Definitions for byte order, according to byte significance from low
  * address to high.
  */
-#define        LITTLE_ENDIAN   1234    /* LSB first: i386, vax */
-#define        BIG_ENDIAN      4321    /* MSB first: 68000, ibm, net */
-#define        PDP_ENDIAN      3412    /* LSB first in word, MSW first in long */
+#define        _LITTLE_ENDIAN  1234    /* LSB first: i386, vax */
+#define        _BIG_ENDIAN     4321    /* MSB first: 68000, ibm, net */
+#define        _PDP_ENDIAN     3412    /* LSB first in word, MSW first in long */
 
-#define        BYTE_ORDER      LITTLE_ENDIAN
+#define        _BYTE_ORDER     _LITTLE_ENDIAN
 
-#ifndef _KERNEL
-#include <sys/cdefs.h>
+/*
+ * Deprecated variants that don't have enough underscores to be useful in more
+ * strict namespaces.
+ */
+#if __BSD_VISIBLE
+#define        LITTLE_ENDIAN   _LITTLE_ENDIAN
+#define        BIG_ENDIAN      _BIG_ENDIAN
+#define        PDP_ENDIAN      _PDP_ENDIAN
+#define        BYTE_ORDER      _BYTE_ORDER
 #endif
 
-__BEGIN_DECLS
-unsigned long  htonl (unsigned long);
-unsigned short htons (unsigned short);
-unsigned long  ntohl (unsigned long);
-unsigned short ntohs (unsigned short);
-__END_DECLS
-
-#define __word_swap_long(x) \
-__extension__ ({ register u_long __X = (x); \
-   __asm ("rorl $16, %1" \
-       : "=r" (__X) \
-       : "0" (__X)); \
-   __X; })
-
-#if defined(_KERNEL) && (defined(I486_CPU) || defined(I586_CPU) || defined(I686_CPU)) && !defined(I386_CPU)
-
-#define __byte_swap_long(x) \
-__extension__ ({ register u_long __X = (x); \
-   __asm ("bswap %0" \
-       : "=r" (__X) \
-       : "0" (__X)); \
-   __X; })
-#else
-
-#define __byte_swap_long(x) \
-__extension__ ({ register u_long __X = (x); \
-   __asm ("xchgb %h1, %b1\n\trorl $16, %1\n\txchgb %h1, %b1" \
-       : "=q" (__X) \
-       : "0" (__X)); \
-   __X; })
+#define        __htonl(x)      __bswap32(x)
+#define        __htons(x)      __bswap16(x)
+#define        __ntohl(x)      __bswap32(x)
+#define        __ntohs(x)      __bswap16(x)
+
+#define        __byte_swap16_const(x) \
+       ((((x) & 0xff00) >> 8) | \
+        (((x) & 0x00ff) << 8))
+
+#define        __byte_swap32_const(x) \
+       ((((x) & 0xff000000) >> 24) | \
+        (((x) & 0x00ff0000) >>  8) | \
+        (((x) & 0x0000ff00) <<  8) | \
+        (((x) & 0x000000ff) << 24))
+
+#define        __byte_swap64_const(x) \
+       (((x) >> 56) | (((x) >> 40) & 0xff00) | (((x) >> 24) & 0xff0000) | \
+        (((x) >> 8) & 0xff000000) | (((x) << 8) & ((__uint64_t)0xff << 32)) | \
+        (((x) << 24) & ((__uint64_t)0xff << 40)) | \
+        (((x) << 40) & ((__uint64_t)0xff << 48)) | (((x) << 56)))
+
+#if defined(__INTEL_COMPILER)
+# if !defined(__cplusplus) || (defined(__cplusplus) && __INTEL_COMPILER >= 800)
+#  define __INTEL_COMPILER_with_DragonFly_endian 1
+# endif
 #endif
 
-#define __byte_swap_word(x) \
-__extension__ ({ register u_short __X = (x); \
-   __asm ("xchgb %h1, %b1" \
-       : "=q" (__X) \
-       : "0" (__X)); \
-   __X; })
+#if defined(__GNUC__) || defined(__INTEL_COMPILER_with_DragonFly_endian)
+
+#if (defined(_KERNEL)  && !defined(I386_CPU) && \
+       (defined(I486_CPU) || defined(I586_CPU) || defined(I686_CPU))) || \
+    defined(__i486__) || defined(__i586__) || defined(__i686__)
+
+#define __byte_swap32_var(x) \
+       __extension__ ({ register __uint32_t __X = (x); \
+          __asm ("bswap %0" : "+r" (__X)); \
+
+#else /* !I386_CPU */
+
+#define __byte_swap32_var(x) \
+       __extension__ ({ register __uint32_t __X = (x); \
+          __asm ("xchgb %h0, %b0\n\trorl $16, %0\n\txchgb %h0, %b0" \
+              : "+q" (__X)); \
+          __X; })
+#endif /* !I386_CPU */
+
+#define __byte_swap16_var(x) \
+       __extension__ ({ register __uint16_t __X = (x); \
+          __asm ("xchgb %h0, %b0" : "+q" (__X)); \
+          __X; })
+
+#ifdef __OPTIMIZE__
+
+#define        __byte_swap16(x) (__builtin_constant_p(x) ? \
+       __byte_swap16_const(x) : __byte_swap16_var(x))
+
+#define        __byte_swap32(x) (__builtin_constant_p(x) ? \
+       __byte_swap32_const(x) : __byte_swap32_var(x))
+
+#else  /* __OPTIMIZE__ */
+
+#define __byte_swap16(x) __byte_swap16_var(x)
+#define __byte_swap32(x) __byte_swap32_var(x)
+
+#endif /* __OPTIMIZE__ */
+
+#endif /* __GNUC__ || __INTEL_COMPILER_with_DragonFly_endian */
 
 /*
- * Macros for network/external number representation conversion.
+ * If the compiler-specific part didn't provide this, fallback
+ * to the generic versions.
  */
-#ifdef __GNUC__
-#define        ntohl   __byte_swap_long
-#define        ntohs   __byte_swap_word
-#define        htonl   __byte_swap_long
-#define        htons   __byte_swap_word
+
+#ifndef __byte_swap16
+#define        __byte_swap16(x) __byte_swap16_const(x)
+#endif
+
+#ifndef __byte_swap32
+#define        __byte_swap32(x) __byte_swap32_const(x)
+#endif
+
+#ifndef __byte_swap64
+#define        __byte_swap64(x) __byte_swap64_const(x)
 #endif
 
-#define        NTOHL(x)        ((x) = ntohl((u_long)(x)))
-#define        NTOHS(x)        ((x) = ntohs((u_short)(x)))
-#define        HTONL(x)        ((x) = htonl((u_long)(x)))
-#define        HTONS(x)        ((x) = htons((u_short)(x)))
+__BEGIN_DECLS
+
+static __inline __uint16_t
+__bswap16(__uint16_t _x)
+{
+       return (__byte_swap16(_x));
+}
+
+static __inline __uint32_t
+__bswap32(__uint32_t _x)
+{
+       return (__byte_swap32(_x));
+}
 
-#endif /* ! _POSIX_SOURCE */
+static __inline __uint64_t
+__bswap64(__uint64_t _x)
+{
+       return (__byte_swap64(_x));
+}
+
+__END_DECLS
 
 #endif /* !_MACHINE_ENDIAN_H_ */
index e22dbd3..dbf033a 100644 (file)
@@ -1,4 +1,6 @@
 /*-
+ * Copyright (c) 2004 The DragonFly Project.  All rights reserved.
+ *
  * Copyright (c) 2002 Thomas Moestl <tmm@FreeBSD.org>
  * All rights reserved.
  *
  * SUCH DAMAGE.
  *
  * $FreeBSD: src/sys/sys/endian.h,v 1.2.2.1 2002/09/09 05:45:04 imp Exp $
- * $DragonFly: src/sys/sys/endian.h,v 1.2 2003/06/17 04:28:58 dillon Exp $
+ * $DragonFly: src/sys/sys/endian.h,v 1.3 2004/08/23 16:03:44 joerg Exp $
  */
 
 #ifndef _SYS_ENDIAN_H_
 #define _SYS_ENDIAN_H_
 
 #include <sys/cdefs.h>
+#include <machine/stdint.h>
 #include <machine/endian.h>
 
-#if BYTE_ORDER == LITTLE_ENDIAN
-#define        htobe16(x)      htons((x))
-#define        htobe32(x)      htonl((x))
+/*
+ * General byte order swapping functions.
+ */
+#define        bswap16(x)      __bswap16(x)
+#define        bswap32(x)      __bswap32(x)
+#define        bswap64(x)      __bswap64(x)
+
+/*
+ * Host to big endian, host to little endian, big endian to host, and little
+ * endian to host byte order functions as detailed in byteorder(9).
+ */
+#if _BYTE_ORDER == _LITTLE_ENDIAN
+#define        htobe16(x)      bswap16((x))
+#define        htobe32(x)      bswap32((x))
+#define        htobe64(x)      bswap64((x))
 #define        htole16(x)      ((uint16_t)(x))
 #define        htole32(x)      ((uint32_t)(x))
 #define        htole64(x)      ((uint64_t)(x))
 
-#define        be16toh(x)      ntohs((x))
-#define        be32toh(x)      ntohl((x))
+#define        be16toh(x)      bswap16((x))
+#define        be32toh(x)      bswap32((x))
+#define        be64toh(x)      bswap64((x))
 #define        le16toh(x)      ((uint16_t)(x))
 #define        le32toh(x)      ((uint32_t)(x))
 #define        le64toh(x)      ((uint64_t)(x))
-#else
-#error "Byte ordering unsupported."
-#endif /* BYTE_ORDER == LITTLE_ENDIAN */
+#else /* _BYTE_ORDER != _LITTLE_ENDIAN */
+#define        htobe16(x)      ((uint16_t)(x))
+#define        htobe32(x)      ((uint32_t)(x))
+#define        htobe64(x)      ((uint64_t)(x))
+#define        htole16(x)      bswap16((x))
+#define        htole32(x)      bswap32((x))
+#define        htole64(x)      bswap64((x))
+
+#define        be16toh(x)      ((uint16_t)(x))
+#define        be32toh(x)      ((uint32_t)(x))
+#define        be64toh(x)      ((uint64_t)(x))
+#define        le16toh(x)      bswap16((x))
+#define        le32toh(x)      bswap32((x))
+#define        le64toh(x)      bswap64((x))
+#endif /* _BYTE_ORDER == _LITTLE_ENDIAN */
+
+/* Alignment-agnostic encode/decode bytestream to/from little/big endian. */
+
+static __inline uint16_t
+be16dec(const void *pp)
+{
+       const uint8_t *p = (const uint8_t *)pp;
+
+       return ((p[0] << 8) | p[1]);
+}
+
+static __inline uint32_t
+be32dec(const void *pp)
+{
+       const uint8_t *p = (const uint8_t *)pp;
+
+       return ((p[0] << 24) | (p[1] << 16) | (p[2] << 8) | p[3]);
+}
+
+static __inline uint64_t
+be64dec(const void *pp)
+{
+       const uint8_t *p = (const uint8_t *)pp;
+
+       return (((uint64_t)be32dec(p) << 32) | be32dec(p + 4));
+}
+
+static __inline uint16_t
+le16dec(const void *pp)
+{
+       const uint8_t *p = (const uint8_t *)pp;
+
+       return ((p[1] << 8) | p[0]);
+}
+
+static __inline uint32_t
+le32dec(const void *pp)
+{
+       const uint8_t *p = (const uint8_t *)pp;
+
+       return ((p[3] << 24) | (p[2] << 16) | (p[1] << 8) | p[0]);
+}
+
+static __inline uint64_t
+le64dec(const void *pp)
+{
+       const uint8_t *p = (const uint8_t *)pp;
+
+       return (((uint64_t)le32dec(p + 4) << 32) | le32dec(p));
+}
+
+static __inline void
+be16enc(void *pp, uint16_t u)
+{
+       uint8_t *p = (uint8_t *)pp;
+
+       p[0] = (u >> 8) & 0xff;
+       p[1] = u & 0xff;
+}
+
+static __inline void
+be32enc(void *pp, uint32_t u)
+{
+       uint8_t *p = (uint8_t *)pp;
+
+       p[0] = (u >> 24) & 0xff;
+       p[1] = (u >> 16) & 0xff;
+       p[2] = (u >> 8) & 0xff;
+       p[3] = u & 0xff;
+}
+
+static __inline void
+be64enc(void *pp, uint64_t u)
+{
+       uint8_t *p = (uint8_t *)pp;
+
+       be32enc(p, u >> 32);
+       be32enc(p + 4, u & 0xffffffff);
+}
+
+static __inline void
+le16enc(void *pp, uint16_t u)
+{
+       uint8_t *p = (uint8_t *)pp;
+
+       p[0] = u & 0xff;
+       p[1] = (u >> 8) & 0xff;
+}
+
+static __inline void
+le32enc(void *pp, uint32_t u)
+{
+       uint8_t *p = (uint8_t *)pp;
+
+       p[0] = u & 0xff;
+       p[1] = (u >> 8) & 0xff;
+       p[2] = (u >> 16) & 0xff;
+       p[3] = (u >> 24) & 0xff;
+}
+
+static __inline void
+le64enc(void *pp, uint64_t u)
+{
+       uint8_t *p = (uint8_t *)pp;
+
+       le32enc(p, u & 0xffffffff);
+       le32enc(p + 4, u >> 32);
+}
 
 #endif /* _SYS_ENDIAN_H_ */
index a79c63b..151e820 100644 (file)
@@ -37,7 +37,7 @@
  *
  *     @(#)param.h     8.3 (Berkeley) 4/4/95
  * $FreeBSD: src/sys/sys/param.h,v 1.61.2.38 2003/05/22 17:12:01 fjoe Exp $
- * $DragonFly: src/sys/sys/param.h,v 1.16 2004/08/07 21:22:25 dillon Exp $
+ * $DragonFly: src/sys/sys/param.h,v 1.17 2004/08/23 16:03:44 joerg Exp $
  */
 
 #ifndef _SYS_PARAM_H_
 void   panic (const char *, ...) __dead2 __printflike(1, 2);
 #endif
 
+#ifndef htonl
+#define        htonl(x)        __htonl(x)
+#endif
+#ifndef htons
+#define        htons(x)        __htons(x)
+#endif
+#ifndef ntohl
+#define        ntohl(x)        __ntohl(x)
+#endif
+#ifndef ntohs
+#define        ntohs(x)        __ntohs(x)
+#endif
+
 #endif /* _SYS_PARAM_H_ */
index 473878a..1d22adf 100644 (file)
@@ -25,7 +25,7 @@
  * SUCH DAMAGE.
  *
  *     $FreeBSD: src/usr.sbin/acpi/acpidump/acpi.c,v 1.25 2004/06/30 03:23:51 njl Exp $
- *     $DragonFly: src/usr.sbin/acpi/acpidump/acpi.c,v 1.1 2004/07/05 00:22:43 dillon Exp $
+ *     $DragonFly: src/usr.sbin/acpi/acpidump/acpi.c,v 1.2 2004/08/23 16:03:44 joerg Exp $
  */
 
 #include <sys/param.h>
@@ -69,25 +69,6 @@ static void  acpi_handle_rsdt(struct ACPIsdt *rsdp);
 /* Size of an address. 32-bit for ACPI 1.0, 64-bit for ACPI 2.0 and up. */
 static int addr_size;
 
-/*
- * XXX: borrow endian-conversion functions from FreeBSD-CURRENT's endian.h
- */
-static __inline uint32_t
-le32dec(const void *pp)
-{
-       unsigned char const *p = (unsigned char const *)pp;
-
-       return ((p[3] << 24) | (p[2] << 16) | (p[1] << 8) | p[0]);
-}
-
-static __inline uint64_t
-le64dec(const void *pp)
-{
-       unsigned char const *p = (unsigned char const *)pp;
-
-       return (((uint64_t)le32dec(p + 4) << 32) | le32dec(p));
-}
-
 static void
 acpi_print_string(char *s, size_t length)
 {