mirror of
				https://github.com/acidanthera/audk.git
				synced 2025-11-03 21:17:23 +01:00 
			
		
		
		
	REF: https://bugzilla.tianocore.org/show_bug.cgi?id=3737 Apply uncrustify changes to .c/.h files in the MdeModulePkg package Cc: Andrew Fish <afish@apple.com> Cc: Leif Lindholm <leif@nuviainc.com> Cc: Michael D Kinney <michael.d.kinney@intel.com> Signed-off-by: Michael Kubacki <michael.kubacki@microsoft.com> Reviewed-by: Liming Gao <gaoliming@byosoft.com.cn>
		
			
				
	
	
		
			760 lines
		
	
	
		
			23 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			760 lines
		
	
	
		
			23 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
/** @file
 | 
						|
 | 
						|
    Usb Bus Driver Binding and Bus IO Protocol.
 | 
						|
 | 
						|
Copyright (c) 2004 - 2018, Intel Corporation. All rights reserved.<BR>
 | 
						|
SPDX-License-Identifier: BSD-2-Clause-Patent
 | 
						|
 | 
						|
**/
 | 
						|
 | 
						|
#ifndef _EFI_USB_BUS_H_
 | 
						|
#define _EFI_USB_BUS_H_
 | 
						|
 | 
						|
#include <Uefi.h>
 | 
						|
 | 
						|
#include <Protocol/Usb2HostController.h>
 | 
						|
#include <Protocol/UsbHostController.h>
 | 
						|
#include <Protocol/UsbIo.h>
 | 
						|
#include <Protocol/DevicePath.h>
 | 
						|
 | 
						|
#include <Library/BaseLib.h>
 | 
						|
#include <Library/DebugLib.h>
 | 
						|
#include <Library/BaseMemoryLib.h>
 | 
						|
#include <Library/UefiDriverEntryPoint.h>
 | 
						|
#include <Library/UefiBootServicesTableLib.h>
 | 
						|
#include <Library/UefiLib.h>
 | 
						|
#include <Library/DevicePathLib.h>
 | 
						|
#include <Library/MemoryAllocationLib.h>
 | 
						|
#include <Library/ReportStatusCodeLib.h>
 | 
						|
 | 
						|
#include <IndustryStandard/Usb.h>
 | 
						|
 | 
						|
typedef struct _USB_DEVICE     USB_DEVICE;
 | 
						|
typedef struct _USB_INTERFACE  USB_INTERFACE;
 | 
						|
typedef struct _USB_BUS        USB_BUS;
 | 
						|
typedef struct _USB_HUB_API    USB_HUB_API;
 | 
						|
 | 
						|
#include "UsbUtility.h"
 | 
						|
#include "UsbDesc.h"
 | 
						|
#include "UsbHub.h"
 | 
						|
#include "UsbEnumer.h"
 | 
						|
 | 
						|
//
 | 
						|
// USB bus timeout experience values
 | 
						|
//
 | 
						|
 | 
						|
#define USB_MAX_LANG_ID    16
 | 
						|
#define USB_MAX_INTERFACE  16
 | 
						|
#define USB_MAX_DEVICES    128
 | 
						|
 | 
						|
#define USB_BUS_1_MILLISECOND  1000
 | 
						|
 | 
						|
//
 | 
						|
// Roothub and hub's polling interval, set by experience,
 | 
						|
// The unit of roothub is 100us, means 100ms as interval, and
 | 
						|
// the unit of hub is 1ms, means 64ms as interval.
 | 
						|
//
 | 
						|
#define USB_ROOTHUB_POLL_INTERVAL  (100 * 10000U)
 | 
						|
#define USB_HUB_POLL_INTERVAL      64
 | 
						|
 | 
						|
//
 | 
						|
// Wait for port stable to work, refers to specification
 | 
						|
// [USB20-9.1.2]
 | 
						|
//
 | 
						|
#define USB_WAIT_PORT_STABLE_STALL  (100 * USB_BUS_1_MILLISECOND)
 | 
						|
 | 
						|
//
 | 
						|
// Wait for port statue reg change, set by experience
 | 
						|
//
 | 
						|
#define USB_WAIT_PORT_STS_CHANGE_STALL  (100)
 | 
						|
 | 
						|
//
 | 
						|
// Wait for set device address, refers to specification
 | 
						|
// [USB20-9.2.6.3, it says 2ms]
 | 
						|
//
 | 
						|
#define USB_SET_DEVICE_ADDRESS_STALL  (2 * USB_BUS_1_MILLISECOND)
 | 
						|
 | 
						|
//
 | 
						|
// Wait for retry max packet size, set by experience
 | 
						|
//
 | 
						|
#define USB_RETRY_MAX_PACK_SIZE_STALL  (100 * USB_BUS_1_MILLISECOND)
 | 
						|
 | 
						|
//
 | 
						|
// Wait for hub port power-on, refers to specification
 | 
						|
// [USB20-11.23.2]
 | 
						|
//
 | 
						|
