mirror of
				https://git.proxmox.com/git/mirror_edk2
				synced 2025-11-04 02:40:26 +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>
		
			
				
	
	
		
			230 lines
		
	
	
		
			7.3 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			230 lines
		
	
	
		
			7.3 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
/** @file
 | 
						|
 | 
						|
  Provides some data struct used by EHCI controller driver.
 | 
						|
 | 
						|
Copyright (c) 2006 - 2018, Intel Corporation. All rights reserved.<BR>
 | 
						|
Copyright (c) Microsoft Corporation.<BR>
 | 
						|
SPDX-License-Identifier: BSD-2-Clause-Patent
 | 
						|
 | 
						|
**/
 | 
						|
 | 
						|
#ifndef _EFI_EHCI_H_
 | 
						|
#define _EFI_EHCI_H_
 | 
						|
 | 
						|
#include <Uefi.h>
 | 
						|
 | 
						|
#include <Protocol/Usb2HostController.h>
 | 
						|
#include <Protocol/PciIo.h>
 | 
						|
 | 
						|
#include <Guid/EventGroup.h>
 | 
						|
 | 
						|
#include <Library/DebugLib.h>
 | 
						|
#include <Library/BaseMemoryLib.h>
 | 
						|
#include <Library/UefiDriverEntryPoint.h>
 | 
						|
#include <Library/UefiBootServicesTableLib.h>
 | 
						|
#include <Library/UefiLib.h>
 | 
						|
#include <Library/BaseLib.h>
 | 
						|
#include <Library/MemoryAllocationLib.h>
 | 
						|
#include <Library/PcdLib.h>
 | 
						|
#include <Library/ReportStatusCodeLib.h>
 | 
						|
 | 
						|
#include <IndustryStandard/Pci.h>
 | 
						|
 | 
						|
typedef struct _USB2_HC_DEV USB2_HC_DEV;
 | 
						|
 | 
						|
#include "UsbHcMem.h"
 | 
						|
#include "EhciReg.h"
 | 
						|
#include "EhciUrb.h"
 | 
						|
#include "EhciSched.h"
 | 
						|
#include "EhciDebug.h"
 | 
						|
#include "ComponentName.h"
 | 
						|
 | 
						|
//
 | 
						|
// EHC timeout experience values
 | 
						|
//
 | 
						|
 | 
						|
#define EHC_1_MICROSECOND  1
 | 
						|
#define EHC_1_MILLISECOND  (1000 * EHC_1_MICROSECOND)
 | 
						|
#define EHC_1_SECOND       (1000 * EHC_1_MILLISECOND)
 | 
						|
 | 
						|
//
 | 
						|
// EHCI register operation timeout, set by experience
 | 
						|
//
 | 
						|
#define EHC_RESET_TIMEOUT    (1 * EHC_1_SECOND)
 | 
						|
#define EHC_GENERIC_TIMEOUT  (10 * EHC_1_MILLISECOND)
 | 
						|
 | 
						|
//
 | 
						|
// Wait for roothub port power stable, refers to Spec[EHCI1.0-2.3.9]
 | 
						|
//
 | 
						|
#define EHC_ROOT_PORT_RECOVERY_STALL  (20 * EHC_1_MILLISECOND)
 | 
						|
 | 
						|
//
 | 
						|
// Sync and Async transfer polling interval, set by experience,
 | 
						|
// and the unit of Async is 100us, means 1ms as interval.
 | 
						|
//
 | 
						|
#define EHC_SYNC_POLL_INTERVAL   (1 * EHC_1_MILLISECOND)
 | 
						|
#define EHC_ASYNC_POLL_INTERVAL  EFI_TIMER_PERIOD_MILLISECONDS(1)
 | 
						|
 | 
						|
//
 | 
						|
// EHCI debug port control status register bit definition
 | 
						|
//
 | 
						|
#define USB_DEBUG_PORT_IN_USE       BIT10
 | 
						|
#define USB_DEBUG_PORT_ENABLE       BIT28
 | 
						|
#define USB_DEBUG_PORT_OWNER        BIT30
 | 
						|
#define USB_DEBUG_PORT_IN_USE_MASK  (USB_DEBUG_PORT_IN_USE |  \
 | 
						|
                                      USB_DEBUG_PORT_OWNER)
 | 
						|
 | 
						|
//
 | 
						|
