Source-Changes-HG archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

[src/trunk]: src/sys/arch/hpc/stand/include/machine Our <sys/endian.h> is no ...



details:   https://anonhg.NetBSD.org/src/rev/c40ea60af598
branches:  trunk
changeset: 580852:c40ea60af598
user:      uwe <uwe%NetBSD.org@localhost>
date:      Wed May 11 16:44:45 2005 +0000

description:
Our <sys/endian.h> is no longer compilable with eVC3 and probably
other old WinCE compilers because they don't grok ULL constant suffix.
Instead of polluting sys/endian.h with WinCE compatibility ugliness,
pull a copy here, so that we can hack it privately.

diffstat:

 sys/arch/hpc/stand/include/machine/endian.h |  318 +++++++++++++++++++++++++++-
 1 files changed, 317 insertions(+), 1 deletions(-)

diffs (truncated from 326 to 300 lines):

diff -r c18c8f081075 -r c40ea60af598 sys/arch/hpc/stand/include/machine/endian.h
--- a/sys/arch/hpc/stand/include/machine/endian.h       Wed May 11 15:00:49 2005 +0000
+++ b/sys/arch/hpc/stand/include/machine/endian.h       Wed May 11 16:44:45 2005 +0000
@@ -1,5 +1,321 @@
-/*     $NetBSD: endian.h,v 1.1 2001/02/09 18:35:26 uch Exp $   */
+/*     $NetBSD: endian.h,v 1.2 2005/05/11 16:44:45 uwe Exp $   */
 
 /* Windows CE architecture */
 
