mirror of
				https://github.com/acidanthera/audk.git
				synced 2025-11-04 13:35:48 +01:00 
			
		
		
		
	git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@5820 6f19259b-4bc3-4df7-8a09-765794883524
		
			
				
	
	
		
			372 lines
		
	
	
		
			10 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			372 lines
		
	
	
		
			10 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
/**@file
 | 
						|
 | 
						|
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.             
 | 
						|
 | 
						|
**/
 | 
						|
 | 
						|
 | 
						|
#ifndef _EFI_PCI_ENUMERATOR_SUPPORT_H
 | 
						|
#define _EFI_PCI_ENUMERATOR_SUPPORT_H
 | 
						|
 | 
						|
/**
 | 
						|
  This routine is used to check whether the pci device is present.
 | 
						|
  
 | 
						|
  @param PciRootBridgeIo   Pointer to instance of EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL
 | 
						|
  @param Pci               Output buffer for PCI device structure
 | 
						|
  @param Bus               PCI bus NO
 | 
						|
  @param Device            PCI device NO
 | 
						|
  @param Func              PCI Func NO
 | 
						|
  
 | 
						|
  @retval EFI_NOT_FOUND device not present
 | 
						|
  @retval EFI_SUCCESS   device is found.
 | 
						|
**/
 | 
						|
EFI_STATUS
 | 
						|
PciDevicePresent (
 | 
						|
  IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL  *PciRootBridgeIo,
 | 
						|
  PCI_TYPE00                          *Pci,
 | 
						|
  UINT8                               Bus,
 | 
						|
  UINT8                               Device,
 | 
						|
  UINT8                               Func
 | 
						|
  );
 | 
						|
 | 
						|
/**
 | 
						|
  Collect all the resource information under this root bridge
 | 
						|
  A database that records all the information about pci device subject to this
 | 
						|
  root bridge will then be created.
 | 
						|
    
 | 
						|
  @param Bridge         Parent bridge instance
 | 
						|
  @param StartBusNumer  Bus number of begining 
 | 
						|
**/
 | 
						|
EFI_STATUS
 | 
						|
PciPciDeviceInfoCollector (
 | 
						|
  IN PCI_IO_DEVICE                      *Bridge,
 | 
						|
  UINT8                                 StartBusNumber
 | 
						|
  );
 | 
						|
 | 
						|
/**
 | 
						|
  Seach required device and get PCI device info block
 | 
						|
  
 | 
						|
  @param Bridge     Parent bridge instance
 | 
						|
  @param Pci        Output of PCI device info block
 | 
						|
  @param Bus        PCI bus NO.
 | 
						|
  @param Device     PCI device NO.
 | 
						|
  @param Func       PCI func  NO.
 | 
						|
  @param PciDevice  output of searched PCI device instance
 | 
						|
**/
 | 
						|
EFI_STATUS
 | 
						|
PciSearchDevice (
 | 
						|
  IN PCI_IO_DEVICE                      *Bridge,
 | 
						|
  PCI_TYPE00                            *Pci,
 | 
						|
  UINT8                                 Bus,
 | 
						|
  UINT8                                 Device,
 | 
						|
  UINT8                                 Func,
 | 
						|
  PCI_IO_DEVICE                         **PciDevice
 | 
						|
  );
 | 
						|
 | 
						|
/**
 | 
						|
  Create PCI private data for PCI device
 | 
						|
  
 | 
						|
  @param Bridge Parent bridge instance
 | 
						|
  @param Pci    PCI bar block
 | 
						|
  @param Bus    PCI device Bus NO.
 | 
						|
  @param Device PCI device DeviceNO.
 | 
						|
  @param Func   PCI device's func NO.
 | 
						|
  
 | 
						|
  @return new PCI device's private date structure.
 | 
						|
**/
 | 
						|
PCI_IO_DEVICE             *
 | 
						|
GatherDeviceInfo (
 | 
						|
  IN PCI_IO_DEVICE                    *Bridge,
 | 
						|
  IN PCI_TYPE00                       *Pci,
 | 
						|
  UINT8                               Bus,
 | 
						|
  UINT8                               Device,
 | 
						|
  UINT8                               Func
 | 
						|
  );
 | 
						|
 | 
						|
