Staging: rtl8192e: coding style cleanups on r819xE_firmware.c
[GitHub/mt8127/android_kernel_alcatel_ttab.git] / drivers / staging / rtl8192e / ieee80211 / EndianFree.h
CommitLineData
ecdfa446
GKH
1#ifndef __INC_ENDIANFREE_H
2#define __INC_ENDIANFREE_H
3
4/*
5 * Call endian free function when
6 * 1. Read/write packet content.
7 * 2. Before write integer to IO.
8 * 3. After read integer from IO.
9 */
10#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,20))
11#ifndef bool
12typedef enum{false = 0, true} bool;
13#endif
14#endif
15
16#define __MACHINE_LITTLE_ENDIAN 1234 /* LSB first: i386, vax */
17#define __MACHINE_BIG_ENDIAN 4321 /* MSB first: 68000, ibm, net, ppc */
18
19#define BYTE_ORDER __MACHINE_LITTLE_ENDIAN
20
21#if BYTE_ORDER == __MACHINE_LITTLE_ENDIAN
22// Convert data
23#define EF1Byte(_val) ((u8)(_val))
24#define EF2Byte(_val) ((u16)(_val))
25#define EF4Byte(_val) ((u32)(_val))
26
27#else
28// Convert data
29#define EF1Byte(_val) ((u8)(_val))
30#define EF2Byte(_val) (((((u16)(_val))&0x00ff)<<8)|((((u16)(_val))&0xff00)>>8))
31#define EF4Byte(_val) (((((u32)(_val))&0x000000ff)<<24)|\
32 ((((u32)(_val))&0x0000ff00)<<8)|\
33 ((((u32)(_val))&0x00ff0000)>>8)|\
34 ((((u32)(_val))&0xff000000)>>24))
35#endif
36
37// Read data from memory
38#define ReadEF1Byte(_ptr) EF1Byte(*((u8 *)(_ptr)))
39#define ReadEF2Byte(_ptr) EF2Byte(*((u16 *)(_ptr)))
40#define ReadEF4Byte(_ptr) EF4Byte(*((u32 *)(_ptr)))
41
42// Write data to memory
43#define WriteEF1Byte(_ptr, _val) (*((u8 *)(_ptr)))=EF1Byte(_val)
44#define WriteEF2Byte(_ptr, _val) (*((u16 *)(_ptr)))=EF2Byte(_val)
45#define WriteEF4Byte(_ptr, _val) (*((u32 *)(_ptr)))=EF4Byte(_val)
46// Convert Host system specific byte ording (litten or big endia) to Network byte ording (big endian).
47// 2006.05.07, by rcnjko.
48#if BYTE_ORDER == __MACHINE_LITTLE_ENDIAN
49#define H2N1BYTE(_val) ((u8)(_val))
50#define H2N2BYTE(_val) (((((u16)(_val))&0x00ff)<<8)|\
51 ((((u16)(_val))&0xff00)>>8))
52#define H2N4BYTE(_val) (((((u32)(_val))&0x000000ff)<<24)|\
53 ((((u32)(_val))&0x0000ff00)<<8) |\
54 ((((u32)(_val))&0x00ff0000)>>8) |\
55 ((((u32)(_val))&0xff000000)>>24))
56#else
57#define H2N1BYTE(_val) ((u8)(_val))
58#define H2N2BYTE(_val) ((u16)(_val))
59#define H2N4BYTE(_val) ((u32)(_val))
60#endif
61
62// Convert from Network byte ording (big endian) to Host system specific byte ording (litten or big endia).
63// 2006.05.07, by rcnjko.
64#if BYTE_ORDER == __MACHINE_LITTLE_ENDIAN
65#define N2H1BYTE(_val) ((u8)(_val))
66#define N2H2BYTE(_val) (((((u16)(_val))&0x00ff)<<8)|\
67 ((((u16)(_val))&0xff00)>>8))
68#define N2H4BYTE(_val) (((((u32)(_val))&0x000000ff)<<24)|\
69 ((((u32)(_val))&0x0000ff00)<<8) |\
70 ((((u32)(_val))&0x00ff0000)>>8) |\
71 ((((u32)(_val))&0xff000000)>>24))
72#else
73#define N2H1BYTE(_val) ((u8)(_val))
74#define N2H2BYTE(_val) ((u16)(_val))
75#define N2H4BYTE(_val) ((u32)(_val))
76#endif
77
78//
79// Example:
80// BIT_LEN_MASK_32(0) => 0x00000000
81// BIT_LEN_MASK_32(1) => 0x00000001
82// BIT_LEN_MASK_32(2) => 0x00000003
83// BIT_LEN_MASK_32(32) => 0xFFFFFFFF
84//
85#define BIT_LEN_MASK_32(__BitLen) (0xFFFFFFFF >> (32 - (__BitLen)))
86//
87// Example:
88// BIT_OFFSET_LEN_MASK_32(0, 2) => 0x00000003
89// BIT_OFFSET_LEN_MASK_32(16, 2) => 0x00030000
90//
91#define BIT_OFFSET_LEN_MASK_32(__BitOffset, __BitLen) (BIT_LEN_MASK_32(__BitLen) << (__BitOffset))
92
93//
94// Description:
95// Return 4-byte value in host byte ordering from
96// 4-byte pointer in litten-endian system.
97//
98#define LE_P4BYTE_TO_HOST_4BYTE(__pStart) (EF4Byte(*((u32 *)(__pStart))))
99
100//
101// Description:
102// Translate subfield (continuous bits in little-endian) of 4-byte value in litten byte to
103// 4-byte value in host byte ordering.
104//
105#define LE_BITS_TO_4BYTE(__pStart, __BitOffset, __BitLen) \
106 ( \
107 ( LE_P4BYTE_TO_HOST_4BYTE(__pStart) >> (__BitOffset) ) \
108 & \
109 BIT_LEN_MASK_32(__BitLen) \
110 )
111
112//
113// Description:
114// Mask subfield (continuous bits in little-endian) of 4-byte value in litten byte oredering
115// and return the result in 4-byte value in host byte ordering.
116//
117#define LE_BITS_CLEARED_TO_4BYTE(__pStart, __BitOffset, __BitLen) \
118 ( \
119 LE_P4BYTE_TO_HOST_4BYTE(__pStart) \
120 & \
121 ( ~BIT_OFFSET_LEN_MASK_32(__BitOffset, __BitLen) ) \
122 )
123
124//
125// Description:
126// Set subfield of little-endian 4-byte value to specified value.
127//
128#define SET_BITS_TO_LE_4BYTE(__pStart, __BitOffset, __BitLen, __Value) \
129 *((u32 *)(__pStart)) = \
130 EF4Byte( \
131 LE_BITS_CLEARED_TO_4BYTE(__pStart, __BitOffset, __BitLen) \
132 | \
133 ( (((u32)__Value) & BIT_LEN_MASK_32(__BitLen)) << (__BitOffset) ) \
134 );
135
136
137#define BIT_LEN_MASK_16(__BitLen) \
138 (0xFFFF >> (16 - (__BitLen)))
139
140#define BIT_OFFSET_LEN_MASK_16(__BitOffset, __BitLen) \
141 (BIT_LEN_MASK_16(__BitLen) << (__BitOffset))
142
143#define LE_P2BYTE_TO_HOST_2BYTE(__pStart) \
144 (EF2Byte(*((u16 *)(__pStart))))
145
146#define LE_BITS_TO_2BYTE(__pStart, __BitOffset, __BitLen) \
147 ( \
148 ( LE_P2BYTE_TO_HOST_2BYTE(__pStart) >> (__BitOffset) ) \
149 & \
150 BIT_LEN_MASK_16(__BitLen) \
151 )
152
153#define LE_BITS_CLEARED_TO_2BYTE(__pStart, __BitOffset, __BitLen) \
154 ( \
155 LE_P2BYTE_TO_HOST_2BYTE(__pStart) \
156 & \
157 ( ~BIT_OFFSET_LEN_MASK_16(__BitOffset, __BitLen) ) \
158 )
159
160#define SET_BITS_TO_LE_2BYTE(__pStart, __BitOffset, __BitLen, __Value) \
161 *((u16 *)(__pStart)) = \
162 EF2Byte( \
163 LE_BITS_CLEARED_TO_2BYTE(__pStart, __BitOffset, __BitLen) \
164 | \
165 ( (((u16)__Value) & BIT_LEN_MASK_16(__BitLen)) << (__BitOffset) ) \
166 );
167
168#define BIT_LEN_MASK_8(__BitLen) \
169 (0xFF >> (8 - (__BitLen)))
170
171#define BIT_OFFSET_LEN_MASK_8(__BitOffset, __BitLen) \
172 (BIT_LEN_MASK_8(__BitLen) << (__BitOffset))
173
174#define LE_P1BYTE_TO_HOST_1BYTE(__pStart) \
175 (EF1Byte(*((u8 *)(__pStart))))
176
177#define LE_BITS_TO_1BYTE(__pStart, __BitOffset, __BitLen) \
178 ( \
179 ( LE_P1BYTE_TO_HOST_1BYTE(__pStart) >> (__BitOffset) ) \
180 & \
181 BIT_LEN_MASK_8(__BitLen) \
182 )
183
184#define LE_BITS_CLEARED_TO_1BYTE(__pStart, __BitOffset, __BitLen) \
185 ( \
186 LE_P1BYTE_TO_HOST_1BYTE(__pStart) \
187 & \
188 ( ~BIT_OFFSET_LEN_MASK_8(__BitOffset, __BitLen) ) \
189 )
190
191#define SET_BITS_TO_LE_1BYTE(__pStart, __BitOffset, __BitLen, __Value) \
192 *((u8 *)(__pStart)) = \
193 EF1Byte( \
194 LE_BITS_CLEARED_TO_1BYTE(__pStart, __BitOffset, __BitLen) \
195 | \
196 ( (((u8)__Value) & BIT_LEN_MASK_8(__BitLen)) << (__BitOffset) ) \
197 );
198
199#endif // #ifndef __INC_ENDIANFREE_H