WifiConnectionMgrDxe.h 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332
  1. /** @file
  2. The miscellaneous structure definitions for WiFi connection driver.
  3. Copyright (c) 2019 - 2022, Intel Corporation. All rights reserved.<BR>
  4. SPDX-License-Identifier: BSD-2-Clause-Patent
  5. **/
  6. #ifndef __EFI_WIFI_MGR_DXE_H__
  7. #define __EFI_WIFI_MGR_DXE_H__
  8. #include <Uefi.h>
  9. //
  10. // Libraries
  11. //
  12. #include <Library/UefiBootServicesTableLib.h>
  13. #include <Library/UefiRuntimeServicesTableLib.h>
  14. #include <Library/MemoryAllocationLib.h>
  15. #include <Library/BaseMemoryLib.h>
  16. #include <Library/BaseLib.h>
  17. #include <Library/UefiLib.h>
  18. #include <Library/DevicePathLib.h>
  19. #include <Library/DebugLib.h>
  20. #include <Library/HiiLib.h>
  21. #include <Library/NetLib.h>
  22. #include <Library/PrintLib.h>
  23. #include <Library/UefiHiiServicesLib.h>
  24. #include <Library/FileExplorerLib.h>
  25. //
  26. // UEFI Driver Model Protocols
  27. //
  28. #include <Protocol/DriverBinding.h>
  29. #include <Protocol/HiiDatabase.h>
  30. #include <Protocol/HiiPackageList.h>
  31. #include <Protocol/ComponentName2.h>
  32. #include <Protocol/ComponentName.h>
  33. //
  34. // Consumed Protocols
  35. //
  36. #include <Protocol/WiFi2.h>
  37. #include <Protocol/AdapterInformation.h>
  38. #include <Protocol/Supplicant.h>
  39. #include <Protocol/SimpleNetwork.h>
  40. #include <Protocol/SimpleFileSystem.h>
  41. #include <Protocol/EapConfiguration.h>
  42. //
  43. // Produced Protocols
  44. //
  45. #include <Protocol/HiiConfigAccess.h>
  46. //
  47. // Guids
  48. //
  49. #include <Guid/ImageAuthentication.h>
  50. #include <Guid/MdeModuleHii.h>
  51. #include <Guid/WifiConnectionManagerConfigHii.h>
  52. //
  53. // NvData struct definition
  54. //
  55. #include "WifiConnectionMgrConfigNVDataStruct.h"
  56. #include "WifiConnectionMgrConfig.h"
  57. #include "EapContext.h"
  58. #include "WifiConnectionMgrConfigHii.h"
  59. //
  60. // Driver Version
  61. //
  62. #define WIFI_MGR_DXE_VERSION 0xb
  63. #define OUI_IEEE_80211I 0xAC0F00
  64. typedef enum {
  65. Ieee80211PairwiseCipherSuiteUseGroupCipherSuite = 0,
  66. Ieee80211PairwiseCipherSuiteWEP40 = 1,
  67. Ieee80211PairwiseCipherSuiteTKIP = 2,
  68. Ieee80211PairwiseCipherSuiteCCMP = 4,
  69. Ieee80211PairwiseCipherSuiteWEP104 = 5,
  70. Ieee80211PairwiseCipherSuiteBIP = 6,
  71. Ieee80211PairwiseCipherSuiteGCMP = 8,
  72. Ieee80211PairwiseCipherSuiteGCMP256 = 9,
  73. // ...
  74. } IEEE_80211_PAIRWISE_CIPHER_SUITE;
  75. #define IEEE_80211_PAIRWISE_CIPHER_SUITE_USE_GROUP (OUI_IEEE_80211I | (Ieee80211PairwiseCipherSuiteUseGroupCipherSuite << 24))
  76. #define IEEE_80211_PAIRWISE_CIPHER_SUITE_WEP40 (OUI_IEEE_80211I | (Ieee80211PairwiseCipherSuiteWEP40 << 24))
  77. #define IEEE_80211_PAIRWISE_CIPHER_SUITE_TKIP (OUI_IEEE_80211I | (Ieee80211PairwiseCipherSuiteTKIP << 24))
  78. #define IEEE_80211_PAIRWISE_CIPHER_SUITE_CCMP (OUI_IEEE_80211I | (Ieee80211PairwiseCipherSuiteCCMP << 24))
  79. #define IEEE_80211_PAIRWISE_CIPHER_SUITE_WEP104 (OUI_IEEE_80211I | (Ieee80211PairwiseCipherSuiteWEP104 << 24))
  80. #define IEEE_80211_PAIRWISE_CIPHER_SUITE_BIP (OUI_IEEE_80211I | (Ieee80211PairwiseCipherSuiteBIP << 24))
  81. #define IEEE_80211_PAIRWISE_CIPHER_SUITE_GCMP (OUI_IEEE_80211I | (Ieee80211PairwiseCipherSuiteGCMP << 24))
  82. #define IEEE_80211_PAIRWISE_CIPHER_SUITE_GCMP256 (OUI_IEEE_80211I | (Ieee80211PairwiseCipherSuiteGCMP256 << 24))
  83. typedef enum {
  84. Ieee80211AkmSuite8021XOrPMKSA = 1,
  85. Ieee80211AkmSuitePSK = 2,
  86. Ieee80211AkmSuite8021XOrPMKSASHA256 = 5,
  87. Ieee80211AkmSuitePSKSHA256 = 6,
  88. Ieee80211AkmSuiteSAE = 8,
  89. Ieee80211AkmSuite8021XSuiteB = 11,
  90. Ieee80211AkmSuite8021XSuiteB192 = 12,
  91. Ieee80211AkmSuiteOWE = 18,
  92. // ...
  93. } IEEE_80211_AKM_SUITE;
  94. #define IEEE_80211_AKM_SUITE_8021X_OR_PMKSA (OUI_IEEE_80211I | (Ieee80211AkmSuite8021XOrPMKSA << 24))
  95. #define IEEE_80211_AKM_SUITE_PSK (OUI_IEEE_80211I | (Ieee80211AkmSuitePSK << 24))
  96. #define IEEE_80211_AKM_SUITE_8021X_OR_PMKSA_SHA256 (OUI_IEEE_80211I | (Ieee80211AkmSuite8021XOrPMKSASHA256 << 24))
  97. #define IEEE_80211_AKM_SUITE_PSK_SHA256 (OUI_IEEE_80211I | (Ieee80211AkmSuitePSKSHA256 << 24))
  98. #define IEEE_80211_AKM_SUITE_SAE (OUI_IEEE_80211I | (Ieee80211AkmSuiteSAE << 24))
  99. #define IEEE_80211_AKM_SUITE_8021X_SUITE_B (OUI_IEEE_80211I | (Ieee80211AkmSuite8021XSuiteB << 24))
  100. #define IEEE_80211_AKM_SUITE_8021X_SUITE_B192 (OUI_IEEE_80211I | (Ieee80211AkmSuite8021XSuiteB192 << 24))
  101. #define IEEE_80211_AKM_SUITE_OWE (OUI_IEEE_80211I | (Ieee80211AkmSuiteOWE << 24))
  102. //
  103. // Protocol instances
  104. //
  105. extern EFI_DRIVER_BINDING_PROTOCOL gWifiMgrDxeDriverBinding;
  106. extern EFI_COMPONENT_NAME2_PROTOCOL gWifiMgrDxeComponentName2;
  107. extern EFI_COMPONENT_NAME_PROTOCOL gWifiMgrDxeComponentName;
  108. extern EFI_HII_CONFIG_ACCESS_PROTOCOL gWifiMgrDxeHiiConfigAccess;
  109. //
  110. // Private Context Data Structure
  111. //
  112. typedef enum {
  113. WifiMgrDisconnected,
  114. WifiMgrConnectingToAp,
  115. WifiMgrConnectedToAp,
  116. WifiMgrDisconnectingToAp,
  117. WifiMgrConnectStateMaximum
  118. } WIFI_MGR_CONNECT_STATE;
  119. typedef enum {
  120. WifiMgrScanFinished,
  121. WifiMgrScanning,
  122. WifiMgrScanStateMaximum
  123. } WIFI_MGR_SCAN_STATE;
  124. #define WIFI_SCAN_FREQUENCY 30
  125. typedef struct _WIFI_MGR_SUPPORTED_SUITES {
  126. EFI_80211_AKM_SUITE_SELECTOR *SupportedAKMSuites;
  127. EFI_80211_CIPHER_SUITE_SELECTOR *SupportedSwCipherSuites;
  128. EFI_80211_CIPHER_SUITE_SELECTOR *SupportedHwCipherSuites;
  129. } WIFI_MGR_SUPPORTED_SUITES;
  130. #define EFI_WIFIMGR_PRIVATE_GUID \
  131. { \
  132. 0x99b7c019, 0x4789, 0x4829, { 0xa7, 0xbd, 0x0d, 0x4b, 0xaa, 0x62, 0x28, 0x72 } \
  133. }
  134. typedef struct _WIFI_MGR_PRIVATE_DATA WIFI_MGR_PRIVATE_DATA;
  135. typedef struct _WIFI_MGR_PRIVATE_PROTOCOL {
  136. UINT32 Reserved;
  137. } WIFI_MGR_PRIVATE_PROTOCOL;
  138. typedef struct _WIFI_MGR_FILE_CONTEXT {
  139. EFI_FILE_HANDLE FHandle;
  140. UINT16 *FileName;
  141. } WIFI_MGR_FILE_CONTEXT;
  142. typedef enum {
  143. FileTypeCACert,
  144. FileTypeClientCert,
  145. FileTypeMax
  146. } WIFI_MGR_FILE_TYPE;
  147. typedef struct {
  148. UINT32 Signature;
  149. EFI_HANDLE DriverHandle;
  150. EFI_HANDLE ControllerHandle;
  151. EFI_EVENT TickTimer;
  152. WIFI_MGR_PRIVATE_DATA *Private;
  153. //
  154. // Pointers to consumed protocols
  155. //
  156. EFI_WIRELESS_MAC_CONNECTION_II_PROTOCOL *Wmp;
  157. EFI_SUPPLICANT_PROTOCOL *Supplicant;
  158. EFI_EAP_CONFIGURATION_PROTOCOL *EapConfig;
  159. //
  160. // Produced protocols
  161. //
  162. WIFI_MGR_PRIVATE_PROTOCOL WifiMgrIdentifier;
  163. //
  164. // Private functions and data fields
  165. //
  166. LIST_ENTRY Link; // Link to the NicList in global private data structure.
  167. UINT32 NicIndex;
  168. EFI_80211_MAC_ADDRESS MacAddress;
  169. WIFI_MGR_SUPPORTED_SUITES SupportedSuites;
  170. EFI_ADAPTER_INFO_MEDIA_STATE LastLinkState;
  171. //
  172. // The network is currently connected, connecting or disconnecting.
  173. // Only one network can be operated at one time.
  174. //
  175. WIFI_MGR_NETWORK_PROFILE *CurrentOperateNetwork;
  176. WIFI_MGR_NETWORK_PROFILE *ConnectPendingNetwork;
  177. BOOLEAN HasDisconnectPendingNetwork;
  178. //
  179. // Profile related data fields
  180. //
  181. LIST_ENTRY ProfileList; // List of WIFI_MGR_NETWORK_PROFILE
  182. UINT32 AvailableCount;
  183. UINT32 MaxProfileIndex;
  184. WIFI_MGR_NETWORK_PROFILE *UserSelectedProfile;
  185. //
  186. // Data fields for Hii functionlity
  187. //
  188. BOOLEAN OneTimeScanRequest;
  189. BOOLEAN OneTimeConnectRequest;
  190. BOOLEAN OneTimeDisconnectRequest;
  191. WIFI_MGR_SCAN_STATE ScanState;
  192. UINTN ScanTickTime;
  193. WIFI_MGR_CONNECT_STATE ConnectState;
  194. BOOLEAN ConnectStateChanged;
  195. } WIFI_MGR_DEVICE_DATA;
  196. #define WIFI_MGR_DEVICE_DATA_SIGNATURE SIGNATURE_32 ('W','M','D','D')
  197. #define WIFI_MGR_DEVICE_DATA_FROM_IDENTIFIER(Identifier) \
  198. CR ( \
  199. Identifier, \
  200. WIFI_MGR_DEVICE_DATA, \
  201. WifiMgrIdentifier, \
  202. WIFI_MGR_DEVICE_DATA_SIGNATURE \
  203. )
  204. typedef struct {
  205. UINT32 Signature;
  206. LIST_ENTRY Link;
  207. CHAR16 SSId[SSID_STORAGE_SIZE];
  208. } WIFI_HIDDEN_NETWORK_DATA;
  209. #define WIFI_MGR_HIDDEN_NETWORK_SIGNATURE SIGNATURE_32 ('W','M','H','N')
  210. #define WIFI_MGR_HIDDEN_NETWORK_FROM_IDENTIFIER(Identifier) \
  211. CR ( \
  212. Identifier, \
  213. WIFI_HIDDEN_NETWORK_DATA, \
  214. WifiMgrIdentifier, \
  215. WIFI_MGR_HIDDEN_NETWORK_SIGNATURE \
  216. )
  217. //
  218. // Global private data struct
  219. //
  220. struct _WIFI_MGR_PRIVATE_DATA {
  221. UINT32 Signature;
  222. EFI_HANDLE DriverHandle;
  223. EFI_HII_HANDLE RegisteredHandle;
  224. EFI_HII_CONFIG_ACCESS_PROTOCOL ConfigAccess;
  225. UINT32 NicCount;
  226. LIST_ENTRY NicList;
  227. WIFI_MGR_DEVICE_DATA *CurrentNic;
  228. //
  229. // Data fields for Hii functionlity
  230. //
  231. EFI_EVENT NetworkListRefreshEvent; // Event to refresh the network list form
  232. EFI_EVENT ConnectFormRefreshEvent; // Event to refresh the connect form
  233. EFI_EVENT MainPageRefreshEvent; // Event to refresh the main page
  234. //
  235. // User Input Record
  236. //
  237. UINT8 SecurityType;
  238. UINT8 EapAuthMethod;
  239. UINT8 EapSecondAuthMethod;
  240. CHAR16 EapIdentity[EAP_IDENTITY_SIZE];
  241. WIFI_MGR_FILE_CONTEXT *FileContext;
  242. WIFI_MGR_FILE_TYPE FileType;
  243. UINT32 HiddenNetworkCount;
  244. LIST_ENTRY HiddenNetworkList;
  245. };
  246. #define WIFI_MGR_PRIVATE_DATA_SIGNATURE SIGNATURE_32 ('W','M','P','D')
  247. #define WIFI_MGR_PRIVATE_DATA_FROM_CONFIG_ACCESS(This) \
  248. CR ( \
  249. This, \
  250. WIFI_MGR_PRIVATE_DATA, \
  251. ConfigAccess, \
  252. WIFI_MGR_PRIVATE_DATA_SIGNATURE \
  253. )
  254. extern WIFI_MGR_PRIVATE_DATA *mPrivate;
  255. typedef enum {
  256. TokenTypeGetNetworksToken,
  257. TokenTypeConnectNetworkToken,
  258. TokenTypeDisconnectNetworkToken,
  259. TokenTypeMax,
  260. } WIFI_MGR_MAC_CONFIG_TOKEN_TYPE;
  261. typedef union {
  262. EFI_80211_GET_NETWORKS_TOKEN *GetNetworksToken;
  263. EFI_80211_CONNECT_NETWORK_TOKEN *ConnectNetworkToken;
  264. EFI_80211_DISCONNECT_NETWORK_TOKEN *DisconnectNetworkToken;
  265. } MAC_CONNECTION2_ADAPTER_TOKEN;
  266. typedef struct {
  267. WIFI_MGR_DEVICE_DATA *Nic;
  268. WIFI_MGR_MAC_CONFIG_TOKEN_TYPE Type;
  269. MAC_CONNECTION2_ADAPTER_TOKEN Token;
  270. } WIFI_MGR_MAC_CONFIG_TOKEN;
  271. //
  272. // Include files with function prototypes
  273. //
  274. #include "WifiConnectionMgrDriverBinding.h"
  275. #include "WifiConnectionMgrImpl.h"
  276. #include "WifiConnectionMgrComponentName.h"
  277. #include "WifiConnectionMgrHiiConfigAccess.h"
  278. #include "WifiConnectionMgrMisc.h"
  279. #include "WifiConnectionMgrFileUtil.h"
  280. #endif