xref: /onnv-gate/usr/src/lib/libparted/common/include/parted/endian.h (revision 9663:ace9a2ac3683)
1*9663SMark.Logan@Sun.COM /*
2*9663SMark.Logan@Sun.COM     libparted - a library for manipulating disk partitions
3*9663SMark.Logan@Sun.COM     Copyright (C) 1998-2002, 2007 Free Software Foundation, Inc.
4*9663SMark.Logan@Sun.COM 
5*9663SMark.Logan@Sun.COM     This program is free software; you can redistribute it and/or modify
6*9663SMark.Logan@Sun.COM     it under the terms of the GNU General Public License as published by
7*9663SMark.Logan@Sun.COM     the Free Software Foundation; either version 3 of the License, or
8*9663SMark.Logan@Sun.COM     (at your option) any later version.
9*9663SMark.Logan@Sun.COM 
10*9663SMark.Logan@Sun.COM     This program is distributed in the hope that it will be useful,
11*9663SMark.Logan@Sun.COM     but WITHOUT ANY WARRANTY; without even the implied warranty of
12*9663SMark.Logan@Sun.COM     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13*9663SMark.Logan@Sun.COM     GNU General Public License for more details.
14*9663SMark.Logan@Sun.COM 
15*9663SMark.Logan@Sun.COM     You should have received a copy of the GNU General Public License
16*9663SMark.Logan@Sun.COM     along with this program.  If not, see <http://www.gnu.org/licenses/>.
17*9663SMark.Logan@Sun.COM */
18*9663SMark.Logan@Sun.COM 
19*9663SMark.Logan@Sun.COM /* should only be #included by files in libparted */
20*9663SMark.Logan@Sun.COM 
21*9663SMark.Logan@Sun.COM #ifndef PED_ENDIAN_H_INCLUDED
22*9663SMark.Logan@Sun.COM #define PED_ENDIAN_H_INCLUDED
23*9663SMark.Logan@Sun.COM 
24*9663SMark.Logan@Sun.COM #include <stdint.h>
25*9663SMark.Logan@Sun.COM 
26*9663SMark.Logan@Sun.COM /* returns the n'th least significant byte */
27*9663SMark.Logan@Sun.COM #define _GET_BYTE(x, n)		( ((x) >> (8 * (n))) & 0xff )
28*9663SMark.Logan@Sun.COM 
29*9663SMark.Logan@Sun.COM #define _PED_SWAP16(x)		( (_GET_BYTE(x, 0) << 8)	\
30*9663SMark.Logan@Sun.COM 				+ (_GET_BYTE(x, 1) << 0) )
31*9663SMark.Logan@Sun.COM 
32*9663SMark.Logan@Sun.COM #define _PED_SWAP32(x)		( (_GET_BYTE(x, 0) << 24)	\
33*9663SMark.Logan@Sun.COM 				+ (_GET_BYTE(x, 1) << 16)	\
34*9663SMark.Logan@Sun.COM 				+ (_GET_BYTE(x, 2) << 8)	\
35*9663SMark.Logan@Sun.COM 				+ (_GET_BYTE(x, 3) << 0) )
36*9663SMark.Logan@Sun.COM 
37*9663SMark.Logan@Sun.COM #define _PED_SWAP64(x)		( (_GET_BYTE(x, 0) << 56)	\
38*9663SMark.Logan@Sun.COM 				+ (_GET_BYTE(x, 1) << 48)	\
39*9663SMark.Logan@Sun.COM 				+ (_GET_BYTE(x, 2) << 40)	\
40*9663SMark.Logan@Sun.COM 				+ (_GET_BYTE(x, 3) << 32)	\
41*9663SMark.Logan@Sun.COM 				+ (_GET_BYTE(x, 4) << 24)	\
42*9663SMark.Logan@Sun.COM 				+ (_GET_BYTE(x, 5) << 16)	\
43*9663SMark.Logan@Sun.COM 				+ (_GET_BYTE(x, 6) << 8)	\
44*9663SMark.Logan@Sun.COM 				+ (_GET_BYTE(x, 7) << 0) )
45*9663SMark.Logan@Sun.COM 
46*9663SMark.Logan@Sun.COM #define PED_SWAP16(x)		((uint16_t) _PED_SWAP16( (uint16_t) (x) ))
47*9663SMark.Logan@Sun.COM #define PED_SWAP32(x)		((uint32_t) _PED_SWAP32( (uint32_t) (x) ))
48*9663SMark.Logan@Sun.COM #define PED_SWAP64(x)		((uint64_t) _PED_SWAP64( (uint64_t) (x) ))
49*9663SMark.Logan@Sun.COM 
50*9663SMark.Logan@Sun.COM #ifdef WORDS_BIGENDIAN
51*9663SMark.Logan@Sun.COM 
52*9663SMark.Logan@Sun.COM #define PED_CPU_TO_LE16(x)	PED_SWAP16(x)
53*9663SMark.Logan@Sun.COM #define PED_CPU_TO_BE16(x)	(x)
54*9663SMark.Logan@Sun.COM #define PED_CPU_TO_LE32(x)	PED_SWAP32(x)
55*9663SMark.Logan@Sun.COM #define PED_CPU_TO_BE32(x)	(x)
56*9663SMark.Logan@Sun.COM #define PED_CPU_TO_LE64(x)	PED_SWAP64(x)
57*9663SMark.Logan@Sun.COM #define PED_CPU_TO_BE64(x)	(x)
58*9663SMark.Logan@Sun.COM 
59*9663SMark.Logan@Sun.COM #define PED_LE16_TO_CPU(x)	PED_SWAP16(x)
60*9663SMark.Logan@Sun.COM #define PED_BE16_TO_CPU(x)	(x)
61*9663SMark.Logan@Sun.COM #define PED_LE32_TO_CPU(x)	PED_SWAP32(x)
62*9663SMark.Logan@Sun.COM #define PED_BE32_TO_CPU(x)	(x)
63*9663SMark.Logan@Sun.COM #define PED_LE64_TO_CPU(x)	PED_SWAP64(x)
64*9663SMark.Logan@Sun.COM #define PED_BE64_TO_CPU(x)	(x)
65*9663SMark.Logan@Sun.COM 
66*9663SMark.Logan@Sun.COM #else /* !WORDS_BIGENDIAN */
67*9663SMark.Logan@Sun.COM 
68*9663SMark.Logan@Sun.COM #define PED_CPU_TO_LE16(x)	(x)
69*9663SMark.Logan@Sun.COM #define PED_CPU_TO_BE16(x)	PED_SWAP16(x)
70*9663SMark.Logan@Sun.COM #define PED_CPU_TO_LE32(x)	(x)
71*9663SMark.Logan@Sun.COM #define PED_CPU_TO_BE32(x)	PED_SWAP32(x)
72*9663SMark.Logan@Sun.COM #define PED_CPU_TO_LE64(x)	(x)
73*9663SMark.Logan@Sun.COM #define PED_CPU_TO_BE64(x)	PED_SWAP64(x)
74*9663SMark.Logan@Sun.COM 
75*9663SMark.Logan@Sun.COM #define PED_LE16_TO_CPU(x)	(x)
76*9663SMark.Logan@Sun.COM #define PED_BE16_TO_CPU(x)	PED_SWAP16(x)
77*9663SMark.Logan@Sun.COM #define PED_LE32_TO_CPU(x)	(x)
78*9663SMark.Logan@Sun.COM #define PED_BE32_TO_CPU(x)	PED_SWAP32(x)
79*9663SMark.Logan@Sun.COM #define PED_LE64_TO_CPU(x)	(x)
80*9663SMark.Logan@Sun.COM #define PED_BE64_TO_CPU(x)	PED_SWAP64(x)
81*9663SMark.Logan@Sun.COM 
82*9663SMark.Logan@Sun.COM #endif /* !WORDS_BIGENDIAN */
83*9663SMark.Logan@Sun.COM 
84*9663SMark.Logan@Sun.COM #endif /* PED_ENDIAN_H_INCLUDED */
85*9663SMark.Logan@Sun.COM 
86