/**
 | 
						|
  Create private data for bridge device's PPB.
 | 
						|
  
 | 
						|
  @param Bridge     Parent bridge 
 | 
						|
  @param Pci        Pci device block
 | 
						|
  @param Bus        Bridge device's bus NO.
 | 
						|
  @param Device     Bridge device's device NO.
 | 
						|
  @param Func       Bridge device's func NO.
 | 
						|
  
 | 
						|
  @return bridge device instance
 | 
						|
**/
 | 
						|
PCI_IO_DEVICE             *
 | 
						|
GatherPpbInfo (
 | 
						|
  IN PCI_IO_DEVICE                    *Bridge,
 | 
						|
  IN PCI_TYPE00                       *Pci,
 | 
						|
  UINT8                               Bus,
 | 
						|
  UINT8                               Device,
 | 
						|
  UINT8                               Func
 | 
						|
  );
 | 
						|
 | 
						|
/**
 | 
						|
  Create private data for hotplug bridge device
 | 
						|
  
 | 
						|
  @param Bridge Parent bridge instance
 | 
						|
  @param Pci    PCI bar block
 | 
						|
  @param Bus    hotplug bridge device's bus NO.
 | 
						|
  @param Device hotplug bridge device's device NO.
 | 
						|
  @param Func   hotplug bridge device's Func NO.
 | 
						|
  
 | 
						|
  @return hotplug bridge device instance
 | 
						|
**/
 | 
						|
PCI_IO_DEVICE             *
 | 
						|
GatherP2CInfo (
 | 
						|
  IN PCI_IO_DEVICE                    *Bridge,
 | 
						|
  IN PCI_TYPE00                       *Pci,
 | 
						|
  UINT8                               Bus,
 | 
						|
  UINT8                               Device,
 | 
						|
  UINT8                               Func
 | 
						|
  );
 | 
						|
 | 
						|
/**
 | 
						|
  Create device path for pci deivce
 | 
						|
  
 | 
						|
  @param ParentDevicePath  Parent bridge's path
 | 
						|
  @param PciIoDevice       Pci device instance
 | 
						|
  
 | 
						|
  @return device path protocol instance for specific pci device.
 | 
						|
**/
 | 
						|
EFI_DEVICE_PATH_PROTOCOL  *
 | 
						|
CreatePciDevicePath (
 | 
						|
  IN  EFI_DEVICE_PATH_PROTOCOL *ParentDevicePath,
 | 
						|
  IN  PCI_IO_DEVICE            *PciIoDevice
 | 
						|
  );
 | 
						|
 | 
						|
/**
 | 
						|
  Check the bar is existed or not.
 | 
						|
 | 
						|
  @param PciIoDevice       - A pointer to the PCI_IO_DEVICE.
 | 
						|
  @param Offset            - The offset.
 | 
						|
  @param BarLengthValue    - The bar length value.
 | 
						|
  @param OriginalBarValue  - The original bar value.
 | 
						|
 | 
						|
  @retval EFI_NOT_FOUND     - The bar don't exist.
 | 
						|
  @retval EFI_SUCCESS       - The bar exist.
 | 
						|
 | 
						|
**/
 | 
						|
EFI_STATUS
 | 
						|
BarExisted (
 | 
						|
  IN PCI_IO_DEVICE *PciIoDevice,
 | 
						|
  IN UINTN         Offset,
 | 
						|
  OUT UINT32       *BarLengthValue,
 | 
						|
  OUT UINT32       *OriginalBarValue
 | 
						|
  );
 | 
						|
 | 
						|
/**
 | 
						|
  Test whether the device can support attributes 
 | 
						|
  
 | 
						|
  @param PciIoDevice   Pci device instance
 | 
						|
  @param Command       Command register value.
 | 
						|
  @param BridgeControl Bridge control value for PPB or P2C.
 | 
						|
  @param OldCommand    Old command register offset
 | 
						|
  @param OldBridgeControl Old Bridge control value for PPB or P2C.
 | 
						|
  
 | 
						|
  @return EFI_SUCCESS
 | 
						|
**/
 | 
						|
EFI_STATUS
 | 
						|
