/** @file This file defines the EFI Wireless MAC Connection II Protocol. Copyright (c) 2017, Intel Corporation. All rights reserved.
SPDX-License-Identifier: BSD-2-Clause-Patent @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