mirror of
				https://git.proxmox.com/git/mirror_edk2
				synced 2025-11-04 02:40:26 +00:00 
			
		
		
		
	Signed-off-by: Feng Tian <feng.tian@intel.com> Reviewed-by: Star Zeng <star.zeng@intel.com> Reviewed-by: Elvin Li <elvin.li@intel.com> git-svn-id: https://svn.code.sf.net/p/edk2/code/trunk/edk2@14442 6f19259b-4bc3-4df7-8a09-765794883524
		
			
				
	
	
		
			197 lines
		
	
	
		
			8.0 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			197 lines
		
	
	
		
			8.0 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
/** @file
 | 
						|
  Defines the PEI_USB_IO_PPI that the USB-related PEIM can use for I/O operations 
 | 
						|
  on the USB BUS.  This interface enables recovery from a 
 | 
						|
  USB-class storage device, such as USB CD/DVD, USB hard drive, or USB FLASH 
 | 
						|
  drive.  These interfaces are modeled on the UEFI 2.3 specification EFI_USB_IO_PROTOCOL.
 | 
						|
  Refer to section 16.2.4 of the UEFI 2.3 Specification for more information on 
 | 
						|
  these interfaces.
 | 
						|
 | 
						|
Copyright (c) 2006 - 2013, Intel Corporation. All rights reserved.<BR>
 | 
						|
 | 
						|
This program and the accompanying materials
 | 
						|
are licensed and made available under the terms and conditions
 | 
						|
of the BSD License which accompanies this distribution.  The
 | 
						|
full text of the license may be found at
 | 
						|
http://opensource.org/licenses/bsd-license.php
 | 
						|
 | 
						|
THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
 | 
						|
WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
 | 
						|
 | 
						|
**/
 | 
						|
 | 
						|
#ifndef _PEI_USB_IO_PPI_H_
 | 
						|
#define _PEI_USB_IO_PPI_H_
 | 
						|
 | 
						|
#include <Protocol/Usb2HostController.h>
 | 
						|
 | 
						|
///
 | 
						|
/// Global ID for the PEI_USB_IO_PPI.
 | 
						|
///
 | 
						|
#define PEI_USB_IO_PPI_GUID \
 | 
						|
  { \
 | 
						|
    0x7c29785c, 0x66b9, 0x49fc, { 0xb7, 0x97, 0x1c, 0xa5, 0x55, 0xe, 0xf2, 0x83} \
 | 
						|
  }
 | 
						|
 | 
						|
///
 | 
						|
/// Forward declaration for the PEI_USB_IO_PPI.
 | 
						|
///
 | 
						|
typedef struct _PEI_USB_IO_PPI  PEI_USB_IO_PPI;
 | 
						|
 | 
						|
/**
 | 
						|
  Submits control transfer to a target USB device.
 | 
						|
 | 
						|
  @param[in]     PeiServices   The pointer to the PEI Services Table.
 | 
						|
  @param[in]     This          The pointer to this instance of the PEI_USB_IO_PPI.
 | 
						|
  @param[in]     Request       A pointer to the USB device request that will be 
 | 
						|
                               sent to the USB device.
 | 
						|
  @param[in]     Direction     Specifies the data direction for the transfer. There 
 | 
						|
                               are three values available: 
 | 
						|
                               EfiUsbDataIn, EfiUsbDataOut and EfiUsbNoData.
 | 
						|
  @param[in]     Timeout       Indicates the maximum time, in milliseconds, that 
 | 
						|
                               the transfer is allowed to complete.
 | 
						|
                               If Timeout is 0, then the caller must wait for the
 | 
						|
                               function to be completed until EFI_SUCCESS or
 | 
						|
                               EFI_DEVICE_ERROR is returned.
 | 
						|
  @param[in,out] Data          A pointer to the buffer of data that will be 
 | 
						|
                               transmitted to or received from the USB device.
 | 
						|
  @param[in]     DataLength    On input, indicates the size, in bytes, of the data 
 | 
						|
                               buffer specified by Data.
 | 
						|
                               
 | 
						|
  @retval EFI_SUCCESS             The control transfer was completed successfully.
 | 
						|
  @retval EFI_INVALID_PARAMETER   Some parameters are invalid.
 | 
						|
  @retval EFI_OUT_OF_RESOURCES    The control transfer could not be completed due 
 | 
						|
                                  to a lack of resources.
 | 
						|
  @retval EFI_TIMEOUT             The control transfer failed due to timeout.
 | 
						|
  @retval EFI_DEVICE_ERROR        The control transfer failed due to host controller 
 | 
						|
                                  or device error.
 | 
						|
                                  Caller should check TransferResult for detailed 
 | 
						|
                                  error information.
 | 
						|
 | 
						|
**/
 | 
						|
