mirror of
				https://git.proxmox.com/git/mirror_edk2
				synced 2025-10-31 14:46:12 +00:00 
			
		
		
		
	 eeefcb9d4b
			
		
	
	
		eeefcb9d4b
		
	
	
	
	
		
			
			git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@7215 6f19259b-4bc3-4df7-8a09-765794883524
		
			
				
	
	
		
			347 lines
		
	
	
		
			12 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			347 lines
		
	
	
		
			12 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| /** @file
 | |
| 
 | |
| Copyright (c) 2006 - 2007, 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.
 | |
| 
 | |
| Module Name:
 | |
| 
 | |
|   PciLib.h
 | |
| 
 | |
| Abstract:
 | |
| 
 | |
|   PCI Bus Driver Lib header file.
 | |
|   Please use PCD feature flag PcdPciBusHotplugDeviceSupport to enable
 | |
|   support hot plug.
 | |
| 
 | |
| Revision History
 | |
| 
 | |
| **/
 | |
| 
 | |
| #ifndef _EFI_PCI_LIB_H_
 | |
| #define _EFI_PCI_LIB_H_
 | |
| 
 | |
| //
 | |
| // Mask definistions for PCD PcdPciIncompatibleDeviceSupportMask
 | |
| //
 | |
| #define PCI_INCOMPATIBLE_ACPI_RESOURCE_SUPPORT         0x01
 | |
| #define PCI_INCOMPATIBLE_READ_SUPPORT                  0x02
 | |
| #define PCI_INCOMPATIBLE_WRITE_SUPPORT                 0x04
 | |
| #define PCI_INCOMPATIBLE_REGISTER_UPDATE_SUPPORT       0x08
 | |
| #define PCI_INCOMPATIBLE_ACCESS_WIDTH_SUPPORT          0x0a
 | |
| 
 | |
| typedef struct {
 | |
|   EFI_HANDLE            Handle;
 | |
| } EFI_DEVICE_HANDLE_EXTENDED_DATA_PAYLOAD;
 | |
| 
 | |
| typedef struct {
 | |
|   UINT32                             Bar;
 | |
|   UINT16                             DevicePathSize;
 | |
|   UINT16                             ReqResSize;
 | |
|   UINT16                             AllocResSize;
 | |
|   UINT8                              *DevicePath;
 | |
|   UINT8                              *ReqRes;
 | |
|   UINT8                              *AllocRes;
 | |
| } EFI_RESOURCE_ALLOC_FAILURE_ERROR_DATA_PAYLOAD;
 | |
| 
 | |
| /**
 | |
|   Install protocol gEfiPciHotPlugRequestProtocolGuid
 | |
|   @param Status    return status of protocol installation.
 | |
| **/
 | |
| VOID
 | |
| InstallHotPlugRequestProtocol (
 | |
|   IN  EFI_STATUS                    *Status
 | |
|   );
 | |
| 
 | |
| /**
 | |
|   Install protocol gEfiPciHotplugDeviceGuid into hotplug device
 | |
|   instance.
 | |
|   
 | |
|   @param PciIoDevice  hotplug device instance.
 | |
|   
 | |
| **/
 | |
| VOID
 | |
| InstallPciHotplugGuid (
 | |
|   IN  PCI_IO_DEVICE                  *PciIoDevice
 | |
|   );
 | |
| 
 | |
| /**
 | |
|   UnInstall protocol gEfiPciHotplugDeviceGuid into hotplug device
 | |
|   instance.
 | |
|   
 | |
|   @param PciIoDevice  hotplug device instance.
 | |
|   
 | |
| **/
 | |
| VOID
 | |
| UninstallPciHotplugGuid (
 | |
|   IN  PCI_IO_DEVICE                  *PciIoDevice
 | |
|   );
 | |
| 
 | |
| /**
 | |
|   Retrieve the BAR information via PciIo interface.
 | |
|   
 | |
|   @param PciIoDevice Pci device instance.
 | |
| **/
 | |
| VOID
 | |
| GetBackPcCardBar (
 | |
|   IN  PCI_IO_DEVICE                  *PciIoDevice
 | |
|   );
 | |
| 
 | |
| /**
 | |
|   Remove rejected pci device from specific root bridge
 | |
|   handle.
 | |
|   
 | |
|   @param RootBridgeHandle  specific parent root bridge handle.
 | |
|   @param Bridge            Bridge device instance.
 | |
|   
 | |
|   @retval EFI_SUCCESS  Success operation.
 | |
| **/
 | |
