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>
		
			
				
	
	
		
			457 lines
		
	
	
		
			12 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			457 lines
		
	
	
		
			12 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| /** @file
 | |
|   PCI resources support functions declaration for PCI Bus module.
 | |
| 
 | |
| Copyright (c) 2006 - 2019, Intel Corporation. All rights reserved.<BR>
 | |
| SPDX-License-Identifier: BSD-2-Clause-Patent
 | |
| 
 | |
| **/
 | |
| 
 | |
| #ifndef _EFI_PCI_RESOURCE_SUPPORT_H_
 | |
| #define _EFI_PCI_RESOURCE_SUPPORT_H_
 | |
| 
 | |
| typedef enum {
 | |
|   PciResUsageTypical,
 | |
|   PciResUsagePadding
 | |
| } PCI_RESOURCE_USAGE;
 | |
| 
 | |
| #define PCI_RESOURCE_SIGNATURE  SIGNATURE_32 ('p', 'c', 'r', 'c')
 | |
| 
 | |
| typedef struct {
 | |
|   UINT32                Signature;
 | |
|   LIST_ENTRY            Link;
 | |
|   LIST_ENTRY            ChildList;
 | |
|   PCI_IO_DEVICE         *PciDev;
 | |
|   UINT64                Alignment;
 | |
|   UINT64                Offset;
 | |
|   UINT8                 Bar;
 | |
|   PCI_BAR_TYPE          ResType;
 | |
|   UINT64                Length;
 | |
|   BOOLEAN               Reserved;
 | |
|   PCI_RESOURCE_USAGE    ResourceUsage;
 | |
|   BOOLEAN               Virtual;
 | |
| } PCI_RESOURCE_NODE;
 | |
| 
 | |
| #define RESOURCE_NODE_FROM_LINK(a) \
 | |
|   CR (a, PCI_RESOURCE_NODE, Link, PCI_RESOURCE_SIGNATURE)
 | |
| 
 | |
| /**
 | |
|   The function is used to skip VGA range.
 | |
| 
 | |
|   @param Start    Returned start address including VGA range.
 | |
|   @param Length   The length of VGA range.
 | |
| 
 | |
| **/
 | |
| VOID
 | |
| SkipVGAAperture (
 | |
|   OUT UINT64  *Start,
 | |
|   IN  UINT64  Length
 | |
|   );
 | |
| 
 | |
| /**
 | |
|   This function is used to skip ISA aliasing aperture.
 | |
| 
 | |
|   @param Start    Returned start address including ISA aliasing aperture.
 | |
|   @param Length   The length of ISA aliasing aperture.
 | |
| 
 | |
| **/
 | |
| VOID
 | |
| SkipIsaAliasAperture (
 | |
|   OUT UINT64  *Start,
 | |
|   IN  UINT64  Length
 | |
|   );
 | |
| 
 | |
| /**
 | |
|   This function inserts a resource node into the resource list.
 | |
|   The resource list is sorted in descend order.
 | |
| 
 | |
|   @param Bridge  PCI resource node for bridge.
 | |
|   @param ResNode Resource node want to be inserted.
 | |
| 
 | |
| **/
 | |
| VOID
 | |
| InsertResourceNode (
 | |
|   IN OUT PCI_RESOURCE_NODE  *Bridge,
 | |
|   IN     PCI_RESOURCE_NODE  *ResNode
 | |
|   );
 | |
| 
 | |
| /**
 | |
|   This routine is used to merge two different resource trees in need of
 | |
|   resource degradation.
 | |
| 
 | |
|   For example, if an upstream PPB doesn't support,
 | |
|   prefetchable memory decoding, the PCI bus driver will choose to call this function
 | |
|   to merge prefetchable memory resource list into normal memory list.
 | |
| 
 | |
|   If the TypeMerge is TRUE, Res resource type is changed to the type of destination resource
 | |
|   type.
 | |
|   If Dst is NULL or Res is NULL, ASSERT ().
 | |
| 
 | |
|   @param Dst        Point to destination resource tree.
 | |
|   @param Res        Point to source resource tree.
 | |
|   @param TypeMerge  If the TypeMerge is TRUE, Res resource type is changed to the type of
 | |
|                     destination resource type.
 | |
| 
 | |
| **/
 | |