typedef
 | 
						|
EFI_STATUS
 | 
						|
(EFIAPI *PEI_USB_CONTROL_TRANSFER)(
 | 
						|
  IN     EFI_PEI_SERVICES        **PeiServices,
 | 
						|
  IN     PEI_USB_IO_PPI          *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
 | 
						|
  );
 | 
						|
 | 
						|
/**
 | 
						|
  Submits bulk transfer to a target USB device.
 | 
						|
 | 
						|
  @param[in] PeiServices       The pointer to the PEI Services Table.
 | 
						|
  @param[in] This              The pointer to this instance of the PEI_USB_IO_PPI.
 | 
						|
  @param[in] DeviceEndpoint    The endpoint address.
 | 
						|
  @param[in] Data              The data buffer to be transfered.
 | 
						|
  @param[in] DataLength        The length of data buffer.
 | 
						|
  @param[in] Timeout           The timeout for the transfer, in milliseconds.
 | 
						|
                               If Timeout is 0, then the caller must wait for the
 | 
						|
                               function to be completed until EFI_SUCCESS or
 | 
						|
                               EFI_DEVICE_ERROR is returned.
 | 
						|
 | 
						|
  @retval EFI_SUCCESS             The bulk transfer completed successfully.
 | 
						|
  @retval EFI_INVALID_PARAMETER   Some parameters are invalid.
 | 
						|
  @retval EFI_OUT_OF_RESOURCES    The bulk transfer could not be completed due to 
 | 
						|
                                  a lack of resources.
 | 
						|
  @retval EFI_TIMEOUT             The bulk transfer failed due to timeout.
 | 
						|
  @retval EFI_DEVICE_ERROR        The bulk transfer failed due to host controller 
 | 
						|
                                  or device error.
 | 
						|
                                  Caller should check TransferResult for detailed 
 | 
						|
                                  error information.
 | 
						|
 | 
						|
**/
 | 
						|
typedef
 | 
						|
EFI_STATUS
 | 
						|
(EFIAPI *PEI_USB_BULK_TRANSFER)(
 | 
						|
  IN EFI_PEI_SERVICES  **PeiServices,
 | 
						|
  IN PEI_USB_IO_PPI    *This,
 | 
						|
  IN UINT8             DeviceEndpoint,
 | 
						|
  IN OUT VOID          *Data,
 | 
						|
  IN OUT UINTN         *DataLength,
 | 
						|
  IN UINTN             Timeout
 | 
						|
  );
 | 
						|
 | 
						|
/**
 | 
						|
  Get interface descriptor from a USB device.
 | 
						|
 | 
						|
  @param[in] PeiServices           The pointer to the PEI Services Table.
 | 
						|
  @param[in] This                  The pointer to this instance of the PEI_USB_IO_PPI.
 | 
						|
  @param[in] InterfaceDescriptor   The interface descriptor.
 | 
						|
 | 
						|
  @retval EFI_SUCCESS             The interface descriptor was returned.
 | 
						|
  @retval EFI_INVALID_PARAMETER   Some parameters are invalid.
 | 
						|
  @retval EFI_DEVICE_ERROR        A device error occurred, the function failed to 
 | 
						|
                                  get the interface descriptor.
 | 
						|
 | 
						|
**/
 | 
						|
