mirror of
https://github.com/CloverHackyColor/CloverBootloader.git
synced 2024-11-24 11:45:27 +01:00
629 lines
28 KiB
C
629 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, 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,
|
||
|
} 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
|
||
|
|