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 322