1 /** @file 2 The Header file of the Pci Host Bridge Driver 3 4 Copyright (c) 2008 - 2010, Intel Corporation. All rights reserved.<BR> 5 6 This program and the accompanying materials are licensed and made available 7 under the terms and conditions of the BSD License which accompanies this 8 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 #ifndef _PCI_HOST_BRIDGE_H_ 16 #define _PCI_HOST_BRIDGE_H_ 17 18 #include <PiDxe.h> 19 20 #include <IndustryStandard/Pci.h> 21 #include <IndustryStandard/Acpi.h> 22 23 #include <Protocol/PciHostBridgeResourceAllocation.h> 24 #include <Protocol/PciRootBridgeIo.h> 25 #include <Protocol/Metronome.h> 26 #include <Protocol/DevicePath.h> 27 28 29 #include <Library/BaseLib.h> 30 #include <Library/DebugLib.h> 31 #include <Library/BaseMemoryLib.h> 32 #include <Library/MemoryAllocationLib.h> 33 #include <Library/UefiLib.h> 34 #include <Library/UefiBootServicesTableLib.h> 35 #include <Library/DxeServicesTableLib.h> 36 #include <Library/DevicePathLib.h> 37 #include <Library/IoLib.h> 38 #include <Library/PciLib.h> 39 40 // 41 // Hard code the host bridge number in the platform. 42 // In this chipset, there is only one host bridge. 43 // 44 #define HOST_BRIDGE_NUMBER 1 45 46 #define MAX_PCI_DEVICE_NUMBER 31 47 #define MAX_PCI_FUNCTION_NUMBER 7 48 #define MAX_PCI_REG_ADDRESS 0xFF 49 50 typedef enum { 51 IoOperation, 52 MemOperation, 53 PciOperation 54 } OPERATION_TYPE; 55 56 #define PCI_HOST_BRIDGE_SIGNATURE SIGNATURE_32('e', 'h', 's', 't') 57 typedef struct { 58 UINTN Signature; 59 EFI_HANDLE HostBridgeHandle; 60 UINTN RootBridgeNumber; 61 LIST_ENTRY Head; 62 BOOLEAN ResourceSubmited; 63 BOOLEAN CanRestarted; 64 EFI_PCI_HOST_BRIDGE_RESOURCE_ALLOCATION_PROTOCOL ResAlloc; 65 } PCI_HOST_BRIDGE_INSTANCE; 66 67 #define INSTANCE_FROM_RESOURCE_ALLOCATION_THIS(a) \ 68 CR(a, PCI_HOST_BRIDGE_INSTANCE, ResAlloc, PCI_HOST_BRIDGE_SIGNATURE) 69 70 // 71 // HostBridge Resource Allocation interface 72 // 73 74 /** 75 These are the notifications from the PCI bus driver that it is about to enter 76 a certain phase of the PCI enumeration process. 77 78 This member function can be used to notify the host bridge driver to perform 79 specific actions, including any chipset-specific initialization, so that the 80 chipset is ready to enter the next phase. Eight notification points are 81 defined at this time. See belows: 82 83 EfiPciHostBridgeBeginEnumeration Resets the host bridge PCI apertures 84 and internal data structures. The PCI 85 enumerator should issue this 86 notification before starting a fresh 87 enumeration process. Enumeration 88 cannot be restarted after sending any 89 other notification such as 90 EfiPciHostBridgeBeginBusAllocation. 91 92 EfiPciHostBridgeBeginBusAllocation The bus allocation phase is about to 93 begin. No specific action is required 94 here. This notification can be used to 95 perform any chipset-specific 96 programming. 97 98 EfiPciHostBridgeEndBusAllocation The bus allocation and bus programming 99 phase is complete. No specific action 100 is required here. This notification 101 can be used to perform any 102 chipset-specific programming. 103 104 EfiPciHostBridgeBeginResourceAllocation 105 The resource allocation phase is about 106 to begin. No specific action is 107 required here. This notification can 108 be used to perform any 109 chipset-specific programming. 110 111 EfiPciHostBridgeAllocateResources Allocates resources per previously 112 submitted requests for all the PCI 113 root bridges. These resource settings 114 are returned on the next call to 115 GetProposedResources(). Before calling 116 NotifyPhase() with a Phase of 117 EfiPciHostBridgeAllocateResource, the 118 PCI bus enumerator is responsible for 119 gathering I/O and memory requests for 120 all the PCI root bridges and 121 submitting these requests using 122 SubmitResources(). This function pads 123 the resource amount to suit the root 124 bridge hardware, takes care of 125 dependencies between the PCI root 126 bridges, and calls the Global 127 Coherency Domain (GCD) with the 128 allocation request. In the case of 129 padding, the allocated range could be 130 bigger than what was requested. 131 132 EfiPciHostBridgeSetResources Programs the host bridge hardware to 133 decode previously allocated resources 134 (proposed resources) for all the PCI 135 root bridges. After the hardware is 136 programmed, reassigning resources will 137 not be supported. The bus settings are 138 not affected. 139 140 EfiPciHostBridgeFreeResources Deallocates resources that were 141 previously allocated for all the PCI 142 root bridges and resets the I/O and 143 memory apertures to their initial 144 state. The bus settings are not 145 affected. If the request to allocate 146 resources fails, the PCI enumerator 147 can use this notification to 148 deallocate previous resources, adjust 149 the requests, and retry allocation. 150 151 EfiPciHostBridgeEndResourceAllocation The resource allocation phase is 152 completed. No specific action is 153 required here. This notification can 154 be used to perform any chipsetspecific 155 programming. 156 157 @param[in] This The instance pointer of 158 EFI_PCI_HOST_BRIDGE_RESOURCE_ALLOCATION_PROTOCOL 159 160 @param[in] Phase The phase during enumeration 161 162 @retval EFI_NOT_READY This phase cannot be entered at this time. For 163 example, this error is valid for a Phase of 164 EfiPciHostBridgeAllocateResources if 165 SubmitResources() has not been called for one 166 or more PCI root bridges before this call 167 168 @retval EFI_DEVICE_ERROR Programming failed due to a hardware error. 169 This error is valid for a Phase of 170 EfiPciHostBridgeSetResources. 171 172 @retval EFI_INVALID_PARAMETER Invalid phase parameter 173 174 @retval EFI_OUT_OF_RESOURCES The request could not be completed due to a 175 lack of resources. This error is valid for a 176 Phase of EfiPciHostBridgeAllocateResources if 177 the previously submitted resource requests 178 cannot be fulfilled or were only partially 179 fulfilled. 180 181 @retval EFI_SUCCESS The notification was accepted without any 182 errors. 183 **/ 184 EFI_STATUS 185 EFIAPI 186 NotifyPhase( 187 IN EFI_PCI_HOST_BRIDGE_RESOURCE_ALLOCATION_PROTOCOL *This, 188 IN EFI_PCI_HOST_BRIDGE_RESOURCE_ALLOCATION_PHASE Phase 189 ); 190 191 /** 192 Return the device handle of the next PCI root bridge that is associated with 193 this Host Bridge. 194 195 This function is called multiple times to retrieve the device handles of all 196 the PCI root bridges that are associated with this PCI host bridge. Each PCI 197 host bridge is associated with one or more PCI root bridges. On each call, 198 the handle that was returned by the previous call is passed into the 199 interface, and on output the interface returns the device handle of the next 200 PCI root bridge. The caller can use the handle to obtain the instance of the 201 EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL for that root bridge. When there are no more 202 PCI root bridges to report, the interface returns EFI_NOT_FOUND. A PCI 203 enumerator must enumerate the PCI root bridges in the order that they are 204 returned by this function. 205 206 For D945 implementation, there is only one root bridge in PCI host bridge. 207 208 @param[in] This The instance pointer of 209 EFI_PCI_HOST_BRIDGE_RESOURCE_ALLOCATION_PROTOCOL 210 211 @param[in, out] RootBridgeHandle Returns the device handle of the next PCI 212 root bridge. 213 214 @retval EFI_SUCCESS If parameter RootBridgeHandle = NULL, then 215 return the first Rootbridge handle of the 216 specific Host bridge and return EFI_SUCCESS. 217 218 @retval EFI_NOT_FOUND Can not find the any more root bridge in 219 specific host bridge. 220 221 @retval EFI_INVALID_PARAMETER RootBridgeHandle is not an EFI_HANDLE that was 222 returned on a previous call to 223 GetNextRootBridge(). 224 **/ 225 EFI_STATUS 226 EFIAPI 227 GetNextRootBridge( 228 IN EFI_PCI_HOST_BRIDGE_RESOURCE_ALLOCATION_PROTOCOL *This, 229 IN OUT EFI_HANDLE *RootBridgeHandle 230 ); 231 232 /** 233 Returns the allocation attributes of a PCI root bridge. 234 235 The function returns the allocation attributes of a specific PCI root bridge. 236 The attributes can vary from one PCI root bridge to another. These attributes 237 are different from the decode-related attributes that are returned by the 238 EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL.GetAttributes() member function. The 239 RootBridgeHandle parameter is used to specify the instance of the PCI root 240 bridge. The device handles of all the root bridges that are associated with 241 this host bridge must be obtained by calling GetNextRootBridge(). The 242 attributes are static in the sense that they do not change during or after 243 the enumeration process. The hardware may provide mechanisms to change the 244 attributes on the fly, but such changes must be completed before 245 EFI_PCI_HOST_BRIDGE_RESOURCE_ALLOCATION_PROTOCOL is installed. The permitted 246 values of EFI_PCI_HOST_BRIDGE_RESOURCE_ALLOCATION_ATTRIBUTES are defined in 247 "Related Definitions" below. The caller uses these attributes to combine 248 multiple resource requests. 249 250 For example, if the flag EFI_PCI_HOST_BRIDGE_COMBINE_MEM_PMEM is set, the PCI 251 bus enumerator needs to include requests for the prefetchable memory in the 252 nonprefetchable memory pool and not request any prefetchable memory. 253 254 Attribute Description 255 ------------------------------------ --------------------------------------- 256 EFI_PCI_HOST_BRIDGE_COMBINE_MEM_PMEM If this bit is set, then the PCI root 257 bridge does not support separate 258 windows for nonprefetchable and 259 prefetchable memory. A PCI bus driver 260 needs to include requests for 261 prefetchable memory in the 262 nonprefetchable memory pool. 263 264 EFI_PCI_HOST_BRIDGE_MEM64_DECODE If this bit is set, then the PCI root 265 bridge supports 64-bit memory windows. 266 If this bit is not set, the PCI bus 267 driver needs to include requests for a 268 64-bit memory address in the 269 corresponding 32-bit memory pool. 270 271 @param[in] This The instance pointer of 272 EFI_PCI_HOST_BRIDGE_RESOURCE_ALLOCATION_PROTOCOL 273 274 @param[in] RootBridgeHandle The device handle of the PCI root bridge in 275 which the caller is interested. Type 276 EFI_HANDLE is defined in 277 InstallProtocolInterface() in the UEFI 2.0 278 Specification. 279 280 @param[out] Attributes The pointer to attribte of root bridge, it is 281 output parameter 282 283 @retval EFI_INVALID_PARAMETER Attribute pointer is NULL 284 285 @retval EFI_INVALID_PARAMETER RootBridgehandle is invalid. 286 287 @retval EFI_SUCCESS Success to get attribute of interested root 288 bridge. 289 **/ 290 EFI_STATUS 291 EFIAPI 292 GetAttributes( 293 IN EFI_PCI_HOST_BRIDGE_RESOURCE_ALLOCATION_PROTOCOL *This, 294 IN EFI_HANDLE RootBridgeHandle, 295 OUT UINT64 *Attributes 296 ); 297 298 /** 299 Sets up the specified PCI root bridge for the bus enumeration process. 300 301 This member function sets up the root bridge for bus enumeration and returns 302 the PCI bus range over which the search should be performed in ACPI 2.0 303 resource descriptor format. 304 305 @param[in] This The 306 EFI_PCI_HOST_BRIDGE_RESOURCE_ALLOCATION_PROTOCOL 307 instance. 308 309 @param[in] RootBridgeHandle The PCI Root Bridge to be set up. 310 311 @param[out] Configuration Pointer to the pointer to the PCI bus resource 312 descriptor. 313 314 @retval EFI_INVALID_PARAMETER Invalid Root bridge's handle 315 316 @retval EFI_OUT_OF_RESOURCES Fail to allocate ACPI resource descriptor tag. 317 318 @retval EFI_SUCCESS Sucess to allocate ACPI resource descriptor. 319 **/ 320 EFI_STATUS 321 EFIAPI 322 StartBusEnumeration( 323 IN EFI_PCI_HOST_BRIDGE_RESOURCE_ALLOCATION_PROTOCOL *This, 324 IN EFI_HANDLE RootBridgeHandle, 325 OUT VOID **Configuration 326 ); 327 328 /** 329 Programs the PCI root bridge hardware so that it decodes the specified PCI 330 bus range. 331 332 This member function programs the specified PCI root bridge to decode the bus 333 range that is specified by the input parameter Configuration. 334 The bus range information is specified in terms of the ACPI 2.0 resource 335 descriptor format. 336 337 @param[in] This The 338 EFI_PCI_HOST_BRIDGE_RESOURCE_ALLOCATION_PROTOCOL 339 instance 340 341 @param[in] RootBridgeHandle The PCI Root Bridge whose bus range is to be 342 programmed 343 344 @param[in] Configuration The pointer to the PCI bus resource descriptor 345 346 @retval EFI_INVALID_PARAMETER RootBridgeHandle is not a valid root bridge 347 handle. 348 349 @retval EFI_INVALID_PARAMETER Configuration is NULL. 350 351 @retval EFI_INVALID_PARAMETER Configuration does not point to a valid ACPI 352 2.0 resource descriptor. 353 354 @retval EFI_INVALID_PARAMETER Configuration does not include a valid ACPI 355 2.0 bus resource descriptor. 356 357 @retval EFI_INVALID_PARAMETER Configuration includes valid ACPI 2.0 resource 358 descriptors other than bus descriptors. 359 360 @retval EFI_INVALID_PARAMETER Configuration contains one or more invalid 361 ACPI resource descriptors. 362 363 @retval EFI_INVALID_PARAMETER "Address Range Minimum" is invalid for this 364 root bridge. 365 366 @retval EFI_INVALID_PARAMETER "Address Range Length" is invalid for this 367 root bridge. 368 369 @retval EFI_DEVICE_ERROR Programming failed due to a hardware error. 370 371 @retval EFI_SUCCESS The bus range for the PCI root bridge was 372 programmed. 373 **/ 374 EFI_STATUS 375 EFIAPI 376 SetBusNumbers( 377 IN EFI_PCI_HOST_BRIDGE_RESOURCE_ALLOCATION_PROTOCOL *This, 378 IN EFI_HANDLE RootBridgeHandle, 379 IN VOID *Configuration 380 ); 381 382 /** 383 Submits the I/O and memory resource requirements for the specified PCI root 384 bridge. 385 386 This function is used to submit all the I/O and memory resources that are 387 required by the specified PCI root bridge. The input parameter Configuration 388 is used to specify the following: 389 - The various types of resources that are required 390 - The associated lengths in terms of ACPI 2.0 resource descriptor format 391 392 @param[in] This Pointer to the 393 EFI_PCI_HOST_BRIDGE_RESOURCE_ALLOCATION_PROTOCOL 394 instance. 395 396 @param[in] RootBridgeHandle The PCI root bridge whose I/O and memory 397 resource requirements are being submitted. 398 399 @param[in] Configuration The pointer to the PCI I/O and PCI memory 400 resource descriptor. 401 402 @retval EFI_SUCCESS The I/O and memory resource requests for a PCI 403 root bridge were accepted. 404 405 @retval EFI_INVALID_PARAMETER RootBridgeHandle is not a valid root bridge 406 handle. 407 408 @retval EFI_INVALID_PARAMETER Configuration is NULL. 409 410 @retval EFI_INVALID_PARAMETER Configuration does not point to a valid ACPI 411 2.0 resource descriptor. 412 413 @retval EFI_INVALID_PARAMETER Configuration includes requests for one or 414 more resource types that are not supported by 415 this PCI root bridge. This error will happen 416 if the caller did not combine resources 417 according to Attributes that were returned by 418 GetAllocAttributes(). 419 420 @retval EFI_INVALID_PARAMETER Address Range Maximum" is invalid. 421 422 @retval EFI_INVALID_PARAMETER "Address Range Length" is invalid for this PCI 423 root bridge. 424 425 @retval EFI_INVALID_PARAMETER "Address Space Granularity" is invalid for 426 this PCI root bridge. 427 **/ 428 EFI_STATUS 429 EFIAPI 430 SubmitResources( 431 IN EFI_PCI_HOST_BRIDGE_RESOURCE_ALLOCATION_PROTOCOL *This, 432 IN EFI_HANDLE RootBridgeHandle, 433 IN VOID *Configuration 434 ); 435 436 /** 437 Returns the proposed resource settings for the specified PCI root bridge. 438 439 This member function returns the proposed resource settings for the 440 specified PCI root bridge. The proposed resource settings are prepared when 441 NotifyPhase() is called with a Phase of EfiPciHostBridgeAllocateResources. 442 The output parameter Configuration specifies the following: 443 - The various types of resources, excluding bus resources, that are 444 allocated 445 - The associated lengths in terms of ACPI 2.0 resource descriptor format 446 447 @param[in] This Pointer to the 448 EFI_PCI_HOST_BRIDGE_RESOURCE_ALLOCATION_PROTOCOL 449 instance. 450 451 @param[in] RootBridgeHandle The PCI root bridge handle. Type EFI_HANDLE is 452 defined in InstallProtocolInterface() in the 453 UEFI 2.0 Specification. 454 455 @param[out] Configuration The pointer to the pointer to the PCI I/O and 456 memory resource descriptor. 457 458 @retval EFI_SUCCESS The requested parameters were returned. 459 460 @retval EFI_INVALID_PARAMETER RootBridgeHandle is not a valid root bridge 461 handle. 462 463 @retval EFI_DEVICE_ERROR Programming failed due to a hardware error. 464 465 @retval EFI_OUT_OF_RESOURCES The request could not be completed due to a 466 lack of resources. 467 **/ 468 EFI_STATUS 469 EFIAPI 470 GetProposedResources( 471 IN EFI_PCI_HOST_BRIDGE_RESOURCE_ALLOCATION_PROTOCOL *This, 472 IN EFI_HANDLE RootBridgeHandle, 473 OUT VOID **Configuration 474 ); 475 476 /** 477 Provides the hooks from the PCI bus driver to every PCI controller 478 (device/function) at various stages of the PCI enumeration process that allow 479 the host bridge driver to preinitialize individual PCI controllers before 480 enumeration. 481 482 This function is called during the PCI enumeration process. No specific 483 action is expected from this member function. It allows the host bridge 484 driver to preinitialize individual PCI controllers before enumeration. 485 486 @param This Pointer to the 487 EFI_PCI_HOST_BRIDGE_RESOURCE_ALLOCATION_PROTOCOL 488 instance. 489 490 @param RootBridgeHandle The associated PCI root bridge handle. Type 491 EFI_HANDLE is defined in InstallProtocolInterface() 492 in the UEFI 2.0 Specification. 493 494 @param PciAddress The address of the PCI device on the PCI bus. This 495 address can be passed to the 496 EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL member functions to 497 access the PCI configuration space of the device. 498 See Table 12-1 in the UEFI 2.0 Specification for the 499 definition of 500 EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_PCI_ADDRESS. 501 502 @param Phase The phase of the PCI device enumeration. 503 504 @retval EFI_SUCCESS The requested parameters were returned. 505 506 @retval EFI_INVALID_PARAMETER RootBridgeHandle is not a valid root bridge 507 handle. 508 509 @retval EFI_INVALID_PARAMETER Phase is not a valid phase that is defined 510 in 511 EFI_PCI_CONTROLLER_RESOURCE_ALLOCATION_PHASE. 512 513 @retval EFI_DEVICE_ERROR Programming failed due to a hardware error. 514 The PCI enumerator should not enumerate this 515 device, including its child devices if it is 516 a PCI-to-PCI bridge. 517 **/ 518 EFI_STATUS 519 EFIAPI 520 PreprocessController ( 521 IN EFI_PCI_HOST_BRIDGE_RESOURCE_ALLOCATION_PROTOCOL *This, 522 IN EFI_HANDLE RootBridgeHandle, 523 IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_PCI_ADDRESS PciAddress, 524 IN EFI_PCI_CONTROLLER_RESOURCE_ALLOCATION_PHASE Phase 525 ); 526 527 528 // 529 // Define resource status constant 530 // 531 #define EFI_RESOURCE_NONEXISTENT 0xFFFFFFFFFFFFFFFFULL 532 #define EFI_RESOURCE_LESS 0xFFFFFFFFFFFFFFFEULL 533 534 535 // 536 // Driver Instance Data Prototypes 537 // 538 539 typedef struct { 540 EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_OPERATION Operation; 541 UINTN NumberOfBytes; 542 UINTN NumberOfPages; 543 EFI_PHYSICAL_ADDRESS HostAddress; 544 EFI_PHYSICAL_ADDRESS MappedHostAddress; 545 } MAP_INFO; 546 547 typedef struct { 548 ACPI_HID_DEVICE_PATH AcpiDevicePath; 549 EFI_DEVICE_PATH_PROTOCOL EndDevicePath; 550 } EFI_PCI_ROOT_BRIDGE_DEVICE_PATH; 551 552 typedef struct { 553 UINT64 BusBase; 554 UINT64 BusLimit; 555 556 UINT64 MemBase; 557 UINT64 MemLimit; 558 559 UINT64 IoBase; 560 UINT64 IoLimit; 561 } PCI_ROOT_BRIDGE_RESOURCE_APERTURE; 562 563 typedef enum { 564 TypeIo = 0, 565 TypeMem32, 566 TypePMem32, 567 TypeMem64, 568 TypePMem64, 569 TypeBus, 570 TypeMax 571 } PCI_RESOURCE_TYPE; 572 573 typedef enum { 574 ResNone = 0, 575 ResSubmitted, 576 ResRequested, 577 ResAllocated, 578 ResStatusMax 579 } RES_STATUS; 580 581 typedef struct { 582 PCI_RESOURCE_TYPE Type; 583 UINT64 Base; 584 UINT64 Length; 585 UINT64 Alignment; 586 RES_STATUS Status; 587 } PCI_RES_NODE; 588 589 #define PCI_ROOT_BRIDGE_SIGNATURE SIGNATURE_32('e', '2', 'p', 'b') 590 591 typedef struct { 592 UINT32 Signature; 593 LIST_ENTRY Link; 594 EFI_HANDLE Handle; 595 UINT64 RootBridgeAttrib; 596 UINT64 Attributes; 597 UINT64 Supports; 598 599 // 600 // Specific for this memory controller: Bus, I/O, Mem 601 // 602 PCI_RES_NODE ResAllocNode[6]; 603 604 // 605 // Addressing for Memory and I/O and Bus arrange 606 // 607 UINT64 BusBase; 608 UINT64 MemBase; 609 UINT64 IoBase; 610 UINT64 BusLimit; 611 UINT64 MemLimit; 612 UINT64 IoLimit; 613 614 EFI_DEVICE_PATH_PROTOCOL *DevicePath; 615 EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL Io; 616 617 } PCI_ROOT_BRIDGE_INSTANCE; 618 619 620 // 621 // Driver Instance Data Macros 622 // 623 #define DRIVER_INSTANCE_FROM_PCI_ROOT_BRIDGE_IO_THIS(a) \ 624 CR(a, PCI_ROOT_BRIDGE_INSTANCE, Io, PCI_ROOT_BRIDGE_SIGNATURE) 625 626 627 #define DRIVER_INSTANCE_FROM_LIST_ENTRY(a) \ 628 CR(a, PCI_ROOT_BRIDGE_INSTANCE, Link, PCI_ROOT_BRIDGE_SIGNATURE) 629 630 /** 631 632 Construct the Pci Root Bridge Io protocol 633 634 @param Protocol Point to protocol instance 635 @param HostBridgeHandle Handle of host bridge 636 @param Attri Attribute of host bridge 637 @param ResAperture ResourceAperture for host bridge 638 639 @retval EFI_SUCCESS Success to initialize the Pci Root Bridge. 640 **/ 641 EFI_STATUS 642 RootBridgeConstructor ( 643 IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL *Protocol, 644 IN EFI_HANDLE HostBridgeHandle, 645 IN UINT64 Attri, 646 IN PCI_ROOT_BRIDGE_RESOURCE_APERTURE *ResAperture 647 ); 648 649 #endif 650