| /** @file |
| EFI Bluetooth IO Service Binding Protocol as defined in UEFI 2.5. |
| EFI Bluetooth IO Protocol as defined in UEFI 2.5. |
| The EFI Bluetooth IO Service Binding Protocol is used to locate EFI Bluetooth IO Protocol drivers to |
| create and destroy child of the driver to communicate with other Bluetooth device by using Bluetooth IO protocol. |
| |
| Copyright (c) 2015 - 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.5 |
| |
| **/ |
| |
| #ifndef __EFI_BLUETOOTH_IO_PROTOCOL_H__ |
| #define __EFI_BLUETOOTH_IO_PROTOCOL_H__ |
| |
| #include <IndustryStandard/Bluetooth.h> |
| |
| #define EFI_BLUETOOTH_IO_SERVICE_BINDING_PROTOCOL_GUID \ |
| { \ |
| 0x388278d3, 0x7b85, 0x42f0, { 0xab, 0xa9, 0xfb, 0x4b, 0xfd, 0x69, 0xf5, 0xab } \ |
| } |
| |
| #define EFI_BLUETOOTH_IO_PROTOCOL_GUID \ |
| { \ |
| 0x467313de, 0x4e30, 0x43f1, { 0x94, 0x3e, 0x32, 0x3f, 0x89, 0x84, 0x5d, 0xb5 } \ |
| } |
| |
| typedef struct _EFI_BLUETOOTH_IO_PROTOCOL EFI_BLUETOOTH_IO_PROTOCOL; |
| |
| /// |
| /// EFI_BLUETOOTH_DEVICE_INFO |
| /// |
| typedef struct { |
| /// |
| /// The version of the structure |
| /// |
| UINT32 Version; |
| /// |
| /// 48bit Bluetooth device address. |
| /// |
| BLUETOOTH_ADDRESS BD_ADDR; |
| /// |
| /// Bluetooth PageScanRepetitionMode. See Bluetooth specification for detail. |
| /// |
| UINT8 PageScanRepetitionMode; |
| /// |
| /// Bluetooth ClassOfDevice. See Bluetooth specification for detail. |
| /// |
| BLUETOOTH_CLASS_OF_DEVICE ClassOfDevice; |
| /// |
| /// Bluetooth CloseOffset. See Bluetooth specification for detail. |
| /// |
| UINT16 ClockOffset; |
| /// |
| /// Bluetooth RSSI. See Bluetooth specification for detail. |
| /// |
| UINT8 RSSI; |
| /// |
| /// Bluetooth ExtendedInquiryResponse. See Bluetooth specification for detail. |
| /// |
| UINT8 ExtendedInquiryResponse[240]; |
| } EFI_BLUETOOTH_DEVICE_INFO; |
| |
| /** |
| Get Bluetooth device information. |
| |
| @param[in] This Pointer to the EFI_BLUETOOTH_IO_PROTOCOL instance. |
| @param[out] DeviceInfoSize A pointer to the size, in bytes, of the DeviceInfo buffer. |
| @param[out] DeviceInfo A pointer to a callee allocated buffer that returns Bluetooth device information. |
| |
| @retval EFI_SUCCESS The Bluetooth device information is returned successfully. |
| @retval EFI_DEVICE_ERROR A hardware error occurred trying to retrieve the Bluetooth device information. |
| |
| **/ |
| typedef |
| EFI_STATUS |
| (EFIAPI *EFI_BLUETOOTH_IO_GET_DEVICE_INFO)( |
| IN EFI_BLUETOOTH_IO_PROTOCOL *This, |
| OUT UINTN *DeviceInfoSize, |
| OUT VOID **DeviceInfo |
| ); |
| |
| /** |
| Get Bluetooth SDP information. |
| |
| @param[in] This Pointer to the EFI_BLUETOOTH_IO_PROTOCOL instance. |
| @param[out] SdpInfoSize A pointer to the size, in bytes, of the SdpInfo buffer. |
| @param[out] SdpInfo A pointer to a callee allocated buffer that returns Bluetooth SDP information. |
| |
| @retval EFI_SUCCESS The Bluetooth device information is returned successfully. |
| @retval EFI_DEVICE_ERROR A hardware error occurred trying to retrieve the Bluetooth SDP information. |
| |
| **/ |
| typedef |
| EFI_STATUS |
| (EFIAPI *EFI_BLUETOOTH_IO_GET_SDP_INFO)( |
| IN EFI_BLUETOOTH_IO_PROTOCOL *This, |
| OUT UINTN *SdpInfoSize, |
| OUT VOID **SdpInfo |
| ); |
| |
| /** |
| Send L2CAP message (including L2CAP header). |
| |
| @param[in] This Pointer to the EFI_BLUETOOTH_IO_PROTOCOL instance. |
| @param[in, out] BufferSize On input, indicates the size, in bytes, of the data buffer specified by Buffer. |
| On output, indicates the amount of data actually transferred. |
| @param[in] Buffer A pointer to the buffer of data that will be transmitted to Bluetooth L2CAP layer. |
| @param[in] Timeout Indicating the transfer should be completed within this time frame. The units are in |
| milliseconds. If Timeout is 0, then the caller must wait for the function to be completed |
| until EFI_SUCCESS or EFI_DEVICE_ERROR is returned. |
| |
| @retval EFI_SUCCESS The L2CAP message is sent successfully. |
| @retval EFI_INVALID_PARAMETER One or more of the following conditions is TRUE: |
| - BufferSize is NULL. |
| - *BufferSize is 0. |
| - Buffer is NULL. |
| @retval EFI_TIMEOUT Sending L2CAP message fail due to timeout. |
| @retval EFI_DEVICE_ERROR Sending L2CAP message fail due to host controller or device error. |
| |
| **/ |
| typedef |
| EFI_STATUS |
| (EFIAPI *EFI_BLUETOOTH_IO_L2CAP_RAW_SEND)( |
| IN EFI_BLUETOOTH_IO_PROTOCOL *This, |
| IN OUT UINTN *BufferSize, |
| IN VOID *Buffer, |
| IN UINTN Timeout |
| ); |
| |
| /** |
| Receive L2CAP message (including L2CAP header). |
| |
| @param[in] This Pointer to the EFI_BLUETOOTH_IO_PROTOCOL instance. |
| @param[in] BufferSize On input, indicates the size, in bytes, of the data buffer specified by Buffer. |
| On output, indicates the amount of data actually transferred. |
| @param[out] Buffer A pointer to the buffer of data that will be received from Bluetooth L2CAP layer. |
| @param[in] Timeout Indicating the transfer should be completed within this time frame. The units are in |
| milliseconds. If Timeout is 0, then the caller must wait for the function to be completed |
| until EFI_SUCCESS or EFI_DEVICE_ERROR is returned. |
| |
| @retval EFI_SUCCESS The L2CAP message is received successfully. |
| @retval EFI_INVALID_PARAMETER One or more of the following conditions is TRUE: |
| - BufferSize is NULL. |
| - *BufferSize is 0. |
| - Buffer is NULL. |
| @retval EFI_TIMEOUT Receiving L2CAP message fail due to timeout. |
| @retval EFI_DEVICE_ERROR Receiving L2CAP message fail due to host controller or device error. |
| |
| **/ |
| typedef |
| EFI_STATUS |
| (EFIAPI *EFI_BLUETOOTH_IO_L2CAP_RAW_RECEIVE)( |
| IN EFI_BLUETOOTH_IO_PROTOCOL *This, |
| IN OUT UINTN *BufferSize, |
| OUT VOID *Buffer, |
| IN UINTN Timeout |
| ); |
| |
| /** |
| Callback function, it is called when asynchronous transfer is completed. |
| |
| @param[in] ChannelID Bluetooth L2CAP message channel ID. |
| @param[in] Data Data received via asynchronous transfer. |
| @param[in] DataLength The length of Data in bytes, received via asynchronous transfer. |
| @param[in] Context Context passed from asynchronous transfer request. |
| |
| @retval EFI_SUCCESS The callback function complete successfully. |
| |
| **/ |
| typedef |
| EFI_STATUS |
| (EFIAPI *EFI_BLUETOOTH_IO_ASYNC_FUNC_CALLBACK)( |
| IN UINT16 ChannelID, |
| IN VOID *Data, |
| IN UINTN DataLength, |
| IN VOID *Context |
| ); |
| |
| /** |
| Receive L2CAP message (including L2CAP header) in non-blocking way. |
| |
| @param[in] This Pointer to the EFI_BLUETOOTH_IO_PROTOCOL instance. |
| @param[in] IsNewTransfer If TRUE, a new transfer will be submitted. If FALSE, the request is deleted. |
| @param[in] PollingInterval Indicates the periodic rate, in milliseconds, that the transfer is to be executed. |
| @param[in] DataLength Specifies the length, in bytes, of the data to be received. |
| @param[in] Callback The callback function. This function is called if the asynchronous transfer is |
| completed. |
| @param[in] Context Data passed into Callback function. This is optional parameter and may be NULL. |
| |
| @retval EFI_SUCCESS The L2CAP asynchronous receive request is submitted successfully. |
| @retval EFI_INVALID_PARAMETER One or more of the following conditions is TRUE: |
| - DataLength is 0. |
| - If IsNewTransfer is TRUE, and an asynchronous receive request already exists. |
| |
| **/ |
| typedef |
| EFI_STATUS |
| (EFIAPI *EFI_BLUETOOTH_IO_L2CAP_RAW_ASYNC_RECEIVE)( |
| IN EFI_BLUETOOTH_IO_PROTOCOL *This, |
| IN BOOLEAN IsNewTransfer, |
| IN UINTN PollingInterval, |
| IN UINTN DataLength, |
| IN EFI_BLUETOOTH_IO_ASYNC_FUNC_CALLBACK Callback, |
| IN VOID *Context |
| ); |
| |
| /** |
| Send L2CAP message (excluding L2CAP header) to a specific channel. |
| |
| @param[in] This Pointer to the EFI_BLUETOOTH_IO_PROTOCOL instance. |
| @param[in] Handle A handle created by EFI_BLUETOOTH_IO_PROTOCOL.L2CapConnect indicates which channel to send. |
| @param[in, out] BufferSize On input, indicates the size, in bytes, of the data buffer specified by Buffer. |
| On output, indicates the amount of data actually transferred. |
| @param[in] Buffer A pointer to the buffer of data that will be transmitted to Bluetooth L2CAP layer. |
| @param[in] Timeout Indicating the transfer should be completed within this time frame. The units are in |
| milliseconds. If Timeout is 0, then the caller must wait for the function to be completed |
| until EFI_SUCCESS or EFI_DEVICE_ERROR is returned. |
| |
| @retval EFI_SUCCESS The L2CAP message is sent successfully. |
| @retval EFI_NOT_FOUND Handle is invalid or not found. |
| @retval EFI_INVALID_PARAMETER One or more of the following conditions is TRUE: |
| - BufferSize is NULL. |
| - *BufferSize is 0. |
| - Buffer is NULL. |
| @retval EFI_TIMEOUT Sending L2CAP message fail due to timeout. |
| @retval EFI_DEVICE_ERROR Sending L2CAP message fail due to host controller or device error. |
| |
| **/ |
| typedef |
| EFI_STATUS |
| (EFIAPI *EFI_BLUETOOTH_IO_L2CAP_SEND)( |
| IN EFI_BLUETOOTH_IO_PROTOCOL *This, |
| IN EFI_HANDLE Handle, |
| IN OUT UINTN *BufferSize, |
| IN VOID *Buffer, |
| IN UINTN Timeout |
| ); |
| |
| /** |
| Receive L2CAP message (excluding L2CAP header) from a specific channel. |
| |
| @param[in] This Pointer to the EFI_BLUETOOTH_IO_PROTOCOL instance. |
| @param[in] Handle A handle created by EFI_BLUETOOTH_IO_PROTOCOL.L2CapConnect indicates which channel to receive. |
| @param[out] BufferSize Indicates the size, in bytes, of the data buffer specified by Buffer. |
| @param[out] Buffer A pointer to the buffer of data that will be received from Bluetooth L2CAP layer. |
| @param[in] Timeout Indicating the transfer should be completed within this time frame. The units are in |
| milliseconds. If Timeout is 0, then the caller must wait for the function to be completed |
| until EFI_SUCCESS or EFI_DEVICE_ERROR is returned. |
| |
| @retval EFI_SUCCESS The L2CAP message is received successfully. |
| @retval EFI_NOT_FOUND Handle is invalid or not found. |
| @retval EFI_INVALID_PARAMETER One or more of the following conditions is TRUE: |
| - BufferSize is NULL. |
| - *BufferSize is 0. |
| - Buffer is NULL. |
| @retval EFI_TIMEOUT Receiving L2CAP message fail due to timeout. |
| @retval EFI_DEVICE_ERROR Receiving L2CAP message fail due to host controller or device error. |
| |
| **/ |
| typedef |
| EFI_STATUS |
| (EFIAPI *EFI_BLUETOOTH_IO_L2CAP_RECEIVE)( |
| IN EFI_BLUETOOTH_IO_PROTOCOL *This, |
| IN EFI_HANDLE Handle, |
| OUT UINTN *BufferSize, |
| OUT VOID **Buffer, |
| IN UINTN Timeout |
| ); |
| |
| /** |
| Callback function, it is called when asynchronous transfer is completed. |
| |
| @param[in] Data Data received via asynchronous transfer. |
| @param[in] DataLength The length of Data in bytes, received via asynchronous transfer. |
| @param[in] Context Context passed from asynchronous transfer request. |
| |
| @retval EFI_SUCCESS The callback function complete successfully. |
| |
| **/ |
| typedef |
| EFI_STATUS |
| (EFIAPI *EFI_BLUETOOTH_IO_CHANNEL_SERVICE_CALLBACK)( |
| IN VOID *Data, |
| IN UINTN DataLength, |
| IN VOID *Context |
| ); |
| |
| /** |
| Receive L2CAP message (excluding L2CAP header) in non-blocking way from a specific channel. |
| |
| @param[in] This Pointer to the EFI_BLUETOOTH_IO_PROTOCOL instance. |
| @param[in] Handel A handle created by EFI_BLUETOOTH_IO_PROTOCOL.L2CapConnect indicates which channel |
| to receive. |
| @param[in] Callback The callback function. This function is called if the asynchronous transfer is |
| completed. |
| @param[in] Context Data passed into Callback function. This is optional parameter and may be NULL. |
| |
| @retval EFI_SUCCESS The L2CAP asynchronous receive request is submitted successfully. |
| @retval EFI_NOT_FOUND Handle is invalid or not found. |
| @retval EFI_INVALID_PARAMETER One or more of the following conditions is TRUE: |
| - DataLength is 0. |
| - If an asynchronous receive request already exists on same Handle. |
| |
| **/ |
| typedef |
| EFI_STATUS |
| (EFIAPI *EFI_BLUETOOTH_IO_L2CAP_ASYNC_RECEIVE)( |
| IN EFI_BLUETOOTH_IO_PROTOCOL *This, |
| IN EFI_HANDLE Handle, |
| IN EFI_BLUETOOTH_IO_CHANNEL_SERVICE_CALLBACK Callback, |
| IN VOID *Context |
| ); |
| |
| /** |
| Do L2CAP connection. |
| |
| @param[in] This Pointer to the EFI_BLUETOOTH_IO_PROTOCOL instance. |
| @param[out] Handel A handle to indicate this L2CAP connection. |
| @param[in] Psm Bluetooth PSM. See Bluetooth specification for detail. |
| @param[in] Mtu Bluetooth MTU. See Bluetooth specification for detail. |
| @param[in] Callback The callback function. This function is called whenever there is message received |
| in this channel. |
| @param[in] Context Data passed into Callback function. This is optional parameter and may be NULL. |
| |
| @retval EFI_SUCCESS The Bluetooth L2CAP layer connection is created successfully. |
| @retval EFI_INVALID_PARAMETER One or more of the following conditions is TRUE: |
| - Handle is NULL. |
| @retval EFI_DEVICE_ERROR A hardware error occurred trying to do Bluetooth L2CAP connection. |
| |
| **/ |
| typedef |
| EFI_STATUS |
| (EFIAPI *EFI_BLUETOOTH_IO_L2CAP_CONNECT)( |
| IN EFI_BLUETOOTH_IO_PROTOCOL *This, |
| OUT EFI_HANDLE *Handle, |
| IN UINT16 Psm, |
| IN UINT16 Mtu, |
| IN EFI_BLUETOOTH_IO_CHANNEL_SERVICE_CALLBACK Callback, |
| IN VOID *Context |
| ); |
| |
| /** |
| Do L2CAP disconnection. |
| |
| @param[in] This Pointer to the EFI_BLUETOOTH_IO_PROTOCOL instance. |
| @param[in] Handel A handle to indicate this L2CAP connection. |
| |
| @retval EFI_SUCCESS The Bluetooth L2CAP layer is disconnected successfully. |
| @retval EFI_NOT_FOUND Handle is invalid or not found. |
| @retval EFI_DEVICE_ERROR A hardware error occurred trying to do Bluetooth L2CAP disconnection. |
| |
| **/ |
| typedef |
| EFI_STATUS |
| (EFIAPI *EFI_BLUETOOTH_IO_L2CAP_DISCONNECT)( |
| IN EFI_BLUETOOTH_IO_PROTOCOL *This, |
| IN EFI_HANDLE Handle |
| ); |
| |
| /** |
| Register L2CAP callback function for special channel. |
| |
| @param[in] This Pointer to the EFI_BLUETOOTH_IO_PROTOCOL instance. |
| @param[out] Handel A handle to indicate this L2CAP connection. |
| @param[in] Psm Bluetooth PSM. See Bluetooth specification for detail. |
| @param[in] Mtu Bluetooth MTU. See Bluetooth specification for detail. |
| @param[in] Callback The callback function. This function is called whenever there is message received |
| in this channel. NULL means unregister. |
| @param[in] Context Data passed into Callback function. This is optional parameter and may be NULL. |
| |
| @retval EFI_SUCCESS The Bluetooth L2CAP callback function is registered successfully. |
| @retval EFI_ALREADY_STARTED The callback function already exists when register. |
| @retval EFI_NOT_FOUND The callback function does not exist when unregister. |
| |
| **/ |
| typedef |
| EFI_STATUS |
| (EFIAPI *EFI_BLUETOOTH_IO_L2CAP_REGISTER_SERVICE)( |
| IN EFI_BLUETOOTH_IO_PROTOCOL *This, |
| OUT EFI_HANDLE *Handle, |
| IN UINT16 Psm, |
| IN UINT16 Mtu, |
| IN EFI_BLUETOOTH_IO_CHANNEL_SERVICE_CALLBACK Callback, |
| IN VOID *Context |
| ); |
| |
| /// |
| /// This protocol provides service for Bluetooth L2CAP (Logical Link Control and Adaptation Protocol) |
| /// and SDP (Service Discovery Protocol). |
| /// |
| struct _EFI_BLUETOOTH_IO_PROTOCOL { |
| EFI_BLUETOOTH_IO_GET_DEVICE_INFO GetDeviceInfo; |
| EFI_BLUETOOTH_IO_GET_SDP_INFO GetSdpInfo; |
| EFI_BLUETOOTH_IO_L2CAP_RAW_SEND L2CapRawSend; |
| EFI_BLUETOOTH_IO_L2CAP_RAW_RECEIVE L2CapRawReceive; |
| EFI_BLUETOOTH_IO_L2CAP_RAW_ASYNC_RECEIVE L2CapRawAsyncReceive; |
| EFI_BLUETOOTH_IO_L2CAP_SEND L2CapSend; |
| EFI_BLUETOOTH_IO_L2CAP_RECEIVE L2CapReceive; |
| EFI_BLUETOOTH_IO_L2CAP_ASYNC_RECEIVE L2CapAsyncReceive; |
| EFI_BLUETOOTH_IO_L2CAP_CONNECT L2CapConnect; |
| EFI_BLUETOOTH_IO_L2CAP_DISCONNECT L2CapDisconnect; |
| EFI_BLUETOOTH_IO_L2CAP_REGISTER_SERVICE L2CapRegisterService; |
| }; |
| |
| extern EFI_GUID gEfiBluetoothIoServiceBindingProtocolGuid; |
| extern EFI_GUID gEfiBluetoothIoProtocolGuid; |
| |
| #endif |