mirror of
				https://git.proxmox.com/git/mirror_edk2
				synced 2025-10-31 22:30:33 +00:00 
			
		
		
		
	 f49421a47d
			
		
	
	
		f49421a47d
		
	
	
	
	
		
			
			To support auto-connection, EFI_BLUETOOTH_LE_SMP_DATA_TYPE needs to add a new data type EfiBluetoothSmpPeerAddressList which associates with a list of Bluetooth per address connected before. This new data type was added in UEFI spec 2.7b. Signed-off-by: Ray Ni <ray.ni@intel.com> Cc: Michael D Kinney <michael.d.kinney@intel.com> Reviewed-by: Liming Gao <liming.gao@intel.com>
		
			
				
	
	
		
			631 lines
		
	
	
		
			28 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			631 lines
		
	
	
		
			28 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| /** @file
 | |
|   EFI Bluetooth LE Config Protocol as defined in UEFI 2.7.
 | |
|   This protocol abstracts user interface configuration for BluetoothLe device.
 | |
| 
 | |
|   Copyright (c) 2017 - 2019, Intel Corporation. All rights reserved.<BR>
 | |
|   SPDX-License-Identifier: BSD-2-Clause-Patent
 | |
| 
 | |
|   @par Revision Reference:
 | |
|   This Protocol is introduced in UEFI Specification 2.7
 | |
| 
 | |
| **/
 | |
| 
 | |
| #ifndef __EFI_BLUETOOTH_LE_CONFIG_H__
 | |
| #define __EFI_BLUETOOTH_LE_CONFIG_H__
 | |
| 
 | |
| #include <Protocol/BluetoothConfig.h>
 | |
| #include <Protocol/BluetoothAttribute.h>
 | |
| 
 | |
| #define EFI_BLUETOOTH_LE_CONFIG_PROTOCOL_GUID \
 | |
|   { \
 | |
|     0x8f76da58, 0x1f99, 0x4275, { 0xa4, 0xec, 0x47, 0x56, 0x51, 0x5b, 0x1c, 0xe8 } \
 | |
|   }
 | |
| 
 | |
| typedef struct _EFI_BLUETOOTH_LE_CONFIG_PROTOCOL EFI_BLUETOOTH_LE_CONFIG_PROTOCOL;
 | |
| 
 | |
| /**
 | |
|   Initialize BluetoothLE host controller and local device.
 | |
| 
 | |
|   The Init() function initializes BluetoothLE host controller and local device.
 | |
| 
 | |
|   @param[in]  This              Pointer to the EFI_BLUETOOTH_LE_CONFIG_PROTOCOL instance.
 | |
| 
 | |
|   @retval EFI_SUCCESS           The BluetoothLE host controller and local device is initialized successfully.
 | |
|   @retval EFI_DEVICE_ERROR      A hardware error occurred trying to initialize the BluetoothLE host controller
 | |
|                                 and local device.
 | |
| 
 | |
| **/
 | |
| typedef
 | |
| EFI_STATUS
 | |
| (EFIAPI *EFI_BLUETOOTH_LE_CONFIG_INIT)(
 | |
|   IN EFI_BLUETOOTH_LE_CONFIG_PROTOCOL  *This
 | |
|   );
 | |
| 
 | |
| typedef struct {
 | |
|   ///
 | |
|   /// The version of the structure. A value of zero represents the EFI_BLUETOOTH_LE_CONFIG_SCAN_PARAMETER
 | |
|   /// structure as defined here. Future version of this specification may extend this data structure in a
 | |
|   /// backward compatible way and increase the value of Version.
 | |
|   ///
 | |
|   UINT32                    Version;
 | |
|   ///
 | |
|   /// Passive scanning or active scanning. See Bluetooth specification.
 | |
|   ///
 | |
|   UINT8                     ScanType;
 | |
|   ///
 | |
|   /// Recommended scan interval to be used while performing scan.
 | |
|   ///
 | |
|   UINT16                    ScanInterval;
 | |
|   ///
 | |
|   /// Recommended scan window to be used while performing a scan.
 | |
|   ///
 | |
|   UINT16                    ScanWindow;
 | |
|   ///
 | |
|   /// Recommended scanning filter policy to be used while performing a scan.
 | |
|   ///
 | |
|   UINT8                     ScanningFilterPolicy;
 | |
|   ///
 | |
|   /// This is one byte flag to serve as a filter to remove unneeded scan
 | |
|   /// result. For example, set BIT0 means scan in LE Limited Discoverable
 | |
|   /// Mode. Set BIT1 means scan in LE General Discoverable Mode.
 | |
|   ///
 | |
|   UINT8                     AdvertisementFlagFilter;
 | |
| } EFI_BLUETOOTH_LE_CONFIG_SCAN_PARAMETER;
 | |
| 
 | |
