2 The miscellaneous structure definitions for WiFi connection driver.
4 Copyright (c) 2019 - 2022, Intel Corporation. All rights reserved.<BR>
6 SPDX-License-Identifier: BSD-2-Clause-Patent
10 #ifndef __EFI_WIFI_MGR_DXE_H__
11 #define __EFI_WIFI_MGR_DXE_H__
18 #include <Library/UefiBootServicesTableLib.h>
19 #include <Library/UefiRuntimeServicesTableLib.h>
20 #include <Library/MemoryAllocationLib.h>
21 #include <Library/BaseMemoryLib.h>
22 #include <Library/BaseLib.h>
23 #include <Library/UefiLib.h>
24 #include <Library/DevicePathLib.h>
25 #include <Library/DebugLib.h>
26 #include <Library/HiiLib.h>
27 #include <Library/NetLib.h>
28 #include <Library/PrintLib.h>
29 #include <Library/UefiHiiServicesLib.h>
30 #include <Library/FileExplorerLib.h>
33 // UEFI Driver Model Protocols
35 #include <Protocol/DriverBinding.h>
36 #include <Protocol/HiiDatabase.h>
37 #include <Protocol/HiiPackageList.h>
38 #include <Protocol/ComponentName2.h>
39 #include <Protocol/ComponentName.h>
44 #include <Protocol/WiFi2.h>
45 #include <Protocol/AdapterInformation.h>
46 #include <Protocol/Supplicant.h>
47 #include <Protocol/SimpleNetwork.h>
48 #include <Protocol/SimpleFileSystem.h>
49 #include <Protocol/EapConfiguration.h>
50 #include <Protocol/WiFiProfileSyncProtocol.h>
55 #include <Protocol/HiiConfigAccess.h>
60 #include <Guid/ImageAuthentication.h>
61 #include <Guid/MdeModuleHii.h>
62 #include <Guid/WifiConnectionManagerConfigHii.h>
65 // NvData struct definition
67 #include "WifiConnectionMgrConfigNVDataStruct.h"
68 #include "WifiConnectionMgrConfig.h"
69 #include "EapContext.h"
70 #include "WifiConnectionMgrConfigHii.h"
75 #define WIFI_MGR_DXE_VERSION 0xb
77 #define OUI_IEEE_80211I 0xAC0F00
78 #define MAX_WIFI_CONNETION_ATTEMPTS 3
81 Ieee80211PairwiseCipherSuiteUseGroupCipherSuite
= 0,
82 Ieee80211PairwiseCipherSuiteWEP40
= 1,
83 Ieee80211PairwiseCipherSuiteTKIP
= 2,
84 Ieee80211PairwiseCipherSuiteCCMP
= 4,
85 Ieee80211PairwiseCipherSuiteWEP104
= 5,
86 Ieee80211PairwiseCipherSuiteBIP
= 6,
87 Ieee80211PairwiseCipherSuiteGCMP
= 8,
88 Ieee80211PairwiseCipherSuiteGCMP256
= 9,
90 } IEEE_80211_PAIRWISE_CIPHER_SUITE
;
92 #define IEEE_80211_PAIRWISE_CIPHER_SUITE_USE_GROUP (OUI_IEEE_80211I | (Ieee80211PairwiseCipherSuiteUseGroupCipherSuite << 24))
93 #define IEEE_80211_PAIRWISE_CIPHER_SUITE_WEP40 (OUI_IEEE_80211I | (Ieee80211PairwiseCipherSuiteWEP40 << 24))
94 #define IEEE_80211_PAIRWISE_CIPHER_SUITE_TKIP (OUI_IEEE_80211I | (Ieee80211PairwiseCipherSuiteTKIP << 24))
95 #define IEEE_80211_PAIRWISE_CIPHER_SUITE_CCMP (OUI_IEEE_80211I | (Ieee80211PairwiseCipherSuiteCCMP << 24))
96 #define IEEE_80211_PAIRWISE_CIPHER_SUITE_WEP104 (OUI_IEEE_80211I | (Ieee80211PairwiseCipherSuiteWEP104 << 24))
97 #define IEEE_80211_PAIRWISE_CIPHER_SUITE_BIP (OUI_IEEE_80211I | (Ieee80211PairwiseCipherSuiteBIP << 24))
98 #define IEEE_80211_PAIRWISE_CIPHER_SUITE_GCMP (OUI_IEEE_80211I | (Ieee80211PairwiseCipherSuiteGCMP << 24))
99 #define IEEE_80211_PAIRWISE_CIPHER_SUITE_GCMP256 (OUI_IEEE_80211I | (Ieee80211PairwiseCipherSuiteGCMP256 << 24))
102 Ieee80211AkmSuite8021XOrPMKSA
= 1,
103 Ieee80211AkmSuitePSK
= 2,
104 Ieee80211AkmSuite8021XOrPMKSASHA256
= 5,
105 Ieee80211AkmSuitePSKSHA256
= 6,
106 Ieee80211AkmSuiteSAE
= 8,
107 Ieee80211AkmSuite8021XSuiteB
= 11,
108 Ieee80211AkmSuite8021XSuiteB192
= 12,
109 Ieee80211AkmSuiteOWE
= 18,
111 } IEEE_80211_AKM_SUITE
;
113 #define IEEE_80211_AKM_SUITE_8021X_OR_PMKSA (OUI_IEEE_80211I | (Ieee80211AkmSuite8021XOrPMKSA << 24))
114 #define IEEE_80211_AKM_SUITE_PSK (OUI_IEEE_80211I | (Ieee80211AkmSuitePSK << 24))
115 #define IEEE_80211_AKM_SUITE_8021X_OR_PMKSA_SHA256 (OUI_IEEE_80211I | (Ieee80211AkmSuite8021XOrPMKSASHA256 << 24))
116 #define IEEE_80211_AKM_SUITE_PSK_SHA256 (OUI_IEEE_80211I | (Ieee80211AkmSuitePSKSHA256 << 24))
117 #define IEEE_80211_AKM_SUITE_SAE (OUI_IEEE_80211I | (Ieee80211AkmSuiteSAE << 24))
118 #define IEEE_80211_AKM_SUITE_8021X_SUITE_B (OUI_IEEE_80211I | (Ieee80211AkmSuite8021XSuiteB << 24))
119 #define IEEE_80211_AKM_SUITE_8021X_SUITE_B192 (OUI_IEEE_80211I | (Ieee80211AkmSuite8021XSuiteB192 << 24))
120 #define IEEE_80211_AKM_SUITE_OWE (OUI_IEEE_80211I | (Ieee80211AkmSuiteOWE << 24))
123 // Protocol instances
125 extern EFI_DRIVER_BINDING_PROTOCOL gWifiMgrDxeDriverBinding
;
126 extern EFI_COMPONENT_NAME2_PROTOCOL gWifiMgrDxeComponentName2
;
127 extern EFI_COMPONENT_NAME_PROTOCOL gWifiMgrDxeComponentName
;
128 extern EFI_HII_CONFIG_ACCESS_PROTOCOL gWifiMgrDxeHiiConfigAccess
;
131 // Private Context Data Structure
135 WifiMgrConnectingToAp
,
136 WifiMgrConnectedToAp
,
137 WifiMgrDisconnectingToAp
,
138 WifiMgrConnectStateMaximum
139 } WIFI_MGR_CONNECT_STATE
;
144 WifiMgrScanStateMaximum
145 } WIFI_MGR_SCAN_STATE
;
147 #define WIFI_SCAN_FREQUENCY 30
149 typedef struct _WIFI_MGR_SUPPORTED_SUITES
{
150 EFI_80211_AKM_SUITE_SELECTOR
*SupportedAKMSuites
;
151 EFI_80211_CIPHER_SUITE_SELECTOR
*SupportedSwCipherSuites
;
152 EFI_80211_CIPHER_SUITE_SELECTOR
*SupportedHwCipherSuites
;
153 } WIFI_MGR_SUPPORTED_SUITES
;
155 #define EFI_WIFIMGR_PRIVATE_GUID \
157 0x99b7c019, 0x4789, 0x4829, { 0xa7, 0xbd, 0x0d, 0x4b, 0xaa, 0x62, 0x28, 0x72 } \
160 typedef struct _WIFI_MGR_PRIVATE_DATA WIFI_MGR_PRIVATE_DATA
;
162 typedef struct _WIFI_MGR_PRIVATE_PROTOCOL
{
164 } WIFI_MGR_PRIVATE_PROTOCOL
;
166 typedef struct _WIFI_MGR_FILE_CONTEXT
{
167 EFI_FILE_HANDLE FHandle
;
169 } WIFI_MGR_FILE_CONTEXT
;
175 } WIFI_MGR_FILE_TYPE
;
179 EFI_HANDLE DriverHandle
;
180 EFI_HANDLE ControllerHandle
;
182 WIFI_MGR_PRIVATE_DATA
*Private
;
185 // Pointers to consumed protocols
187 EFI_WIRELESS_MAC_CONNECTION_II_PROTOCOL
*Wmp
;
188 EFI_SUPPLICANT_PROTOCOL
*Supplicant
;
189 EFI_EAP_CONFIGURATION_PROTOCOL
*EapConfig
;
192 // Produced protocols
194 WIFI_MGR_PRIVATE_PROTOCOL WifiMgrIdentifier
;
197 // Private functions and data fields
199 LIST_ENTRY Link
; // Link to the NicList in global private data structure.
201 EFI_80211_MAC_ADDRESS MacAddress
;
202 WIFI_MGR_SUPPORTED_SUITES SupportedSuites
;
203 EFI_ADAPTER_INFO_MEDIA_STATE LastLinkState
;
206 // The network is currently connected, connecting or disconnecting.
207 // Only one network can be operated at one time.
209 WIFI_MGR_NETWORK_PROFILE
*CurrentOperateNetwork
;
210 WIFI_MGR_NETWORK_PROFILE
*ConnectPendingNetwork
;
211 BOOLEAN HasDisconnectPendingNetwork
;
214 // Profile related data fields
216 LIST_ENTRY ProfileList
; // List of WIFI_MGR_NETWORK_PROFILE
217 UINT32 AvailableCount
;
218 UINT32 MaxProfileIndex
;
219 WIFI_MGR_NETWORK_PROFILE
*UserSelectedProfile
;
222 // Data fields for Hii functionlity
224 BOOLEAN OneTimeScanRequest
;
225 BOOLEAN OneTimeConnectRequest
;
226 BOOLEAN OneTimeDisconnectRequest
;
227 WIFI_MGR_SCAN_STATE ScanState
;
229 WIFI_MGR_CONNECT_STATE ConnectState
;
230 BOOLEAN ConnectStateChanged
;
231 } WIFI_MGR_DEVICE_DATA
;
233 #define WIFI_MGR_DEVICE_DATA_SIGNATURE SIGNATURE_32 ('W','M','D','D')
235 #define WIFI_MGR_DEVICE_DATA_FROM_IDENTIFIER(Identifier) \
238 WIFI_MGR_DEVICE_DATA, \
240 WIFI_MGR_DEVICE_DATA_SIGNATURE \
246 CHAR16 SSId
[SSID_STORAGE_SIZE
];
247 } WIFI_HIDDEN_NETWORK_DATA
;
249 #define WIFI_MGR_HIDDEN_NETWORK_SIGNATURE SIGNATURE_32 ('W','M','H','N')
251 #define WIFI_MGR_HIDDEN_NETWORK_FROM_IDENTIFIER(Identifier) \
254 WIFI_HIDDEN_NETWORK_DATA, \
256 WIFI_MGR_HIDDEN_NETWORK_SIGNATURE \
260 // Global private data struct
262 struct _WIFI_MGR_PRIVATE_DATA
{
264 EFI_HANDLE DriverHandle
;
265 EFI_HII_HANDLE RegisteredHandle
;
266 EFI_HII_CONFIG_ACCESS_PROTOCOL ConfigAccess
;
270 WIFI_MGR_DEVICE_DATA
*CurrentNic
;
273 // Data fields for Hii functionlity
275 EFI_EVENT NetworkListRefreshEvent
; // Event to refresh the network list form
276 EFI_EVENT ConnectFormRefreshEvent
; // Event to refresh the connect form
277 EFI_EVENT MainPageRefreshEvent
; // Event to refresh the main page
284 UINT8 EapSecondAuthMethod
;
285 CHAR16 EapIdentity
[EAP_IDENTITY_SIZE
];
287 WIFI_MGR_FILE_CONTEXT
*FileContext
;
288 WIFI_MGR_FILE_TYPE FileType
;
290 UINT32 HiddenNetworkCount
;
291 LIST_ENTRY HiddenNetworkList
;
294 #define WIFI_MGR_PRIVATE_DATA_SIGNATURE SIGNATURE_32 ('W','M','P','D')
296 #define WIFI_MGR_PRIVATE_DATA_FROM_CONFIG_ACCESS(This) \
299 WIFI_MGR_PRIVATE_DATA, \
301 WIFI_MGR_PRIVATE_DATA_SIGNATURE \
303 extern WIFI_MGR_PRIVATE_DATA
*mPrivate
;
306 TokenTypeGetNetworksToken
,
307 TokenTypeConnectNetworkToken
,
308 TokenTypeDisconnectNetworkToken
,
310 } WIFI_MGR_MAC_CONFIG_TOKEN_TYPE
;
313 EFI_80211_GET_NETWORKS_TOKEN
*GetNetworksToken
;
314 EFI_80211_CONNECT_NETWORK_TOKEN
*ConnectNetworkToken
;
315 EFI_80211_DISCONNECT_NETWORK_TOKEN
*DisconnectNetworkToken
;
316 } MAC_CONNECTION2_ADAPTER_TOKEN
;
319 WIFI_MGR_DEVICE_DATA
*Nic
;
320 WIFI_MGR_MAC_CONFIG_TOKEN_TYPE Type
;
321 MAC_CONNECTION2_ADAPTER_TOKEN Token
;
322 } WIFI_MGR_MAC_CONFIG_TOKEN
;
325 // Include files with function prototypes
327 #include "WifiConnectionMgrDriverBinding.h"
328 #include "WifiConnectionMgrImpl.h"
329 #include "WifiConnectionMgrComponentName.h"
330 #include "WifiConnectionMgrHiiConfigAccess.h"
331 #include "WifiConnectionMgrMisc.h"
332 #include "WifiConnectionMgrFileUtil.h"