REF: https://bugzilla.tianocore.org/show_bug.cgi?id=3737 Apply uncrustify changes to .c/.h files in the MdePkg package Cc: Andrew Fish <afish@apple.com> Cc: Leif Lindholm <leif@nuviainc.com> Cc: Michael D Kinney <michael.d.kinney@intel.com> Signed-off-by: Michael Kubacki <michael.kubacki@microsoft.com> Reviewed-by: Liming Gao <gaoliming@byosoft.com.cn>
		
			
				
	
	
		
			437 lines
		
	
	
		
			19 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			437 lines
		
	
	
		
			19 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
/** @file
 | 
						|
  PCI Root Bridge I/O protocol as defined in the UEFI 2.0 specification.
 | 
						|
 | 
						|
  PCI Root Bridge I/O protocol is used by PCI Bus Driver to perform PCI Memory, PCI I/O,
 | 
						|
  and PCI Configuration cycles on a PCI Root Bridge. It also provides services to perform
 | 
						|
  defferent types of bus mastering DMA.
 | 
						|
 | 
						|
  Copyright (c) 2006 - 2018, Intel Corporation. All rights reserved.<BR>
 | 
						|
  SPDX-License-Identifier: BSD-2-Clause-Patent
 | 
						|
 | 
						|
**/
 | 
						|
 | 
						|
#ifndef __PCI_ROOT_BRIDGE_IO_H__
 | 
						|
#define __PCI_ROOT_BRIDGE_IO_H__
 | 
						|
 | 
						|
#include <Library/BaseLib.h>
 | 
						|
 | 
						|
#define EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_GUID \
 | 
						|
  { \
 | 
						|
    0x2f707ebb, 0x4a1a, 0x11d4, {0x9a, 0x38, 0x00, 0x90, 0x27, 0x3f, 0xc1, 0x4d } \
 | 
						|
  }
 | 
						|
 | 
						|
typedef struct _EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL;
 | 
						|
 | 
						|
///
 | 
						|
/// *******************************************************
 | 
						|
/// EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_WIDTH
 | 
						|
/// *******************************************************
 | 
						|
///
 | 
						|
typedef enum {
 | 
						|
  EfiPciWidthUint8,
 | 
						|
  EfiPciWidthUint16,
 | 
						|
  EfiPciWidthUint32,
 | 
						|
  EfiPciWidthUint64,
 | 
						|
  EfiPciWidthFifoUint8,
 | 
						|
  EfiPciWidthFifoUint16,
 | 
						|
  EfiPciWidthFifoUint32,
 | 
						|
  EfiPciWidthFifoUint64,
 | 
						|
  EfiPciWidthFillUint8,
 | 
						|
  EfiPciWidthFillUint16,
 | 
						|
  EfiPciWidthFillUint32,
 | 
						|
  EfiPciWidthFillUint64,
 | 
						|
  EfiPciWidthMaximum
 | 
						|
} EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_WIDTH;
 | 
						|
 | 
						|
///
 | 
						|
/// *******************************************************
 | 
						|
/// EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_OPERATION
 | 
						|
/// *******************************************************
 | 
						|
///
 | 
						|
typedef enum {
 | 
						|
  ///
 | 
						|
  /// A read operation from system memory by a bus master that is not capable of producing
 | 
						|
  /// PCI dual address cycles.
 | 
						|
  ///
 | 
						|
  EfiPciOperationBusMasterRead,
 | 
						|
  ///
 | 
						|
  /// A write operation from system memory by a bus master that is not capable of producing
 | 
						|
  /// PCI dual address cycles.
 | 
						|
  ///
 | 
						|
  EfiPciOperationBusMasterWrite,
 | 
						|
  ///
 | 
						|
  /// Provides both read and write access to system memory by both the processor and a bus
 | 
						|
  /// master that is not capable of producing PCI dual address cycles.
 | 
						|
  ///
 | 
						|
  EfiPciOperationBusMasterCommonBuffer,
 | 
						|
  ///
 | 
						|
  /// A read operation from system memory by a bus master that is capable of producing PCI
 | 
						|
  /// dual address cycles.
 | 
						|
  ///
 | 
						|
  EfiPciOperationBusMasterRead64,
 | 
						|
  ///
 | 
						|
  /// A write operation to system memory by a bus master that is capable of producing PCI
 | 
						|
  /// dual address cycles.
 | 
						|
  ///
 | 
						|
  EfiPciOperationBusMasterWrite64,
 | 
						|
  ///
 | 
						|
  /// Provides both read and write access to system memory by both the processor and a bus
 | 
						|
  /// master that is capable of producing PCI dual address cycles.
 | 
						|
  ///
 | 
						|
  EfiPciOperationBusMasterCommonBuffer64,
 | 
						|
  EfiPciOperationMaximum
 | 
						|
} EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_OPERATION;
 | 
						|
 | 
						|
