mirror of
				https://git.proxmox.com/git/mirror_edk2
				synced 2025-11-03 22:54:50 +00: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>
		
			
				
	
	
		
			257 lines
		
	
	
		
			8.8 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			257 lines
		
	
	
		
			8.8 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
/** @file
 | 
						|
Usb Peim definition.
 | 
						|
 | 
						|
Copyright (c) 2006 - 2018, Intel Corporation. All rights reserved. <BR>
 | 
						|
 | 
						|
SPDX-License-Identifier: BSD-2-Clause-Patent
 | 
						|
 | 
						|
**/
 | 
						|
 | 
						|
#ifndef _PEI_USB_PEIM_H_
 | 
						|
#define _PEI_USB_PEIM_H_
 | 
						|
 | 
						|
#include <PiPei.h>
 | 
						|
 | 
						|
#include <Ppi/UsbHostController.h>
 | 
						|
#include <Ppi/Usb2HostController.h>
 | 
						|
#include <Ppi/UsbIo.h>
 | 
						|
 | 
						|
#include <Library/DebugLib.h>
 | 
						|
#include <Library/PeimEntryPoint.h>
 | 
						|
#include <Library/PeiServicesLib.h>
 | 
						|
#include <Library/BaseMemoryLib.h>
 | 
						|
#include <Library/TimerLib.h>
 | 
						|
#include <Library/PcdLib.h>
 | 
						|
 | 
						|
#include <IndustryStandard/Usb.h>
 | 
						|
 | 
						|
//
 | 
						|
// A common header for usb standard descriptor.
 | 
						|
// Each stand descriptor has a length and type.
 | 
						|
//
 | 
						|
#pragma pack(1)
 | 
						|
typedef struct {
 | 
						|
  UINT8    Len;
 | 
						|
  UINT8    Type;
 | 
						|
} USB_DESC_HEAD;
 | 
						|
#pragma pack()
 | 
						|
 | 
						|
#define MAX_INTERFACE  8
 | 
						|
#define MAX_ENDPOINT   16
 | 
						|
 | 
						|
#define PEI_USB_DEVICE_SIGNATURE  SIGNATURE_32 ('U', 's', 'b', 'D')
 | 
						|
typedef struct {
 | 
						|
  UINTN                                 Signature;
 | 
						|
  PEI_USB_IO_PPI                        UsbIoPpi;
 | 
						|
  EFI_PEI_PPI_DESCRIPTOR                UsbIoPpiList;
 | 
						|
  UINT16                                MaxPacketSize0;
 | 
						|
  UINT16                                DataToggle;
 | 
						|
  UINT8                                 DeviceAddress;
 | 
						|
  UINT8                                 DeviceSpeed;
 | 
						|
  UINT8                                 IsHub;
 | 
						|
  UINT8                                 DownStreamPortNo;
 | 
						|
  UINTN                                 AllocateAddress;
 | 
						|
  PEI_USB_HOST_CONTROLLER_PPI           *UsbHcPpi;
 | 
						|
  PEI_USB2_HOST_CONTROLLER_PPI          *Usb2HcPpi;
 | 
						|
  UINT8                                 ConfigurationData[1024];
 | 
						|
  EFI_USB_CONFIG_DESCRIPTOR             *ConfigDesc;
 | 
						|
  EFI_USB_INTERFACE_DESCRIPTOR          *InterfaceDesc;
 | 
						|
  EFI_USB_INTERFACE_DESCRIPTOR          *InterfaceDescList[MAX_INTERFACE];
 | 
						|
  EFI_USB_ENDPOINT_DESCRIPTOR           *EndpointDesc[MAX_ENDPOINT];
 | 
						|
  EFI_USB_ENDPOINT_DESCRIPTOR           *EndpointDescList[MAX_INTERFACE][MAX_ENDPOINT];
 | 
						|
  EFI_USB2_HC_TRANSACTION_TRANSLATOR    Translator;
 | 
						|
  UINT8                                 Tier;
 | 
						|
} PEI_USB_DEVICE;
 | 
						|
 | 
						|
