MdePkg: Add Bluetooth related definition.

Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Shumin Qiu <shumin.qiu@intel.com>
Reviewed-by: Liming Gao <liming.gao@intel.com>
Reviewed-by: Jiewen Yao <jiewen.yao@intel.com>

git-svn-id: https://svn.code.sf.net/p/edk2/code/trunk/edk2@17180 6f19259b-4bc3-4df7-8a09-765794883524
This commit is contained in:
Shumin Qiu 2015-04-15 03:07:08 +00:00 committed by shenshushi
parent a78d3a279b
commit 1d9f5614a7
6 changed files with 1335 additions and 2 deletions

View File

@ -0,0 +1,47 @@
/** @file
This file contains the Bluetooth definitions that are consumed by drivers.
These definitions are from Bluetooth Core Specification Version 4.0 June, 2010
Copyright (c) 2015, Intel Corporation. All rights reserved.<BR>
This program and the accompanying materials
are licensed and made available under the terms and conditions of the BSD License
which accompanies this distribution. The full text of the license may be found at
http://opensource.org/licenses/bsd-license.php
THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
**/
#ifndef _BLUETOOTH_H_
#define _BLUETOOTH_H_
#pragma pack(1)
///
/// BLUETOOTH_ADDRESS
///
typedef struct {
///
/// 48bit Bluetooth device address.
///
UINT8 Address[6];
} BLUETOOTH_ADDRESS;
///
/// BLUETOOTH_CLASS_OF_DEVICE. See Bluetooth specification for detail.
///
typedef struct {
UINT8 FormatType:2;
UINT8 MinorDeviceClass: 6;
UINT16 MajorDeviceClass: 5;
UINT16 MajorServiceClass:11;
} BLUETOOTH_CLASS_OF_DEVICE;
#pragma pack()
#define BLUETOOTH_HCI_COMMAND_LOCAL_READABLE_NAME_MAX_SIZE 248
#define BLUETOOTH_HCI_LINK_KEY_SIZE 16
#endif

View File