| typedef struct{
 | |
|   BLUETOOTH_LE_ADDRESS BDAddr;
 | |
|   BLUETOOTH_LE_ADDRESS DirectAddress;
 | |
|   UINT8                RemoteDeviceState;
 | |
|   INT8                 RSSI;
 | |
|   UINTN                AdvertisementDataSize;
 | |
|   VOID                 *AdvertisementData;
 | |
| } EFI_BLUETOOTH_LE_SCAN_CALLBACK_INFORMATION;
 | |
| 
 | |
| /**
 | |
|   Callback function, it is called if a BluetoothLE device is found during scan process.
 | |
| 
 | |
|   @param[in]  This            Pointer to the EFI_BLUETOOTH_LE_CONFIG_PROTOCOL instance.
 | |
|   @param[in]  Context         Context passed from scan request.
 | |
|   @param[in]  CallbackInfo    Data related to scan result. NULL CallbackInfo means scan complete.
 | |
| 
 | |
|   @retval EFI_SUCCESS         The callback function complete successfully.
 | |
| 
 | |
| **/
 | |
| typedef
 | |
| EFI_STATUS
 | |
| (EFIAPI *EFI_BLUETOOTH_LE_CONFIG_SCAN_CALLBACK_FUNCTION) (
 | |
|   IN EFI_BLUETOOTH_LE_CONFIG_PROTOCOL             *This,
 | |
|   IN VOID                                         *Context,
 | |
|   IN EFI_BLUETOOTH_LE_SCAN_CALLBACK_INFORMATION   *CallbackInfo
 | |
|   );
 | |
| 
 | |
| /**
 | |
|   Scan BluetoothLE device.
 | |
| 
 | |
|   The Scan() function scans BluetoothLE device. When this function is returned, it just means scan
 | |
|   request is submitted. It does not mean scan process is started or finished. Whenever there is a
 | |
|   BluetoothLE device is found, the Callback function will be called. Callback function might be
 | |
|   called before this function returns or after this function returns
 | |
| 
 | |
|   @param[in]  This              Pointer to the EFI_BLUETOOTH_LE_CONFIG_PROTOCOL instance.
 | |
|   @param[in]  ReScan            If TRUE, a new scan request is submitted no matter there is scan result before.
 | |
|                                 If FALSE and there is scan result, the previous scan result is returned and no scan request
 | |
|                                 is submitted.
 | |
|   @param[in]  Timeout           Duration in milliseconds for which to scan.
 | |
|   @param[in]  ScanParameter     If it is not NULL, the ScanParameter is used to perform a scan by the BluetoothLE bus driver.
 | |
|                                 If it is NULL, the default parameter is used.
 | |
|   @param[in]  Callback          The callback function. This function is called if a BluetoothLE device is found during
 | |
|                                 scan process.
 | |
|   @param[in]  Context           Data passed into Callback function. This is optional parameter and may be NULL.
 | |
| 
 | |
|   @retval EFI_SUCCESS           The Bluetooth scan request is submitted.
 | |
|   @retval EFI_DEVICE_ERROR      A hardware error occurred trying to scan the BluetoothLE device.
 | |
| 
 | |
| **/
 | |
| typedef
 | |
| EFI_STATUS
 | |
| (EFIAPI *EFI_BLUETOOTH_LE_CONFIG_SCAN)(
 | |
|   IN EFI_BLUETOOTH_LE_CONFIG_PROTOCOL                *This,
 | |
|   IN BOOLEAN                                         ReScan,
 | |
|   IN UINT32                                          Timeout,
 | |
|   IN EFI_BLUETOOTH_LE_CONFIG_SCAN_PARAMETER          *ScanParameter, OPTIONAL
 | |
|   IN EFI_BLUETOOTH_LE_CONFIG_SCAN_CALLBACK_FUNCTION  Callback,
 | |
|   IN VOID                                            *Context
 | |
|   );
 | |
| 
 | |
| typedef struct {
 | |
|   ///
 | |
|   /// The version of the structure. A value of zero represents the
 | |
|   /// EFI_BLUETOOTH_LE_CONFIG_CONNECT_PARAMETER
 | |
|   /// structure as defined here. Future version of this specification may
 | |
|   /// extend this data structure in a backward compatible way and
 | |
|   /// increase the value of Version.
 | |
|   ///
 | |
|   UINT32                    Version;
 | |
|   ///
 | |
|   /// Recommended scan interval to be used while performing scan before connect.
 | |
|   ///
 | |
|   UINT16                    ScanInterval;
 | |
|   ///
 | |
|   /// Recommended scan window to be used while performing a connection
 | |
|   ///
 | |
|   UINT16                    ScanWindow;
 | |
|   ///
 | |
|   /// Minimum allowed connection interval. Shall be less than or equal to ConnIntervalMax.
 | |
|   ///
 | |
|   UINT16                    ConnIntervalMin;
 | |
|   ///
 | |
|   /// Maximum allowed connection interval. Shall be greater than or equal to ConnIntervalMin.
 | |
|   ///
 | |
|   UINT16                    ConnIntervalMax;
 | |
|   ///
 | |
|   /// Slave latency for the connection in number of connection events.
 | |
|   ///
 | |
|   UINT16                    ConnLatency;
 | |
|   ///
 | |
|   /// Link supervision timeout for the connection.
 | |
|   ///
 | |
|   UINT16                    SupervisionTimeout;
 | |
| } EFI_BLUETOOTH_LE_CONFIG_CONNECT_PARAMETER;
 | |
