diff options
author | Feng Tian <feng.tian@intel.com> | 2015-05-05 07:29:56 +0000 |
---|---|---|
committer | erictian <erictian@Edk2> | 2015-05-05 07:29:56 +0000 |
commit | be85bf89b35a6335fd495f869f4bbcc6de233ac4 (patch) | |
tree | b21e61fa6ec976abb6f253b371a010cbf382749c /MdePkg | |
parent | 78a788553f1fbb92e264f14bcbfe6806b50ea068 (diff) | |
download | edk2-be85bf89b35a6335fd495f869f4bbcc6de233ac4.zip edk2-be85bf89b35a6335fd495f869f4bbcc6de233ac4.tar.gz edk2-be85bf89b35a6335fd495f869f4bbcc6de233ac4.tar.bz2 |
MdePkg: Add UEFI2.5 USB Function I/O protocol definitions
Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Feng Tian <feng.tian@intel.com>
Reviewed-by: Star Zeng <star.zeng@intel.com>
git-svn-id: https://svn.code.sf.net/p/edk2/code/trunk/edk2@17295 6f19259b-4bc3-4df7-8a09-765794883524
Diffstat (limited to 'MdePkg')
-rw-r--r-- | MdePkg/Include/Protocol/UsbFunctionIo.h | 683 | ||||
-rw-r--r-- | MdePkg/MdePkg.dec | 3 |
2 files changed, 686 insertions, 0 deletions
diff --git a/MdePkg/Include/Protocol/UsbFunctionIo.h b/MdePkg/Include/Protocol/UsbFunctionIo.h new file mode 100644 index 0000000..4422567 --- /dev/null +++ b/MdePkg/Include/Protocol/UsbFunctionIo.h @@ -0,0 +1,683 @@ +/** @file + The USB Function Protocol provides an I/O abstraction for a USB Controller + operating in Function mode (also commonly referred to as Device, Peripheral, + or Target mode) and the mechanisms by which the USB Function can communicate + with the USB Host. It is used by other UEFI drivers or applications to + perform data transactions and basic USB controller management over a USB + Function port. + + This simple protocol only supports USB 2.0 bulk transfers on systems with a + single configuration and a single interface. It does not support isochronous + or interrupt transfers, alternate interfaces, or USB 3.0 functionality. + Future revisions of this protocol may support these or additional features. + + 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 __USB_FUNCTION_IO_H__ +#define __USB_FUNCTION_IO_H__ + +#include <Protocol/UsbIo.h> + +#define EFI_USBFN_IO_PROTOCOL_GUID \ + { \ + 0x32d2963a, 0xfe5d, 0x4f30, {0xb6, 0x33, 0x6e, 0x5d, 0xc5, 0x58, 0x3, 0xcc} \ + } + +typedef struct _EFI_USBFN_IO_PROTOCOL EFI_USBFN_IO_PROTOCOL; + +#define EFI_USBFN_IO_PROTOCOL_REVISION 0x00010001 + +typedef enum _EFI_USBFN_PORT_TYPE { + EfiUsbUnknownPort = 0, + EfiUsbStandardDownstreamPort, + EfiUsbChargingDownstreamPort, + EfiUsbDedicatedChargingPort, + EfiUsbInvalidDedicatedChargingPort +} EFI_USBFN_PORT_TYPE; + +typedef struct { + EFI_USB_INTERFACE_DESCRIPTOR *InterfaceDescriptor; + EFI_USB_ENDPOINT_DESCRIPTOR **EndpointDescriptorTable; +} EFI_USB_INTERFACE_INFO; + +typedef struct { + EFI_USB_CONFIG_DESCRIPTOR *ConfigDescriptor; + EFI_USB_INTERFACE_INFO **InterfaceInfoTable; +} EFI_USB_CONFIG_INFO; + +typedef struct { + EFI_USB_DEVICE_DESCRIPTOR *DeviceDescriptor; + EFI_USB_CONFIG_INFO **ConfigInfoTable; +} EFI_USB_DEVICE_INFO; + +typedef enum _EFI_USB_ENDPOINT_TYPE { + UsbEndpointControl = 0x00, + //UsbEndpointIsochronous = 0x01, + UsbEndpointBulk = 0x02, + //UsbEndpointInterrupt = 0x03 +} EFI_USB_ENDPOINT_TYPE; + +typedef enum _EFI_USBFN_DEVICE_INFO_ID { + EfiUsbDeviceInfoUnknown = 0, + EfiUsbDeviceInfoSerialNumber, + EfiUsbDeviceInfoManufacturerName, + EfiUsbDeviceInfoProductName +} EFI_USBFN_DEVICE_INFO_ID; + +typedef enum _EFI_USBFN_ENDPOINT_DIRECTION { + EfiUsbEndpointDirectionHostOut = 0, + EfiUsbEndpointDirectionHostIn, + EfiUsbEndpointDirectionDeviceTx = EfiUsbEndpointDirectionHostIn, + EfiUsbEndpointDirectionDeviceRx = EfiUsbEndpointDirectionHostOut +} EFI_USBFN_ENDPOINT_DIRECTION; + +typedef enum _EFI_USBFN_MESSAGE { + // + // Nothing + // + EfiUsbMsgNone = 0, + // + // SETUP packet is received, returned Buffer contains + // EFI_USB_DEVICE_REQUEST struct + // + EfiUsbMsgSetupPacket, + // + // Indicates that some of the requested data has been received from the + // host. It is the responsibility of the class driver to determine if it + // needs to wait for any remaining data. Returned Buffer contains + // EFI_USBFN_TRANSFER_RESULT struct containing endpoint number, transfer + // status and count of bytes received. + // + EfiUsbMsgEndpointStatusChangedRx, + // + // Indicates that some of the requested data has been transmitted to the + // host. It is the responsibility of the class driver to determine if any + // remaining data needs to be resent. Returned Buffer contains + // EFI_USBFN_TRANSFER_RESULT struct containing endpoint number, transfer + // status and count of bytes sent. + // + EfiUsbMsgEndpointStatusChangedTx, + // + // DETACH bus event signaled + // + EfiUsbMsgBusEventDetach, + // + // ATTACH bus event signaled + // + EfiUsbMsgBusEventAttach, + // + // RESET bus event signaled + // + EfiUsbMsgBusEventReset, + // + // SUSPEND bus event signaled + // + EfiUsbMsgBusEventSuspend, + // + // RESUME bus event signaled + // + EfiUsbMsgBusEventResume, + // + // Bus speed updated, returned buffer indicated bus speed using + // following enumeration named EFI_USB_BUS_SPEED + // + EfiUsbMsgBusEventSpeed +} EFI_USBFN_MESSAGE; + +typedef enum _EFI_USBFN_TRANSFER_STATUS { + UsbTransferStatusUnknown = 0, + UsbTransferStatusComplete, + UsbTransferStatusAborted, + UsbTransferStatusActive, + UsbTransferStatusNone +} EFI_USBFN_TRANSFER_STATUS; + +typedef struct _EFI_USBFN_TRANSFER_RESULT { + UINTN BytesTransferred; + EFI_USBFN_TRANSFER_STATUS TransferStatus; + UINT8 EndpointIndex; + EFI_USBFN_ENDPOINT_DIRECTION Direction; + VOID *Buffer; +} EFI_USBFN_TRANSFER_RESULT; + +typedef enum _EFI_USB_BUS_SPEED { + UsbBusSpeedUnknown = 0, + UsbBusSpeedLow, + UsbBusSpeedFull, + UsbBusSpeedHigh, + UsbBusSpeedSuper, + UsbBusSpeedMaximum = UsbBusSpeedSuper +} EFI_USB_BUS_SPEED; + +typedef union _EFI_USBFN_MESSAGE_PAYLOAD { + EFI_USB_DEVICE_REQUEST udr; + EFI_USBFN_TRANSFER_RESULT utr; + EFI_USB_BUS_SPEED ubs; +} EFI_USBFN_MESSAGE_PAYLOAD; + +typedef enum _EFI_USBFN_POLICY_TYPE { + EfiUsbPolicyUndefined = 0, + EfiUsbPolicyMaxTransactionSize, + EfiUsbPolicyZeroLengthTerminationSupport, + EfiUsbPolicyZeroLengthTermination +} EFI_USBFN_POLICY_TYPE; + +/** + Returns information about what USB port type was attached. + + @param[in] This A pointer to the EFI_USBFN_IO_PROTOCOL instance. + @param[out] PortType Returns the USB port type. + + @retval EFI_SUCCESS The function returned successfully. + @retval EFI_INVALID_PARAMETER A parameter is invalid. + @retval EFI_DEVICE_ERROR The physical device reported an error. + @retval EFI_NOT_READY The physical device is busy or not ready to + process this request or there is no USB port + attached to the device. + +**/ +typedef +EFI_STATUS +(EFIAPI *EFI_USBFN_IO_DETECT_PORT) ( + IN EFI_USBFN_IO_PROTOCOL *This, + OUT EFI_USBFN_PORT_TYPE *PortType + ); + +/** + Configures endpoints based on supplied device and configuration descriptors. + + Assuming that the hardware has already been initialized, this function configures + the endpoints using the device information supplied by DeviceInfo, activates the + port, and starts receiving USB events. + + This function must ignore the bMaxPacketSize0field of the Standard Device Descriptor + and the wMaxPacketSize field of the Standard Endpoint Descriptor that are made + available through DeviceInfo. + + @param[in] This A pointer to the EFI_USBFN_IO_PROTOCOL instance. + @param[out] DeviceInfo A pointer to EFI_USBFN_DEVICE_INFO instance. + + @retval EFI_SUCCESS The function returned successfully. + @retval EFI_INVALID_PARAMETER A parameter is invalid. + @retval EFI_DEVICE_ERROR The physical device reported an error. + @retval EFI_NOT_READY The physical device is busy or not ready to process + this request. + @retval EFI_OUT_OF_RESOURCES The request could not be completed due to lack of + resources. + +**/ +typedef +EFI_STATUS +(EFIAPI *EFI_USBFN_IO_CONFIGURE_ENABLE_ENDPOINTS) ( + IN EFI_USBFN_IO_PROTOCOL *This, + OUT EFI_USB_DEVICE_INFO *DeviceInfo + ); + +/** + Returns the maximum packet size of the specified endpoint type for the supplied + bus speed. + + If the BusSpeed is UsbBusSpeedUnknown, the maximum speed the underlying controller + supports is assumed. + + This protocol currently does not support isochronous or interrupt transfers. Future + revisions of this protocol may eventually support it. + + @param[in] This A pointer to the EFI_USBFN_IO_PROTOCOLinstance. + @param[in] EndpointType Endpoint type as defined as EFI_USB_ENDPOINT_TYPE. + @param[in] BusSpeed Bus speed as defined as EFI_USB_BUS_SPEED. + @param[out] MaxPacketSize The maximum packet size, in bytes, of the specified + endpoint type. + + @retval EFI_SUCCESS The function returned successfully. + @retval EFI_INVALID_PARAMETER A parameter is invalid. + @retval EFI_DEVICE_ERROR The physical device reported an error. + @retval EFI_NOT_READY The physical device is busy or not ready to process + this request. + +**/ +typedef +EFI_STATUS +(EFIAPI *EFI_USBFN_IO_GET_ENDPOINT_MAXPACKET_SIZE) ( + IN EFI_USBFN_IO_PROTOCOL *This, + IN EFI_USB_ENDPOINT_TYPE EndpointType, + IN EFI_USB_BUS_SPEED BusSpeed, + OUT UINT16 *MaxPacketSize + ); + +/** + Returns device specific information based on the supplied identifier as a Unicode string. + + If the supplied Buffer isn't large enough, or is NULL, the method fails with + EFI_BUFFER_TOO_SMALL and the required size is returned through BufferSize. All returned + strings are in Unicode format. + + An Id of EfiUsbDeviceInfoUnknown is treated as an invalid parameter. + + @param[in] This A pointer to the EFI_USBFN_IO_PROTOCOLinstance. + @param[in] Id The requested information id. + + + @param[in] BufferSize On input, the size of the Buffer in bytes. On output, the + amount of data returned in Buffer in bytes. + @param[out] Buffer A pointer to a buffer to returnthe requested information + as a Unicode string. + + @retval EFI_SUCCESS The function returned successfully. + @retval EFI_INVALID_PARAMETER A parameter is invalid. + @retval EFI_DEVICE_ERROR The physical device reported an error. + @retval EFI_BUFFER_TOO_SMALL Supplied buffer isn't large enough to hold the request string. + +**/ +typedef +EFI_STATUS +(EFIAPI *EFI_USBFN_IO_GET_DEVICE_INFO) ( + IN EFI_USBFN_IO_PROTOCOL *This, + IN EFI_USBFN_DEVICE_INFO_ID Id, + IN OUT UINTN *BufferSize, + OUT VOID *Buffer OPTIONAL +); + +/** + Returns the vendor-id and product-id of the device. + + @param[in] This A pointer to the EFI_USBFN_IO_PROTOCOL instance. + @param[out] Vid Returned vendor-id of the device. + @param[out] Pid Returned product-id of the device. + + @retval EFI_SUCCESS The function returned successfully. + @retval EFI_INVALID_PARAMETER A parameter is invalid. + @retval EFI_NOT_FOUND Unable to return the vendor-id or the product-id. + +**/ +typedef +EFI_STATUS +(EFIAPI *EFI_USBFN_IO_GET_VENDOR_ID_PRODUCT_ID) ( + IN EFI_USBFN_IO_PROTOCOL *This, + OUT UINT16 *Vid, + OUT UINT16 *Pid +); + +/** + Aborts the transfer on the specified endpoint. + + This function should fail with EFI_INVALID_PARAMETER if the specified direction + is incorrect for the endpoint. + + @param[in] This A pointer to the EFI_USBFN_IO_PROTOCOL instance. + @param[in] EndpointIndex Indicates the endpoint on which the ongoing transfer + needs to be canceled. + @param[in] Direction Direction of the endpoint. + + @retval EFI_SUCCESS The function returned successfully. + @retval EFI_INVALID_PARAMETER A parameter is invalid. + @retval EFI_DEVICE_ERROR The physical device reported an error. + @retval EFI_NOT_READY The physical device is busy or not ready to process + this request. + +**/ +typedef +EFI_STATUS +(EFIAPI *EFI_USBFN_IO_ABORT_TRANSFER) ( + IN EFI_USBFN_IO_PROTOCOL *This, + IN UINT8 EndpointIndex, + IN EFI_USBFN_ENDPOINT_DIRECTION Direction +); + +/** + Returns the stall state on the specified endpoint. + + This function should fail with EFI_INVALID_PARAMETER if the specified direction + is incorrect for the endpoint. + + @param[in] This A pointer to the EFI_USBFN_IO_PROTOCOL instance. + @param[in] EndpointIndex Indicates the endpoint. + @param[in] Direction Direction of the endpoint. + @param[in, out] State Boolean, true value indicates that the endpoint + is in a stalled state, false otherwise. + + @retval EFI_SUCCESS The function returned successfully. + @retval EFI_INVALID_PARAMETER A parameter is invalid. + @retval EFI_DEVICE_ERROR The physical device reported an error. + @retval EFI_NOT_READY The physical device is busy or not ready to process + this request. + +**/ +typedef +EFI_STATUS +(EFIAPI *EFI_USBFN_IO_GET_ENDPOINT_STALL_STATE) ( + IN EFI_USBFN_IO_PROTOCOL *This, + IN UINT8 EndpointIndex, + IN EFI_USBFN_ENDPOINT_DIRECTION Direction, + IN OUT BOOLEAN *State +); + +/** + Sets or clears the stall state on the specified endpoint. + + This function should fail with EFI_INVALID_PARAMETER if the specified direction + is incorrect for the endpoint. + + @param[in] This A pointer to the EFI_USBFN_IO_PROTOCOL instance. + @param[in] EndpointIndex Indicates the endpoint. + @param[in] Direction Direction of the endpoint. + @param[in] State Requested stall state on the specified endpoint. + True value causes the endpoint to stall; false + value clears an existing stall. + + @retval EFI_SUCCESS The function returned successfully. + @retval EFI_INVALID_PARAMETER A parameter is invalid. + @retval EFI_DEVICE_ERROR The physical device reported an error. + @retval EFI_NOT_READY The physical device is busy or not ready to process + this request. + +**/ +typedef +EFI_STATUS +(EFIAPI *EFI_USBFN_IO_SET_ENDPOINT_STALL_STATE) ( + IN EFI_USBFN_IO_PROTOCOL *This, + IN UINT8 EndpointIndex, + IN EFI_USBFN_ENDPOINT_DIRECTION Direction, + IN OUT BOOLEAN *State +); + +/** + This function is called repeatedly to get information on USB bus states, + receive-completion and transmit-completion events on the endpoints, and + notification on setup packet on endpoint 0. + + A class driver must call EFI_USBFN_IO_PROTOCOL.EventHandler()repeatedly + to receive updates on the transfer status and number of bytes transferred + on various endpoints. + + @param[in] This A pointer to the EFI_USBFN_IO_PROTOCOL instance. + @param[out] Message Indicates the event that initiated this notification. + @param[in, out] PayloadSize On input, the size of the memory pointed by + Payload. On output, the amount ofdata returned + in Payload. + @param[out] Payload A pointer to EFI_USBFN_MESSAGE_PAYLOAD instance + to return additional payload for current message. + + @retval EFI_SUCCESS The function returned successfully. + @retval EFI_INVALID_PARAMETER A parameter is invalid. + @retval EFI_DEVICE_ERROR The physical device reported an error. + @retval EFI_NOT_READY The physical device is busy or not ready to process + this request. + @retval EFI_BUFFER_TOO_SMALL The Supplied buffer is not large enough to hold + the message payload. + +**/ +typedef +EFI_STATUS +(EFIAPI *EFI_USBFN_IO_EVENTHANDLER) ( + IN EFI_USBFN_IO_PROTOCOL *This, + OUT EFI_USBFN_MESSAGE *Message, + IN OUT UINTN *PayloadSize, + OUT EFI_USBFN_MESSAGE_PAYLOAD *Payload +); + +/** + This function handles transferring data to or from the host on the specified + endpoint, depending on the direction specified. + + A class driver must call EFI_USBFN_IO_PROTOCOL.EventHandler() repeatedly to + receive updates on the transfer status and the number of bytes transferred on + various endpoints. Upon an update of the transfer status, the Buffer field of + the EFI_USBFN_TRANSFER_RESULT structure (as described in the function description + for EFI_USBFN_IO_PROTOCOL.EventHandler()) must be initialized with the Buffer + pointer that was supplied to this method. + + The overview of the call sequence is illustrated in the Figure 54. + + This function should fail with EFI_INVALID_PARAMETER if the specified direction + is incorrect for the endpoint. + + @param[in] This A pointer to the EFI_USBFN_IO_PROTOCOL instance. + @param[in] EndpointIndex Indicates the endpoint on which TX or RX transfer + needs to take place. + @param[in] Direction Direction of the endpoint. + @param[in, out] BufferSize If Direction is EfiUsbEndpointDirectionDeviceRx: + On input, the size of the Bufferin bytes. + On output, the amount of data returned in Buffer + in bytes. + If Direction is EfiUsbEndpointDirectionDeviceTx: + On input, the size of the Bufferin bytes. + On output, the amount of data transmitted in bytes. + @param[in, out] Buffer If Direction is EfiUsbEndpointDirectionDeviceRx: + The Buffer to return the received data. + If Directionis EfiUsbEndpointDirectionDeviceTx: + The Buffer that contains the data to be transmitted. + + @retval EFI_SUCCESS The function returned successfully. + @retval EFI_INVALID_PARAMETER A parameter is invalid. + @retval EFI_DEVICE_ERROR The physical device reported an error. + @retval EFI_NOT_READY The physical device is busy or not ready to process + this request. + +**/ +typedef +EFI_STATUS +(EFIAPI *EFI_USBFN_IO_TRANSFER) ( + IN EFI_USBFN_IO_PROTOCOL *This, + IN UINT8 EndpointIndex, + IN EFI_USBFN_ENDPOINT_DIRECTION Direction, + IN OUT UINTN *BufferSize, + IN OUT VOID *Buffer +); + +/** + Returns the maximum supported transfer size. + + Returns the maximum number of bytes that the underlying controller can accommodate + in a single transfer. + + @param[in] This A pointer to the EFI_USBFN_IO_PROTOCOL instance. + @param[out] MaxTransferSize The maximum supported transfer size, in bytes. + + @retval EFI_SUCCESS The function returned successfully. + @retval EFI_INVALID_PARAMETER A parameter is invalid. + @retval EFI_DEVICE_ERROR The physical device reported an error. + @retval EFI_NOT_READY The physical device is busy or not ready to process + this request. + +**/ +typedef +EFI_STATUS +(EFIAPI *EFI_USBFN_IO_GET_MAXTRANSFER_SIZE) ( + IN EFI_USBFN_IO_PROTOCOL *This, + OUT UINTN *MaxTransferSize + ); + +/** + Allocates a transfer buffer of the specified sizethat satisfies the controller + requirements. + + The AllocateTransferBuffer() function allocates a memory region of Size bytes and + returns the address of the allocated memory that satisfies the underlying controller + requirements in the location referenced by Buffer. + + The allocated transfer buffer must be freed using a matching call to + EFI_USBFN_IO_PROTOCOL.FreeTransferBuffer()function. + + @param[in] This A pointer to the EFI_USBFN_IO_PROTOCOL instance. + @param[in] Size The number of bytes to allocate for the transfer buffer. + @param[out] Buffer A pointer to a pointer to the allocated buffer if the + call succeeds; undefined otherwise. + + @retval EFI_SUCCESS The function returned successfully. + @retval EFI_INVALID_PARAMETER A parameter is invalid. + @retval EFI_OUT_OF_RESOURCES The requested transfer buffer could not be allocated. + +**/ +typedef +EFI_STATUS +(EFIAPI *EFI_USBFN_IO_ALLOCATE_TRANSFER_BUFFER) ( + IN EFI_USBFN_IO_PROTOCOL *This, + IN UINTN Size, + OUT VOID **Buffer + ); + +/** + Deallocates the memory allocated for the transfer buffer by the + EFI_USBFN_IO_PROTOCOL.AllocateTransferBuffer() function. + + The EFI_USBFN_IO_PROTOCOL.FreeTransferBuffer() function deallocates the + memory specified by Buffer. The Buffer that is freed must have been allocated + by EFI_USBFN_IO_PROTOCOL.AllocateTransferBuffer(). + + @param[in] This A pointer to the EFI_USBFN_IO_PROTOCOL instance. + @param[in] Buffer A pointer to the transfer buffer to deallocate. + + @retval EFI_SUCCESS The function returned successfully. + @retval EFI_INVALID_PARAMETER A parameter is invalid. + +**/ +typedef +EFI_STATUS +(EFIAPI *EFI_USBFN_IO_FREE_TRANSFER_BUFFER) ( + IN EFI_USBFN_IO_PROTOCOL *This, + IN VOID *Buffer + ); + +/** + This function supplies power to the USB controller if needed and initializes + the hardware and the internal data structures. The port must not be activated + by this function. + + @param[in] This A pointer to the EFI_USBFN_IO_PROTOCOL instance. + + @retval EFI_SUCCESS The function returned successfully. + @retval EFI_INVALID_PARAMETER A parameter is invalid. + @retval EFI_DEVICE_ERROR The physical device reported an error. + +**/ +typedef +EFI_STATUS +(EFIAPI *EFI_USBFN_IO_START_CONTROLLER) ( + IN EFI_USBFN_IO_PROTOCOL *This + ); + +/** + This function stops the USB hardware device. + + @param[in] This A pointer to the EFI_USBFN_IO_PROTOCOL instance. + + @retval EFI_SUCCESS The function returned successfully. + @retval EFI_INVALID_PARAMETER A parameter is invalid. + @retval EFI_DEVICE_ERROR The physical device reported an error. + +**/ +typedef +EFI_STATUS +(EFIAPI *EFI_USBFN_IO_STOP_CONTROLLER) ( + IN EFI_USBFN_IO_PROTOCOL *This + ); + +/** + This function sets the configuration policy for the specified non-control + endpoint. + + This function can only be called before EFI_USBFN_IO_PROTOCOL.StartController() + or after EFI_USBFN_IO_PROTOCOL.StopController() has been called. + + @param[in] This A pointer to the EFI_USBFN_IO_PROTOCOL instance. + @param[in] EndpointIndex Indicates the non-control endpoint for which the + policy needs to be set. + @param[in] Direction Direction of the endpoint. + @param[in] PolicyType Policy type the user is trying to set for the + specified non-control endpoint. + @param[in] BufferSize The size of the Bufferin bytes. + @param[in] Buffer The new value for the policy parameter that + PolicyType specifies. + + @retval EFI_SUCCESS The function returned successfully. + @retval EFI_INVALID_PARAMETER A parameter is invalid. + @retval EFI_DEVICE_ERROR The physical device reported an error. + @retval EFI_UNSUPPORTED Changing this policy value is not supported. + +**/ +typedef +EFI_STATUS +(EFIAPI *EFI_USBFN_IO_SET_ENDPOINT_POLICY) ( + IN EFI_USBFN_IO_PROTOCOL *This, + IN UINT8 EndpointIndex, + IN EFI_USBFN_ENDPOINT_DIRECTION Direction, + IN EFI_USBFN_POLICY_TYPE PolicyType, + IN UINTN BufferSize, + IN VOID *Buffer + ); + +/** + This function sets the configuration policy for the specified non-control + endpoint. + + This function can only be called before EFI_USBFN_IO_PROTOCOL.StartController() + or after EFI_USBFN_IO_PROTOCOL.StopController() has been called. + + @param[in] This A pointer to the EFI_USBFN_IO_PROTOCOL instance. + @param[in] EndpointIndex Indicates the non-control endpoint for which the + policy needs to be set. + @param[in] Direction Direction of the endpoint. + @param[in] PolicyType Policy type the user is trying to retrieve for + the specified non-control endpoint. + @param[in, out] BufferSize On input, the size of Bufferin bytes. On output, + the amount of data returned in Bufferin bytes. + @param[in, out] Buffer A pointer to a buffer to return requested endpoint + policy value. + + @retval EFI_SUCCESS The function returned successfully. + @retval EFI_INVALID_PARAMETER A parameter is invalid. + @retval EFI_DEVICE_ERROR The specified policy value is not supported. + @retval EFI_BUFFER_TOO_SMALL Supplied buffer is not large enough to hold requested + policy value. + +**/ +typedef +EFI_STATUS +(EFIAPI *EFI_USBFN_IO_GET_ENDPOINT_POLICY) ( + IN EFI_USBFN_IO_PROTOCOL *This, + IN UINT8 EndpointIndex, + IN EFI_USBFN_ENDPOINT_DIRECTION Direction, + IN EFI_USBFN_POLICY_TYPE PolicyType, + IN OUT UINTN *BufferSize, + IN OUT VOID *Buffer + ); + +/// +/// The EFI_USBFN_IO_PROTOCOL provides basic data transactions and basic USB +/// controller management for a USB Function port. +/// +struct _EFI_USBFN_IO_PROTOCOL { + UINT32 Revision; + EFI_USBFN_IO_DETECT_PORT DetectPort; + EFI_USBFN_IO_CONFIGURE_ENABLE_ENDPOINTS ConfigureEnableEndpoints; + EFI_USBFN_IO_GET_ENDPOINT_MAXPACKET_SIZE GetEndpointMaxPacketSize; + EFI_USBFN_IO_GET_DEVICE_INFO GetDeviceInfo; + EFI_USBFN_IO_GET_VENDOR_ID_PRODUCT_ID GetVendorIdProductId; + EFI_USBFN_IO_ABORT_TRANSFER AbortTransfer; + EFI_USBFN_IO_GET_ENDPOINT_STALL_STATE GetEndpointStallState; + EFI_USBFN_IO_SET_ENDPOINT_STALL_STATE SetEndpointStallState; + EFI_USBFN_IO_EVENTHANDLER EventHandler; + EFI_USBFN_IO_TRANSFER Transfer; + EFI_USBFN_IO_GET_MAXTRANSFER_SIZE GetMaxTransferSize; + EFI_USBFN_IO_ALLOCATE_TRANSFER_BUFFER AllocateTransferBuffer; + EFI_USBFN_IO_FREE_TRANSFER_BUFFER FreeTransferBuffer; + EFI_USBFN_IO_START_CONTROLLER StartController; + EFI_USBFN_IO_STOP_CONTROLLER StopController; + EFI_USBFN_IO_SET_ENDPOINT_POLICY SetEndpointPolicy; + EFI_USBFN_IO_GET_ENDPOINT_POLICY GetEndpointPolicy; +}; + +extern EFI_GUID gEfiUsbFunctionIoProtocolGuid; + +#endif + diff --git a/MdePkg/MdePkg.dec b/MdePkg/MdePkg.dec index 12d5b96..d8291e1 100644 --- a/MdePkg/MdePkg.dec +++ b/MdePkg/MdePkg.dec @@ -1444,6 +1444,9 @@ ## Include/Protocol/SmartCardEdge.h
gEfiSmartCardEdgeProtocolGuid = { 0xd317f29b, 0xa325, 0x4712, {0x9b, 0xf1, 0xc6, 0x19, 0x54, 0xdc, 0x19, 0x8c }}
+ ## Include/Protocol/UsbFunctionIo.h
+ gEfiUsbFunctionIoProtocolGuid = { 0x32d2963a, 0xfe5d, 0x4f30, {0xb6, 0x33, 0x6e, 0x5d, 0xc5, 0x58, 0x3, 0xcc }}
+
#
# [Error.gEfiMdePkgTokenSpaceGuid]
# 0x80000001 | Invalid value provided.
|