| VOID
 | |
| MergeResourceTree (
 | |
|   IN PCI_RESOURCE_NODE  *Dst,
 | |
|   IN PCI_RESOURCE_NODE  *Res,
 | |
|   IN BOOLEAN            TypeMerge
 | |
|   );
 | |
| 
 | |
| /**
 | |
|   This function is used to calculate the IO16 aperture
 | |
|   for a bridge.
 | |
| 
 | |
|   @param Bridge    PCI resource node for bridge.
 | |
| 
 | |
| **/
 | |
| VOID
 | |
| CalculateApertureIo16 (
 | |
|   IN PCI_RESOURCE_NODE  *Bridge
 | |
|   );
 | |
| 
 | |
| /**
 | |
|   This function is used to calculate the resource aperture
 | |
|   for a given bridge device.
 | |
| 
 | |
|   @param Bridge      PCI resource node for given bridge device.
 | |
| 
 | |
| **/
 | |
| VOID
 | |
| CalculateResourceAperture (
 | |
|   IN PCI_RESOURCE_NODE  *Bridge
 | |
|   );
 | |
| 
 | |
| /**
 | |
|   Get IO/Memory resource info for given PCI device.
 | |
| 
 | |
|   @param PciDev     Pci device instance.
 | |
|   @param IoNode     Resource info node for IO .
 | |
|   @param Mem32Node  Resource info node for 32-bit memory.
 | |
|   @param PMem32Node Resource info node for 32-bit Prefetchable Memory.
 | |
|   @param Mem64Node  Resource info node for 64-bit memory.
 | |
|   @param PMem64Node Resource info node for 64-bit Prefetchable Memory.
 | |
| 
 | |
| **/
 | |
| VOID
 | |
| GetResourceFromDevice (
 | |
|   IN     PCI_IO_DEVICE      *PciDev,
 | |
|   IN OUT PCI_RESOURCE_NODE  *IoNode,
 | |
|   IN OUT PCI_RESOURCE_NODE  *Mem32Node,
 | |
|   IN OUT PCI_RESOURCE_NODE  *PMem32Node,
 | |
|   IN OUT PCI_RESOURCE_NODE  *Mem64Node,
 | |
|   IN OUT PCI_RESOURCE_NODE  *PMem64Node
 | |
|   );
 | |
| 
 | |
| /**
 | |
|   This function is used to create a resource node.
 | |
| 
 | |
|   @param PciDev       Pci device instance.
 | |
|   @param Length       Length of Io/Memory resource.
 | |
|   @param Alignment    Alignment of resource.
 | |
|   @param Bar          Bar index.
 | |
|   @param ResType      Type of resource: IO/Memory.
 | |
|   @param ResUsage     Resource usage.
 | |
| 
 | |
|   @return PCI resource node created for given PCI device.
 | |
|           NULL means PCI resource node is not created.
 | |
| 
 | |
| **/
 | |
| PCI_RESOURCE_NODE *
 | |
| CreateResourceNode (
 | |
|   IN PCI_IO_DEVICE       *PciDev,
 | |
|   IN UINT64              Length,
 | |
|   IN UINT64              Alignment,
 | |
|   IN UINT8               Bar,
 | |
|   IN PCI_BAR_TYPE        ResType,
 | |
|   IN PCI_RESOURCE_USAGE  ResUsage
 | |
|   );
 | |
| 
 | |
| /**
 | |
|   This function is used to create a IOV VF resource node.
 | |
| 
 | |
|   @param PciDev       Pci device instance.
 | |
|   @param Length       Length of Io/Memory resource.
 | |
|   @param Alignment    Alignment of resource.
 | |
|   @param Bar          Bar index.
 | |
|   @param ResType      Type of resource: IO/Memory.
 | |
|   @param ResUsage     Resource usage.
 | |
| 
 | |
|   @return PCI resource node created for given VF PCI device.
 | |
|           NULL means PCI resource node is not created.
 | |
| 
 | |
| **/
 | |
