2 Set up ROM Table for PCI Bus module.
4 Copyright (c) 2006 - 2017, Intel Corporation. All rights reserved.<BR>
5 SPDX-License-Identifier: BSD-2-Clause-Patent
12 // PCI ROM image information
15 EFI_HANDLE ImageHandle
;
24 UINTN mNumberOfPciRomImages
= 0;
25 UINTN mMaxNumberOfPciRomImages
= 0;
26 PCI_ROM_IMAGE
*mRomImageTable
= NULL
;
29 Add the Rom Image to internal database for later PCI light enumeration.
31 @param ImageHandle Option Rom image handle.
32 @param Seg Segment of PCI space.
33 @param Bus Bus NO of PCI space.
34 @param Dev Dev NO of PCI space.
35 @param Func Func NO of PCI space.
36 @param RomImage Option Rom buffer.
37 @param RomSize Size of Option Rom buffer.
40 PciRomAddImageMapping (
41 IN EFI_HANDLE ImageHandle
,
51 PCI_ROM_IMAGE
*NewTable
;
53 for (Index
= 0; Index
< mNumberOfPciRomImages
; Index
++) {
54 if ((mRomImageTable
[Index
].Seg
== Seg
) &&
55 (mRomImageTable
[Index
].Bus
== Bus
) &&
56 (mRomImageTable
[Index
].Dev
== Dev
) &&
57 (mRomImageTable
[Index
].Func
== Func
))
60 // Expect once RomImage and RomSize are recorded, they will be passed in
61 // later when updating ImageHandle. They may also be updated with new
62 // values if the platform provides an override of RomImage and RomSize.
68 if (Index
== mNumberOfPciRomImages
) {
70 // Rom Image Table buffer needs to grow.
72 if (mNumberOfPciRomImages
== mMaxNumberOfPciRomImages
) {
73 NewTable
= ReallocatePool (
74 mMaxNumberOfPciRomImages
* sizeof (PCI_ROM_IMAGE
),
75 (mMaxNumberOfPciRomImages
+ 0x20) * sizeof (PCI_ROM_IMAGE
),
78 if (NewTable
== NULL
) {
82 mRomImageTable
= NewTable
;
83 mMaxNumberOfPciRomImages
+= 0x20;
87 // Record the new PCI device
89 mRomImageTable
[Index
].Seg
= Seg
;
90 mRomImageTable
[Index
].Bus
= Bus
;
91 mRomImageTable
[Index
].Dev
= Dev
;
92 mRomImageTable
[Index
].Func
= Func
;
93 mNumberOfPciRomImages
++;
96 mRomImageTable
[Index
].ImageHandle
= ImageHandle
;
97 mRomImageTable
[Index
].RomImage
= RomImage
;
98 mRomImageTable
[Index
].RomSize
= RomSize
;
102 Get Option rom driver's mapping for PCI device.
104 @param PciIoDevice Device instance.
106 @retval TRUE Found Image mapping.
107 @retval FALSE Cannot found image mapping.
111 PciRomGetImageMapping (
112 IN PCI_IO_DEVICE
*PciIoDevice
115 EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL
*PciRootBridgeIo
;
118 PciRootBridgeIo
= PciIoDevice
->PciRootBridgeIo
;
120 for (Index
= 0; Index
< mNumberOfPciRomImages
; Index
++) {
121 if ((mRomImageTable
[Index
].Seg
== PciRootBridgeIo
->SegmentNumber
) &&
122 (mRomImageTable
[Index
].Bus
== PciIoDevice
->BusNumber
) &&
123 (mRomImageTable
[Index
].Dev
== PciIoDevice
->DeviceNumber
) &&
124 (mRomImageTable
[Index
].Func
== PciIoDevice
->FunctionNumber
))
126 if (mRomImageTable
[Index
].ImageHandle
!= NULL
) {
127 AddDriver (PciIoDevice
, mRomImageTable
[Index
].ImageHandle
, NULL
);
130 PciIoDevice
->PciIo
.RomImage
= mRomImageTable
[Index
].RomImage
;
131 PciIoDevice
->PciIo
.RomSize
= mRomImageTable
[Index
].RomSize
;