#define USB_SET_PORT_POWER_STALL  (2 * USB_BUS_1_MILLISECOND)
 | 
						|
 | 
						|
//
 | 
						|
// Wait for port reset, refers to specification
 | 
						|
// [USB20-7.1.7.5, it says 10ms for hub and 50ms for
 | 
						|
// root hub]
 | 
						|
//
 | 
						|
// According to USB2.0, Chapter 11.5.1.5 Resetting,
 | 
						|
// the worst case for TDRST is 20ms
 | 
						|
//
 | 
						|
#define USB_SET_PORT_RESET_STALL       (20 * USB_BUS_1_MILLISECOND)
 | 
						|
#define USB_SET_ROOT_PORT_RESET_STALL  (50 * USB_BUS_1_MILLISECOND)
 | 
						|
 | 
						|
//
 | 
						|
// Wait for port recovery to accept SetAddress, refers to specification
 | 
						|
// [USB20-7.1.7.5, it says 10 ms for TRSTRCY]
 | 
						|
//
 | 
						|
#define USB_SET_PORT_RECOVERY_STALL  (10 * USB_BUS_1_MILLISECOND)
 | 
						|
 | 
						|
//
 | 
						|
// Wait for clear roothub port reset, set by experience
 | 
						|
//
 | 
						|
#define USB_CLR_ROOT_PORT_RESET_STALL  (20 * USB_BUS_1_MILLISECOND)
 | 
						|
 | 
						|
//
 | 
						|
// Wait for set roothub port enable, set by experience
 | 
						|
//
 | 
						|
#define USB_SET_ROOT_PORT_ENABLE_STALL  (20 * USB_BUS_1_MILLISECOND)
 | 
						|
 | 
						|
//
 | 
						|
// Send general device request timeout.
 | 
						|
//
 | 
						|
// The USB Specification 2.0, section 11.24.1 recommends a value of
 | 
						|
// 50 milliseconds.  We use a value of 500 milliseconds to work
 | 
						|
// around slower hubs and devices.
 | 
						|
//
 | 
						|
#define USB_GENERAL_DEVICE_REQUEST_TIMEOUT  500
 | 
						|
 | 
						|
//
 | 
						|
// Send clear feature request timeout, set by experience
 | 
						|
//
 | 
						|
#define USB_CLEAR_FEATURE_REQUEST_TIMEOUT  10
 | 
						|
 | 
						|
//
 | 
						|
// Bus raises TPL to TPL_NOTIFY to serialize all its operations
 | 
						|
// to protect shared data structures.
 | 
						|
//
 | 
						|
#define  USB_BUS_TPL  TPL_NOTIFY
 | 
						|
 | 
						|
#define  USB_INTERFACE_SIGNATURE  SIGNATURE_32 ('U', 'S', 'B', 'I')
 | 
						|
#define  USB_BUS_SIGNATURE        SIGNATURE_32 ('U', 'S', 'B', 'B')
 | 
						|
 | 
						|
#define USB_BIT(a)                 ((UINTN)(1 << (a)))
 | 
						|
#define USB_BIT_IS_SET(Data, Bit)  ((BOOLEAN)(((Data) & (Bit)) == (Bit)))
 | 
						|
 | 
						|
#define USB_INTERFACE_FROM_USBIO(a) \
 | 
						|
          CR(a, USB_INTERFACE, UsbIo, USB_INTERFACE_SIGNATURE)
 | 
						|
 | 
						|
#define USB_BUS_FROM_THIS(a) \
 | 
						|
          CR(a, USB_BUS, BusId, USB_BUS_SIGNATURE)
 | 
						|
 | 
						|
//
 | 
						|
// Used to locate USB_BUS
 | 
						|
// UsbBusProtocol is the private protocol.
 | 
						|
// gEfiCallerIdGuid will be used as its protocol guid.
 | 
						|
//
 | 
						|
typedef struct _EFI_USB_BUS_PROTOCOL {
 | 
						|
  UINT64    Reserved;
 | 
						|
} EFI_USB_BUS_PROTOCOL;
 | 
						|
 | 
						|
//
 | 
						|
// Stands for the real USB device. Each device may
 | 
						|
// has several separately working interfaces.
 | 
						|
//
 | 
						|
struct _USB_DEVICE {
 | 
						|
  USB_BUS                               *Bus;
 | 
						|
 | 
						|
  //
 | 
						|
  // Configuration information
 | 
						|
  //
 | 
						|
  UINT8                                 Speed;
 | 
						|
  UINT8                                 Address;
 | 
						|
  UINT32                                MaxPacket0;
 | 
						|
 | 
						|
  //
 | 
						|
  // The device's descriptors and its configuration
 | 
						|
  //
 | 
						|
  USB_DEVICE_DESC                       *DevDesc;
 | 
						|
  USB_CONFIG_DESC                       *ActiveConfig;
 | 
						|
 | 
						|
  UINT16                                LangId[USB_MAX_LANG_ID];
 | 
						|
  UINT16                                TotalLangId;
 | 
						|
 | 
						|
  UINT8                                 NumOfInterface;
 | 
						|
  USB_INTERFACE                         *Interfaces[USB_MAX_INTERFACE];
 | 
						|
 | 
						|
  //
 | 
						|
  // Parent child relationship
 | 
						|
  //
 | 
						|
  EFI_USB2_HC_TRANSACTION_TRANSLATOR    Translator;
 | 
						|
 | 
						|
  UINT8                                 ParentAddr;
 | 
						|
  USB_INTERFACE                         *ParentIf;
 | 
						|
  UINT8                                 ParentPort; // Start at 0
 | 
						|
  UINT8                                 Tier;
 | 
						|
  BOOLEAN                               DisconnectFail;
 | 
						|
};
 | 
						|
 | 
						|
