Home | History | Annotate | Download | only in Protocol
      1 /** @file
      2   This file defines the EFI Wireless MAC Connection II Protocol.
      3 
      4   Copyright (c) 2016, Intel Corporation. All rights reserved.<BR>
      5   This program and the accompanying materials
      6   are licensed and made available under the terms and conditions of the BSD License
      7   which accompanies this distribution. The full text of the license may be found at
      8   http://opensource.org/licenses/bsd-license.php
      9 
     10   THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
     11   WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
     12 
     13   @par Revision Reference:
     14   This Protocol is introduced in UEFI Specification 2.6
     15 
     16 **/
     17 
     18 #ifndef __EFI_WIFI2_PROTOCOL_H__
     19 #define __EFI_WIFI2_PROTOCOL_H__
     20 
     21 #define EFI_WIRELESS_MAC_CONNECTION_II_PROTOCOL_GUID \
     22   { \
     23     0x1b0fb9bf, 0x699d, 0x4fdd, { 0xa7, 0xc3, 0x25, 0x46, 0x68, 0x1b, 0xf6, 0x3b } \
     24   }
     25 
     26 typedef struct _EFI_WIRELESS_MAC_CONNECTION_II_PROTOCOL EFI_WIRELESS_MAC_CONNECTION_II_PROTOCOL;
     27 
     28 ///
     29 /// EFI_80211_BSS_TYPE
     30 ///
     31 typedef enum {
     32   IeeeInfrastructureBSS,
     33   IeeeIndependentBSS,
     34   IeeeMeshBSS,
     35   IeeeAnyBss
     36 } EFI_80211_BSS_TYPE;
     37 
     38 ///
     39 /// EFI_80211_CONNECT_NETWORK_RESULT_CODE
     40 ///
     41 typedef enum {
     42   //
     43   // The connection establishment operation finished successfully.
     44   //
     45   ConnectSuccess,
     46   //
     47   // The connection was refused by the Network.
     48   //
     49   ConnectRefused,
     50   //
     51   // The connection establishment operation failed (i.e, Network is not
     52   // detected).
     53   //
     54   ConnectFailed,
     55   //
     56   // The connection establishment operation was terminated on timeout.
     57   //
     58   ConnectFailureTimeout,
     59   //
     60   // The connection establishment operation failed on other reason.
     61   //
     62   ConnectFailedReasonUnspecified
     63 } EFI_80211_CONNECT_NETWORK_RESULT_CODE;
     64 
     65 ///
     66 /// EFI_80211_MAC_ADDRESS
     67 ///
     68 typedef struct {
     69   UINT8                              Addr[6];
     70 } EFI_80211_MAC_ADDRESS;
     71 
     72 #define EFI_MAX_SSID_LEN 32
     73 
     74 ///
     75 /// EFI_80211_SSID
     76 ///
     77 typedef struct {
     78   //
     79   // Length in bytes of the SSId. If zero, ignore SSId field.
     80   //
     81   UINT8                                     SSIdLen;
     82   //
     83   // Specifies the service set identifier.
     84   //
     85   UINT8                                     SSId[EFI_MAX_SSID_LEN];
     86 } EFI_80211_SSID;
     87 
     88 ///
     89 /// EFI_80211_GET_NETWORKS_DATA
     90 ///
     91 typedef struct {
     92   //
     93   // The number of EFI_80211_SSID in SSIDList. If zero, SSIDList should be
     94   // ignored.
     95   //
     96   UINT32                                    NumOfSSID;
     97   //
     98   // The SSIDList is a pointer to an array of EFI_80211_SSID instances. The
     99   // number of entries is specified by NumOfSSID. The array should only include
    100   // SSIDs of hidden networks. It is suggested that the caller inputs less than
    101   // 10 elements in the SSIDList. It is the caller's responsibility to free
    102   // this buffer.
    103   //
    104   EFI_80211_SSID                            SSIDList[1];
    105 } EFI_80211_GET_NETWORKS_DATA;
    106 
    107 ///
    108 /// EFI_80211_SUITE_SELECTOR
    109 ///
    110 typedef struct {
    111   //
    112   // Organization Unique Identifier, as defined in IEEE 802.11 standard,
    113   // usually set to 00-0F-AC.
    114   //
    115   UINT8                                     Oui[3];
    116   //
    117   // Suites types, as defined in IEEE 802.11 standard.
    118   //
    119   UINT8                                     SuiteType;
    120 } EFI_80211_SUITE_SELECTOR;
    121 
    122 ///
    123 /// EFI_80211_AKM_SUITE_SELECTOR
    124 ///
    125 typedef struct {
    126   //
    127   // Indicates the number of AKM suite selectors that are contained in
    128   // AKMSuiteList. If zero, the AKMSuiteList is ignored.
    129   //
    130   UINT16                                    AKMSuiteCount;
    131   //
    132   // A variable-length array of AKM suites, as defined in IEEE 802.11 standard,
    133   // Table 8-101. The number of entries is specified by AKMSuiteCount.
    134   //
    135   EFI_80211_SUITE_SELECTOR                  AKMSuiteList[1];
    136 } EFI_80211_AKM_SUITE_SELECTOR;
    137 
    138 ///
    139 /// EFI_80211_CIPHER_SUITE_SELECTOR
    140 ///
    141 typedef struct {
    142   //
    143   // Indicates the number of cipher suites that are contained in
    144   // CipherSuiteList. If zero, the CipherSuiteList is ignored.
    145   //
    146   UINT16                                    CipherSuiteCount;
    147   //
    148   // A variable-length array of cipher suites, as defined in IEEE 802.11
    149   // standard, Table 8-99. The number of entries is specified by
    150   // CipherSuiteCount.
    151   //
    152   EFI_80211_SUITE_SELECTOR                  CipherSuiteList[1];
    153 } EFI_80211_CIPHER_SUITE_SELECTOR;
    154 
    155 ///
    156 /// EFI_80211_NETWORK
    157 ///
    158 typedef struct {
    159   //
    160   // Specifies the type of the BSS.
    161   //
    162   EFI_80211_BSS_TYPE                        BSSType;
    163   //
    164   // Specifies the SSID of the BSS.
    165   //
    166   EFI_80211_SSID                            SSId;
    167   //
    168   // Pointer to the AKM suites supported in the wireless network.
    169   //
    170   EFI_80211_AKM_SUITE_SELECTOR              *AKMSuite;
    171   //
    172   // Pointer to the cipher suites supported in the wireless network.
    173   //
    174   EFI_80211_CIPHER_SUITE_SELECTOR           *CipherSuite;
    175 } EFI_80211_NETWORK;
    176 
    177 ///
    178 /// EFI_80211_NETWORK_DESCRIPTION
    179 ///
    180 typedef struct {
    181   //
    182   // Specifies the found wireless network.
    183   //
    184   EFI_80211_NETWORK                         Network;
    185   //
    186   // Indicates the network quality as a value between 0 to 100, where 100
    187   // indicates the highest network quality.
    188   //
    189   UINT8                                     NetworkQuality;
    190 } EFI_80211_NETWORK_DESCRIPTION;
    191 
    192 ///
    193 /// EFI_80211_GET_NETWORKS_RESULT
    194 ///
    195 typedef struct {
    196   //
    197   // The number of EFI_80211_NETWORK_DESCRIPTION in NetworkDesc. If zero,
    198   // NetworkDesc should be ignored.
    199   //
    200   UINT8                                     NumOfNetworkDesc;
    201   //
    202   // The NetworkDesc is a pointer to an array of EFI_80211_NETWORK_DESCRIPTION
    203   // instances. It is caller's responsibility to free this buffer.
    204   //
    205   EFI_80211_NETWORK_DESCRIPTION             **NetworkDesc;
    206 } EFI_80211_GET_NETWORKS_RESULT;
    207 
    208 ///
    209 /// EFI_80211_GET_NETWORKS_TOKEN
    210 ///
    211 typedef struct {
    212   //
    213   // If the status code returned by GetNetworks() is EFI_SUCCESS, then this
    214   // Event will be signaled after the Status field is updated by the EFI
    215   // Wireless MAC Connection Protocol II driver. The type of Event must be
    216   // EFI_NOTIFY_SIGNAL.
    217   //
    218   EFI_EVENT                                 Event;
    219   //
    220   // Will be set to one of the following values:
    221   // EFI_SUCCESS: The operation completed successfully.
    222   // EFI_NOT_FOUND: Failed to find available wireless networks.
    223   // EFI_DEVICE_ERROR: An unexpected network or system error occurred.
    224   // EFI_ACCESS_DENIED: The operation is not completed due to some underlying
    225   // hardware or software state.
    226   // EFI_NOT_READY: The operation is started but not yet completed.
    227   //
    228   EFI_STATUS                                Status;
    229   //
    230   // Pointer to the input data for getting networks.
    231   //
    232   EFI_80211_GET_NETWORKS_DATA               *Data;
    233   //
    234   // Indicates the scan result. It is caller's responsibility to free this
    235   // buffer.
    236   //
    237   EFI_80211_GET_NETWORKS_RESULT             *Result;
    238 } EFI_80211_GET_NETWORKS_TOKEN;
    239 
    240 ///
    241 /// EFI_80211_CONNECT_NETWORK_DATA
    242 ///
    243 typedef struct {
    244   //
    245   // Specifies the wireless network to connect to.
    246   //
    247   EFI_80211_NETWORK                         *Network;
    248   //
    249   // Specifies a time limit in seconds that is optionally present, after which
    250   // the connection establishment procedure is terminated by the UNDI driver.
    251   // This is an optional parameter and may be 0. Values of 5 seconds or higher
    252   // are recommended.
    253   //
    254   UINT32                                    FailureTimeout;
    255 } EFI_80211_CONNECT_NETWORK_DATA;
    256 
    257 ///
    258 /// EFI_80211_CONNECT_NETWORK_TOKEN
    259 ///
    260 typedef struct {
    261   //
    262   // If the status code returned by ConnectNetwork() is EFI_SUCCESS, then this
    263   // Event will be signaled after the Status field is updated by the EFI
    264   // Wireless MAC Connection Protocol II driver. The type of Event must be
    265   // EFI_NOTIFY_SIGNAL.
    266   //
    267   EFI_EVENT                                 Event;
    268   //
    269   // Will be set to one of the following values:
    270   // EFI_SUCCESS: The operation completed successfully.
    271   // EFI_DEVICE_ERROR: An unexpected network or system error occurred.
    272   // EFI_ACCESS_DENIED: The operation is not completed due to some underlying
    273   // hardware or software state.
    274   // EFI_NOT_READY: The operation is started but not yet completed.
    275   //
    276   EFI_STATUS                                Status;
    277   //
    278   // Pointer to the connection data.
    279   //
    280   EFI_80211_CONNECT_NETWORK_DATA            *Data;
    281   //
    282   // Indicates the connection state.
    283   //
    284   EFI_80211_CONNECT_NETWORK_RESULT_CODE     ResultCode;
    285 } EFI_80211_CONNECT_NETWORK_TOKEN;
    286 
    287 ///
    288 /// EFI_80211_DISCONNECT_NETWORK_TOKEN
    289 ///
    290 typedef struct {
    291   //
    292   // If the status code returned by DisconnectNetwork() is EFI_SUCCESS, then
    293   // this Event will be signaled after the Status field is updated by the EFI
    294   // Wireless MAC Connection Protocol II driver. The type of Event must be
    295   // EFI_NOTIFY_SIGNAL.
    296   //
    297   EFI_EVENT                                 Event;
    298   //
    299   // Will be set to one of the following values:
    300   // EFI_SUCCESS: The operation completed successfully
    301   // EFI_DEVICE_ERROR: An unexpected network or system error occurred.
    302   // EFI_ACCESS_DENIED: The operation is not completed due to some underlying
    303   // hardware or software state.
    304   //
    305   EFI_STATUS                                Status;
    306 } EFI_80211_DISCONNECT_NETWORK_TOKEN;
    307 
    308 /**
    309   Request a survey of potential wireless networks that administrator can later
    310   elect to try to join.
    311 
    312   @param[in]  This                Pointer to the
    313                                   EFI_WIRELESS_MAC_CONNECTION_II_PROTOCOL
    314                                   instance.
    315   @param[in]  Token               Pointer to the token for getting wireless
    316                                   network.
    317 
    318   @retval EFI_SUCCESS             The operation started, and an event will
    319                                   eventually be raised for the caller.
    320   @retval EFI_INVALID_PARAMETER   One or more of the following conditions is
    321                                   TRUE:
    322                                   This is NULL.
    323                                   Token is NULL.
    324   @retval EFI_UNSUPPORTED         One or more of the input parameters is not
    325                                   supported by this implementation.
    326   @retval EFI_ALREADY_STARTED     The operation of getting wireless network is
    327                                   already started.
    328   @retval EFI_OUT_OF_RESOURCES    Required system resources could not be
    329                                   allocated.
    330 
    331 **/
    332 typedef
    333 EFI_STATUS
    334 (EFIAPI *EFI_WIRELESS_MAC_CONNECTION_II_GET_NETWORKS) (
    335   IN EFI_WIRELESS_MAC_CONNECTION_II_PROTOCOL          *This,
    336   IN EFI_80211_GET_NETWORKS_TOKEN                     *Token
    337   );
    338 
    339 /**
    340   Connect a wireless network specified by a particular SSID, BSS type and
    341   Security type.
    342 
    343   @param[in]  This                Pointer to the
    344                                   EFI_WIRELESS_MAC_CONNECTION_II_PROTOCOL
    345                                   instance.
    346   @param[in]  Token               Pointer to the token for connecting wireless
    347                                   network.
    348 
    349   @retval EFI_SUCCESS             The operation started successfully. Results
    350                                   will be notified eventually.
    351   @retval EFI_INVALID_PARAMETER   One or more of the following conditions is
    352                                   TRUE:
    353                                   This is NULL.
    354                                   Token is NULL.
    355   @retval EFI_UNSUPPORTED         One or more of the input parameters are not
    356                                   supported by this implementation.
    357   @retval EFI_ALREADY_STARTED     The connection process is already started.
    358   @retval EFI_NOT_FOUND           The specified wireless network is not found.
    359   @retval EFI_OUT_OF_RESOURCES    Required system resources could not be
    360                                   allocated.
    361 
    362 **/
    363 typedef
    364 EFI_STATUS
    365 (EFIAPI *EFI_WIRELESS_MAC_CONNECTION_II_CONNECT_NETWORK) (
    366   IN EFI_WIRELESS_MAC_CONNECTION_II_PROTOCOL          *This,
    367   IN EFI_80211_CONNECT_NETWORK_TOKEN                  *Token
    368   );
    369 
    370 /**
    371   Request a disconnection with current connected wireless network.
    372 
    373   @param[in]  This                Pointer to the
    374                                   EFI_WIRELESS_MAC_CONNECTION_II_PROTOCOL
    375                                   instance.
    376   @param[in]  Token               Pointer to the token for disconnecting
    377                                   wireless network.
    378 
    379   @retval EFI_SUCCESS             The operation started successfully. Results
    380                                   will be notified eventually.
    381   @retval EFI_INVALID_PARAMETER   One or more of the following conditions is
    382                                   TRUE:
    383                                   This is NULL.
    384                                   Token is NULL.
    385   @retval EFI_UNSUPPORTED         One or more of the input parameters are not
    386                                   supported by this implementation.
    387   @retval EFI_NOT_FOUND           Not connected to a wireless network.
    388   @retval EFI_OUT_OF_RESOURCES    Required system resources could not be
    389                                   allocated.
    390 
    391 **/
    392 typedef
    393 EFI_STATUS
    394 (EFIAPI *EFI_WIRELESS_MAC_CONNECTION_II_DISCONNECT_NETWORK) (
    395   IN EFI_WIRELESS_MAC_CONNECTION_II_PROTOCOL          *This,
    396   IN EFI_80211_DISCONNECT_NETWORK_TOKEN               *Token
    397   );
    398 
    399 ///
    400 /// The EFI_WIRELESS_MAC_CONNECTION_II_PROTOCOL provides network management
    401 /// service interfaces for 802.11 network stack. It is used by network
    402 /// applications (and drivers) to establish wireless connection with a wireless
    403 /// network.
    404 ///
    405 struct _EFI_WIRELESS_MAC_CONNECTION_II_PROTOCOL {
    406   EFI_WIRELESS_MAC_CONNECTION_II_GET_NETWORKS         GetNetworks;
    407   EFI_WIRELESS_MAC_CONNECTION_II_CONNECT_NETWORK      ConnectNetwork;
    408   EFI_WIRELESS_MAC_CONNECTION_II_DISCONNECT_NETWORK   DisconnectNetwork;
    409 };
    410 
    411 extern EFI_GUID gEfiWiFi2ProtocolGuid;
    412 
    413 #endif
    414