| 
 | |
| /**
 | |
|   Connect a BluetoothLE device.
 | |
| 
 | |
|   The Connect() function connects a Bluetooth device. When this function is returned successfully,
 | |
|   a new EFI_BLUETOOTH_IO_PROTOCOL is created.
 | |
| 
 | |
|   @param[in]  This              Pointer to the EFI_BLUETOOTH_LE_CONFIG_PROTOCOL instance.
 | |
|   @param[in]  AutoReconnect     If TRUE, the BluetoothLE host controller needs to do an auto
 | |
|                                 reconnect. If FALSE, the BluetoothLE host controller does not do
 | |
|                                 an auto reconnect.
 | |
|   @param[in]  DoBonding         If TRUE, the BluetoothLE host controller needs to do a bonding.
 | |
|                                 If FALSE, the BluetoothLE host controller does not do a bonding.
 | |
|   @param[in]  ConnectParameter  If it is not NULL, the ConnectParameter is used to perform a
 | |
|                                 scan by the BluetoothLE bus driver. If it is NULL, the default
 | |
|                                 parameter is used.
 | |
|   @param[in]  BD_ADDR           The address of the BluetoothLE device to be connected.
 | |
| 
 | |
|   @retval EFI_SUCCESS           The BluetoothLE device is connected successfully.
 | |
|   @retval EFI_ALREADY_STARTED   The BluetoothLE device is already connected.
 | |
|   @retval EFI_NOT_FOUND         The BluetoothLE device is not found.
 | |
|   @retval EFI_DEVICE_ERROR      A hardware error occurred trying to connect the BluetoothLE device.
 | |
| 
 | |
| **/
 | |
| typedef
 | |
| EFI_STATUS
 | |
| (EFIAPI *EFI_BLUETOOTH_LE_CONFIG_CONNECT)(
 | |
|   IN  EFI_BLUETOOTH_LE_CONFIG_PROTOCOL            *This,
 | |
|   IN  BOOLEAN                                     AutoReconnect,
 | |
|   IN  BOOLEAN                                     DoBonding,
 | |
|   IN  EFI_BLUETOOTH_LE_CONFIG_CONNECT_PARAMETER   *ConnectParameter, OPTIONAL
 | |
|   IN  BLUETOOTH_LE_ADDRESS                        *BD_ADDR
 | |
|   );
 | |
| 
 | |
| /**
 | |
|   Disconnect a BluetoothLE device.
 | |
| 
 | |
|   The Disconnect() function disconnects a BluetoothLE device. When this function is returned
 | |
|   successfully, the EFI_BLUETOOTH_ATTRIBUTE_PROTOCOL associated with this device is
 | |
|   destroyed and all services associated are stopped.
 | |
| 
 | |
|   @param[in]  This          Pointer to the EFI_BLUETOOTH_LE_CONFIG_PROTOCOL instance.
 | |
|   @param[in]  BD_ADDR       The address of BluetoothLE device to be connected.
 | |
|   @param[in]  Reason        Bluetooth disconnect reason. See Bluetooth specification for detail.
 | |
| 
 | |
|   @retval EFI_SUCCESS           The BluetoothLE device is disconnected successfully.
 | |
|   @retval EFI_NOT_STARTED       The BluetoothLE device is not connected.
 | |
|   @retval EFI_NOT_FOUND         The BluetoothLE device is not found.
 | |
|   @retval EFI_DEVICE_ERROR      A hardware error occurred trying to disconnect the BluetoothLE device.
 | |
| 
 | |
| **/
 | |
| typedef
 | |
| EFI_STATUS
 | |
| (EFIAPI *EFI_BLUETOOTH_LE_CONFIG_DISCONNECT)(
 | |
|   IN EFI_BLUETOOTH_LE_CONFIG_PROTOCOL  *This,
 | |
|   IN BLUETOOTH_LE_ADDRESS              *BD_ADDR,
 | |
|   IN UINT8                             Reason
 | |
|   );
 | |
| 
 | |
| /**
 | |
|   Get BluetoothLE configuration data.
 | |
| 
 | |
|   The GetData() function returns BluetoothLE configuration data. For remote BluetoothLE device
 | |
|   configuration data, please use GetRemoteData() function with valid BD_ADDR.
 | |
| 
 | |
|   @param[in]       This         Pointer to the EFI_BLUETOOTH_LE_CONFIG_PROTOCOL instance.
 | |
|   @param[in]       DataType     Configuration data type.
 | |
|   @param[in, out]  DataSize     On input, indicates the size, in bytes, of the data buffer specified by Data.
 | |
|                                 On output, indicates the amount of data actually returned.
 | |
|   @param[in, out]  Data         A pointer to the buffer of data that will be returned.
 | |
| 
 | |
|   @retval EFI_SUCCESS           The BluetoothLE configuration data is returned successfully.
 | |
|   @retval EFI_INVALID_PARAMETER One or more of the following conditions is TRUE:
 | |
|                                 - DataSize is NULL.
 | |
|                                 - *DataSize is 0.
 | |
|                                 - Data is NULL.
 | |
|   @retval EFI_UNSUPPORTED       The DataType is unsupported.
 | |
|   @retval EFI_NOT_FOUND         The DataType is not found.
 | |
|   @retval EFI_BUFFER_TOO_SMALL  The buffer is too small to hold the buffer.
 | |
| 
 | |
| **/
 | |