//
 | 
						|
// Stands for different functions of USB device
 | 
						|
//
 | 
						|
struct _USB_INTERFACE {
 | 
						|
  UINTN                       Signature;
 | 
						|
  USB_DEVICE                  *Device;
 | 
						|
  USB_INTERFACE_DESC          *IfDesc;
 | 
						|
  USB_INTERFACE_SETTING       *IfSetting;
 | 
						|
 | 
						|
  //
 | 
						|
  // Handles and protocols
 | 
						|
  //
 | 
						|
  EFI_HANDLE                  Handle;
 | 
						|
  EFI_USB_IO_PROTOCOL         UsbIo;
 | 
						|
  EFI_DEVICE_PATH_PROTOCOL    *DevicePath;
 | 
						|
  BOOLEAN                     IsManaged;
 | 
						|
 | 
						|
  //
 | 
						|
  // Hub device special data
 | 
						|
  //
 | 
						|
  BOOLEAN                     IsHub;
 | 
						|
  USB_HUB_API                 *HubApi;
 | 
						|
  UINT8                       NumOfPort;
 | 
						|
  EFI_EVENT                   HubNotify;
 | 
						|
 | 
						|
  //
 | 
						|
  // Data used only by normal hub devices
 | 
						|
  //
 | 
						|
  USB_ENDPOINT_DESC           *HubEp;
 | 
						|
  UINT8                       *ChangeMap;
 | 
						|
 | 
						|
  //
 | 
						|
  // Data used only by root hub to hand over device to
 | 
						|
  // companion UHCI driver if low/full speed devices are
 | 
						|
  // connected to EHCI.
 | 
						|
  //
 | 
						|
  UINT8                       MaxSpeed;
 | 
						|
};
 | 
						|
 | 
						|
//
 | 
						|
// Stands for the current USB Bus
 | 
						|
//
 | 
						|
struct _USB_BUS {
 | 
						|
  UINTN                       Signature;
 | 
						|
  EFI_USB_BUS_PROTOCOL        BusId;
 | 
						|
 | 
						|
  //
 | 
						|
  // Managed USB host controller
 | 
						|
  //
 | 
						|
  EFI_HANDLE                  HostHandle;
 | 
						|
  EFI_DEVICE_PATH_PROTOCOL    *DevicePath;
 | 
						|
  EFI_USB2_HC_PROTOCOL        *Usb2Hc;
 | 
						|
  EFI_USB_HC_PROTOCOL         *UsbHc;
 | 
						|
 | 
						|
  //
 | 
						|
  // Recorded the max supported usb devices.
 | 
						|
  // XHCI can support up to 255 devices.
 | 
						|
  // EHCI/UHCI/OHCI supports up to 127 devices.
 | 
						|
  //
 | 
						|
  UINT32                      MaxDevices;
 | 
						|
  //
 | 
						|
  // An array of device that is on the bus. Devices[0] is
 | 
						|
  // for root hub. Device with address i is at Devices[i].
 | 
						|
  //
 | 
						|
  USB_DEVICE                  *Devices[256];
 | 
						|
 | 
						|
  //
 | 
						|
  // USB Bus driver need to control the recursive connect policy of the bus, only those wanted
 | 
						|
  // usb child device will be recursively connected.
 | 
						|
  //
 | 
						|
  // WantedUsbIoDPList tracks the Usb child devices which user want to recursively fully connecte,
 | 
						|
  // every wanted child device is stored in a item of the WantedUsbIoDPList, whose structure is
 | 
						|
  // DEVICE_PATH_LIST_ITEM
 | 
						|
  //
 | 
						|
  LIST_ENTRY    WantedUsbIoDPList;
 | 
						|
};
 | 
						|
 | 
						|
//
 | 
						|
// USB Hub Api
 | 
						|
//
 | 
						|
struct _USB_HUB_API {
 | 
						|
  USB_HUB_INIT                  Init;
 | 
						|
  USB_HUB_GET_PORT_STATUS       GetPortStatus;
 | 
						|
  USB_HUB_CLEAR_PORT_CHANGE     ClearPortChange;
 | 
						|
  USB_HUB_SET_PORT_FEATURE      SetPortFeature;
 | 
						|
  USB_HUB_CLEAR_PORT_FEATURE    ClearPortFeature;
 | 
						|
  USB_HUB_RESET_PORT            ResetPort;
 | 
						|
  USB_HUB_RELEASE               Release;
 | 
						|
};
 | 
						|
 | 
						|
