/** @file This file defines the EFI Wireless MAC Connection II Protocol. Copyright (c) 2016, 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; } 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