]> git.proxmox.com Git - mirror_edk2.git/blob - NetworkPkg/WifiConnectionManagerDxe/WifiConnectionMgrDxe.h
NetworkPkg: Add WiFi Connection Manager to NetworkPkg
[mirror_edk2.git] / NetworkPkg / WifiConnectionManagerDxe / WifiConnectionMgrDxe.h
1 /** @file
2 The miscellaneous structure definitions for WiFi connection driver.
3
4 Copyright (c) 2019, Intel Corporation. All rights reserved.<BR>
5
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.
10
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.
13
14 **/
15
16 #ifndef __EFI_WIFI_MGR_DXE_H__
17 #define __EFI_WIFI_MGR_DXE_H__
18
19 #include <Uefi.h>
20
21 //
22 // Libraries
23 //
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>
37
38 //
39 // UEFI Driver Model Protocols
40 //
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>
46
47 //
48 // Consumed Protocols
49 //
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>
56
57 //
58 // Produced Protocols
59 //
60 #include <Protocol/HiiConfigAccess.h>
61
62 //
63 // Guids
64 //
65 #include <Guid/ImageAuthentication.h>
66 #include <Guid/MdeModuleHii.h>
67 #include <Guid/WifiConnectionManagerConfigHii.h>
68
69 //
70 // NvData struct definition
71 //
72 #include "WifiConnectionMgrConfigNVDataStruct.h"
73 #include "WifiConnectionMgrConfig.h"
74 #include "EapContext.h"
75 #include "WifiConnectionMgrConfigHii.h"
76
77 //
78 // Driver Version
79 //
80 #define WIFI_MGR_DXE_VERSION 0xb
81
82 #define OUI_IEEE_80211I 0xAC0F00
83
84 typedef enum {
85 Ieee80211PairwiseCipherSuiteUseGroupCipherSuite = 0,
86 Ieee80211PairwiseCipherSuiteWEP40 = 1,
87 Ieee80211PairwiseCipherSuiteTKIP = 2,
88 Ieee80211PairwiseCipherSuiteCCMP = 4,
89 Ieee80211PairwiseCipherSuiteWEP104 = 5,
90 Ieee80211PairwiseCipherSuiteBIP = 6,
91 //...
92 } IEEE_80211_PAIRWISE_CIPHER_SUITE;
93
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))
100
101 typedef enum {
102 Ieee80211AkmSuite8021XOrPMKSA = 1,
103 Ieee80211AkmSuitePSK = 2,
104 Ieee80211AkmSuite8021XOrPMKSASHA256 = 5,
105 Ieee80211AkmSuitePSKSHA256 = 6
106 //...
107 } IEEE_80211_AKM_SUITE;
108
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))
113
114 //
115 // Protocol instances
116 //
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;
121
122 //
123 // Private Context Data Structure
124 //
125 typedef enum {
126 WifiMgrDisconnected,
127 WifiMgrConnectingToAp,
128 WifiMgrConnectedToAp,
129 WifiMgrDisconnectingToAp,
130 WifiMgrConnectStateMaximum
131 } WIFI_MGR_CONNECT_STATE;
132
133 typedef enum {
134 WifiMgrScanFinished,
135 WifiMgrScanning,
136 WifiMgrScanStateMaximum
137 } WIFI_MGR_SCAN_STATE;
138
139 #define WIFI_SCAN_FREQUENCY 30
140
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;
146
147 #define EFI_WIFIMGR_PRIVATE_GUID \
148 { \
149 0x99b7c019, 0x4789, 0x4829, { 0xa7, 0xbd, 0x0d, 0x4b, 0xaa, 0x62, 0x28, 0x72 } \
150 }
151
152 typedef struct _WIFI_MGR_PRIVATE_DATA WIFI_MGR_PRIVATE_DATA;
153
154 typedef struct _WIFI_MGR_PRIVATE_PROTOCOL {
155 UINT32 Reserved;
156 } WIFI_MGR_PRIVATE_PROTOCOL;
157
158 typedef struct _WIFI_MGR_FILE_CONTEXT {
159 EFI_FILE_HANDLE FHandle;
160 UINT16 *FileName;
161 } WIFI_MGR_FILE_CONTEXT;
162
163 typedef enum {
164 FileTypeCACert,
165 FileTypeClientCert,
166 FileTypeMax
167 } WIFI_MGR_FILE_TYPE;
168
169 typedef struct {
170 UINT32 Signature;
171 EFI_HANDLE DriverHandle;
172 EFI_HANDLE ControllerHandle;
173 EFI_EVENT TickTimer;
174 WIFI_MGR_PRIVATE_DATA *Private;
175
176 //
177 // Pointers to consumed protocols
178 //
179 EFI_WIRELESS_MAC_CONNECTION_II_PROTOCOL *Wmp;
180 EFI_SUPPLICANT_PROTOCOL *Supplicant;
181 EFI_EAP_CONFIGURATION_PROTOCOL *EapConfig;
182
183 //
184 // Produced protocols
185 //
186 WIFI_MGR_PRIVATE_PROTOCOL WifiMgrIdentifier;
187
188 //
189 // Private functions and data fields
190 //
191 LIST_ENTRY Link; // Link to the NicList in global private data structure.
192 UINT32 NicIndex;
193 EFI_80211_MAC_ADDRESS MacAddress;
194 WIFI_MGR_SUPPORTED_SUITES SupportedSuites;
195 EFI_ADAPTER_INFO_MEDIA_STATE LastLinkState;
196
197 //
198 // The network is currently connected, connecting or disconnecting.
199 // Only one network can be operated at one time.
200 //
201 WIFI_MGR_NETWORK_PROFILE *CurrentOperateNetwork;
202 WIFI_MGR_NETWORK_PROFILE *ConnectPendingNetwork;
203 BOOLEAN HasDisconnectPendingNetwork;
204
205 //
206 //Profile related data fields
207 //
208 LIST_ENTRY ProfileList; // List of WIFI_MGR_NETWORK_PROFILE
209 UINT32 AvailableCount;
210 UINT32 MaxProfileIndex;
211 WIFI_MGR_NETWORK_PROFILE *UserSelectedProfile;
212
213 //
214 // Data fields for Hii functionlity
215 //
216 BOOLEAN OneTimeScanRequest;
217 BOOLEAN OneTimeConnectRequest;
218 BOOLEAN OneTimeDisconnectRequest;
219 WIFI_MGR_SCAN_STATE ScanState;
220 UINTN ScanTickTime;
221 WIFI_MGR_CONNECT_STATE ConnectState;
222 BOOLEAN ConnectStateChanged;
223 } WIFI_MGR_DEVICE_DATA;
224
225 #define WIFI_MGR_DEVICE_DATA_SIGNATURE SIGNATURE_32 ('W','M','D','D')
226
227 #define WIFI_MGR_DEVICE_DATA_FROM_IDENTIFIER(Identifier) \
228 CR ( \
229 Identifier, \
230 WIFI_MGR_DEVICE_DATA, \
231 WifiMgrIdentifier, \
232 WIFI_MGR_DEVICE_DATA_SIGNATURE \
233 )
234
235 typedef struct {
236 UINT32 Signature;
237 LIST_ENTRY Link;
238 CHAR16 SSId[SSID_STORAGE_SIZE];
239 } WIFI_HIDDEN_NETWORK_DATA;
240
241 #define WIFI_MGR_HIDDEN_NETWORK_SIGNATURE SIGNATURE_32 ('W','M','H','N')
242
243 #define WIFI_MGR_HIDDEN_NETWORK_FROM_IDENTIFIER(Identifier) \
244 CR ( \
245 Identifier, \
246 WIFI_HIDDEN_NETWORK_DATA, \
247 WifiMgrIdentifier, \
248 WIFI_MGR_HIDDEN_NETWORK_SIGNATURE \
249 )
250
251 //
252 // Global private data struct
253 //
254 struct _WIFI_MGR_PRIVATE_DATA {
255
256 UINT32 Signature;
257 EFI_HANDLE DriverHandle;
258 EFI_HII_HANDLE RegisteredHandle;
259 EFI_HII_CONFIG_ACCESS_PROTOCOL ConfigAccess;
260
261 UINT32 NicCount;
262 LIST_ENTRY NicList;
263 WIFI_MGR_DEVICE_DATA *CurrentNic;
264
265 //
266 // Data fields for Hii functionlity
267 //
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
271
272 //
273 //User Input Record
274 //
275 UINT8 SecurityType;
276 UINT8 EapAuthMethod;
277 UINT8 EapSecondAuthMethod;
278 CHAR16 EapIdentity[EAP_IDENTITY_SIZE];
279
280 WIFI_MGR_FILE_CONTEXT *FileContext;
281 WIFI_MGR_FILE_TYPE FileType;
282
283 UINT32 HiddenNetworkCount;
284 LIST_ENTRY HiddenNetworkList;
285 };
286
287 #define WIFI_MGR_PRIVATE_DATA_SIGNATURE SIGNATURE_32 ('W','M','P','D')
288
289 #define WIFI_MGR_PRIVATE_DATA_FROM_CONFIG_ACCESS(This) \
290 CR ( \
291 This, \
292 WIFI_MGR_PRIVATE_DATA, \
293 ConfigAccess, \
294 WIFI_MGR_PRIVATE_DATA_SIGNATURE \
295 )
296 extern WIFI_MGR_PRIVATE_DATA *mPrivate;
297
298 typedef enum {
299 TokenTypeGetNetworksToken,
300 TokenTypeConnectNetworkToken,
301 TokenTypeDisconnectNetworkToken,
302 TokenTypeMax,
303 } WIFI_MGR_MAC_CONFIG_TOKEN_TYPE;
304
305 typedef union {
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;
310
311 typedef struct {
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;
316
317 //
318 // Include files with function prototypes
319 //
320 #include "WifiConnectionMgrDriverBinding.h"
321 #include "WifiConnectionMgrImpl.h"
322 #include "WifiConnectionMgrComponentName.h"
323 #include "WifiConnectionMgrHiiConfigAccess.h"
324 #include "WifiConnectionMgrMisc.h"
325 #include "WifiConnectionMgrFileUtil.h"
326
327 #endif