| /** @file |
| This file defines the EFI Wireless MAC Connection II Protocol. |
| |
| Copyright (c) 2017, Intel Corporation. All rights reserved.<BR> |
| 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 |