REF: https://bugzilla.tianocore.org/show_bug.cgi?id=313 Add PcdPcieResizableBarSupport to enable/disable PCIe Resizable BAR Capability fearture. Program the Resizable BAR Register if the device suports PCIe Resizable BAR Capability and PcdPcieResizableBarSupport is TRUE. Cc: Ray Ni <ray.ni@intel.com> Cc: Hao A Wu <hao.a.wu@intel.com> Signed-off-by: Heng Luo <heng.luo@intel.com> Reviewed-by: Ray Ni <ray.ni@intel.com>
		
			
				
	
	
		
			180 lines
		
	
	
		
			5.6 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			180 lines
		
	
	
		
			5.6 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
/** @file
 | 
						|
  Internal library declaration for PCI Bus module.
 | 
						|
 | 
						|
Copyright (c) 2006 - 2021, Intel Corporation. All rights reserved.<BR>
 | 
						|
SPDX-License-Identifier: BSD-2-Clause-Patent
 | 
						|
 | 
						|
**/
 | 
						|
 | 
						|
#ifndef _EFI_PCI_LIB_H_
 | 
						|
#define _EFI_PCI_LIB_H_
 | 
						|
 | 
						|
 | 
						|
typedef struct {
 | 
						|
  EFI_HANDLE            Handle;
 | 
						|
} EFI_DEVICE_HANDLE_EXTENDED_DATA_PAYLOAD;
 | 
						|
 | 
						|
typedef struct {
 | 
						|
  UINT32                             Bar;
 | 
						|
  UINT16                             DevicePathSize;
 | 
						|
  UINT16                             ReqResSize;
 | 
						|
  UINT16                             AllocResSize;
 | 
						|
  UINT8                              *DevicePath;
 | 
						|
  UINT8                              *ReqRes;
 | 
						|
  UINT8                              *AllocRes;
 | 
						|
} EFI_RESOURCE_ALLOC_FAILURE_ERROR_DATA_PAYLOAD;
 | 
						|
 | 
						|
typedef enum {
 | 
						|
  PciResizableBarMin = 0x00,
 | 
						|
  PciResizableBarMax = 0xFF
 | 
						|
} PCI_RESIZABLE_BAR_OPERATION;
 | 
						|
 | 
						|
/**
 | 
						|
  Retrieve the PCI Card device BAR information via PciIo interface.
 | 
						|
 | 
						|
  @param PciIoDevice        PCI Card device instance.
 | 
						|
 | 
						|
**/
 | 
						|
VOID
 | 
						|
GetBackPcCardBar (
 | 
						|
  IN  PCI_IO_DEVICE                  *PciIoDevice
 | 
						|
  );
 | 
						|
 | 
						|
/**
 | 
						|
  Remove rejected pci device from specific root bridge
 | 
						|
  handle.
 | 
						|
 | 
						|
  @param RootBridgeHandle  Specific parent root bridge handle.
 | 
						|
  @param Bridge            Bridge device instance.
 | 
						|
 | 
						|
**/
 | 
						|
VOID
 | 
						|
RemoveRejectedPciDevices (
 | 
						|
  IN EFI_HANDLE        RootBridgeHandle,
 | 
						|
  IN PCI_IO_DEVICE     *Bridge
 | 
						|
  );
 | 
						|
 | 
						|
/**
 | 
						|
  Submits the I/O and memory resource requirements for the specified PCI Host Bridge.
 | 
						|
 | 
						|
  @param PciResAlloc  Point to protocol instance of EFI_PCI_HOST_BRIDGE_RESOURCE_ALLOCATION_PROTOCOL.
 | 
						|
 | 
						|
  @retval EFI_SUCCESS           Successfully finished resource allocation.
 | 
						|
  @retval EFI_NOT_FOUND         Cannot get root bridge instance.
 | 
						|
  @retval EFI_OUT_OF_RESOURCES  Platform failed to program the resources if no hot plug supported.
 | 
						|
  @retval other                 Some error occurred when allocating resources for the PCI Host Bridge.
 | 
						|
 | 
						|
  @note   Feature flag PcdPciBusHotplugDeviceSupport determine whether need support hotplug.
 | 
						|
 | 
						|
**/
 | 
						|
EFI_STATUS
 | 
						|
PciHostBridgeResourceAllocator (
 | 
						|
  IN EFI_PCI_HOST_BRIDGE_RESOURCE_ALLOCATION_PROTOCOL *PciResAlloc
 | 
						|
  );
 | 
						|
 | 
						|
/**
 | 
						|
  Allocate NumberOfBuses buses and return the next available PCI bus number.
 | 
						|
 | 
						|
  @param  Bridge           Bridge device instance.
 | 
						|
  @param  StartBusNumber   Current available PCI bus number.
 | 
						|
  @param  NumberOfBuses    Number of buses enumerated below the StartBusNumber.
 | 
						|
  @param  NextBusNumber    Next available PCI bus number.
 | 
						|
 | 
						|
  @retval EFI_SUCCESS           Available bus number resource is enough. Next available PCI bus number
 | 
						|
                                is returned in NextBusNumber.
 | 
						|
  @retval EFI_OUT_OF_RESOURCES  Available bus number resource is not enough for allocation.
 | 
						|
 | 
						|
**/
 | 
						|