#define PEI_USB_DEVICE_FROM_THIS(a)  CR (a, PEI_USB_DEVICE, UsbIoPpi, PEI_USB_DEVICE_SIGNATURE)
 | 
						|
 | 
						|
#define USB_BIT_IS_SET(Data, Bit)  ((BOOLEAN)(((Data) & (Bit)) == (Bit)))
 | 
						|
 | 
						|
#define USB_BUS_1_MILLISECOND  1000
 | 
						|
 | 
						|
//
 | 
						|
// 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 clear roothub port reset, set by experience
 | 
						|
//
 | 
						|
#define USB_CLR_ROOT_PORT_RESET_STALL  (20 * USB_BUS_1_MILLISECOND)
 | 
						|
 | 
						|
//
 | 
						|
// Wait for port statue reg change, set by experience
 | 
						|
//
 | 
						|
#define USB_WAIT_PORT_STS_CHANGE_STALL  (100)
 | 
						|
 | 
						|
//
 | 
						|
// Host software return timeout if port status doesn't change
 | 
						|
// after 500ms(LOOP * STALL = 5000 * 0.1ms), set by experience
 | 
						|
//
 | 
						|
#define USB_WAIT_PORT_STS_CHANGE_LOOP  5000
 | 
						|
 | 
						|
//
 | 
						|
// 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 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 get configuration descriptor, set by experience
 | 
						|
//
 | 
						|
#define USB_GET_CONFIG_DESCRIPTOR_STALL  (1 * USB_BUS_1_MILLISECOND)
 | 
						|
 | 
						|
/**
 | 
						|
  Submits control transfer to a target USB device.
 | 
						|
 | 
						|
  @param  PeiServices            The pointer of EFI_PEI_SERVICES.
 | 
						|
  @param  This                   The pointer of PEI_USB_IO_PPI.
 | 
						|
  @param  Request                USB device request to send.
 | 
						|
  @param  Direction              Specifies the data direction for the data stage.
 | 
						|
  @param  Timeout                Indicates the maximum timeout, in millisecond. 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  Data                   Data buffer to be transmitted or received from USB device.
 | 
						|
  @param  DataLength             The size (in bytes) of the data buffer.
 | 
						|
 | 
						|
  @retval EFI_SUCCESS            Transfer was completed successfully.
 | 
						|
  @retval EFI_OUT_OF_RESOURCES   The transfer failed due to lack of resources.
 | 
						|
  @retval EFI_INVALID_PARAMETER  Some parameters are invalid.
 | 
						|
  @retval EFI_TIMEOUT            Transfer failed due to timeout.
 | 
						|
  @retval EFI_DEVICE_ERROR       Transfer failed due to host controller or device error.
 | 
						|
 | 
						|
**/
 | 
						|
EFI_STATUS
 | 
						|
EFIAPI
 | 
						|
