/** @file | |
This file defines the EFI Wireless MAC Connection II Protocol. | |
Copyright (c) 2017, Intel Corporation. All rights reserved.<BR> | |
This program and the accompanying materials | |
are licensed and made available under the terms and conditions of the BSD License | |
which accompanies this distribution. The full text of the license may be found at | |
http://opensource.org/licenses/bsd-license.php | |
THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, | |
WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. | |
@par Revision Reference: | |
This Protocol is introduced in UEFI Specification 2.6 | |
**/ | |
#ifndef __EFI_WIFI2_PROTOCOL_H__ | |
#define __EFI_WIFI2_PROTOCOL_H__ | |
#define EFI_WIRELESS_MAC_CONNECTION_II_PROTOCOL_GUID \ | |
{ \ | |
0x1b0fb9bf, 0x699d, 0x4fdd, { 0xa7, 0xc3, 0x25, 0x46, 0x68, 0x1b, 0xf6, 0x3b } \ | |
} | |
typedef struct _EFI_WIRELESS_MAC_CONNECTION_II_PROTOCOL EFI_WIRELESS_MAC_CONNECTION_II_PROTOCOL; | |
/// | |
/// EFI_80211_BSS_TYPE | |
/// | |
typedef enum { | |
IeeeInfrastructureBSS, | |
IeeeIndependentBSS, | |
IeeeMeshBSS, | |
IeeeAnyBss | |
} EFI_80211_BSS_TYPE; | |
/// | |
/// EFI_80211_CONNECT_NETWORK_RESULT_CODE | |
/// | |
typedef enum { | |
// | |
// The connection establishment operation finished successfully. | |
// | |
ConnectSuccess, | |
// | |
// The connection was refused by the Network. | |
// | |
ConnectRefused, | |
// | |
// The connection establishment operation failed (i.e, Network is not | |
// detected). | |
// | |
ConnectFailed, | |
// | |
// The connection establishment operation was terminated on timeout. | |
// | |
ConnectFailureTimeout, | |
// | |
// The connection establishment operation failed on other reason. | |
// | |
ConnectFailedReasonUnspecified | |
} EFI_80211_CONNECT_NETWORK_RESULT_CODE; | |
/// | |
/// EFI_80211_MAC_ADDRESS | |
/// | |
typedef struct { | |
UINT8 Addr[6]; | |
} EFI_80211_MAC_ADDRESS; | |
#define EFI_MAX_SSID_LEN 32 | |
/// | |
/// EFI_80211_SSID | |
/// | |
typedef struct { | |
// | |
// Length in bytes of the SSId. If zero, ignore SSId field. | |
// | |
UINT8 SSIdLen; | |
// | |
// Specifies the service set identifier. | |
// | |
UINT8 SSId[EFI_MAX_SSID_LEN]; | |
} EFI_80211_SSID; | |
/// | |
/// EFI_80211_GET_NETWORKS_DATA | |
/// | |
typedef struct { | |
// | |
// The number of EFI_80211_SSID in SSIDList. If zero, SSIDList should be | |
// ignored. | |
// | |
UINT32 NumOfSSID; | |
// | |
// The SSIDList is a pointer to an array of EFI_80211_SSID instances. The | |
// number of entries is specified by NumOfSSID. The array should only include | |
// SSIDs of hidden networks. It is suggested that the caller inputs less than | |
// 10 elements in the SSIDList. It is the caller's responsibility to free | |
// this buffer. | |
// | |
EFI_80211_SSID SSIDList[1]; | |
} EFI_80211_GET_NETWORKS_DATA; | |
/// | |
/// EFI_80211_SUITE_SELECTOR | |
/// | |
typedef struct { | |
// | |
// Organization Unique Identifier, as defined in IEEE 802.11 standard, | |
// usually set to 00-0F-AC. | |
// | |
UINT8 Oui[3]; | |
// | |
// Suites types, as defined in IEEE 802.11 standard. | |
// | |
UINT8 SuiteType; | |
} EFI_80211_SUITE_SELECTOR; | |
/// | |
/// EFI_80211_AKM_SUITE_SELECTOR | |
/// | |
typedef struct { | |
// | |
// Indicates the number of AKM suite selectors that are contained in | |
// AKMSuiteList. If zero, the AKMSuiteList is ignored. | |
// | |
UINT16 AKMSuiteCount; | |
// | |
// A variable-length array of AKM suites, as defined in IEEE 802.11 standard, | |
// Table 8-101. The number of entries is specified by AKMSuiteCount. | |
// | |
EFI_80211_SUITE_SELECTOR AKMSuiteList[1]; | |
} EFI_80211_AKM_SUITE_SELECTOR; | |
/// | |
/// EFI_80211_CIPHER_SUITE_SELECTOR | |
/// | |
typedef struct { | |
// | |
// Indicates the number of cipher suites that are contained in | |
// CipherSuiteList. If zero, the CipherSuiteList is ignored. | |
// | |
UINT16 CipherSuiteCount; | |
// | |
// A variable-length array of cipher suites, as defined in IEEE 802.11 | |
// standard, Table 8-99. The number of entries is specified by | |
// CipherSuiteCount. | |
// | |
EFI_80211_SUITE_SELECTOR CipherSuiteList[1]; | |
} EFI_80211_CIPHER_SUITE_SELECTOR; | |
/// | |
/// EFI_80211_NETWORK | |
/// | |
typedef struct { | |
// | |
// Specifies the type of the BSS. | |
// | |
EFI_80211_BSS_TYPE BSSType; | |
// | |
// Specifies the SSID of the BSS. | |
// | |
EFI_80211_SSID SSId; | |
// | |
// Pointer to the AKM suites supported in the wireless network. | |
// | |
EFI_80211_AKM_SUITE_SELECTOR *AKMSuite; | |
// | |
// Pointer to the cipher suites supported in the wireless network. | |
// | |
EFI_80211_CIPHER_SUITE_SELECTOR *CipherSuite; | |
} EFI_80211_NETWORK; | |
/// | |
/// EFI_80211_NETWORK_DESCRIPTION | |
/// | |
typedef struct { | |
// | |
// Specifies the found wireless network. | |
// | |
EFI_80211_NETWORK Network; | |
// | |
// Indicates the network quality as a value between 0 to 100, where 100 | |
// indicates the highest network quality. | |
// | |
UINT8 NetworkQuality; | |
} EFI_80211_NETWORK_DESCRIPTION; | |
/// | |
/// EFI_80211_GET_NETWORKS_RESULT | |
/// | |
typedef struct { | |
// | |
// The number of EFI_80211_NETWORK_DESCRIPTION in NetworkDesc. If zero, | |
// NetworkDesc should be ignored. | |
// | |
UINT8 NumOfNetworkDesc; | |
// | |
// The NetworkDesc is a pointer to an array of EFI_80211_NETWORK_DESCRIPTION | |
// instances. It is caller's responsibility to free this buffer. | |
// | |
EFI_80211_NETWORK_DESCRIPTION NetworkDesc[1]; | |
} EFI_80211_GET_NETWORKS_RESULT; | |
/// | |
/// EFI_80211_GET_NETWORKS_TOKEN | |
/// | |
typedef struct { | |
// | |
// If the status code returned by GetNetworks() is EFI_SUCCESS, then this | |
// Event will be signaled after the Status field is updated by the EFI | |
// Wireless MAC Connection Protocol II driver. The type of Event must be | |
// EFI_NOTIFY_SIGNAL. | |
// | |
EFI_EVENT Event; | |
// | |
// Will be set to one of the following values: | |
// EFI_SUCCESS: The operation completed successfully. | |
// EFI_NOT_FOUND: Failed to find available wireless networks. | |
// EFI_DEVICE_ERROR: An unexpected network or system error occurred. | |
// EFI_ACCESS_DENIED: The operation is not completed due to some underlying | |
// hardware or software state. | |
// EFI_NOT_READY: The operation is started but not yet completed. | |
// | |
EFI_STATUS Status; | |
// | |
// Pointer to the input data for getting networks. | |
// | |
EFI_80211_GET_NETWORKS_DATA *Data; | |
// | |
// Indicates the scan result. It is caller's responsibility to free this | |
// buffer. | |
// | |
EFI_80211_GET_NETWORKS_RESULT *Result; | |
} EFI_80211_GET_NETWORKS_TOKEN; | |
/// | |
/// EFI_80211_CONNECT_NETWORK_DATA | |
/// | |
typedef struct { | |
// | |
// Specifies the wireless network to connect to. | |
// | |
EFI_80211_NETWORK *Network; | |
// | |
// Specifies a time limit in seconds that is optionally present, after which | |
// the connection establishment procedure is terminated by the UNDI driver. | |
// This is an optional parameter and may be 0. Values of 5 seconds or higher | |
// are recommended. | |
// | |
UINT32 FailureTimeout; | |
} EFI_80211_CONNECT_NETWORK_DATA; | |
/// | |
/// EFI_80211_CONNECT_NETWORK_TOKEN | |
/// | |
typedef struct { | |
// | |
// If the status code returned by ConnectNetwork() is EFI_SUCCESS, then this | |
// Event will be signaled after the Status field is updated by the EFI | |
// Wireless MAC Connection Protocol II driver. The type of Event must be | |
// EFI_NOTIFY_SIGNAL. | |
// | |
EFI_EVENT Event; | |
// | |
// Will be set to one of the following values: | |
// EFI_SUCCESS: The operation completed successfully. | |
// EFI_DEVICE_ERROR: An unexpected network or system error occurred. | |
// EFI_ACCESS_DENIED: The operation is not completed due to some underlying | |
// hardware or software state. | |
// EFI_NOT_READY: The operation is started but not yet completed. | |
// | |
EFI_STATUS Status; | |
// | |
// Pointer to the connection data. | |
// | |
EFI_80211_CONNECT_NETWORK_DATA *Data; | |
// | |
// Indicates the connection state. | |
// | |
EFI_80211_CONNECT_NETWORK_RESULT_CODE ResultCode; | |
} EFI_80211_CONNECT_NETWORK_TOKEN; | |
/// | |
/// EFI_80211_DISCONNECT_NETWORK_TOKEN | |
/// | |
typedef struct { | |
// | |
// If the status code returned by DisconnectNetwork() is EFI_SUCCESS, then | |
// this Event will be signaled after the Status field is updated by the EFI | |
// Wireless MAC Connection Protocol II driver. The type of Event must be | |
// EFI_NOTIFY_SIGNAL. | |
// | |
EFI_EVENT Event; | |
// | |
// Will be set to one of the following values: | |
// EFI_SUCCESS: The operation completed successfully | |
// EFI_DEVICE_ERROR: An unexpected network or system error occurred. | |
// EFI_ACCESS_DENIED: The operation is not completed due to some underlying | |
// hardware or software state. | |
// | |
EFI_STATUS Status; | |
} EFI_80211_DISCONNECT_NETWORK_TOKEN; | |
/** | |
Request a survey of potential wireless networks that administrator can later | |
elect to try to join. | |
@param[in] This Pointer to the | |
EFI_WIRELESS_MAC_CONNECTION_II_PROTOCOL | |
instance. | |
@param[in] Token Pointer to the token for getting wireless | |
network. | |
@retval EFI_SUCCESS The operation started, and an event will | |
eventually be raised for the caller. | |
@retval EFI_INVALID_PARAMETER One or more of the following conditions is | |
TRUE: | |
This is NULL. | |
Token is NULL. | |
@retval EFI_UNSUPPORTED One or more of the input parameters is not | |
supported by this implementation. | |
@retval EFI_ALREADY_STARTED The operation of getting wireless network is | |
already started. | |
@retval EFI_OUT_OF_RESOURCES Required system resources could not be | |
allocated. | |
**/ | |
typedef | |
EFI_STATUS | |
(EFIAPI *EFI_WIRELESS_MAC_CONNECTION_II_GET_NETWORKS) ( | |
IN EFI_WIRELESS_MAC_CONNECTION_II_PROTOCOL *This, | |
IN EFI_80211_GET_NETWORKS_TOKEN *Token | |
); | |
/** | |
Connect a wireless network specified by a particular SSID, BSS type and | |
Security type. | |
@param[in] This Pointer to the | |
EFI_WIRELESS_MAC_CONNECTION_II_PROTOCOL | |
instance. | |
@param[in] Token Pointer to the token for connecting wireless | |
network. | |
@retval EFI_SUCCESS The operation started successfully. Results | |
will be notified eventually. | |
@retval EFI_INVALID_PARAMETER One or more of the following conditions is | |
TRUE: | |
This is NULL. | |
Token is NULL. | |
@retval EFI_UNSUPPORTED One or more of the input parameters are not | |
supported by this implementation. | |
@retval EFI_ALREADY_STARTED The connection process is already started. | |
@retval EFI_NOT_FOUND The specified wireless network is not found. | |
@retval EFI_OUT_OF_RESOURCES Required system resources could not be | |
allocated. | |
**/ | |
typedef | |
EFI_STATUS | |
(EFIAPI *EFI_WIRELESS_MAC_CONNECTION_II_CONNECT_NETWORK) ( | |
IN EFI_WIRELESS_MAC_CONNECTION_II_PROTOCOL *This, | |
IN EFI_80211_CONNECT_NETWORK_TOKEN *Token | |
); | |
/** | |
Request a disconnection with current connected wireless network. | |
@param[in] This Pointer to the | |
EFI_WIRELESS_MAC_CONNECTION_II_PROTOCOL | |
instance. | |
@param[in] Token Pointer to the token for disconnecting | |
wireless network. | |
@retval EFI_SUCCESS The operation started successfully. Results | |
will be notified eventually. | |
@retval EFI_INVALID_PARAMETER One or more of the following conditions is | |
TRUE: | |
This is NULL. | |
Token is NULL. | |
@retval EFI_UNSUPPORTED One or more of the input parameters are not | |
supported by this implementation. | |
@retval EFI_NOT_FOUND Not connected to a wireless network. | |
@retval EFI_OUT_OF_RESOURCES Required system resources could not be | |
allocated. | |
**/ | |
typedef | |
EFI_STATUS | |
(EFIAPI *EFI_WIRELESS_MAC_CONNECTION_II_DISCONNECT_NETWORK) ( | |
IN EFI_WIRELESS_MAC_CONNECTION_II_PROTOCOL *This, | |
IN EFI_80211_DISCONNECT_NETWORK_TOKEN *Token | |
); | |
/// | |
/// The EFI_WIRELESS_MAC_CONNECTION_II_PROTOCOL provides network management | |
/// service interfaces for 802.11 network stack. It is used by network | |
/// applications (and drivers) to establish wireless connection with a wireless | |
/// network. | |
/// | |
struct _EFI_WIRELESS_MAC_CONNECTION_II_PROTOCOL { | |
EFI_WIRELESS_MAC_CONNECTION_II_GET_NETWORKS GetNetworks; | |
EFI_WIRELESS_MAC_CONNECTION_II_CONNECT_NETWORK ConnectNetwork; | |
EFI_WIRELESS_MAC_CONNECTION_II_DISCONNECT_NETWORK DisconnectNetwork; | |
}; | |
extern EFI_GUID gEfiWiFi2ProtocolGuid; | |
#endif |