1. Impl PI 1.2 PCI part. Major changes include:
a. Update PciBusDxe module, and move it from IntelFrameworkModulePkg to MdeModulePkg b. Move IncompatiblePciDeviceSupportDxe module from IntelFrameworkModulePkg to MdeModulePkg c. Update the related consumes in inf/dsc/fdf git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@9347 6f19259b-4bc3-4df7-8a09-765794883524
This commit is contained in:
492
MdeModulePkg/Bus/Pci/PciBusDxe/PciResourceSupport.h
Normal file
492
MdeModulePkg/Bus/Pci/PciBusDxe/PciResourceSupport.h
Normal file
@@ -0,0 +1,492 @@
|
||||
/** @file
|
||||
PCI resouces support functions declaration for PCI Bus module.
|
||||
|
||||
Copyright (c) 2006 - 2009, 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_RESOURCE_SUPPORT_H_
|
||||
#define _EFI_PCI_RESOURCE_SUPPORT_H_
|
||||
|
||||
typedef enum {
|
||||
PciResUsageTypical = 0,
|
||||
PciResUsagePadding,
|
||||
PciResUsageOptionRomProcessing
|
||||
} 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
|
||||
resoure 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 prefectchable 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 resouce node for given bridge device.
|
||||
|
||||
**/
|
||||
VOID
|
||||
CalculateResourceAperture (
|
||||
IN PCI_RESOURCE_NODE *Bridge
|
||||
);
|
||||
|
||||
/**
|
||||
Get IO/Memory resource infor 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 extract resource request from
|
||||
IOV VF 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.
|
||||
|
||||
**/
|
||||
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 progammed.
|
||||
@param Bridge PCI resource node for the bridge device.
|
||||
|
||||
@retval EFI_SUCCESS Successfully to program all resouces
|
||||
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 progammed.
|
||||
@param Node Point to resoure 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 progammed.
|
||||
@param Node Point to resoure node structure.
|
||||
|
||||
**/
|
||||
EFI_STATUS
|
||||
ProgramVfBar (
|
||||
IN UINT64 Base,
|
||||
IN PCI_RESOURCE_NODE *Node
|
||||
);
|
||||
|
||||
/**
|
||||
Program PCI-PCI bridge apperture.
|
||||
|
||||
@param Base Base address for resource.
|
||||
@param Node Point to resoure node structure.
|
||||
|
||||
**/
|
||||
VOID
|
||||
ProgramPpbApperture (
|
||||
IN UINT64 Base,
|
||||
IN PCI_RESOURCE_NODE *Node
|
||||
);
|
||||
|
||||
/**
|
||||
Program parent bridge for Option Rom.
|
||||
|
||||
@param PciDevice Pci deivce instance.
|
||||
@param OptionRomBase Base address for Optiona Rom.
|
||||
@param Enable Enable or disable PCI memory.
|
||||
|
||||
**/
|
||||
VOID
|
||||
ProgrameUpstreamBridgeForRom (
|
||||
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
|
||||
);
|
||||
|
||||
/**
|
||||
Get all resource information for given Pci device.
|
||||
|
||||
@param PciDev Pci device instance.
|
||||
@param IoBridge Io resource node.
|
||||
@param Mem32Bridge 32-bit memory node.
|
||||
@param PMem32Bridge 32-bit Pmemory node.
|
||||
@param Mem64Bridge 64-bit memory node.
|
||||
@param PMem64Bridge 64-bit PMemory node.
|
||||
@param IoPool Link list header for Io resource.
|
||||
@param Mem32Pool Link list header for 32-bit memory.
|
||||
@param PMem32Pool Link list header for 32-bit Prefetchable memory.
|
||||
@param Mem64Pool Link list header for 64-bit memory.
|
||||
@param PMem64Pool Link list header for 64-bit Prefetchable memory.
|
||||
|
||||
**/
|
||||
VOID
|
||||
GetResourceMap (
|
||||
IN PCI_IO_DEVICE *PciDev,
|
||||
IN PCI_RESOURCE_NODE **IoBridge,
|
||||
IN PCI_RESOURCE_NODE **Mem32Bridge,
|
||||
IN PCI_RESOURCE_NODE **PMem32Bridge,
|
||||
IN PCI_RESOURCE_NODE **Mem64Bridge,
|
||||
IN PCI_RESOURCE_NODE **PMem64Bridge,
|
||||
IN PCI_RESOURCE_NODE *IoPool,
|
||||
IN PCI_RESOURCE_NODE *Mem32Pool,
|
||||
IN PCI_RESOURCE_NODE *PMem32Pool,
|
||||
IN PCI_RESOURCE_NODE *Mem64Pool,
|
||||
IN PCI_RESOURCE_NODE *PMem64Pool
|
||||
);
|
||||
|
||||
/**
|
||||
Destory 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
|
Reference in New Issue
Block a user