/** @file | |
The miscellaneous structure definitions for WiFi connection driver. | |
Copyright (c) 2019 - 2022, Intel Corporation. All rights reserved.<BR> | |
SPDX-License-Identifier: BSD-2-Clause-Patent | |
**/ | |
#ifndef __EFI_WIFI_MGR_DXE_H__ | |
#define __EFI_WIFI_MGR_DXE_H__ | |
#include <Uefi.h> | |
// | |
// Libraries | |
// | |
#include <Library/UefiBootServicesTableLib.h> | |
#include <Library/UefiRuntimeServicesTableLib.h> | |
#include <Library/MemoryAllocationLib.h> | |
#include <Library/BaseMemoryLib.h> | |
#include <Library/BaseLib.h> | |
#include <Library/UefiLib.h> | |
#include <Library/DevicePathLib.h> | |
#include <Library/DebugLib.h> | |
#include <Library/HiiLib.h> | |
#include <Library/NetLib.h> | |
#include <Library/PrintLib.h> | |
#include <Library/UefiHiiServicesLib.h> | |
#include <Library/FileExplorerLib.h> | |
// | |
// UEFI Driver Model Protocols | |
// | |
#include <Protocol/DriverBinding.h> | |
#include <Protocol/HiiDatabase.h> | |
#include <Protocol/HiiPackageList.h> | |
#include <Protocol/ComponentName2.h> | |
#include <Protocol/ComponentName.h> | |
// | |
// Consumed Protocols | |
// | |
#include <Protocol/WiFi2.h> | |
#include <Protocol/AdapterInformation.h> | |
#include <Protocol/Supplicant.h> | |
#include <Protocol/SimpleNetwork.h> | |
#include <Protocol/SimpleFileSystem.h> | |
#include <Protocol/EapConfiguration.h> | |
#include <Protocol/WiFiProfileSyncProtocol.h> | |
// | |
// Produced Protocols | |
// | |
#include <Protocol/HiiConfigAccess.h> | |
// | |
// Guids | |
// | |
#include <Guid/ImageAuthentication.h> | |
#include <Guid/MdeModuleHii.h> | |
#include <Guid/WifiConnectionManagerConfigHii.h> | |
// | |
// NvData struct definition | |
// | |
#include "WifiConnectionMgrConfigNVDataStruct.h" | |
#include "WifiConnectionMgrConfig.h" | |
#include "EapContext.h" | |
#include "WifiConnectionMgrConfigHii.h" | |
// | |
// Driver Version | |
// | |
#define WIFI_MGR_DXE_VERSION 0xb | |
#define OUI_IEEE_80211I 0xAC0F00 | |
#define MAX_WIFI_CONNETION_ATTEMPTS 3 | |
typedef enum { | |
Ieee80211PairwiseCipherSuiteUseGroupCipherSuite = 0, | |
Ieee80211PairwiseCipherSuiteWEP40 = 1, | |
Ieee80211PairwiseCipherSuiteTKIP = 2, | |
Ieee80211PairwiseCipherSuiteCCMP = 4, | |
Ieee80211PairwiseCipherSuiteWEP104 = 5, | |
Ieee80211PairwiseCipherSuiteBIP = 6, | |
Ieee80211PairwiseCipherSuiteGCMP = 8, | |
Ieee80211PairwiseCipherSuiteGCMP256 = 9, | |
// ... | |
} IEEE_80211_PAIRWISE_CIPHER_SUITE; | |
#define IEEE_80211_PAIRWISE_CIPHER_SUITE_USE_GROUP (OUI_IEEE_80211I | (Ieee80211PairwiseCipherSuiteUseGroupCipherSuite << 24)) | |
#define IEEE_80211_PAIRWISE_CIPHER_SUITE_WEP40 (OUI_IEEE_80211I | (Ieee80211PairwiseCipherSuiteWEP40 << 24)) | |
#define IEEE_80211_PAIRWISE_CIPHER_SUITE_TKIP (OUI_IEEE_80211I | (Ieee80211PairwiseCipherSuiteTKIP << 24)) | |
#define IEEE_80211_PAIRWISE_CIPHER_SUITE_CCMP (OUI_IEEE_80211I | (Ieee80211PairwiseCipherSuiteCCMP << 24)) | |
#define IEEE_80211_PAIRWISE_CIPHER_SUITE_WEP104 (OUI_IEEE_80211I | (Ieee80211PairwiseCipherSuiteWEP104 << 24)) | |
#define IEEE_80211_PAIRWISE_CIPHER_SUITE_BIP (OUI_IEEE_80211I | (Ieee80211PairwiseCipherSuiteBIP << 24)) | |
#define IEEE_80211_PAIRWISE_CIPHER_SUITE_GCMP (OUI_IEEE_80211I | (Ieee80211PairwiseCipherSuiteGCMP << 24)) | |
#define IEEE_80211_PAIRWISE_CIPHER_SUITE_GCMP256 (OUI_IEEE_80211I | (Ieee80211PairwiseCipherSuiteGCMP256 << 24)) | |
typedef enum { | |
Ieee80211AkmSuite8021XOrPMKSA = 1, | |
Ieee80211AkmSuitePSK = 2, | |
Ieee80211AkmSuite8021XOrPMKSASHA256 = 5, | |
Ieee80211AkmSuitePSKSHA256 = 6, | |
Ieee80211AkmSuiteSAE = 8, | |
Ieee80211AkmSuite8021XSuiteB = 11, | |
Ieee80211AkmSuite8021XSuiteB192 = 12, | |
Ieee80211AkmSuiteOWE = 18, | |
// ... | |
} IEEE_80211_AKM_SUITE; | |
#define IEEE_80211_AKM_SUITE_8021X_OR_PMKSA (OUI_IEEE_80211I | (Ieee80211AkmSuite8021XOrPMKSA << 24)) | |
#define IEEE_80211_AKM_SUITE_PSK (OUI_IEEE_80211I | (Ieee80211AkmSuitePSK << 24)) | |
#define IEEE_80211_AKM_SUITE_8021X_OR_PMKSA_SHA256 (OUI_IEEE_80211I | (Ieee80211AkmSuite8021XOrPMKSASHA256 << 24)) | |
#define IEEE_80211_AKM_SUITE_PSK_SHA256 (OUI_IEEE_80211I | (Ieee80211AkmSuitePSKSHA256 << 24)) | |
#define IEEE_80211_AKM_SUITE_SAE (OUI_IEEE_80211I | (Ieee80211AkmSuiteSAE << 24)) | |
#define IEEE_80211_AKM_SUITE_8021X_SUITE_B (OUI_IEEE_80211I | (Ieee80211AkmSuite8021XSuiteB << 24)) | |
#define IEEE_80211_AKM_SUITE_8021X_SUITE_B192 (OUI_IEEE_80211I | (Ieee80211AkmSuite8021XSuiteB192 << 24)) | |
#define IEEE_80211_AKM_SUITE_OWE (OUI_IEEE_80211I | (Ieee80211AkmSuiteOWE << 24)) | |
// | |
// Protocol instances | |
// | |
extern EFI_DRIVER_BINDING_PROTOCOL gWifiMgrDxeDriverBinding; | |
extern EFI_COMPONENT_NAME2_PROTOCOL gWifiMgrDxeComponentName2; | |
extern EFI_COMPONENT_NAME_PROTOCOL gWifiMgrDxeComponentName; | |
extern EFI_HII_CONFIG_ACCESS_PROTOCOL gWifiMgrDxeHiiConfigAccess; | |
// | |
// Private Context Data Structure | |
// | |
typedef enum { | |
WifiMgrDisconnected, | |
WifiMgrConnectingToAp, | |
WifiMgrConnectedToAp, | |
WifiMgrDisconnectingToAp, | |
WifiMgrConnectStateMaximum | |
} WIFI_MGR_CONNECT_STATE; | |
typedef enum { | |
WifiMgrScanFinished, | |
WifiMgrScanning, | |
WifiMgrScanStateMaximum | |
} WIFI_MGR_SCAN_STATE; | |
#define WIFI_SCAN_FREQUENCY 30 | |
typedef struct _WIFI_MGR_SUPPORTED_SUITES { | |
EFI_80211_AKM_SUITE_SELECTOR *SupportedAKMSuites; | |
EFI_80211_CIPHER_SUITE_SELECTOR *SupportedSwCipherSuites; | |
EFI_80211_CIPHER_SUITE_SELECTOR *SupportedHwCipherSuites; | |
} WIFI_MGR_SUPPORTED_SUITES; | |
#define EFI_WIFIMGR_PRIVATE_GUID \ | |
{ \ | |
0x99b7c019, 0x4789, 0x4829, { 0xa7, 0xbd, 0x0d, 0x4b, 0xaa, 0x62, 0x28, 0x72 } \ | |
} | |
typedef struct _WIFI_MGR_PRIVATE_DATA WIFI_MGR_PRIVATE_DATA; | |
typedef struct _WIFI_MGR_PRIVATE_PROTOCOL { | |
UINT32 Reserved; | |
} WIFI_MGR_PRIVATE_PROTOCOL; | |
typedef struct _WIFI_MGR_FILE_CONTEXT { | |
EFI_FILE_HANDLE FHandle; | |
UINT16 *FileName; | |
} WIFI_MGR_FILE_CONTEXT; | |
typedef enum { | |
FileTypeCACert, | |
FileTypeClientCert, | |
FileTypeMax | |
} WIFI_MGR_FILE_TYPE; | |
typedef struct { | |
UINT32 Signature; | |
EFI_HANDLE DriverHandle; | |
EFI_HANDLE ControllerHandle; | |
EFI_EVENT TickTimer; | |
WIFI_MGR_PRIVATE_DATA *Private; | |
// | |
// Pointers to consumed protocols | |
// | |
EFI_WIRELESS_MAC_CONNECTION_II_PROTOCOL *Wmp; | |
EFI_SUPPLICANT_PROTOCOL *Supplicant; | |
EFI_EAP_CONFIGURATION_PROTOCOL *EapConfig; | |
// | |
// Produced protocols | |
// | |
WIFI_MGR_PRIVATE_PROTOCOL WifiMgrIdentifier; | |
// | |
// Private functions and data fields | |
// | |
LIST_ENTRY Link; // Link to the NicList in global private data structure. | |
UINT32 NicIndex; | |
EFI_80211_MAC_ADDRESS MacAddress; | |
WIFI_MGR_SUPPORTED_SUITES SupportedSuites; | |
EFI_ADAPTER_INFO_MEDIA_STATE LastLinkState; | |
// | |
// The network is currently connected, connecting or disconnecting. | |
// Only one network can be operated at one time. | |
// | |
WIFI_MGR_NETWORK_PROFILE *CurrentOperateNetwork; | |
WIFI_MGR_NETWORK_PROFILE *ConnectPendingNetwork; | |
BOOLEAN HasDisconnectPendingNetwork; | |
// | |
// Profile related data fields | |
// | |
LIST_ENTRY ProfileList; // List of WIFI_MGR_NETWORK_PROFILE | |
UINT32 AvailableCount; | |
UINT32 MaxProfileIndex; | |
WIFI_MGR_NETWORK_PROFILE *UserSelectedProfile; | |
// | |
// Data fields for Hii functionlity | |
// | |
BOOLEAN OneTimeScanRequest; | |
BOOLEAN OneTimeConnectRequest; | |
BOOLEAN OneTimeDisconnectRequest; | |
WIFI_MGR_SCAN_STATE ScanState; | |
UINTN ScanTickTime; | |
WIFI_MGR_CONNECT_STATE ConnectState; | |
BOOLEAN ConnectStateChanged; | |
} WIFI_MGR_DEVICE_DATA; | |
#define WIFI_MGR_DEVICE_DATA_SIGNATURE SIGNATURE_32 ('W','M','D','D') | |
#define WIFI_MGR_DEVICE_DATA_FROM_IDENTIFIER(Identifier) \ | |
CR ( \ | |
Identifier, \ | |
WIFI_MGR_DEVICE_DATA, \ | |
WifiMgrIdentifier, \ | |
WIFI_MGR_DEVICE_DATA_SIGNATURE \ | |
) | |
typedef struct { | |
UINT32 Signature; | |
LIST_ENTRY Link; | |
CHAR16 SSId[SSID_STORAGE_SIZE]; | |
} WIFI_HIDDEN_NETWORK_DATA; | |
#define WIFI_MGR_HIDDEN_NETWORK_SIGNATURE SIGNATURE_32 ('W','M','H','N') | |
#define WIFI_MGR_HIDDEN_NETWORK_FROM_IDENTIFIER(Identifier) \ | |
CR ( \ | |
Identifier, \ | |
WIFI_HIDDEN_NETWORK_DATA, \ | |
WifiMgrIdentifier, \ | |
WIFI_MGR_HIDDEN_NETWORK_SIGNATURE \ | |
) | |
// | |
// Global private data struct | |
// | |
struct _WIFI_MGR_PRIVATE_DATA { | |
UINT32 Signature; | |
EFI_HANDLE DriverHandle; | |
EFI_HII_HANDLE RegisteredHandle; | |
EFI_HII_CONFIG_ACCESS_PROTOCOL ConfigAccess; | |
UINT32 NicCount; | |
LIST_ENTRY NicList; | |
WIFI_MGR_DEVICE_DATA *CurrentNic; | |
// | |
// Data fields for Hii functionlity | |
// | |
EFI_EVENT NetworkListRefreshEvent; // Event to refresh the network list form | |
EFI_EVENT ConnectFormRefreshEvent; // Event to refresh the connect form | |
EFI_EVENT MainPageRefreshEvent; // Event to refresh the main page | |
// | |
// User Input Record | |
// | |
UINT8 SecurityType; | |
UINT8 EapAuthMethod; | |
UINT8 EapSecondAuthMethod; | |
CHAR16 EapIdentity[EAP_IDENTITY_SIZE]; | |
WIFI_MGR_FILE_CONTEXT *FileContext; | |
WIFI_MGR_FILE_TYPE FileType; | |
UINT32 HiddenNetworkCount; | |
LIST_ENTRY HiddenNetworkList; | |
}; | |
#define WIFI_MGR_PRIVATE_DATA_SIGNATURE SIGNATURE_32 ('W','M','P','D') | |
#define WIFI_MGR_PRIVATE_DATA_FROM_CONFIG_ACCESS(This) \ | |
CR ( \ | |
This, \ | |
WIFI_MGR_PRIVATE_DATA, \ | |
ConfigAccess, \ | |
WIFI_MGR_PRIVATE_DATA_SIGNATURE \ | |
) | |
extern WIFI_MGR_PRIVATE_DATA *mPrivate; | |
typedef enum { | |
TokenTypeGetNetworksToken, | |
TokenTypeConnectNetworkToken, | |
TokenTypeDisconnectNetworkToken, | |
TokenTypeMax, | |
} WIFI_MGR_MAC_CONFIG_TOKEN_TYPE; | |
typedef union { | |
EFI_80211_GET_NETWORKS_TOKEN *GetNetworksToken; | |
EFI_80211_CONNECT_NETWORK_TOKEN *ConnectNetworkToken; | |
EFI_80211_DISCONNECT_NETWORK_TOKEN *DisconnectNetworkToken; | |
} MAC_CONNECTION2_ADAPTER_TOKEN; | |
typedef struct { | |
WIFI_MGR_DEVICE_DATA *Nic; | |
WIFI_MGR_MAC_CONFIG_TOKEN_TYPE Type; | |
MAC_CONNECTION2_ADAPTER_TOKEN Token; | |
} WIFI_MGR_MAC_CONFIG_TOKEN; | |
// | |
// Include files with function prototypes | |
// | |
#include "WifiConnectionMgrDriverBinding.h" | |
#include "WifiConnectionMgrImpl.h" | |
#include "WifiConnectionMgrComponentName.h" | |
#include "WifiConnectionMgrHiiConfigAccess.h" | |
#include "WifiConnectionMgrMisc.h" | |
#include "WifiConnectionMgrFileUtil.h" | |
#endif |