]> git.karo-electronics.de Git - karo-tx-linux.git/blob - drivers/staging/rtl8723au/include/wifi.h
staging: rtl8723au: cfg80211_rtw_mgmt_tx(): type is always -1
[karo-tx-linux.git] / drivers / staging / rtl8723au / include / wifi.h
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
26 enum 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
33 enum 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
69 #define SetToDs(pbuf)   \
70         (*(__le16 *)(pbuf) |= cpu_to_le16(IEEE80211_FCTL_TODS))
71
72 #define SetFrDs(pbuf)   \
73         (*(__le16 *)(pbuf) |= cpu_to_le16(IEEE80211_FCTL_FROMDS))
74
75 #define SetPwrMgt(pbuf) \
76         (*(__le16 *)(pbuf) |= cpu_to_le16(IEEE80211_FCTL_PM))
77
78 #define SetMData(pbuf)  \
79         (*(__le16 *)(pbuf) |= cpu_to_le16(IEEE80211_FCTL_MOREDATA))
80
81 #define SetPrivacy(pbuf)        \
82         (*(__le16 *)(pbuf) |= cpu_to_le16(IEEE80211_FCTL_PROTECTED))
83
84 #define SetFrameType(pbuf, type)        \
85         do {    \
86                 *(__le16 *)(pbuf) &= __constant_cpu_to_le16(~(BIT(3) | BIT(2))); \
87                 *(__le16 *)(pbuf) |= __constant_cpu_to_le16(type); \
88         } while (0)
89
90 #define SetFrameSubType(pbuf, type) \
91         do {    \
92                 *(__le16 *)(pbuf) &= cpu_to_le16(~(BIT(7) | BIT(6) | BIT(5) | BIT(4) | BIT(3) | BIT(2))); \
93                 *(__le16 *)(pbuf) |= cpu_to_le16(type); \
94         } while (0)
95
96 #define SetFragNum(pbuf, num) \
97         do {    \
98                 *(unsigned short *)((unsigned long)(pbuf) + 22) = \
99                         ((*(unsigned short *)((unsigned long)(pbuf) + 22)) & le16_to_cpu(~(0x000f))) | \
100                         cpu_to_le16(0x0f & (num));     \
101         } while (0)
102
103 #define SetSeqNum(pbuf, num) \
104         do {    \
105                 *(__le16 *)((size_t)(pbuf) + 22) = \
106                         ((*(__le16 *)((size_t)(pbuf) + 22)) & cpu_to_le16((unsigned short)0x000f)) | \
107                         cpu_to_le16((unsigned short)(0xfff0 & (num << 4))); \
108         } while (0)
109
110 #define SetDuration(pbuf, dur) \
111         (*(__le16 *)((unsigned long)(pbuf) + 2) =               \
112          cpu_to_le16(0xffff & (dur)))
113
114 #define SetPriority(pbuf, tid)  \
115         (*(__le16 *)(pbuf) |= cpu_to_le16(tid & 0xf))
116
117 #define SetEOSP(pbuf, eosp)     \
118         (*(__le16 *)(pbuf) |= cpu_to_le16((eosp & 1) << 4))
119
120 #define SetAckpolicy(pbuf, ack) \
121         (*(__le16 *)(pbuf) |= cpu_to_le16((ack & 3) << 5))
122
123 #define _ASOCREQ_IE_OFFSET_             4       /*  excluding wlan_hdr */
124 #define _ASOCRSP_IE_OFFSET_             6
125 #define _REASOCREQ_IE_OFFSET_           10
126 #define _REASOCRSP_IE_OFFSET_           6
127 #define _PROBEREQ_IE_OFFSET_            0
128 #define _PROBERSP_IE_OFFSET_            12
129 #define _AUTH_IE_OFFSET_                6
130 #define _DEAUTH_IE_OFFSET_              0
131 #define _BEACON_IE_OFFSET_              12
132 #define _PUBLIC_ACTION_IE_OFFSET_       8
133
134 #define _FIXED_IE_LENGTH_               _BEACON_IE_OFFSET_
135
136
137 #define EID_BSSIntolerantChlReport      73
138
139 /* ---------------------------------------------------------------------------
140                                         Below is the fixed elements...
141 -----------------------------------------------------------------------------*/
142 #define _AUTH_ALGM_NUM_         2
143 #define _AUTH_SEQ_NUM_          2
144 #define _BEACON_ITERVAL_        2
145 #define _CAPABILITY_            2
146 #define _CURRENT_APADDR_        6
147 #define _LISTEN_INTERVAL_       2
148 #define _ASOC_ID_               2
149 #define _STATUS_CODE_           2
150 #define _TIMESTAMP_             8
151
152 /*-----------------------------------------------------------------------------
153                                 Below is the definition for WMM
154 ------------------------------------------------------------------------------*/
155 #define _WMM_IE_Length_                         7  /*  for WMM STA */
156 #define _WMM_Para_Element_Length_               24
157
158
159 /*-----------------------------------------------------------------------------
160                                 Below is the definition for 802.11n
161 ------------------------------------------------------------------------------*/
162
163 /* struct rtw_ieee80211_ht_cap - HT additional information
164  *
165  * This structure refers to "HT information element" as
166  * described in 802.11n draft section 7.3.2.53
167  */
168 struct ieee80211_ht_addt_info {
169         unsigned char   control_chan;
170         unsigned char   ht_param;
171         unsigned short  operation_mode;
172         unsigned short  stbc_param;
173         unsigned char   basic_set[16];
174 } __packed;
175
176 struct HT_caps_element {
177         union {
178                 struct {
179                         unsigned short  HT_caps_info;
180                         unsigned char   AMPDU_para;
181                         unsigned char   MCS_rate[16];
182                         unsigned short  HT_ext_caps;
183                         unsigned int    Beamforming_caps;
184                         unsigned char   ASEL_caps;
185                 } HT_cap_element;
186                 unsigned char HT_cap[26];
187         } u;
188 } __packed;
189
190 struct HT_info_element {
191         unsigned char   primary_channel;
192         unsigned char   infos[5];
193         unsigned char   MCS_rate[16];
194 }  __packed;
195
196 struct AC_param {
197         unsigned char           ACI_AIFSN;
198         unsigned char           CW;
199         unsigned short  TXOP_limit;
200 }  __packed;
201
202 struct WMM_para_element {
203         unsigned char           QoS_info;
204         unsigned char           reserved;
205         struct AC_param ac_param[4];
206 }  __packed;
207
208 struct ADDBA_request {
209         unsigned char           dialog_token;
210         unsigned short  BA_para_set;
211         unsigned short  BA_timeout_value;
212         unsigned short  BA_starting_seqctrl;
213 }  __packed;
214
215
216 /*      ===============WPS Section=============== */
217 /*      WPS attribute ID */
218 #define WPS_ATTR_VER1                           0x104A
219 #define WPS_ATTR_SIMPLE_CONF_STATE              0x1044
220 #define WPS_ATTR_RESP_TYPE                      0x103B
221 #define WPS_ATTR_UUID_E                         0x1047
222 #define WPS_ATTR_MANUFACTURER                   0x1021
223 #define WPS_ATTR_MODEL_NAME                     0x1023
224 #define WPS_ATTR_MODEL_NUMBER                   0x1024
225 #define WPS_ATTR_SERIAL_NUMBER                  0x1042
226 #define WPS_ATTR_PRIMARY_DEV_TYPE               0x1054
227 #define WPS_ATTR_SEC_DEV_TYPE_LIST              0x1055
228 #define WPS_ATTR_DEVICE_NAME                    0x1011
229 #define WPS_ATTR_CONF_METHOD                    0x1008
230 #define WPS_ATTR_RF_BANDS                       0x103C
231 #define WPS_ATTR_DEVICE_PWID                    0x1012
232 #define WPS_ATTR_REQUEST_TYPE                   0x103A
233 #define WPS_ATTR_ASSOCIATION_STATE              0x1002
234 #define WPS_ATTR_CONFIG_ERROR                   0x1009
235 #define WPS_ATTR_VENDOR_EXT                     0x1049
236 #define WPS_ATTR_SELECTED_REGISTRAR             0x1041
237
238 /*      WPS Configuration Method */
239 #define WPS_CM_NONE                                     0x0000
240 #define WPS_CM_LABEL                                    0x0004
241 #define WPS_CM_DISPLYA                                  0x0008
242 #define WPS_CM_EXTERNAL_NFC_TOKEN                       0x0010
243 #define WPS_CM_INTEGRATED_NFC_TOKEN                     0x0020
244 #define WPS_CM_NFC_INTERFACE                            0x0040
245 #define WPS_CM_PUSH_BUTTON                              0x0080
246 #define WPS_CM_KEYPAD                                   0x0100
247 #define WPS_CM_SW_PUHS_BUTTON                           0x0280
248 #define WPS_CM_HW_PUHS_BUTTON                           0x0480
249 #define WPS_CM_SW_DISPLAY_PIN                           0x2008
250 #define WPS_CM_LCD_DISPLAY_PIN                          0x4008
251
252 #endif /*  _WIFI_H_ */