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 <ruiyu...@intel.com>
Cc: Feng Tian <feng.t...@intel.com>
Cc: Jeff Fan <jeff....@intel.com>
Cc: Michael Kinney <michael.d.kin...@intel.com>
---
 MdeModulePkg/Include/Library/PciHostBridgeLib.h | 97 +++++++++++++++++++++++++
 MdeModulePkg/MdeModulePkg.dec                   |  6 +-
 2 files changed, 102 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..d2267ad
--- /dev/null
+++ b/MdeModulePkg/Include/Library/PciHostBridgeLib.h
@@ -0,0 +1,97 @@
+/** @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__
+
+//
+// (Base > Limit) indicates an aperture is not available.
+//
+typedef struct {
+  UINT64 Base;
+  UINT64 Limit;
+} PCI_ROOT_BRIDGE_APERTURE;
+
+typedef struct {
+  UINT32                   Segment;              ///< Segment number.
+  UINT64                   Supports;             ///< Supported attributes.
+                                                 ///< Refer to 
EFI_PCI_ATTRIBUTE_xxx used by GetAttributes()
+                                                 ///< and SetAttributes() in 
EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL.
+  UINT64                   Attributes;           ///< Initial attributes.
+                                                 ///< Refer to 
EFI_PCI_ATTRIBUTE_xxx used by GetAttributes()
+                                                 ///< and SetAttributes() in 
EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL.
+  BOOLEAN                  DmaAbove4G;           ///< DMA above 4GB memory.
+                                                 ///< Set to TRUE when root 
bridge supports DMA above 4GB memory.
+  UINT64                   AllocationAttributes; ///< Allocation attributes.
+                                                 ///< Refer to 
EFI_PCI_HOST_BRIDGE_COMBINE_MEM_PMEM and
+                                                 ///< 
EFI_PCI_HOST_BRIDGE_MEM64_DECODE used by GetAllocAttributes()
+                                                 ///< in 
EFI_PCI_HOST_BRIDGE_RESOURCE_ALLOCATION_PROTOCOL.
+  PCI_ROOT_BRIDGE_APERTURE Bus;                  ///< Bus aperture which can 
be used by the root bridge.
+  PCI_ROOT_BRIDGE_APERTURE Io;                   ///< IO aperture which can be 
used by the root bridge.
+  PCI_ROOT_BRIDGE_APERTURE Mem;                  ///< MMIO aperture below 4GB 
which can be used by the root bridge.
+  PCI_ROOT_BRIDGE_APERTURE MemAbove4G;           ///< MMIO aperture above 4GB 
which can be used by the root bridge.
+  PCI_ROOT_BRIDGE_APERTURE PMem;                 ///< Prefetchable MMIO 
aperture below 4GB which can be used by the root bridge.
+  PCI_ROOT_BRIDGE_APERTURE PMemAbove4G;          ///< Prefetchable MMIO 
aperture above 4GB which can be used by the root bridge.
+  EFI_DEVICE_PATH_PROTOCOL *DevicePath;          ///< Device path.
+} PCI_ROOT_BRIDGE;
+
+/**
+  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
+  );
+
+/**
+  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
+  );
+
+#endif
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
-- 
2.6.2.windows.1

_______________________________________________
edk2-devel mailing list
edk2-devel@lists.01.org
https://lists.01.org/mailman/listinfo/edk2-devel

Reply via email to