| PCI_RESOURCE_NODE *
 | |
| CreateVfResourceNode (
 | |
|   IN PCI_IO_DEVICE       *PciDev,
 | |
|   IN UINT64              Length,
 | |
|   IN UINT64              Alignment,
 | |
|   IN UINT8               Bar,
 | |
|   IN PCI_BAR_TYPE        ResType,
 | |
|   IN PCI_RESOURCE_USAGE  ResUsage
 | |
|   );
 | |
| 
 | |
| /**
 | |
|   This function is used to extract resource request from
 | |
|   device node list.
 | |
| 
 | |
|   @param Bridge     Pci device instance.
 | |
|   @param IoNode     Resource info node for IO.
 | |
|   @param Mem32Node  Resource info node for 32-bit memory.
 | |
|   @param PMem32Node Resource info node for 32-bit Prefetchable Memory.
 | |
|   @param Mem64Node  Resource info node for 64-bit memory.
 | |
|   @param PMem64Node Resource info node for 64-bit Prefetchable Memory.
 | |
| 
 | |
| **/
 | |
| VOID
 | |
| CreateResourceMap (
 | |
|   IN     PCI_IO_DEVICE      *Bridge,
 | |
|   IN OUT PCI_RESOURCE_NODE  *IoNode,
 | |
|   IN OUT PCI_RESOURCE_NODE  *Mem32Node,
 | |
|   IN OUT PCI_RESOURCE_NODE  *PMem32Node,
 | |
|   IN OUT PCI_RESOURCE_NODE  *Mem64Node,
 | |
|   IN OUT PCI_RESOURCE_NODE  *PMem64Node
 | |
|   );
 | |
| 
 | |
| /**
 | |
|   This function is used to do the resource padding for a specific platform.
 | |
| 
 | |
|   @param PciDev     Pci device instance.
 | |
|   @param IoNode     Resource info node for IO.
 | |
|   @param Mem32Node  Resource info node for 32-bit memory.
 | |
|   @param PMem32Node Resource info node for 32-bit Prefetchable Memory.
 | |
|   @param Mem64Node  Resource info node for 64-bit memory.
 | |
|   @param PMem64Node Resource info node for 64-bit Prefetchable Memory.
 | |
| 
 | |
| **/
 | |
| VOID
 | |
| ResourcePaddingPolicy (
 | |
|   IN PCI_IO_DEVICE      *PciDev,
 | |
|   IN PCI_RESOURCE_NODE  *IoNode,
 | |
|   IN PCI_RESOURCE_NODE  *Mem32Node,
 | |
|   IN PCI_RESOURCE_NODE  *PMem32Node,
 | |
|   IN PCI_RESOURCE_NODE  *Mem64Node,
 | |
|   IN PCI_RESOURCE_NODE  *PMem64Node
 | |
|   );
 | |
| 
 | |
| /**
 | |
|   This function is used to degrade resource if the upstream bridge
 | |
|   doesn't support certain resource. Degradation path is
 | |
|   PMEM64 -> MEM64  -> MEM32
 | |
|   PMEM64 -> PMEM32 -> MEM32
 | |
|   IO32   -> IO16.
 | |
| 
 | |
|   @param Bridge     Pci device instance.
 | |
|   @param Mem32Node  Resource info node for 32-bit memory.
 | |
|   @param PMem32Node Resource info node for 32-bit Prefetchable Memory.
 | |
|   @param Mem64Node  Resource info node for 64-bit memory.
 | |
|   @param PMem64Node Resource info node for 64-bit Prefetchable Memory.
 | |
| 
 | |
| **/
 | |
| VOID
 | |
| DegradeResource (
 | |
|   IN PCI_IO_DEVICE      *Bridge,
 | |
|   IN PCI_RESOURCE_NODE  *Mem32Node,
 | |
|   IN PCI_RESOURCE_NODE  *PMem32Node,
 | |
|   IN PCI_RESOURCE_NODE  *Mem64Node,
 | |
|   IN PCI_RESOURCE_NODE  *PMem64Node
 | |
|   );
 | |
