2 The miscellaneous structure definitions for WiFi connection driver.
4 Copyright (c) 2019, Intel Corporation. All rights reserved.<BR>
6 This program and the accompanying materials
7 are licensed and made available under the terms and conditions of the BSD License
8 which accompanies this distribution. The full text of the license may be found at
9 http://opensource.org/licenses/bsd-license.php.
11 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
12 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
16 #ifndef __EFI_WIFI_MGR_DXE_H__
17 #define __EFI_WIFI_MGR_DXE_H__
24 #include <Library/UefiBootServicesTableLib.h>
25 #include <Library/UefiRuntimeServicesTableLib.h>
26 #include <Library/MemoryAllocationLib.h>
27 #include <Library/BaseMemoryLib.h>
28 #include <Library/BaseLib.h>
29 #include <Library/UefiLib.h>
30 #include <Library/DevicePathLib.h>
31 #include <Library/DebugLib.h>
32 #include <Library/HiiLib.h>
33 #include <Library/NetLib.h>
34 #include <Library/PrintLib.h>
35 #include <Library/UefiHiiServicesLib.h>
36 #include <Library/FileExplorerLib.h>
39 // UEFI Driver Model Protocols
41 #include <Protocol/DriverBinding.h>
42 #include <Protocol/HiiDatabase.h>
43 #include <Protocol/HiiPackageList.h>
44 #include <Protocol/ComponentName2.h>
45 #include <Protocol/ComponentName.h>
50 #include <Protocol/WiFi2.h>
51 #include <Protocol/AdapterInformation.h>
52 #include <Protocol/Supplicant.h>
53 #include <Protocol/SimpleNetwork.h>
54 #include <Protocol/SimpleFileSystem.h>
55 #include <Protocol/EapConfiguration.h>
60 #include <Protocol/HiiConfigAccess.h>
65 #include <Guid/ImageAuthentication.h>
66 #include <Guid/MdeModuleHii.h>
67 #include <Guid/WifiConnectionManagerConfigHii.h>
70 // NvData struct definition
72 #include "WifiConnectionMgrConfigNVDataStruct.h"
73 #include "WifiConnectionMgrConfig.h"
74 #include "EapContext.h"
75 #include "WifiConnectionMgrConfigHii.h"
80 #define WIFI_MGR_DXE_VERSION 0xb
82 #define OUI_IEEE_80211I 0xAC0F00
85 Ieee80211PairwiseCipherSuiteUseGroupCipherSuite
= 0,
86 Ieee80211PairwiseCipherSuiteWEP40
= 1,
87 Ieee80211PairwiseCipherSuiteTKIP
= 2,
88 Ieee80211PairwiseCipherSuiteCCMP
= 4,
89 Ieee80211PairwiseCipherSuiteWEP104
= 5,
90 Ieee80211PairwiseCipherSuiteBIP
= 6,
92 } IEEE_80211_PAIRWISE_CIPHER_SUITE
;
94 #define IEEE_80211_PAIRWISE_CIPHER_SUITE_USE_GROUP (OUI_IEEE_80211I | (Ieee80211PairwiseCipherSuiteUseGroupCipherSuite << 24))
95 #define IEEE_80211_PAIRWISE_CIPHER_SUITE_WEP40 (OUI_IEEE_80211I | (Ieee80211PairwiseCipherSuiteWEP40 << 24))
96 #define IEEE_80211_PAIRWISE_CIPHER_SUITE_TKIP (OUI_IEEE_80211I | (Ieee80211PairwiseCipherSuiteTKIP << 24))
97 #define IEEE_80211_PAIRWISE_CIPHER_SUITE_CCMP (OUI_IEEE_80211I | (Ieee80211PairwiseCipherSuiteCCMP << 24))
98 #define IEEE_80211_PAIRWISE_CIPHER_SUITE_WEP104 (OUI_IEEE_80211I | (Ieee80211PairwiseCipherSuiteWEP104 << 24))
99 #define IEEE_80211_PAIRWISE_CIPHER_SUITE_BIP (OUI_IEEE_80211I | (Ieee80211PairwiseCipherSuiteBIP << 24))
102 Ieee80211AkmSuite8021XOrPMKSA
= 1,
103 Ieee80211AkmSuitePSK
= 2,
104 Ieee80211AkmSuite8021XOrPMKSASHA256
= 5,
105 Ieee80211AkmSuitePSKSHA256
= 6
107 } IEEE_80211_AKM_SUITE
;
109 #define IEEE_80211_AKM_SUITE_8021X_OR_PMKSA (OUI_IEEE_80211I | (Ieee80211AkmSuite8021XOrPMKSA << 24))
110 #define IEEE_80211_AKM_SUITE_PSK (OUI_IEEE_80211I | (Ieee80211AkmSuitePSK << 24))
111 #define IEEE_80211_AKM_SUITE_8021X_OR_PMKSA_SHA256 (OUI_IEEE_80211I | (Ieee80211AkmSuite8021XOrPMKSASHA256 << 24))
112 #define IEEE_80211_AKM_SUITE_PSK_SHA256 (OUI_IEEE_80211I | (Ieee80211AkmSuitePSKSHA256 << 24))
115 // Protocol instances
117 extern EFI_DRIVER_BINDING_PROTOCOL gWifiMgrDxeDriverBinding
;
118 extern EFI_COMPONENT_NAME2_PROTOCOL gWifiMgrDxeComponentName2
;
119 extern EFI_COMPONENT_NAME_PROTOCOL gWifiMgrDxeComponentName
;
120 extern EFI_HII_CONFIG_ACCESS_PROTOCOL gWifiMgrDxeHiiConfigAccess
;
123 // Private Context Data Structure
127 WifiMgrConnectingToAp
,
128 WifiMgrConnectedToAp
,
129 WifiMgrDisconnectingToAp
,
130 WifiMgrConnectStateMaximum
131 } WIFI_MGR_CONNECT_STATE
;
136 WifiMgrScanStateMaximum
137 } WIFI_MGR_SCAN_STATE
;
139 #define WIFI_SCAN_FREQUENCY 30
141 typedef struct _WIFI_MGR_SUPPORTED_SUITES
{
142 EFI_80211_AKM_SUITE_SELECTOR
*SupportedAKMSuites
;
143 EFI_80211_CIPHER_SUITE_SELECTOR
*SupportedSwCipherSuites
;
144 EFI_80211_CIPHER_SUITE_SELECTOR
*SupportedHwCipherSuites
;
145 } WIFI_MGR_SUPPORTED_SUITES
;
147 #define EFI_WIFIMGR_PRIVATE_GUID \
149 0x99b7c019, 0x4789, 0x4829, { 0xa7, 0xbd, 0x0d, 0x4b, 0xaa, 0x62, 0x28, 0x72 } \
152 typedef struct _WIFI_MGR_PRIVATE_DATA WIFI_MGR_PRIVATE_DATA
;
154 typedef struct _WIFI_MGR_PRIVATE_PROTOCOL
{
156 } WIFI_MGR_PRIVATE_PROTOCOL
;
158 typedef struct _WIFI_MGR_FILE_CONTEXT
{
159 EFI_FILE_HANDLE FHandle
;
161 } WIFI_MGR_FILE_CONTEXT
;
167 } WIFI_MGR_FILE_TYPE
;
171 EFI_HANDLE DriverHandle
;
172 EFI_HANDLE ControllerHandle
;
174 WIFI_MGR_PRIVATE_DATA
*Private
;
177 // Pointers to consumed protocols
179 EFI_WIRELESS_MAC_CONNECTION_II_PROTOCOL
*Wmp
;
180 EFI_SUPPLICANT_PROTOCOL
*Supplicant
;
181 EFI_EAP_CONFIGURATION_PROTOCOL
*EapConfig
;
184 // Produced protocols
186 WIFI_MGR_PRIVATE_PROTOCOL WifiMgrIdentifier
;
189 // Private functions and data fields
191 LIST_ENTRY Link
; // Link to the NicList in global private data structure.
193 EFI_80211_MAC_ADDRESS MacAddress
;
194 WIFI_MGR_SUPPORTED_SUITES SupportedSuites
;
195 EFI_ADAPTER_INFO_MEDIA_STATE LastLinkState
;
198 // The network is currently connected, connecting or disconnecting.
199 // Only one network can be operated at one time.
201 WIFI_MGR_NETWORK_PROFILE
*CurrentOperateNetwork
;
202 WIFI_MGR_NETWORK_PROFILE
*ConnectPendingNetwork
;
203 BOOLEAN HasDisconnectPendingNetwork
;
206 //Profile related data fields
208 LIST_ENTRY ProfileList
; // List of WIFI_MGR_NETWORK_PROFILE
209 UINT32 AvailableCount
;
210 UINT32 MaxProfileIndex
;
211 WIFI_MGR_NETWORK_PROFILE
*UserSelectedProfile
;
214 // Data fields for Hii functionlity
216 BOOLEAN OneTimeScanRequest
;
217 BOOLEAN OneTimeConnectRequest
;
218 BOOLEAN OneTimeDisconnectRequest
;
219 WIFI_MGR_SCAN_STATE ScanState
;
221 WIFI_MGR_CONNECT_STATE ConnectState
;
222 BOOLEAN ConnectStateChanged
;
223 } WIFI_MGR_DEVICE_DATA
;
225 #define WIFI_MGR_DEVICE_DATA_SIGNATURE SIGNATURE_32 ('W','M','D','D')
227 #define WIFI_MGR_DEVICE_DATA_FROM_IDENTIFIER(Identifier) \
230 WIFI_MGR_DEVICE_DATA, \
232 WIFI_MGR_DEVICE_DATA_SIGNATURE \
238 CHAR16 SSId
[SSID_STORAGE_SIZE
];
239 } WIFI_HIDDEN_NETWORK_DATA
;
241 #define WIFI_MGR_HIDDEN_NETWORK_SIGNATURE SIGNATURE_32 ('W','M','H','N')
243 #define WIFI_MGR_HIDDEN_NETWORK_FROM_IDENTIFIER(Identifier) \
246 WIFI_HIDDEN_NETWORK_DATA, \
248 WIFI_MGR_HIDDEN_NETWORK_SIGNATURE \
252 // Global private data struct
254 struct _WIFI_MGR_PRIVATE_DATA
{
257 EFI_HANDLE DriverHandle
;
258 EFI_HII_HANDLE RegisteredHandle
;
259 EFI_HII_CONFIG_ACCESS_PROTOCOL ConfigAccess
;
263 WIFI_MGR_DEVICE_DATA
*CurrentNic
;
266 // Data fields for Hii functionlity
268 EFI_EVENT NetworkListRefreshEvent
; // Event to refresh the network list form
269 EFI_EVENT ConnectFormRefreshEvent
; // Event to refresh the connect form
270 EFI_EVENT MainPageRefreshEvent
; // Event to refresh the main page
277 UINT8 EapSecondAuthMethod
;
278 CHAR16 EapIdentity
[EAP_IDENTITY_SIZE
];
280 WIFI_MGR_FILE_CONTEXT
*FileContext
;
281 WIFI_MGR_FILE_TYPE FileType
;
283 UINT32 HiddenNetworkCount
;
284 LIST_ENTRY HiddenNetworkList
;
287 #define WIFI_MGR_PRIVATE_DATA_SIGNATURE SIGNATURE_32 ('W','M','P','D')
289 #define WIFI_MGR_PRIVATE_DATA_FROM_CONFIG_ACCESS(This) \
292 WIFI_MGR_PRIVATE_DATA, \
294 WIFI_MGR_PRIVATE_DATA_SIGNATURE \
296 extern WIFI_MGR_PRIVATE_DATA
*mPrivate
;
299 TokenTypeGetNetworksToken
,
300 TokenTypeConnectNetworkToken
,
301 TokenTypeDisconnectNetworkToken
,
303 } WIFI_MGR_MAC_CONFIG_TOKEN_TYPE
;
306 EFI_80211_GET_NETWORKS_TOKEN
*GetNetworksToken
;
307 EFI_80211_CONNECT_NETWORK_TOKEN
*ConnectNetworkToken
;
308 EFI_80211_DISCONNECT_NETWORK_TOKEN
*DisconnectNetworkToken
;
309 } MAC_CONNECTION2_ADAPTER_TOKEN
;
312 WIFI_MGR_DEVICE_DATA
*Nic
;
313 WIFI_MGR_MAC_CONFIG_TOKEN_TYPE Type
;
314 MAC_CONNECTION2_ADAPTER_TOKEN Token
;
315 } WIFI_MGR_MAC_CONFIG_TOKEN
;
318 // Include files with function prototypes
320 #include "WifiConnectionMgrDriverBinding.h"
321 #include "WifiConnectionMgrImpl.h"
322 #include "WifiConnectionMgrComponentName.h"
323 #include "WifiConnectionMgrHiiConfigAccess.h"
324 #include "WifiConnectionMgrMisc.h"
325 #include "WifiConnectionMgrFileUtil.h"