Home | History | Annotate | Download | only in PciHostBridgeDxe
      1 /** @file
      2 
      3   The PCI Root Bridge header file.
      4 
      5 Copyright (c) 1999 - 2016, Intel Corporation. All rights reserved.<BR>
      6 This program and the accompanying materials
      7 are licensed and made available under the terms and conditions of the BSD License
      8 which accompanies this distribution.  The full text of the license may be found at
      9 http://opensource.org/licenses/bsd-license.php
     10 
     11 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
     12 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
     13 
     14 **/
     15 
     16 #ifndef _PCI_ROOT_BRIDGE_H_
     17 #define _PCI_ROOT_BRIDGE_H_
     18 
     19 #include <PiDxe.h>
     20 #include <IndustryStandard/Acpi.h>
     21 #include <IndustryStandard/Pci.h>
     22 
     23 //
     24 // Driver Consumed Protocol Prototypes
     25 //
     26 #include <Protocol/Metronome.h>
     27 #include <Protocol/CpuIo2.h>
     28 #include <Protocol/DevicePath.h>
     29 #include <Protocol/PciRootBridgeIo.h>
     30 #include <Library/DebugLib.h>
     31 #include <Library/DevicePathLib.h>
     32 #include <Library/BaseMemoryLib.h>
     33 #include <Library/DxeServicesTableLib.h>
     34 #include <Library/UefiBootServicesTableLib.h>
     35 #include <Library/BaseLib.h>
     36 #include <Library/PciSegmentLib.h>
     37 #include "PciHostResource.h"
     38 
     39 
     40 typedef enum {
     41   IoOperation,
     42   MemOperation,
     43   PciOperation
     44 } OPERATION_TYPE;
     45 
     46 #define MAP_INFO_SIGNATURE  SIGNATURE_32 ('_', 'm', 'a', 'p')
     47 typedef struct {
     48   UINT32                                    Signature;
     49   LIST_ENTRY                                Link;
     50   EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_OPERATION Operation;
     51   UINTN                                     NumberOfBytes;
     52   UINTN                                     NumberOfPages;
     53   EFI_PHYSICAL_ADDRESS                      HostAddress;
     54   EFI_PHYSICAL_ADDRESS                      MappedHostAddress;
     55 } MAP_INFO;
     56 #define MAP_INFO_FROM_LINK(a) CR (a, MAP_INFO, Link, MAP_INFO_SIGNATURE)
     57 
     58 #define PCI_ROOT_BRIDGE_SIGNATURE SIGNATURE_32 ('_', 'p', 'r', 'b')
     59 
     60 typedef struct {
     61   UINT32                            Signature;
     62   LIST_ENTRY                        Link;
     63   EFI_HANDLE                        Handle;
     64   UINT64                            AllocationAttributes;
     65   UINT64                            Attributes;
     66   UINT64                            Supports;
     67   PCI_RES_NODE                      ResAllocNode[TypeMax];
     68   PCI_ROOT_BRIDGE_APERTURE          Bus;
     69   PCI_ROOT_BRIDGE_APERTURE          Io;
     70   PCI_ROOT_BRIDGE_APERTURE          Mem;
     71   PCI_ROOT_BRIDGE_APERTURE          PMem;
     72   PCI_ROOT_BRIDGE_APERTURE          MemAbove4G;
     73   PCI_ROOT_BRIDGE_APERTURE          PMemAbove4G;
     74   BOOLEAN                           DmaAbove4G;
     75   BOOLEAN                           NoExtendedConfigSpace;
     76   VOID                              *ConfigBuffer;
     77   EFI_DEVICE_PATH_PROTOCOL          *DevicePath;
     78   CHAR16                            *DevicePathStr;
     79   EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL   RootBridgeIo;
     80 
     81   BOOLEAN                           ResourceSubmitted;
     82   LIST_ENTRY                        Maps;
     83 } PCI_ROOT_BRIDGE_INSTANCE;
     84 
     85 #define ROOT_BRIDGE_FROM_THIS(a) CR (a, PCI_ROOT_BRIDGE_INSTANCE, RootBridgeIo, PCI_ROOT_BRIDGE_SIGNATURE)
     86 
     87 #define ROOT_BRIDGE_FROM_LINK(a) CR (a, PCI_ROOT_BRIDGE_INSTANCE, Link, PCI_ROOT_BRIDGE_SIGNATURE)
     88 
     89 /**
     90   Construct the Pci Root Bridge instance.
     91 
     92   @param Bridge            The root bridge instance.
     93 
     94   @return The pointer to PCI_ROOT_BRIDGE_INSTANCE just created
     95           or NULL if creation fails.
     96 **/
     97 PCI_ROOT_BRIDGE_INSTANCE *
     98 CreateRootBridge (
     99   IN PCI_ROOT_BRIDGE       *Bridge
    100   );
    101 
    102 //
    103 // Protocol Member Function Prototypes
    104 //
    105 /**
    106 
    107   Poll an address in memory mapped space until an exit condition is met
    108   or a timeout occurs.
    109 
    110   @param This     -  Pointer to EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL instance.
    111   @param Width    -  Width of the memory operation.
    112   @param Address  -  The base address of the memory operation.
    113   @param Mask     -  Mask used for polling criteria.
    114   @param Value    -  Comparison value used for polling exit criteria.
    115   @param Delay    -  Number of 100ns units to poll.
    116   @param Result   -  Pointer to the last value read from memory location.
    117 
    118   @retval EFI_SUCCESS            -  Success.
    119   @retval EFI_INVALID_PARAMETER  -  Invalid parameter found.
    120   @retval EFI_TIMEOUT            -  Delay expired before a match occurred.
    121   @retval EFI_OUT_OF_RESOURCES   -  Fail due to lack of resources.
    122 
    123 **/
    124 EFI_STATUS
    125 EFIAPI
    126 RootBridgeIoPollMem (
    127   IN  EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL        *This,
    128   IN  EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_WIDTH  Width,
    129   IN  UINT64                                 Address,
    130   IN  UINT64                                 Mask,
    131   IN  UINT64                                 Value,
    132   IN  UINT64                                 Delay,
    133   OUT UINT64                                 *Result
    134   )
    135 ;
    136 
    137 /**
    138 
    139   Poll an address in I/O space until an exit condition is met
    140   or a timeout occurs.
    141 
    142   @param This     -  Pointer to EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL instance.
    143   @param Width    -  Width of I/O operation.
    144   @param Address  -  The base address of the I/O operation.
    145   @param Mask     -  Mask used for polling criteria.
    146   @param Value    -  Comparison value used for polling exit criteria.
    147   @param Delay    -  Number of 100ns units to poll.
    148   @param Result   -  Pointer to the last value read from memory location.
    149 
    150   @retval EFI_SUCCESS            -  Success.
    151   @retval EFI_INVALID_PARAMETER  -  Invalid parameter found.
    152   @retval EFI_TIMEOUT            -  Delay expired before a match occurred.
    153   @retval EFI_OUT_OF_RESOURCES   -  Fail due to lack of resources.
    154 
    155 **/
    156 EFI_STATUS
    157 EFIAPI
    158 RootBridgeIoPollIo (
    159   IN  EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL        *This,
    160   IN  EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_WIDTH  Width,
    161   IN  UINT64                                 Address,
    162   IN  UINT64                                 Mask,
    163   IN  UINT64                                 Value,
    164   IN  UINT64                                 Delay,
    165   OUT UINT64                                 *Result
    166   )
    167 ;
    168 
    169 /**
    170 
    171   Allow read from memory mapped I/O space.
    172 
    173   @param This     -  Pointer to EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL instance.
    174   @param Width    -  The width of memory operation.
    175   @param Address  -  Base address of the memory operation.
    176   @param Count    -  Number of memory opeartion to perform.
    177   @param Buffer   -  The destination buffer to store data.
    178 
    179   @retval EFI_SUCCESS            -  Success.
    180   @retval EFI_INVALID_PARAMETER  -  Invalid parameter found.
    181   @retval EFI_OUT_OF_RESOURCES   -  Fail due to lack of resources.
    182 
    183 **/
    184 EFI_STATUS
    185 EFIAPI
    186 RootBridgeIoMemRead (
    187   IN     EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL        *This,
    188   IN     EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_WIDTH  Width,
    189   IN     UINT64                                 Address,
    190   IN     UINTN                                  Count,
    191   IN OUT VOID                                   *Buffer
    192   )
    193 ;
    194 
    195 /**
    196 
    197   Allow write to memory mapped I/O space.
    198 
    199   @param This     -  Pointer to EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL instance.
    200   @param Width    -  The width of memory operation.
    201   @param Address  -  Base address of the memory operation.
    202   @param Count    -  Number of memory opeartion to perform.
    203   @param Buffer   -  The source buffer to write data from.
    204 
    205   @retval EFI_SUCCESS            -  Success.
    206   @retval EFI_INVALID_PARAMETER  -  Invalid parameter found.
    207   @retval EFI_OUT_OF_RESOURCES   -  Fail due to lack of resources.
    208 
    209 **/
    210 EFI_STATUS
    211 EFIAPI
    212 RootBridgeIoMemWrite (
    213   IN     EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL        *This,
    214   IN     EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_WIDTH  Width,
    215   IN     UINT64                                 Address,
    216   IN     UINTN                                  Count,
    217   IN OUT VOID                                   *Buffer
    218   )
    219 ;
    220 
    221 /**
    222 
    223   Enable a PCI driver to read PCI controller registers in the
    224   PCI root bridge I/O space.
    225 
    226   @param This         -  A pointer to EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL
    227   @param Width        -  Signifies the width of the memory operation.
    228   @param UserAddress  -  The base address of the I/O operation.
    229   @param Count        -  The number of I/O operations to perform.
    230   @param UserBuffer   -  The destination buffer to store the results.
    231 
    232   @retval EFI_SUCCESS            -  The data was read from the PCI root bridge.
    233   @retval EFI_INVALID_PARAMETER  -  Invalid parameters found.
    234   @retval EFI_OUT_OF_RESOURCES   -  The request could not be completed due to a lack of
    235                             @retval resources.
    236 **/
    237 EFI_STATUS
    238 EFIAPI
    239 RootBridgeIoIoRead (
    240   IN     EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL        *This,
    241   IN     EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_WIDTH  Width,
    242   IN     UINT64                                 UserAddress,
    243   IN     UINTN                                  Count,
    244   IN OUT VOID                                   *UserBuffer
    245   )
    246 ;
    247 
    248 /**
    249 
    250   Enable a PCI driver to write to PCI controller registers in the
    251   PCI root bridge I/O space.
    252 
    253   @param This         -  A pointer to EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL
    254   @param Width        -  Signifies the width of the memory operation.
    255   @param UserAddress  -  The base address of the I/O operation.
    256   @param Count        -  The number of I/O operations to perform.
    257   @param UserBuffer   -  The source buffer to write data from.
    258 
    259   @retval EFI_SUCCESS            -  The data was written to the PCI root bridge.
    260   @retval EFI_INVALID_PARAMETER  -  Invalid parameters found.
    261   @retval EFI_OUT_OF_RESOURCES   -  The request could not be completed due to a lack of
    262                             @retval resources.
    263 **/
    264 EFI_STATUS
    265 EFIAPI
    266 RootBridgeIoIoWrite (
    267   IN     EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL        *This,
    268   IN     EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_WIDTH  Width,
    269   IN     UINT64                                 UserAddress,
    270   IN     UINTN                                  Count,
    271   IN OUT VOID                                   *UserBuffer
    272   )
    273 ;
    274 
    275 /**
    276 
    277   Copy one region of PCI root bridge memory space to be copied to
    278   another region of PCI root bridge memory space.
    279 
    280   @param This         -  A pointer to EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL instance.
    281   @param Width        -  Signifies the width of the memory operation.
    282   @param DestAddress  -  Destination address of the memory operation.
    283   @param SrcAddress   -  Source address of the memory operation.
    284   @param Count        -  Number of memory operations to perform.
    285 
    286   @retval EFI_SUCCESS            -  The data was copied successfully.
    287   @retval EFI_INVALID_PARAMETER  -  Invalid parameters found.
    288   @retval EFI_OUT_OF_RESOURCES   -  The request could not be completed due to a lack of
    289                             @retval resources.
    290 **/
    291 EFI_STATUS
    292 EFIAPI
    293 RootBridgeIoCopyMem (
    294   IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL          *This,
    295   IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_WIDTH    Width,
    296   IN UINT64                                   DestAddress,
    297   IN UINT64                                   SrcAddress,
    298   IN UINTN                                    Count
    299   )
    300 ;
    301 
    302 /**
    303 
    304   Allows read from PCI configuration space.
    305 
    306   @param This     -  A pointer to EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL
    307   @param Width    -  Signifies the width of the memory operation.
    308   @param Address  -  The address within the PCI configuration space
    309                      for the PCI controller.
    310   @param Count    -  The number of PCI configuration operations
    311                      to perform.
    312   @param Buffer   -  The destination buffer to store the results.
    313 
    314   @retval EFI_SUCCESS            -  The data was read from the PCI root bridge.
    315   @retval EFI_INVALID_PARAMETER  -  Invalid parameters found.
    316   @retval EFI_OUT_OF_RESOURCES   -  The request could not be completed due to a lack of
    317                             @retval resources.
    318 **/
    319 EFI_STATUS
    320 EFIAPI
    321 RootBridgeIoPciRead (
    322   IN     EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL        *This,
    323   IN     EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_WIDTH  Width,
    324   IN     UINT64                                 Address,
    325   IN     UINTN                                  Count,
    326   IN OUT VOID                                   *Buffer
    327   )
    328 ;
    329 
    330 /**
    331 
    332   Allows write to PCI configuration space.
    333 
    334   @param This     -  A pointer to EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL
    335   @param Width    -  Signifies the width of the memory operation.
    336   @param Address  -  The address within the PCI configuration space
    337                      for the PCI controller.
    338   @param Count    -  The number of PCI configuration operations
    339                      to perform.
    340   @param Buffer   -  The source buffer to get the results.
    341 
    342   @retval EFI_SUCCESS            -  The data was written to the PCI root bridge.
    343   @retval EFI_INVALID_PARAMETER  -  Invalid parameters found.
    344   @retval EFI_OUT_OF_RESOURCES   -  The request could not be completed due to a lack of
    345                             @retval resources.
    346 **/
    347 EFI_STATUS
    348 EFIAPI
    349 RootBridgeIoPciWrite (
    350   IN     EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL        *This,
    351   IN     EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_WIDTH  Width,
    352   IN     UINT64                                 Address,
    353   IN     UINTN                                  Count,
    354   IN OUT VOID                                   *Buffer
    355   )
    356 ;
    357 
    358 /**
    359   Provides the PCI controller-specific address needed to access
    360   system memory for DMA.
    361 
    362   @param This           A pointer to the EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL.
    363   @param Operation      Indicate if the bus master is going to read or write
    364                         to system memory.
    365   @param HostAddress    The system memory address to map on the PCI controller.
    366   @param NumberOfBytes  On input the number of bytes to map.
    367                         On output the number of bytes that were mapped.
    368   @param DeviceAddress  The resulting map address for the bus master PCI
    369                         controller to use to access the system memory's HostAddress.
    370   @param Mapping        The value to pass to Unmap() when the bus master DMA
    371                         operation is complete.
    372 
    373   @retval EFI_SUCCESS            Success.
    374   @retval EFI_INVALID_PARAMETER  Invalid parameters found.
    375   @retval EFI_UNSUPPORTED        The HostAddress cannot be mapped as a common buffer.
    376   @retval EFI_DEVICE_ERROR       The System hardware could not map the requested address.
    377   @retval EFI_OUT_OF_RESOURCES   The request could not be completed due to lack of resources.
    378 **/
    379 EFI_STATUS
    380 EFIAPI
    381 RootBridgeIoMap (
    382   IN     EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL            *This,
    383   IN     EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_OPERATION  Operation,
    384   IN     VOID                                       *HostAddress,
    385   IN OUT UINTN                                      *NumberOfBytes,
    386   OUT    EFI_PHYSICAL_ADDRESS                       *DeviceAddress,
    387   OUT    VOID                                       **Mapping
    388   )
    389 ;
    390 
    391 /**
    392   Completes the Map() operation and releases any corresponding resources.
    393 
    394   The Unmap() function completes the Map() operation and releases any
    395   corresponding resources.
    396   If the operation was an EfiPciOperationBusMasterWrite or
    397   EfiPciOperationBusMasterWrite64, the data is committed to the target system
    398   memory.
    399   Any resources used for the mapping are freed.
    400 
    401   @param[in] This      A pointer to the EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL.
    402   @param[in] Mapping   The mapping value returned from Map().
    403 
    404   @retval EFI_SUCCESS            The range was unmapped.
    405   @retval EFI_INVALID_PARAMETER  Mapping is not a value that was returned by Map().
    406   @retval EFI_DEVICE_ERROR       The data was not committed to the target system memory.
    407 **/
    408 EFI_STATUS
    409 EFIAPI
    410 RootBridgeIoUnmap (
    411   IN  EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL  *This,
    412   IN  VOID                             *Mapping
    413   )
    414 ;
    415 
    416 /**
    417   Allocates pages that are suitable for an EfiPciOperationBusMasterCommonBuffer
    418   or EfiPciOperationBusMasterCommonBuffer64 mapping.
    419 
    420   @param This        A pointer to the EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL.
    421   @param Type        This parameter is not used and must be ignored.
    422   @param MemoryType  The type of memory to allocate, EfiBootServicesData or
    423                      EfiRuntimeServicesData.
    424   @param Pages       The number of pages to allocate.
    425   @param HostAddress A pointer to store the base system memory address of the
    426                      allocated range.
    427   @param Attributes  The requested bit mask of attributes for the allocated
    428                      range. Only the attributes
    429                      EFI_PCI_ATTRIBUTE_MEMORY_WRITE_COMBINE,
    430                      EFI_PCI_ATTRIBUTE_MEMORY_CACHED, and
    431                      EFI_PCI_ATTRIBUTE_DUAL_ADDRESS_CYCLE may be used with this
    432                      function.
    433 
    434   @retval EFI_SUCCESS            The requested memory pages were allocated.
    435   @retval EFI_INVALID_PARAMETER  MemoryType is invalid.
    436   @retval EFI_INVALID_PARAMETER  HostAddress is NULL.
    437   @retval EFI_UNSUPPORTED        Attributes is unsupported. The only legal
    438                                  attribute bits are MEMORY_WRITE_COMBINE,
    439                                  MEMORY_CACHED, and DUAL_ADDRESS_CYCLE.
    440   @retval EFI_OUT_OF_RESOURCES   The memory pages could not be allocated.
    441 **/
    442 EFI_STATUS
    443 EFIAPI
    444 RootBridgeIoAllocateBuffer (
    445   IN  EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL  *This,
    446   IN  EFI_ALLOCATE_TYPE                Type,
    447   IN  EFI_MEMORY_TYPE                  MemoryType,
    448   IN  UINTN                            Pages,
    449   OUT VOID                             **HostAddress,
    450   IN  UINT64                           Attributes
    451   )
    452 ;
    453 
    454 /**
    455 
    456   Free memory allocated in AllocateBuffer.
    457 
    458   @param This         -  Pointer to EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL
    459                          instance.
    460   @param Pages        -  Number of pages to free.
    461   @param HostAddress  -  The base system memory address of the
    462                          allocated range.
    463 
    464   @retval EFI_SUCCESS            -  Requested memory pages were freed.
    465   @retval EFI_INVALID_PARAMETER  -  Invalid parameter found.
    466 
    467 **/
    468 EFI_STATUS
    469 EFIAPI
    470 RootBridgeIoFreeBuffer (
    471   IN  EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL  *This,
    472   IN  UINTN                            Pages,
    473   OUT VOID                             *HostAddress
    474   )
    475 ;
    476 
    477 /**
    478 
    479   Flushes all PCI posted write transactions from a PCI host
    480   bridge to system memory.
    481 
    482   @param This  - Pointer to EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL instance.
    483 
    484   @retval EFI_SUCCESS       -  PCI posted write transactions were flushed
    485                        @retval from PCI host bridge to system memory.
    486   @retval EFI_DEVICE_ERROR  -  Fail due to hardware error.
    487 
    488 **/
    489 EFI_STATUS
    490 EFIAPI
    491 RootBridgeIoFlush (
    492   IN  EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL  *This
    493   )
    494 ;
    495 
    496 /**
    497   Gets the attributes that a PCI root bridge supports setting with
    498   SetAttributes(), and the attributes that a PCI root bridge is currently
    499   using.
    500 
    501   The GetAttributes() function returns the mask of attributes that this PCI
    502   root bridge supports and the mask of attributes that the PCI root bridge is
    503   currently using.
    504 
    505   @param This        A pointer to the EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL.
    506   @param Supported   A pointer to the mask of attributes that this PCI root
    507                      bridge supports setting with SetAttributes().
    508   @param Attributes  A pointer to the mask of attributes that this PCI root
    509                      bridge is currently using.
    510 
    511   @retval  EFI_SUCCESS           If Supports is not NULL, then the attributes
    512                                  that the PCI root bridge supports is returned
    513                                  in Supports. If Attributes is not NULL, then
    514                                  the attributes that the PCI root bridge is
    515                                  currently using is returned in Attributes.
    516   @retval  EFI_INVALID_PARAMETER Both Supports and Attributes are NULL.
    517 **/
    518 EFI_STATUS
    519 EFIAPI
    520 RootBridgeIoGetAttributes (
    521   IN  EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL  *This,
    522   OUT UINT64                           *Supported,
    523   OUT UINT64                           *Attributes
    524   )
    525 ;
    526 
    527 /**
    528 
    529   Sets the attributes for a resource range on a PCI root bridge.
    530 
    531   @param This            -  Pointer to EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL instance.
    532   @param Attributes      -  The mask of attributes to set.
    533   @param ResourceBase    -  Pointer to the base address of the resource range
    534                             to be modified by the attributes specified by Attributes.
    535   @param ResourceLength  -  Pointer to the length of the resource range to be modified.
    536 
    537   @retval EFI_SUCCESS            -  Success.
    538   @retval EFI_INVALID_PARAMETER  -  Invalid parameter found.
    539   @retval EFI_OUT_OF_RESOURCES   -  Not enough resources to set the attributes upon.
    540 
    541 **/
    542 EFI_STATUS
    543 EFIAPI
    544 RootBridgeIoSetAttributes (
    545   IN     EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL  *This,
    546   IN     UINT64                           Attributes,
    547   IN OUT UINT64                           *ResourceBase,
    548   IN OUT UINT64                           *ResourceLength
    549   )
    550 ;
    551 
    552 /**
    553 
    554   Retrieves the current resource settings of this PCI root bridge
    555   in the form of a set of ACPI 2.0 resource descriptor.
    556 
    557   @param This       -  Pointer to the EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL instance.
    558   @param Resources  -  Pointer to the ACPI 2.0 resource descriptor that
    559                        describe the current configuration of this PCI root
    560                        bridge.
    561 
    562   @retval EFI_SUCCESS      -  Success.
    563   @retval EFI_UNSUPPORTED  -  Current configuration of the PCI root bridge
    564                       @retval could not be retrieved.
    565 
    566 **/
    567 EFI_STATUS
    568 EFIAPI
    569 RootBridgeIoConfiguration (
    570   IN  EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL  *This,
    571   OUT VOID                             **Resources
    572   )
    573 ;
    574 
    575 
    576 extern EFI_METRONOME_ARCH_PROTOCOL *mMetronome;
    577 extern EFI_CPU_IO2_PROTOCOL         *mCpuIo;
    578 #endif
    579