xref: /openbmc/linux/drivers/staging/rtl8712/wifi.h (revision 0181f6f1)
1 /* SPDX-License-Identifier: GPL-2.0 */
2 /******************************************************************************
3  *
4  * Copyright(c) 2007 - 2010 Realtek Corporation. All rights reserved.
5  *
6  * Modifications for inclusion into the Linux staging tree are
7  * Copyright(c) 2010 Larry Finger. All rights reserved.
8  *
9  * Contact information:
10  * WLAN FAE <wlanfae@realtek.com>
11  * Larry Finger <Larry.Finger@lwfinger.net>
12  *
13  ******************************************************************************/
14 #ifndef _WIFI_H_
15 #define _WIFI_H_
16 
17 #include <linux/compiler.h>
18 #include <linux/ieee80211.h>
19 
20 #define WLAN_HDR_A3_LEN		24
21 #define WLAN_HDR_A3_QOS_LEN	26
22 
23 #define P80211CAPTURE_VERSION	0x80211001
24 
25 enum WIFI_FRAME_TYPE {
26 	WIFI_QOS_DATA_TYPE	= (BIT(7) | BIT(3)),	/*!< QoS Data */
27 };
28 
29 enum WIFI_REG_DOMAIN {
30 	DOMAIN_FCC	= 1,
31 	DOMAIN_IC	= 2,
32 	DOMAIN_ETSI	= 3,
33 	DOMAIN_SPAIN	= 4,
34 	DOMAIN_FRANCE	= 5,
35 	DOMAIN_MKK	= 6,
36 	DOMAIN_ISRAEL	= 7,
37 	DOMAIN_MKK1	= 8,
38 	DOMAIN_MKK2	= 9,
39 	DOMAIN_MKK3	= 10,
40 	DOMAIN_MAX
41 };
42 
43 #define SetToDs(pbuf) ({ \
44 	*(__le16 *)(pbuf) |= cpu_to_le16(IEEE80211_FCTL_TODS); \
45 })
46 
47 #define GetToDs(pbuf)	(((*(__le16 *)(pbuf)) & cpu_to_le16(IEEE80211_FCTL_TODS)) != 0)
48 
49 #define ClearToDs(pbuf)	({ \
50 	*(__le16 *)(pbuf) &= (~cpu_to_le16(IEEE80211_FCTL_TODS)); \
51 })
52 
53 #define SetFrDs(pbuf) ({ \
54 	*(__le16 *)(pbuf) |= cpu_to_le16(IEEE80211_FCTL_FROMDS); \
55 })
56 
57 #define GetFrDs(pbuf)	(((*(__le16 *)(pbuf)) & cpu_to_le16(IEEE80211_FCTL_FROMDS)) != 0)
58 
59 #define ClearFrDs(pbuf)	({ \
60 	*(__le16 *)(pbuf) &= (~cpu_to_le16(IEEE80211_FCTL_FROMDS)); \
61 })
62 
63 static inline unsigned char get_tofr_ds(unsigned char *pframe)
64 {
65 	return ((GetToDs(pframe) << 1) | GetFrDs(pframe));
66 }
67 
68 #define SetMFrag(pbuf) ({ \
69 	*(__le16 *)(pbuf) |= cpu_to_le16(IEEE80211_FCTL_MOREFRAGS); \
70 })
71 
72 #define GetMFrag(pbuf)	(((*(__le16 *)(pbuf)) & cpu_to_le16(IEEE80211_FCTL_MOREFRAGS)) != 0)
73 
74 #define ClearMFrag(pbuf) ({ \
75 	*(__le16 *)(pbuf) &= (~cpu_to_le16(IEEE80211_FCTL_MOREFRAGS)); \
76 })
77 
78 #define SetRetry(pbuf) ({ \
79 	*(__le16 *)(pbuf) |= cpu_to_le16(IEEE80211_FCTL_RETRY); \
80 })
81 
82 #define GetRetry(pbuf)	(((*(__le16 *)(pbuf)) & cpu_to_le16(IEEE80211_FCTL_RETRY)) != 0)
83 
84 #define ClearRetry(pbuf) ({ \
85 	*(__le16 *)(pbuf) &= (~cpu_to_le16(IEEE80211_FCTL_RETRY)); \
86 })
87 
88 #define SetPwrMgt(pbuf) ({ \
89 	*(__le16 *)(pbuf) |= cpu_to_le16(IEEE80211_FCTL_PM); \
90 })
91 
92 #define GetPwrMgt(pbuf)	(((*(__le16 *)(pbuf)) & \
93 			cpu_to_le16(IEEE80211_FCTL_PM)) != 0)
94 
95 #define ClearPwrMgt(pbuf) ({ \
96 	*(__le16 *)(pbuf) &= (~cpu_to_le16(IEEE80211_FCTL_PM)); \
97 })
98 
99 #define SetMData(pbuf) ({ \
100 	*(__le16 *)(pbuf) |= cpu_to_le16(IEEE80211_FCTL_MOREDATA); \
101 })
102 
103 #define GetMData(pbuf)	(((*(__le16 *)(pbuf)) & \
104 			cpu_to_le16(IEEE80211_FCTL_MOREDATA)) != 0)
105 
106 #define ClearMData(pbuf) ({ \
107 	*(__le16 *)(pbuf) &= (~cpu_to_le16(IEEE80211_FCTL_MOREDATA)); \
108 })
109 
110 #define SetPrivacy(pbuf) ({ \
111 	*(__le16 *)(pbuf) |= cpu_to_le16(IEEE80211_FCTL_PROTECTED); \
112 })
113 
114 #define GetPrivacy(pbuf)	(((*(__le16 *)(pbuf)) & \
115 				cpu_to_le16(IEEE80211_FCTL_PROTECTED)) != 0)
116 
117 #define GetOrder(pbuf)	(((*(__le16 *)(pbuf)) & \
118 			cpu_to_le16(IEEE80211_FCTL_ORDER)) != 0)
119 
120 #define GetFrameType(pbuf)	(le16_to_cpu(*(__le16 *)(pbuf)) & \
121 				(BIT(3) | BIT(2)))
122 
123 #define SetFrameType(pbuf, type)	\
124 	do {	\
125 		*(__le16 *)(pbuf) &= cpu_to_le16(~(BIT(3) | \
126 		BIT(2))); \
127 		*(__le16 *)(pbuf) |= cpu_to_le16(type); \
128 	} while (0)
129 
130 #define GetFrameSubType(pbuf)	(le16_to_cpu(*(__le16 *)(pbuf)) & \
131 				(BIT(7) | BIT(6) | BIT(5) | BIT(4) | BIT(3) | \
132 				BIT(2)))
133 
134 #define SetFrameSubType(pbuf, type) \
135 	do {    \
136 		*(__le16 *)(pbuf) &= cpu_to_le16(~(BIT(7) | BIT(6) | \
137 		BIT(5) | BIT(4) | BIT(3) | BIT(2))); \
138 		*(__le16 *)(pbuf) |= cpu_to_le16(type); \
139 	} while (0)
140 
141 #define GetSequence(pbuf)	(le16_to_cpu(*(__le16 *)\
142 				((addr_t)(pbuf) + 22)) >> 4)
143 
144 #define GetFragNum(pbuf)	(le16_to_cpu(*(__le16 *)((addr_t)\
145 				(pbuf) + 22)) & 0x0f)
146 
147 #define SetSeqNum(pbuf, num) ({ \
148 	*(__le16 *)((addr_t)(pbuf) + 22) = \
149 	cpu_to_le16((le16_to_cpu(*(__le16 *)((addr_t)(pbuf) + 22)) & \
150 	0x000f) | (0xfff0 & (num << 4))); \
151 })
152 
153 #define SetPriority(pbuf, tid) ({ \
154 	*(__le16 *)(pbuf) |= cpu_to_le16(tid & 0xf); \
155 })
156 
157 #define GetPriority(pbuf)	((le16_to_cpu(*(__le16 *)(pbuf))) & 0xf)
158 
159 #define SetAckpolicy(pbuf, ack) ({ \
160 	*(__le16 *)(pbuf) |= cpu_to_le16((ack & 3) << 5); \
161 })
162 
163 #define GetAckpolicy(pbuf) (((le16_to_cpu(*(__le16 *)pbuf)) >> 5) & 0x3)
164 
165 #define GetAMsdu(pbuf) (((le16_to_cpu(*(__le16 *)pbuf)) >> 7) & 0x1)
166 
167 #define GetAddr1Ptr(pbuf)	((unsigned char *)((addr_t)(pbuf) + 4))
168 
169 #define GetAddr2Ptr(pbuf)	((unsigned char *)((addr_t)(pbuf) + 10))
170 
171 #define GetAddr3Ptr(pbuf)	((unsigned char *)((addr_t)(pbuf) + 16))
172 
173 #define GetAddr4Ptr(pbuf)	((unsigned char *)((addr_t)(pbuf) + 24))
174 
175 static inline unsigned char *get_hdr_bssid(unsigned char *pframe)
176 {
177 	unsigned char	*sa;
178 	unsigned int	to_fr_ds = (GetToDs(pframe) << 1) | GetFrDs(pframe);
179 
180 	switch (to_fr_ds) {
181 	case 0x00:	/* ToDs=0, FromDs=0 */
182 		sa = GetAddr3Ptr(pframe);
183 		break;
184 	case 0x01:	/* ToDs=0, FromDs=1 */
185 		sa = GetAddr2Ptr(pframe);
186 		break;
187 	case 0x02:	/* ToDs=1, FromDs=0 */
188 		sa = GetAddr1Ptr(pframe);
189 		break;
190 	default:	/* ToDs=1, FromDs=1 */
191 		sa = NULL;
192 		break;
193 	}
194 	return sa;
195 }
196 
197 /*-----------------------------------------------------------------------------
198  *		Below is for the security related definition
199  *-----------------------------------------------------------------------------
200  */
201 #define _ASOCREQ_IE_OFFSET_	4	/* excluding wlan_hdr */
202 #define	_ASOCRSP_IE_OFFSET_	6
203 #define _REASOCREQ_IE_OFFSET_	10
204 #define _REASOCRSP_IE_OFFSET_	6
205 #define _PROBEREQ_IE_OFFSET_	0
206 #define	_PROBERSP_IE_OFFSET_	12
207 #define _AUTH_IE_OFFSET_	6
208 #define _DEAUTH_IE_OFFSET_	0
209 #define _BEACON_IE_OFFSET_	12
210 
211 #define _FIXED_IE_LENGTH_	_BEACON_IE_OFFSET_
212 
213 /* ---------------------------------------------------------------------------
214  *			Below is the fixed elements...
215  * ---------------------------------------------------------------------------
216  */
217 #define _AUTH_ALGM_NUM_			2
218 #define _AUTH_SEQ_NUM_			2
219 #define _BEACON_ITERVAL_		2
220 #define _CAPABILITY_			2
221 #define _CURRENT_APADDR_		6
222 #define _LISTEN_INTERVAL_		2
223 #define _RSON_CODE_				2
224 #define _ASOC_ID_				2
225 #define _STATUS_CODE_			2
226 #define _TIMESTAMP_				8
227 
228 #define AUTH_ODD_TO				0
229 #define AUTH_EVEN_TO			1
230 
231 /*-----------------------------------------------------------------------------
232  *			Below is the definition for 802.11i / 802.1x
233  *------------------------------------------------------------------------------
234  */
235 #define _IEEE8021X_MGT_			1	/*WPA */
236 #define _IEEE8021X_PSK_			2	/* WPA with pre-shared key */
237 
238 /*-----------------------------------------------------------------------------
239  *			Below is the definition for WMM
240  *------------------------------------------------------------------------------
241  */
242 #define _WMM_IE_Length_				7  /* for WMM STA */
243 
244 #endif /* _WIFI_H_ */
245 
246