@ -0,0 +1,514 @@
/** @file
EFI Bluetooth Configuration Protocol as defined in UEFI 2.5.
This protocol abstracts user interface configuration for Bluetooth device.
Copyright (c) 2015, Intel Corporation. All rights reserved.<BR>
This program and the accompanying materials are licensed and made available under
the terms and conditions of the BSD License that accompanies this distribution.
The full text of the license may be found at
http://opensource.org/licenses/bsd-license.php.
THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
@par Revision Reference:
This Protocol is introduced in UEFI Specification 2.5
**/
#ifndef __EFI_BLUETOOTH_CONFIG_PROTOCOL_H__
#define __EFI_BLUETOOTH_CONFIG_PROTOCOL_H__
#include <IndustryStandard/Bluetooth.h>
#define EFI_BLUETOOTH_CONFIG_PROTOCOL_GUID \
{ \
0x62960cf3, 0x40ff, 0x4263, { 0xa7, 0x7c, 0xdf, 0xde, 0xbd, 0x19, 0x1b, 0x4b } \
}
typedef struct _EFI_BLUETOOTH_CONFIG_PROTOCOL EFI_BLUETOOTH_CONFIG_PROTOCOL;
typedef UINT32 EFI_BLUETOOTH_CONFIG_REMOTE_DEVICE_STATE_TYPE;
#define EFI_BLUETOOTH_CONFIG_REMOTE_DEVICE_STATE_CONNECTED 0x1
#define EFI_BLUETOOTH_CONFIG_REMOTE_DEVICE_STATE_PAIRED 0x2
///
/// EFI_BLUETOOTH_SCAN_CALLBACK_INFORMATION
///
typedef struct {
///
/// 48bit Bluetooth device address.
///
BLUETOOTH_ADDRESS BDAddr;
///
/// State of the remote deive
///
UINT8 RemoteDeviceState;
///
/// Bluetooth ClassOfDevice. See Bluetooth specification for detail.
///
BLUETOOTH_CLASS_OF_DEVICE ClassOfDevice;
///
/// Remote device name
///
UINT8 RemoteDeviceName[BLUETOOTH_HCI_COMMAND_LOCAL_READABLE_NAME_MAX_SIZE];
} EFI_BLUETOOTH_SCAN_CALLBACK_INFORMATION;
///
/// EFI_BLUETOOTH_CONFIG_DATA_TYPE
///
typedef enum {
///
/// Local/Remote Bluetooth device name. Data structure is zero terminated CHAR8[].
///
EfiBluetoothConfigDataTypeDeviceName,
///
/// Local/Remote Bluetooth device ClassOfDevice. Data structure is BLUETOOTH_CLASS_OF_DEVICE.
///
EfiBluetoothConfigDataTypeClassOfDevice,
///
/// Remote Bluetooth device state. Data structure is EFI_BLUETOOTH_CONFIG_REMOTE_DEVICE_STATE_TYPE.
///
EfiBluetoothConfigDataTypeRemoteDeviceState,
///
/// Local/Remote Bluetooth device SDP information. Data structure is UINT8[].
///
EfiBluetoothConfigDataTypeSdpInfo,
///
/// Local Bluetooth device address. Data structure is BLUETOOTH_ADDRESS.
///
EfiBluetoothConfigDataTypeBDADDR,
///
/// Local Bluetooth discoverable state. Data structure is UINT8. (Page scan and/or Inquiry scan)
///
EfiBluetoothConfigDataTypeDiscoverable,
///
/// Local Bluetooth controller stored paired device list. Data structure is BLUETOOTH_ADDRESS[].
///
EfiBluetoothConfigDataTypeControllerStoredPairedDeviceList,
///
/// Local available device list. Data structure is BLUETOOTH_ADDRESS[].
///
EfiBluetoothConfigDataTypeAvailableDeviceList,
EfiBluetoothConfigDataTypeMax,
} EFI_BLUETOOTH_CONFIG_DATA_TYPE;
///
/// EFI_BLUETOOTH_PIN_CALLBACK_TYPE.
///
typedef enum {
///
/// For SSP - passkey entry. Input buffer is Passkey (4 bytes). No output buffer.
/// See Bluetooth HCI command for detail.
///
EfiBluetoothCallbackTypeUserPasskeyNotification,
///
/// For SSP - just work and numeric comparison. Input buffer is numeric value (4 bytes).
/// Output buffer is BOOLEAN (1 byte). See Bluetooth HCI command for detail.
///
EfiBluetoothCallbackTypeUserConfirmationRequest,
///
/// For SSP - OOB. See Bluetooth HCI command for detail.
///
EfiBluetoothCallbackTypeOOBDataRequest,
///
/// For legacy paring. No input buffer. Output buffer is PIN code( <= 16 bytes).
/// See Bluetooth HCI command for detail.
///
EfiBluetoothCallbackTypePinCodeRequest,
EfiBluetoothCallbackTypeMax
} EFI_BLUETOOTH_PIN_CALLBACK_TYPE;
///
/// EFI_BLUETOOTH_CONNECT_COMPLETE_CALLBACK_TYPE.
///
typedef enum {
///
/// This callback is called when Bluetooth receive Disconnection_Complete event. Input buffer is Event
/// Parameters of Disconnection_Complete Event defined in Bluetooth specification.
///
EfiBluetoothConnCallbackTypeDisconnected,
///
/// This callback is called when Bluetooth receive Connection_Complete event. Input buffer is Event
/// Parameters of Connection_Complete Event defined in Bluetooth specification.
///
EfiBluetoothConnCallbackTypeConnected,
///
/// This callback is called when Bluetooth receive Authentication_Complete event. Input buffer is Event
/// Parameters of Authentication_Complete Event defined in Bluetooth specification.
///
EfiBluetoothConnCallbackTypeAuthenticated,
///
/// This callback is called when Bluetooth receive Encryption_Change event. Input buffer is Event
/// Parameters of Encryption_Change Event defined in Bluetooth specification.
///
EfiBluetoothConnCallbackTypeEncrypted
} EFI_BLUETOOTH_CONNECT_COMPLETE_CALLBACK_TYPE;
/**
Initialize Bluetooth host controller and local device.
@param This Pointer to the EFI_BLUETOOTH_CONFIG_PROTOCOL instance.
@retval EFI_SUCCESS The Bluetooth host controller and local device is initialized successfully.
@retval EFI_DEVICE_ERROR A hardware error occurred trying to initialize the Bluetooth host controller
and local device.
**/
typedef
EFI_STATUS
(EFIAPI *EFI_BLUETOOTH_CONFIG_INIT)(
IN EFI_BLUETOOTH_CONFIG_PROTOCOL *This
);
/**
Callback function, it is called if a Bluetooth device is found during scan process.
@param This Pointer to the EFI_BLUETOOTH_CONFIG_PROTOCOL instance.
@param Context Context passed from scan request.
@param 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_CONFIG_SCAN_CALLBACK_FUNCTION) (
IN EFI_BLUETOOTH_CONFIG_PROTOCOL *This,
IN VOID *Context,
IN EFI_BLUETOOTH_SCAN_CALLBACK_INFORMATION *CallbackInfo
);
/**
Scan Bluetooth device.
@param This Pointer to the EFI_BLUETOOTH_CONFIG_PROTOCOL instance.
@param 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 ScanType Bluetooth scan type, Inquiry and/or Page. See Bluetooth specification for detail.
@param Callback The callback function. This function is called if a Bluetooth device is found during scan
process.
@param 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 Bluetooth device.
**/
typedef
EFI_STATUS
(EFIAPI *EFI_BLUETOOTH_CONFIG_SCAN)(
IN EFI_BLUETOOTH_CONFIG_PROTOCOL *This,
IN BOOLEAN ReScan,
IN UINT8 ScanType,
IN EFI_BLUETOOTH_CONFIG_SCAN_CALLBACK_FUNCTION Callback,
IN VOID *Context
);
/**
Connect a Bluetooth device.
@param This Pointer to the EFI_BLUETOOTH_CONFIG_PROTOCOL instance.
@param BD_ADDR The address of Bluetooth device to be connected.
@retval EFI_SUCCESS The Bluetooth device is connected successfully.
@retval EFI_ALREADY_STARTED The Bluetooth device is already connected.
@retval EFI_NOT_FOUND The Bluetooth device is not found.
@retval EFI_DEVICE_ERROR A hardware error occurred trying to connect the Bluetooth device.
**/
typedef
EFI_STATUS
(EFIAPI *EFI_BLUETOOTH_CONFIG_CONNECT)(
IN EFI_BLUETOOTH_CONFIG_PROTOCOL *This,
IN BLUETOOTH_ADDRESS *BD_ADDR
);
/**
Disconnect a Bluetooth device.
@param This Pointer to the EFI_BLUETOOTH_CONFIG_PROTOCOL instance.
@param BD_ADDR The address of Bluetooth device to be connected.
@param Reason Bluetooth disconnect reason. See Bluetooth specification for detail.
@retval EFI_SUCCESS The Bluetooth device is disconnected successfully.
@retval EFI_NOT_STARTED The Bluetooth device is not connected.
@retval EFI_NOT_FOUND The Bluetooth device is not found.
@retval EFI_DEVICE_ERROR A hardware error occurred trying to disconnect the Bluetooth device.
**/
typedef
EFI_STATUS
(EFIAPI *EFI_BLUETOOTH_CONFIG_DISCONNECT)(
IN EFI_BLUETOOTH_CONFIG_PROTOCOL *This,
IN BLUETOOTH_ADDRESS *BD_ADDR,
IN UINT8 Reason
);
/**
Get Bluetooth configuration data.
@param This Pointer to the EFI_BLUETOOTH_CONFIG_PROTOCOL instance.
@param DataType Configuration data type.
@param 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 Data A pointer to the buffer of data that will be returned.
@retval EFI_SUCCESS The Bluetooth 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_CONFIG_GET_DATA)(
IN EFI_BLUETOOTH_CONFIG_PROTOCOL *This,
IN EFI_BLUETOOTH_CONFIG_DATA_TYPE DataType,
IN OUT UINTN *DataSize,
IN OUT VOID *Data
);
/**
Set Bluetooth configuration data.
@param This Pointer to the EFI_BLUETOOTH_CONFIG_PROTOCOL instance.
@param DataType Configuration data type.
@param DataSize Indicates the size, in bytes, of the data buffer specified by Data.
@param Data A pointer to the buffer of data that will be set.
@retval EFI_SUCCESS The Bluetooth 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_BUFFER_TOO_SMALL Cannot set configuration data.
**/
typedef
EFI_STATUS
(EFIAPI *EFI_BLUETOOTH_CONFIG_SET_DATA)(
IN EFI_BLUETOOTH_CONFIG_PROTOCOL *This,
IN EFI_BLUETOOTH_CONFIG_DATA_TYPE DataType,
IN UINTN DataSize,
IN VOID *Data
);
/**
Get remove Bluetooth device configuration data.
@param This Pointer to the EFI_BLUETOOTH_CONFIG_PROTOCOL instance.
@param DataType Configuration data type.
@param BDAddr Remote Bluetooth device address.
@param 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 Data A pointer to the buffer of data that will be returned.
@retval EFI_SUCCESS The remote Bluetooth 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_CONFIG_GET_REMOTE_DATA)(
IN EFI_BLUETOOTH_CONFIG_PROTOCOL *This,
IN EFI_BLUETOOTH_CONFIG_DATA_TYPE DataType,
IN BLUETOOTH_ADDRESS BDAddr,
IN OUT UINTN *DataSize,
IN OUT VOID *Data
);
/**
The callback function for PIN code.
@param This Pointer to the EFI_BLUETOOTH_CONFIG_PROTOCOL instance.
@param Context Context passed from registration.
@param CallbackType Callback type in EFI_BLUETOOTH_PIN_CALLBACK_TYPE.
@param InputBuffer A pointer to the buffer of data that is input from callback caller.
@param InputBufferSize Indicates the size, in bytes, of the data buffer specified by InputBuffer.
@param OutputBuffer A pointer to the buffer of data that will be output from callback callee.
Callee allocates this buffer by using EFI Boot Service AllocatePool().
@param OutputBufferSize Indicates the size, in bytes, of the data buffer specified by OutputBuffer.
@retval EFI_SUCCESS The callback function complete successfully.
**/
typedef
EFI_STATUS
(EFIAPI *EFI_BLUETOOTH_CONFIG_REGISTER_PIN_CALLBACK_FUNCTION)(
IN EFI_BLUETOOTH_CONFIG_PROTOCOL *This,
IN VOID *Context,
IN EFI_BLUETOOTH_PIN_CALLBACK_TYPE CallbackType,
IN VOID *InputBuffer,
IN UINTN InputBufferSize,
OUT VOID **OutputBuffer,
OUT UINTN *OutputBufferSize
);
/**
Register PIN callback function.
@param This Pointer to the EFI_BLUETOOTH_CONFIG_PROTOCOL instance.
@param Callback The callback function. NULL means unregister.
@param Context Data passed into Callback function. This is optional parameter and may be NULL.
@retval EFI_SUCCESS The PIN callback function is registered successfully.
**/
typedef
EFI_STATUS
(EFIAPI *EFI_BLUETOOTH_CONFIG_REGISTER_PIN_CALLBACK)(
IN EFI_BLUETOOTH_CONFIG_PROTOCOL *This,
IN EFI_BLUETOOTH_CONFIG_REGISTER_PIN_CALLBACK_FUNCTION Callback,
IN VOID *Context
);
/**
The callback function to get link key.
@param This Pointer to the EFI_BLUETOOTH_CONFIG_PROTOCOL instance.
@param Context Context passed from registration.
@param BDAddr A pointer to Bluetooth device address.
@param LinkKey A pointer to the buffer of link key.
@retval EFI_SUCCESS The callback function complete successfully.
**/
typedef
EFI_STATUS
(EFIAPI *EFI_BLUETOOTH_CONFIG_REGISTER_GET_LINK_KEY_CALLBACK_FUNCTION)(
IN EFI_BLUETOOTH_CONFIG_PROTOCOL *This,
IN VOID *Context,
IN BLUETOOTH_ADDRESS *BDAddr,
OUT UINT8 LinkKey[BLUETOOTH_HCI_LINK_KEY_SIZE]
);
/**
Register get link key callback function.
@param This Pointer to the EFI_BLUETOOTH_CONFIG_PROTOCOL instance.
@param Callback The callback function. NULL means unregister.
@param Context Data passed into Callback function. This is optional parameter and may be NULL.
@retval EFI_SUCCESS The link key callback function is registered successfully.
**/
typedef
EFI_STATUS
(EFIAPI *EFI_BLUETOOTH_CONFIG_REGISTER_GET_LINK_KEY_CALLBACK)(
IN EFI_BLUETOOTH_CONFIG_PROTOCOL *This,
IN EFI_BLUETOOTH_CONFIG_REGISTER_GET_LINK_KEY_CALLBACK_FUNCTION Callback,
IN VOID *Context
);
/**
The callback function to set link key.
@param This Pointer to the EFI_BLUETOOTH_CONFIG_PROTOCOL instance.
@param Context Context passed from registration.
@param BDAddr A pointer to Bluetooth device address.
@param LinkKey A pointer to the buffer of link key.
@retval EFI_SUCCESS The callback function complete successfully.
**/
typedef
EFI_STATUS
(EFIAPI *EFI_BLUETOOTH_CONFIG_REGISTER_SET_LINK_KEY_CALLBACK_FUNCTION)(
IN EFI_BLUETOOTH_CONFIG_PROTOCOL *This,
IN VOID *Context,
IN BLUETOOTH_ADDRESS *BDAddr,
IN UINT8 LinkKey[BLUETOOTH_HCI_LINK_KEY_SIZE]
);
/**
Register set link key callback function.
@param This Pointer to the EFI_BLUETOOTH_CONFIG_PROTOCOL instance.
@param Callback The callback function. NULL means unregister.
@param Context Data passed into Callback function. This is optional parameter and may be NULL.
@retval EFI_SUCCESS The link key callback function is registered successfully.
**/
typedef
EFI_STATUS
(EFIAPI *EFI_BLUETOOTH_CONFIG_REGISTER_SET_LINK_KEY_CALLBACK)(
IN EFI_BLUETOOTH_CONFIG_PROTOCOL *This,
IN EFI_BLUETOOTH_CONFIG_REGISTER_SET_LINK_KEY_CALLBACK_FUNCTION Callback,
IN VOID *Context
);
/**
The callback function. It is called after connect completed.
@param This Pointer to the EFI_BLUETOOTH_CONFIG_PROTOCOL instance.
@param Context Context passed from registration.
@param CallbackType Callback type in EFI_BLUETOOTH_CONNECT_COMPLETE_CALLBACK_TYPE.
@param BDAddr A pointer to Bluetooth device address.
@param InputBuffer A pointer to the buffer of data that is input from callback caller.
@param 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_CONFIG_REGISTER_CONNECT_COMPLETE_CALLBACK_FUNCTION)(
IN EFI_BLUETOOTH_CONFIG_PROTOCOL *This,
IN VOID *Context,
IN EFI_BLUETOOTH_CONNECT_COMPLETE_CALLBACK_TYPE CallbackType,
IN BLUETOOTH_ADDRESS *BDAddr,
IN VOID *InputBuffer,
IN UINTN InputBufferSize
);
/**
Register link connect complete callback function.
@param This Pointer to the EFI_BLUETOOTH_CONFIG_PROTOCOL instance.
@param Callback The callback function. NULL means unregister.
@param 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.
**/
typedef
EFI_STATUS
(EFIAPI *EFI_BLUETOOTH_CONFIG_REGISTER_CONNECT_COMPLETE_CALLBACK)(
IN EFI_BLUETOOTH_CONFIG_PROTOCOL *This,
IN EFI_BLUETOOTH_CONFIG_REGISTER_CONNECT_COMPLETE_CALLBACK_FUNCTION Callback,
IN VOID *Context
);
///
/// This protocol abstracts user interface configuration for Bluetooth device.
///
struct _EFI_BLUETOOTH_CONFIG_PROTOCOL {
EFI_BLUETOOTH_CONFIG_INIT Init;
EFI_BLUETOOTH_CONFIG_SCAN Scan;
EFI_BLUETOOTH_CONFIG_CONNECT Connect;
EFI_BLUETOOTH_CONFIG_DISCONNECT Disconnect;
EFI_BLUETOOTH_CONFIG_GET_DATA GetData;
EFI_BLUETOOTH_CONFIG_SET_DATA SetData;
EFI_BLUETOOTH_CONFIG_GET_REMOTE_DATA GetRemoteData;
EFI_BLUETOOTH_CONFIG_REGISTER_PIN_CALLBACK RegisterPinCallback;
EFI_BLUETOOTH_CONFIG_REGISTER_GET_LINK_KEY_CALLBACK RegisterGetLinkKeyCallback;
EFI_BLUETOOTH_CONFIG_REGISTER_SET_LINK_KEY_CALLBACK RegisterSetLinkKeyCallback;
EFI_BLUETOOTH_CONFIG_REGISTER_CONNECT_COMPLETE_CALLBACK RegisterLinkConnectCompleteCallback;
};
extern EFI_GUID gEfiBluetoothConfigProtocolGuid;
#endif