+/*
+ * This file should be just:
+
 #include <sys/endian.h>
+
+ * but our <sys/endian.h> is no longer compilable with eVC3 and
+ * probably other old WinCE compilers because they don't grok ULL
+ * constant suffix.
+ * 
+ * Instead of polluting sys/endian.h with WinCE compatibility
+ * ugliness, pull a copy here, so that we can hack it privately.
+ */
+
+/*     From: NetBSD: endian.h,v 1.15 2005/02/03 19:16:10 perry Exp     */
+
+/*
+ * Copyright (c) 1987, 1991, 1993
+ *     The Regents of the University of California.  All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. Neither the name of the University nor the names of its contributors
+ *    may be used to endorse or promote products derived from this software
+ *    without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ *
+ *     @(#)endian.h    8.1 (Berkeley) 6/11/93
+ */
+
+#ifndef _SYS_ENDIAN_H_
+#define _SYS_ENDIAN_H_
+
+#include <sys/featuretest.h>
+
+/*
+ * 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 */
+
+
+#if defined(_XOPEN_SOURCE) || defined(_NETBSD_SOURCE)
+#ifndef _LOCORE
+
+/* C-family endian-ness definitions */
+
+#include <sys/ansi.h>
+#include <sys/cdefs.h>
+#include <sys/types.h>
+
+#ifndef in_addr_t
+typedef __in_addr_t    in_addr_t;
+#define        in_addr_t       __in_addr_t
+#endif
+
+#ifndef in_port_t
+typedef __in_port_t    in_port_t;
+#define        in_port_t       __in_port_t
+#endif
+
+__BEGIN_DECLS
+uint32_t htonl(uint32_t) __attribute__((__const__));
+uint16_t htons(uint16_t) __attribute__((__const__));
+uint32_t ntohl(uint32_t) __attribute__((__const__));
+uint16_t ntohs(uint16_t) __attribute__((__const__));
+__END_DECLS
+
+#endif /* !_LOCORE */
+#endif /* _XOPEN_SOURCE || _NETBSD_SOURCE */
+
+
+#include <machine/endian_machdep.h>
+
+/*
+ * Define the order of 32-bit words in 64-bit words.
+ */
+#if _BYTE_ORDER == _LITTLE_ENDIAN
+#define _QUAD_HIGHWORD 1
+#define _QUAD_LOWWORD 0
+#endif
+
+#if _BYTE_ORDER == _BIG_ENDIAN
+#define _QUAD_HIGHWORD 0
+#define _QUAD_LOWWORD 1
+#endif
+
+
+#if defined(_XOPEN_SOURCE) || defined(_NETBSD_SOURCE)
+/*
+ *  Traditional names for byteorder.  These are defined as the numeric
+ *  sequences so that third party code can "#define XXX_ENDIAN" and not
+ *  cause errors.
+ */
+#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     _BYTE_ORDER
+
+#ifndef _LOCORE
+
+/*
+ * Macros for network/external number representation conversion.
+ */
+#if BYTE_ORDER == BIG_ENDIAN && !defined(__lint__)
+#define        ntohl(x)        (x)
+#define        ntohs(x)        (x)
+#define        htonl(x)        (x)
+#define        htons(x)        (x)
+
+#define        NTOHL(x)        (void) (x)
+#define        NTOHS(x)        (void) (x)
+#define        HTONL(x)        (void) (x)
+#define        HTONS(x)        (void) (x)
+
+#else  /* LITTLE_ENDIAN || !defined(__lint__) */
+
+#define        NTOHL(x)        (x) = ntohl((uint32_t)(x))
+#define        NTOHS(x)        (x) = ntohs((uint16_t)(x))
+#define        HTONL(x)        (x) = htonl((uint32_t)(x))
+#define        HTONS(x)        (x) = htons((uint16_t)(x))
+#endif /* LITTLE_ENDIAN || !defined(__lint__) */
+
+/*
+ * Macros to convert to a specific endianness.
+ */
+
+#include <machine/bswap.h>
+
+#if BYTE_ORDER == BIG_ENDIAN
+
+#define htobe16(x)     (x)
+#define htobe32(x)     (x)
+#define htobe64(x)     (x)
+#define htole16(x)     bswap16((u_int16_t)(x))
+#define htole32(x)     bswap32((u_int32_t)(x))
+#define htole64(x)     bswap64((u_int64_t)(x))
+
+#define HTOBE16(x)     (void) (x)
+#define HTOBE32(x)     (void) (x)
+#define HTOBE64(x)     (void) (x)
+#define HTOLE16(x)     (x) = bswap16((u_int16_t)(x))
+#define HTOLE32(x)     (x) = bswap32((u_int32_t)(x))
+#define HTOLE64(x)     (x) = bswap64((u_int64_t)(x))
+
+#else  /* LITTLE_ENDIAN */
+
+#define htobe16(x)     bswap16((u_int16_t)(x))
+#define htobe32(x)     bswap32((u_int32_t)(x))
+#define htobe64(x)     bswap64((u_int64_t)(x))
+#define htole16(x)     (x)
+#define htole32(x)     (x)
+#define htole64(x)     (x)
+
+#define HTOBE16(x)     (x) = bswap16((u_int16_t)(x))
+#define HTOBE32(x)     (x) = bswap32((u_int32_t)(x))
+#define HTOBE64(x)     (x) = bswap64((u_int64_t)(x))
+#define HTOLE16(x)     (void) (x)
+#define HTOLE32(x)     (void) (x)
+#define HTOLE64(x)     (void) (x)
+
+#endif /* LITTLE_ENDIAN */
+
+#define be16toh(x)     htobe16(x)
+#define be32toh(x)     htobe32(x)
+#define be64toh(x)     htobe64(x)
+#define le16toh(x)     htole16(x)
+#define le32toh(x)     htole32(x)
+#define le64toh(x)     htole64(x)
+
+#define BE16TOH(x)     HTOBE16(x)
+#define BE32TOH(x)     HTOBE32(x)
+#define BE64TOH(x)     HTOBE64(x)
+#define LE16TOH(x)     HTOLE16(x)
+#define LE32TOH(x)     HTOLE32(x)
+#define LE64TOH(x)     HTOLE64(x)
+
+/*
+ * Routines to encode/decode big- and little-endian multi-octet values
+ * to/from an octet stream.
+ */
+
+static __inline void __unused
+be16enc(void *buf, uint16_t u)
+{
+       uint8_t *p = (uint8_t *)buf;
+
+       p[0] = ((unsigned)u >> 8) & 0xff;
+       p[1] = u & 0xff;
+}
+
+static __inline void __unused
+le16enc(void *buf, uint16_t u)
+{
+       uint8_t *p = (uint8_t *)buf;
+
+       p[0] = u & 0xff;
+       p[1] = ((unsigned)u >> 8) & 0xff;
+}
+
+static __inline uint16_t __unused
+be16dec(const void *buf)
+{
+       const uint8_t *p = (const uint8_t *)buf;
+
+       return ((p[0] << 8) | p[1]);
+}
+
+static __inline uint16_t __unused
+le16dec(const void *buf)
+{
+       const uint8_t *p = (const uint8_t *)buf;
+
+       return ((p[1] << 8) | p[0]);
+}
+
+static __inline void __unused
+be32enc(void *buf, uint32_t u)
+{
+       uint8_t *p = (uint8_t *)buf;
+
+       p[0] = (u >> 24) & 0xff;
+       p[1] = (u >> 16) & 0xff;
+       p[2] = (u >> 8) & 0xff;
+       p[3] = u & 0xff;
+}
+
+static __inline void __unused
+le32enc(void *buf, uint32_t u)
+{
+       uint8_t *p = (uint8_t *)buf;
+
+       p[0] = u & 0xff;
+       p[1] = (u >> 8) & 0xff;
+       p[2] = (u >> 16) & 0xff;
+       p[3] = (u >> 24) & 0xff;
+}
+
+static __inline uint32_t __unused
+be32dec(const void *buf)
+{
+       const uint8_t *p = (const uint8_t *)buf;
+
+       return ((p[0] << 24) | (p[1] << 16) | (p[2] << 8) | p[3]);
+}
+
+static __inline uint32_t __unused
+le32dec(const void *buf)
+{
+       const uint8_t *p = (const uint8_t *)buf;
+
+       return ((p[3] << 24) | (p[2] << 16) | (p[1] << 8) | p[0]);
+}
+
+
+/*
+ * XXX: uwe: ULL suffix makes eVC unhappy.  Since nothing in hpcboot
+ * needs 64-bit enc/dec routines - just ifdef them out for now.
+ */
+#ifndef _WIN32
+
+static __inline void __unused
+be64enc(void *buf, uint64_t u)
+{
+       uint8_t *p = (uint8_t *)buf;
+
+       be32enc(p, (uint32_t)(u >> 32));
+       be32enc(p + 4, (uint32_t)(u & 0xffffffffULL));
+}
+
+static __inline void __unused
+le64enc(void *buf, uint64_t u)
+{



Home | Main Index | Thread Index | Old Index