#define EFI_PCI_ATTRIBUTE_ISA_MOTHERBOARD_IO    0x0001
 | 
						|
#define EFI_PCI_ATTRIBUTE_ISA_IO                0x0002
 | 
						|
#define EFI_PCI_ATTRIBUTE_VGA_PALETTE_IO        0x0004
 | 
						|
#define EFI_PCI_ATTRIBUTE_VGA_MEMORY            0x0008
 | 
						|
#define EFI_PCI_ATTRIBUTE_VGA_IO                0x0010
 | 
						|
#define EFI_PCI_ATTRIBUTE_IDE_PRIMARY_IO        0x0020
 | 
						|
#define EFI_PCI_ATTRIBUTE_IDE_SECONDARY_IO      0x0040
 | 
						|
#define EFI_PCI_ATTRIBUTE_MEMORY_WRITE_COMBINE  0x0080
 | 
						|
#define EFI_PCI_ATTRIBUTE_MEMORY_CACHED         0x0800
 | 
						|
#define EFI_PCI_ATTRIBUTE_MEMORY_DISABLE        0x1000
 | 
						|
#define EFI_PCI_ATTRIBUTE_DUAL_ADDRESS_CYCLE    0x8000
 | 
						|
#define EFI_PCI_ATTRIBUTE_ISA_IO_16             0x10000
 | 
						|
#define EFI_PCI_ATTRIBUTE_VGA_PALETTE_IO_16     0x20000
 | 
						|
#define EFI_PCI_ATTRIBUTE_VGA_IO_16             0x40000
 | 
						|
 | 
						|
#define EFI_PCI_ATTRIBUTE_VALID_FOR_ALLOCATE_BUFFER  (EFI_PCI_ATTRIBUTE_MEMORY_WRITE_COMBINE | EFI_PCI_ATTRIBUTE_MEMORY_CACHED | EFI_PCI_ATTRIBUTE_DUAL_ADDRESS_CYCLE)
 | 
						|
 | 
						|
#define EFI_PCI_ATTRIBUTE_INVALID_FOR_ALLOCATE_BUFFER  (~EFI_PCI_ATTRIBUTE_VALID_FOR_ALLOCATE_BUFFER)
 | 
						|
 | 
						|
#define EFI_PCI_ADDRESS(bus, dev, func, reg) \
 | 
						|
  (UINT64) ( \
 | 
						|
  (((UINTN) bus) << 24) | \
 | 
						|
  (((UINTN) dev) << 16) | \
 | 
						|
  (((UINTN) func) << 8) | \
 | 
						|
  (((UINTN) (reg)) < 256 ? ((UINTN) (reg)) : (UINT64) (LShiftU64 ((UINT64) (reg), 32))))
 | 
						|
 | 
						|
typedef struct {
 | 
						|
  UINT8     Register;
 | 
						|
  UINT8     Function;
 | 
						|
  UINT8     Device;
 | 
						|
  UINT8     Bus;
 | 
						|
  UINT32    ExtendedRegister;
 | 
						|
} EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_PCI_ADDRESS;
 | 
						|
 | 
						|