| EFI_STATUS
 | |
| RemoveRejectedPciDevices (
 | |
|   EFI_HANDLE        RootBridgeHandle,
 | |
|   IN PCI_IO_DEVICE  *Bridge
 | |
|   );
 | |
| 
 | |
| /**
 | |
|   Wrapper function for allocating resource for pci host bridge.
 | |
|   
 | |
|   @param PciResAlloc Point to protocol instance EFI_PCI_HOST_BRIDGE_RESOURCE_ALLOCATION_PROTOCOL.
 | |
|   
 | |
| **/
 | |
| EFI_STATUS
 | |
| PciHostBridgeResourceAllocator (
 | |
|   IN EFI_PCI_HOST_BRIDGE_RESOURCE_ALLOCATION_PROTOCOL *PciResAlloc
 | |
|   );
 | |
| 
 | |
| /**
 | |
|   Wrapper function for allocating resource for pci host bridge without hotplug device support.
 | |
|   
 | |
|   @param PciResAlloc Point to protocol instance EFI_PCI_HOST_BRIDGE_RESOURCE_ALLOCATION_PROTOCOL.
 | |
|   
 | |
| **/
 | |
| EFI_STATUS
 | |
| PciHostBridgeResourceAllocator_WithoutHotPlugDeviceSupport (
 | |
|   IN EFI_PCI_HOST_BRIDGE_RESOURCE_ALLOCATION_PROTOCOL *PciResAlloc
 | |
|   );
 | |
| 
 | |
| /**
 | |
|   Wrapper function for allocating resource for pci host bridge with hotplug device support.
 | |
|   
 | |
|   @param PciResAlloc Point to protocol instance EFI_PCI_HOST_BRIDGE_RESOURCE_ALLOCATION_PROTOCOL.
 | |
|   
 | |
| **/
 | |
| EFI_STATUS
 | |
| PciHostBridgeResourceAllocator_WithHotPlugDeviceSupport (
 | |
|   IN EFI_PCI_HOST_BRIDGE_RESOURCE_ALLOCATION_PROTOCOL *PciResAlloc
 | |
|   );
 | |
| 
 | |
| /**
 | |
|   Wapper function of scanning pci bus and assign bus number to the given PCI bus system
 | |
|   Feature flag PcdPciBusHotplugDeviceSupport determine whether need support hotplug.  
 | |
|   
 | |
|   @param  Bridge          Bridge device instance.
 | |
|   @param  StartBusNumber  start point.
 | |
|   @param  SubBusNumber    Point to sub bus number.
 | |
|   @param  PaddedBusRange  Customized bus number.
 | |
|   
 | |
|   @retval EFI_SUCCESS     Success.
 | |
|   @retval EFI_DEVICE_ERROR Fail to scan bus.
 | |
| **/
 | |
| EFI_STATUS
 | |
| PciScanBus (
 | |
|   IN PCI_IO_DEVICE                      *Bridge,
 | |
|   IN UINT8                              StartBusNumber,
 | |
|   OUT UINT8                             *SubBusNumber,
 | |
|   OUT UINT8                             *PaddedBusRange
 | |
|   );
 | |
| 
 | |
| /**
 | |
|   Wapper function of scanning pci bus and assign bus number to the given PCI bus system
 | |
|   Feature flag PcdPciBusHotplugDeviceSupport determine whether need support hotplug.  
 | |
|   
 | |
|   @param  Bridge          Bridge device instance.
 | |
|   @param  StartBusNumber  start point.
 | |
|   @param  SubBusNumber    Point to sub bus number.
 | |
|   @param  PaddedBusRange  Customized bus number.
 | |
|   
 | |
|   @retval EFI_SUCCESS     Success.
 | |
|   @retval EFI_DEVICE_ERROR Fail to scan bus.
 | |
| **/
 | |
| EFI_STATUS
 | |
| PciScanBus_WithHotPlugDeviceSupport (
 | |
|   IN PCI_IO_DEVICE                      *Bridge,
 | |
|   IN UINT8                              StartBusNumber,
 | |
|   OUT UINT8                             *SubBusNumber,
 | |
|   OUT UINT8                             *PaddedBusRange
 | |
|   );
 | |
| 
 | |