// EHC raises TPL to TPL_NOTIFY to serialize all its operations
 | 
						|
// to protect shared data structures.
 | 
						|
//
 | 
						|
#define  EHC_TPL  TPL_NOTIFY
 | 
						|
 | 
						|
#define EFI_LIST_CONTAINER(Entry, Type, Field)  BASE_CR(Entry, Type, Field)
 | 
						|
 | 
						|
#define EHC_LOW_32BIT(Addr64)      ((UINT32)(((UINTN)(Addr64)) & 0XFFFFFFFF))
 | 
						|
#define EHC_HIGH_32BIT(Addr64)     ((UINT32)(RShiftU64((UINTN)(Addr64), 32) & 0XFFFFFFFF))
 | 
						|
#define EHC_BIT_IS_SET(Data, Bit)  ((BOOLEAN)(((Data) & (Bit)) == (Bit)))
 | 
						|
 | 
						|
#define EHC_REG_BIT_IS_SET(Ehc, Offset, Bit) \
 | 
						|
          (EHC_BIT_IS_SET(EhcReadOpReg ((Ehc), (Offset)), (Bit)))
 | 
						|
 | 
						|
#define USB2_HC_DEV_SIGNATURE  SIGNATURE_32 ('e', 'h', 'c', 'i')
 | 
						|
#define EHC_FROM_THIS(a)  CR(a, USB2_HC_DEV, Usb2Hc, USB2_HC_DEV_SIGNATURE)
 | 
						|
 | 
						|
struct _USB2_HC_DEV {
 | 
						|
  UINTN                       Signature;
 | 
						|
  EFI_USB2_HC_PROTOCOL        Usb2Hc;
 | 
						|
 | 
						|
  EFI_PCI_IO_PROTOCOL         *PciIo;
 | 
						|
  EFI_DEVICE_PATH_PROTOCOL    *DevicePath;
 | 
						|
  UINT64                      OriginalPciAttributes;
 | 
						|
  USBHC_MEM_POOL              *MemPool;
 | 
						|
 | 
						|
  //
 | 
						|
  // Schedule data shared between asynchronous and periodic
 | 
						|
  // transfers:
 | 
						|
  // ShortReadStop, as its name indicates, is used to terminate
 | 
						|
  // the short read except the control transfer. EHCI follows
 | 
						|
  // the alternative next QTD point when a short read happens.
 | 
						|
  // For control transfer, even the short read happens, try the
 | 
						|
  // status stage.
 | 
						|
  //
 | 
						|
  EHC_QTD                     *ShortReadStop;
 | 
						|
  EFI_EVENT                   PollTimer;
 | 
						|
 | 
						|
  //
 | 
						|
  // ExitBootServicesEvent is used to stop the EHC DMA operation
 | 
						|
  // after exit boot service.
 | 
						|
  //
 | 
						|
  EFI_EVENT                   ExitBootServiceEvent;
 | 
						|
 | 
						|
  //
 | 
						|
  // Asynchronous(bulk and control) transfer schedule data:
 | 
						|
  // ReclaimHead is used as the head of the asynchronous transfer
 | 
						|
  // list. It acts as the reclamation header.
 | 
						|
  //
 | 
						|
  EHC_QH                      *ReclaimHead;
 | 
						|
 | 
						|
  //
 | 
						|
  // Periodic (interrupt) transfer schedule data:
 | 
						|
  //
 | 
						|
  VOID                        *PeriodFrame;     // the buffer pointed by this pointer is used to store pci bus address of the QH descriptor.
 | 
						|
  VOID                        *PeriodFrameHost; // the buffer pointed by this pointer is used to store host memory address of the QH descriptor.
 | 
						|
  VOID                        *PeriodFrameMap;
 | 
						|
 | 
						|
  EHC_QH                      *PeriodOne;
 | 
						|
  LIST_ENTRY                  AsyncIntTransfers;
 | 
						|
 | 
						|
  //
 | 
						|
  // EHCI configuration data
 | 
						|
  //
 | 
						|
  UINT32                      HcStructParams; // Cache of HC structure parameter, EHC_HCSPARAMS_OFFSET
 | 
						|
  UINT32                      HcCapParams;    // Cache of HC capability parameter, HCCPARAMS
 | 
						|
  UINT32                      CapLen;         // Capability length
 | 
						|
 | 
						|
  //
 | 
						|
  // Misc
 | 
						|
  //
 | 
						|
  EFI_UNICODE_STRING_TABLE    *ControllerNameTable;
 | 
						|
 | 
						|
  //
 | 
						|
  // EHCI debug port info
 | 
						|
  //
 | 
						|
  UINT16                      DebugPortOffset; // The offset of debug port mmio register
 | 
						|
  UINT8                       DebugPortBarNum; // The bar number of debug port mmio register
 | 
						|
  UINT8                       DebugPortNum;    // The port number of usb debug port
 | 
						|
 | 
						|
  BOOLEAN                     Support64BitDma; // Whether 64 bit DMA may be used with this device
 | 
						|
};
 | 
						|
 | 
						|
