Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Hao Wu <hao.a...@intel.com>
Reviewed-by: Ye Ting <ting...@intel.com>
---
 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 0000000..8e9fb38
--- /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.<BR>
+  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 a9bbc3d..521620b 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]
-- 
1.9.5.msysgit.0


------------------------------------------------------------------------------
One dashboard for servers and applications across Physical-Virtual-Cloud 
Widest out-of-the-box monitoring support with 50+ applications
Performance metrics, stats and reports that give you Actionable Insights
Deep dive visibility with transaction tracing using APM Insight.
http://ad.doubleclick.net/ddm/clk/290420510;117567292;y
_______________________________________________
edk2-devel mailing list
edk2-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/edk2-devel

Reply via email to