mirror of https://github.com/acidanthera/audk.git
1156 lines
37 KiB
C
1156 lines
37 KiB
C
/*++
|
|
Copyright (c) 2006, Intel Corporation
|
|
All rights reserved. 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.
|
|
|
|
Module Name:
|
|
|
|
usbbus.h
|
|
|
|
Abstract:
|
|
|
|
Header file for USB bus driver Interface
|
|
|
|
Revision History
|
|
|
|
|
|
|
|
--*/
|
|
|
|
#ifndef _EFI_USB_BUS_H
|
|
#define _EFI_USB_BUS_H
|
|
|
|
|
|
#include <IndustryStandard/Usb.h>
|
|
#include "hub.h"
|
|
#include "usbutil.h"
|
|
|
|
|
|
extern UINTN gUSBDebugLevel;
|
|
extern UINTN gUSBErrorLevel;
|
|
|
|
|
|
#define MICROSECOND 10000
|
|
#define ONESECOND (1000 * MICROSECOND)
|
|
#define BUSPOLLING_PERIOD ONESECOND
|
|
//
|
|
// We define some maximun value here
|
|
//
|
|
#define USB_MAXCONFIG 8
|
|
#define USB_MAXALTSETTING 4
|
|
#define USB_MAXINTERFACES 32
|
|
#define USB_MAXENDPOINTS 16
|
|
#define USB_MAXSTRINGS 16
|
|
#define USB_MAXLANID 16
|
|
#define USB_MAXCHILDREN 8
|
|
#define USB_MAXCONTROLLERS 4
|
|
|
|
#define USB_IO_CONTROLLER_SIGNATURE EFI_SIGNATURE_32 ('u', 's', 'b', 'd')
|
|
|
|
typedef struct {
|
|
LIST_ENTRY Link;
|
|
UINT16 StringIndex;
|
|
CHAR16 *String;
|
|
} STR_LIST_ENTRY;
|
|
|
|
typedef struct {
|
|
LIST_ENTRY Link;
|
|
UINT16 Toggle;
|
|
EFI_USB_ENDPOINT_DESCRIPTOR EndpointDescriptor;
|
|
} ENDPOINT_DESC_LIST_ENTRY;
|
|
|
|
typedef struct {
|
|
LIST_ENTRY Link;
|
|
EFI_USB_INTERFACE_DESCRIPTOR InterfaceDescriptor;
|
|
LIST_ENTRY EndpointDescListHead;
|
|
} INTERFACE_DESC_LIST_ENTRY;
|
|
|
|
typedef struct {
|
|
LIST_ENTRY Link;
|
|
EFI_USB_CONFIG_DESCRIPTOR CongfigDescriptor;
|
|
LIST_ENTRY InterfaceDescListHead;
|
|
UINTN ActiveInterface;
|
|
} CONFIG_DESC_LIST_ENTRY;
|
|
|
|
//
|
|
// Forward declaring
|
|
//
|
|
struct usb_io_device;
|
|
|
|
//
|
|
// This is used to form the USB Controller Handle
|
|
//
|
|
typedef struct usb_io_controller_device {
|
|
UINTN Signature;
|
|
EFI_HANDLE Handle;
|
|
EFI_USB_IO_PROTOCOL UsbIo;
|
|
EFI_DEVICE_PATH_PROTOCOL *DevicePath;
|
|
EFI_HANDLE HostController;
|
|
UINT8 CurrentConfigValue;
|
|
UINT8 InterfaceNumber;
|
|
struct usb_io_device *UsbDevice;
|
|
|
|
BOOLEAN IsUsbHub;
|
|
BOOLEAN IsManagedByDriver;
|
|
|
|
//
|
|
// Fields specified for USB Hub
|
|
//
|
|
EFI_EVENT HubNotify;
|
|
UINT8 HubEndpointAddress;
|
|
UINT8 StatusChangePort;
|
|
UINT8 DownstreamPorts;
|
|
|
|
UINT8 ParentPort;
|
|
struct usb_io_controller_device *Parent;
|
|
struct usb_io_device *Children[USB_MAXCHILDREN];
|
|
} USB_IO_CONTROLLER_DEVICE;
|
|
|
|
#define USB_IO_CONTROLLER_DEVICE_FROM_USB_IO_THIS(a) \
|
|
CR(a, USB_IO_CONTROLLER_DEVICE, UsbIo, USB_IO_CONTROLLER_SIGNATURE)
|
|
|
|
//
|
|
// This is used to keep the topology of USB bus
|
|
//
|
|
struct _usb_bus_controller_device;
|
|
|
|
typedef struct usb_io_device {
|
|
UINT8 DeviceAddress;
|
|
BOOLEAN IsConfigured;
|
|
BOOLEAN IsSlowDevice;
|
|
UINT8 DeviceSpeed;
|
|
EFI_USB2_HC_TRANSACTION_TRANSLATOR *Translator;
|
|
EFI_USB_DEVICE_DESCRIPTOR DeviceDescriptor;
|
|
LIST_ENTRY ConfigDescListHead;
|
|
CONFIG_DESC_LIST_ENTRY *ActiveConfig;
|
|
UINT16 LangID[USB_MAXLANID];
|
|
|
|
struct _usb_bus_controller_device *BusController;
|
|
|
|
//
|
|
// Track the controller handle
|
|
//
|
|
UINT8 NumOfControllers;
|
|
USB_IO_CONTROLLER_DEVICE *UsbController[USB_MAXCONTROLLERS];
|
|
|
|
} USB_IO_DEVICE;
|
|
|
|
//
|
|
// Usb Bus Controller device strcuture
|
|
//
|
|
#define EFI_USB_BUS_PROTOCOL_GUID \
|
|
{ 0x2B2F68CC, 0x0CD2, 0x44cf, { 0x8E, 0x8B, 0xBB, 0xA2, 0x0B, 0x1B, 0x5B, 0x75 } }
|
|
|
|
typedef struct _EFI_USB_BUS_PROTOCOL {
|
|
UINT64 Reserved;
|
|
} EFI_USB_BUS_PROTOCOL;
|
|
|
|
#define USB_BUS_DEVICE_SIGNATURE EFI_SIGNATURE_32 ('u', 'b', 'u', 's')
|
|
|
|
typedef struct _usb_bus_controller_device {
|
|
UINTN Signature;
|
|
|
|
EFI_USB_BUS_PROTOCOL BusIdentify;
|
|
EFI_USB2_HC_PROTOCOL *Usb2HCInterface;
|
|
EFI_USB_HC_PROTOCOL *UsbHCInterface;
|
|
EFI_DEVICE_PATH_PROTOCOL *DevicePath;
|
|
UINT8 AddressPool[16];
|
|
USB_IO_DEVICE *Root;
|
|
BOOLEAN Hc2ProtocolSupported;
|
|
} USB_BUS_CONTROLLER_DEVICE;
|
|
|
|
#define USB_BUS_CONTROLLER_DEVICE_FROM_THIS(a) \
|
|
CR(a, USB_BUS_CONTROLLER_DEVICE, BusIdentify, USB_BUS_DEVICE_SIGNATURE)
|
|
|
|
|
|
//
|
|
// Global Variables
|
|
//
|
|
extern EFI_DRIVER_BINDING_PROTOCOL gUsbBusDriverBinding;
|
|
extern EFI_COMPONENT_NAME_PROTOCOL gUsbBusComponentName;
|
|
extern EFI_GUID gUSBBusDriverGuid;
|
|
|
|
//
|
|
// Usb Device Configuration functions
|
|
//
|
|
BOOLEAN
|
|
IsHub (
|
|
IN USB_IO_CONTROLLER_DEVICE *Dev
|
|
)
|
|
/*++
|
|
|
|
Routine Description:
|
|
Tell if a usb controller is a hub controller.
|
|
|
|
Arguments:
|
|
Dev - UsbIoController device structure.
|
|
|
|
Returns:
|
|
TRUE/FALSE
|
|
--*/
|
|
;
|
|
|
|
EFI_STATUS
|
|
UsbGetStringtable (
|
|
IN USB_IO_DEVICE *UsbIoDevice
|
|
)
|
|
/*++
|
|
|
|
Routine Description:
|
|
Get the string table stored in a usb device.
|
|
|
|
Arguments:
|
|
Dev - UsbIoController device structure.
|
|
|
|
Returns:
|
|
EFI_SUCCESS
|
|
EFI_UNSUPPORTED
|
|
EFI_OUT_OF_RESOURCES
|
|
|
|
--*/
|
|
;
|
|
|
|
EFI_STATUS
|
|
UsbGetAllConfigurations (
|
|
IN USB_IO_DEVICE *UsbIoDevice
|
|
)
|
|
/*++
|
|
|
|
Routine Description:
|
|
This function is to parse all the configuration descriptor.
|
|
|
|
Arguments:
|
|
UsbIoDevice - USB_IO_DEVICE device structure.
|
|
|
|
Returns:
|
|
EFI_SUCCESS
|
|
EFI_DEVICE_ERROR
|
|
EFI_OUT_OF_RESOURCES
|
|
|
|
--*/
|
|
;
|
|
|
|
EFI_STATUS
|
|
UsbSetConfiguration (
|
|
IN USB_IO_DEVICE *Dev,
|
|
IN UINTN ConfigurationValue
|
|
)
|
|
/*++
|
|
|
|
Routine Description:
|
|
Set the device to a configuration value.
|
|
|
|
Arguments:
|
|
UsbIoDev - USB_IO_DEVICE to be set configuration
|
|
ConfigrationValue - The configuration value to be set to that device
|
|
|
|
Returns:
|
|
EFI_SUCCESS
|
|
EFI_DEVICE_ERROR
|
|
|
|
--*/
|
|
;
|
|
|
|
EFI_STATUS
|
|
UsbSetDefaultConfiguration (
|
|
IN USB_IO_DEVICE *Dev
|
|
)
|
|
/*++
|
|
|
|
Routine Description:
|
|
Set the device to a default configuration value.
|
|
|
|
Arguments:
|
|
UsbIoDev - USB_IO_DEVICE to be set configuration
|
|
|
|
Returns
|
|
EFI_SUCCESS
|
|
EFI_DEVICE_ERROR
|
|
|
|
--*/
|
|
;
|
|
|
|
//
|
|
// Device Deconfiguration functions
|
|
//
|
|
VOID
|
|
UsbDestroyAllConfiguration (
|
|
IN USB_IO_DEVICE *UsbIoDevice
|
|
)
|
|
/*++
|
|
|
|
Routine Description:
|
|
Delete all configuration data when device is not used.
|
|
|
|
Arguments:
|
|
UsbIoDevice - USB_IO_DEVICE to be set configuration
|
|
|
|
Returns:
|
|
VOID
|
|
|
|
--*/
|
|
;
|
|
|
|
EFI_STATUS
|
|
DoHubConfig (
|
|
IN USB_IO_CONTROLLER_DEVICE *HubIoDevice
|
|
)
|
|
/*++
|
|
|
|
Routine Description:
|
|
Configure the hub
|
|
|
|
Arguments:
|
|
HubController - Indicating the hub controller device that
|
|
will be configured
|
|
|
|
Returns:
|
|
EFI_SUCCESS
|
|
EFI_DEVICE_ERROR
|
|
|
|
--*/
|
|
|
|
;
|
|
|
|
VOID
|
|
GetDeviceEndPointMaxPacketLength (
|
|
IN EFI_USB_IO_PROTOCOL *UsbIo,
|
|
IN UINT8 EndpointAddr,
|
|
OUT UINTN *MaxPacketLength
|
|
)
|
|
/*++
|
|
|
|
Routine Description:
|
|
Get the Max Packet Length of the speified Endpoint.
|
|
|
|
Arguments:
|
|
UsbIo - Given Usb Controller device.
|
|
EndpointAddr - Given Endpoint address.
|
|
MaxPacketLength - The max packet length of that endpoint
|
|
|
|
Returns:
|
|
N/A
|
|
|
|
--*/
|
|
;
|
|
|
|
VOID
|
|
GetDataToggleBit (
|
|
IN EFI_USB_IO_PROTOCOL *UsbIo,
|
|
IN UINT8 EndpointAddr,
|
|
OUT UINT8 *DataToggle
|
|
)
|
|
/*++
|
|
|
|
Routine Description:
|
|
Get the datatoggle of a specified endpoint.
|
|
|
|
Arguments:
|
|
UsbIo - Given Usb Controller device.
|
|
EndpointAddr - Given Endpoint address.
|
|
DataToggle - The current data toggle of that endpoint
|
|
|
|
Returns:
|
|
VOID
|
|
|
|
--*/
|
|
;
|
|
|
|
VOID
|
|
SetDataToggleBit (
|
|
IN EFI_USB_IO_PROTOCOL *UsbIo,
|
|
IN UINT8 EndpointAddr,
|
|
IN UINT8 DataToggle
|
|
)
|
|
/*++
|
|
|
|
Routine Description:
|
|
Set the datatoggle of a specified endpoint
|
|
|
|
Arguments:
|
|
UsbIo - Given Usb Controller device.
|
|
EndpointAddr - Given Endpoint address.
|
|
DataToggle - The current data toggle of that endpoint to be set
|
|
|
|
Returns:
|
|
VOID
|
|
|
|
--*/
|
|
;
|
|
|
|
INTERFACE_DESC_LIST_ENTRY *
|
|
FindInterfaceListEntry (
|
|
IN EFI_USB_IO_PROTOCOL *This
|
|
)
|
|
/*++
|
|
|
|
Routine Description:
|
|
Find Interface ListEntry.
|
|
|
|
Arguments:
|
|
This - EFI_USB_IO_PROTOCOL
|
|
|
|
Returns:
|
|
INTERFACE_DESC_LIST_ENTRY pointer
|
|
|
|
--*/
|
|
;
|
|
|
|
ENDPOINT_DESC_LIST_ENTRY *
|
|
FindEndPointListEntry (
|
|
IN EFI_USB_IO_PROTOCOL *This,
|
|
IN UINT8 EndPointAddress
|
|
)
|
|
/*++
|
|
|
|
Routine Description:
|
|
Find EndPoint ListEntry.
|
|
|
|
Arguments:
|
|
This - EFI_USB_IO_PROTOCOL
|
|
EndpointAddr - Endpoint address.
|
|
|
|
Returns:
|
|
ENDPOINT_DESC_LIST_ENTRY pointer
|
|
|
|
--*/
|
|
;
|
|
|
|
EFI_STATUS
|
|
IsDeviceDisconnected (
|
|
IN USB_IO_CONTROLLER_DEVICE *UsbIoController,
|
|
IN OUT BOOLEAN *Disconnected
|
|
)
|
|
/*++
|
|
|
|
Routine Description:
|
|
Reset if the device is disconencted or not
|
|
|
|
Arguments:
|
|
UsbIoController - Indicating the Usb Controller Device.
|
|
Disconnected - Indicate whether the device is disconencted or not
|
|
|
|
Returns:
|
|
EFI_SUCCESS
|
|
EFI_DEVICE_ERROR
|
|
|
|
--*/
|
|
;
|
|
|
|
EFI_STATUS
|
|
UsbDeviceDeConfiguration (
|
|
IN USB_IO_DEVICE *UsbIoDevice
|
|
)
|
|
/*++
|
|
|
|
Routine Description:
|
|
Remove Device, Device Handles, Uninstall Protocols.
|
|
|
|
Arguments:
|
|
UsbIoDevice - The device to be deconfigured.
|
|
|
|
Returns:
|
|
EFI_SUCCESS
|
|
EFI_DEVICE_ERROR
|
|
|
|
--*/
|
|
;
|
|
|
|
EFI_STATUS
|
|
EFIAPI
|
|
UsbVirtualHcGetCapability (
|
|
IN USB_BUS_CONTROLLER_DEVICE *UsbBusDev,
|
|
OUT UINT8 *MaxSpeed,
|
|
OUT UINT8 *PortNumber,
|
|
OUT UINT8 *Is64BitCapable
|
|
)
|
|
/*++
|
|
|
|
Routine Description:
|
|
|
|
Virtual interface to Retrieves the capablility of root hub ports
|
|
for both Hc2 and Hc protocol.
|
|
|
|
Arguments:
|
|
|
|
UsbBusDev - A pointer to bus controller of the device.
|
|
MaxSpeed - A pointer to the number of the host controller.
|
|
PortNumber - A pointer to the number of the root hub ports.
|
|
Is64BitCapable - A pointer to the flag for whether controller supports
|
|
64-bit memory addressing.
|
|
|
|
Returns:
|
|
|
|
EFI_SUCCESS
|
|
The host controller capability were retrieved successfully.
|
|
EFI_INVALID_PARAMETER
|
|
MaxSpeed or PortNumber or Is64BitCapable is NULL.
|
|
EFI_DEVICE_ERROR
|
|
An error was encountered while attempting to retrieve the capabilities.
|
|
|
|
--*/
|
|
;
|
|
|
|
EFI_STATUS
|
|
EFIAPI
|
|
UsbVirtualHcReset (
|
|
IN USB_BUS_CONTROLLER_DEVICE *UsbBusDev,
|
|
IN UINT16 Attributes
|
|
)
|
|
/*++
|
|
|
|
Routine Description:
|
|
|
|
Virtual interface to provides software reset for the USB host controller
|
|
for both Hc2 and Hc protocol.
|
|
|
|
Arguments:
|
|
|
|
UsbBusDev - A pointer to bus controller of the device.
|
|
Attributes - A bit mask of the reset operation to perform.
|
|
See below for a list of the supported bit mask values.
|
|
|
|
#define EFI_USB_HC_RESET_GLOBAL 0x0001 // Hc2 and Hc
|
|
#define EFI_USB_HC_RESET_HOST_CONTROLLER 0x0002 // Hc2 and Hc
|
|
#define EFI_USB_HC_RESET_GLOBAL_WITH_DEBUG 0x0004 // Hc2
|
|
#define EFI_USB_HC_RESET_HOST_WITH_DEBUG 0x0008 // Hc2
|
|
|
|
EFI_USB_HC_RESET_GLOBAL
|
|
If this bit is set, a global reset signal will be sent to the USB bus.
|
|
This resets all of the USB bus logic, including the USB host
|
|
controller hardware and all the devices attached on the USB bus.
|
|
EFI_USB_HC_RESET_HOST_CONTROLLER
|
|
If this bit is set, the USB host controller hardware will be reset.
|
|
No reset signal will be sent to the USB bus.
|
|
EFI_USB_HC_RESET_GLOBAL_WITH_DEBUG
|
|
If this bit is set, a global reset signal will be sent to the USB bus.
|
|
This resets all of the USB bus logic, including the USB host
|
|
controller hardware and all the devices attached on the USB bus.
|
|
If this is an EHCI controller and the debug port has configured, then
|
|
this is will still reset the host controller.
|
|
EFI_USB_HC_RESET_HOST_WITH_DEBUG
|
|
If this bit is set, the USB host controller hardware will be reset.
|
|
If this is an EHCI controller and the debug port has been configured,
|
|
then this will still reset the host controller.
|
|
|
|
Returns:
|
|
|
|
EFI_SUCCESS
|
|
The reset operation succeeded.
|
|
EFI_INVALID_PARAMETER
|
|
Attributes is not valid.
|
|
EFI_UNSUPPOURTED
|
|
The type of reset specified by Attributes is not currently supported by
|
|
the host controller hardware.
|
|
EFI_ACCESS_DENIED
|
|
Reset operation is rejected due to the debug port being configured and
|
|
active; only EFI_USB_HC_RESET_GLOBAL_WITH_DEBUG or
|
|
EFI_USB_HC_RESET_HOST_WITH_DEBUG reset Atrributes can be used to
|
|
perform reset operation for this host controller.
|
|
EFI_DEVICE_ERROR
|
|
An error was encountered while attempting to perform
|
|
the reset operation.
|
|
|
|
--*/
|
|
;
|
|
|
|
EFI_STATUS
|
|
EFIAPI
|
|
UsbVirtualHcGetState (
|
|
IN USB_BUS_CONTROLLER_DEVICE *UsbBusDev,
|
|
OUT EFI_USB_HC_STATE *State
|
|
)
|
|
/*++
|
|
|
|
Routine Description:
|
|
|
|
Virtual interface to retrieves current state of the USB host controller
|
|
for both Hc2 and Hc protocol.
|
|
|
|
Arguments:
|
|
|
|
UsbBusDev - A pointer to bus controller of the device.
|
|
State - A pointer to the EFI_USB_HC_STATE data structure that
|
|
indicates current state of the USB host controller.
|
|
Type EFI_USB_HC_STATE is defined below.
|
|
|
|
typedef enum {
|
|
EfiUsbHcStateHalt,
|
|
EfiUsbHcStateOperational,
|
|
EfiUsbHcStateSuspend,
|
|
EfiUsbHcStateMaximum
|
|
} EFI_USB_HC_STATE;
|
|
|
|
Returns:
|
|
|
|
EFI_SUCCESS
|
|
The state information of the host controller was returned in State.
|
|
EFI_INVALID_PARAMETER
|
|
State is NULL.
|
|
EFI_DEVICE_ERROR
|
|
An error was encountered while attempting to retrieve the
|
|
host controller's current state.
|
|
|
|
--*/
|
|
;
|
|
|
|
EFI_STATUS
|
|
EFIAPI
|
|
UsbVirtualHcSetState (
|
|
IN USB_BUS_CONTROLLER_DEVICE *UsbBusDev,
|
|
IN EFI_USB_HC_STATE State
|
|
)
|
|
/*++
|
|
|
|
Routine Description:
|
|
|
|
Virtual interface to sets the USB host controller to a specific state
|
|
for both Hc2 and Hc protocol.
|
|
|
|
Arguments:
|
|
|
|
UsbBusDev - A pointer to bus controller of the device.
|
|
State - Indicates the state of the host controller that will be set.
|
|
|
|
Returns:
|
|
|
|
EFI_SUCCESS
|
|
The USB host controller was successfully placed in the state
|
|
specified by State.
|
|
EFI_INVALID_PARAMETER
|
|
State is invalid.
|
|
EFI_DEVICE_ERROR
|
|
Failed to set the state specified by State due to device error.
|
|
|
|
--*/
|
|
;
|
|
|
|
EFI_STATUS
|
|
EFIAPI
|
|
UsbVirtualHcGetRootHubPortStatus (
|
|
IN USB_BUS_CONTROLLER_DEVICE *UsbBusDev,
|
|
IN UINT8 PortNumber,
|
|
OUT EFI_USB_PORT_STATUS *PortStatus
|
|
)
|
|
/*++
|
|
|
|
Routine Description:
|
|
|
|
Virtual interface to retrieves the current status of a USB root hub port
|
|
both for Hc2 and Hc protocol.
|
|
|
|
Arguments:
|
|
|
|
UsbBusDev - A pointer to bus controller of the device.
|
|
PortNumber - Specifies the root hub port from which the status
|
|
is to be retrieved. This value is zero-based. For example,
|
|
if a root hub has two ports, then the first port is numbered 0,
|
|
and the second port is numbered 1.
|
|
PortStatus - A pointer to the current port status bits and
|
|
port status change bits.
|
|
|
|
Returns:
|
|
|
|
EFI_SUCCESS The status of the USB root hub port specified by PortNumber
|
|
was returned in PortStatus.
|
|
EFI_INVALID_PARAMETER PortNumber is invalid.
|
|
EFI_DEVICE_ERROR Can't read register
|
|
|
|
--*/
|
|
;
|
|
|
|
EFI_STATUS
|
|
EFIAPI
|
|
UsbVirtualHcSetRootHubPortFeature (
|
|
IN USB_BUS_CONTROLLER_DEVICE *UsbBusDev,
|
|
IN UINT8 PortNumber,
|
|
IN EFI_USB_PORT_FEATURE PortFeature
|
|
)
|
|
/*++
|
|
|
|
Routine Description:
|
|
Virual interface to sets a feature for the specified root hub port
|
|
for both Hc2 and Hc protocol.
|
|
|
|
Arguments:
|
|
|
|
UsbBusDev - A pointer to bus controller of the device.
|
|
PortNumber - Specifies the root hub port whose feature
|
|
is requested to be set.
|
|
PortFeature - Indicates the feature selector associated
|
|
with the feature set request.
|
|
|
|
Returns:
|
|
|
|
EFI_SUCCESS
|
|
The feature specified by PortFeature was set for the
|
|
USB root hub port specified by PortNumber.
|
|
EFI_INVALID_PARAMETER
|
|
PortNumber is invalid or PortFeature is invalid.
|
|
EFI_DEVICE_ERROR
|
|
Can't read register
|
|
|
|
--*/
|
|
;
|
|
|
|
EFI_STATUS
|
|
EFIAPI
|
|
UsbVirtualHcClearRootHubPortFeature (
|
|
IN USB_BUS_CONTROLLER_DEVICE *UsbBusDev,
|
|
IN UINT8 PortNumber,
|
|
IN EFI_USB_PORT_FEATURE PortFeature
|
|
)
|
|
/*++
|
|
|
|
Routine Description:
|
|
|
|
Virtual interface to clears a feature for the specified root hub port
|
|
for both Hc2 and Hc protocol.
|
|
|
|
Arguments:
|
|
|
|
UsbBusDev - A pointer to bus controller of the device.
|
|
PortNumber - Specifies the root hub port whose feature
|
|
is requested to be cleared.
|
|
PortFeature - Indicates the feature selector associated with the
|
|
feature clear request.
|
|
|
|
Returns:
|
|
|
|
EFI_SUCCESS
|
|
The feature specified by PortFeature was cleared for the
|
|
USB root hub port specified by PortNumber.
|
|
EFI_INVALID_PARAMETER
|
|
PortNumber is invalid or PortFeature is invalid.
|
|
EFI_DEVICE_ERROR
|
|
Can't read register
|
|
|
|
--*/
|
|
;
|
|
|
|
EFI_STATUS
|
|
EFIAPI
|
|
UsbVirtualHcControlTransfer (
|
|
IN USB_BUS_CONTROLLER_DEVICE *UsbBusDev,
|
|
IN UINT8 DeviceAddress,
|
|
IN UINT8 DeviceSpeed,
|
|
IN UINTN MaximumPacketLength,
|
|
IN EFI_USB_DEVICE_REQUEST *Request,
|
|
IN EFI_USB_DATA_DIRECTION TransferDirection,
|
|
IN OUT VOID *Data,
|
|
IN OUT UINTN *DataLength,
|
|
IN UINTN TimeOut,
|
|
IN EFI_USB2_HC_TRANSACTION_TRANSLATOR *Translator,
|
|
OUT UINT32 *TransferResult
|
|
)
|
|
/*++
|
|
|
|
Routine Description:
|
|
|
|
Virtual interface to submits control transfer to a target USB device
|
|
for both Hc2 and Hc protocol.
|
|
|
|
Arguments:
|
|
|
|
UsbBusDev - A pointer to bus controller of the device.
|
|
DeviceAddress - Represents the address of the target device on the USB,
|
|
which is assigned during USB enumeration.
|
|
DeviceSpeed - Indicates target device speed.
|
|
MaximumPacketLength - Indicates the maximum packet size that the
|
|
default control transfer endpoint is capable of
|
|
sending or receiving.
|
|
Request - A pointer to the USB device request that will be sent
|
|
to the USB device.
|
|
TransferDirection - Specifies the data direction for the transfer.
|
|
There are three values available, DataIn, DataOut
|
|
and NoData.
|
|
Data - A pointer to the buffer of data that will be transmitted
|
|
to USB device or received from USB device.
|
|
DataLength - Indicates the size, in bytes, of the data buffer
|
|
specified by Data.
|
|
TimeOut - Indicates the maximum time, in microseconds,
|
|
which the transfer is allowed to complete.
|
|
Translator - A pointr to the transaction translator data.
|
|
TransferResult - A pointer to the detailed result information generated
|
|
by this control transfer.
|
|
|
|
Returns:
|
|
|
|
EFI_SUCCESS
|
|
The control transfer was completed successfully.
|
|
EFI_OUT_OF_RESOURCES
|
|
The control transfer could not be completed due to a lack of resources.
|
|
EFI_INVALID_PARAMETER
|
|
Some parameters are invalid.
|
|
EFI_TIMEOUT
|
|
The control transfer failed due to timeout.
|
|
EFI_DEVICE_ERROR
|
|
The control transfer failed due to host controller or device error.
|
|
Caller should check TranferResult for detailed error information.
|
|
|
|
--*/
|
|
;
|
|
|
|
EFI_STATUS
|
|
EFIAPI
|
|
UsbVirtualHcBulkTransfer (
|
|
IN USB_BUS_CONTROLLER_DEVICE *UsbBusDev,
|
|
IN UINT8 DeviceAddress,
|
|
IN UINT8 EndPointAddress,
|
|
IN UINT8 DeviceSpeed,
|
|
IN UINTN MaximumPacketLength,
|
|
IN UINT8 DataBuffersNumber,
|
|
IN OUT VOID *Data[EFI_USB_MAX_BULK_BUFFER_NUM],
|
|
IN OUT UINTN *DataLength,
|
|
IN OUT UINT8 *DataToggle,
|
|
IN UINTN TimeOut,
|
|
IN EFI_USB2_HC_TRANSACTION_TRANSLATOR *Translator,
|
|
OUT UINT32 *TransferResult
|
|
)
|
|
/*++
|
|
|
|
Routine Description:
|
|
|
|
Virtual interface to submits bulk transfer to a bulk endpoint of a USB device
|
|
both for Hc2 and Hc protocol.
|
|
|
|
Arguments:
|
|
|
|
UsbBusDev - A pointer to bus controller of the device.
|
|
DeviceAddress - Represents the address of the target device on the USB,
|
|
which is assigned during USB enumeration.
|
|
EndPointAddress - The combination of an endpoint number and an
|
|
endpoint direction of the target USB device.
|
|
Each endpoint address supports data transfer in
|
|
one direction except the control endpoint
|
|
(whose default endpoint address is 0).
|
|
It is the caller's responsibility to make sure that
|
|
the EndPointAddress represents a bulk endpoint.
|
|
DeviceSpeed - Indicates device speed. The supported values are EFI_USB_SPEED_FULL
|
|
and EFI_USB_SPEED_HIGH.
|
|
MaximumPacketLength - Indicates the maximum packet size the target endpoint
|
|
is capable of sending or receiving.
|
|
DataBuffersNumber - Number of data buffers prepared for the transfer.
|
|
Data - Array of pointers to the buffers of data that will be transmitted
|
|
to USB device or received from USB device.
|
|
DataLength - When input, indicates the size, in bytes, of the data buffer
|
|
specified by Data. When output, indicates the actually
|
|
transferred data size.
|
|
DataToggle - A pointer to the data toggle value. On input, it indicates
|
|
the initial data toggle value the bulk transfer should adopt;
|
|
on output, it is updated to indicate the data toggle value
|
|
of the subsequent bulk transfer.
|
|
Translator - A pointr to the transaction translator data.
|
|
TimeOut - Indicates the maximum time, in microseconds, which the
|
|
transfer is allowed to complete.
|
|
TransferResult - A pointer to the detailed result information of the
|
|
bulk transfer.
|
|
|
|
Returns:
|
|
|
|
EFI_SUCCESS
|
|
The bulk transfer was completed successfully.
|
|
EFI_OUT_OF_RESOURCES
|
|
The bulk transfer could not be submitted due to lack of resource.
|
|
EFI_INVALID_PARAMETER
|
|
Some parameters are invalid.
|
|
EFI_TIMEOUT
|
|
The bulk transfer failed due to timeout.
|
|
EFI_DEVICE_ERROR
|
|
The bulk transfer failed due to host controller or device error.
|
|
Caller should check TranferResult for detailed error information.
|
|
|
|
--*/
|
|
;
|
|
|
|
EFI_STATUS
|
|
EFIAPI
|
|
UsbVirtualHcAsyncInterruptTransfer (
|
|
IN USB_BUS_CONTROLLER_DEVICE * UsbBusDev,
|
|
IN UINT8 DeviceAddress,
|
|
IN UINT8 EndPointAddress,
|
|
IN UINT8 DeviceSpeed,
|
|
IN UINTN MaximumPacketLength,
|
|
IN BOOLEAN IsNewTransfer,
|
|
IN OUT UINT8 *DataToggle,
|
|
IN UINTN PollingInterval,
|
|
IN UINTN DataLength,
|
|
IN EFI_USB2_HC_TRANSACTION_TRANSLATOR * Translator,
|
|
IN EFI_ASYNC_USB_TRANSFER_CALLBACK CallBackFunction,
|
|
IN VOID *Context OPTIONAL
|
|
)
|
|
/*++
|
|
|
|
Routine Description:
|
|
|
|
Virtual interface to submits an asynchronous interrupt transfer to an
|
|
interrupt endpoint of a USB device for both Hc2 and Hc protocol.
|
|
|
|
Arguments:
|
|
|
|
UsbBusDev - A pointer to bus controller of the device.
|
|
DeviceAddress - Represents the address of the target device on the USB,
|
|
which is assigned during USB enumeration.
|
|
EndPointAddress - The combination of an endpoint number and an endpoint
|
|
direction of the target USB device. Each endpoint address
|
|
supports data transfer in one direction except the
|
|
control endpoint (whose default endpoint address is 0).
|
|
It is the caller's responsibility to make sure that
|
|
the EndPointAddress represents an interrupt endpoint.
|
|
DeviceSpeed - Indicates device speed.
|
|
MaximumPacketLength - Indicates the maximum packet size the target endpoint
|
|
is capable of sending or receiving.
|
|
IsNewTransfer - If TRUE, an asynchronous interrupt pipe is built between
|
|
the host and the target interrupt endpoint.
|
|
If FALSE, the specified asynchronous interrupt pipe
|
|
is canceled.
|
|
DataToggle - A pointer to the data toggle value. On input, it is valid
|
|
when IsNewTransfer is TRUE, and it indicates the initial
|
|
data toggle value the asynchronous interrupt transfer
|
|
should adopt.
|
|
On output, it is valid when IsNewTransfer is FALSE,
|
|
and it is updated to indicate the data toggle value of
|
|
the subsequent asynchronous interrupt transfer.
|
|
PollingInterval - Indicates the interval, in milliseconds, that the
|
|
asynchronous interrupt transfer is polled.
|
|
This parameter is required when IsNewTransfer is TRUE.
|
|
DataLength - Indicates the length of data to be received at the
|
|
rate specified by PollingInterval from the target
|
|
asynchronous interrupt endpoint. This parameter
|
|
is only required when IsNewTransfer is TRUE.
|
|
Translator - A pointr to the transaction translator data.
|
|
CallBackFunction - The Callback function.This function is called at the
|
|
rate specified by PollingInterval.This parameter is
|
|
only required when IsNewTransfer is TRUE.
|
|
Context - The context that is passed to the CallBackFunction.
|
|
- This is an optional parameter and may be NULL.
|
|
|
|
Returns:
|
|
|
|
EFI_SUCCESS
|
|
The asynchronous interrupt transfer request has been successfully
|
|
submitted or canceled.
|
|
EFI_INVALID_PARAMETER
|
|
Some parameters are invalid.
|
|
EFI_OUT_OF_RESOURCES
|
|
The request could not be completed due to a lack of resources.
|
|
EFI_DEVICE_ERROR
|
|
Can't read register
|
|
|
|
--*/
|
|
;
|
|
|
|
EFI_STATUS
|
|
EFIAPI
|
|
UsbVirtualHcSyncInterruptTransfer (
|
|
IN USB_BUS_CONTROLLER_DEVICE *UsbBusDev,
|
|
IN UINT8 DeviceAddress,
|
|
IN UINT8 EndPointAddress,
|
|
IN UINT8 DeviceSpeed,
|
|
IN UINTN MaximumPacketLength,
|
|
IN OUT VOID *Data,
|
|
IN OUT UINTN *DataLength,
|
|
IN OUT UINT8 *DataToggle,
|
|
IN UINTN TimeOut,
|
|
IN EFI_USB2_HC_TRANSACTION_TRANSLATOR *Translator,
|
|
OUT UINT32 *TransferResult
|
|
)
|
|
/*++
|
|
|
|
Routine Description:
|
|
|
|
Vitual interface to submits synchronous interrupt transfer to an interrupt endpoint
|
|
of a USB device for both Hc2 and Hc protocol.
|
|
|
|
Arguments:
|
|
|
|
UsbBusDev - A pointer to bus controller of the device.
|
|
DeviceAddress - Represents the address of the target device on the USB,
|
|
which is assigned during USB enumeration.
|
|
EndPointAddress - The combination of an endpoint number and an endpoint
|
|
direction of the target USB device. Each endpoint
|
|
address supports data transfer in one direction
|
|
except the control endpoint (whose default
|
|
endpoint address is 0). It is the caller's responsibility
|
|
to make sure that the EndPointAddress represents
|
|
an interrupt endpoint.
|
|
DeviceSpeed - Indicates device speed.
|
|
MaximumPacketLength - Indicates the maximum packet size the target endpoint
|
|
is capable of sending or receiving.
|
|
Data - A pointer to the buffer of data that will be transmitted
|
|
to USB device or received from USB device.
|
|
DataLength - On input, the size, in bytes, of the data buffer specified
|
|
by Data. On output, the number of bytes transferred.
|
|
DataToggle - A pointer to the data toggle value. On input, it indicates
|
|
the initial data toggle value the synchronous interrupt
|
|
transfer should adopt;
|
|
on output, it is updated to indicate the data toggle value
|
|
of the subsequent synchronous interrupt transfer.
|
|
TimeOut - Indicates the maximum time, in microseconds, which the
|
|
transfer is allowed to complete.
|
|
Translator - A pointr to the transaction translator data.
|
|
TransferResult - A pointer to the detailed result information from
|
|
the synchronous interrupt transfer.
|
|
|
|
Returns:
|
|
|
|
EFI_SUCCESS
|
|
The synchronous interrupt transfer was completed successfully.
|
|
EFI_OUT_OF_RESOURCES
|
|
The synchronous interrupt transfer could not be submitted due
|
|
to lack of resource.
|
|
EFI_INVALID_PARAMETER
|
|
Some parameters are invalid.
|
|
EFI_TIMEOUT
|
|
The synchronous interrupt transfer failed due to timeout.
|
|
EFI_DEVICE_ERROR
|
|
The synchronous interrupt transfer failed due to host controller
|
|
or device error. Caller should check TranferResult for detailed
|
|
error information.
|
|
|
|
--*/
|
|
;
|
|
|
|
EFI_STATUS
|
|
EFIAPI
|
|
UsbVirtualHcIsochronousTransfer (
|
|
IN USB_BUS_CONTROLLER_DEVICE *UsbBusDev,
|
|
IN UINT8 DeviceAddress,
|
|
IN UINT8 EndPointAddress,
|
|
IN UINT8 DeviceSpeed,
|
|
IN UINTN MaximumPacketLength,
|
|
IN UINT8 DataBuffersNumber,
|
|
IN OUT VOID *Data[EFI_USB_MAX_ISO_BUFFER_NUM],
|
|
IN UINTN DataLength,
|
|
IN EFI_USB2_HC_TRANSACTION_TRANSLATOR *Translator,
|
|
OUT UINT32 *TransferResult
|
|
)
|
|
/*++
|
|
|
|
Routine Description:
|
|
|
|
Virtual interface to submits isochronous transfer to a target USB device
|
|
for both Hc2 and Hc protocol.
|
|
|
|
Arguments:
|
|
|
|
UsbBusDev - A pointer to bus controller of the device.
|
|
DeviceAddress - Represents the address of the target device on the USB,
|
|
which is assigned during USB enumeration.
|
|
EndPointAddress - End point address
|
|
DeviceSpeed - Indicates device speed.
|
|
MaximumPacketLength - Indicates the maximum packet size that the
|
|
default control transfer endpoint is capable of
|
|
sending or receiving.
|
|
DataBuffersNumber - Number of data buffers prepared for the transfer.
|
|
Data - Array of pointers to the buffers of data that will be
|
|
transmitted to USB device or received from USB device.
|
|
DataLength - Indicates the size, in bytes, of the data buffer
|
|
specified by Data.
|
|
Translator - A pointr to the transaction translator data.
|
|
TransferResult - A pointer to the detailed result information generated
|
|
by this control transfer.
|
|
|
|
Returns:
|
|
|
|
EFI_UNSUPPORTED
|
|
|
|
--*/
|
|
;
|
|
|
|
EFI_STATUS
|
|
EFIAPI
|
|
UsbVirtualHcAsyncIsochronousTransfer (
|
|
IN USB_BUS_CONTROLLER_DEVICE *UsbBusDev,
|
|
IN UINT8 DeviceAddress,
|
|
IN UINT8 EndPointAddress,
|
|
IN UINT8 DeviceSpeed,
|
|
IN UINTN MaximumPacketLength,
|
|
IN UINT8 DataBuffersNumber,
|
|
IN OUT VOID *Data[EFI_USB_MAX_ISO_BUFFER_NUM],
|
|
IN UINTN DataLength,
|
|
IN EFI_USB2_HC_TRANSACTION_TRANSLATOR *Translator,
|
|
IN EFI_ASYNC_USB_TRANSFER_CALLBACK IsochronousCallBack,
|
|
IN VOID *Context
|
|
)
|
|
/*++
|
|
|
|
Routine Description:
|
|
|
|
Vitual interface to submits Async isochronous transfer to a target USB device
|
|
for both Hc2 and Hc protocol.
|
|
|
|
Arguments:
|
|
|
|
UsbBusDev - A pointer to bus controller of the device.
|
|
DeviceAddress - Represents the address of the target device on the USB,
|
|
which is assigned during USB enumeration.
|
|
EndPointAddress - End point address
|
|
DeviceSpeed - Indicates device speed.
|
|
MaximumPacketLength - Indicates the maximum packet size that the
|
|
default control transfer endpoint is capable of
|
|
sending or receiving.
|
|
DataBuffersNumber - Number of data buffers prepared for the transfer.
|
|
Data - Array of pointers to the buffers of data that will be transmitted
|
|
to USB device or received from USB device.
|
|
DataLength - Indicates the size, in bytes, of the data buffer
|
|
specified by Data.
|
|
Translator - A pointr to the transaction translator data.
|
|
IsochronousCallBack - When the transfer complete, the call back function will be called
|
|
Context - Pass to the call back function as parameter
|
|
|
|
Returns:
|
|
|
|
EFI_UNSUPPORTED
|
|
|
|
--*/
|
|
;
|
|
|
|
EFI_STATUS
|
|
EFIAPI
|
|
UsbPortReset (
|
|
IN EFI_USB_IO_PROTOCOL *This
|
|
)
|
|
/*++
|
|
|
|
Routine Description:
|
|
Resets and reconfigures the USB controller. This function will
|
|
work for all USB devices except USB Hub Controllers.
|
|
|
|
Arguments:
|
|
This - Indicates the calling context.
|
|
|
|
Returns:
|
|
EFI_SUCCESS
|
|
EFI_INVALID_PARAMETER
|
|
EFI_DEVICE_ERROR
|
|
|
|
--*/
|
|
;
|
|
|
|
VOID
|
|
InitializeUsbIoInstance (
|
|
IN USB_IO_CONTROLLER_DEVICE *UsbIoController
|
|
)
|
|
/*++
|
|
|
|
Routine Description:
|
|
|
|
Initialize the instance of UsbIo controller
|
|
|
|
Arguments:
|
|
|
|
UsbIoController - A pointer to controller structure of UsbIo
|
|
|
|
Returns:
|
|
|
|
--*/
|
|
;
|
|
|
|
#endif
|