EFI_STATUS
 | 
						|
PciAllocateBusNumber (
 | 
						|
  IN PCI_IO_DEVICE                      *Bridge,
 | 
						|
  IN UINT8                              StartBusNumber,
 | 
						|
  IN UINT8                              NumberOfBuses,
 | 
						|
  OUT UINT8                             *NextBusNumber
 | 
						|
  );
 | 
						|
 | 
						|
/**
 | 
						|
  Scan pci bus and assign bus number to the given PCI bus system.
 | 
						|
 | 
						|
  @param  Bridge           Bridge device instance.
 | 
						|
  @param  StartBusNumber   start point.
 | 
						|
  @param  SubBusNumber     Point to sub bus number.
 | 
						|
  @param  PaddedBusRange   Customized bus number.
 | 
						|
 | 
						|
  @retval EFI_SUCCESS      Successfully scanned and assigned bus number.
 | 
						|
  @retval other            Some error occurred when scanning pci bus.
 | 
						|
 | 
						|
  @note   Feature flag PcdPciBusHotplugDeviceSupport determine whether need support hotplug.
 | 
						|
 | 
						|
**/
 | 
						|
EFI_STATUS
 | 
						|
PciScanBus (
 | 
						|
  IN PCI_IO_DEVICE                      *Bridge,
 | 
						|
  IN UINT8                              StartBusNumber,
 | 
						|
  OUT UINT8                             *SubBusNumber,
 | 
						|
  OUT UINT8                             *PaddedBusRange
 | 
						|
  );
 | 
						|
 | 
						|
/**
 | 
						|
  Process Option Rom on the specified root bridge.
 | 
						|
 | 
						|
  @param Bridge  Pci root bridge device instance.
 | 
						|
 | 
						|
  @retval EFI_SUCCESS   Success process.
 | 
						|
  @retval other         Some error occurred when processing Option Rom on the root bridge.
 | 
						|
 | 
						|
**/
 | 
						|
EFI_STATUS
 | 
						|
PciRootBridgeP2CProcess (
 | 
						|
  IN PCI_IO_DEVICE *Bridge
 | 
						|
  );
 | 
						|
 | 
						|
/**
 | 
						|
  Process Option Rom on the specified host bridge.
 | 
						|
 | 
						|
  @param PciResAlloc    Pointer to instance of EFI_PCI_HOST_BRIDGE_RESOURCE_ALLOCATION_PROTOCOL.
 | 
						|
 | 
						|
  @retval EFI_SUCCESS   Success process.
 | 
						|
  @retval EFI_NOT_FOUND Can not find the root bridge instance.
 | 
						|
  @retval other         Some error occurred when processing Option Rom on the host bridge.
 | 
						|
 | 
						|
**/
 | 
						|
EFI_STATUS
 | 
						|
PciHostBridgeP2CProcess (
 | 
						|
  IN EFI_PCI_HOST_BRIDGE_RESOURCE_ALLOCATION_PROTOCOL *PciResAlloc
 | 
						|
  );
 | 
						|
 | 
						|
/**
 | 
						|
  This function is used to enumerate the entire host bridge
 | 
						|
  in a given platform.
 | 
						|
 | 
						|
  @param PciResAlloc   A pointer to the PCI Host Resource Allocation protocol.
 | 
						|
 | 
						|
  @retval EFI_SUCCESS            Successfully enumerated the host bridge.
 | 
						|
  @retval EFI_OUT_OF_RESOURCES   No enough memory available.
 | 
						|
  @retval other                  Some error occurred when enumerating the host bridge.
 | 
						|
 | 
						|
**/
 | 
						|
EFI_STATUS
 | 
						|
PciHostBridgeEnumerator (
 | 
						|
  IN EFI_PCI_HOST_BRIDGE_RESOURCE_ALLOCATION_PROTOCOL  *PciResAlloc
 | 
						|
  );
 | 
						|
 | 
						|
/**
 | 
						|
  This function is used to program the Resizable BAR Register.
 | 
						|
 | 
						|
  @param PciIoDevice            A pointer to the PCI_IO_DEVICE.
 | 
						|
  @param ResizableBarOp         PciResizableBarMax: Set BAR to max size
 | 
						|
                                PciResizableBarMin: set BAR to min size.
 | 
						|
 | 
						|
  @retval EFI_SUCCESS           Successfully enumerated the host bridge.
 | 
						|
  @retval other                 Some error occurred when enumerating the host bridge.
 | 
						|
 | 
						|
**/
 | 
						|
EFI_STATUS
 | 
						|
PciProgramResizableBar (
 | 
						|
  IN PCI_IO_DEVICE                *PciIoDevice,
 | 
						|
  IN PCI_RESIZABLE_BAR_OPERATION  ResizableBarOp
 | 
						|
  );
 | 
						|
#endif
 |