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
63 ASSERT ((mRomImageTable
[Index
].RomImage
== NULL
) || (RomImage
== mRomImageTable
[Index
].RomImage
));
64 ASSERT ((mRomImageTable
[Index
].RomSize
== 0) || (RomSize
== mRomImageTable
[Index
].RomSize
));
69 if (Index
== mNumberOfPciRomImages
) {
71 // Rom Image Table buffer needs to grow.
73 if (mNumberOfPciRomImages
== mMaxNumberOfPciRomImages
) {
74 NewTable
= ReallocatePool (
75 mMaxNumberOfPciRomImages
* sizeof (PCI_ROM_IMAGE
),
76 (mMaxNumberOfPciRomImages
+ 0x20) * sizeof (PCI_ROM_IMAGE
),
79 if (NewTable
== NULL
) {
83 mRomImageTable
= NewTable
;
84 mMaxNumberOfPciRomImages
+= 0x20;
88 // Record the new PCI device
90 mRomImageTable
[Index
].Seg
= Seg
;
91 mRomImageTable
[Index
].Bus
= Bus
;
92 mRomImageTable
[Index
].Dev
= Dev
;
93 mRomImageTable
[Index
].Func
= Func
;
94 mNumberOfPciRomImages
++;
97 mRomImageTable
[Index
].ImageHandle
= ImageHandle
;
98 mRomImageTable
[Index
].RomImage
= RomImage
;
99 mRomImageTable
[Index
].RomSize
= RomSize
;
103 Get Option rom driver's mapping for PCI device.
105 @param PciIoDevice Device instance.
107 @retval TRUE Found Image mapping.
108 @retval FALSE Cannot found image mapping.
112 PciRomGetImageMapping (
113 IN PCI_IO_DEVICE
*PciIoDevice
116 EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL
*PciRootBridgeIo
;
119 PciRootBridgeIo
= PciIoDevice
->PciRootBridgeIo
;
121 for (Index
= 0; Index
< mNumberOfPciRomImages
; Index
++) {
122 if ((mRomImageTable
[Index
].Seg
== PciRootBridgeIo
->SegmentNumber
) &&
123 (mRomImageTable
[Index
].Bus
== PciIoDevice
->BusNumber
) &&
124 (mRomImageTable
[Index
].Dev
== PciIoDevice
->DeviceNumber
) &&
125 (mRomImageTable
[Index
].Func
== PciIoDevice
->FunctionNumber
))
127 if (mRomImageTable
[Index
].ImageHandle
!= NULL
) {
128 AddDriver (PciIoDevice
, mRomImageTable
[Index
].ImageHandle
, NULL
);
131 PciIoDevice
->PciIo
.RomImage
= mRomImageTable
[Index
].RomImage
;
132 PciIoDevice
->PciIo
.RomSize
= mRomImageTable
[Index
].RomSize
;