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.
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