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