View File

@ -0,0 +1,328 @@
/** @file
EFI Bluetooth Host Controller Protocol as defined in UEFI 2.5.
This protocol abstracts the Bluetooth host controller layer message transmit and receive.
Copyright (c) 2015, Intel Corporation. All rights reserved.<BR>
This program and the accompanying materials are licensed and made available under
the terms and conditions of the BSD License that accompanies this distribution.
The full text of the license may be found at
http://opensource.org/licenses/bsd-license.php.
THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
@par Revision Reference:
This Protocol is introduced in UEFI Specification 2.5
**/
#ifndef __EFI_BLUETOOTH_HC_PROTOCOL_H__
#define __EFI_BLUETOOTH_HC_PROTOCOL_H__
#define EFI_BLUETOOTH_HC_PROTOCOL_GUID \
{ \
0xb3930571, 0xbeba, 0x4fc5, { 0x92, 0x3, 0x94, 0x27, 0x24, 0x2e, 0x6a, 0x43 } \
}
typedef struct _EFI_BLUETOOTH_HC_PROTOCOL EFI_BLUETOOTH_HC_PROTOCOL;
/**
Send HCI command packet.
@param This Pointer to the EFI_BLUETOOTH_HC_PROTOCOL instance.
@param 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 Buffer A pointer to the buffer of data that will be transmitted to Bluetooth host
controller.
@param 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 HCI command packet 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 HCI command packet fail due to timeout.
@retval EFI_DEVICE_ERROR Sending HCI command packet fail due to host controller or device error.
**/
typedef
EFI_STATUS
(EFIAPI *EFI_BLUETOOTH_HC_SEND_COMMAND)(
IN EFI_BLUETOOTH_HC_PROTOCOL *This,
IN OUT UINTN *BufferSize,
IN VOID *Buffer,
IN UINTN Timeout
);
/**
Receive HCI event packet.
@param This Pointer to the EFI_BLUETOOTH_HC_PROTOCOL instance.
@param 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 Buffer A pointer to the buffer of data that will be received from Bluetooth host controller.
@param 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 HCI event packet 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 HCI event packet fail due to timeout.
@retval EFI_DEVICE_ERROR Receiving HCI event packet fail due to host controller or device error.
**/
typedef
EFI_STATUS
(EFIAPI *EFI_BLUETOOTH_HC_RECEIVE_EVENT)(
IN EFI_BLUETOOTH_HC_PROTOCOL *This,
IN OUT UINTN *BufferSize,
OUT VOID *Buffer,
IN UINTN Timeout
);
/**
Callback function, it is called when asynchronous transfer is completed.
@param Data Pointer to the EFI_BLUETOOTH_HC_PROTOCOL instance.
@param DataLength Specifies the length, in bytes, of the data to be received.
@param Context Data passed into Callback function. This is optional parameter and may be NULL.
@retval EFI_SUCCESS The callback function complete successfully.
**/
typedef
EFI_STATUS
(EFIAPI *EFI_BLUETOOTH_HC_ASYNC_FUNC_CALLBACK) (
IN VOID *Data,
IN UINTN DataLength,
IN VOID *Context
);
/**
Receive HCI event packet in non-blocking way.
@param This Pointer to the EFI_BLUETOOTH_HC_PROTOCOL instance.
@param IsNewTransfer If TRUE, a new transfer will be submitted. If FALSE, the request is deleted.
@param PollingInterval Indicates the periodic rate, in milliseconds, that the transfer is to be executed.
@param DataLength Specifies the length, in bytes, of the data to be received.
@param Callback The callback function. This function is called if the asynchronous transfer is
completed.
@param Context Data passed into Callback function. This is optional parameter and may be NULL.
@retval EFI_SUCCESS The HCI 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_HC_ASYNC_RECEIVE_EVENT)(
IN EFI_BLUETOOTH_HC_PROTOCOL *This,
IN BOOLEAN IsNewTransfer,
IN UINTN PollingInterval,
IN UINTN DataLength,
IN EFI_BLUETOOTH_HC_ASYNC_FUNC_CALLBACK Callback,
IN VOID *Context
);
/**
Send HCI ACL data packet.
@param This Pointer to the EFI_BLUETOOTH_HC_PROTOCOL instance.
@param 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 Buffer A pointer to the buffer of data that will be transmitted to Bluetooth host
controller.
@param 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 HCI ACL data packet 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 HCI ACL data packet fail due to timeout.
@retval EFI_DEVICE_ERROR Sending HCI ACL data packet fail due to host controller or device error.
**/
typedef
EFI_STATUS
(EFIAPI *EFI_BLUETOOTH_HC_SEND_ACL_DATA)(
IN EFI_BLUETOOTH_HC_PROTOCOL *This,
IN OUT UINTN *BufferSize,
IN VOID *Buffer,
IN UINTN Timeout
);
/**
Receive HCI ACL data packet.
@param This Pointer to the EFI_BLUETOOTH_HC_PROTOCOL instance.
@param 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 Buffer A pointer to the buffer of data that will be received from Bluetooth host controller.
@param 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 HCI ACL data packet 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 HCI ACL data packet fail due to timeout.
@retval EFI_DEVICE_ERROR Receiving HCI ACL data packet fail due to host controller or device error.
**/
typedef
EFI_STATUS
(EFIAPI *EFI_BLUETOOTH_HC_RECEIVE_ACL_DATA)(
IN EFI_BLUETOOTH_HC_PROTOCOL *This,
IN OUT UINTN *BufferSize,
OUT VOID *Buffer,
IN UINTN Timeout
);
/**
Receive HCI ACL data packet in non-blocking way.
@param This Pointer to the EFI_BLUETOOTH_HC_PROTOCOL instance.
@param IsNewTransfer If TRUE, a new transfer will be submitted. If FALSE, the request is deleted.
@param PollingInterval Indicates the periodic rate, in milliseconds, that the transfer is to be executed.
@param DataLength Specifies the length, in bytes, of the data to be received.
@param Callback The callback function. This function is called if the asynchronous transfer is
completed.
@param Context Data passed into Callback function. This is optional parameter and may be NULL.
@retval EFI_SUCCESS The HCI 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_HC_ASYNC_RECEIVE_ACL_DATA) (
IN EFI_BLUETOOTH_HC_PROTOCOL *This,
IN BOOLEAN IsNewTransfer,
IN UINTN PollingInterval,
IN UINTN DataLength,
IN EFI_BLUETOOTH_HC_ASYNC_FUNC_CALLBACK Callback,
IN VOID *Context
);
/**
Send HCI SCO data packet.
@param This Pointer to the EFI_BLUETOOTH_HC_PROTOCOL instance.
@param 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 Buffer A pointer to the buffer of data that will be transmitted to Bluetooth host
controller.
@param 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 HCI SCO data packet is sent successfully.
@retval EFI_UNSUPPORTED The implementation does not support HCI SCO transfer.
@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 HCI SCO data packet fail due to timeout.
@retval EFI_DEVICE_ERROR Sending HCI SCO data packet fail due to host controller or device error.
**/
typedef
EFI_STATUS
(EFIAPI *EFI_BLUETOOTH_HC_SEND_SCO_DATA)(
IN EFI_BLUETOOTH_HC_PROTOCOL *This,
IN OUT UINTN *BufferSize,
IN VOID *Buffer,
IN UINTN Timeout
);
/**
Receive HCI SCO data packet.
@param This Pointer to the EFI_BLUETOOTH_HC_PROTOCOL instance.
@param 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 Buffer A pointer to the buffer of data that will be received from Bluetooth host controller.
@param 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 HCI SCO data packet 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 HCI SCO data packet fail due to timeout
@retval EFI_DEVICE_ERROR Receiving HCI SCO data packet fail due to host controller or device error.
**/
typedef
EFI_STATUS
(EFIAPI *EFI_BLUETOOTH_HC_RECEIVE_SCO_DATA)(
IN EFI_BLUETOOTH_HC_PROTOCOL *This,
IN OUT UINTN *BufferSize,
OUT VOID *Buffer,
IN UINTN Timeout
);
/**
Receive HCI SCO data packet in non-blocking way.
@param This Pointer to the EFI_BLUETOOTH_HC_PROTOCOL instance.
@param IsNewTransfer If TRUE, a new transfer will be submitted. If FALSE, the request is deleted.
@param PollingInterval Indicates the periodic rate, in milliseconds, that the transfer is to be executed.
@param DataLength Specifies the length, in bytes, of the data to be received.
@param Callback The callback function. This function is called if the asynchronous transfer is
completed.
@param Context Data passed into Callback function. This is optional parameter and may be NULL.
@retval EFI_SUCCESS The HCI 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_HC_ASYNC_RECEIVE_SCO_DATA) (
IN EFI_BLUETOOTH_HC_PROTOCOL *This,
IN BOOLEAN IsNewTransfer,
IN UINTN PollingInterval,
IN UINTN DataLength,
IN EFI_BLUETOOTH_HC_ASYNC_FUNC_CALLBACK Callback,
IN VOID *Context
);
///
/// This protocol abstracts the Bluetooth host controller layer message transmit and receive.
///
struct _EFI_BLUETOOTH_HC_PROTOCOL {
EFI_BLUETOOTH_HC_SEND_COMMAND SendCommand;
EFI_BLUETOOTH_HC_RECEIVE_EVENT ReceiveEvent;
EFI_BLUETOOTH_HC_ASYNC_RECEIVE_EVENT AsyncReceiveEvent;
EFI_BLUETOOTH_HC_SEND_ACL_DATA SendACLData;
EFI_BLUETOOTH_HC_RECEIVE_ACL_DATA ReceiveACLData;
EFI_BLUETOOTH_HC_ASYNC_RECEIVE_ACL_DATA AsyncReceiveACLData;
EFI_BLUETOOTH_HC_SEND_SCO_DATA SendSCOData;
EFI_BLUETOOTH_HC_RECEIVE_SCO_DATA ReceiveSCOData;
EFI_BLUETOOTH_HC_ASYNC_RECEIVE_SCO_DATA AsyncReceiveSCOData;
};
extern EFI_GUID gEfiBluetoothHcProtocolGuid;
#endif

View File

@ -0,0 +1,416 @@
/** @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, Intel Corporation. All rights reserved.<BR>
This program and the accompanying materials are licensed and made available under
the terms and conditions of the BSD License that accompanies this distribution.
The full text of the license may be found at
http://opensource.org/licenses/bsd-license.php.
THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
@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 This Pointer to the EFI_BLUETOOTH_IO_PROTOCOL instance.
@param DeviceInfoSize A pointer to the size, in bytes, of the DeviceInfo buffer.
@param 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 This Pointer to the EFI_BLUETOOTH_IO_PROTOCOL instance.
@param SdpInfoSize A pointer to the size, in bytes, of the SdpInfo buffer.
@param 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 This Pointer to the EFI_BLUETOOTH_IO_PROTOCOL instance.
@param 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 Buffer A pointer to the buffer of data that will be transmitted to Bluetooth L2CAP layer.
@param 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 This Pointer to the EFI_BLUETOOTH_IO_PROTOCOL instance.
@param 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 Buffer A pointer to the buffer of data that will be received from Bluetooth L2CAP layer.
@param 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 ChannelID Bluetooth L2CAP message channel ID.
@param Data Data received via asynchronous transfer.
@param DataLength The length of Data in bytes, received via asynchronous transfer.
@param 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 This Pointer to the EFI_BLUETOOTH_IO_PROTOCOL instance.
@param IsNewTransfer If TRUE, a new transfer will be submitted. If FALSE, the request is deleted.
@param PollingInterval Indicates the periodic rate, in milliseconds, that the transfer is to be executed.
@param DataLength Specifies the length, in bytes, of the data to be received.
@param Callback The callback function. This function is called if the asynchronous transfer is
completed.
@param 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 This Pointer to the EFI_BLUETOOTH_IO_PROTOCOL instance.
@param Handle A handle created by EFI_BLUETOOTH_IO_PROTOCOL.L2CapConnect indicates which channel to send.
@param 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 Buffer A pointer to the buffer of data that will be transmitted to Bluetooth L2CAP layer.
@param 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 This Pointer to the EFI_BLUETOOTH_IO_PROTOCOL instance.
@param Handle A handle created by EFI_BLUETOOTH_IO_PROTOCOL.L2CapConnect indicates which channel to receive.
@param BufferSize Indicates the size, in bytes, of the data buffer specified by Buffer.
@param Buffer A pointer to the buffer of data that will be received from Bluetooth L2CAP layer.
@param 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 Data Data received via asynchronous transfer.
@param DataLength The length of Data in bytes, received via asynchronous transfer.
@param 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 This Pointer to the EFI_BLUETOOTH_IO_PROTOCOL instance.
@param Handel A handle created by EFI_BLUETOOTH_IO_PROTOCOL.L2CapConnect indicates which channel to receive.
@param Callback The callback function. This function is called if the asynchronous transfer is
completed.
@param 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 This Pointer to the EFI_BLUETOOTH_IO_PROTOCOL instance.
@param Handel A handle to indicate this L2CAP connection.
@param Psm Bluetooth PSM. See Bluetooth specification for detail.
@param Mtu Bluetooth MTU. See Bluetooth specification for detail.
@param Callback The callback function. This function is called whenever there is message received
in this channel.
@param 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 This Pointer to the EFI_BLUETOOTH_IO_PROTOCOL instance.
@param 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 This Pointer to the EFI_BLUETOOTH_IO_PROTOCOL instance.
@param Handel A handle to indicate this L2CAP connection.
@param Psm Bluetooth PSM. See Bluetooth specification for detail.
@param Mtu Bluetooth MTU. See Bluetooth specification for detail.
@param Callback The callback function. This function is called whenever there is message received
in this channel. NULL means unregister.
@param 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

View File

@ -5,7 +5,7 @@
from a software point of view. The path must persist from boot to boot, so from a software point of view. The path must persist from boot to boot, so
it can not contain things like PCI bus numbers that change from boot to boot. it can not contain things like PCI bus numbers that change from boot to boot.
Copyright (c) 2006 - 2013, Intel Corporation. All rights reserved.<BR> Copyright (c) 2006 - 2015, Intel Corporation. All rights reserved.<BR>
This program and the accompanying materials are licensed and made available under This program and the accompanying materials are licensed and made available under
the terms and conditions of the BSD License that accompanies this distribution. the terms and conditions of the BSD License that accompanies this distribution.
The full text of the license may be found at The full text of the license may be found at
@ -20,7 +20,7 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
#define __EFI_DEVICE_PATH_PROTOCOL_H__ #define __EFI_DEVICE_PATH_PROTOCOL_H__
#include <Guid/PcAnsi.h> #include <Guid/PcAnsi.h>
#include <IndustryStandard/Bluetooth.h>
/// ///
/// Device Path protocol. /// Device Path protocol.
/// ///
@ -846,6 +846,18 @@ typedef struct {
UINT16 VlanId; UINT16 VlanId;
} VLAN_DEVICE_PATH; } VLAN_DEVICE_PATH;
///
/// Bluetooth Device Path SubType.
///
#define MSG_BLUETOOTH_DP 0x1b
typedef struct {
EFI_DEVICE_PATH_PROTOCOL Header;
///
/// 48bit Bluetooth device address.
///
BLUETOOTH_ADDRESS BD_ADDR;
} BLUETOOTH_DEVICE_PATH;
// //
// Media Device Path // Media Device Path
// //
@ -1094,6 +1106,7 @@ typedef union {
SAS_DEVICE_PATH Sas; SAS_DEVICE_PATH Sas;
SASEX_DEVICE_PATH SasEx; SASEX_DEVICE_PATH SasEx;
NVME_NAMESPACE_DEVICE_PATH NvmeNamespace; NVME_NAMESPACE_DEVICE_PATH NvmeNamespace;
BLUETOOTH_DEVICE_PATH Bluetooth;
HARDDRIVE_DEVICE_PATH HardDrive; HARDDRIVE_DEVICE_PATH HardDrive;
CDROM_DEVICE_PATH CD; CDROM_DEVICE_PATH CD;
@ -1144,6 +1157,7 @@ typedef union {
SAS_DEVICE_PATH *Sas; SAS_DEVICE_PATH *Sas;
SASEX_DEVICE_PATH *SasEx; SASEX_DEVICE_PATH *SasEx;
NVME_NAMESPACE_DEVICE_PATH *NvmeNamespace; NVME_NAMESPACE_DEVICE_PATH *NvmeNamespace;
BLUETOOTH_DEVICE_PATH *Bluetooth;
HARDDRIVE_DEVICE_PATH *HardDrive; HARDDRIVE_DEVICE_PATH *HardDrive;
CDROM_DEVICE_PATH *CD; CDROM_DEVICE_PATH *CD;

View File

@ -1392,6 +1392,20 @@
## Include/Protocol/AdapterInformation.h ## Include/Protocol/AdapterInformation.h
gEfiAdapterInformationProtocolGuid = { 0xE5DD1403, 0xD622, 0xC24E, {0x84, 0x88, 0xC7, 0x1B, 0x17, 0xF5, 0xE8, 0x02 }} gEfiAdapterInformationProtocolGuid = { 0xE5DD1403, 0xD622, 0xC24E, {0x84, 0x88, 0xC7, 0x1B, 0x17, 0xF5, 0xE8, 0x02 }}
#
# Protocols defined in UEFI2.5
#
## Include/Protocol/BluetoothHc.h
gEfiBluetoothHcProtocolGuid = { 0xb3930571, 0xbeba, 0x4fc5, { 0x92, 0x3, 0x94, 0x27, 0x24, 0x2e, 0x6a, 0x43 }}
## Include/Protocol/BluetoothIo.h
gEfiBluetoothIoServiceBindingProtocolGuid = { 0x388278d3, 0x7b85, 0x42f0, { 0xab, 0xa9, 0xfb, 0x4b, 0xfd, 0x69, 0xf5, 0xab }}
gEfiBluetoothIoProtocolGuid = { 0x467313de, 0x4e30, 0x43f1, { 0x94, 0x3e, 0x32, 0x3f, 0x89, 0x84, 0x5d, 0xb5 }}
## Include/Protocol/BluetoothConfig.h
gEfiBluetoothConfigProtocolGuid = { 0x62960cf3, 0x40ff, 0x4263, { 0xa7, 0x7c, 0xdf, 0xde, 0xbd, 0x19, 0x1b, 0x4b }}
# #
# [Error.gEfiMdePkgTokenSpaceGuid] # [Error.gEfiMdePkgTokenSpaceGuid]