PeiUsbControlTransfer (
 | 
						|
  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 bulk endpoint of a USB device.
 | 
						|
 | 
						|
  @param  PeiServices           The pointer of EFI_PEI_SERVICES.
 | 
						|
  @param  This                  The pointer of PEI_USB_IO_PPI.
 | 
						|
  @param  DeviceEndpoint        Endpoint number and its direction in bit 7.
 | 
						|
  @param  Data                  A pointer to the buffer of data to transmit
 | 
						|
                                from or receive into.
 | 
						|
  @param  DataLength            The length of the data buffer.
 | 
						|
  @param  Timeout               Indicates the maximum time, in millisecond, which 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.
 | 
						|
 | 
						|
  @retval EFI_SUCCESS           The transfer was completed successfully.
 | 
						|
  @retval EFI_OUT_OF_RESOURCES  The transfer failed due to lack of resource.
 | 
						|
  @retval EFI_INVALID_PARAMETER Parameters are invalid.
 | 
						|
  @retval EFI_TIMEOUT           The transfer failed due to timeout.
 | 
						|
  @retval EFI_DEVICE_ERROR      The transfer failed due to host controller error.
 | 
						|
 | 
						|
**/
 | 
						|
EFI_STATUS
 | 
						|
EFIAPI
 | 
						|
PeiUsbBulkTransfer (
 | 
						|
  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 the usb interface descriptor.
 | 
						|
 | 
						|
  @param  PeiServices          General-purpose services that are available to every PEIM.
 | 
						|
  @param  This                 Indicates the PEI_USB_IO_PPI instance.
 | 
						|
  @param  InterfaceDescriptor  Request interface descriptor.
 | 
						|
 | 
						|
 | 
						|
  @retval EFI_SUCCESS          Usb interface descriptor is obtained successfully.
 | 
						|
 | 
						|
**/
 | 
						|
EFI_STATUS
 | 
						|
EFIAPI
 | 
						|
PeiUsbGetInterfaceDescriptor (
 | 
						|
  IN  EFI_PEI_SERVICES              **PeiServices,
 | 
						|
  IN  PEI_USB_IO_PPI                *This,
 | 
						|
  OUT EFI_USB_INTERFACE_DESCRIPTOR  **InterfaceDescriptor
 | 
						|
  );
 | 
						|
 | 
						|
/**
 | 
						|
  Get the usb endpoint descriptor.
 | 
						|
 | 
						|
  @param  PeiServices          General-purpose services that are available to every PEIM.
 | 
						|
  @param  This                 Indicates the PEI_USB_IO_PPI instance.
 | 
						|
  @param  EndpointIndex        The valid index of the specified endpoint.
 | 
						|
  @param  EndpointDescriptor   Request endpoint descriptor.
 | 
						|
 | 
						|
  @retval EFI_SUCCESS       Usb endpoint descriptor is obtained successfully.
 | 
						|
  @retval EFI_NOT_FOUND     Usb endpoint descriptor is NOT found.
 | 
						|
 | 
						|
**/
 | 
						|
EFI_STATUS
 | 
						|
EFIAPI
 | 
						|
PeiUsbGetEndpointDescriptor (
 | 
						|
  IN  EFI_PEI_SERVICES             **PeiServices,
 | 
						|
  IN  PEI_USB_IO_PPI               *This,
 | 
						|
  IN  UINT8                        EndpointIndex,
 | 
						|
  OUT EFI_USB_ENDPOINT_DESCRIPTOR  **EndpointDescriptor
 | 
						|
  );
 | 
						|
 | 
						|
/**
 | 
						|
  Reset the port and re-configure the usb device.
 | 
						|
 | 
						|
  @param  PeiServices    General-purpose services that are available to every PEIM.
 | 
						|
  @param  This           Indicates the PEI_USB_IO_PPI instance.
 | 
						|
 | 
						|
  @retval EFI_SUCCESS    Usb device is reset and configured successfully.
 | 
						|
  @retval Others         Other failure occurs.
 | 
						|
 | 
						|
**/
 | 
						|
EFI_STATUS
 | 
						|
EFIAPI
 | 
						|
PeiUsbPortReset (
 | 
						|
  IN EFI_PEI_SERVICES  **PeiServices,
 | 
						|
  IN PEI_USB_IO_PPI    *This
 | 
						|
  );
 | 
						|
 | 
						|
/**
 | 
						|
  Send reset signal over the given root hub port.
 | 
						|
 | 
						|
  @param  PeiServices       Describes the list of possible PEI Services.
 | 
						|
  @param  UsbHcPpi          The pointer of PEI_USB_HOST_CONTROLLER_PPI instance.
 | 
						|
  @param  Usb2HcPpi         The pointer of PEI_USB2_HOST_CONTROLLER_PPI instance.
 | 
						|
  @param  PortNum           The port to be reset.
 | 
						|
  @param  RetryIndex        The retry times.
 | 
						|
 | 
						|
**/
 | 
						|
VOID
 | 
						|
ResetRootPort (
 | 
						|
  IN EFI_PEI_SERVICES              **PeiServices,
 | 
						|
  IN PEI_USB_HOST_CONTROLLER_PPI   *UsbHcPpi,
 | 
						|
  IN PEI_USB2_HOST_CONTROLLER_PPI  *Usb2HcPpi,
 | 
						|
  IN UINT8                         PortNum,
 | 
						|
  IN UINT8                         RetryIndex
 | 
						|
  );
 | 
						|
 | 
						|
#endif
 |