driver_ralink.h 14 KB

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