/**
 | 
						|
  Reads from the I/O space of a PCI Root Bridge. Returns when either the polling exit criteria is
 | 
						|
  satisfied or after a defined duration.
 | 
						|
 | 
						|
  @param  This                  A pointer to the EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL.
 | 
						|
  @param  Width                 Signifies the width of the memory or I/O operations.
 | 
						|
  @param  Address               The base address of the memory or I/O operations.
 | 
						|
  @param  Mask                  Mask used for the polling criteria.
 | 
						|
  @param  Value                 The comparison value used for the polling exit criteria.
 | 
						|
  @param  Delay                 The number of 100 ns units to poll.
 | 
						|
  @param  Result                Pointer to the last value read from the memory location.
 | 
						|
 | 
						|
  @retval EFI_SUCCESS           The last data returned from the access matched the poll exit criteria.
 | 
						|
  @retval EFI_TIMEOUT           Delay expired before a match occurred.
 | 
						|
  @retval EFI_OUT_OF_RESOURCES  The request could not be completed due to a lack of resources.
 | 
						|
  @retval EFI_INVALID_PARAMETER One or more parameters are invalid.
 | 
						|
 | 
						|
**/
 | 
						|
typedef
 | 
						|
EFI_STATUS
 | 
						|
(EFIAPI *EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_POLL_IO_MEM)(
 | 
						|
  IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL           *This,
 | 
						|
  IN  EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_WIDTH    Width,
 | 
						|
  IN  UINT64                                   Address,
 | 
						|
  IN  UINT64                                   Mask,
 | 
						|
  IN  UINT64                                   Value,
 | 
						|
  IN  UINT64                                   Delay,
 | 
						|
  OUT UINT64                                   *Result
 | 
						|
  );
 | 
						|
 | 
						|
/**
 | 
						|
  Enables a PCI driver to access PCI controller registers in the PCI root bridge memory space.
 | 
						|
 | 
						|
  @param  This                  A pointer to the EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL.
 | 
						|
  @param  Width                 Signifies the width of the memory operations.
 | 
						|
  @param  Address               The base address of the memory operations.
 | 
						|
  @param  Count                 The number of memory operations to perform.
 | 
						|
  @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_OUT_OF_RESOURCES  The request could not be completed due to a lack of resources.
 | 
						|
  @retval EFI_INVALID_PARAMETER One or more parameters are invalid.
 | 
						|
 | 
						|
**/
 | 
						|
typedef
 | 
						|
EFI_STATUS
 | 
						|
(EFIAPI *EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_IO_MEM)(
 | 
						|
  IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL              *This,
 | 
						|
  IN     EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_WIDTH    Width,
 | 
						|
  IN     UINT64                                   Address,
 | 
						|
  IN     UINTN                                    Count,
 | 
						|
  IN OUT VOID                                     *Buffer
 | 
						|
  );
 | 
						|
 | 
						|
typedef struct {
 | 
						|
  ///
 | 
						|
  /// Read PCI controller registers in the PCI root bridge memory space.
 | 
						|
  ///
 | 
						|
  EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_IO_MEM    Read;
 | 
						|
  ///
 | 
						|
  /// Write PCI controller registers in the PCI root bridge memory space.
 | 
						|
  ///
 | 
						|
  EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_IO_MEM    Write;
 | 
						|
} EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_ACCESS;
 | 
						|
 | 
						|
/**
 | 
						|
  Enables a PCI driver to copy one region of PCI root bridge memory space to another region of PCI
 | 
						|
  root bridge memory space.
 | 
						|
 | 
						|
  @param  This                  A pointer to the EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL instance.
 | 
						|
  @param  Width                 Signifies the width of the memory operations.
 | 
						|
  @param  DestAddress           The destination address of the memory operation.
 | 
						|
  @param  SrcAddress            The source address of the memory operation.
 | 
						|
  @param  Count                 The number of memory operations to perform.
 | 
						|
 | 
						|
  @retval EFI_SUCCESS           The data was copied from one memory region to another memory region.
 | 
						|
  @retval EFI_INVALID_PARAMETER Width is invalid for this PCI root bridge.
 | 
						|
  @retval EFI_OUT_OF_RESOURCES  The request could not be completed due to a lack of resources.
 | 
						|
 | 
						|
**/
 | 
						|
typedef
 | 
						|
EFI_STATUS
 | 
						|
(EFIAPI *EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_COPY_MEM)(
 | 
						|
  IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL              *This,
 | 
						|
  IN     EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_WIDTH    Width,
 | 
						|
  IN     UINT64                                   DestAddress,
 | 
						|
  IN     UINT64                                   SrcAddress,
 | 
						|
  IN     UINTN                                    Count
 | 
						|
  );
 | 
						|
 | 
						|
