| /** @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 |