aboutsummaryrefslogtreecommitdiff
path: root/include/odp/api/byteorder.h
blob: a12a7296f2d33aabdb0cbb9f28f72262474b053b (plain)
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
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
/* Copyright (c) 2014, Linaro Limited
 * All rights reserved.
 *
 * SPDX-License-Identifier:     BSD-3-Clause
 */


/**
 * @file
 *
 * ODP byteorder
 */

#ifndef ODP_API_BYTEORDER_H_
#define ODP_API_BYTEORDER_H_

#ifdef __cplusplus
extern "C" {
#endif

/** @defgroup odp_compiler_optim ODP COMPILER / OPTIMIZATION
 *  Macros that check byte order and operations for byte order conversion.
 *  @{
 */

/**
 * @def ODP_BIG_ENDIAN
 * Big endian byte order
 *
 * @def ODP_LITTLE_ENDIAN
 * Little endian byte order
 *
 * @def ODP_BIG_ENDIAN_BITFIELD
 * Big endian bit field
 *
 * @def ODP_LITTLE_ENDIAN_BITFIELD
 * Little endian bit field
 *
 * @def ODP_BYTE_ORDER
 * Selected byte order
 */

/**
 * @typedef odp_u16le_t
 * unsigned 16bit little endian
 *
 * @typedef odp_u16be_t
 * unsigned 16bit big endian
 *
 * @typedef odp_u32le_t
 * unsigned 32bit little endian
 *
 * @typedef odp_u32be_t
 * unsigned 32bit big endian
 *
 * @typedef odp_u64le_t
 * unsigned 64bit little endian
 *
 * @typedef odp_u64be_t
 * unsigned 64bit big endian
 *
 * @typedef odp_u16sum_t
 * unsigned 16bit bitwise
 *
 * @typedef odp_u32sum_t
 * unsigned 32bit bitwise
 */

/*
 * Big Endian -> CPU byte order:
 */

/**
 * Convert 16bit big endian to cpu native uint16_t
 * @param be16  big endian 16bit
 * @return  cpu native uint16_t
 */
uint16_t odp_be_to_cpu_16(odp_u16be_t be16);

/**
 * Convert 32bit big endian to cpu native uint32_t
 * @param be32  big endian 32bit
 * @return  cpu native uint32_t
 */
uint32_t odp_be_to_cpu_32(odp_u32be_t be32);

/**
 * Convert 64bit big endian to cpu native uint64_t
 * @param be64  big endian 64bit
 * @return  cpu native uint64_t
 */
uint64_t odp_be_to_cpu_64(odp_u64be_t be64);


/*
 * CPU byte order -> Big Endian:
 */

/**
 * Convert cpu native uint16_t to 16bit big endian
 * @param cpu16  uint16_t in cpu native format
 * @return  big endian 16bit
 */
odp_u16be_t odp_cpu_to_be_16(uint16_t cpu16);

/**
 * Convert cpu native uint32_t to 32bit big endian
 * @param cpu32  uint32_t in cpu native format
 * @return  big endian 32bit
 */
odp_u32be_t odp_cpu_to_be_32(uint32_t cpu32);

/**
 * Convert cpu native uint64_t to 64bit big endian
 * @param cpu64  uint64_t in cpu native format
 * @return  big endian 64bit
 */
odp_u64be_t odp_cpu_to_be_64(uint64_t cpu64);


/*
 * Little Endian -> CPU byte order:
 */

/**
 * Convert 16bit little endian to cpu native uint16_t
 * @param le16  little endian 16bit
 * @return  cpu native uint16_t
 */
uint16_t odp_le_to_cpu_16(odp_u16le_t le16);

/**
 * Convert 32bit little endian to cpu native uint32_t
 * @param le32  little endian 32bit
 * @return  cpu native uint32_t
 */
uint32_t odp_le_to_cpu_32(odp_u32le_t le32);

/**
 * Convert 64bit little endian to cpu native uint64_t
 * @param le64  little endian 64bit
 * @return  cpu native uint64_t
 */
uint64_t odp_le_to_cpu_64(odp_u64le_t le64);


/*
 * CPU byte order -> Little Endian:
 */

/**
 * Convert cpu native uint16_t to 16bit little endian
 * @param cpu16  uint16_t in cpu native format
 * @return  little endian 16bit
 */
odp_u16le_t odp_cpu_to_le_16(uint16_t cpu16);

/**
 * Convert cpu native uint32_t to 32bit little endian
 * @param cpu32  uint32_t in cpu native format
 * @return  little endian 32bit
 */
odp_u32le_t odp_cpu_to_le_32(uint32_t cpu32);

/**
 * Convert cpu native uint64_t to 64bit little endian
 * @param cpu64  uint64_t in cpu native format
 * @return  little endian 64bit
 */
odp_u64le_t odp_cpu_to_le_64(uint64_t cpu64);

/**
 * @}
 */

#ifdef __cplusplus
}
#endif

#endif