| /**
 | |
|   Wapper function of scanning pci bus and assign bus number to the given PCI bus system
 | |
|   Feature flag PcdPciBusHotplugDeviceSupport determine whether need support hotplug.  
 | |
|   
 | |
|   @param  Bridge          Bridge device instance.
 | |
|   @param  StartBusNumber  start point.
 | |
|   @param  SubBusNumber    Point to sub bus number.
 | |
|   @param  PaddedBusRange  Customized bus number.
 | |
|   
 | |
|   @retval EFI_SUCCESS     Success.
 | |
|   @retval EFI_DEVICE_ERROR Fail to scan bus.
 | |
| **/
 | |
| EFI_STATUS
 | |
| PciScanBus_WithoutHotPlugDeviceSupport (
 | |
|   IN PCI_IO_DEVICE                      *Bridge,
 | |
|   IN UINT8                              StartBusNumber,
 | |
|   OUT UINT8                             *SubBusNumber,
 | |
|   OUT UINT8                             *PaddedBusRange
 | |
|   );
 | |
| 
 | |
| /**
 | |
|   Process Option Rom on this host bridge.
 | |
|   
 | |
|   @param Bridge  Pci bridge device instance.
 | |
|   
 | |
|   @retval EFI_SUCCESS Success.
 | |
| **/
 | |
| EFI_STATUS
 | |
| PciRootBridgeP2CProcess (
 | |
|   IN PCI_IO_DEVICE *Bridge
 | |
|   );
 | |
| 
 | |
| /**
 | |
|   Process Option Rom on this host bridge.
 | |
|   
 | |
|   @param PciResAlloc Pointer to instance of EFI_PCI_HOST_BRIDGE_RESOURCE_ALLOCATION_PROTOCOL.
 | |
|   
 | |
|   @retval EFI_NOT_FOUND Can not find the root bridge instance.
 | |
|   @retval EFI_SUCCESS   Success process.
 | |
| **/
 | |
| EFI_STATUS
 | |
| PciHostBridgeP2CProcess (
 | |
|   IN EFI_PCI_HOST_BRIDGE_RESOURCE_ALLOCATION_PROTOCOL *PciResAlloc
 | |
|   );
 | |
| 
 | |
| /**
 | |
|   This function is used to enumerate the entire host bridge
 | |
|   in a given platform.
 | |
| 
 | |
|   @param PciResAlloc   A pointer to the resource allocate protocol.
 | |
| 
 | |
|   @retval EFI_OUT_OF_RESOURCES no enough resource.
 | |
|   @retval EFI_SUCCESS Success.
 | |
| 
 | |
| **/
 | |
| EFI_STATUS
 | |
| PciHostBridgeEnumerator (
 | |
|   EFI_PCI_HOST_BRIDGE_RESOURCE_ALLOCATION_PROTOCOL  *PciResAlloc
 | |
|   );
 | |
| 
 | |
| /**
 | |
|   Read PCI configuration space through EFI_PCI_IO_PROTOCOL.
 | |
| 
 | |
|   @param  PciIo               A pointer to the EFI_PCI_O_PROTOCOL.
 | |
|   @param  Width               Signifies the width of the memory operations.
 | |
|   @param  Address             The address within the PCI configuration space for the PCI controller.
 | |
|   @param  Count               The number of unit to be read.
 | |
|   @param  Buffer              For read operations, the destination buffer to store the results. For
 | |
|                               write operations, the source buffer to write data from.
 | |
| 
 | |
|   @retval EFI_SUCCESS            The data was read from or written to the PCI root bridge.
 | |
|   @retval EFI_INVALID_PARAMETER  Width is invalid for this PCI root bridge.
 | |
|   @retval EFI_INVALID_PARAMETER  Buffer is NULL.
 | |
|   @retval EFI_OUT_OF_RESOURCES   The request could not be completed due to a lack of resources.
 | |
| 
 | |
| **/
 | |
| EFI_STATUS
 | |
| PciIoRead (
 | |
|   IN       EFI_PCI_IO_PROTOCOL                    *PciIo,
 | |
|   IN       EFI_PCI_IO_PROTOCOL_WIDTH              Width,
 | |
|   IN       UINT32                                 Address,
 | |
|   IN       UINTN                                  Count,
 | |
|   IN OUT   VOID                                   *Buffer
 | |
|   );
 | |
| 
 | |