| 
 | |
| /**
 | |
|   Test whether bridge device support decode resource.
 | |
| 
 | |
|   @param Bridge    Bridge device instance.
 | |
|   @param Decode    Decode type according to resource type.
 | |
| 
 | |
|   @return TRUE     The bridge device support decode resource.
 | |
|   @return FALSE    The bridge device don't support decode resource.
 | |
| 
 | |
| **/
 | |
| BOOLEAN
 | |
| BridgeSupportResourceDecode (
 | |
|   IN PCI_IO_DEVICE  *Bridge,
 | |
|   IN UINT32         Decode
 | |
|   );
 | |
| 
 | |
| /**
 | |
|   This function is used to program the resource allocated
 | |
|   for each resource node under specified bridge.
 | |
| 
 | |
|   @param Base     Base address of resource to be programmed.
 | |
|   @param Bridge   PCI resource node for the bridge device.
 | |
| 
 | |
|   @retval EFI_SUCCESS            Successfully to program all resources
 | |
|                                  on given PCI bridge device.
 | |
|   @retval EFI_OUT_OF_RESOURCES   Base is all one.
 | |
| 
 | |
| **/
 | |
| EFI_STATUS
 | |
| ProgramResource (
 | |
|   IN UINT64             Base,
 | |
|   IN PCI_RESOURCE_NODE  *Bridge
 | |
|   );
 | |
| 
 | |
| /**
 | |
|   Program Bar register for PCI device.
 | |
| 
 | |
|   @param Base  Base address for PCI device resource to be programmed.
 | |
|   @param Node  Point to resource node structure.
 | |
| 
 | |
| **/
 | |
| VOID
 | |
| ProgramBar (
 | |
|   IN UINT64             Base,
 | |
|   IN PCI_RESOURCE_NODE  *Node
 | |
|   );
 | |
| 
 | |
| /**
 | |
|   Program IOV VF Bar register for PCI device.
 | |
| 
 | |
|   @param Base  Base address for PCI device resource to be programmed.
 | |
|   @param Node  Point to resource node structure.
 | |
| 
 | |
| **/
 | |
| EFI_STATUS
 | |
| ProgramVfBar (
 | |
|   IN UINT64             Base,
 | |
|   IN PCI_RESOURCE_NODE  *Node
 | |
|   );
 | |
| 
 | |
| /**
 | |
|   Program PCI-PCI bridge aperture.
 | |
| 
 | |
|   @param Base  Base address for resource.
 | |
|   @param Node  Point to resource node structure.
 | |
| 
 | |
| **/
 | |
| VOID
 | |
| ProgramPpbApperture (
 | |
|   IN UINT64             Base,
 | |
|   IN PCI_RESOURCE_NODE  *Node
 | |
|   );
 | |
| 
 | |
| /**
 | |
|   Program parent bridge for Option Rom.
 | |
| 
 | |
|   @param PciDevice      Pci device instance.
 | |
|   @param OptionRomBase  Base address for Option Rom.
 | |
|   @param Enable         Enable or disable PCI memory.
 | |
| 
 | |
| **/
 | |
| VOID
 | |
| ProgramUpstreamBridgeForRom (
 | |
|   IN PCI_IO_DEVICE  *PciDevice,
 | |
|   IN UINT32         OptionRomBase,
 | |
|   IN BOOLEAN        Enable
 | |
|   );
 | |
| 
 | |
| /**
 | |
|   Test whether resource exists for a bridge.
 | |
| 
 | |
|   @param Bridge  Point to resource node for a bridge.
 | |
| 
 | |
|   @retval TRUE   There is resource on the given bridge.
 | |
|   @retval FALSE  There isn't resource on the given bridge.
 | |
| 
 | |
| **/
 | |
| BOOLEAN
 | |
| ResourceRequestExisted (
 | |
|   IN PCI_RESOURCE_NODE  *Bridge
 | |
|   );
 | |
| 
 | |
