TRACEME() helper for oprofile
[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 #define PP_HTONS(x) ((((x) & 0xff) << 8) | (((x) & 0xff00) >> 8))
29 #define PP_NTOHS(x) PP_HTONS(x)
30 #define PP_HTONL(x) ((((x) & 0xff) << 24) | \
31                      (((x) & 0xff00) << 8) | \
32                      (((x) & 0xff0000UL) >> 8) | \
33                      (((x) & 0xff000000UL) >> 24))
34 #define PP_NTOHL(x) PP_HTONL(x)
35
36 #else /* big endian */
37
38 # ifndef BIG_ENDIAN
39 # error "Need an endianness defined"
40 # endif
41
42 #define cpu_to_le16(x) byte_swap16((x))
43 #define cpu_to_le32(x) byte_swap32((x))
44 #define cpu_to_le64(x) byte_swap64((x))
45 #define le16_to_cpu(x) byte_swap16((x))
46 #define le32_to_cpu(x) byte_swap32((x))
47 #define le64_to_cpu(x) byte_swap64((x))
48
49 #define cpu_to_be16(x) ((uint16_t)(x))
50 #define cpu_to_be32(x) ((uint32_t)(x))
51 #define cpu_to_be64(x) ((uint64_t)(x))
52 #define be16_to_cpu(x) ((uint16_t)(x))
53 #define be32_to_cpu(x) ((uint32_t)(x))
54 #define be64_to_cpu(x) ((uint64_t)(x))
55
56 #define PP_HTONS(x) (x)
57 #define PP_NTOHS(x) (x)
58 #define PP_HTONL(x) (x)
59 #define PP_NTOHL(x) (x)
60
61 #endif /* endian */
62
63 #endif /* ROS_KERN_ENDIAN_H */