Fixes bug in cpu_relax_vc()
[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 #ifndef ROS_KERN_ENDIAN_H
8 #define ROS_KERN_ENDIAN_H
9
10 #include <ros/common.h>
11 #include <arch/endian.h>
12
13 /* Endian-generic versions.  Let the compiler figure it out, plan 9-style */
14 #define l16get(p)       (((p)[1]<<8)|(p)[0])
15 #define l32get(p)       (((uint32_t)l16get(p+2)<<16)|l16get(p))
16 #define l64get(p)       (((uint64_t)l32get(p+4)<<32)|l32get(p))
17
18 #ifdef LITTLE_ENDIAN
19 #define cpu_to_le16(x) ((uint16_t)(x))
20 #define cpu_to_le32(x) ((uint32_t)(x))
21 #define cpu_to_le64(x) ((uint64_t)(x))
22 #define le16_to_cpu(x) ((uint16_t)(x))
23 #define le32_to_cpu(x) ((uint32_t)(x))
24 #define le64_to_cpu(x) ((uint64_t)(x))
25
26 #define cpu_to_be16(x) byte_swap16((x))
27 #define cpu_to_be32(x) byte_swap32((x))
28 #define cpu_to_be64(x) byte_swap64((x))
29 #define be16_to_cpu(x) byte_swap16((x))
30 #define be32_to_cpu(x) byte_swap32((x))
31 #define be64_to_cpu(x) byte_swap64((x))
32
33 #define PP_HTONS(x) ((((x) & 0xff) << 8) | (((x) & 0xff00) >> 8))
34 #define PP_NTOHS(x) PP_HTONS(x)
35 #define PP_HTONL(x) ((((x) & 0xff) << 24) | \
36                      (((x) & 0xff00) << 8) | \
37                      (((x) & 0xff0000UL) >> 8) | \
38                      (((x) & 0xff000000UL) >> 24))
39 #define PP_NTOHL(x) PP_HTONL(x)
40
41 #else /* big endian */
42
43 # ifndef BIG_ENDIAN
44 # error "Need an endianness defined"
45 # endif
46
47 #define cpu_to_le16(x) byte_swap16((x))
48 #define cpu_to_le32(x) byte_swap32((x))
49 #define cpu_to_le64(x) byte_swap64((x))
50 #define le16_to_cpu(x) byte_swap16((x))
51 #define le32_to_cpu(x) byte_swap32((x))
52 #define le64_to_cpu(x) byte_swap64((x))
53
54 #define cpu_to_be16(x) ((uint16_t)(x))
55 #define cpu_to_be32(x) ((uint32_t)(x))
56 #define cpu_to_be64(x) ((uint64_t)(x))
57 #define be16_to_cpu(x) ((uint16_t)(x))
58 #define be32_to_cpu(x) ((uint32_t)(x))
59 #define be64_to_cpu(x) ((uint64_t)(x))
60
61 #define PP_HTONS(x) (x)
62 #define PP_NTOHS(x) (x)
63 #define PP_HTONL(x) (x)
64 #define PP_NTOHL(x) (x)
65
66 #endif /* endian */
67
68 #endif /* ROS_KERN_ENDIAN_H */