2 The miscellaneous structure definitions for WiFi connection driver.
4 Copyright (c) 2019, 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>
54 #include <Protocol/HiiConfigAccess.h>
59 #include <Guid/ImageAuthentication.h>
60 #include <Guid/MdeModuleHii.h>
61 #include <Guid/WifiConnectionManagerConfigHii.h>
64 // NvData struct definition
66 #include "WifiConnectionMgrConfigNVDataStruct.h"
67 #include "WifiConnectionMgrConfig.h"
68 #include "EapContext.h"
69 #include "WifiConnectionMgrConfigHii.h"
74 #define WIFI_MGR_DXE_VERSION 0xb
76 #define OUI_IEEE_80211I 0xAC0F00
79 Ieee80211PairwiseCipherSuiteUseGroupCipherSuite
= 0,
80 Ieee80211PairwiseCipherSuiteWEP40
= 1,
81 Ieee80211PairwiseCipherSuiteTKIP
= 2,
82 Ieee80211PairwiseCipherSuiteCCMP
= 4,
83 Ieee80211PairwiseCipherSuiteWEP104
= 5,
84 Ieee80211PairwiseCipherSuiteBIP
= 6,
86 } IEEE_80211_PAIRWISE_CIPHER_SUITE
;
88 #define IEEE_80211_PAIRWISE_CIPHER_SUITE_USE_GROUP (OUI_IEEE_80211I | (Ieee80211PairwiseCipherSuiteUseGroupCipherSuite << 24))
89 #define IEEE_80211_PAIRWISE_CIPHER_SUITE_WEP40 (OUI_IEEE_80211I | (Ieee80211PairwiseCipherSuiteWEP40 << 24))
90 #define IEEE_80211_PAIRWISE_CIPHER_SUITE_TKIP (OUI_IEEE_80211I | (Ieee80211PairwiseCipherSuiteTKIP << 24))
91 #define IEEE_80211_PAIRWISE_CIPHER_SUITE_CCMP (OUI_IEEE_80211I | (Ieee80211PairwiseCipherSuiteCCMP << 24))
92 #define IEEE_80211_PAIRWISE_CIPHER_SUITE_WEP104 (OUI_IEEE_80211I | (Ieee80211PairwiseCipherSuiteWEP104 << 24))
93 #define IEEE_80211_PAIRWISE_CIPHER_SUITE_BIP (OUI_IEEE_80211I | (Ieee80211PairwiseCipherSuiteBIP << 24))
96 Ieee80211AkmSuite8021XOrPMKSA
= 1,
97 Ieee80211AkmSuitePSK
= 2,
98 Ieee80211AkmSuite8021XOrPMKSASHA256
= 5,
99 Ieee80211AkmSuitePSKSHA256
= 6
101 } IEEE_80211_AKM_SUITE
;
103 #define IEEE_80211_AKM_SUITE_8021X_OR_PMKSA (OUI_IEEE_80211I | (Ieee80211AkmSuite8021XOrPMKSA << 24))
104 #define IEEE_80211_AKM_SUITE_PSK (OUI_IEEE_80211I | (Ieee80211AkmSuitePSK << 24))
105 #define IEEE_80211_AKM_SUITE_8021X_OR_PMKSA_SHA256 (OUI_IEEE_80211I | (Ieee80211AkmSuite8021XOrPMKSASHA256 << 24))
106 #define IEEE_80211_AKM_SUITE_PSK_SHA256 (OUI_IEEE_80211I | (Ieee80211AkmSuitePSKSHA256 << 24))
109 // Protocol instances
111 extern EFI_DRIVER_BINDING_PROTOCOL gWifiMgrDxeDriverBinding
;
112 extern EFI_COMPONENT_NAME2_PROTOCOL gWifiMgrDxeComponentName2
;
113 extern EFI_COMPONENT_NAME_PROTOCOL gWifiMgrDxeComponentName
;
114 extern EFI_HII_CONFIG_ACCESS_PROTOCOL gWifiMgrDxeHiiConfigAccess
;
117 // Private Context Data Structure
121 WifiMgrConnectingToAp
,
122 WifiMgrConnectedToAp
,
123 WifiMgrDisconnectingToAp
,
124 WifiMgrConnectStateMaximum
125 } WIFI_MGR_CONNECT_STATE
;
130 WifiMgrScanStateMaximum
131 } WIFI_MGR_SCAN_STATE
;
133 #define WIFI_SCAN_FREQUENCY 30
135 typedef struct _WIFI_MGR_SUPPORTED_SUITES
{
136 EFI_80211_AKM_SUITE_SELECTOR
*SupportedAKMSuites
;
137 EFI_80211_CIPHER_SUITE_SELECTOR
*SupportedSwCipherSuites
;
138 EFI_80211_CIPHER_SUITE_SELECTOR
*SupportedHwCipherSuites
;
139 } WIFI_MGR_SUPPORTED_SUITES
;
141 #define EFI_WIFIMGR_PRIVATE_GUID \
143 0x99b7c019, 0x4789, 0x4829, { 0xa7, 0xbd, 0x0d, 0x4b, 0xaa, 0x62, 0x28, 0x72 } \
146 typedef struct _WIFI_MGR_PRIVATE_DATA WIFI_MGR_PRIVATE_DATA
;
148 typedef struct _WIFI_MGR_PRIVATE_PROTOCOL
{
150 } WIFI_MGR_PRIVATE_PROTOCOL
;
152 typedef struct _WIFI_MGR_FILE_CONTEXT
{
153 EFI_FILE_HANDLE FHandle
;
155 } WIFI_MGR_FILE_CONTEXT
;
161 } WIFI_MGR_FILE_TYPE
;
165 EFI_HANDLE DriverHandle
;
166 EFI_HANDLE ControllerHandle
;
168 WIFI_MGR_PRIVATE_DATA
*Private
;
171 // Pointers to consumed protocols
173 EFI_WIRELESS_MAC_CONNECTION_II_PROTOCOL
*Wmp
;
174 EFI_SUPPLICANT_PROTOCOL
*Supplicant
;
175 EFI_EAP_CONFIGURATION_PROTOCOL
*EapConfig
;
178 // Produced protocols
180 WIFI_MGR_PRIVATE_PROTOCOL WifiMgrIdentifier
;
183 // Private functions and data fields
185 LIST_ENTRY Link
; // Link to the NicList in global private data structure.
187 EFI_80211_MAC_ADDRESS MacAddress
;
188 WIFI_MGR_SUPPORTED_SUITES SupportedSuites
;
189 EFI_ADAPTER_INFO_MEDIA_STATE LastLinkState
;
192 // The network is currently connected, connecting or disconnecting.
193 // Only one network can be operated at one time.
195 WIFI_MGR_NETWORK_PROFILE
*CurrentOperateNetwork
;
196 WIFI_MGR_NETWORK_PROFILE
*ConnectPendingNetwork
;
197 BOOLEAN HasDisconnectPendingNetwork
;
200 //Profile related data fields
202 LIST_ENTRY ProfileList
; // List of WIFI_MGR_NETWORK_PROFILE
203 UINT32 AvailableCount
;
204 UINT32 MaxProfileIndex
;
205 WIFI_MGR_NETWORK_PROFILE
*UserSelectedProfile
;
208 // Data fields for Hii functionlity
210 BOOLEAN OneTimeScanRequest
;
211 BOOLEAN OneTimeConnectRequest
;
212 BOOLEAN OneTimeDisconnectRequest
;
213 WIFI_MGR_SCAN_STATE ScanState
;
215 WIFI_MGR_CONNECT_STATE ConnectState
;
216 BOOLEAN ConnectStateChanged
;
217 } WIFI_MGR_DEVICE_DATA
;
219 #define WIFI_MGR_DEVICE_DATA_SIGNATURE SIGNATURE_32 ('W','M','D','D')
221 #define WIFI_MGR_DEVICE_DATA_FROM_IDENTIFIER(Identifier) \
224 WIFI_MGR_DEVICE_DATA, \
226 WIFI_MGR_DEVICE_DATA_SIGNATURE \
232 CHAR16 SSId
[SSID_STORAGE_SIZE
];
233 } WIFI_HIDDEN_NETWORK_DATA
;
235 #define WIFI_MGR_HIDDEN_NETWORK_SIGNATURE SIGNATURE_32 ('W','M','H','N')
237 #define WIFI_MGR_HIDDEN_NETWORK_FROM_IDENTIFIER(Identifier) \
240 WIFI_HIDDEN_NETWORK_DATA, \
242 WIFI_MGR_HIDDEN_NETWORK_SIGNATURE \
246 // Global private data struct
248 struct _WIFI_MGR_PRIVATE_DATA
{
251 EFI_HANDLE DriverHandle
;
252 EFI_HII_HANDLE RegisteredHandle
;
253 EFI_HII_CONFIG_ACCESS_PROTOCOL ConfigAccess
;
257 WIFI_MGR_DEVICE_DATA
*CurrentNic
;
260 // Data fields for Hii functionlity
262 EFI_EVENT NetworkListRefreshEvent
; // Event to refresh the network list form
263 EFI_EVENT ConnectFormRefreshEvent
; // Event to refresh the connect form
264 EFI_EVENT MainPageRefreshEvent
; // Event to refresh the main page
271 UINT8 EapSecondAuthMethod
;
272 CHAR16 EapIdentity
[EAP_IDENTITY_SIZE
];
274 WIFI_MGR_FILE_CONTEXT
*FileContext
;
275 WIFI_MGR_FILE_TYPE FileType
;
277 UINT32 HiddenNetworkCount
;
278 LIST_ENTRY HiddenNetworkList
;
281 #define WIFI_MGR_PRIVATE_DATA_SIGNATURE SIGNATURE_32 ('W','M','P','D')
283 #define WIFI_MGR_PRIVATE_DATA_FROM_CONFIG_ACCESS(This) \
286 WIFI_MGR_PRIVATE_DATA, \
288 WIFI_MGR_PRIVATE_DATA_SIGNATURE \
290 extern WIFI_MGR_PRIVATE_DATA
*mPrivate
;
293 TokenTypeGetNetworksToken
,
294 TokenTypeConnectNetworkToken
,
295 TokenTypeDisconnectNetworkToken
,
297 } WIFI_MGR_MAC_CONFIG_TOKEN_TYPE
;
300 EFI_80211_GET_NETWORKS_TOKEN
*GetNetworksToken
;
301 EFI_80211_CONNECT_NETWORK_TOKEN
*ConnectNetworkToken
;
302 EFI_80211_DISCONNECT_NETWORK_TOKEN
*DisconnectNetworkToken
;
303 } MAC_CONNECTION2_ADAPTER_TOKEN
;
306 WIFI_MGR_DEVICE_DATA
*Nic
;
307 WIFI_MGR_MAC_CONFIG_TOKEN_TYPE Type
;
308 MAC_CONNECTION2_ADAPTER_TOKEN Token
;
309 } WIFI_MGR_MAC_CONFIG_TOKEN
;
312 // Include files with function prototypes
314 #include "WifiConnectionMgrDriverBinding.h"
315 #include "WifiConnectionMgrImpl.h"
316 #include "WifiConnectionMgrComponentName.h"
317 #include "WifiConnectionMgrHiiConfigAccess.h"
318 #include "WifiConnectionMgrMisc.h"
319 #include "WifiConnectionMgrFileUtil.h"