#define USB_US_LAND_ID  0x0409
 | 
						|
 | 
						|
#define DEVICE_PATH_LIST_ITEM_SIGNATURE  SIGNATURE_32('d','p','l','i')
 | 
						|
typedef struct _DEVICE_PATH_LIST_ITEM {
 | 
						|
  UINTN                       Signature;
 | 
						|
  LIST_ENTRY                  Link;
 | 
						|
  EFI_DEVICE_PATH_PROTOCOL    *DevicePath;
 | 
						|
} DEVICE_PATH_LIST_ITEM;
 | 
						|
 | 
						|
typedef struct {
 | 
						|
  USB_CLASS_DEVICE_PATH       UsbClass;
 | 
						|
  EFI_DEVICE_PATH_PROTOCOL    End;
 | 
						|
} USB_CLASS_FORMAT_DEVICE_PATH;
 | 
						|
 | 
						|
/**
 | 
						|
  Free a DEVICE_PATH_LIST_ITEM list.
 | 
						|
 | 
						|
  @param  UsbIoDPList            a DEVICE_PATH_LIST_ITEM list pointer.
 | 
						|
 | 
						|
  @retval EFI_INVALID_PARAMETER  If parameters are invalid, return this value.
 | 
						|
  @retval EFI_SUCCESS            If free operation is successful, return this value.
 | 
						|
 | 
						|
**/
 | 
						|
EFI_STATUS
 | 
						|
EFIAPI
 | 
						|
UsbBusFreeUsbDPList (
 | 
						|
  IN     LIST_ENTRY  *UsbIoDPList
 | 
						|
  );
 | 
						|
 | 
						|
/**
 | 
						|
  Store a wanted usb child device info (its Usb part of device path) which is indicated by
 | 
						|
  RemainingDevicePath in a Usb bus which  is indicated by UsbBusId.
 | 
						|
 | 
						|
  @param  UsbBusId               Point to EFI_USB_BUS_PROTOCOL interface.
 | 
						|
  @param  RemainingDevicePath    The remaining device patch.
 | 
						|
 | 
						|
  @retval EFI_SUCCESS            Add operation is successful.
 | 
						|
  @retval EFI_INVALID_PARAMETER  The parameters are invalid.
 | 
						|
 | 
						|
**/
 | 
						|
EFI_STATUS
 | 
						|
EFIAPI
 | 
						|
UsbBusAddWantedUsbIoDP (
 | 
						|
  IN EFI_USB_BUS_PROTOCOL      *UsbBusId,
 | 
						|
  IN EFI_DEVICE_PATH_PROTOCOL  *RemainingDevicePath
 | 
						|
  );
 | 
						|
 | 
						|
/**
 | 
						|
  Check whether a usb child device is the wanted device in a bus.
 | 
						|
 | 
						|
  @param  Bus     The Usb bus's private data pointer.
 | 
						|
  @param  UsbIf   The usb child device interface.
 | 
						|
 | 
						|
  @retval True    If a usb child device is the wanted device in a bus.
 | 
						|
  @retval False   If a usb child device is *NOT* the wanted device in a bus.
 | 
						|
 | 
						|
**/
 | 
						|
BOOLEAN
 | 
						|
EFIAPI
 | 
						|
UsbBusIsWantedUsbIO (
 | 
						|
  IN USB_BUS        *Bus,
 | 
						|
  IN USB_INTERFACE  *UsbIf
 | 
						|
  );
 | 
						|
 | 
						|
/**
 | 
						|
  Recursively connect every wanted usb child device to ensure they all fully connected.
 | 
						|
  Check all the child Usb IO handles in this bus, recursively connecte if it is wanted usb child device.
 | 
						|
 | 
						|
  @param  UsbBusId                  Point to EFI_USB_BUS_PROTOCOL interface.
 | 
						|
 | 
						|
  @retval EFI_SUCCESS               Connect is done successfully.
 | 
						|
  @retval EFI_INVALID_PARAMETER     The parameter is invalid.
 | 
						|
 | 
						|
**/
 | 
						|
EFI_STATUS
 | 
						|
EFIAPI
 | 
						|
UsbBusRecursivelyConnectWantedUsbIo (
 | 
						|
  IN EFI_USB_BUS_PROTOCOL  *UsbBusId
 | 
						|
  );
 | 
						|
 | 
						|
/**
 | 
						|
  USB_IO function to execute a control transfer. This
 | 
						|
  function will execute the USB transfer. If transfer
 | 
						|
  successes, it will sync the internal state of USB bus
 | 
						|
  with device state.
 | 
						|
 | 
						|
  @param  This                   The USB_IO instance
 | 
						|
  @param  Request                The control transfer request
 | 
						|
  @param  Direction              Direction for data stage
 | 
						|
  @param  Timeout                The time to wait before timeout
 | 
						|
  @param  Data                   The buffer holding the data
 | 
						|
  @param  DataLength             Then length of the data
 | 
						|
  @param  UsbStatus              USB result
 | 
						|
 | 
						|
  @retval EFI_INVALID_PARAMETER  The parameters are invalid
 | 
						|
  @retval EFI_SUCCESS            The control transfer succeded.
 | 
						|
  @retval Others                 Failed to execute the transfer
 | 
						|
 | 
						|
**/
 | 
						|
