blob: 1cdbb58712cb07155c19ccf6ab9f5529d327b357 [file] [log] [blame]
/** @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