/**
 | 
						|
  Provides the PCI controller-specific addresses required to access system memory from a
 | 
						|
  DMA bus master.
 | 
						|
 | 
						|
  @param  This                  A pointer to the EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL.
 | 
						|
  @param  Operation             Indicates if the bus master is going to read or write to system memory.
 | 
						|
  @param  HostAddress           The system memory address to map to the PCI controller.
 | 
						|
  @param  NumberOfBytes         On input the number of bytes to map. On output the number of bytes
 | 
						|
                                that were mapped.
 | 
						|
  @param  DeviceAddress         The resulting map address for the bus master PCI controller to use to
 | 
						|
                                access the hosts HostAddress.
 | 
						|
  @param  Mapping               A resulting value to pass to Unmap().
 | 
						|
 | 
						|
  @retval EFI_SUCCESS           The range was mapped for the returned NumberOfBytes.
 | 
						|
  @retval EFI_UNSUPPORTED       The HostAddress cannot be mapped as a common buffer.
 | 
						|
  @retval EFI_INVALID_PARAMETER One or more parameters are invalid.
 | 
						|
  @retval EFI_OUT_OF_RESOURCES  The request could not be completed due to a lack of resources.
 | 
						|
  @retval EFI_DEVICE_ERROR      The system hardware could not map the requested address.
 | 
						|
 | 
						|
**/
 | 
						|
typedef
 | 
						|
EFI_STATUS
 | 
						|
(EFIAPI *EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_MAP)(
 | 
						|
  IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL                *This,
 | 
						|
  IN     EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_OPERATION  Operation,
 | 
						|
  IN     VOID                                       *HostAddress,
 | 
						|
  IN OUT UINTN                                      *NumberOfBytes,
 | 
						|
  OUT    EFI_PHYSICAL_ADDRESS                       *DeviceAddress,
 | 
						|
  OUT    VOID                                       **Mapping
 | 
						|
  );
 | 
						|
 | 
						|
/**
 | 
						|
  Completes the Map() operation and releases any corresponding resources.
 | 
						|
 | 
						|
  @param  This                  A pointer to the EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL.
 | 
						|
  @param  Mapping               The mapping value returned from Map().
 | 
						|
 | 
						|
  @retval EFI_SUCCESS           The range was unmapped.
 | 
						|
  @retval EFI_INVALID_PARAMETER Mapping is not a value that was returned by Map().
 | 
						|
  @retval EFI_DEVICE_ERROR      The data was not committed to the target system memory.
 | 
						|
 | 
						|
**/
 | 
						|
typedef
 | 
						|
EFI_STATUS
 | 
						|
(EFIAPI *EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_UNMAP)(
 | 
						|
  IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL           *This,
 | 
						|
  IN  VOID                                     *Mapping
 | 
						|
  );
 | 
						|
 | 
						|
/**
 | 
						|
  Allocates pages that are suitable for an EfiPciOperationBusMasterCommonBuffer or
 | 
						|
  EfiPciOperationBusMasterCommonBuffer64 mapping.
 | 
						|
 | 
						|
  @param  This                  A pointer to the EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL.
 | 
						|
  @param  Type                  This parameter is not used and must be ignored.
 | 
						|
  @param  MemoryType            The type of memory to allocate, EfiBootServicesData or
 | 
						|
                                EfiRuntimeServicesData.
 | 
						|
  @param  Pages                 The number of pages to allocate.
 | 
						|
  @param  HostAddress           A pointer to store the base system memory address of the
 | 
						|
                                allocated range.
 | 
						|
  @param  Attributes            The requested bit mask of attributes for the allocated range.
 | 
						|
 | 
						|
  @retval EFI_SUCCESS           The requested memory pages were allocated.
 | 
						|
  @retval EFI_UNSUPPORTED       Attributes is unsupported. The only legal attribute bits are
 | 
						|
                                MEMORY_WRITE_COMBINE and MEMORY_CACHED.
 | 
						|
  @retval EFI_INVALID_PARAMETER One or more parameters are invalid.
 | 
						|
  @retval EFI_OUT_OF_RESOURCES  The memory pages could not be allocated.
 | 
						|
 | 
						|
**/
 | 
						|