EFI_STATUS
 | 
						|
EFIAPI
 | 
						|
UsbIoControlTransfer (
 | 
						|
  IN  EFI_USB_IO_PROTOCOL     *This,
 | 
						|
  IN  EFI_USB_DEVICE_REQUEST  *Request,
 | 
						|
  IN  EFI_USB_DATA_DIRECTION  Direction,
 | 
						|
  IN  UINT32                  Timeout,
 | 
						|
  IN  OUT VOID                *Data       OPTIONAL,
 | 
						|
  IN  UINTN                   DataLength  OPTIONAL,
 | 
						|
  OUT UINT32                  *UsbStatus
 | 
						|
  );
 | 
						|
 | 
						|
/**
 | 
						|
  Execute a bulk transfer to the device endpoint.
 | 
						|
 | 
						|
  @param  This                   The USB IO instance.
 | 
						|
  @param  Endpoint               The device endpoint.
 | 
						|
  @param  Data                   The data to transfer.
 | 
						|
  @param  DataLength             The length of the data to transfer.
 | 
						|
  @param  Timeout                Time to wait before timeout.
 | 
						|
  @param  UsbStatus              The result of USB transfer.
 | 
						|
 | 
						|
  @retval EFI_SUCCESS            The bulk transfer is OK.
 | 
						|
  @retval EFI_INVALID_PARAMETER  Some parameters are invalid.
 | 
						|
  @retval Others                 Failed to execute transfer, reason returned in
 | 
						|
                                 UsbStatus.
 | 
						|
 | 
						|
**/
 | 
						|
EFI_STATUS
 | 
						|
EFIAPI
 | 
						|
UsbIoBulkTransfer (
 | 
						|
  IN  EFI_USB_IO_PROTOCOL  *This,
 | 
						|
  IN  UINT8                Endpoint,
 | 
						|
  IN  OUT VOID             *Data,
 | 
						|
  IN  OUT UINTN            *DataLength,
 | 
						|
  IN  UINTN                Timeout,
 | 
						|
  OUT UINT32               *UsbStatus
 | 
						|
  );
 | 
						|
 | 
						|
/**
 | 
						|
  Execute a synchronous interrupt transfer.
 | 
						|
 | 
						|
  @param  This                   The USB IO instance.
 | 
						|
  @param  Endpoint               The device endpoint.
 | 
						|
  @param  Data                   The data to transfer.
 | 
						|
  @param  DataLength             The length of the data to transfer.
 | 
						|
  @param  Timeout                Time to wait before timeout.
 | 
						|
  @param  UsbStatus              The result of USB transfer.
 | 
						|
 | 
						|
  @retval EFI_SUCCESS            The synchronous interrupt transfer is OK.
 | 
						|
  @retval EFI_INVALID_PARAMETER  Some parameters are invalid.
 | 
						|
  @retval Others                 Failed to execute transfer, reason returned in
 | 
						|
                                 UsbStatus.
 | 
						|
 | 
						|
**/
 | 
						|
EFI_STATUS
 | 
						|
EFIAPI
 | 
						|
UsbIoSyncInterruptTransfer (
 | 
						|
  IN  EFI_USB_IO_PROTOCOL  *This,
 | 
						|
  IN  UINT8                Endpoint,
 | 
						|
  IN  OUT VOID             *Data,
 | 
						|
  IN  OUT UINTN            *DataLength,
 | 
						|
  IN  UINTN                Timeout,
 | 
						|
  OUT UINT32               *UsbStatus
 | 
						|
  );
 | 
						|
 | 
						|
/**
 | 
						|
  Queue a new asynchronous interrupt transfer, or remove the old
 | 
						|
  request if (IsNewTransfer == FALSE).
 | 
						|
 | 
						|
  @param  This                   The USB_IO instance.
 | 
						|
  @param  Endpoint               The device endpoint.
 | 
						|
  @param  IsNewTransfer          Whether this is a new request, if it's old, remove
 | 
						|
                                 the request.
 | 
						|
  @param  PollInterval           The interval to poll the transfer result, (in ms).
 | 
						|
  @param  DataLength             The length of perodic data transfer.
 | 
						|
  @param  Callback               The function to call periodically when transfer is
 | 
						|
                                 ready.
 | 
						|
  @param  Context                The context to the callback.
 | 
						|
 | 
						|
  @retval EFI_SUCCESS            New transfer is queued or old request is removed.
 | 
						|
  @retval EFI_INVALID_PARAMETER  Some parameters are invalid.
 | 
						|
  @retval Others                 Failed to queue the new request or remove the old
 | 
						|
                                 request.
 | 
						|
 | 
						|
**/
 | 
						|
