https://bugzilla.tianocore.org/show_bug.cgi?id=1373 Replace BSD 2-Clause License with BSD+Patent License. This change is based on the following emails: https://lists.01.org/pipermail/edk2-devel/2019-February/036260.html https://lists.01.org/pipermail/edk2-devel/2018-October/030385.html RFCs with detailed process for the license change: V3: https://lists.01.org/pipermail/edk2-devel/2019-March/038116.html V2: https://lists.01.org/pipermail/edk2-devel/2019-March/037669.html V1: https://lists.01.org/pipermail/edk2-devel/2019-March/037500.html Contributed-under: TianoCore Contribution Agreement 1.1 Signed-off-by: Michael D Kinney <michael.d.kinney@intel.com> Reviewed-by: Liming Gao <liming.gao@intel.com>
		
			
				
	
	
		
			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
 |