From 0d2aa2b19602644417862e887a863950917bdc68 Mon Sep 17 00:00:00 2001 From: Hao Wu Date: Wed, 20 May 2015 05:20:15 +0000 Subject: [PATCH] MdePkg: Add EFI Wireless MAC Connection Protocol definitions Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Hao Wu Reviewed-by: Ye Ting git-svn-id: https://svn.code.sf.net/p/edk2/code/trunk/edk2@17475 6f19259b-4bc3-4df7-8a09-765794883524 --- MdePkg/Include/Protocol/WiFi.h | 1144 ++++++++++++++++++++++++++++++++ MdePkg/MdePkg.dec | 3 + 2 files changed, 1147 insertions(+) create mode 100644 MdePkg/Include/Protocol/WiFi.h diff --git a/MdePkg/Include/Protocol/WiFi.h b/MdePkg/Include/Protocol/WiFi.h new file mode 100644 index 0000000000..8e9fb3835d --- /dev/null +++ b/MdePkg/Include/Protocol/WiFi.h @@ -0,0 +1,1144 @@ +/** @file + This file provides management service interfaces of 802.11 MAC layer. It is used by + network applications (and drivers) to establish wireless connection with an access + point (AP). + + Copyright (c) 2015, Intel Corporation. All rights reserved.
+ 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.5 + +**/ + +#ifndef __EFI_WIFI_PROTOCOL_H__ +#define __EFI_WIFI_PROTOCOL_H__ + +#define EFI_WIRELESS_MAC_CONNECTION_PROTOCOL_GUID \ + { \ + 0xda55bc9, 0x45f8, 0x4bb4, {0x87, 0x19, 0x52, 0x24, 0xf1, 0x8a, 0x4d, 0x45 } \ + } + +typedef struct _EFI_WIRELESS_MAC_CONNECTION_PROTOCOL EFI_WIRELESS_MAC_CONNECTION_PROTOCOL; + +/// +/// EFI_80211_BSS_TYPE +/// +typedef enum { + IeeeInfrastructureBSS, + IeeeIndependentBSS, + IeeeMeshBSS, + IeeeAnyBss +} EFI_80211_BSS_TYPE; + +/// +/// EFI_80211_ACC_NET_TYPE +/// +typedef enum { + IeeePrivate = 0, + IeeePrivatewithGuest = 1, + IeeeChargeablePublic = 2, + IeeeFreePublic = 3, + IeeePersonal = 4, + IeeeEmergencyServOnly = 5, + IeeeTestOrExp = 14, + IeeeWildcard = 15 +} EFI_80211_ACC_NET_TYPE; + +/// +/// EFI_80211_ASSOCIATE_RESULT_CODE +/// +typedef enum { + AssociateSuccess, + AssociateRefusedReasonUnspecified, + AssociateRefusedCapsMismatch, + AssociateRefusedExtReason, + AssociateRefusedAPOutOfMemory, + AssociateRefusedBasicRatesMismatch, + AssociateRejectedEmergencyServicesNotSupported, + AssociateRefusedTemporarily +} EFI_80211_ASSOCIATE_RESULT_CODE; + +/// +/// EFI_80211_SCAN_RESULT_CODE +/// +typedef enum { + /// + /// The scan operation finished successfully. + /// + ScanSuccess, + /// + /// The scan operation is not supported in current implementation. + /// + ScanNotSupported +} EFI_80211_SCAN_RESULT_CODE; + +/// +/// EFI_80211_REASON_CODE +/// +typedef enum { + Ieee80211UnspecifiedReason = 1, + Ieee80211PreviousAuthenticateInvalid = 2, + Ieee80211DeauthenticatedSinceLeaving = 3, + Ieee80211DisassociatedDueToInactive = 4, + Ieee80211DisassociatedSinceApUnable = 5, + Ieee80211Class2FrameNonauthenticated = 6, + Ieee80211Class3FrameNonassociated = 7, + Ieee80211DisassociatedSinceLeaving = 8, + // ... +} EFI_80211_REASON_CODE; + +/// +/// EFI_80211_DISASSOCIATE_RESULT_CODE +/// +typedef enum { + /// + /// Disassociation process completed successfully. + /// + DisassociateSuccess, + /// + /// Disassociation failed due to any input parameter is invalid. + /// + DisassociateInvalidParameters +} EFI_80211_DISASSOCIATE_RESULT_CODE; + +/// +/// EFI_80211_AUTHENTICATION_TYPE +/// +typedef enum { + /// + /// Open system authentication, admits any STA to the DS. + /// + OpenSystem, + /// + /// Shared Key authentication relies on WEP to demonstrate knowledge of a WEP + /// encryption key. + /// + SharedKey, + /// + /// FT authentication relies on keys derived during the initial mobility domain + /// association to authenticate the stations. + /// + FastBSSTransition, + /// + /// SAE authentication uses finite field cryptography to prove knowledge of a shared + /// password. + /// + SAE +} EFI_80211_AUTHENTICATION_TYPE; + +/// +/// EFI_80211_AUTHENTICATION_RESULT_CODE +/// +typedef enum { + AuthenticateSuccess, + AuthenticateRefused, + AuthenticateAnticLoggingTokenRequired, + AuthenticateFiniteCyclicGroupNotSupported, + AuthenticationRejected, + AuthenticateInvalidParameter +} EFI_80211_AUTHENTICATE_RESULT_CODE; + +/// +/// EFI_80211_MAC_ADDRESS +/// +typedef struct { + UINT8 Addr[6]; +} EFI_80211_MAC_ADDRESS; + +/// +/// EFI_80211_ELEMENT_HEADER +/// +typedef struct { + /// + /// A unique element ID defined in IEEE 802.11 specification. + /// + UINT8 ElementID; + /// + /// Specifies the number of octets in the element body. + /// + UINT8 Length; +} EFI_80211_ELEMENT_HEADER; + +/// +/// EFI_80211_ELEMENT_REQ +/// +typedef struct { + /// + /// Common header of an element. + /// + EFI_80211_ELEMENT_HEADER Hdr; + /// + /// Start of elements that are requested to be included in the Probe Response frame. + /// The elements are listed in order of increasing element ID. + /// + UINT8 RequestIDs[1]; +} EFI_80211_ELEMENT_REQ; + +/// +/// EFI_80211_ELEMENT_SSID +/// +typedef struct { + /// + /// Common header of an element. + /// + EFI_80211_ELEMENT_HEADER Hdr; + /// + /// Service set identifier. If Hdr.Length is zero, this field is ignored. + /// + UINT8 SSId[32]; +} EFI_80211_ELEMENT_SSID; + +/// +/// EFI_80211_SCAN_DATA +/// +typedef struct { + /// + /// Determines whether infrastructure BSS, IBSS, MBSS, or all, are included in the + /// scan. + /// + EFI_80211_BSS_TYPE BSSType; + /// + /// Indicates a specific or wildcard BSSID. Use all binary 1s to represent all SSIDs. + /// + EFI_80211_MAC_ADDRESS BSSId; + /// + /// Length in bytes of the SSId. If zero, ignore SSId field. + /// + UINT8 SSIdLen; + /// + /// Specifies the desired SSID or the wildcard SSID. Use NULL to represent all SSIDs. + /// + UINT8 *SSId; + /// + /// Indicates passive scanning if TRUE. + /// + BOOLEAN PassiveMode; + /// + /// The delay in microseconds to be used prior to transmitting a Probe frame during + /// active scanning. If zero, the value can be overridden by an + /// implementation-dependent default value. + /// + UINT32 ProbeDelay; + /// + /// Specifies a list of channels that are examined when scanning for a BSS. If set to + /// NULL, all valid channels will be scanned. + /// + UINT32 *ChannelList; + /// + /// Indicates the minimum time in TU to spend on each channel when scanning. If zero, + /// the value can be overridden by an implementation-dependent default value. + /// + UINT32 MinChannelTime; + /// + /// Indicates the maximum time in TU to spend on each channel when scanning. If zero, + /// the value can be overridden by an implementation-dependent default value. + /// + UINT32 MaxChannelTime; + /// + /// Points to an optionally present element. This is an optional parameter and may be + /// NULL. + /// + EFI_80211_ELEMENT_REQ *RequestInformation; + /// + /// Indicates one or more SSID elements that are optionally present. This is an + /// optional parameter and may be NULL. + /// + EFI_80211_ELEMENT_SSID *SSIDList; + /// + /// Specifies a desired specific access network type or the wildcard access network + /// type. Use 15 as wildcard access network type. + /// + EFI_80211_ACC_NET_TYPE AccessNetworkType; + /// + /// Specifies zero or more elements. This is an optional parameter and may be NULL. + /// + UINT8 *VendorSpecificInfo; +} EFI_80211_SCAN_DATA; + +/// +/// EFI_80211_COUNTRY_TRIPLET_SUBBAND +/// +typedef struct { + /// + /// Indicates the lowest channel number in the subband. It has a positive integer + /// value less than 201. + /// + UINT8 FirstChannelNum; + /// + /// Indicates the number of channels in the subband. + /// + UINT8 NumOfChannels; + /// + /// Indicates the maximum power in dBm allowed to be transmitted. + /// + UINT8 MaxTxPowerLevel; +} EFI_80211_COUNTRY_TRIPLET_SUBBAND; + +/// +/// EFI_80211_COUNTRY_TRIPLET_OPERATE +/// +typedef struct { + /// + /// Indicates the operating extension identifier. It has a positive integer value of + /// 201 or greater. + /// + UINT8 OperatingExtId; + /// + /// Index into a set of values for radio equipment set of rules. + /// + UINT8 OperatingClass; + /// + /// Specifies aAirPropagationTime characteristics used in BSS operation. Refer the + /// definition of aAirPropagationTime in IEEE 802.11 specification. + /// + UINT8 CoverageClass; +} EFI_80211_COUNTRY_TRIPLET_OPERATE; + +/// +/// EFI_80211_COUNTRY_TRIPLET +/// +typedef union { + /// + /// The subband triplet. + /// + EFI_80211_COUNTRY_TRIPLET_SUBBAND Subband; + /// + /// The operating triplet. + /// + EFI_80211_COUNTRY_TRIPLET_OPERATE Operating; +} EFI_80211_COUNTRY_TRIPLET; + +/// +/// EFI_80211_ELEMENT_COUNTRY +/// +typedef struct { + /// + /// Common header of an element. + /// + EFI_80211_ELEMENT_HEADER Hdr; + /// + /// Specifies country strings in 3 octets. + /// + UINT8 CountryStr[3]; + /// + /// Indicates a triplet that repeated in country element. The number of triplets is + /// determined by the Hdr.Length field. + /// + EFI_80211_COUNTRY_TRIPLET CountryTriplet[1]; +} EFI_80211_ELEMENT_COUNTRY; + +/// +/// EFI_80211_ELEMENT_DATA_RSN +/// +typedef struct { + /// + /// Indicates the version number of the RSNA protocol. Value 1 is defined in current + /// IEEE 802.11 specification. + /// + UINT16 Version; + /// + /// Specifies the cipher suite selector used by the BSS to protect group address frames. + /// + UINT32 GroupDataCipherSuite; + /// + /// Indicates the number of pairwise cipher suite selectors that are contained in + /// PairwiseCipherSuiteList. + /// +//UINT16 PairwiseCipherSuiteCount; + /// + /// Contains a series of cipher suite selectors that indicate the pairwise cipher + /// suites contained in this element. + /// +//UINT32 PairwiseCipherSuiteList[PairwiseCipherSuiteCount]; + /// + /// Indicates the number of AKM suite selectors that are contained in AKMSuiteList. + /// +//UINT16 AKMSuiteCount; + /// + /// Contains a series of AKM suite selectors that indicate the AKM suites contained in + /// this element. + /// +//UINT32 AKMSuiteList[AKMSuiteCount]; + /// + /// Indicates requested or advertised capabilities. + /// +//UINT16 RSNCapabilities; + /// + /// Indicates the number of PKMIDs in the PMKIDList. + /// +//UINT16 PMKIDCount; + /// + /// Contains zero or more PKMIDs that the STA believes to be valid for the destination + /// AP. +//UINT8 PMKIDList[PMKIDCount][16]; + /// + /// Specifies the cipher suite selector used by the BSS to protect group addressed + /// robust management frames. + /// +//UINT32 GroupManagementCipherSuite; +} EFI_80211_ELEMENT_DATA_RSN; + +/// +/// EFI_80211_ELEMENT_RSN +/// +typedef struct { + /// + /// Common header of an element. + /// + EFI_80211_ELEMENT_HEADER Hdr; + /// + /// Points to RSN element. The size of a RSN element is limited to 255 octets. + /// + EFI_80211_ELEMENT_DATA_RSN *Data; +} EFI_80211_ELEMENT_RSN; + +/// +/// EFI_80211_ELEMENT_EXT_CAP +/// +typedef struct { + /// + /// Common header of an element. + /// + EFI_80211_ELEMENT_HEADER Hdr; + /// + /// Indicates the capabilities being advertised by the STA transmitting the element. + /// This is a bit field with variable length. Refer to IEEE 802.11 specification for + /// bit value. + /// + UINT8 Capabilities[1]; +} EFI_80211_ELEMENT_EXT_CAP; + +/// +/// EFI_80211_BSS_DESCRIPTION +/// +typedef struct { + /// + /// Indicates a specific BSSID of the found BSS. + /// + EFI_80211_MAC_ADDRESS BSSId; + /// + /// Specifies the SSID of the found BSS. If NULL, ignore SSIdLen field. + /// + UINT8 *SSId; + /// + /// Specifies the SSID of the found BSS. If NULL, ignore SSIdLen field. + /// + UINT8 SSIdLen; + /// + /// Specifies the type of the found BSS. + /// + EFI_80211_BSS_TYPE BSSType; + /// + /// The beacon period in TU of the found BSS. + /// + UINT16 BeaconPeriod; + /// + /// The timestamp of the received frame from the found BSS. + /// + UINT64 Timestamp; + /// + /// The advertised capabilities of the BSS. + /// + UINT16 CapabilityInfo; + /// + /// The set of data rates that shall be supported by all STAs that desire to join this + /// BSS. + /// + UINT8 *BSSBasicRateSet; + /// + /// The set of data rates that the peer STA desires to use for communication within + /// the BSS. + /// + UINT8 *OperationalRateSet; + /// + /// The information required to identify the regulatory domain in which the peer STA + /// is located. + /// + EFI_80211_ELEMENT_COUNTRY *Country; + /// + /// The cipher suites and AKM suites supported in the BSS. + /// + EFI_80211_ELEMENT_RSN RSN; + /// + /// Specifies the RSSI of the received frame. + /// + UINT8 RSSI; + /// + /// Specifies the RCPI of the received frame. + /// + UINT8 RCPIMeasurement; + /// + /// Specifies the RSNI of the received frame. + /// + UINT8 RSNIMeasurement; + /// + /// Specifies the elements requested by the request element of the Probe Request frame. + /// This is an optional parameter and may be NULL. + /// + UINT8 *RequestedElements; + /// + /// Specifies the BSS membership selectors that represent the set of features that + /// shall be supported by all STAs to join this BSS. + /// + UINT8 *BSSMembershipSelectorSet; + /// + /// Specifies the parameters within the Extended Capabilities element that are + /// supported by the MAC entity. This is an optional parameter and may be NULL. + /// + EFI_80211_ELEMENT_EXT_CAP *ExtCapElement; +} EFI_80211_BSS_DESCRIPTION; + +/// +/// EFI_80211_SUBELEMENT_INFO +/// +typedef struct { + /// + /// Indicates the unique identifier within the containing element or sub-element. + /// + UINT8 SubElementID; + /// + /// Specifies the number of octets in the Data field. + /// + UINT8 Length; + /// + /// A variable length data buffer. + /// + UINT8 Data[1]; +} EFI_80211_SUBELEMENT_INFO; + +/// +/// EFI_80211_MULTIPLE_BSSID +/// +typedef struct { + /// + /// Common header of an element. + /// + EFI_80211_ELEMENT_HEADER Hdr; + /// + /// Indicates the maximum number of BSSIDs in the multiple BSSID set. When Indicator + /// is set to n, 2n is the maximum number. + /// + UINT8 Indicator; + /// + /// Contains zero or more sub-elements. + /// + EFI_80211_SUBELEMENT_INFO SubElement[1]; +} EFI_80211_MULTIPLE_BSSID; + +/// +/// EFI_80211_BSS_DESP_PILOT +/// +typedef struct { + /// + /// Indicates a specific BSSID of the found BSS. + /// + EFI_80211_MAC_ADDRESS BSSId; + /// + /// Specifies the type of the found BSS. + /// + EFI_80211_BSS_TYPE BSSType; + /// + /// One octet field to report condensed capability information. + /// + UINT8 ConCapInfo; + /// + /// Two octet's field to report condensed country string. + /// + UINT8 ConCountryStr[2]; + /// + /// Indicates the operating class value for the operating channel. + /// + UINT8 OperatingClass; + /// + /// Indicates the operating channel. + /// + UINT8 Channel; + /// + /// Indicates the measurement pilot interval in TU. + /// + UINT8 Interval; + /// + /// Indicates that the BSS is within a multiple BSSID set. + /// + EFI_80211_MULTIPLE_BSSID *MultipleBSSID; + /// + /// Specifies the RCPI of the received frame. + /// + UINT8 RCPIMeasurement; + /// + /// Specifies the RSNI of the received frame. + /// + UINT8 RSNIMeasurement; +} EFI_80211_BSS_DESP_PILOT; + +/// +/// EFI_80211_SCAN_RESULT +/// +typedef struct { + /// + /// The number of EFI_80211_BSS_DESCRIPTION in BSSDespSet. If zero, BSSDespSet should + /// be ignored. + /// + UINTN NumOfBSSDesp; + /// + /// Points to zero or more instances of EFI_80211_BSS_DESCRIPTION. + /// + EFI_80211_BSS_DESCRIPTION **BSSDespSet; + /// + /// The number of EFI_80211_BSS_DESP_PILOT in BSSDespFromPilotSet. If zero, + /// BSSDespFromPilotSet should be ignored. + /// + UINTN NumofBSSDespFromPilot; + /// + /// Points to zero or more instances of EFI_80211_BSS_DESP_PILOT. + /// + EFI_80211_BSS_DESP_PILOT **BSSDespFromPilotSet; + /// + /// Specifies zero or more elements. This is an optional parameter and may be NULL. + /// + UINT8 *VendorSpecificInfo; +} EFI_80211_SCAN_RESULT; + +/// +/// EFI_80211_SCAN_DATA_TOKEN +/// +typedef struct { + /// + /// This Event will be signaled after the Status field is updated by the EFI Wireless + /// MAC Connection Protocol driver. The type of Event must be EFI_NOTIFY_SIGNAL. + /// + EFI_EVENT Event; + /// + /// Will be set to one of the following values: + /// EFI_SUCCESS: Scan operation completed successfully. + /// EFI_NOT_FOUND: Failed to find available BSS. + /// EFI_DEVICE_ERROR: An unexpected network or system error occurred. + /// EFI_ACCESS_DENIED: The scan operation is not completed due to some underlying + /// hardware or software state. + /// EFI_NOT_READY: The scan operation is started but not yet completed. + EFI_STATUS Status; + /// + /// Pointer to the scan data. + /// + EFI_80211_SCAN_DATA *Data; + /// + /// Indicates the scan state. + /// + EFI_80211_SCAN_RESULT_CODE ResultCode; + /// + /// Indicates the scan result. It is caller's responsibility to free this buffer. + /// + EFI_80211_SCAN_RESULT *Result; +} EFI_80211_SCAN_DATA_TOKEN; + +/// +/// EFI_80211_ELEMENT_SUPP_CHANNEL_TUPLE +/// +typedef struct { + /// + /// The first channel number in a subband of supported channels. + /// + UINT8 FirstChannelNumber; + /// + /// The number of channels in a subband of supported channels. + /// + UINT8 NumberOfChannels; +} EFI_80211_ELEMENT_SUPP_CHANNEL_TUPLE; + +/// +/// EFI_80211_ELEMENT_SUPP_CHANNEL +/// +typedef struct { + /// + /// Common header of an element. + /// + EFI_80211_ELEMENT_HEADER Hdr; + /// + /// Indicates one or more tuples of (first channel, number of channels). + /// + EFI_80211_ELEMENT_SUPP_CHANNEL_TUPLE Subband[1]; +} EFI_80211_ELEMENT_SUPP_CHANNEL; + +/// +/// EFI_80211_ASSOCIATE_DATA +/// +typedef struct { + /// + /// Specifies the address of the peer MAC entity to associate with. + /// + EFI_80211_MAC_ADDRESS BSSId; + /// + /// Specifies the requested operational capabilities to the AP in 2 octets. + /// + UINT16 CapabilityInfo; + /// + /// Specifies a time limit in TU, after which the associate procedure is terminated. + /// + UINT32 FailureTimeout; + /// + /// Specifies if in power save mode, how often the STA awakes and listens for the next + /// beacon frame in TU. + /// + UINT32 ListenInterval; + /// + /// Indicates a list of channels in which the STA is capable of operating. + /// + EFI_80211_ELEMENT_SUPP_CHANNEL *Channels; + /// + /// The cipher suites and AKM suites selected by the STA. + /// + EFI_80211_ELEMENT_RSN RSN; + /// + /// Specifies the parameters within the Extended Capabilities element that are + /// supported by the MAC entity. This is an optional parameter and may be NULL. + /// + EFI_80211_ELEMENT_EXT_CAP *ExtCapElement; + /// + /// Specifies zero or more elements. This is an optional parameter and may be NULL. + /// + UINT8 *VendorSpecificInfo; +} EFI_80211_ASSOCIATE_DATA; + +/// +/// EFI_80211_ELEMENT_TIMEOUT_VAL +/// +typedef struct { + /// + /// Common header of an element. + /// + EFI_80211_ELEMENT_HEADER Hdr; + /// + /// Specifies the timeout interval type. + /// + UINT8 Type; + /// + /// Specifies the timeout interval value. + /// + UINT32 Value; +} EFI_80211_ELEMENT_TIMEOUT_VAL; + +/// +/// EFI_80211_ASSOCIATE_RESULT +/// +typedef struct { + /// + /// Specifies the address of the peer MAC entity from which the association request + /// was received. + /// + EFI_80211_MAC_ADDRESS BSSId; + /// + /// Specifies the operational capabilities advertised by the AP. + /// + UINT16 CapabilityInfo; + /// + /// Specifies the association ID value assigned by the AP. + /// + UINT16 AssociationID; + /// + /// Indicates the measured RCPI of the corresponding association request frame. It is + /// an optional parameter and is set to zero if unavailable. + /// + UINT8 RCPIValue; + /// + /// Indicates the measured RSNI at the time the corresponding association request + /// frame was received. It is an optional parameter and is set to zero if unavailable. + /// + UINT8 RSNIValue; + /// + /// Specifies the parameters within the Extended Capabilities element that are + /// supported by the MAC entity. This is an optional parameter and may be NULL. + /// + EFI_80211_ELEMENT_EXT_CAP *ExtCapElement; + /// + /// Specifies the timeout interval when the result code is AssociateRefusedTemporarily. + /// + EFI_80211_ELEMENT_TIMEOUT_VAL TimeoutInterval; + /// + /// Specifies zero or more elements. This is an optional parameter and may be NULL. + /// + UINT8 *VendorSpecificInfo; +} EFI_80211_ASSOCIATE_RESULT; + +/// +/// EFI_80211_ASSOCIATE_DATA_TOKEN +/// +typedef struct { + /// + /// This Event will be signaled after the Status field is updated by the EFI Wireless + /// MAC Connection Protocol driver. The type of Event must be EFI_NOTIFY_SIGNAL. + /// + EFI_EVENT Event; + /// + /// Will be set to one of the following values: + /// EFI_SUCCESS: Association operation completed successfully. + /// EFI_DEVICE_ERROR: An unexpected network or system error occurred. + /// + EFI_STATUS Status; + /// + /// Pointer to the association data. + /// + EFI_80211_ASSOCIATE_DATA *Data; + /// + /// Indicates the association state. + /// + EFI_80211_ASSOCIATE_RESULT_CODE ResultCode; + /// + /// Indicates the association result. It is caller's responsibility to free this + /// buffer. + /// + EFI_80211_ASSOCIATE_RESULT *Result; +} EFI_80211_ASSOCIATE_DATA_TOKEN; + +/// +/// EFI_80211_DISASSOCIATE_DATA +/// +typedef struct { + /// + /// Specifies the address of the peer MAC entity with which to perform the + /// disassociation process. + /// + EFI_80211_MAC_ADDRESS BSSId; + /// + /// Specifies the reason for initiating the disassociation process. + /// + EFI_80211_REASON_CODE ReasonCode; + /// + /// Zero or more elements, may be NULL. + /// + UINT8 *VendorSpecificInfo; +} EFI_80211_DISASSOCIATE_DATA; + +/// +/// EFI_80211_DISASSOCIATE_DATA_TOKEN +/// +typedef struct { + /// + /// This Event will be signaled after the Status field is updated by the EFI Wireless + /// MAC Connection Protocol driver. The type of Event must be EFI_NOTIFY_SIGNAL. + /// + EFI_EVENT Event; + /// + /// Will be set to one of the following values: + /// EFI_SUCCESS: Disassociation operation completed successfully. + /// EFI_DEVICE_ERROR: An unexpected network or system error occurred. + /// EFI_ACCESS_DENIED: The disassociation operation is not completed due to some + /// underlying hardware or software state. + /// EFI_NOT_READY: The disassociation operation is started but not yet completed. + /// + EFI_STATUS Status; + /// + /// Pointer to the disassociation data. + /// + EFI_80211_DISASSOCIATE_DATA *Data; + /// + /// Indicates the disassociation state. + /// + EFI_80211_DISASSOCIATE_RESULT_CODE ResultCode; +} EFI_80211_DISASSOCIATE_DATA_TOKEN; + +/// +/// EFI_80211_AUTHENTICATION_DATA +/// +typedef struct { + /// + /// Specifies the address of the peer MAC entity with which to perform the + /// authentication process. + /// + EFI_80211_MAC_ADDRESS BSSId; + /// + /// Specifies the type of authentication algorithm to use during the authentication + /// process. + /// + EFI_80211_AUTHENTICATION_TYPE AuthType; + /// + /// Specifies a time limit in TU after which the authentication procedure is + /// terminated. + /// + UINT32 FailureTimeout; + /// + /// Specifies the set of elements to be included in the first message of the FT + /// authentication sequence, may be NULL. + /// + UINT8 *FTContent; + /// + /// Specifies the set of elements to be included in the SAE Commit Message or SAE + /// Confirm Message, may be NULL. + /// + UINT8 *SAEContent; + /// + /// Zero or more elements, may be NULL. + /// + UINT8 *VendorSpecificInfo; +} EFI_80211_AUTHENTICATE_DATA; + +/// +/// EFI_80211_AUTHENTICATION_RESULT +/// +typedef struct { + /// + /// Specifies the address of the peer MAC entity from which the authentication request + /// was received. + /// + EFI_80211_MAC_ADDRESS BSSId; + /// + /// Specifies the set of elements to be included in the second message of the FT + /// authentication sequence, may be NULL. + /// + UINT8 *FTContent; + /// + /// Specifies the set of elements to be included in the SAE Commit Message or SAE + /// Confirm Message, may be NULL. + /// + UINT8 *SAEContent; + /// + /// Zero or more elements, may be NULL. + /// + UINT8 *VendorSpecificInfo; +} EFI_80211_AUTHENTICATE_RESULT; + +/// +/// EFI_80211_AUTHENTICATE_DATA_TOKEN +/// +typedef struct { + /// + /// This Event will be signaled after the Status field is updated by the EFI Wireless + /// MAC Connection Protocol driver. The type of Event must be EFI_NOTIFY_SIGNAL. + /// + EFI_EVENT Event; + /// + /// Will be set to one of the following values: + /// EFI_SUCCESS: Authentication operation completed successfully. + /// EFI_PROTOCOL_ERROR: Peer MAC entity rejects the authentication. + /// EFI_NO_RESPONSE: Peer MAC entity does not response the authentication request. + /// EFI_DEVICE_ERROR: An unexpected network or system error occurred. + /// EFI_ACCESS_DENIED: The authentication operation is not completed due to some + /// underlying hardware or software state. + /// EFI_NOT_READY: The authentication operation is started but not yet completed. + /// + EFI_STATUS Status; + /// + /// Pointer to the authentication data. + /// + EFI_80211_AUTHENTICATE_DATA *Data; + /// + /// Indicates the association state. + /// + EFI_80211_AUTHENTICATE_RESULT_CODE ResultCode; + /// + /// Indicates the association result. It is caller's responsibility to free this + /// buffer. + /// + EFI_80211_AUTHENTICATE_RESULT *Result; +} EFI_80211_AUTHENTICATE_DATA_TOKEN; + +/// +/// EFI_80211_DEAUTHENTICATE_DATA +/// +typedef struct { + /// + /// Specifies the address of the peer MAC entity with which to perform the + /// deauthentication process. + /// + EFI_80211_MAC_ADDRESS BSSId; + /// + /// Specifies the reason for initiating the deauthentication process. + /// + EFI_80211_REASON_CODE ReasonCode; + /// + /// Zero or more elements, may be NULL. + /// + UINT8 *VendorSpecificInfo; +} EFI_80211_DEAUTHENTICATE_DATA; + +/// +/// EFI_80211_DEAUTHENTICATE_DATA_TOKEN +/// +typedef struct { + /// + /// This Event will be signaled after the Status field is updated by the EFI Wireless + /// MAC Connection Protocol driver. The type of Event must be EFI_NOTIFY_SIGNAL. + /// + EFI_EVENT Event; + /// + /// Will be set to one of the following values: + /// EFI_SUCCESS: Deauthentication operation completed successfully. + /// EFI_DEVICE_ERROR: An unexpected network or system error occurred. + /// EFI_ACCESS_DENIED: The deauthentication operation is not completed due to some + /// underlying hardware or software state. + /// EFI_NOT_READY: The deauthentication operation is started but not yet + /// completed. + /// + EFI_STATUS Status; + /// + /// Pointer to the deauthentication data. + /// + EFI_80211_DEAUTHENTICATE_DATA *Data; +} EFI_80211_DEAUTHENTICATE_DATA_TOKEN; + +/** + Request a survey of potential BSSs that administrator can later elect to try to join. + + The Scan() function returns the description of the set of BSSs detected by the scan + process. Passive scan operation is performed by default. + + @param[in] This Pointer to the EFI_WIRELESS_MAC_CONNECTION_PROTOCOL + instance. + @param[in] Data Pointer to the scan token. + + @retval EFI_SUCCESS The operation completed successfully. + @retval EFI_INVALID_PARAMETER One or more of the following conditions is TRUE: + This is NULL. + Data is NULL. + Data->Data is NULL. + @retval EFI_UNSUPPORTED One or more of the input parameters are not supported + by this implementation. + @retval EFI_ALREADY_STARTED The scan operation is already started. +**/ +typedef +EFI_STATUS +(EFIAPI *EFI_WIRELESS_MAC_CONNECTION_SCAN)( + IN EFI_WIRELESS_MAC_CONNECTION_PROTOCOL *This, + IN EFI_80211_SCAN_DATA_TOKEN *Data + ); + +/** + Request an association with a specified peer MAC entity that is within an AP. + + The Associate() function provides the capability for MAC layer to become associated + with an AP. + + @param[in] This Pointer to the EFI_WIRELESS_MAC_CONNECTION_PROTOCOL + instance. + @param[in] Data Pointer to the association token. + + @retval EFI_SUCCESS The operation completed successfully. + @retval EFI_INVALID_PARAMETER One or more of the following conditions is TRUE: + This is NULL. + Data is NULL. + Data->Data is NULL. + @retval EFI_UNSUPPORTED One or more of the input parameters are not supported + by this implementation. + @retval EFI_ALREADY_STARTED The association process is already started. + @retval EFI_NOT_READY Authentication is not performed before this association + process. + @retval EFI_NOT_FOUND The specified peer MAC entity is not found. + @retval EFI_OUT_OF_RESOURCES Required system resources could not be allocated. +**/ +typedef +EFI_STATUS +(EFIAPI *EFI_WIRELESS_MAC_CONNECTION_ASSOCIATE)( + IN EFI_WIRELESS_MAC_CONNECTION_PROTOCOL *This, + IN EFI_80211_ASSOCIATE_DATA_TOKEN *Data + ); + +/** + Request a disassociation with a specified peer MAC entity. + + The Disassociate() function is invoked to terminate an existing association. + Disassociation is a notification and cannot be refused by the receiving peer except + when management frame protection is negotiated and the message integrity check fails. + + @param[in] This Pointer to the EFI_WIRELESS_MAC_CONNECTION_PROTOCOL + instance. + @param[in] Data Pointer to the disassociation token. + + @retval EFI_SUCCESS The operation completed successfully. + @retval EFI_INVALID_PARAMETER One or more of the following conditions is TRUE: + This is NULL. + Data is NULL. + @retval EFI_ALREADY_STARTED The disassociation process is already started. + @retval EFI_NOT_READY The disassociation service is invoked to a + nonexistent association relationship. + @retval EFI_NOT_FOUND The specified peer MAC entity is not found. + @retval EFI_OUT_OF_RESOURCES Required system resources could not be allocated. +**/ +typedef +EFI_STATUS +(EFIAPI *EFI_WIRELESS_MAC_CONNECTION_DISASSOCIATE)( + IN EFI_WIRELESS_MAC_CONNECTION_PROTOCOL *This, + IN EFI_80211_DISASSOCIATE_DATA_TOKEN *Data + ); + +/** + Request the process of establishing an authentication relationship with a peer MAC + entity. + + The Authenticate() function requests authentication with a specified peer MAC entity. + This service might be time-consuming thus is designed to be invoked independently of + the association service. + + @param[in] This Pointer to the EFI_WIRELESS_MAC_CONNECTION_PROTOCOL + instance. + @param[in] Data Pointer to the authentication token. + + @retval EFI_SUCCESS The operation completed successfully. + @retval EFI_INVALID_PARAMETER One or more of the following conditions is TRUE: + This is NULL. + Data is NULL. + Data.Data is NULL. + @retval EFI_UNSUPPORTED One or more of the input parameters are not supported + by this implementation. + @retval EFI_ALREADY_STARTED The authentication process is already started. + @retval EFI_NOT_FOUND The specified peer MAC entity is not found. + @retval EFI_OUT_OF_RESOURCES Required system resources could not be allocated. +**/ +typedef +EFI_STATUS +(EFIAPI *EFI_WIRELESS_MAC_CONNECTION_AUTHENTICATE)( + IN EFI_WIRELESS_MAC_CONNECTION_PROTOCOL *This, + IN EFI_80211_AUTHENTICATE_DATA_TOKEN *Data + ); + +/** + Invalidate the authentication relationship with a peer MAC entity. + + The Deauthenticate() function requests that the authentication relationship with a + specified peer MAC entity be invalidated. Deauthentication is a notification and when + it is sent out the association at the transmitting station is terminated. + + @param[in] This Pointer to the EFI_WIRELESS_MAC_CONNECTION_PROTOCOL + instance. + @param[in] Data Pointer to the deauthentication token. + + @retval EFI_SUCCESS The operation completed successfully. + @retval EFI_INVALID_PARAMETER One or more of the following conditions is TRUE: + This is NULL. + Data is NULL. + Data.Data is NULL. + @retval EFI_ALREADY_STARTED The deauthentication process is already started. + @retval EFI_NOT_READY The deauthentication service is invoked to a + nonexistent association or authentication relationship. + @retval EFI_NOT_FOUND The specified peer MAC entity is not found. + @retval EFI_OUT_OF_RESOURCES Required system resources could not be allocated. +**/ +typedef +EFI_STATUS +(EFIAPI *EFI_WIRELESS_MAC_CONNECTION_DEAUTHENTICATE)( + IN EFI_WIRELESS_MAC_CONNECTION_PROTOCOL *This, + IN EFI_80211_DEAUTHENTICATE_DATA_TOKEN *Data + ); + +/// +/// The EFI_WIRELESS_MAC_CONNECTION_PROTOCOL is designed to provide management service +/// interfaces for the EFI wireless network stack to establish wireless connection with +/// AP. An EFI Wireless MAC Connection Protocol instance will be installed on each +/// communication device that the EFI wireless network stack runs on. +/// +struct _EFI_WIRELESS_MAC_CONNECTION_PROTOCOL { + EFI_WIRELESS_MAC_CONNECTION_SCAN Scan; + EFI_WIRELESS_MAC_CONNECTION_ASSOCIATE Associate; + EFI_WIRELESS_MAC_CONNECTION_DISASSOCIATE Disassociate; + EFI_WIRELESS_MAC_CONNECTION_AUTHENTICATE Authenticate; + EFI_WIRELESS_MAC_CONNECTION_DEAUTHENTICATE Deauthenticate; +}; + +extern EFI_GUID gEfiWiFiProtocolGuid; + +#endif diff --git a/MdePkg/MdePkg.dec b/MdePkg/MdePkg.dec index a9bbc3d131..521620bbd7 100644 --- a/MdePkg/MdePkg.dec +++ b/MdePkg/MdePkg.dec @@ -1504,6 +1504,9 @@ ## Include/Protocol/HiiConfigKeyword.h gEfiConfigKeywordHandlerProtocolGuid = {0x0a8badd5, 0x03b8, 0x4d19, {0xb1, 0x28, 0x7b, 0x8f, 0x0e, 0xda, 0xa5, 0x96}} + + ## Include/Protocol/WiFi.h + gEfiWiFiProtocolGuid = { 0xda55bc9, 0x45f8, 0x4bb4, {0x87, 0x19, 0x52, 0x24, 0xf1, 0x8a, 0x4d, 0x45 }} # # [Error.gEfiMdePkgTokenSpaceGuid] -- 2.39.2