EFI_STATUS
 | 
						|
EFIAPI
 | 
						|
UsbIoAsyncInterruptTransfer (
 | 
						|
  IN EFI_USB_IO_PROTOCOL              *This,
 | 
						|
  IN UINT8                            Endpoint,
 | 
						|
  IN BOOLEAN                          IsNewTransfer,
 | 
						|
  IN UINTN                            PollInterval        OPTIONAL,
 | 
						|
  IN UINTN                            DataLength          OPTIONAL,
 | 
						|
  IN EFI_ASYNC_USB_TRANSFER_CALLBACK  Callback            OPTIONAL,
 | 
						|
  IN VOID                             *Context            OPTIONAL
 | 
						|
  );
 | 
						|
 | 
						|
/**
 | 
						|
  Execute a synchronous isochronous transfer.
 | 
						|
 | 
						|
  @param  This                   The USB IO instance.
 | 
						|
  @param  DeviceEndpoint         The device endpoint.
 | 
						|
  @param  Data                   The data to transfer.
 | 
						|
  @param  DataLength             The length of the data to transfer.
 | 
						|
  @param  UsbStatus              The result of USB transfer.
 | 
						|
 | 
						|
  @retval EFI_UNSUPPORTED        Currently isochronous transfer isn't supported.
 | 
						|
 | 
						|
**/
 | 
						|
EFI_STATUS
 | 
						|
EFIAPI
 | 
						|
UsbIoIsochronousTransfer (
 | 
						|
  IN  EFI_USB_IO_PROTOCOL  *This,
 | 
						|
  IN  UINT8                DeviceEndpoint,
 | 
						|
  IN  OUT VOID             *Data,
 | 
						|
  IN  UINTN                DataLength,
 | 
						|
  OUT UINT32               *Status
 | 
						|
  );
 | 
						|
 | 
						|
/**
 | 
						|
  Queue an asynchronous isochronous transfer.
 | 
						|
 | 
						|
  @param  This                   The USB_IO instance.
 | 
						|
  @param  DeviceEndpoint         The device endpoint.
 | 
						|
  @param  Data                   The data to transfer.
 | 
						|
  @param  DataLength             The length of perodic data transfer.
 | 
						|
  @param  IsochronousCallBack    The function to call periodically when transfer is
 | 
						|
                                 ready.
 | 
						|
  @param  Context                The context to the callback.
 | 
						|
 | 
						|
  @retval EFI_UNSUPPORTED        Currently isochronous transfer isn't supported.
 | 
						|
 | 
						|
**/
 | 
						|
EFI_STATUS
 | 
						|
EFIAPI
 | 
						|
UsbIoAsyncIsochronousTransfer (
 | 
						|
  IN EFI_USB_IO_PROTOCOL              *This,
 | 
						|
  IN UINT8                            DeviceEndpoint,
 | 
						|
  IN OUT VOID                         *Data,
 | 
						|
  IN UINTN                            DataLength,
 | 
						|
  IN EFI_ASYNC_USB_TRANSFER_CALLBACK  IsochronousCallBack,
 | 
						|
  IN VOID                             *Context              OPTIONAL
 | 
						|
  );
 | 
						|
 | 
						|
/**
 | 
						|
  Retrieve the device descriptor of the device.
 | 
						|
 | 
						|
  @param  This                   The USB IO instance.
 | 
						|
  @param  Descriptor             The variable to receive the device descriptor.
 | 
						|
 | 
						|
  @retval EFI_SUCCESS            The device descriptor is returned.
 | 
						|
  @retval EFI_INVALID_PARAMETER  The parameter is invalid.
 | 
						|
 | 
						|
**/
 | 
						|
EFI_STATUS
 | 
						|
EFIAPI
 | 
						|
UsbIoGetDeviceDescriptor (
 | 
						|
  IN  EFI_USB_IO_PROTOCOL        *This,
 | 
						|
  OUT EFI_USB_DEVICE_DESCRIPTOR  *Descriptor
 | 
						|
  );
 | 
						|
 | 
						|
/**
 | 
						|
  Return the configuration descriptor of the current active configuration.
 | 
						|
 | 
						|
  @param  This                   The USB IO instance.
 | 
						|
  @param  Descriptor             The USB configuration descriptor.
 | 
						|
 | 
						|
  @retval EFI_SUCCESS            The active configuration descriptor is returned.
 | 
						|
  @retval EFI_INVALID_PARAMETER  Some parameter is invalid.
 | 
						|
  @retval EFI_NOT_FOUND          Currently no active configuration is selected.
 | 
						|
 | 
						|
**/
 | 
						|
EFI_STATUS
 | 
						|
EFIAPI
 | 
						|
UsbIoGetActiveConfigDescriptor (
 | 
						|
  IN  EFI_USB_IO_PROTOCOL        *This,
 | 
						|
  OUT EFI_USB_CONFIG_DESCRIPTOR  *Descriptor
 | 
						|
  );
 | 
						|
 | 
						|