| typedef
 | |
| EFI_STATUS
 | |
| (EFIAPI *EFI_BLUETOOTH_LE_CONFIG_GET_DATA) (
 | |
|   IN EFI_BLUETOOTH_LE_CONFIG_PROTOCOL       *This,
 | |
|   IN EFI_BLUETOOTH_CONFIG_DATA_TYPE      DataType,
 | |
|   IN OUT UINTN                           *DataSize,
 | |
|   IN OUT VOID                            *Data OPTIONAL
 | |
|   );
 | |
| 
 | |
| /**
 | |
|   Set BluetoothLE configuration data.
 | |
| 
 | |
|   The SetData() function sets local BluetoothLE device configuration data. Not all DataType can be
 | |
|   set.
 | |
| 
 | |
|   @param[in]  This              Pointer to the EFI_BLUETOOTH_LE_CONFIG_PROTOCOL instance.
 | |
|   @param[in]  DataType          Configuration data type.
 | |
|   @param[in]  DataSize          Indicates the size, in bytes, of the data buffer specified by Data.
 | |
|   @param[in]  Data              A pointer to the buffer of data that will be set.
 | |
| 
 | |
|   @retval EFI_SUCCESS           The BluetoothLE configuration data is set successfully.
 | |
|   @retval EFI_INVALID_PARAMETER One or more of the following conditions is TRUE:
 | |
|                                 - DataSize is 0.
 | |
|                                 - Data is NULL.
 | |
|   @retval EFI_UNSUPPORTED       The DataType is unsupported.
 | |
|   @retval EFI_WRITE_PROTECTED   Cannot set configuration data.
 | |
| 
 | |
| **/
 | |
| typedef
 | |
| EFI_STATUS
 | |
| (EFIAPI *EFI_BLUETOOTH_LE_CONFIG_SET_DATA) (
 | |
|   IN EFI_BLUETOOTH_LE_CONFIG_PROTOCOL       *This,
 | |
|   IN EFI_BLUETOOTH_CONFIG_DATA_TYPE         DataType,
 | |
|   IN UINTN                                  DataSize,
 | |
|   IN VOID                                   *Data
 | |
|   );
 | |
| 
 | |
| /**
 | |
|   Get remove BluetoothLE device configuration data.
 | |
| 
 | |
|   The GetRemoteData() function returns remote BluetoothLE device configuration data.
 | |
| 
 | |
|   @param[in]  This              Pointer to the EFI_BLUETOOTH_LE_CONFIG_PROTOCOL instance.
 | |
|   @param[in]  DataType          Configuration data type.
 | |
|   @param[in]  BDAddr            Remote BluetoothLE device address.
 | |
|   @param[in, out] DataSize      On input, indicates the size, in bytes, of the data buffer specified by Data.
 | |
|                                 On output, indicates the amount of data actually returned.
 | |
|   @param[in, out] Data          A pointer to the buffer of data that will be returned.
 | |
| 
 | |
|   @retval EFI_SUCCESS           The remote BluetoothLE device configuration data is returned successfully.
 | |
|   @retval EFI_INVALID_PARAMETER One or more of the following conditions is TRUE:
 | |
|                                 - DataSize is NULL.
 | |
|                                 - *DataSize is 0.
 | |
|                                 - Data is NULL.
 | |
|   @retval EFI_UNSUPPORTED       The DataType is unsupported.
 | |
|   @retval EFI_NOT_FOUND         The DataType is not found.
 | |
|   @retval EFI_BUFFER_TOO_SMALL  The buffer is too small to hold the buffer.
 | |
| 
 | |
| **/
 | |
| typedef
 | |
| EFI_STATUS
 | |
| (EFIAPI *EFI_BLUETOOTH_LE_CONFIG_GET_REMOTE_DATA) (
 | |
|   IN EFI_BLUETOOTH_LE_CONFIG_PROTOCOL       *This,
 | |
|   IN EFI_BLUETOOTH_CONFIG_DATA_TYPE         DataType,
 | |
|   IN BLUETOOTH_LE_ADDRESS                   *BDAddr,
 | |
|   IN OUT UINTN                              *DataSize,
 | |
|   IN OUT VOID                               *Data
 | |
|   );
 | |
| 
 | |
