1
2
3
4
5
6
7 #ifndef __BASIC_TYPES_H__
8 #define __BASIC_TYPES_H__
9
10 #include <linux/types.h>
11 #define NDIS_OID uint
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26 #define EF1BYTE(_val) \
27 ((u8)(_val))
28 #define EF2BYTE(_val) \
29 (le16_to_cpu(_val))
30 #define EF4BYTE(_val) \
31 (le32_to_cpu(_val))
32
33
34
35
36
37
38
39
40 #define BIT_LEN_MASK_32(__bitlen) \
41 (0xFFFFFFFF >> (32 - (__bitlen)))
42 #define BIT_LEN_MASK_16(__bitlen) \
43 (0xFFFF >> (16 - (__bitlen)))
44 #define BIT_LEN_MASK_8(__bitlen) \
45 (0xFF >> (8 - (__bitlen)))
46
47
48
49
50
51
52 #define BIT_OFFSET_LEN_MASK_32(__bitoffset, __bitlen) \
53 (BIT_LEN_MASK_32(__bitlen) << (__bitoffset))
54 #define BIT_OFFSET_LEN_MASK_16(__bitoffset, __bitlen) \
55 (BIT_LEN_MASK_16(__bitlen) << (__bitoffset))
56 #define BIT_OFFSET_LEN_MASK_8(__bitoffset, __bitlen) \
57 (BIT_LEN_MASK_8(__bitlen) << (__bitoffset))
58
59
60
61
62
63 #define LE_P4BYTE_TO_HOST_4BYTE(__pstart) \
64 (EF4BYTE(*((__le32 *)(__pstart))))
65 #define LE_P2BYTE_TO_HOST_2BYTE(__pstart) \
66 (EF2BYTE(*((__le16 *)(__pstart))))
67 #define LE_P1BYTE_TO_HOST_1BYTE(__pstart) \
68 (EF1BYTE(*((u8 *)(__pstart))))
69
70
71
72
73
74 #define LE_BITS_TO_4BYTE(__pstart, __bitoffset, __bitlen) \
75 ( \
76 (LE_P4BYTE_TO_HOST_4BYTE(__pstart) >> (__bitoffset)) & \
77 BIT_LEN_MASK_32(__bitlen) \
78 )
79 #define LE_BITS_TO_2BYTE(__pstart, __bitoffset, __bitlen) \
80 ( \
81 (LE_P2BYTE_TO_HOST_2BYTE(__pstart) >> (__bitoffset)) & \
82 BIT_LEN_MASK_16(__bitlen) \
83 )
84 #define LE_BITS_TO_1BYTE(__pstart, __bitoffset, __bitlen) \
85 ( \
86 (LE_P1BYTE_TO_HOST_1BYTE(__pstart) >> (__bitoffset)) & \
87 BIT_LEN_MASK_8(__bitlen) \
88 )
89
90
91
92
93
94 #define LE_BITS_CLEARED_TO_4BYTE(__pstart, __bitoffset, __bitlen) \
95 ( \
96 LE_P4BYTE_TO_HOST_4BYTE(__pstart) & \
97 (~BIT_OFFSET_LEN_MASK_32(__bitoffset, __bitlen)) \
98 )
99 #define LE_BITS_CLEARED_TO_2BYTE(__pstart, __bitoffset, __bitlen) \
100 ( \
101 LE_P2BYTE_TO_HOST_2BYTE(__pstart) & \
102 (~BIT_OFFSET_LEN_MASK_16(__bitoffset, __bitlen)) \
103 )
104 #define LE_BITS_CLEARED_TO_1BYTE(__pstart, __bitoffset, __bitlen) \
105 ( \
106 LE_P1BYTE_TO_HOST_1BYTE(__pstart) & \
107 (~BIT_OFFSET_LEN_MASK_8(__bitoffset, __bitlen)) \
108 )
109
110
111
112
113 #define SET_BITS_TO_LE_4BYTE(__pstart, __bitoffset, __bitlen, __val) \
114 *((u32 *)(__pstart)) = \
115 ( \
116 LE_BITS_CLEARED_TO_4BYTE(__pstart, __bitoffset, __bitlen) | \
117 ((((u32)__val) & BIT_LEN_MASK_32(__bitlen)) << (__bitoffset)) \
118 )
119
120 #define SET_BITS_TO_LE_2BYTE(__pstart, __bitoffset, __bitlen, __val) \
121 *((u16 *)(__pstart)) = \
122 ( \
123 LE_BITS_CLEARED_TO_2BYTE(__pstart, __bitoffset, __bitlen) | \
124 ((((u16)__val) & BIT_LEN_MASK_16(__bitlen)) << (__bitoffset)) \
125 );
126
127 #define SET_BITS_TO_LE_1BYTE(__pstart, __bitoffset, __bitlen, __val) \
128 *((u8 *)(__pstart)) = EF1BYTE \
129 ( \
130 LE_BITS_CLEARED_TO_1BYTE(__pstart, __bitoffset, __bitlen) | \
131 ((((u8)__val) & BIT_LEN_MASK_8(__bitlen)) << (__bitoffset)) \
132 )
133
134 #endif