PciTestSupportedAttribute (
 | 
						|
  IN PCI_IO_DEVICE                      *PciIoDevice,
 | 
						|
  IN UINT16                             *Command,
 | 
						|
  IN UINT16                             *BridgeControl,
 | 
						|
  IN UINT16                             *OldCommand,
 | 
						|
  IN UINT16                             *OldBridgeControl
 | 
						|
  );
 | 
						|
 | 
						|
/**
 | 
						|
  Set the supported or current attributes of a PCI device
 | 
						|
  
 | 
						|
  @param PciIoDevice   - Structure pointer for PCI device.
 | 
						|
  @param Command       - Command register value.
 | 
						|
  @param BridgeControl - Bridge control value for PPB or P2C.
 | 
						|
  @param Option        - Make a choice of EFI_SET_SUPPORTS or EFI_SET_ATTRIBUTES.
 | 
						|
  
 | 
						|
**/
 | 
						|
EFI_STATUS
 | 
						|
PciSetDeviceAttribute (
 | 
						|
  IN PCI_IO_DEVICE                      *PciIoDevice,
 | 
						|
  IN UINT16                             Command,
 | 
						|
  IN UINT16                             BridgeControl,
 | 
						|
  IN UINTN                              Option
 | 
						|
  );
 | 
						|
 | 
						|
/**
 | 
						|
  Determine if the device can support Fast Back to Back attribute
 | 
						|
  
 | 
						|
  @param PciIoDevice  Pci device instance
 | 
						|
  @param StatusIndex  Status register value
 | 
						|
**/
 | 
						|
EFI_STATUS
 | 
						|
GetFastBackToBackSupport (
 | 
						|
  IN PCI_IO_DEVICE                      *PciIoDevice,
 | 
						|
  IN UINT8                              StatusIndex
 | 
						|
  );
 | 
						|
 | 
						|
/**
 | 
						|
 Determine the related attributes of all devices under a Root Bridge
 | 
						|
 
 | 
						|
 @param PciIoDevice   PCI device instance
 | 
						|
 
 | 
						|
**/
 | 
						|
EFI_STATUS
 | 
						|
DetermineDeviceAttribute (
 | 
						|
  IN PCI_IO_DEVICE                      *PciIoDevice
 | 
						|
  );
 | 
						|
 | 
						|
/**
 | 
						|
  This routine is used to update the bar information for those incompatible PCI device
 | 
						|
  
 | 
						|
  @param PciIoDevice      Pci device instance
 | 
						|
  @return EFI_UNSUPPORTED failed to update Pci Info
 | 
						|
**/
 | 
						|
EFI_STATUS
 | 
						|
UpdatePciInfo (
 | 
						|
  IN PCI_IO_DEVICE  *PciIoDevice
 | 
						|
  );
 | 
						|
 | 
						|
/**
 | 
						|
  This routine will update the alignment with the new alignment
 | 
						|
  
 | 
						|
  @param Alignment old alignment
 | 
						|
  @param NewAlignment new alignment
 | 
						|
  
 | 
						|
**/
 | 
						|
VOID
 | 
						|
SetNewAlign (
 | 
						|
  IN UINT64 *Alignment,
 | 
						|
  IN UINT64 NewAlignment
 | 
						|
  );
 | 
						|
 | 
						|
/**
 | 
						|
  Parse PCI bar bit.
 | 
						|
  
 | 
						|
  @param PciIoDevice  Pci device instance
 | 
						|
  @param Offset       bar offset
 | 
						|
  @param BarIndex     bar index
 | 
						|
  
 | 
						|
  @return next bar offset.
 | 
						|
**/
 | 
						|
UINTN
 | 
						|
PciParseBar (
 | 
						|
  IN PCI_IO_DEVICE  *PciIoDevice,
 | 
						|
  IN UINTN          Offset,
 | 
						|
  IN UINTN          BarIndex
 | 
						|
  );
 | 
						|
 | 
						|
/**
 | 
						|
  This routine is used to initialize the bar of a PCI device
 | 
						|
  It can be called typically when a device is going to be rejected
 | 
						|
 | 
						|
  @param PciIoDevice Pci device instance
 | 
						|
**/
 | 
						|
EFI_STATUS
 | 
						|