| typedef enum {
 | |
|   ///
 | |
|   /// It indicates an authorization request. No data is associated with the callback
 | |
|   /// input. In the output data, the application should return the authorization value.
 | |
|   /// The data structure is BOOLEAN. TRUE means YES. FALSE means NO.
 | |
|   ///
 | |
|   EfiBluetoothSmpAuthorizationRequestEvent,
 | |
|   ///
 | |
|   /// It indicates that a passkey has been generated locally by the driver, and the same
 | |
|   /// passkey should be entered at the remote device. The callback input data is the
 | |
|   /// passkey of type UINT32, to be displayed by the application. No output data
 | |
|   /// should be returned.
 | |
|   ///
 | |
|   EfiBluetoothSmpPasskeyReadyEvent,
 | |
|   ///
 | |
|   /// It indicates that the driver is requesting for the passkey has been generated at
 | |
|   /// the remote device. No data is associated with the callback input. The output data
 | |
|   /// is the passkey of type UINT32, to be entered by the user.
 | |
|   ///
 | |
|   EfiBluetoothSmpPasskeyRequestEvent,
 | |
|   ///
 | |
|   /// It indicates that the driver is requesting for the passkey that has been pre-shared
 | |
|   /// out-of-band with the remote device. No data is associated with the callback
 | |
|   /// input. The output data is the stored OOB data of type UINT8[16].
 | |
|   ///
 | |
|   EfiBluetoothSmpOOBDataRequestEvent,
 | |
|   ///
 | |
|   /// In indicates that a number have been generated locally by the bus driver, and
 | |
|   /// also at the remote device, and the bus driver wants to know if the two numbers
 | |
|   /// match. The callback input data is the number of type UINT32. The output data
 | |
|   /// is confirmation value of type BOOLEAN. TRUE means comparison pass. FALSE
 | |
|   /// means comparison fail.
 | |
|   ///
 | |
|   EfiBluetoothSmpNumericComparisonEvent,
 | |
| } EFI_BLUETOOTH_LE_SMP_EVENT_DATA_TYPE;
 | |
| 
 | |
| /**
 | |
|   The callback function for SMP.
 | |
| 
 | |
|   @param[in]  This                Pointer to the EFI_BLUETOOTH_LE_CONFIG_PROTOCOL instance.
 | |
|   @param[in]  Context             Data passed into callback function. This is optional parameter
 | |
|                                   and may be NULL.
 | |
|   @param[in]  BDAddr              Remote BluetoothLE device address.
 | |
|   @param[in]  EventDataType       Event data type in EFI_BLUETOOTH_LE_SMP_EVENT_DATA_TYPE.
 | |
|   @param[in]  DataSize            Indicates the size, in bytes, of the data buffer specified by Data.
 | |
|   @param[in]  Data                A pointer to the buffer of data.
 | |
| 
 | |
|   @retval EFI_SUCCESS   The callback function complete successfully.
 | |
| 
 | |
| **/
 | |
| typedef
 | |
| EFI_STATUS
 | |
| (EFIAPI *EFI_BLUETOOTH_LE_SMP_CALLBACK) (
 | |
|   IN EFI_BLUETOOTH_LE_CONFIG_PROTOCOL       *This,
 | |
|   IN VOID                                   *Context,
 | |
|   IN BLUETOOTH_LE_ADDRESS                   *BDAddr,
 | |
|   IN EFI_BLUETOOTH_LE_SMP_EVENT_DATA_TYPE   EventDataType,
 | |
|   IN UINTN                                  DataSize,
 | |
|   IN VOID                                   *Data
 | |
|   );
 | |
| 
 | |
| /**
 | |
|   Register Security Manager Protocol callback function for user authentication/authorization.
 | |
| 
 | |
|   The RegisterSmpAuthCallback() function register Security Manager Protocol callback
 | |
|   function for user authentication/authorization.
 | |
| 
 | |
|   @param[in]  This            Pointer to the EFI_BLUETOOTH_LE_CONFIG_PROTOCOL instance.
 | |
|   @param[in]  Callback        Callback function for user authentication/authorization.
 | |
|   @param[in]  Context         Data passed into Callback function. This is optional parameter and may be NULL.
 | |
| 
 | |
|   @retval EFI_SUCCESS         The SMP callback function is registered successfully.
 | |
|   @retval EFI_ALREADY_STARTED A callback function is already registered on the same attribute
 | |
|                               opcode and attribute handle, when the Callback is not NULL.
 | |
|   @retval EFI_NOT_STARTED     A callback function is not registered on the same attribute opcode
 | |
|                               and attribute handle, when the Callback is NULL.
 | |
| 
 | |
| **/
 | |
| typedef
 | |
| EFI_STATUS
 | |
| (EFIAPI *EFI_BLUETOOTH_LE_REGISTER_SMP_AUTH_CALLBACK) (
 | |
|   IN EFI_BLUETOOTH_LE_CONFIG_PROTOCOL  *This,
 | |
|   IN EFI_BLUETOOTH_LE_SMP_CALLBACK     Callback,
 | |
|   IN VOID                              *Context
 | |
|   );
 | |
| 
 | |
