Endian conversion functions
[akaros.git] / kern / include / endian.h
1 /* Copyright (c) 2010 The Regents of the University of California
2  * Barret Rhoden <brho@cs.berkeley.edu>
3  * See LICENSE for details.
4  *
5  * Macros to convert to and from endian-data */
6
7 #include <ros/common.h>
8 #include <arch/endian.h>
9
10 #ifndef ROS_KERN_ENDIAN_H
11 #define ROS_KERN_ENDIAN_H
12
13 #ifdef LITTLE_ENDIAN
14 #define cpu_to_le16(x) ((uint16_t)(x))
15 #define cpu_to_le32(x) ((uint32_t)(x))
16 #define cpu_to_le64(x) ((uint64_t)(x))
17 #define le16_to_cpu(x) ((uint16_t)(x))
18 #define le32_to_cpu(x) ((uint32_t)(x))
19 #define le64_to_cpu(x) ((uint64_t)(x))
20
21 #define cpu_to_be16(x) byte_swap16((x))
22 #define cpu_to_be32(x) byte_swap32((x))
23 #define cpu_to_be64(x) byte_swap64((x))
24 #define be16_to_cpu(x) byte_swap16((x))
25 #define be32_to_cpu(x) byte_swap32((x))
26 #define be64_to_cpu(x) byte_swap64((x))
27
28 #else /* big endian */
29
30 # ifndef BIG_ENDIAN
31 # error "Need an endianness defined"
32 # endif
33
34 #define cpu_to_le16(x) byte_swap16((x))
35 #define cpu_to_le32(x) byte_swap32((x))
36 #define cpu_to_le64(x) byte_swap64((x))
37 #define le16_to_cpu(x) byte_swap16((x))
38 #define le32_to_cpu(x) byte_swap32((x))
39 #define le64_to_cpu(x) byte_swap64((x))
40
41 #define cpu_to_be16(x) ((uint16_t)(x))
42 #define cpu_to_be32(x) ((uint32_t)(x))
43 #define cpu_to_be64(x) ((uint64_t)(x))
44 #define be16_to_cpu(x) ((uint16_t)(x))
45 #define be32_to_cpu(x) ((uint32_t)(x))
46 #define be64_to_cpu(x) ((uint64_t)(x))
47
48 #endif /* endian */
49
50 #endif /* ROS_KERN_ENDIAN_H */