+++ /dev/null
-/** @file\r
- PCI resouces support functions declaration for PCI Bus module.\r
-\r
-Copyright (c) 2006 - 2009, Intel Corporation\r
-All rights reserved. This program and the accompanying materials\r
-are licensed and made available under the terms and conditions of the BSD License\r
-which accompanies this distribution. The full text of the license may be found at\r
-http://opensource.org/licenses/bsd-license.php\r
-\r
-THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
-WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
-\r
-**/\r
-\r
-#ifndef _EFI_PCI_RESOURCE_SUPPORT_H_\r
-#define _EFI_PCI_RESOURCE_SUPPORT_H_\r
-\r
-typedef enum {\r
- PciResUsageTypical = 0,\r
- PciResUsagePadding,\r
- PciResUsageOptionRomProcessing\r
-} PCI_RESOURCE_USAGE;\r
-\r
-#define PCI_RESOURCE_SIGNATURE SIGNATURE_32 ('p', 'c', 'r', 'c')\r
-\r
-typedef struct {\r
- UINT32 Signature;\r
- LIST_ENTRY Link;\r
- LIST_ENTRY ChildList;\r
- PCI_IO_DEVICE *PciDev;\r
- UINT64 Alignment;\r
- UINT64 Offset;\r
- UINT8 Bar;\r
- PCI_BAR_TYPE ResType;\r
- UINT64 Length;\r
- BOOLEAN Reserved;\r
- PCI_RESOURCE_USAGE ResourceUsage;\r
- BOOLEAN Virtual;\r
-} PCI_RESOURCE_NODE;\r
-\r
-#define RESOURCE_NODE_FROM_LINK(a) \\r
- CR (a, PCI_RESOURCE_NODE, Link, PCI_RESOURCE_SIGNATURE)\r
-\r
-/**\r
- The function is used to skip VGA range.\r
-\r
- @param Start Returned start address including VGA range.\r
- @param Length The length of VGA range.\r
-\r
-**/\r
-VOID\r
-SkipVGAAperture (\r
- OUT UINT64 *Start,\r
- IN UINT64 Length\r
- );\r
-\r
-/**\r
- This function is used to skip ISA aliasing aperture.\r
-\r
- @param Start Returned start address including ISA aliasing aperture.\r
- @param Length The length of ISA aliasing aperture.\r
-\r
-**/\r
-VOID\r
-SkipIsaAliasAperture (\r
- OUT UINT64 *Start,\r
- IN UINT64 Length\r
- );\r
-\r
-/**\r
- This function inserts a resource node into the resource list.\r
- The resource list is sorted in descend order.\r
-\r
- @param Bridge PCI resource node for bridge.\r
- @param ResNode Resource node want to be inserted.\r
-\r
-**/\r
-VOID\r
-InsertResourceNode (\r
- IN OUT PCI_RESOURCE_NODE *Bridge,\r
- IN PCI_RESOURCE_NODE *ResNode\r
- );\r
-\r
-/**\r
- This routine is used to merge two different resource trees in need of\r
- resoure degradation.\r
-\r
- For example, if an upstream PPB doesn't support,\r
- prefetchable memory decoding, the PCI bus driver will choose to call this function\r
- to merge prefectchable memory resource list into normal memory list.\r
-\r
- If the TypeMerge is TRUE, Res resource type is changed to the type of destination resource\r
- type.\r
- If Dst is NULL or Res is NULL, ASSERT ().\r
-\r
- @param Dst Point to destination resource tree.\r
- @param Res Point to source resource tree.\r
- @param TypeMerge If the TypeMerge is TRUE, Res resource type is changed to the type of\r
- destination resource type.\r
-\r
-**/\r
-VOID\r
-MergeResourceTree (\r
- IN PCI_RESOURCE_NODE *Dst,\r
- IN PCI_RESOURCE_NODE *Res,\r
- IN BOOLEAN TypeMerge\r
- );\r
-\r
-/**\r
- This function is used to calculate the IO16 aperture\r
- for a bridge.\r
-\r
- @param Bridge PCI resource node for bridge.\r
-\r
-**/\r
-VOID\r
-CalculateApertureIo16 (\r
- IN PCI_RESOURCE_NODE *Bridge\r
- );\r
-\r
-/**\r
- This function is used to calculate the resource aperture\r
- for a given bridge device.\r
-\r
- @param Bridge PCI resouce node for given bridge device.\r
-\r
-**/\r
-VOID\r
-CalculateResourceAperture (\r
- IN PCI_RESOURCE_NODE *Bridge\r
- );\r
-\r
-/**\r
- Get IO/Memory resource infor for given PCI device.\r
-\r
- @param PciDev Pci device instance.\r
- @param IoNode Resource info node for IO .\r
- @param Mem32Node Resource info node for 32-bit memory.\r
- @param PMem32Node Resource info node for 32-bit Prefetchable Memory.\r
- @param Mem64Node Resource info node for 64-bit memory.\r
- @param PMem64Node Resource info node for 64-bit Prefetchable Memory.\r
-\r
-**/\r
-VOID\r
-GetResourceFromDevice (\r
- IN PCI_IO_DEVICE *PciDev,\r
- IN OUT PCI_RESOURCE_NODE *IoNode,\r
- IN OUT PCI_RESOURCE_NODE *Mem32Node,\r
- IN OUT PCI_RESOURCE_NODE *PMem32Node,\r
- IN OUT PCI_RESOURCE_NODE *Mem64Node,\r
- IN OUT PCI_RESOURCE_NODE *PMem64Node\r
- );\r
-\r
-/**\r
- This function is used to create a resource node.\r
-\r
- @param PciDev Pci device instance.\r
- @param Length Length of Io/Memory resource.\r
- @param Alignment Alignment of resource.\r
- @param Bar Bar index.\r
- @param ResType Type of resource: IO/Memory.\r
- @param ResUsage Resource usage.\r
-\r
- @return PCI resource node created for given PCI device.\r
- NULL means PCI resource node is not created.\r
-\r
-**/\r
-PCI_RESOURCE_NODE *\r
-CreateResourceNode (\r
- IN PCI_IO_DEVICE *PciDev,\r
- IN UINT64 Length,\r
- IN UINT64 Alignment,\r
- IN UINT8 Bar,\r
- IN PCI_BAR_TYPE ResType,\r
- IN PCI_RESOURCE_USAGE ResUsage\r
- );\r
-\r
-/**\r
- This function is used to extract resource request from\r
- IOV VF device node list.\r
-\r
- @param Bridge Pci device instance.\r
- @param IoNode Resource info node for IO.\r
- @param Mem32Node Resource info node for 32-bit memory.\r
- @param PMem32Node Resource info node for 32-bit Prefetchable Memory.\r
- @param Mem64Node Resource info node for 64-bit memory.\r
- @param PMem64Node Resource info node for 64-bit Prefetchable Memory.\r
-\r
-**/\r
-PCI_RESOURCE_NODE *\r
-CreateVfResourceNode (\r
- IN PCI_IO_DEVICE *PciDev,\r
- IN UINT64 Length,\r
- IN UINT64 Alignment,\r
- IN UINT8 Bar,\r
- IN PCI_BAR_TYPE ResType,\r
- IN PCI_RESOURCE_USAGE ResUsage\r
- );\r
-\r
-/**\r
- This function is used to extract resource request from\r
- device node list.\r
-\r
- @param Bridge Pci device instance.\r
- @param IoNode Resource info node for IO.\r
- @param Mem32Node Resource info node for 32-bit memory.\r
- @param PMem32Node Resource info node for 32-bit Prefetchable Memory.\r
- @param Mem64Node Resource info node for 64-bit memory.\r
- @param PMem64Node Resource info node for 64-bit Prefetchable Memory.\r
-\r
-**/\r
-VOID\r
-CreateResourceMap (\r
- IN PCI_IO_DEVICE *Bridge,\r
- IN OUT PCI_RESOURCE_NODE *IoNode,\r
- IN OUT PCI_RESOURCE_NODE *Mem32Node,\r
- IN OUT PCI_RESOURCE_NODE *PMem32Node,\r
- IN OUT PCI_RESOURCE_NODE *Mem64Node,\r
- IN OUT PCI_RESOURCE_NODE *PMem64Node\r
- );\r
-\r
-/**\r
- This function is used to do the resource padding for a specific platform.\r
-\r
- @param PciDev Pci device instance.\r
- @param IoNode Resource info node for IO.\r
- @param Mem32Node Resource info node for 32-bit memory.\r
- @param PMem32Node Resource info node for 32-bit Prefetchable Memory.\r
- @param Mem64Node Resource info node for 64-bit memory.\r
- @param PMem64Node Resource info node for 64-bit Prefetchable Memory.\r
-\r
-**/\r
-VOID\r
-ResourcePaddingPolicy (\r
- IN PCI_IO_DEVICE *PciDev,\r
- IN PCI_RESOURCE_NODE *IoNode,\r
- IN PCI_RESOURCE_NODE *Mem32Node,\r
- IN PCI_RESOURCE_NODE *PMem32Node,\r
- IN PCI_RESOURCE_NODE *Mem64Node,\r
- IN PCI_RESOURCE_NODE *PMem64Node\r
- );\r
-\r
-/**\r
- This function is used to degrade resource if the upstream bridge\r
- doesn't support certain resource. Degradation path is\r
- PMEM64 -> MEM64 -> MEM32\r
- PMEM64 -> PMEM32 -> MEM32\r
- IO32 -> IO16.\r
-\r
- @param Bridge Pci device instance.\r
- @param Mem32Node Resource info node for 32-bit memory.\r
- @param PMem32Node Resource info node for 32-bit Prefetchable Memory.\r
- @param Mem64Node Resource info node for 64-bit memory.\r
- @param PMem64Node Resource info node for 64-bit Prefetchable Memory.\r
-\r
-**/\r
-VOID\r
-DegradeResource (\r
- IN PCI_IO_DEVICE *Bridge,\r
- IN PCI_RESOURCE_NODE *Mem32Node,\r
- IN PCI_RESOURCE_NODE *PMem32Node,\r
- IN PCI_RESOURCE_NODE *Mem64Node,\r
- IN PCI_RESOURCE_NODE *PMem64Node\r
- );\r
-\r
-/**\r
- Test whether bridge device support decode resource.\r
-\r
- @param Bridge Bridge device instance.\r
- @param Decode Decode type according to resource type.\r
-\r
- @return TRUE The bridge device support decode resource.\r
- @return FALSE The bridge device don't support decode resource.\r
-\r
-**/\r
-BOOLEAN\r
-BridgeSupportResourceDecode (\r
- IN PCI_IO_DEVICE *Bridge,\r
- IN UINT32 Decode\r
- );\r
-\r
-/**\r
- This function is used to program the resource allocated\r
- for each resource node under specified bridge.\r
-\r
- @param Base Base address of resource to be progammed.\r
- @param Bridge PCI resource node for the bridge device.\r
-\r
- @retval EFI_SUCCESS Successfully to program all resouces\r
- on given PCI bridge device.\r
- @retval EFI_OUT_OF_RESOURCES Base is all one.\r
-\r
-**/\r
-EFI_STATUS\r
-ProgramResource (\r
- IN UINT64 Base,\r
- IN PCI_RESOURCE_NODE *Bridge\r
- );\r
-\r
-/**\r
- Program Bar register for PCI device.\r
-\r
- @param Base Base address for PCI device resource to be progammed.\r
- @param Node Point to resoure node structure.\r
-\r
-**/\r
-VOID\r
-ProgramBar (\r
- IN UINT64 Base,\r
- IN PCI_RESOURCE_NODE *Node\r
- );\r
-\r
-/**\r
- Program IOV VF Bar register for PCI device.\r
-\r
- @param Base Base address for PCI device resource to be progammed.\r
- @param Node Point to resoure node structure.\r
-\r
-**/\r
-EFI_STATUS\r
-ProgramVfBar (\r
- IN UINT64 Base,\r
- IN PCI_RESOURCE_NODE *Node\r
- );\r
-\r
-/**\r
- Program PCI-PCI bridge apperture.\r
-\r
- @param Base Base address for resource.\r
- @param Node Point to resoure node structure.\r
-\r
-**/\r
-VOID\r
-ProgramPpbApperture (\r
- IN UINT64 Base,\r
- IN PCI_RESOURCE_NODE *Node\r
- );\r
-\r
-/**\r
- Program parent bridge for Option Rom.\r
-\r
- @param PciDevice Pci deivce instance.\r
- @param OptionRomBase Base address for Optiona Rom.\r
- @param Enable Enable or disable PCI memory.\r
-\r
-**/\r
-VOID\r
-ProgrameUpstreamBridgeForRom (\r
- IN PCI_IO_DEVICE *PciDevice,\r
- IN UINT32 OptionRomBase,\r
- IN BOOLEAN Enable\r
- );\r
-\r
-/**\r
- Test whether resource exists for a bridge.\r
-\r
- @param Bridge Point to resource node for a bridge.\r
-\r
- @retval TRUE There is resource on the given bridge.\r
- @retval FALSE There isn't resource on the given bridge.\r
-\r
-**/\r
-BOOLEAN\r
-ResourceRequestExisted (\r
- IN PCI_RESOURCE_NODE *Bridge\r
- );\r
-\r
-/**\r
- Initialize resource pool structure.\r
-\r
- @param ResourcePool Point to resource pool structure. This pool\r
- is reset to all zero when returned.\r
- @param ResourceType Type of resource.\r
-\r
-**/\r
-VOID\r
-InitializeResourcePool (\r
- IN OUT PCI_RESOURCE_NODE *ResourcePool,\r
- IN PCI_BAR_TYPE ResourceType\r
- );\r
-\r
-/**\r
- Get all resource information for given Pci device.\r
-\r
- @param PciDev Pci device instance.\r
- @param IoBridge Io resource node.\r
- @param Mem32Bridge 32-bit memory node.\r
- @param PMem32Bridge 32-bit Pmemory node.\r
- @param Mem64Bridge 64-bit memory node.\r
- @param PMem64Bridge 64-bit PMemory node.\r
- @param IoPool Link list header for Io resource.\r
- @param Mem32Pool Link list header for 32-bit memory.\r
- @param PMem32Pool Link list header for 32-bit Prefetchable memory.\r
- @param Mem64Pool Link list header for 64-bit memory.\r
- @param PMem64Pool Link list header for 64-bit Prefetchable memory.\r
-\r
-**/\r
-VOID\r
-GetResourceMap (\r
- IN PCI_IO_DEVICE *PciDev,\r
- IN PCI_RESOURCE_NODE **IoBridge,\r
- IN PCI_RESOURCE_NODE **Mem32Bridge,\r
- IN PCI_RESOURCE_NODE **PMem32Bridge,\r
- IN PCI_RESOURCE_NODE **Mem64Bridge,\r
- IN PCI_RESOURCE_NODE **PMem64Bridge,\r
- IN PCI_RESOURCE_NODE *IoPool,\r
- IN PCI_RESOURCE_NODE *Mem32Pool,\r
- IN PCI_RESOURCE_NODE *PMem32Pool,\r
- IN PCI_RESOURCE_NODE *Mem64Pool,\r
- IN PCI_RESOURCE_NODE *PMem64Pool\r
- );\r
-\r
-/**\r
- Destory given resource tree.\r
-\r
- @param Bridge PCI resource root node of resource tree.\r
-\r
-**/\r
-VOID\r
-DestroyResourceTree (\r
- IN PCI_RESOURCE_NODE *Bridge\r
- );\r
-\r
-/**\r
- Insert resource padding for P2C.\r
-\r
- @param PciDev Pci device instance.\r
- @param IoNode Resource info node for IO.\r
- @param Mem32Node Resource info node for 32-bit memory.\r
- @param PMem32Node Resource info node for 32-bit Prefetchable Memory.\r
- @param Mem64Node Resource info node for 64-bit memory.\r
- @param PMem64Node Resource info node for 64-bit Prefetchable Memory.\r
-\r
-**/\r
-VOID\r
-ResourcePaddingForCardBusBridge (\r
- IN PCI_IO_DEVICE *PciDev,\r
- IN PCI_RESOURCE_NODE *IoNode,\r
- IN PCI_RESOURCE_NODE *Mem32Node,\r
- IN PCI_RESOURCE_NODE *PMem32Node,\r
- IN PCI_RESOURCE_NODE *Mem64Node,\r
- IN PCI_RESOURCE_NODE *PMem64Node\r
- );\r
-\r
-/**\r
- Program PCI Card device register for given resource node.\r
-\r
- @param Base Base address of PCI Card device to be programmed.\r
- @param Node Given resource node.\r
-\r
-**/\r
-VOID\r
-ProgramP2C (\r
- IN UINT64 Base,\r
- IN PCI_RESOURCE_NODE *Node\r
- );\r
-\r
-/**\r
- Create padding resource node.\r
-\r
- @param PciDev Pci device instance.\r
- @param IoNode Resource info node for IO.\r
- @param Mem32Node Resource info node for 32-bit memory.\r
- @param PMem32Node Resource info node for 32-bit Prefetchable Memory.\r
- @param Mem64Node Resource info node for 64-bit memory.\r
- @param PMem64Node Resource info node for 64-bit Prefetchable Memory.\r
-\r
-**/\r
-VOID\r
-ApplyResourcePadding (\r
- IN PCI_IO_DEVICE *PciDev,\r
- IN PCI_RESOURCE_NODE *IoNode,\r
- IN PCI_RESOURCE_NODE *Mem32Node,\r
- IN PCI_RESOURCE_NODE *PMem32Node,\r
- IN PCI_RESOURCE_NODE *Mem64Node,\r
- IN PCI_RESOURCE_NODE *PMem64Node\r
- );\r
-\r
-/**\r
- Get padding resource for PCI-PCI bridge.\r
-\r
- @param PciIoDevice PCI-PCI bridge device instance.\r
-\r
- @note Feature flag PcdPciBusHotplugDeviceSupport determines\r
- whether need to pad resource for them.\r
-**/\r
-VOID\r
-GetResourcePaddingPpb (\r
- IN PCI_IO_DEVICE *PciIoDevice\r
- );\r
-\r
-#endif\r