WifiConnectionMgrDxe.h 11 KB

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