Subversion Repositories HelenOS

Rev

Rev 2787 | Rev 3675 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 2787 Rev 2925
Line 33... Line 33...
33
 */
33
 */
34
 
34
 
35
#ifndef KERN_BYTEORDER_H_
35
#ifndef KERN_BYTEORDER_H_
36
#define KERN_BYTEORDER_H_
36
#define KERN_BYTEORDER_H_
37
 
37
 
-
 
38
#include <arch/byteorder.h>
-
 
39
 
-
 
40
#if !(defined(ARCH_IS_BIG_ENDIAN) ^ defined(ARCH_IS_LITTLE_ENDIAN))
-
 
41
#error The architecture must be either big-endian or little-endian.
-
 
42
#endif
-
 
43
 
-
 
44
#ifdef ARCH_IS_BIG_ENDIAN
-
 
45
 
-
 
46
#define uint16_t_le2host(n)     uint16_t_byteorder_swap(n)
-
 
47
#define uint32_t_le2host(n)     uint32_t_byteorder_swap(n)
-
 
48
#define uint64_t_le2host(n)     uint64_t_byteorder_swap(n)
-
 
49
 
-
 
50
#define uint16_t_be2host(n)     (n)
-
 
51
#define uint32_t_be2host(n)     (n)
-
 
52
#define uint64_t_be2host(n)     (n)
-
 
53
 
-
 
54
#else
-
 
55
 
-
 
56
#define uint16_t_le2host(n)     (n)
-
 
57
#define uint32_t_le2host(n)     (n)
-
 
58
#define uint64_t_le2host(n)     (n)
-
 
59
 
-
 
60
#define uint16_t_be2host(n)     uint16_t_byteorder_swap(n)
-
 
61
#define uint32_t_be2host(n)     uint32_t_byteorder_swap(n)
-
 
62
#define uint64_t_be2host(n)     uint64_t_byteorder_swap(n)
-
 
63
 
-
 
64
#endif
-
 
65
 
38
static inline uint64_t uint64_t_byteorder_swap(uint64_t n)
66
static inline uint64_t uint64_t_byteorder_swap(uint64_t n)
39
{
67
{
40
    return ((n & 0xff) << 56) |
68
    return ((n & 0xff) << 56) |
41
        ((n & 0xff00) << 40) |
69
        ((n & 0xff00) << 40) |
42
        ((n & 0xff0000) << 24) |
70
        ((n & 0xff0000) << 24) |
43
        ((n & 0xff000000LL) << 8) |
71
        ((n & 0xff000000LL) << 8) |
44
        ((n & 0xff00000000LL) >> 8) |
72
        ((n & 0xff00000000LL) >> 8) |
45
        ((n & 0xff0000000000LL) >> 24) |
73
        ((n & 0xff0000000000LL) >> 24) |
46
        ((n & 0xff000000000000LL) >> 40) |
74
        ((n & 0xff000000000000LL) >> 40) |
47
        ((n & 0xff00000000000000LL) >> 56);
75
        ((n & 0xff00000000000000LL) >> 56);
48
}
76
}
49
 
77
 
50
static inline uint32_t uint32_t_byteorder_swap(uint32_t n)
78
static inline uint32_t uint32_t_byteorder_swap(uint32_t n)
51
{
79
{
52
    return ((n & 0xff) << 24) |
80
    return ((n & 0xff) << 24) |
53
        ((n & 0xff00) << 8) |
81
        ((n & 0xff00) << 8) |
54
        ((n & 0xff0000) >> 8) |
82
        ((n & 0xff0000) >> 8) |
55
        ((n & 0xff000000) >> 24);
83
        ((n & 0xff000000) >> 24);
-
 
84
}
-
 
85
 
-
 
86
static inline uint16_t uint16_t_byteorder_swap(uint16_t n)
-
 
87
{
-
 
88
    return ((n & 0xff) << 8) |
-
 
89
        ((n & 0xff00) >> 8);
56
}
90
}
57
 
91
 
58
#endif
92
#endif
59
 
93
 
60
/** @}
94
/** @}