| /**
 | |
|   Send user authentication/authorization to remote device.
 | |
| 
 | |
|   The SendSmpAuthData() function sends user authentication/authorization to remote device. It
 | |
|   should be used to send these information after the caller gets the request data from the callback
 | |
|   function by RegisterSmpAuthCallback().
 | |
| 
 | |
|   @param[in]  This            Pointer to the EFI_BLUETOOTH_LE_CONFIG_PROTOCOL instance.
 | |
|   @param[in]  BDAddr          Remote BluetoothLE device address.
 | |
|   @param[in]  EventDataType   Event data type in EFI_BLUETOOTH_LE_SMP_EVENT_DATA_TYPE.
 | |
|   @param[in]  DataSize        The size of Data in bytes, of the data buffer specified by Data.
 | |
|   @param[in]  Data            A pointer to the buffer of data that will be sent. The data format
 | |
|                               depends on the type of SMP event data being responded to.
 | |
| 
 | |
|   @retval EFI_SUCCESS         The SMP authorization data is sent successfully.
 | |
|   @retval EFI_NOT_READY       SMP is not in the correct state to receive the auth data.
 | |
| 
 | |
| **/
 | |
| typedef
 | |
| EFI_STATUS
 | |
| (EFIAPI *EFI_BLUETOOTH_LE_SEND_SMP_AUTH_DATA) (
 | |
|   IN EFI_BLUETOOTH_LE_CONFIG_PROTOCOL       *This,
 | |
|   IN BLUETOOTH_LE_ADDRESS                   *BDAddr,
 | |
|   IN EFI_BLUETOOTH_LE_SMP_EVENT_DATA_TYPE   EventDataType,
 | |
|   IN UINTN                                  DataSize,
 | |
|   IN VOID                                   *Data
 | |
|   );
 | |
| 
 | |
| typedef enum {
 | |
|   // For local device only
 | |
|   EfiBluetoothSmpLocalIR, /* If Key hierarchy is supported */
 | |
|   EfiBluetoothSmpLocalER, /* If Key hierarchy is supported */
 | |
|   EfiBluetoothSmpLocalDHK, /* If Key hierarchy is supported. OPTIONAL */
 | |
|   // For peer specific
 | |
|   EfiBluetoothSmpKeysDistributed = 0x1000,
 | |
|   EfiBluetoothSmpKeySize,
 | |
|   EfiBluetoothSmpKeyType,
 | |
|   EfiBluetoothSmpPeerLTK,
 | |
|   EfiBluetoothSmpPeerIRK,
 | |
|   EfiBluetoothSmpPeerCSRK,
 | |
|   EfiBluetoothSmpPeerRand,
 | |
|   EfiBluetoothSmpPeerEDIV,
 | |
|   EfiBluetoothSmpPeerSignCounter,
 | |
|   EfiBluetoothSmpLocalLTK, /* If Key hierarchy not supported */
 | |
|   EfiBluetoothSmpLocalIRK, /* If Key hierarchy not supported */
 | |
|   EfiBluetoothSmpLocalCSRK, /* If Key hierarchy not supported */
 | |
|   EfiBluetoothSmpLocalSignCounter,
 | |
|   EfiBluetoothSmpLocalDIV,
 | |
|   EfiBluetoothSmpPeerAddressList,
 | |
|   EfiBluetoothSmpMax,
 | |
| } EFI_BLUETOOTH_LE_SMP_DATA_TYPE;
 | |
| 
 | |
| /**
 | |
|   The callback function to get SMP data.
 | |
| 
 | |
|   @param[in]      This            Pointer to the EFI_BLUETOOTH_LE_CONFIG_PROTOCOL instance.
 | |
|   @param[in]      Context         Data passed into callback function. This is optional parameter
 | |
|                                   and may be NULL.
 | |
|   @param[in]      BDAddr          Remote BluetoothLE device address. For Local device setting, it
 | |
|                                   should be NULL.
 | |
|   @param[in]      DataType        Data type in EFI_BLUETOOTH_LE_SMP_DATA_TYPE.
 | |
|   @param[in, out] DataSize        On input, indicates the size, in bytes, of the data buffer specified
 | |
|                                   by Data. On output, indicates the amount of data actually returned.
 | |
|   @param[out]     Data            A pointer to the buffer of data that will be returned.
 | |
| 
 | |
|   @retval EFI_SUCCESS   The callback function complete successfully.
 | |
| 
 | |
| **/
 | |
| typedef
 | |
| EFI_STATUS
 | |
| (EFIAPI * EFI_BLUETOOTH_LE_CONFIG_SMP_GET_DATA_CALLBACK) (
 | |
|   IN EFI_BLUETOOTH_LE_CONFIG_PROTOCOL  *This,
 | |
|   IN VOID                              *Context,
 | |
|   IN BLUETOOTH_LE_ADDRESS              *BDAddr,
 | |
|   IN EFI_BLUETOOTH_LE_SMP_DATA_TYPE    DataType,
 | |
|   IN OUT UINTN                         *DataSize,
 | |
|   OUT VOID                             *Data
 | |
|   );
 | |
| 
 | |
