diff options
author | Ralf Corsepius <ralf.corsepius@rtems.org> | 2007-05-09 16:27:09 +0000 |
---|---|---|
committer | Ralf Corsepius <ralf.corsepius@rtems.org> | 2007-05-09 16:27:09 +0000 |
commit | 7a4e32f453a5368f648b825c0e1c0cf6c1c1012c (patch) | |
tree | 2926d7b0f40b954436f6ef73f6d5b829cb96a013 | |
parent | 2007-05-09 Ralf Corsépius <ralf.corsepius@rtems.org> (diff) | |
download | rtems-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 '')
-rw-r--r-- | cpukit/ChangeLog | 5 | ||||
-rw-r--r-- | cpukit/include/rtems/endian.h | 92 |
2 files changed, 97 insertions, 0 deletions
diff --git a/cpukit/ChangeLog b/cpukit/ChangeLog index a937c05a00..bc0c1d5e2d 100644 --- a/cpukit/ChangeLog +++ b/cpukit/ChangeLog @@ -1,5 +1,10 @@ 2007-05-09 Ralf Corsépius <ralf.corsepius@rtems.org> + * include/rtems/endian.h: New (Copied from + libnetworking/machine/endian.h). + +2007-05-09 Ralf Corsépius <ralf.corsepius@rtems.org> + * libcsupport/src/readdir.c, libnetworking/net/slcompress.c, pppd/md4.h, pppd/md5.h, pppd/pppd.h, score/cpu/m68k/rtems/score/m68k.h: Include <rtems/stdint.h> instead 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 */ |