wifi.h revision 8e3ddadf740e6d1b3678129b315817f48d801475
1/******************************************************************************
2 *
3 * Copyright(c) 2007 - 2012 Realtek Corporation. All rights reserved.
4 *
5 * This program is free software; you can redistribute it and/or modify it
6 * under the terms of version 2 of the GNU General Public License as
7 * published by the Free Software Foundation.
8 *
9 * This program is distributed in the hope that it will be useful, but WITHOUT
10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
12 * more details.
13 *
14 ******************************************************************************/
15#ifndef _WIFI_H_
16#define _WIFI_H_
17
18#define P80211CAPTURE_VERSION	0x80211001
19
20/*  This value is tested by WiFi 11n Test Plan 5.2.3.
21 *  This test verifies the WLAN NIC can update the NAV through sending
22 *  the CTS with large duration.
23 */
24#define	WiFiNavUpperUs		30000	/*  30 ms */
25
26enum WIFI_FRAME_TYPE {
27	WIFI_MGT_TYPE  =	(0),
28	WIFI_CTRL_TYPE =	(BIT(2)),
29	WIFI_DATA_TYPE =	(BIT(3)),
30	WIFI_QOS_DATA_TYPE	= (BIT(7)|BIT(3)),	/*  QoS Data */
31};
32
33enum WIFI_FRAME_SUBTYPE {
34	/*  below is for mgt frame */
35	WIFI_ASSOCREQ = (0 | WIFI_MGT_TYPE),
36	WIFI_ASSOCRSP = (BIT(4) | WIFI_MGT_TYPE),
37	WIFI_REASSOCREQ = (BIT(5) | WIFI_MGT_TYPE),
38	WIFI_REASSOCRSP = (BIT(5) | BIT(4) | WIFI_MGT_TYPE),
39	WIFI_PROBEREQ = (BIT(6) | WIFI_MGT_TYPE),
40	WIFI_PROBERSP = (BIT(6) | BIT(4) | WIFI_MGT_TYPE),
41	WIFI_BEACON = (BIT(7) | WIFI_MGT_TYPE),
42	WIFI_ATIM = (BIT(7) | BIT(4) | WIFI_MGT_TYPE),
43	WIFI_DISASSOC = (BIT(7) | BIT(5) | WIFI_MGT_TYPE),
44	WIFI_AUTH = (BIT(7) | BIT(5) | BIT(4) | WIFI_MGT_TYPE),
45	WIFI_DEAUTH = (BIT(7) | BIT(6) | WIFI_MGT_TYPE),
46	WIFI_ACTION = (BIT(7) | BIT(6) | BIT(4) | WIFI_MGT_TYPE),
47
48	/*  below is for control frame */
49	WIFI_PSPOLL = (BIT(7) | BIT(5) | WIFI_CTRL_TYPE),
50	WIFI_RTS = (BIT(7) | BIT(5) | BIT(4) | WIFI_CTRL_TYPE),
51	WIFI_CTS = (BIT(7) | BIT(6) | WIFI_CTRL_TYPE),
52	WIFI_ACK = (BIT(7) | BIT(6) | BIT(4) | WIFI_CTRL_TYPE),
53	WIFI_CFEND = (BIT(7) | BIT(6) | BIT(5) | WIFI_CTRL_TYPE),
54	WIFI_CFEND_CFACK = (BIT(7) | BIT(6) | BIT(5) | BIT(4) | WIFI_CTRL_TYPE),
55
56	/*  below is for data frame */
57	WIFI_DATA = (0 | WIFI_DATA_TYPE),
58	WIFI_DATA_CFACK = (BIT(4) | WIFI_DATA_TYPE),
59	WIFI_DATA_CFPOLL = (BIT(5) | WIFI_DATA_TYPE),
60	WIFI_DATA_CFACKPOLL = (BIT(5) | BIT(4) | WIFI_DATA_TYPE),
61	WIFI_DATA_NULL = (BIT(6) | WIFI_DATA_TYPE),
62	WIFI_CF_ACK = (BIT(6) | BIT(4) | WIFI_DATA_TYPE),
63	WIFI_CF_POLL = (BIT(6) | BIT(5) | WIFI_DATA_TYPE),
64	WIFI_CF_ACKPOLL = (BIT(6) | BIT(5) | BIT(4) | WIFI_DATA_TYPE),
65	WIFI_QOS_DATA_NULL = (BIT(6) | WIFI_QOS_DATA_TYPE),
66};
67
68
69enum WIFI_REG_DOMAIN {
70	DOMAIN_FCC		= 1,
71	DOMAIN_IC		= 2,
72	DOMAIN_ETSI		= 3,
73	DOMAIN_SPAIN		= 4,
74	DOMAIN_FRANCE		= 5,
75	DOMAIN_MKK		= 6,
76	DOMAIN_ISRAEL		= 7,
77	DOMAIN_MKK1		= 8,
78	DOMAIN_MKK2		= 9,
79	DOMAIN_MKK3		= 10,
80	DOMAIN_MAX
81};
82
83
84#define SetToDs(pbuf)	\
85	(*(__le16 *)(pbuf) |= cpu_to_le16(IEEE80211_FCTL_TODS))
86
87#define SetFrDs(pbuf)	\
88	(*(__le16 *)(pbuf) |= cpu_to_le16(IEEE80211_FCTL_FROMDS))
89
90#define SetRetry(pbuf)	\
91	(*(__le16 *)(pbuf) |= cpu_to_le16(IEEE80211_FCTL_RETRY))
92
93#define SetPwrMgt(pbuf)	\
94	(*(__le16 *)(pbuf) |= cpu_to_le16(IEEE80211_FCTL_PM))
95
96#define SetMData(pbuf)	\
97	(*(__le16 *)(pbuf) |= cpu_to_le16(IEEE80211_FCTL_MOREDATA))
98
99#define SetPrivacy(pbuf)	\
100	(*(__le16 *)(pbuf) |= cpu_to_le16(IEEE80211_FCTL_PROTECTED))
101
102#define SetFrameType(pbuf, type)	\
103	do {	\
104		*(__le16 *)(pbuf) &= __constant_cpu_to_le16(~(BIT(3) | BIT(2))); \
105		*(__le16 *)(pbuf) |= __constant_cpu_to_le16(type); \
106	} while (0)
107
108#define SetFrameSubType(pbuf, type) \
109	do {    \
110		*(__le16 *)(pbuf) &= cpu_to_le16(~(BIT(7) | BIT(6) | BIT(5) | BIT(4) | BIT(3) | BIT(2))); \
111		*(__le16 *)(pbuf) |= cpu_to_le16(type); \
112	} while (0)
113
114#define SetFragNum(pbuf, num) \
115	do {    \
116		*(unsigned short *)((unsigned long)(pbuf) + 22) = \
117			((*(unsigned short *)((unsigned long)(pbuf) + 22)) & le16_to_cpu(~(0x000f))) | \
118			cpu_to_le16(0x0f & (num));     \
119	} while (0)
120
121#define SetSeqNum(pbuf, num) \
122	do {    \
123		*(__le16 *)((size_t)(pbuf) + 22) = \
124			((*(__le16 *)((size_t)(pbuf) + 22)) & cpu_to_le16((unsigned short)0x000f)) | \
125			cpu_to_le16((unsigned short)(0xfff0 & (num << 4))); \
126	} while (0)
127
128#define SetDuration(pbuf, dur) \
129	(*(__le16 *)((unsigned long)(pbuf) + 2) =		\
130	 cpu_to_le16(0xffff & (dur)))
131
132#define SetPriority(pbuf, tid)	\
133	(*(__le16 *)(pbuf) |= cpu_to_le16(tid & 0xf))
134
135#define SetEOSP(pbuf, eosp)	\
136	(*(__le16 *)(pbuf) |= cpu_to_le16((eosp & 1) << 4))
137
138#define SetAckpolicy(pbuf, ack)	\
139	(*(__le16 *)(pbuf) |= cpu_to_le16((ack & 3) << 5))
140
141#define SetAMsdu(pbuf, amsdu)	\
142	(*(__le16 *)(pbuf) |= cpu_to_le16((amsdu & 1) << 7))
143
144#define _ASOCREQ_IE_OFFSET_		4	/*  excluding wlan_hdr */
145#define	_ASOCRSP_IE_OFFSET_		6
146#define _REASOCREQ_IE_OFFSET_		10
147#define _REASOCRSP_IE_OFFSET_		6
148#define _PROBEREQ_IE_OFFSET_		0
149#define	_PROBERSP_IE_OFFSET_		12
150#define _AUTH_IE_OFFSET_		6
151#define _DEAUTH_IE_OFFSET_		0
152#define _BEACON_IE_OFFSET_		12
153#define _PUBLIC_ACTION_IE_OFFSET_	8
154
155#define _FIXED_IE_LENGTH_		_BEACON_IE_OFFSET_
156
157
158#define	EID_BSSIntolerantChlReport	73
159
160/* ---------------------------------------------------------------------------
161					Below is the fixed elements...
162-----------------------------------------------------------------------------*/
163#define _AUTH_ALGM_NUM_		2
164#define _AUTH_SEQ_NUM_		2
165#define _BEACON_ITERVAL_	2
166#define _CAPABILITY_		2
167#define _CURRENT_APADDR_	6
168#define _LISTEN_INTERVAL_	2
169#define _ASOC_ID_		2
170#define _STATUS_CODE_		2
171#define _TIMESTAMP_		8
172
173#define cap_ESS		BIT(0)
174#define cap_IBSS	BIT(1)
175#define cap_CFPollable	BIT(2)
176#define cap_CFRequest	BIT(3)
177#define cap_Privacy	BIT(4)
178#define cap_ShortPremble BIT(5)
179#define cap_PBCC	BIT(6)
180#define cap_ChAgility	BIT(7)
181#define cap_SpecMgmt	BIT(8)
182#define cap_QoS		BIT(9)
183#define cap_ShortSlot	BIT(10)
184
185/*-----------------------------------------------------------------------------
186				Below is the definition for WMM
187------------------------------------------------------------------------------*/
188#define _WMM_IE_Length_				7  /*  for WMM STA */
189#define _WMM_Para_Element_Length_		24
190
191
192/*-----------------------------------------------------------------------------
193				Below is the definition for 802.11n
194------------------------------------------------------------------------------*/
195
196/* struct rtw_ieee80211_ht_cap - HT additional information
197 *
198 * This structure refers to "HT information element" as
199 * described in 802.11n draft section 7.3.2.53
200 */
201struct ieee80211_ht_addt_info {
202	unsigned char	control_chan;
203	unsigned char	ht_param;
204	unsigned short	operation_mode;
205	unsigned short	stbc_param;
206	unsigned char	basic_set[16];
207} __packed;
208
209struct HT_caps_element {
210	union {
211		struct {
212			unsigned short	HT_caps_info;
213			unsigned char	AMPDU_para;
214			unsigned char	MCS_rate[16];
215			unsigned short	HT_ext_caps;
216			unsigned int	Beamforming_caps;
217			unsigned char	ASEL_caps;
218		} HT_cap_element;
219		unsigned char HT_cap[26];
220	} u;
221} __packed;
222
223struct HT_info_element {
224	unsigned char	primary_channel;
225	unsigned char	infos[5];
226	unsigned char	MCS_rate[16];
227}  __packed;
228
229struct AC_param {
230	unsigned char		ACI_AIFSN;
231	unsigned char		CW;
232	unsigned short	TXOP_limit;
233}  __packed;
234
235struct WMM_para_element {
236	unsigned char		QoS_info;
237	unsigned char		reserved;
238	struct AC_param	ac_param[4];
239}  __packed;
240
241struct ADDBA_request {
242	unsigned char		dialog_token;
243	unsigned short	BA_para_set;
244	unsigned short	BA_timeout_value;
245	unsigned short	BA_starting_seqctrl;
246}  __packed;
247
248
249#define OP_MODE_PURE                    0
250#define OP_MODE_MAY_BE_LEGACY_STAS      1
251#define OP_MODE_20MHZ_HT_STA_ASSOCED    2
252#define OP_MODE_MIXED                   3
253
254#define HT_INFO_HT_PARAM_SECONDARY_CHNL_OFF_MASK	((u8) BIT(0) | BIT(1))
255#define HT_INFO_HT_PARAM_SECONDARY_CHNL_ABOVE		((u8) BIT(0))
256#define HT_INFO_HT_PARAM_SECONDARY_CHNL_BELOW		((u8) BIT(0) | BIT(1))
257#define HT_INFO_HT_PARAM_REC_TRANS_CHNL_WIDTH		((u8) BIT(2))
258#define HT_INFO_HT_PARAM_RIFS_MODE			((u8) BIT(3))
259#define HT_INFO_HT_PARAM_CTRL_ACCESS_ONLY		((u8) BIT(4))
260#define HT_INFO_HT_PARAM_SRV_INTERVAL_GRANULARITY	((u8) BIT(5))
261
262#define HT_INFO_OPERATION_MODE_OP_MODE_MASK	\
263		((u16) (0x0001 | 0x0002))
264#define HT_INFO_OPERATION_MODE_OP_MODE_OFFSET		0
265#define HT_INFO_OPERATION_MODE_NON_GF_DEVS_PRESENT	((u8) BIT(2))
266#define HT_INFO_OPERATION_MODE_TRANSMIT_BURST_LIMIT	((u8) BIT(3))
267#define HT_INFO_OPERATION_MODE_NON_HT_STA_PRESENT	((u8) BIT(4))
268
269#define HT_INFO_STBC_PARAM_DUAL_BEACON		((u16) BIT(6))
270#define HT_INFO_STBC_PARAM_DUAL_STBC_PROTECT	((u16) BIT(7))
271#define HT_INFO_STBC_PARAM_SECONDARY_BCN	((u16) BIT(8))
272#define HT_INFO_STBC_PARAM_LSIG_TXOP_PROTECT_ALLOWED	((u16) BIT(9))
273#define HT_INFO_STBC_PARAM_PCO_ACTIVE		((u16) BIT(10))
274#define HT_INFO_STBC_PARAM_PCO_PHASE		((u16) BIT(11))
275
276
277
278/*	===============WPS Section=============== */
279/*	For WPSv1.0 */
280#define WPSOUI					0x0050f204
281/*	WPS attribute ID */
282#define WPS_ATTR_VER1				0x104A
283#define WPS_ATTR_SIMPLE_CONF_STATE		0x1044
284#define WPS_ATTR_RESP_TYPE			0x103B
285#define WPS_ATTR_UUID_E				0x1047
286#define WPS_ATTR_MANUFACTURER			0x1021
287#define WPS_ATTR_MODEL_NAME			0x1023
288#define WPS_ATTR_MODEL_NUMBER			0x1024
289#define WPS_ATTR_SERIAL_NUMBER			0x1042
290#define WPS_ATTR_PRIMARY_DEV_TYPE		0x1054
291#define WPS_ATTR_SEC_DEV_TYPE_LIST		0x1055
292#define WPS_ATTR_DEVICE_NAME			0x1011
293#define WPS_ATTR_CONF_METHOD			0x1008
294#define WPS_ATTR_RF_BANDS			0x103C
295#define WPS_ATTR_DEVICE_PWID			0x1012
296#define WPS_ATTR_REQUEST_TYPE			0x103A
297#define WPS_ATTR_ASSOCIATION_STATE		0x1002
298#define WPS_ATTR_CONFIG_ERROR			0x1009
299#define WPS_ATTR_VENDOR_EXT			0x1049
300#define WPS_ATTR_SELECTED_REGISTRAR		0x1041
301
302/*	Value of WPS attribute "WPS_ATTR_DEVICE_NAME */
303#define WPS_MAX_DEVICE_NAME_LEN			32
304
305/*	Value of WPS Request Type Attribute */
306#define WPS_REQ_TYPE_ENROLLEE_INFO_ONLY		0x00
307#define WPS_REQ_TYPE_ENROLLEE_OPEN_8021X	0x01
308#define WPS_REQ_TYPE_REGISTRAR			0x02
309#define WPS_REQ_TYPE_WLAN_MANAGER_REGISTRAR	0x03
310
311/*	Value of WPS Response Type Attribute */
312#define WPS_RESPONSE_TYPE_INFO_ONLY		0x00
313#define WPS_RESPONSE_TYPE_8021X			0x01
314#define WPS_RESPONSE_TYPE_REGISTRAR		0x02
315#define WPS_RESPONSE_TYPE_AP			0x03
316
317/*	Value of WPS WiFi Simple Configuration State Attribute */
318#define WPS_WSC_STATE_NOT_CONFIG		0x01
319#define WPS_WSC_STATE_CONFIG			0x02
320
321/*	Value of WPS Version Attribute */
322#define WPS_VERSION_1				0x10
323
324/*	Value of WPS Configuration Method Attribute */
325#define WPS_CONFIG_METHOD_FLASH			0x0001
326#define WPS_CONFIG_METHOD_ETHERNET		0x0002
327#define WPS_CONFIG_METHOD_LABEL			0x0004
328#define WPS_CONFIG_METHOD_DISPLAY		0x0008
329#define WPS_CONFIG_METHOD_E_NFC			0x0010
330#define WPS_CONFIG_METHOD_I_NFC			0x0020
331#define WPS_CONFIG_METHOD_NFC			0x0040
332#define WPS_CONFIG_METHOD_PBC			0x0080
333#define WPS_CONFIG_METHOD_KEYPAD		0x0100
334#define WPS_CONFIG_METHOD_VPBC			0x0280
335#define WPS_CONFIG_METHOD_PPBC			0x0480
336#define WPS_CONFIG_METHOD_VDISPLAY		0x2008
337#define WPS_CONFIG_METHOD_PDISPLAY		0x4008
338
339/*	Value of Category ID of WPS Primary Device Type Attribute */
340#define WPS_PDT_CID_DISPLAYS			0x0007
341#define WPS_PDT_CID_MULIT_MEDIA			0x0008
342#define WPS_PDT_CID_RTK_WIDI			WPS_PDT_CID_MULIT_MEDIA
343
344/*	Value of Sub Category ID of WPS Primary Device Type Attribute */
345#define WPS_PDT_SCID_MEDIA_SERVER		0x0005
346#define WPS_PDT_SCID_RTK_DMP			WPS_PDT_SCID_MEDIA_SERVER
347
348/*	Value of Device Password ID */
349#define WPS_DPID_PIN				0x0000
350#define WPS_DPID_USER_SPEC			0x0001
351#define WPS_DPID_MACHINE_SPEC			0x0002
352#define WPS_DPID_REKEY				0x0003
353#define WPS_DPID_PBC				0x0004
354#define WPS_DPID_REGISTRAR_SPEC			0x0005
355
356/*	Value of WPS RF Bands Attribute */
357#define WPS_RF_BANDS_2_4_GHZ			0x01
358#define WPS_RF_BANDS_5_GHZ			0x02
359
360/*	Value of WPS Association State Attribute */
361#define WPS_ASSOC_STATE_NOT_ASSOCIATED		0x00
362#define WPS_ASSOC_STATE_CONNECTION_SUCCESS	0x01
363#define WPS_ASSOC_STATE_CONFIGURATION_FAILURE	0x02
364#define WPS_ASSOC_STATE_ASSOCIATION_FAILURE	0x03
365#define WPS_ASSOC_STATE_IP_FAILURE		0x04
366
367/*	P2P Public Action Frame ( Management Frame ) */
368#define	P2P_PUB_ACTION_ACTION			0x09
369
370/*	P2P Public Action Frame Type */
371#define	P2P_GO_NEGO_REQ				0
372#define	P2P_GO_NEGO_RESP			1
373#define	P2P_GO_NEGO_CONF			2
374#define	P2P_INVIT_REQ				3
375#define	P2P_INVIT_RESP				4
376#define	P2P_DEVDISC_REQ				5
377#define	P2P_DEVDISC_RESP			6
378#define	P2P_PROVISION_DISC_REQ			7
379#define	P2P_PROVISION_DISC_RESP			8
380
381/*	WPS Configuration Method */
382#define	WPS_CM_NONE					0x0000
383#define	WPS_CM_LABEL					0x0004
384#define	WPS_CM_DISPLYA					0x0008
385#define	WPS_CM_EXTERNAL_NFC_TOKEN			0x0010
386#define	WPS_CM_INTEGRATED_NFC_TOKEN			0x0020
387#define	WPS_CM_NFC_INTERFACE				0x0040
388#define	WPS_CM_PUSH_BUTTON				0x0080
389#define	WPS_CM_KEYPAD					0x0100
390#define	WPS_CM_SW_PUHS_BUTTON				0x0280
391#define	WPS_CM_HW_PUHS_BUTTON				0x0480
392#define	WPS_CM_SW_DISPLAY_PIN				0x2008
393#define	WPS_CM_LCD_DISPLAY_PIN				0x4008
394
395#endif /*  _WIFI_H_ */
396