InitializePciDevice (
 | 
						|
  IN PCI_IO_DEVICE *PciIoDevice
 | 
						|
  );
 | 
						|
 | 
						|
/**
 | 
						|
  Init PPB for bridge device
 | 
						|
  
 | 
						|
  @param  PciIoDevice Pci device instance
 | 
						|
**/
 | 
						|
EFI_STATUS
 | 
						|
InitializePpb (
 | 
						|
  IN PCI_IO_DEVICE *PciIoDevice
 | 
						|
  );
 | 
						|
 | 
						|
/**
 | 
						|
  Init private data for Hotplug bridge device
 | 
						|
  
 | 
						|
  @param PciIoDevice hotplug bridge device
 | 
						|
**/
 | 
						|
EFI_STATUS
 | 
						|
InitializeP2C (
 | 
						|
  IN PCI_IO_DEVICE *PciIoDevice
 | 
						|
  );
 | 
						|
 | 
						|
/**
 | 
						|
  Create and initiliaze general PCI I/O device instance for
 | 
						|
  PCI device/bridge device/hotplug bridge device.
 | 
						|
  
 | 
						|
  @param PciRootBridgeIo   Pointer to instance of EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL
 | 
						|
  @param Pci               Pci bar block
 | 
						|
  @param Bus               device Bus NO.
 | 
						|
  @param Device            device device NO.
 | 
						|
  @param Func              device func NO.
 | 
						|
  
 | 
						|
  @return instance of PCI device
 | 
						|
**/
 | 
						|
PCI_IO_DEVICE             *
 | 
						|
CreatePciIoDevice (
 | 
						|
  IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL  *PciRootBridgeIo,
 | 
						|
  IN PCI_TYPE00                       *Pci,
 | 
						|
  UINT8                               Bus,
 | 
						|
  UINT8                               Device,
 | 
						|
  UINT8                               Func
 | 
						|
  );
 | 
						|
 | 
						|
/**
 | 
						|
  This routine is used to enumerate entire pci bus system
 | 
						|
  in a given platform
 | 
						|
  It is only called on the second start on the same Root Bridge.
 | 
						|
 | 
						|
  @param Controller  Parent bridge handler
 | 
						|
  
 | 
						|
  @return status of operation.
 | 
						|
**/
 | 
						|
EFI_STATUS
 | 
						|
PciEnumeratorLight (
 | 
						|
  IN EFI_HANDLE                    Controller
 | 
						|
  );
 | 
						|
 | 
						|
/**
 | 
						|
  Get bus range.
 | 
						|
  
 | 
						|
  @param Descriptors  A pointer to the address space descriptor.
 | 
						|
  @param MinBus       The min bus.
 | 
						|
  @param MaxBus       The max bus.
 | 
						|
  @param BusRange     The bus range.
 | 
						|
  
 | 
						|
  @retval EFI_SUCCESS Success operation.
 | 
						|
  @retval EFI_NOT_FOUND  can not find the specific bus.
 | 
						|
**/
 | 
						|
EFI_STATUS
 | 
						|
PciGetBusRange (
 | 
						|
  IN     EFI_ACPI_ADDRESS_SPACE_DESCRIPTOR  **Descriptors,
 | 
						|
  OUT    UINT16                             *MinBus,
 | 
						|
  OUT    UINT16                             *MaxBus,
 | 
						|
  OUT    UINT16                             *BusRange
 | 
						|
  );
 | 
						|
 | 
						|
EFI_STATUS
 | 
						|
StartManagingRootBridge (
 | 
						|
  IN PCI_IO_DEVICE *RootBridgeDev
 | 
						|
  );
 | 
						|
 | 
						|
/**
 | 
						|
  This routine can be used to check whether a PCI device should be rejected when light enumeration
 | 
						|
 | 
						|
  @param PciIoDevice  Pci device instance
 | 
						|
 | 
						|
  @retval TRUE      This device should be rejected
 | 
						|
  @retval FALSE     This device shouldn't be rejected
 | 
						|
  
 | 
						|
**/
 | 
						|
BOOLEAN
 | 
						|
IsPciDeviceRejected (
 | 
						|
  IN PCI_IO_DEVICE *PciIoDevice
 | 
						|
  );
 | 
						|
 | 
						|
#endif
 |