forked from Neirth/FreeNOS
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathCore.h
144 lines (119 loc) · 3.41 KB
/
Core.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
/*
* Copyright (C) 2015 Niek Linnenbank
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#ifndef __LIBARCH_CORE_H
#define __LIBARCH_CORE_H
#include <Macros.h>
#include <Types.h>
extern C uint isKernel;
#define swab16(x) ((u16)( \
(((u16)(x) & (u16)0x00ffU) << 8) | \
(((u16)(x) & (u16)0xff00U) >> 8)))
#define swab32(x) ((u32)( \
(((u32)(x) & (u32)0x000000ffUL) << 24) | \
(((u32)(x) & (u32)0x0000ff00UL) << 8) | \
(((u32)(x) & (u32)0x00ff0000UL) >> 8) | \
(((u32)(x) & (u32)0xff000000UL) >> 24)))
#ifdef CPU_BIG_ENDIAN
#else
#ifdef CPU_LITTLE_ENDIAN
#define FORCE
/**
* CPU byte order to little endian 64-bit.
* @param x Input integer.
* @return le64 type integer.
*/
#define cpu_to_le64(x) ((FORCE le64)(u64)(x))
/**
* Little endian 64-bit to CPU byte order.
* @param x le64 type integer.
* @return CPU byte ordered 64-bit integer.
*/
#define le64_to_cpu(x) ((FORCE u64)(le64)(x))
/**
* CPU byte order to little endian 32-bit.
* @param x Input integer.
* @return le32 type integer.
*/
#define cpu_to_le32(x) ((FORCE le32)(u32)(x))
/**
* Little endian 32-bit to CPU byte order.
* @param x le32 type integer.
* @return CPU byte ordered 32-bit integer.
*/
#define le32_to_cpu(x) ((FORCE u32)(le32)(x))
/**
* CPU byte order to little endian 16-bit.
* @param x Input integer.
* @return le16 type integer.
*/
#define cpu_to_le16(x) ((FORCE le16)(u16)(x))
/**
* Little endian 16-bit to CPU byte order.
* @param x le16 type integer.
* @return CPU byte ordered 16-bit integer.
*/
#define le16_to_cpu(x) ((FORCE u16)(le16)(x))
/**
* CPU byte order to big endian 64-bit.
* @param x Input integer.
* @return be64 type integer.
*/
#define cpu_to_be64(x) ((FORCE be64)swab64((x)))
/**
* Big endian 64-bit to CPU byte order.
* @param x be64 type integer.
* @return CPU byte ordered 64-bit integer.
*/
#define be64_to_cpu(x) swab64((FORCE u64)(be64)(x))
/**
* CPU byte order to big endian 32-bit.
* @param x Input integer.
* @return be32 type integer.
*/
#define cpu_to_be32(x) ((FORCE be32)swab32((x)))
/**
* Big endian 32-bit to CPU byte order.
* @param x be32 type integer.
* @return CPU byte ordered 32-bit integer.
*/
#define be32_to_cpu(x) swab32((FORCE u32)(be32)(x))
/**
* CPU byte order to big endian 16-bit.
* @param x Input integer.
* @return be16 type integer.
*/
#define cpu_to_be16(x) ((FORCE be16)swab16((x)))
/**
* Big endian 16-bit to CPU byte order.
* @param x be16 type integer.
* @return CPU byte ordered 16-bit integer.
*/
#define be16_to_cpu(x) swab16((FORCE u16)(be16)(x))
#endif
#endif /* LITTLE_ENDIAN */
/**
* @}
*/
/**
* Generic Core implementation.
*/
class Core
{
public:
/* empty */
};
#endif /* __LIBARCH_CORE_H */