| /**
 | |
|   Write PCI configuration space through EFI_PCI_IO_PROTOCOL.
 | |
| 
 | |
|   @param  PciIo               A pointer to the EFI_PCI_O_PROTOCOL.
 | |
|   @param  Width               Signifies the width of the memory operations.
 | |
|   @param  Address             The address within the PCI configuration space for the PCI controller.
 | |
|   @param  Count               The number of unit to be write.
 | |
|   @param  Buffer              For read operations, the destination buffer to store the results. For
 | |
|                               write operations, the source buffer to write data from.
 | |
| 
 | |
|   @retval EFI_SUCCESS            The data was read from or written to the PCI root bridge.
 | |
|   @retval EFI_INVALID_PARAMETER  Width is invalid for this PCI root bridge.
 | |
|   @retval EFI_INVALID_PARAMETER  Buffer is NULL.
 | |
|   @retval EFI_OUT_OF_RESOURCES   The request could not be completed due to a lack of resources.
 | |
| 
 | |
| **/
 | |
| EFI_STATUS
 | |
| PciIoWrite (
 | |
|   IN       EFI_PCI_IO_PROTOCOL                    *PciIo,
 | |
|   IN       EFI_PCI_IO_PROTOCOL_WIDTH              Width,
 | |
|   IN       UINT32                                 Address,
 | |
|   IN       UINTN                                  Count,
 | |
|   IN OUT   VOID                                   *Buffer
 | |
|   );
 | |
| 
 | |
| /**
 | |
|   Write PCI configuration space through EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL.
 | |
| 
 | |
|   @param  PciRootBridgeIo     A pointer to the EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL.
 | |
|   @param  Pci                 A pointer to PCI_TYPE00.
 | |
|   @param  Width               Signifies the width of the memory operations.
 | |
|   @param  Address             The address within the PCI configuration space for the PCI controller.
 | |
|   @param  Count               The number of unit to be write.
 | |
|   @param  Buffer              For read operations, the destination buffer to store the results. For
 | |
|                               write operations, the source buffer to write data from.
 | |
| 
 | |
|   @retval EFI_SUCCESS            The data was read from or written to the PCI root bridge.
 | |
|   @retval EFI_INVALID_PARAMETER  Width is invalid for this PCI root bridge.
 | |
|   @retval EFI_INVALID_PARAMETER  Buffer is NULL.
 | |
|   @retval EFI_OUT_OF_RESOURCES   The request could not be completed due to a lack of resources.
 | |
| 
 | |
| **/
 | |
| EFI_STATUS
 | |
| PciRootBridgeIoWrite (
 | |
|   IN       EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL        *PciRootBridgeIo,
 | |
|   IN       PCI_TYPE00                             *Pci,
 | |
|   IN       EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_WIDTH  Width,
 | |
|   IN       UINT64                                 Address,
 | |
|   IN       UINTN                                  Count,
 | |
|   IN OUT   VOID                                   *Buffer
 | |
|   );
 | |
| 
 | |
| /**
 | |
|   Read PCI configuration space through EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL.
 | |
| 
 | |
|   @param  PciRootBridgeIo     A pointer to the EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL.
 | |
|   @param  Pci                 A pointer to PCI_TYPE00.
 | |
|   @param  Width               Signifies the width of the memory operations.
 | |
|   @param  Address             The address within the PCI configuration space for the PCI controller.
 | |
|   @param  Count               The number of unit to be read.
 | |
|   @param  Buffer              For read operations, the destination buffer to store the results. For
 | |
|                               write operations, the source buffer to write data from.
 | |
| 
 | |
|   @retval EFI_SUCCESS            The data was read from or written to the PCI root bridge.
 | |
|   @retval EFI_INVALID_PARAMETER  Width is invalid for this PCI root bridge.
 | |
|   @retval EFI_INVALID_PARAMETER  Buffer is NULL.
 | |
|   @retval EFI_OUT_OF_RESOURCES   The request could not be completed due to a lack of resources.
 | |
| 
 | |
| **/
 | |
| EFI_STATUS
 | |
| PciRootBridgeIoRead (
 | |
|   IN       EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL        *PciRootBridgeIo,
 | |
|   IN       PCI_TYPE00                             *Pci,         OPTIONAL
 | |
|   IN       EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_WIDTH  Width,
 | |
|   IN       UINT64                                 Address,
 | |
|   IN       UINTN                                  Count,
 | |
|   IN OUT   VOID                                   *Buffer
 | |
|   );
 | |
| #endif
 |