typedef
 | 
						|
EFI_STATUS
 | 
						|
(EFIAPI *PEI_USB_GET_INTERFACE_DESCRIPTOR)(
 | 
						|
  IN EFI_PEI_SERVICES              **PeiServices,
 | 
						|
  IN PEI_USB_IO_PPI                *This,
 | 
						|
  IN EFI_USB_INTERFACE_DESCRIPTOR  **InterfaceDescriptor
 | 
						|
  );
 | 
						|
 | 
						|
/**
 | 
						|
  Get endpoint descriptor from a USB device.
 | 
						|
 | 
						|
  @param[in] PeiServices          The pointer to the PEI Services Table.
 | 
						|
  @param[in] This                 The pointer to this instance of the PEI_USB_IO_PPI.
 | 
						|
  @param[in] EndPointIndex        The index of the end point.
 | 
						|
  @param[in] EndpointDescriptor   The endpoint descriptor.
 | 
						|
 | 
						|
  @retval EFI_SUCCESS             The endpoint descriptor was returned.
 | 
						|
  @retval EFI_INVALID_PARAMETER   Some parameters are invalid.
 | 
						|
  @retval EFI_DEVICE_ERROR        A device error occurred, the function failed to 
 | 
						|
                                  get the endpoint descriptor.
 | 
						|
 | 
						|
**/
 | 
						|
typedef
 | 
						|
EFI_STATUS
 | 
						|
(EFIAPI *PEI_USB_GET_ENDPOINT_DESCRIPTOR)(
 | 
						|
  IN EFI_PEI_SERVICES               **PeiServices,
 | 
						|
  IN PEI_USB_IO_PPI                 *This,
 | 
						|
  IN UINT8                          EndpointIndex,
 | 
						|
  IN EFI_USB_ENDPOINT_DESCRIPTOR    **EndpointDescriptor
 | 
						|
  );
 | 
						|
 | 
						|
/**
 | 
						|
  Issue a port reset to the device.
 | 
						|
 | 
						|
  @param[in] PeiServices   The pointer to the PEI Services Table.
 | 
						|
  @param[in] This          The pointer to this instance of the PEI_USB_IO_PPI.
 | 
						|
 | 
						|
  @retval EFI_SUCCESS             The port reset was issued successfully.
 | 
						|
  @retval EFI_INVALID_PARAMETER   Some parameters are invalid.
 | 
						|
  @retval EFI_DEVICE_ERROR        Device error occurred.
 | 
						|
 | 
						|
**/
 | 
						|
typedef
 | 
						|
EFI_STATUS
 | 
						|
(EFIAPI *PEI_USB_PORT_RESET)(
 | 
						|
  IN EFI_PEI_SERVICES  **PeiServices,
 | 
						|
  IN PEI_USB_IO_PPI    *This
 | 
						|
  );
 | 
						|
 | 
						|
///
 | 
						|
/// This PPI contains a set of services to interact with the USB host controller.
 | 
						|
/// These interfaces are modeled on the UEFI 2.3 specification EFI_USB_IO_PROTOCOL.
 | 
						|
/// Refer to section 16.2.4 of the UEFI 2.3 Specification for more information on 
 | 
						|
/// these interfaces.
 | 
						|
///
 | 
						|
struct _PEI_USB_IO_PPI {
 | 
						|
  PEI_USB_CONTROL_TRANSFER          UsbControlTransfer;
 | 
						|
  PEI_USB_BULK_TRANSFER             UsbBulkTransfer;
 | 
						|
  PEI_USB_GET_INTERFACE_DESCRIPTOR  UsbGetInterfaceDescriptor;
 | 
						|
  PEI_USB_GET_ENDPOINT_DESCRIPTOR   UsbGetEndpointDescriptor;
 | 
						|
  PEI_USB_PORT_RESET                UsbPortReset;
 | 
						|
};
 | 
						|
 | 
						|
extern EFI_GUID gPeiUsbIoPpiGuid;
 | 
						|
 | 
						|
#endif
 |