8 #ifndef _RTEMS_ENDIAN_H 9 #define _RTEMS_ENDIAN_H 11 #include <rtems/score/cpu.h> 16 #define BIG_ENDIAN 4321 17 #define LITTLE_ENDIAN 1234 21 # define BYTE_ORDER BIG_ENDIAN 22 #elif CPU_LITTLE_ENDIAN 23 # define BYTE_ORDER LITTLE_ENDIAN 25 # error "Can't decide which end is which!" 29 #if ( CPU_BIG_ENDIAN == TRUE ) 35 static inline uint32_t ntohl( uint32_t _x )
40 static inline uint16_t ntohs( uint16_t _x )
45 static inline uint32_t htonl( uint32_t _x )
50 static inline uint16_t htons( uint16_t _x )
60 #elif ( CPU_LITTLE_ENDIAN == TRUE ) 66 static inline uint32_t ntohl( uint32_t _x )
68 return CPU_swap_u32(_x);
71 static inline uint16_t ntohs( uint16_t _x )
73 return CPU_swap_u16(_x);
76 static inline uint32_t htonl( uint32_t _x )
78 return CPU_swap_u32(_x);
81 static inline uint16_t htons( uint16_t _x )
83 return CPU_swap_u16(_x);
86 #define NTOHS(x) (x) = ntohs(x) 87 #define HTONS(x) (x) = htons(x) 88 #define NTOHL(x) (x) = ntohl(x) 89 #define HTONL(x) (x) = htonl(x) 92 #error "Unknown endian-ness for this cpu" 95 static inline uint16_t rtems_uint16_from_little_endian(
const uint8_t *data)
100 for (i = 1; i >= 0; --i) {
101 value = (uint16_t) ((value << 8) + data [i]);
107 static inline uint32_t rtems_uint32_from_little_endian(
const uint8_t *data)
112 for (i = 3; i >= 0; --i) {
113 value = (value << 8) + data [i];
119 static inline uint64_t rtems_uint64_from_little_endian(
const uint8_t *data)
124 for (i = 7; i >= 0; --i) {
125 value = (value << 8) + (uint64_t) data [i];
131 static inline uint16_t rtems_uint16_from_big_endian(
const uint8_t *data)
136 for (i = 0; i < 2; ++i) {
137 value = (uint16_t) ((value << 8) + data [i]);
143 static inline uint32_t rtems_uint32_from_big_endian(
const uint8_t *data)
148 for (i = 0; i < 4; ++i) {
149 value = (value << 8) + (uint32_t) data [i];
155 static inline uint64_t rtems_uint64_from_big_endian(
const uint8_t *data)
160 for (i = 0; i < 8; ++i) {
161 value = (value << 8) + (uint64_t) data [i];
167 static inline void rtems_uint16_to_little_endian( uint16_t value, uint8_t *data)
171 for (i = 0; i < 2; ++i) {
172 data [i] = (uint8_t) value;
177 static inline void rtems_uint32_to_little_endian( uint32_t value, uint8_t *data)
181 for (i = 0; i < 4; ++i) {
182 data [i] = (uint8_t) value;
187 static inline void rtems_uint64_to_little_endian( uint64_t value, uint8_t *data)
191 for (i = 0; i < 8; ++i) {
192 data [i] = (uint8_t) value;
197 static inline void rtems_uint16_to_big_endian( uint16_t value, uint8_t *data)
201 for (i = 1; i >= 0; --i) {
202 data [i] = (uint8_t) value;
207 static inline void rtems_uint32_to_big_endian( uint32_t value, uint8_t *data)
211 for (i = 3; i >= 0; --i) {
212 data [i] = (uint8_t) value;
217 static inline void rtems_uint64_to_big_endian( uint64_t value, uint8_t *data)
221 for (i = 7; i >= 0; --i) {
222 data [i] = (uint8_t) value;