| /** @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 - 2018, Intel Corporation. All rights reserved.<BR> |
| SPDX-License-Identifier: BSD-2-Clause-Patent |
| |
| @par Revision Reference: |
| This Protocol was introduced in UEFI Specification 2.5. |
| |
| **/ |
| |
| #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 One or more of the following conditions is TRUE: |
| BufferSize is NULL. |
| *BufferSize is not 0 and Buffer is NULL. |
| Id in invalid. |
| @retval EFI_DEVICE_ERROR The physical device reported an error. |
| @retval EFI_BUFFER_TOO_SMALL The buffer is too small to hold the buffer. |
| *BufferSize has been updated with the size needed 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 |