]> git.proxmox.com Git - mirror_edk2.git/blob - OvmfPkg/PciHostBridgeDxe/PciHostBridge.h
OvmfPkg: clone PciHostBridgeDxe from PcAtChipsetPkg
[mirror_edk2.git] / OvmfPkg / PciHostBridgeDxe / PciHostBridge.h
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