On 01/08/16 02:16, Ni, Ruiyu wrote: > On 2016/1/8 3:19, Laszlo Ersek wrote: >> On 01/07/16 06:10, Ruiyu Ni wrote: >>> PciHostBridgeDxe driver needs PciHostBridgeLib implemented by platform >>> to provide the root bridge related information and may call into >>> PciHostBridgeLib when resource conflicts happen. >>> >>> Contributed-under: TianoCore Contribution Agreement 1.0 >>> Signed-off-by: Ruiyu Ni <[email protected]> >>> Cc: Feng Tian <[email protected]> >>> Cc: Jeff Fan <[email protected]> >>> Cc: Michael Kinney <[email protected]> >>> >>> # Conflicts: >>> # MdeModulePkg/MdeModulePkg.dec >>> >>> Signed-off-by: Ruiyu Ni <[email protected]> >>> --- >>> MdeModulePkg/Include/Library/PciHostBridgeLib.h | 86 >>> +++++++++++++++++++++++++ >>> MdeModulePkg/MdeModulePkg.dec | 6 +- >>> 2 files changed, 91 insertions(+), 1 deletion(-) >>> create mode 100644 MdeModulePkg/Include/Library/PciHostBridgeLib.h >>> >>> diff --git a/MdeModulePkg/Include/Library/PciHostBridgeLib.h >>> b/MdeModulePkg/Include/Library/PciHostBridgeLib.h >>> new file mode 100644 >>> index 0000000..da87502 >>> --- /dev/null >>> +++ b/MdeModulePkg/Include/Library/PciHostBridgeLib.h >>> @@ -0,0 +1,86 @@ >>> +/** @file >>> + PCI Host Bridge Library consumed by PciHostBridgeDxe driver returning >>> + the platform specific information about the PCI Host Bridge. >>> + >>> + Copyright (c) 2016, Intel Corporation. All rights reserved.<BR> >>> + 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 _PCI_HOST_BRIDGE_LIB_H__ >>> +#define _PCI_HOST_BRIDGE_LIB_H__ >>> + >>> +typedef struct { >>> + UINT64 Base; >>> + UINT64 Limit; >>> +} PCI_ROOT_BRIDGE_APERTURE; >>> + >>> +typedef struct { >>> + UINT32 Segment; >>> + UINT64 Supports; >>> + UINT64 Attributes; >>> + BOOLEAN DmaAbove4G; >>> + UINT64 AllocationAttributes; // >>> PMEM_MEM_COMBINE/ MEM64 >>> + PCI_ROOT_BRIDGE_APERTURE Bus; >>> + PCI_ROOT_BRIDGE_APERTURE Io; >>> + PCI_ROOT_BRIDGE_APERTURE Mem; >>> + PCI_ROOT_BRIDGE_APERTURE MemAbove4G; >>> + PCI_ROOT_BRIDGE_APERTURE PMem; >>> + PCI_ROOT_BRIDGE_APERTURE PMemAbove4G; >>> + EFI_DEVICE_PATH_PROTOCOL *DevicePath; >>> +} PCI_ROOT_BRIDGE; >> >> Could you document here how a library instance can signal that a given >> kind of aperture is not available? >> > sure. I will document it in the library class header file as the > comments for PCI_ROOT_BRIDGE_APERTURE. > Limit < Base indicates an aperture is not available. >>> + >>> +/** >>> + Return all the root bridge instances in an array. >>> + >>> + @param Count Return the count of root bridge instances. >>> + >>> + @return All the root bridge instances in an array. >>> + The array should be passed into >>> PciHostBridgeFreeRootBridges() >>> + when it's not used. >>> +**/ >>> +PCI_ROOT_BRIDGE * >>> +EFIAPI >>> +PciHostBridgeGetRootBridges ( >>> + UINTN *Count >>> + ); >> >> Is this function allowed to fail, and/or return zero bridges? >> > Failure of this function will cause the PciHostBridgeDxe fail to start. > >>> + >>> +/** >>> + Free the root bridge instances array returned from >>> PciHostBridgeGetRootBridges(). >>> + >>> + @param The root bridge instances array. >>> + @param The count of the array. >>> +**/ >>> +VOID >>> +EFIAPI >>> +PciHostBridgeFreeRootBridges ( >>> + PCI_ROOT_BRIDGE *Bridges, >>> + UINTN Count >>> + ); >>> + >>> +/** >>> + Inform the platform that the resource conflict happens. >>> + >>> + @param HostBridgeHandle Handle of the Host Bridge. >>> + @param Configuration Pointer to PCI I/O and PCI memory resource >>> descriptors. >>> + The Configuration contains the resources >>> for all the >>> + root bridges. The resource for each root >>> bridge is >>> + terminated with END descriptor and an >>> additional END >>> + is appended indicating the end of the >>> entire resources. >>> + The resource descriptor field values >>> follow the description >>> + in >>> EFI_PCI_HOST_BRIDGE_RESOURCE_ALLOCATION_PROTOCOL.SubmitResources(). >>> +**/ >>> +VOID >>> +EFIAPI >>> +PciHostBridgeResourceConflict ( >>> + EFI_HANDLE HostBridgeHandle, >>> + VOID *Configuration >>> + ); >> >> What is this function supposed to do? > Platform can have implementation to listen the resource conflict event. > A typical thing it can do is to reserve more MMIO / IO resources for the > PCI bus in next boot by saving the requested resource size to a NV > variable for example.
That makes a lot of sense (although it doesn't seem applicable to QEMU / OVMF specifically). Thanks! Laszlo > >> >> Thanks >> Laszlo >> >> >>> + >>> +#endif >>> \ No newline at end of file >>> diff --git a/MdeModulePkg/MdeModulePkg.dec >>> b/MdeModulePkg/MdeModulePkg.dec >>> index 0d8aede..5c5a9ee 100644 >>> --- a/MdeModulePkg/MdeModulePkg.dec >>> +++ b/MdeModulePkg/MdeModulePkg.dec >>> @@ -3,7 +3,7 @@ >>> # It also provides the definitions(including PPIs/PROTOCOLs/GUIDs >>> and library classes) >>> # and libraries instances, which are used for those modules. >>> # >>> -# Copyright (c) 2007 - 2015, Intel Corporation. All rights >>> reserved.<BR> >>> +# Copyright (c) 2007 - 2016, Intel Corporation. All rights >>> reserved.<BR> >>> # This program and the accompanying materials are licensed and made >>> available under >>> # the terms and conditions of the BSD License that accompanies this >>> distribution. >>> # The full text of the license may be found at >>> @@ -147,6 +147,10 @@ >>> # >>> IpmiLib|Include/Library/IpmiLib.h >>> >>> + ## @libraryclass Provides interfaces for platform to return root >>> bridge information to PciHostBridgeDxe driver. >>> + # >>> + PciHostBridgeLib|Include/Library/PciHostBridgeLib.h >>> + >>> [Guids] >>> ## MdeModule package token space guid >>> # Include/Guid/MdeModulePkgTokenSpace.h >>> > _______________________________________________ edk2-devel mailing list [email protected] https://lists.01.org/mailman/listinfo/edk2-devel

