driver_ralink.h revision 8d520ff1dc2da35cdca849e982051b86468016d8
1/*
2 * WPA Supplicant - driver_ralink exported functions
3 * Copyright (c) 2003-2005, Jouni Malinen <j@w1.fi>
4 * Copyright (c) 2007, Snowpin Lee <snowpin_lee@ralinktech.com.tw>
5 *
6 * This program is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License version 2 as
8 * published by the Free Software Foundation.
9 *
10 * Alternatively, this software may be distributed under the terms of BSD
11 * license.
12 *
13 * See README and COPYING for more details.
14 */
15
16// Ralink defined OIDs
17#if WIRELESS_EXT <= 11
18#ifndef SIOCDEVPRIVATE
19#define SIOCDEVPRIVATE                              0x8BE0
20#endif
21#define SIOCIWFIRSTPRIV								SIOCDEVPRIVATE
22#endif
23
24#define RT_PRIV_IOCTL								(SIOCIWFIRSTPRIV + 0x0E)
25#define RTPRIV_IOCTL_SET							(SIOCIWFIRSTPRIV + 0x02)
26
27// IEEE 802.11 OIDs  &  Ralink defined OIDs  ******
28
29// (RaConfig Set/QueryInform) ==>
30#define OID_GET_SET_TOGGLE							0x8000
31
32#define OID_802_11_ADD_WEP                          0x0112
33#define OID_802_11_REMOVE_WEP                       0x0113
34#define OID_802_11_DISASSOCIATE                     0x0114
35#define OID_802_11_PRIVACY_FILTER                   0x0118
36#define OID_802_11_ASSOCIATION_INFORMATION          0x011E
37#define OID_802_11_BSSID_LIST_SCAN                  0x0508
38#define OID_802_11_SSID                             0x0509
39#define OID_802_11_BSSID                            0x050A
40#define OID_802_11_WEP_STATUS                       0x0510
41#define OID_802_11_AUTHENTICATION_MODE              0x0511
42#define OID_802_11_INFRASTRUCTURE_MODE              0x0512
43#define OID_802_11_TX_POWER_LEVEL                   0x0517
44#define OID_802_11_REMOVE_KEY                       0x0519
45#define OID_802_11_ADD_KEY                          0x0520
46#define OID_802_11_DEAUTHENTICATION                 0x0526
47#define OID_802_11_DROP_UNENCRYPTED                 0x0527
48#define OID_802_11_BSSID_LIST                       0x0609
49#define OID_802_3_CURRENT_ADDRESS                   0x060A
50#define OID_SET_COUNTERMEASURES                     0x0616
51#define OID_802_11_SET_IEEE8021X                    0x0617	// For IEEE8021x mode
52#define OID_802_11_SET_IEEE8021X_REQUIRE_KEY        0x0618  // For DynamicWEP in IEEE802.1x mode
53#define OID_802_11_PMKID                            0x0620
54#define RT_OID_WPA_SUPPLICANT_SUPPORT               0x0621  // for trigger driver enable/disable wpa_supplicant support
55#define RT_OID_WE_VERSION_COMPILED                  0x0622
56#define RT_OID_NEW_DRIVER                           0x0623
57#define RT_OID_WPS_PROBE_REQ_IE						0x0625
58
59#define PACKED  __attribute__ ((packed))
60
61//wpa_supplicant event flags
62#define	RT_ASSOC_EVENT_FLAG                         0x0101
63#define	RT_DISASSOC_EVENT_FLAG                      0x0102
64#define	RT_REQIE_EVENT_FLAG                         0x0103
65#define	RT_RESPIE_EVENT_FLAG                        0x0104
66#define	RT_ASSOCINFO_EVENT_FLAG                     0x0105
67#define RT_PMKIDCAND_FLAG                           0x0106
68#define RT_INTERFACE_DOWN                           0x0107
69#define RT_INTERFACE_UP                           	0x0108
70
71//
72// IEEE 802.11 Structures and definitions
73//
74// new types for Media Specific Indications
75
76#ifndef ULONG
77#define CHAR            char
78#define INT             int
79#define SHORT           int
80#define UINT            u32
81#undef  ULONG
82//#define ULONG           u32
83#define ULONG           unsigned long /* 32-bit in 32-bit CPU or 64-bit in 64-bit CPU */
84#define USHORT          unsigned short
85#define UCHAR           unsigned char
86
87#define uint32		u32
88#define uint8		u8
89
90
91#define BOOLEAN         u8
92//#define LARGE_INTEGER s64
93#define VOID            void
94#define LONG            long
95#define LONGLONG        s64
96#define ULONGLONG       u64
97typedef VOID            *PVOID;
98typedef CHAR            *PCHAR;
99typedef UCHAR           *PUCHAR;
100typedef USHORT          *PUSHORT;
101typedef LONG            *PLONG;
102typedef ULONG           *PULONG;
103
104typedef union _LARGE_INTEGER {
105    struct {
106        ULONG LowPart;
107        LONG HighPart;
108    }vv;
109    struct {
110        ULONG LowPart;
111        LONG HighPart;
112    } u;
113    s64 QuadPart;
114} LARGE_INTEGER;
115
116#endif
117
118#define NDIS_802_11_LENGTH_SSID         32
119#define NDIS_802_11_LENGTH_RATES        8
120#define NDIS_802_11_LENGTH_RATES_EX     16
121#define MAX_LEN_OF_SSID                 32
122#define MAC_ADDR_LEN                    6
123
124typedef UCHAR   NDIS_802_11_MAC_ADDRESS[6];
125
126// mask for authentication/integrity fields
127#define NDIS_802_11_AUTH_REQUEST_AUTH_FIELDS        0x0f
128
129#define NDIS_802_11_AUTH_REQUEST_REAUTH             0x01
130#define NDIS_802_11_AUTH_REQUEST_KEYUPDATE          0x02
131#define NDIS_802_11_AUTH_REQUEST_PAIRWISE_ERROR     0x06
132#define NDIS_802_11_AUTH_REQUEST_GROUP_ERROR        0x0E
133
134// Added new types for OFDM 5G and 2.4G
135typedef enum _NDIS_802_11_NETWORK_TYPE
136{
137    Ndis802_11FH,
138    Ndis802_11DS,
139    Ndis802_11OFDM5,
140    Ndis802_11OFDM24,
141    Ndis802_11Automode,
142    Ndis802_11NetworkTypeMax    // not a real type, defined as an upper bound
143} NDIS_802_11_NETWORK_TYPE, *PNDIS_802_11_NETWORK_TYPE;
144
145//
146// Received Signal Strength Indication
147//
148typedef LONG    NDIS_802_11_RSSI;           // in dBm
149
150typedef struct _NDIS_802_11_CONFIGURATION_FH
151{
152   ULONG           Length;            // Length of structure
153   ULONG           HopPattern;        // As defined by 802.11, MSB set
154   ULONG           HopSet;            // to one if non-802.11
155   ULONG           DwellTime;         // units are Kusec
156} NDIS_802_11_CONFIGURATION_FH, *PNDIS_802_11_CONFIGURATION_FH;
157
158typedef struct _NDIS_802_11_CONFIGURATION
159{
160   ULONG                           Length;             // Length of structure
161   ULONG                           BeaconPeriod;       // units are Kusec
162   ULONG                           ATIMWindow;         // units are Kusec
163   ULONG                           DSConfig;           // Frequency, units are kHz
164   NDIS_802_11_CONFIGURATION_FH    FHConfig;
165} NDIS_802_11_CONFIGURATION, *PNDIS_802_11_CONFIGURATION;
166
167typedef  ULONG  NDIS_802_11_KEY_INDEX;
168typedef ULONGLONG   NDIS_802_11_KEY_RSC;
169
170// Key mapping keys require a BSSID
171typedef struct _NDIS_802_11_KEY
172{
173    UINT           Length;             // Length of this structure
174    UINT           KeyIndex;
175    UINT           KeyLength;          // length of key in bytes
176    NDIS_802_11_MAC_ADDRESS BSSID;
177    NDIS_802_11_KEY_RSC KeyRSC;
178    UCHAR           KeyMaterial[1];     // variable length depending on above field
179} NDIS_802_11_KEY, *PNDIS_802_11_KEY;
180
181typedef struct _NDIS_802_11_REMOVE_KEY
182{
183    UINT                   Length;        // Length of this structure
184    UINT                   KeyIndex;
185    NDIS_802_11_MAC_ADDRESS BSSID;
186} NDIS_802_11_REMOVE_KEY, *PNDIS_802_11_REMOVE_KEY;
187
188typedef struct PACKED _NDIS_802_11_WEP
189{
190   UINT     Length;        // Length of this structure
191   UINT           KeyIndex;           // 0 is the per-client key, 1-N are the
192                                        // global keys
193   UINT     KeyLength;     // length of key in bytes
194   UCHAR     KeyMaterial[1];// variable length depending on above field
195} NDIS_802_11_WEP, *PNDIS_802_11_WEP;
196
197
198typedef enum _NDIS_802_11_NETWORK_INFRASTRUCTURE
199{
200   Ndis802_11IBSS,
201   Ndis802_11Infrastructure,
202   Ndis802_11AutoUnknown,
203   Ndis802_11InfrastructureMax     // Not a real value, defined as upper bound
204} NDIS_802_11_NETWORK_INFRASTRUCTURE, *PNDIS_802_11_NETWORK_INFRASTRUCTURE;
205
206// PMKID Structures
207typedef UCHAR   NDIS_802_11_PMKID_VALUE[16];
208
209typedef struct _BSSID_INFO
210{
211	NDIS_802_11_MAC_ADDRESS BSSID;
212	NDIS_802_11_PMKID_VALUE PMKID;
213} BSSID_INFO, *PBSSID_INFO;
214
215typedef struct _NDIS_802_11_PMKID
216{
217	ULONG Length;
218	ULONG BSSIDInfoCount;
219	BSSID_INFO BSSIDInfo[1];
220} NDIS_802_11_PMKID, *PNDIS_802_11_PMKID;
221
222//Added new types for PMKID Candidate lists.
223typedef struct _PMKID_CANDIDATE {
224	NDIS_802_11_MAC_ADDRESS BSSID;
225	ULONG Flags;
226} PMKID_CANDIDATE, *PPMKID_CANDIDATE;
227
228typedef struct _NDIS_802_11_PMKID_CANDIDATE_LIST
229{
230	ULONG Version;       // Version of the structure
231	ULONG NumCandidates; // No. of pmkid candidates
232	PMKID_CANDIDATE CandidateList[1];
233} NDIS_802_11_PMKID_CANDIDATE_LIST, *PNDIS_802_11_PMKID_CANDIDATE_LIST;
234
235//Flags for PMKID Candidate list structure
236#define NDIS_802_11_PMKID_CANDIDATE_PREAUTH_ENABLED	0x01
237
238// Add new authentication modes
239typedef enum _NDIS_802_11_AUTHENTICATION_MODE
240{
241   Ndis802_11AuthModeOpen,
242   Ndis802_11AuthModeShared,
243   Ndis802_11AuthModeAutoSwitch,
244   Ndis802_11AuthModeWPA,
245   Ndis802_11AuthModeWPAPSK,
246   Ndis802_11AuthModeWPANone,
247   Ndis802_11AuthModeWPA2,
248   Ndis802_11AuthModeWPA2PSK,
249   Ndis802_11AuthModeMax           // Not a real mode, defined as upper bound
250} NDIS_802_11_AUTHENTICATION_MODE, *PNDIS_802_11_AUTHENTICATION_MODE;
251
252typedef UCHAR  NDIS_802_11_RATES[NDIS_802_11_LENGTH_RATES];        // Set of 8 data rates
253typedef UCHAR  NDIS_802_11_RATES_EX[NDIS_802_11_LENGTH_RATES_EX];  // Set of 16 data rates
254
255typedef struct PACKED _NDIS_802_11_SSID
256{
257    INT   SsidLength;         // length of SSID field below, in bytes;
258                                // this can be zero.
259    UCHAR   Ssid[NDIS_802_11_LENGTH_SSID];           // SSID information field
260} NDIS_802_11_SSID, *PNDIS_802_11_SSID;
261
262
263typedef struct PACKED _NDIS_WLAN_BSSID
264{
265   ULONG                               Length;     // Length of this structure
266   NDIS_802_11_MAC_ADDRESS             MacAddress; // BSSID
267   UCHAR                               Reserved[2];
268   NDIS_802_11_SSID                    Ssid;       // SSID
269   ULONG                               Privacy;    // WEP encryption requirement
270    NDIS_802_11_RSSI                    Rssi;               // receive signal
271                                                            // strength in dBm
272   NDIS_802_11_NETWORK_TYPE            NetworkTypeInUse;
273   NDIS_802_11_CONFIGURATION           Configuration;
274   NDIS_802_11_NETWORK_INFRASTRUCTURE  InfrastructureMode;
275   NDIS_802_11_RATES                   SupportedRates;
276} NDIS_WLAN_BSSID, *PNDIS_WLAN_BSSID;
277
278typedef struct PACKED _NDIS_802_11_BSSID_LIST
279{
280   UINT             NumberOfItems;      // in list below, at least 1
281   NDIS_WLAN_BSSID Bssid[1];
282} NDIS_802_11_BSSID_LIST, *PNDIS_802_11_BSSID_LIST;
283
284// Added Capabilities, IELength and IEs for each BSSID
285typedef struct PACKED _NDIS_WLAN_BSSID_EX
286{
287    ULONG                               Length;             // Length of this structure
288    NDIS_802_11_MAC_ADDRESS             MacAddress;         // BSSID
289    UCHAR                               Reserved[2];
290    NDIS_802_11_SSID                    Ssid;               // SSID
291    UINT                                Privacy;            // WEP encryption requirement
292    NDIS_802_11_RSSI                    Rssi;               // receive signal
293                                                            // strength in dBm
294    NDIS_802_11_NETWORK_TYPE            NetworkTypeInUse;
295    NDIS_802_11_CONFIGURATION           Configuration;
296    NDIS_802_11_NETWORK_INFRASTRUCTURE  InfrastructureMode;
297    NDIS_802_11_RATES_EX                SupportedRates;
298    ULONG                               IELength;
299    UCHAR                               IEs[1];
300} NDIS_WLAN_BSSID_EX, *PNDIS_WLAN_BSSID_EX;
301
302typedef struct PACKED _NDIS_802_11_BSSID_LIST_EX
303{
304    UINT                   NumberOfItems;      // in list below, at least 1
305    NDIS_WLAN_BSSID_EX      Bssid[1];
306} NDIS_802_11_BSSID_LIST_EX, *PNDIS_802_11_BSSID_LIST_EX;
307
308typedef struct PACKED _NDIS_802_11_FIXED_IEs
309{
310    UCHAR Timestamp[8];
311    USHORT BeaconInterval;
312    USHORT Capabilities;
313} NDIS_802_11_FIXED_IEs, *PNDIS_802_11_FIXED_IEs;
314
315// Added new encryption types
316// Also aliased typedef to new name
317typedef enum _NDIS_802_11_WEP_STATUS
318{
319   Ndis802_11WEPEnabled,
320   Ndis802_11Encryption1Enabled = Ndis802_11WEPEnabled,
321   Ndis802_11WEPDisabled,
322   Ndis802_11EncryptionDisabled = Ndis802_11WEPDisabled,
323   Ndis802_11WEPKeyAbsent,
324   Ndis802_11Encryption1KeyAbsent = Ndis802_11WEPKeyAbsent,
325   Ndis802_11WEPNotSupported,
326   Ndis802_11EncryptionNotSupported = Ndis802_11WEPNotSupported,
327   Ndis802_11Encryption2Enabled,
328   Ndis802_11Encryption2KeyAbsent,
329   Ndis802_11Encryption3Enabled,
330   Ndis802_11Encryption3KeyAbsent
331} NDIS_802_11_WEP_STATUS, *PNDIS_802_11_WEP_STATUS,
332  NDIS_802_11_ENCRYPTION_STATUS, *PNDIS_802_11_ENCRYPTION_STATUS;
333
334typedef enum _NDIS_802_11_RELOAD_DEFAULTS
335{
336   Ndis802_11ReloadWEPKeys
337} NDIS_802_11_RELOAD_DEFAULTS, *PNDIS_802_11_RELOAD_DEFAULTS;
338
339#define NDIS_802_11_AI_REQFI_CAPABILITIES      1
340#define NDIS_802_11_AI_REQFI_LISTENINTERVAL    2
341#define NDIS_802_11_AI_REQFI_CURRENTAPADDRESS  4
342
343#define NDIS_802_11_AI_RESFI_CAPABILITIES      1
344#define NDIS_802_11_AI_RESFI_STATUSCODE        2
345#define NDIS_802_11_AI_RESFI_ASSOCIATIONID     4
346
347typedef struct _NDIS_802_11_AI_REQFI
348{
349    USHORT Capabilities;
350    USHORT ListenInterval;
351    NDIS_802_11_MAC_ADDRESS  CurrentAPAddress;
352} NDIS_802_11_AI_REQFI, *PNDIS_802_11_AI_REQFI;
353
354typedef struct _NDIS_802_11_AI_RESFI
355{
356    USHORT Capabilities;
357    USHORT StatusCode;
358    USHORT AssociationId;
359} NDIS_802_11_AI_RESFI, *PNDIS_802_11_AI_RESFI;
360
361typedef struct _NDIS_802_11_ASSOCIATION_INFORMATION
362{
363    ULONG                   Length;
364    USHORT                  AvailableRequestFixedIEs;
365    NDIS_802_11_AI_REQFI    RequestFixedIEs;
366    ULONG                   RequestIELength;
367    ULONG                   OffsetRequestIEs;
368    USHORT                  AvailableResponseFixedIEs;
369    NDIS_802_11_AI_RESFI    ResponseFixedIEs;
370    ULONG                   ResponseIELength;
371    ULONG                   OffsetResponseIEs;
372} NDIS_802_11_ASSOCIATION_INFORMATION, *PNDIS_802_11_ASSOCIATION_INFORMATION;
373
374struct ndis_pmkid_entry {
375	struct ndis_pmkid_entry *next;
376	u8 bssid[ETH_ALEN];
377	u8 pmkid[16];
378};
379
380typedef struct _MLME_DEAUTH_REQ_STRUCT {
381    UCHAR        Addr[MAC_ADDR_LEN];
382    USHORT       Reason;
383} MLME_DEAUTH_REQ_STRUCT, *PMLME_DEAUTH_REQ_STRUCT;
384