extern EFI_DRIVER_BINDING_PROTOCOL   gEhciDriverBinding;
 | 
						|
extern EFI_COMPONENT_NAME_PROTOCOL   gEhciComponentName;
 | 
						|
extern EFI_COMPONENT_NAME2_PROTOCOL  gEhciComponentName2;
 | 
						|
 | 
						|
/**
 | 
						|
  Test to see if this driver supports ControllerHandle. Any
 | 
						|
  ControllerHandle that has Usb2HcProtocol installed will
 | 
						|
  be supported.
 | 
						|
 | 
						|
  @param  This                 Protocol instance pointer.
 | 
						|
  @param  Controller           Handle of device to test.
 | 
						|
  @param  RemainingDevicePath  Not used.
 | 
						|
 | 
						|
  @return EFI_SUCCESS          This driver supports this device.
 | 
						|
  @return EFI_UNSUPPORTED      This driver does not support this device.
 | 
						|
 | 
						|
**/
 | 
						|
EFI_STATUS
 | 
						|
EFIAPI
 | 
						|
EhcDriverBindingSupported (
 | 
						|
  IN EFI_DRIVER_BINDING_PROTOCOL  *This,
 | 
						|
  IN EFI_HANDLE                   Controller,
 | 
						|
  IN EFI_DEVICE_PATH_PROTOCOL     *RemainingDevicePath
 | 
						|
  );
 | 
						|
 | 
						|
/**
 | 
						|
  Starting the Usb EHCI Driver.
 | 
						|
 | 
						|
  @param  This                 Protocol instance pointer.
 | 
						|
  @param  Controller           Handle of device to test.
 | 
						|
  @param  RemainingDevicePath  Not used.
 | 
						|
 | 
						|
  @return EFI_SUCCESS          supports this device.
 | 
						|
  @return EFI_UNSUPPORTED      do not support this device.
 | 
						|
  @return EFI_DEVICE_ERROR     cannot be started due to device Error.
 | 
						|
  @return EFI_OUT_OF_RESOURCES cannot allocate resources.
 | 
						|
 | 
						|
**/
 | 
						|
EFI_STATUS
 | 
						|
EFIAPI
 | 
						|
EhcDriverBindingStart (
 | 
						|
  IN EFI_DRIVER_BINDING_PROTOCOL  *This,
 | 
						|
  IN EFI_HANDLE                   Controller,
 | 
						|
  IN EFI_DEVICE_PATH_PROTOCOL     *RemainingDevicePath
 | 
						|
  );
 | 
						|
 | 
						|
/**
 | 
						|
  Stop this driver on ControllerHandle. Support stopping any child handles
 | 
						|
  created by this driver.
 | 
						|
 | 
						|
  @param  This                 Protocol instance pointer.
 | 
						|
  @param  Controller           Handle of device to stop driver on.
 | 
						|
  @param  NumberOfChildren     Number of Children in the ChildHandleBuffer.
 | 
						|
  @param  ChildHandleBuffer    List of handles for the children we need to stop.
 | 
						|
 | 
						|
  @return EFI_SUCCESS          Success.
 | 
						|
  @return EFI_DEVICE_ERROR     Fail.
 | 
						|
 | 
						|
**/
 | 
						|
EFI_STATUS
 | 
						|
EFIAPI
 | 
						|
EhcDriverBindingStop (
 | 
						|
  IN EFI_DRIVER_BINDING_PROTOCOL  *This,
 | 
						|
  IN EFI_HANDLE                   Controller,
 | 
						|
  IN UINTN                        NumberOfChildren,
 | 
						|
  IN EFI_HANDLE                   *ChildHandleBuffer
 | 
						|
  );
 | 
						|
 | 
						|
#endif
 |