| /**
 | |
|   Register a callback function to get SMP related data.
 | |
| 
 | |
|   The RegisterSmpGetDataCallback() function registers a callback function to get SMP related data.
 | |
| 
 | |
|   @param[in]  This            Pointer to the EFI_BLUETOOTH_LE_CONFIG_PROTOCOL instance.
 | |
|   @param[in]  Callback        Callback function for SMP get data.
 | |
|   @param[in]  Context         Data passed into Callback function. This is optional parameter and may be NULL.
 | |
| 
 | |
|   @retval EFI_SUCCESS         The SMP get data callback function is registered successfully.
 | |
|   @retval EFI_ALREADY_STARTED A callback function is already registered on the same attribute
 | |
|                               opcode and attribute handle, when the Callback is not NULL.
 | |
|   @retval EFI_NOT_STARTED     A callback function is not registered on the same attribute opcode
 | |
|                               and attribute handle, when the Callback is NULL
 | |
| **/
 | |
| typedef
 | |
| EFI_STATUS
 | |
| (EFIAPI * EFI_BLUETOOTH_LE_CONFIG_REGISTER_SMP_GET_DATA_CALLBACK) (
 | |
|   IN EFI_BLUETOOTH_LE_CONFIG_PROTOCOL              *This,
 | |
|   IN EFI_BLUETOOTH_LE_CONFIG_SMP_GET_DATA_CALLBACK Callback,
 | |
|   IN VOID                                          *Context
 | |
|   );
 | |
| 
 | |
| /**
 | |
|   The callback function to set SMP data.
 | |
| 
 | |
|   @param[in]  This                Pointer to the EFI_BLUETOOTH_LE_CONFIG_PROTOCOL instance.
 | |
|   @param[in]  Context             Data passed into callback function. This is optional parameter
 | |
|                                   and may be NULL.
 | |
|   @param[in]  BDAddr              Remote BluetoothLE device address.
 | |
|   @param[in]  DataType            Data type in EFI_BLUETOOTH_LE_SMP_DATA_TYPE.
 | |
|   @param[in]  DataSize            Indicates the size, in bytes, of the data buffer specified by Data.
 | |
|   @param[in]  Data                A pointer to the buffer of data.
 | |
| 
 | |
|   @retval EFI_SUCCESS   The callback function complete successfully.
 | |
| 
 | |
| **/
 | |
| typedef
 | |
| EFI_STATUS
 | |
| (EFIAPI * EFI_BLUETOOTH_LE_CONFIG_SMP_SET_DATA_CALLBACK) (
 | |
|   IN EFI_BLUETOOTH_LE_CONFIG_PROTOCOL  *This,
 | |
|   IN VOID                              *Context,
 | |
|   IN BLUETOOTH_LE_ADDRESS              *BDAddr,
 | |
|   IN EFI_BLUETOOTH_LE_SMP_DATA_TYPE    Type,
 | |
|   IN UINTN                             DataSize,
 | |
|   IN VOID                              *Data
 | |
|   );
 | |
| 
 | |
| /**
 | |
|   Register a callback function to set SMP related data.
 | |
| 
 | |
|   The RegisterSmpSetDataCallback() function registers a callback function to set SMP related data.
 | |
| 
 | |
|   @param[in]  This            Pointer to the EFI_BLUETOOTH_LE_CONFIG_PROTOCOL instance.
 | |
|   @param[in]  Callback        Callback function for SMP set data.
 | |
|   @param[in]  Context         Data passed into Callback function. This is optional parameter and may be NULL.
 | |
| 
 | |
|   @retval EFI_SUCCESS         The SMP set data callback function is registered successfully.
 | |
|   @retval EFI_ALREADY_STARTED A callback function is already registered on the same attribute
 | |
|                               opcode and attribute handle, when the Callback is not NULL.
 | |
|   @retval EFI_NOT_STARTED     A callback function is not registered on the same attribute opcode
 | |
|                               and attribute handle, when the Callback is NULL
 | |
| **/
 | |
| typedef
 | |
| EFI_STATUS
 | |
| (EFIAPI * EFI_BLUETOOTH_LE_CONFIG_REGISTER_SMP_SET_DATA_CALLBACK) (
 | |
|   IN EFI_BLUETOOTH_LE_CONFIG_PROTOCOL              *This,
 | |
|   IN EFI_BLUETOOTH_LE_CONFIG_SMP_SET_DATA_CALLBACK Callback,
 | |
|   IN VOID                                          *Context
 | |
|   );
 | |
| 
 | |
| /**
 | |
|   The callback function to hook connect complete event.
 | |
| 
 | |
|   @param[in]  This                Pointer to the EFI_BLUETOOTH_LE_CONFIG_PROTOCOL instance.
 | |
|   @param[in]  Context             Data passed into callback function. This is optional parameter
 | |
|                                   and may be NULL.
 | |
|   @param[in]  CallbackType        The value defined in EFI_BLUETOOTH_CONNECT_COMPLETE_CALLBACK_TYPE.
 | |
|   @param[in]  BDAddr              Remote BluetoothLE device address.
 | |
|   @param[in]  InputBuffer         A pointer to the buffer of data that is input from callback caller.
 | |
|   @param[in]  InputBufferSize     Indicates the size, in bytes, of the data buffer specified by InputBuffer.
 | |
| 
 | |
|   @retval EFI_SUCCESS   The callback function complete successfully.
 | |
| 
 | |
| **/
 | |