typedef
 | 
						|
EFI_STATUS
 | 
						|
(EFIAPI *EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_ALLOCATE_BUFFER)(
 | 
						|
  IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL              *This,
 | 
						|
  IN     EFI_ALLOCATE_TYPE                        Type,
 | 
						|
  IN     EFI_MEMORY_TYPE                          MemoryType,
 | 
						|
  IN     UINTN                                    Pages,
 | 
						|
  IN OUT VOID                                     **HostAddress,
 | 
						|
  IN     UINT64                                   Attributes
 | 
						|
  );
 | 
						|
 | 
						|
/**
 | 
						|
  Frees memory that was allocated with AllocateBuffer().
 | 
						|
 | 
						|
  @param  This                  A pointer to the EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL.
 | 
						|
  @param  Pages                 The number of pages to free.
 | 
						|
  @param  HostAddress           The base system memory address of the allocated range.
 | 
						|
 | 
						|
  @retval EFI_SUCCESS           The requested memory pages were freed.
 | 
						|
  @retval EFI_INVALID_PARAMETER The memory range specified by HostAddress and Pages
 | 
						|
                                was not allocated with AllocateBuffer().
 | 
						|
 | 
						|
**/
 | 
						|
typedef
 | 
						|
EFI_STATUS
 | 
						|
(EFIAPI *EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_FREE_BUFFER)(
 | 
						|
  IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL           *This,
 | 
						|
  IN  UINTN                                    Pages,
 | 
						|
  IN  VOID                                     *HostAddress
 | 
						|
  );
 | 
						|
 | 
						|
/**
 | 
						|
  Flushes all PCI posted write transactions from a PCI host bridge to system memory.
 | 
						|
 | 
						|
  @param  This                  A pointer to the EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL.
 | 
						|
 | 
						|
  @retval EFI_SUCCESS           The PCI posted write transactions were flushed from the PCI host
 | 
						|
                                bridge to system memory.
 | 
						|
  @retval EFI_DEVICE_ERROR      The PCI posted write transactions were not flushed from the PCI
 | 
						|
                                host bridge due to a hardware error.
 | 
						|
 | 
						|
**/
 | 
						|
typedef
 | 
						|
EFI_STATUS
 | 
						|
(EFIAPI *EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_FLUSH)(
 | 
						|
  IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL  *This
 | 
						|
  );
 | 
						|
 | 
						|
/**
 | 
						|
  Gets the attributes that a PCI root bridge supports setting with SetAttributes(), and the
 | 
						|
  attributes that a PCI root bridge is currently using.
 | 
						|
 | 
						|
  @param  This                  A pointer to the EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL.
 | 
						|
  @param  Supports              A pointer to the mask of attributes that this PCI root bridge supports
 | 
						|
                                setting with SetAttributes().
 | 
						|
  @param  Attributes            A pointer to the mask of attributes that this PCI root bridge is currently
 | 
						|
                                using.
 | 
						|
 | 
						|
  @retval EFI_SUCCESS           If Supports is not NULL, then the attributes that the PCI root
 | 
						|
                                bridge supports is returned in Supports. If Attributes is
 | 
						|
                                not NULL, then the attributes that the PCI root bridge is currently
 | 
						|
                                using is returned in Attributes.
 | 
						|
  @retval EFI_INVALID_PARAMETER Both Supports and Attributes are NULL.
 | 
						|
 | 
						|
 | 
						|
**/
 | 
						|
typedef
 | 
						|
EFI_STATUS
 | 
						|
(EFIAPI *EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_GET_ATTRIBUTES)(
 | 
						|
  IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL           *This,
 | 
						|
  OUT UINT64                                   *Supports,
 | 
						|
  OUT UINT64                                   *Attributes
 | 
						|
  );
 | 
						|
 | 
						|
