mirror of
https://github.com/CloverHackyColor/CloverBootloader.git
synced 2024-11-28 12:25:19 +01:00
408 lines
13 KiB
C
408 lines
13 KiB
C
|
/** @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
|