summaryrefslogtreecommitdiffstats
path: root/cpukit/include
diff options
context:
space:
mode:
authorRalf Corsepius <ralf.corsepius@rtems.org>2007-05-09 16:27:09 +0000
committerRalf Corsepius <ralf.corsepius@rtems.org>2007-05-09 16:27:09 +0000
commit7a4e32f453a5368f648b825c0e1c0cf6c1c1012c (patch)
tree2926d7b0f40b954436f6ef73f6d5b829cb96a013 /cpukit/include
parent2007-05-09 Ralf Corsépius <ralf.corsepius@rtems.org> (diff)
downloadrtems-7a4e32f453a5368f648b825c0e1c0cf6c1c1012c.tar.bz2
2007-05-09 Ralf Corsépius <ralf.corsepius@rtems.org>
* include/rtems/endian.h: New (Copied from libnetworking/machine/endian.h).
Diffstat (limited to 'cpukit/include')
-rw-r--r--cpukit/include/rtems/endian.h92
1 files changed, 92 insertions, 0 deletions
diff --git a/cpukit/include/rtems/endian.h b/cpukit/include/rtems/endian.h
new file mode 100644
index 0000000000..678b8bad3b
--- /dev/null
+++ b/cpukit/include/rtems/endian.h
@@ -0,0 +1,92 @@
+/*
+ * $Id$
+ */
+
+#ifndef _RTEMS_ENDIAN_H
+#define _RTEMS_ENDIAN_H
+
+#include <rtems.h>
+
+/*
+ * BSD-style endian declaration
+ */
+#define BIG_ENDIAN 4321
+#define LITTLE_ENDIAN 1234
+
+#ifndef BYTE_ORDER
+#if CPU_BIG_ENDIAN
+# define BYTE_ORDER BIG_ENDIAN
+#elif CPU_LITTLE_ENDIAN
+# define BYTE_ORDER LITTLE_ENDIAN
+#else
+# error "Can't decide which end is which!"
+#endif
+#endif
+
+#if ( CPU_BIG_ENDIAN == TRUE )
+
+/*
+ * Very simply on big endian CPUs
+ */
+
+static inline uint32_t ntohl( uint32_t _x )
+{
+ return _x;
+}
+
+static inline uint16_t ntohs( uint16_t _x )
+{
+ return _x;
+}
+
+static inline uint32_t htonl( uint32_t _x )
+{
+ return _x;
+}
+
+static inline uint16_t htons( uint16_t _x )
+{
+ return _x;
+}
+
+#define NTOHS(x)
+#define HTONS(x)
+#define NTOHL(x)
+#define HTONL(x)
+
+#elif ( CPU_LITTLE_ENDIAN == TRUE )
+
+/*
+ * A little more complicated on little endian CPUs
+ */
+
+static inline uint32_t ntohl( uint32_t _x )
+{
+ return CPU_swap_u32(_x);
+}
+
+static inline uint16_t ntohs( uint16_t _x )
+{
+ return CPU_swap_u16(_x);
+}
+
+static inline uint32_t htonl( uint32_t _x )
+{
+ return CPU_swap_u32(_x);
+}
+
+static inline uint16_t htons( uint16_t _x )
+{
+ return CPU_swap_u16(_x);
+}
+
+#define NTOHS(x) (x) = ntohs(x)
+#define HTONS(x) (x) = htons(x)
+#define NTOHL(x) (x) = ntohl(x)
+#define HTONL(x) (x) = htonl(x)
+
+#else
+#error "Unknown endian-ness for this cpu"
+#endif
+
+#endif /* _RTEMS_ENDIAN_H */