/**
 | 
						|
  Sets attributes for a resource range on a PCI root bridge.
 | 
						|
 | 
						|
  @param  This                  A pointer to the EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL.
 | 
						|
  @param  Attributes            The mask of attributes to set.
 | 
						|
  @param  ResourceBase          A pointer to the base address of the resource range to be modified by the
 | 
						|
                                attributes specified by Attributes.
 | 
						|
  @param  ResourceLength        A pointer to the length of the resource range to be modified by the
 | 
						|
                                attributes specified by Attributes.
 | 
						|
 | 
						|
  @retval EFI_SUCCESS           The set of attributes specified by Attributes for the resource
 | 
						|
                                range specified by ResourceBase and ResourceLength
 | 
						|
                                were set on the PCI root bridge, and the actual resource range is
 | 
						|
                                returned in ResuourceBase and ResourceLength.
 | 
						|
  @retval EFI_UNSUPPORTED       A bit is set in Attributes that is not supported by the PCI Root
 | 
						|
                                Bridge.
 | 
						|
  @retval EFI_OUT_OF_RESOURCES  There are not enough resources to set the attributes on the
 | 
						|
                                resource range specified by BaseAddress and Length.
 | 
						|
  @retval EFI_INVALID_PARAMETER One or more parameters are invalid.
 | 
						|
 | 
						|
**/
 | 
						|
typedef
 | 
						|
EFI_STATUS
 | 
						|
(EFIAPI *EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_SET_ATTRIBUTES)(
 | 
						|
  IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL              *This,
 | 
						|
  IN     UINT64                                   Attributes,
 | 
						|
  IN OUT UINT64                                   *ResourceBase,
 | 
						|
  IN OUT UINT64                                   *ResourceLength
 | 
						|
  );
 | 
						|
 | 
						|
/**
 | 
						|
  Retrieves the current resource settings of this PCI root bridge in the form of a set of ACPI
 | 
						|
  resource descriptors.
 | 
						|
 | 
						|
  @param  This                  A pointer to the EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL.
 | 
						|
  @param  Resources             A pointer to the resource descriptors that describe the current
 | 
						|
                                configuration of this PCI root bridge.
 | 
						|
 | 
						|
  @retval EFI_SUCCESS           The current configuration of this PCI root bridge was returned in
 | 
						|
                                Resources.
 | 
						|
  @retval EFI_UNSUPPORTED       The current configuration of this PCI root bridge could not be
 | 
						|
                                retrieved.
 | 
						|
 | 
						|
**/
 | 
						|
typedef
 | 
						|
EFI_STATUS
 | 
						|
(EFIAPI *EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_CONFIGURATION)(
 | 
						|
  IN  EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL          *This,
 | 
						|
  OUT VOID                                     **Resources
 | 
						|
  );
 | 
						|
 | 
						|
///
 | 
						|
/// Provides the basic Memory, I/O, PCI configuration, and DMA interfaces that are
 | 
						|
/// used to abstract accesses to PCI controllers behind a PCI Root Bridge Controller.
 | 
						|
///
 | 
						|
struct _EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL {
 | 
						|
  ///
 | 
						|
  /// The EFI_HANDLE of the PCI Host Bridge of which this PCI Root Bridge is a member.
 | 
						|
  ///
 | 
						|
  EFI_HANDLE                                         ParentHandle;
 | 
						|
  EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_POLL_IO_MEM        PollMem;
 | 
						|
  EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_POLL_IO_MEM        PollIo;
 | 
						|
  EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_ACCESS             Mem;
 | 
						|
  EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_ACCESS             Io;
 | 
						|
  EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_ACCESS             Pci;
 | 
						|
  EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_COPY_MEM           CopyMem;
 | 
						|
  EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_MAP                Map;
 | 
						|
  EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_UNMAP              Unmap;
 | 
						|
  EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_ALLOCATE_BUFFER    AllocateBuffer;
 | 
						|
  EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_FREE_BUFFER        FreeBuffer;
 | 
						|
  EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_FLUSH              Flush;
 | 
						|
  EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_GET_ATTRIBUTES     GetAttributes;
 | 
						|
  EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_SET_ATTRIBUTES     SetAttributes;
 | 
						|
  EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_CONFIGURATION      Configuration;
 | 
						|
 | 
						|
  ///
 | 
						|
  /// The segment number that this PCI root bridge resides.
 | 
						|
  ///
 | 
						|
  UINT32                                             SegmentNumber;
 | 
						|
};
 | 
						|
 | 
						|
extern EFI_GUID  gEfiPciRootBridgeIoProtocolGuid;
 | 
						|
 | 
						|
#endif
 |