| typedef
 | |
| EFI_STATUS
 | |
| (EFIAPI *EFI_BLUETOOTH_LE_CONFIG_CONNECT_COMPLETE_CALLBACK) (
 | |
|   IN  EFI_BLUETOOTH_LE_CONFIG_PROTOCOL                 *This,
 | |
|   IN  VOID                                             *Context,
 | |
|   IN  EFI_BLUETOOTH_CONNECT_COMPLETE_CALLBACK_TYPE     CallbackType,
 | |
|   IN  BLUETOOTH_LE_ADDRESS                             *BDAddr,
 | |
|   IN  VOID                                             *InputBuffer,
 | |
|   IN  UINTN                                            InputBufferSize
 | |
|   );
 | |
| 
 | |
| /**
 | |
|   Register link connect complete callback function.
 | |
| 
 | |
|   The RegisterLinkConnectCompleteCallback() function registers Bluetooth link connect
 | |
|   complete callback function. The Bluetooth Configuration driver may call
 | |
|   RegisterLinkConnectCompleteCallback() to register a callback function. During pairing,
 | |
|   Bluetooth bus driver must trigger this callback function to report device state, if it is registered.
 | |
|   Then Bluetooth Configuration driver will get information on device connection, according to
 | |
|   CallbackType defined by EFI_BLUETOOTH_CONNECT_COMPLETE_CALLBACK_TYPE
 | |
| 
 | |
|   @param[in]  This            Pointer to the EFI_BLUETOOTH_LE_CONFIG_PROTOCOL instance.
 | |
|   @param[in]  Callback        The callback function. NULL means unregister.
 | |
|   @param[in]  Context         Data passed into Callback function. This is optional parameter and may be NULL.
 | |
| 
 | |
|   @retval EFI_SUCCESS         The link connect complete callback function is registered successfully.
 | |
|   @retval EFI_ALREADY_STARTED A callback function is already registered on the same attribute
 | |
|                               opcode and attribute handle, when the Callback is not NULL.
 | |
|   @retval EFI_NOT_STARTED     A callback function is not registered on the same attribute opcode
 | |
|                               and attribute handle, when the Callback is NULL
 | |
| **/
 | |
| typedef
 | |
| EFI_STATUS
 | |
| (EFIAPI *EFI_BLUETOOTH_LE_CONFIG_REGISTER_CONNECT_COMPLETE_CALLBACK) (
 | |
|   IN EFI_BLUETOOTH_LE_CONFIG_PROTOCOL                        *This,
 | |
|   IN EFI_BLUETOOTH_LE_CONFIG_CONNECT_COMPLETE_CALLBACK       Callback,
 | |
|   IN VOID                                                    *Context
 | |
|   );
 | |
| 
 | |
| ///
 | |
| /// This protocol abstracts user interface configuration for BluetoothLe device.
 | |
| ///
 | |
| struct _EFI_BLUETOOTH_LE_CONFIG_PROTOCOL {
 | |
|   EFI_BLUETOOTH_LE_CONFIG_INIT                               Init;
 | |
|   EFI_BLUETOOTH_LE_CONFIG_SCAN                               Scan;
 | |
|   EFI_BLUETOOTH_LE_CONFIG_CONNECT                            Connect;
 | |
|   EFI_BLUETOOTH_LE_CONFIG_DISCONNECT                         Disconnect;
 | |
|   EFI_BLUETOOTH_LE_CONFIG_GET_DATA                           GetData;
 | |
|   EFI_BLUETOOTH_LE_CONFIG_SET_DATA                           SetData;
 | |
|   EFI_BLUETOOTH_LE_CONFIG_GET_REMOTE_DATA                    GetRemoteData;
 | |
|   EFI_BLUETOOTH_LE_REGISTER_SMP_AUTH_CALLBACK                RegisterSmpAuthCallback;
 | |
|   EFI_BLUETOOTH_LE_SEND_SMP_AUTH_DATA                        SendSmpAuthData;
 | |
|   EFI_BLUETOOTH_LE_CONFIG_REGISTER_SMP_GET_DATA_CALLBACK     RegisterSmpGetDataCallback;
 | |
|   EFI_BLUETOOTH_LE_CONFIG_REGISTER_SMP_SET_DATA_CALLBACK     RegisterSmpSetDataCallback;
 | |
|   EFI_BLUETOOTH_LE_CONFIG_REGISTER_CONNECT_COMPLETE_CALLBACK RegisterLinkConnectCompleteCallback;
 | |
| };
 | |
| 
 | |
| extern EFI_GUID gEfiBluetoothLeConfigProtocolGuid;
 | |
| 
 | |
| #endif
 | |
| 
 |