MdeModulePkg: Add new library class PciHostBridgeLib
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.ni@intel.com> Reviewed-by: Feng Tian <feng.tian@intel.com> git-svn-id: https://svn.code.sf.net/p/edk2/code/trunk/edk2@19655 6f19259b-4bc3-4df7-8a09-765794883524
This commit is contained in:
		
							
								
								
									
										97
									
								
								MdeModulePkg/Include/Library/PciHostBridgeLib.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										97
									
								
								MdeModulePkg/Include/Library/PciHostBridgeLib.h
									
									
									
									
									
										Normal file
									
								
							@@ -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
 | 
				
			||||||
@@ -3,7 +3,7 @@
 | 
				
			|||||||
# It also provides the definitions(including PPIs/PROTOCOLs/GUIDs and library classes)
 | 
					# It also provides the definitions(including PPIs/PROTOCOLs/GUIDs and library classes)
 | 
				
			||||||
# and libraries instances, which are used for those modules.
 | 
					# 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
 | 
					# 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 terms and conditions of the BSD License that accompanies this distribution.
 | 
				
			||||||
# The full text of the license may be found at
 | 
					# The full text of the license may be found at
 | 
				
			||||||
@@ -147,6 +147,10 @@
 | 
				
			|||||||
  #
 | 
					  #
 | 
				
			||||||
  IpmiLib|Include/Library/IpmiLib.h
 | 
					  IpmiLib|Include/Library/IpmiLib.h
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  ## @libraryclass  Provides interfaces for platform to return root bridge information to PciHostBridgeDxe driver.
 | 
				
			||||||
 | 
					  #
 | 
				
			||||||
 | 
					  PciHostBridgeLib|Include/Library/PciHostBridgeLib.h
 | 
				
			||||||
 | 
					
 | 
				
			||||||
[Guids]
 | 
					[Guids]
 | 
				
			||||||
  ## MdeModule package token space guid
 | 
					  ## MdeModule package token space guid
 | 
				
			||||||
  # Include/Guid/MdeModulePkgTokenSpace.h
 | 
					  # Include/Guid/MdeModulePkgTokenSpace.h
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user