/**
 | 
						|
  Retrieve the active interface setting descriptor for this USB IO instance.
 | 
						|
 | 
						|
  @param  This                   The USB IO instance.
 | 
						|
  @param  Descriptor             The variable to receive active interface setting.
 | 
						|
 | 
						|
  @retval EFI_SUCCESS            The active interface setting is returned.
 | 
						|
  @retval EFI_INVALID_PARAMETER  Some parameter is invalid.
 | 
						|
 | 
						|
**/
 | 
						|
EFI_STATUS
 | 
						|
EFIAPI
 | 
						|
UsbIoGetInterfaceDescriptor (
 | 
						|
  IN  EFI_USB_IO_PROTOCOL           *This,
 | 
						|
  OUT EFI_USB_INTERFACE_DESCRIPTOR  *Descriptor
 | 
						|
  );
 | 
						|
 | 
						|
/**
 | 
						|
  Retrieve the endpoint descriptor from this interface setting.
 | 
						|
 | 
						|
  @param  This                   The USB IO instance.
 | 
						|
  @param  Index                  The index (start from zero) of the endpoint to
 | 
						|
                                 retrieve.
 | 
						|
  @param  Descriptor             The variable to receive the descriptor.
 | 
						|
 | 
						|
  @retval EFI_SUCCESS            The endpoint descriptor is returned.
 | 
						|
  @retval EFI_INVALID_PARAMETER  Some parameter is invalid.
 | 
						|
 | 
						|
**/
 | 
						|
EFI_STATUS
 | 
						|
EFIAPI
 | 
						|
UsbIoGetEndpointDescriptor (
 | 
						|
  IN  EFI_USB_IO_PROTOCOL          *This,
 | 
						|
  IN  UINT8                        Index,
 | 
						|
  OUT EFI_USB_ENDPOINT_DESCRIPTOR  *Descriptor
 | 
						|
  );
 | 
						|
 | 
						|
/**
 | 
						|
  Retrieve the supported language ID table from the device.
 | 
						|
 | 
						|
  @param  This                   The USB IO instance.
 | 
						|
  @param  LangIDTable            The table to return the language IDs.
 | 
						|
  @param  TableSize              The size, in bytes, of the table LangIDTable.
 | 
						|
 | 
						|
  @retval EFI_SUCCESS            The language ID is return.
 | 
						|
 | 
						|
**/
 | 
						|
EFI_STATUS
 | 
						|
EFIAPI
 | 
						|
UsbIoGetSupportedLanguages (
 | 
						|
  IN  EFI_USB_IO_PROTOCOL  *This,
 | 
						|
  OUT UINT16               **LangIDTable,
 | 
						|
  OUT UINT16               *TableSize
 | 
						|
  );
 | 
						|
 | 
						|
/**
 | 
						|
  Retrieve an indexed string in the language of LangID.
 | 
						|
 | 
						|
  @param  This                   The USB IO instance.
 | 
						|
  @param  LangID                 The language ID of the string to retrieve.
 | 
						|
  @param  StringIndex            The index of the string.
 | 
						|
  @param  String                 The variable to receive the string.
 | 
						|
 | 
						|
  @retval EFI_SUCCESS            The string is returned.
 | 
						|
  @retval EFI_NOT_FOUND          No such string existed.
 | 
						|
 | 
						|
**/
 | 
						|
EFI_STATUS
 | 
						|
EFIAPI
 | 
						|
UsbIoGetStringDescriptor (
 | 
						|
  IN  EFI_USB_IO_PROTOCOL  *This,
 | 
						|
  IN  UINT16               LangID,
 | 
						|
  IN  UINT8                StringIndex,
 | 
						|
  OUT CHAR16               **String
 | 
						|
  );
 | 
						|
 | 
						|
/**
 | 
						|
  Reset the device, then if that succeeds, reconfigure the
 | 
						|
  device with its address and current active configuration.
 | 
						|
 | 
						|
  @param  This                   The USB IO instance.
 | 
						|
 | 
						|
  @retval EFI_SUCCESS            The device is reset and configured.
 | 
						|
  @retval Others                 Failed to reset the device.
 | 
						|
 | 
						|
**/
 | 
						|
EFI_STATUS
 | 
						|
EFIAPI
 | 
						|
UsbIoPortReset (
 | 
						|
  IN EFI_USB_IO_PROTOCOL  *This
 | 
						|
  );
 | 
						|
 | 
						|
/**
 | 
						|
  Install Usb Bus Protocol on host controller, and start the Usb bus.
 | 
						|
 | 
						|
  @param This                    The USB bus driver binding instance.
 | 
						|
  @param Controller              The controller to check.
 | 
						|
  @param RemainingDevicePath     The remaining device patch.
 | 
						|
 | 
						|
  @retval EFI_SUCCESS            The controller is controlled by the usb bus.
 | 
						|
  @retval EFI_ALREADY_STARTED    The controller is already controlled by the usb bus.
 | 
						|
  @retval EFI_OUT_OF_RESOURCES   Failed to allocate resources.
 | 
						|
 | 
						|
**/
 | 
						|
