IN EFI_USB_BUS_PROTOCOL *UsbBusId\r
);\r
\r
+/**\r
+ USB_IO function to execute a control transfer. This\r
+ function will execute the USB transfer. If transfer\r
+ successes, it will sync the internal state of USB bus\r
+ with device state.\r
+\r
+ @param This The USB_IO instance\r
+ @param Request The control transfer request\r
+ @param Direction Direction for data stage\r
+ @param Timeout The time to wait before timeout\r
+ @param Data The buffer holding the data\r
+ @param DataLength Then length of the data\r
+ @param UsbStatus USB result\r
+\r
+ @retval EFI_INVALID_PARAMETER The parameters are invalid\r
+ @retval EFI_SUCCESS The control transfer succeded.\r
+ @retval Others Failed to execute the transfer\r
+\r
+**/\r
+EFI_STATUS\r
+EFIAPI\r
+UsbIoControlTransfer (\r
+ IN EFI_USB_IO_PROTOCOL *This,\r
+ IN EFI_USB_DEVICE_REQUEST *Request,\r
+ IN EFI_USB_DATA_DIRECTION Direction,\r
+ IN UINT32 Timeout,\r
+ IN OUT VOID *Data, OPTIONAL\r
+ IN UINTN DataLength, OPTIONAL\r
+ OUT UINT32 *UsbStatus\r
+ );\r
+\r
+/**\r
+ Execute a bulk transfer to the device endpoint.\r
+\r
+ @param This The USB IO instance.\r
+ @param Endpoint The device endpoint.\r
+ @param Data The data to transfer.\r
+ @param DataLength The length of the data to transfer.\r
+ @param Timeout Time to wait before timeout.\r
+ @param UsbStatus The result of USB transfer.\r
+\r
+ @retval EFI_SUCCESS The bulk transfer is OK.\r
+ @retval EFI_INVALID_PARAMETER Some parameters are invalid.\r
+ @retval Others Failed to execute transfer, reason returned in\r
+ UsbStatus.\r
+\r
+**/\r
+EFI_STATUS\r
+EFIAPI\r
+UsbIoBulkTransfer (\r
+ IN EFI_USB_IO_PROTOCOL *This,\r
+ IN UINT8 Endpoint,\r
+ IN OUT VOID *Data,\r
+ IN OUT UINTN *DataLength,\r
+ IN UINTN Timeout,\r
+ OUT UINT32 *UsbStatus\r
+ );\r
+\r
+/**\r
+ Execute a synchronous interrupt transfer.\r
+\r
+ @param This The USB IO instance.\r
+ @param Endpoint The device endpoint.\r
+ @param Data The data to transfer.\r
+ @param DataLength The length of the data to transfer.\r
+ @param Timeout Time to wait before timeout.\r
+ @param UsbStatus The result of USB transfer.\r
+\r
+ @retval EFI_SUCCESS The synchronous interrupt transfer is OK.\r
+ @retval EFI_INVALID_PARAMETER Some parameters are invalid.\r
+ @retval Others Failed to execute transfer, reason returned in\r
+ UsbStatus.\r
+\r
+**/\r
+EFI_STATUS\r
+EFIAPI\r
+UsbIoSyncInterruptTransfer (\r
+ IN EFI_USB_IO_PROTOCOL *This,\r
+ IN UINT8 Endpoint,\r
+ IN OUT VOID *Data,\r
+ IN OUT UINTN *DataLength,\r
+ IN UINTN Timeout,\r
+ OUT UINT32 *UsbStatus\r
+ );\r
+\r
+/**\r
+ Queue a new asynchronous interrupt transfer, or remove the old\r
+ request if (IsNewTransfer == FALSE).\r
+\r
+ @param This The USB_IO instance.\r
+ @param Endpoint The device endpoint.\r
+ @param IsNewTransfer Whether this is a new request, if it's old, remove\r
+ the request.\r
+ @param PollInterval The interval to poll the transfer result, (in ms).\r
+ @param DataLength The length of perodic data transfer.\r
+ @param Callback The function to call periodicaly when transfer is\r
+ ready.\r
+ @param Context The context to the callback.\r
+\r
+ @retval EFI_SUCCESS New transfer is queued or old request is removed.\r
+ @retval EFI_INVALID_PARAMETER Some parameters are invalid.\r
+ @retval Others Failed to queue the new request or remove the old\r
+ request.\r
+\r
+**/\r
+EFI_STATUS\r
+EFIAPI\r
+UsbIoAsyncInterruptTransfer (\r
+ IN EFI_USB_IO_PROTOCOL *This,\r
+ IN UINT8 Endpoint,\r
+ IN BOOLEAN IsNewTransfer,\r
+ IN UINTN PollInterval, OPTIONAL\r
+ IN UINTN DataLength, OPTIONAL\r
+ IN EFI_ASYNC_USB_TRANSFER_CALLBACK Callback, OPTIONAL\r
+ IN VOID *Context OPTIONAL\r
+ );\r
+\r
+/**\r
+ Execute a synchronous isochronous transfer.\r
+\r
+ @param This The USB IO instance.\r
+ @param DeviceEndpoint The device endpoint.\r
+ @param Data The data to transfer.\r
+ @param DataLength The length of the data to transfer.\r
+ @param UsbStatus The result of USB transfer.\r
+\r
+ @retval EFI_UNSUPPORTED Currently isochronous transfer isn't supported.\r
+\r
+**/\r
+EFI_STATUS\r
+EFIAPI\r
+UsbIoIsochronousTransfer (\r
+ IN EFI_USB_IO_PROTOCOL *This,\r
+ IN UINT8 DeviceEndpoint,\r
+ IN OUT VOID *Data,\r
+ IN UINTN DataLength,\r
+ OUT UINT32 *Status\r
+ );\r
+\r
+/**\r
+ Queue an asynchronous isochronous transfer.\r
+\r
+ @param This The USB_IO instance.\r
+ @param DeviceEndpoint The device endpoint.\r
+ @param Data The data to transfer.\r
+ @param DataLength The length of perodic data transfer.\r
+ @param IsochronousCallBack The function to call periodicaly when transfer is\r
+ ready.\r
+ @param Context The context to the callback.\r
+\r
+ @retval EFI_UNSUPPORTED Currently isochronous transfer isn't supported.\r
+\r
+**/\r
+EFI_STATUS\r
+EFIAPI\r
+UsbIoAsyncIsochronousTransfer (\r
+ IN EFI_USB_IO_PROTOCOL *This,\r
+ IN UINT8 DeviceEndpoint,\r
+ IN OUT VOID *Data,\r
+ IN UINTN DataLength,\r
+ IN EFI_ASYNC_USB_TRANSFER_CALLBACK IsochronousCallBack,\r
+ IN VOID *Context OPTIONAL\r
+ );\r
+\r
+/**\r
+ Retrieve the device descriptor of the device.\r
+\r
+ @param This The USB IO instance.\r
+ @param Descriptor The variable to receive the device descriptor.\r
+\r
+ @retval EFI_SUCCESS The device descriptor is returned.\r
+ @retval EFI_INVALID_PARAMETER The parameter is invalid.\r
+\r
+**/\r
+EFI_STATUS\r
+EFIAPI\r
+UsbIoGetDeviceDescriptor (\r
+ IN EFI_USB_IO_PROTOCOL *This,\r
+ OUT EFI_USB_DEVICE_DESCRIPTOR *Descriptor\r
+ );\r
+\r
+/**\r
+ Return the configuration descriptor of the current active configuration.\r
+\r
+ @param This The USB IO instance.\r
+ @param Descriptor The USB configuration descriptor.\r
+\r
+ @retval EFI_SUCCESS The active configuration descriptor is returned.\r
+ @retval EFI_INVALID_PARAMETER Some parameter is invalid.\r
+ @retval EFI_NOT_FOUND Currently no active configuration is selected.\r
+\r
+**/\r
+EFI_STATUS\r
+EFIAPI\r
+UsbIoGetActiveConfigDescriptor (\r
+ IN EFI_USB_IO_PROTOCOL *This,\r
+ OUT EFI_USB_CONFIG_DESCRIPTOR *Descriptor\r
+ );\r
+\r
+/**\r
+ Retrieve the active interface setting descriptor for this USB IO instance.\r
+\r
+ @param This The USB IO instance.\r
+ @param Descriptor The variable to receive active interface setting.\r
+\r
+ @retval EFI_SUCCESS The active interface setting is returned.\r
+ @retval EFI_INVALID_PARAMETER Some parameter is invalid.\r
+\r
+**/\r
+EFI_STATUS\r
+EFIAPI\r
+UsbIoGetInterfaceDescriptor (\r
+ IN EFI_USB_IO_PROTOCOL *This,\r
+ OUT EFI_USB_INTERFACE_DESCRIPTOR *Descriptor\r
+ );\r
+\r
+/**\r
+ Retrieve the endpoint descriptor from this interface setting.\r
+\r
+ @param This The USB IO instance.\r
+ @param Index The index (start from zero) of the endpoint to\r
+ retrieve.\r
+ @param Descriptor The variable to receive the descriptor.\r
+\r
+ @retval EFI_SUCCESS The endpoint descriptor is returned.\r
+ @retval EFI_INVALID_PARAMETER Some parameter is invalid.\r
+\r
+**/\r
+EFI_STATUS\r
+EFIAPI\r
+UsbIoGetEndpointDescriptor (\r
+ IN EFI_USB_IO_PROTOCOL *This,\r
+ IN UINT8 Index,\r
+ OUT EFI_USB_ENDPOINT_DESCRIPTOR *Descriptor\r
+ );\r
+\r
+/**\r
+ Retrieve the supported language ID table from the device.\r
+\r
+ @param This The USB IO instance.\r
+ @param LangIDTable The table to return the language IDs.\r
+ @param TableSize The number of supported languanges.\r
+\r
+ @retval EFI_SUCCESS The language ID is return.\r
+\r
+**/\r
+EFI_STATUS\r
+EFIAPI\r
+UsbIoGetSupportedLanguages (\r
+ IN EFI_USB_IO_PROTOCOL *This,\r
+ OUT UINT16 **LangIDTable,\r
+ OUT UINT16 *TableSize\r
+ );\r
+\r
+/**\r
+ Retrieve an indexed string in the language of LangID.\r
+\r
+ @param This The USB IO instance.\r
+ @param LangID The language ID of the string to retrieve.\r
+ @param StringIndex The index of the string.\r
+ @param String The variable to receive the string.\r
+\r
+ @retval EFI_SUCCESS The string is returned.\r
+ @retval EFI_NOT_FOUND No such string existed.\r
+\r
+**/\r
+EFI_STATUS\r
+EFIAPI\r
+UsbIoGetStringDescriptor (\r
+ IN EFI_USB_IO_PROTOCOL *This,\r
+ IN UINT16 LangID,\r
+ IN UINT8 StringIndex,\r
+ OUT CHAR16 **String\r
+ );\r
+\r
+/**\r
+ Reset the device, then if that succeeds, reconfigure the\r
+ device with its address and current active configuration.\r
+\r
+ @param This The USB IO instance.\r
+\r
+ @retval EFI_SUCCESS The device is reset and configured.\r
+ @retval Others Failed to reset the device.\r
+\r
+**/\r
+EFI_STATUS\r
+EFIAPI\r
+UsbIoPortReset (\r
+ IN EFI_USB_IO_PROTOCOL *This\r
+ );\r
+\r
+/**\r
+ Install Usb Bus Protocol on host controller, and start the Usb bus.\r
+\r
+ @param This The USB bus driver binding instance.\r
+ @param Controller The controller to check.\r
+ @param RemainingDevicePath The remaining device patch.\r
+\r
+ @retval EFI_SUCCESS The controller is controlled by the usb bus.\r
+ @retval EFI_ALREADY_STARTED The controller is already controlled by the usb bus.\r
+ @retval EFI_OUT_OF_RESOURCES Failed to allocate resources.\r
+\r
+**/\r
+EFI_STATUS\r
+EFIAPI\r
+UsbBusBuildProtocol (\r
+ IN EFI_DRIVER_BINDING_PROTOCOL *This,\r
+ IN EFI_HANDLE Controller,\r
+ IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath\r
+ );\r
+\r
+/**\r
+ The USB bus driver entry pointer.\r
+\r
+ @param ImageHandle The driver image handle.\r
+ @param SystemTable The system table.\r
+\r
+ @return EFI_SUCCESS The component name protocol is installed.\r
+ @return Others Failed to init the usb driver.\r
+\r
+**/\r
+EFI_STATUS\r
+EFIAPI\r
+UsbBusDriverEntryPoint (\r
+ IN EFI_HANDLE ImageHandle,\r
+ IN EFI_SYSTEM_TABLE *SystemTable\r
+ );\r
+\r
+/**\r
+ Check whether USB bus driver support this device.\r
+\r
+ @param This The USB bus driver binding protocol.\r
+ @param Controller The controller handle to check.\r
+ @param RemainingDevicePath The remaining device path.\r
+\r
+ @retval EFI_SUCCESS The bus supports this controller.\r
+ @retval EFI_UNSUPPORTED This device isn't supported.\r
+\r
+**/\r
+EFI_STATUS\r
+EFIAPI\r
+UsbBusControllerDriverSupported (\r
+ IN EFI_DRIVER_BINDING_PROTOCOL *This,\r
+ IN EFI_HANDLE Controller,\r
+ IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath\r
+ );\r
+\r
+/**\r
+ Start to process the controller.\r
+\r
+ @param This The USB bus driver binding instance.\r
+ @param Controller The controller to check.\r
+ @param RemainingDevicePath The remaining device patch.\r
+\r
+ @retval EFI_SUCCESS The controller is controlled by the usb bus.\r
+ @retval EFI_ALREADY_STARTED The controller is already controlled by the usb\r
+ bus.\r
+ @retval EFI_OUT_OF_RESOURCES Failed to allocate resources.\r
+\r
+**/\r
+EFI_STATUS\r
+EFIAPI\r
+UsbBusControllerDriverStart (\r
+ IN EFI_DRIVER_BINDING_PROTOCOL *This,\r
+ IN EFI_HANDLE Controller,\r
+ IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath\r
+ );\r
+\r
+/**\r
+ Stop handle the controller by this USB bus driver.\r
+\r
+ @param This The USB bus driver binding protocol.\r
+ @param Controller The controller to release.\r
+ @param NumberOfChildren The child of USB bus that opened controller\r
+ BY_CHILD.\r
+ @param ChildHandleBuffer The array of child handle.\r
+\r
+ @retval EFI_SUCCESS The controller or children are stopped.\r
+ @retval EFI_DEVICE_ERROR Failed to stop the driver.\r
+\r
+**/\r
+EFI_STATUS\r
+EFIAPI\r
+UsbBusControllerDriverStop (\r
+ IN EFI_DRIVER_BINDING_PROTOCOL *This,\r
+ IN EFI_HANDLE Controller,\r
+ IN UINTN NumberOfChildren,\r
+ IN EFI_HANDLE *ChildHandleBuffer\r
+ );\r
+\r
extern EFI_USB_IO_PROTOCOL mUsbIoProtocol;\r
extern EFI_DRIVER_BINDING_PROTOCOL mUsbBusDriverBinding;\r
extern EFI_COMPONENT_NAME_PROTOCOL mUsbBusComponentName;\r