| /**
 | |
|   Initialize resource pool structure.
 | |
| 
 | |
|   @param ResourcePool Point to resource pool structure. This pool
 | |
|                       is reset to all zero when returned.
 | |
|   @param ResourceType Type of resource.
 | |
| 
 | |
| **/
 | |
| VOID
 | |
| InitializeResourcePool (
 | |
|   IN OUT PCI_RESOURCE_NODE  *ResourcePool,
 | |
|   IN     PCI_BAR_TYPE       ResourceType
 | |
|   );
 | |
| 
 | |
| /**
 | |
|   Destroy given resource tree.
 | |
| 
 | |
|   @param Bridge  PCI resource root node of resource tree.
 | |
| 
 | |
| **/
 | |
| VOID
 | |
| DestroyResourceTree (
 | |
|   IN PCI_RESOURCE_NODE  *Bridge
 | |
|   );
 | |
| 
 | |
| /**
 | |
|   Insert resource padding for P2C.
 | |
| 
 | |
|   @param PciDev     Pci device instance.
 | |
|   @param IoNode     Resource info node for IO.
 | |
|   @param Mem32Node  Resource info node for 32-bit memory.
 | |
|   @param PMem32Node Resource info node for 32-bit Prefetchable Memory.
 | |
|   @param Mem64Node  Resource info node for 64-bit memory.
 | |
|   @param PMem64Node Resource info node for 64-bit Prefetchable Memory.
 | |
| 
 | |
| **/
 | |
| VOID
 | |
| ResourcePaddingForCardBusBridge (
 | |
|   IN PCI_IO_DEVICE      *PciDev,
 | |
|   IN PCI_RESOURCE_NODE  *IoNode,
 | |
|   IN PCI_RESOURCE_NODE  *Mem32Node,
 | |
|   IN PCI_RESOURCE_NODE  *PMem32Node,
 | |
|   IN PCI_RESOURCE_NODE  *Mem64Node,
 | |
|   IN PCI_RESOURCE_NODE  *PMem64Node
 | |
|   );
 | |
| 
 | |
| /**
 | |
|   Program PCI Card device register for given resource node.
 | |
| 
 | |
|   @param Base    Base address of PCI Card device to be programmed.
 | |
|   @param Node    Given resource node.
 | |
| 
 | |
| **/
 | |
| VOID
 | |
| ProgramP2C (
 | |
|   IN UINT64             Base,
 | |
|   IN PCI_RESOURCE_NODE  *Node
 | |
|   );
 | |
| 
 | |
| /**
 | |
|   Create padding resource node.
 | |
| 
 | |
|   @param PciDev     Pci device instance.
 | |
|   @param IoNode     Resource info node for IO.
 | |
|   @param Mem32Node  Resource info node for 32-bit memory.
 | |
|   @param PMem32Node Resource info node for 32-bit Prefetchable Memory.
 | |
|   @param Mem64Node  Resource info node for 64-bit memory.
 | |
|   @param PMem64Node Resource info node for 64-bit Prefetchable Memory.
 | |
| 
 | |
| **/
 | |
| VOID
 | |
| ApplyResourcePadding (
 | |
|   IN PCI_IO_DEVICE      *PciDev,
 | |
|   IN PCI_RESOURCE_NODE  *IoNode,
 | |
|   IN PCI_RESOURCE_NODE  *Mem32Node,
 | |
|   IN PCI_RESOURCE_NODE  *PMem32Node,
 | |
|   IN PCI_RESOURCE_NODE  *Mem64Node,
 | |
|   IN PCI_RESOURCE_NODE  *PMem64Node
 | |
|   );
 | |
| 
 | |
| /**
 | |
|   Get padding resource for PCI-PCI bridge.
 | |
| 
 | |
|   @param  PciIoDevice     PCI-PCI bridge device instance.
 | |
| 
 | |
|   @note   Feature flag PcdPciBusHotplugDeviceSupport determines
 | |
|           whether need to pad resource for them.
 | |
| **/
 | |
| VOID
 | |
| GetResourcePaddingPpb (
 | |
|   IN  PCI_IO_DEVICE  *PciIoDevice
 | |
|   );
 | |
| 
 | |
| #endif
 |