EFI_STATUS
 | 
						|
EFIAPI
 | 
						|
UsbBusBuildProtocol (
 | 
						|
  IN EFI_DRIVER_BINDING_PROTOCOL  *This,
 | 
						|
  IN EFI_HANDLE                   Controller,
 | 
						|
  IN EFI_DEVICE_PATH_PROTOCOL     *RemainingDevicePath
 | 
						|
  );
 | 
						|
 | 
						|
/**
 | 
						|
  The USB bus driver entry pointer.
 | 
						|
 | 
						|
  @param ImageHandle       The driver image handle.
 | 
						|
  @param SystemTable       The system table.
 | 
						|
 | 
						|
  @return EFI_SUCCESS      The component name protocol is installed.
 | 
						|
  @return Others           Failed to init the usb driver.
 | 
						|
 | 
						|
**/
 | 
						|
EFI_STATUS
 | 
						|
EFIAPI
 | 
						|
UsbBusDriverEntryPoint (
 | 
						|
  IN EFI_HANDLE        ImageHandle,
 | 
						|
  IN EFI_SYSTEM_TABLE  *SystemTable
 | 
						|
  );
 | 
						|
 | 
						|
/**
 | 
						|
  Check whether USB bus driver support this device.
 | 
						|
 | 
						|
  @param  This                   The USB bus driver binding protocol.
 | 
						|
  @param  Controller             The controller handle to check.
 | 
						|
  @param  RemainingDevicePath    The remaining device path.
 | 
						|
 | 
						|
  @retval EFI_SUCCESS            The bus supports this controller.
 | 
						|
  @retval EFI_UNSUPPORTED        This device isn't supported.
 | 
						|
 | 
						|
**/
 | 
						|
EFI_STATUS
 | 
						|
EFIAPI
 | 
						|
UsbBusControllerDriverSupported (
 | 
						|
  IN EFI_DRIVER_BINDING_PROTOCOL  *This,
 | 
						|
  IN EFI_HANDLE                   Controller,
 | 
						|
  IN EFI_DEVICE_PATH_PROTOCOL     *RemainingDevicePath
 | 
						|
  );
 | 
						|
 | 
						|
/**
 | 
						|
  Start to process the controller.
 | 
						|
 | 
						|
  @param  This                   The USB bus driver binding instance.
 | 
						|
  @param  Controller             The controller to check.
 | 
						|
  @param  RemainingDevicePath    The remaining device patch.
 | 
						|
 | 
						|
  @retval EFI_SUCCESS            The controller is controlled by the usb bus.
 | 
						|
  @retval EFI_ALREADY_STARTED    The controller is already controlled by the usb
 | 
						|
                                 bus.
 | 
						|
  @retval EFI_OUT_OF_RESOURCES   Failed to allocate resources.
 | 
						|
 | 
						|
**/
 | 
						|
EFI_STATUS
 | 
						|
EFIAPI
 | 
						|
UsbBusControllerDriverStart (
 | 
						|
  IN EFI_DRIVER_BINDING_PROTOCOL  *This,
 | 
						|
  IN EFI_HANDLE                   Controller,
 | 
						|
  IN EFI_DEVICE_PATH_PROTOCOL     *RemainingDevicePath
 | 
						|
  );
 | 
						|
 | 
						|
/**
 | 
						|
  Stop handle the controller by this USB bus driver.
 | 
						|
 | 
						|
  @param  This                   The USB bus driver binding protocol.
 | 
						|
  @param  Controller             The controller to release.
 | 
						|
  @param  NumberOfChildren       The child of USB bus that opened controller
 | 
						|
                                 BY_CHILD.
 | 
						|
  @param  ChildHandleBuffer      The array of child handle.
 | 
						|
 | 
						|
  @retval EFI_SUCCESS            The controller or children are stopped.
 | 
						|
  @retval EFI_DEVICE_ERROR       Failed to stop the driver.
 | 
						|
 | 
						|
**/
 | 
						|
EFI_STATUS
 | 
						|
EFIAPI
 | 
						|
UsbBusControllerDriverStop (
 | 
						|
  IN EFI_DRIVER_BINDING_PROTOCOL  *This,
 | 
						|
  IN EFI_HANDLE                   Controller,
 | 
						|
  IN UINTN                        NumberOfChildren,
 | 
						|
  IN EFI_HANDLE                   *ChildHandleBuffer
 | 
						|
  );
 | 
						|
 | 
						|
extern EFI_USB_IO_PROTOCOL           mUsbIoProtocol;
 | 
						|
extern EFI_DRIVER_BINDING_PROTOCOL   mUsbBusDriverBinding;
 | 
						|
extern EFI_COMPONENT_NAME_PROTOCOL   mUsbBusComponentName;
 | 
						|
extern EFI_COMPONENT_NAME2_PROTOCOL  mUsbBusComponentName2;
 | 
						|
 | 
						|
#endif
 |