2 Set up ROM Table for PCI Bus module.
4 Copyright (c) 2006 - 2017, Intel Corporation. All rights reserved.<BR>
5 This program and the accompanying materials
6 are licensed and made available under the terms and conditions of the BSD License
7 which accompanies this distribution. The full text of the license may be found at
8 http://opensource.org/licenses/bsd-license.php
10 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
11 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
18 // PCI ROM image information
21 EFI_HANDLE ImageHandle
;
30 UINTN mNumberOfPciRomImages
= 0;
31 UINTN mMaxNumberOfPciRomImages
= 0;
32 PCI_ROM_IMAGE
*mRomImageTable
= NULL
;
35 Add the Rom Image to internal database for later PCI light enumeration.
37 @param ImageHandle Option Rom image handle.
38 @param Seg Segment of PCI space.
39 @param Bus Bus NO of PCI space.
40 @param Dev Dev NO of PCI space.
41 @param Func Func NO of PCI space.
42 @param RomImage Option Rom buffer.
43 @param RomSize Size of Option Rom buffer.
46 PciRomAddImageMapping (
47 IN EFI_HANDLE ImageHandle
,
56 PCI_ROM_IMAGE
*NewTable
;
58 if (mNumberOfPciRomImages
== mMaxNumberOfPciRomImages
) {
60 NewTable
= ReallocatePool (
61 mMaxNumberOfPciRomImages
* sizeof (PCI_ROM_IMAGE
),
62 (mMaxNumberOfPciRomImages
+ 0x20) * sizeof (PCI_ROM_IMAGE
),
65 if (NewTable
== NULL
) {
69 mRomImageTable
= NewTable
;
70 mMaxNumberOfPciRomImages
+= 0x20;
73 mRomImageTable
[mNumberOfPciRomImages
].ImageHandle
= ImageHandle
;
74 mRomImageTable
[mNumberOfPciRomImages
].Seg
= Seg
;
75 mRomImageTable
[mNumberOfPciRomImages
].Bus
= Bus
;
76 mRomImageTable
[mNumberOfPciRomImages
].Dev
= Dev
;
77 mRomImageTable
[mNumberOfPciRomImages
].Func
= Func
;
78 mRomImageTable
[mNumberOfPciRomImages
].RomImage
= RomImage
;
79 mRomImageTable
[mNumberOfPciRomImages
].RomSize
= RomSize
;
80 mNumberOfPciRomImages
++;
84 Get Option rom driver's mapping for PCI device.
86 @param PciIoDevice Device instance.
88 @retval TRUE Found Image mapping.
89 @retval FALSE Cannot found image mapping.
93 PciRomGetImageMapping (
94 IN PCI_IO_DEVICE
*PciIoDevice
97 EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL
*PciRootBridgeIo
;
101 PciRootBridgeIo
= PciIoDevice
->PciRootBridgeIo
;
104 for (Index
= 0; Index
< mNumberOfPciRomImages
; Index
++) {
105 if (mRomImageTable
[Index
].Seg
== PciRootBridgeIo
->SegmentNumber
&&
106 mRomImageTable
[Index
].Bus
== PciIoDevice
->BusNumber
&&
107 mRomImageTable
[Index
].Dev
== PciIoDevice
->DeviceNumber
&&
108 mRomImageTable
[Index
].Func
== PciIoDevice
->FunctionNumber
) {
111 if (mRomImageTable
[Index
].ImageHandle
!= NULL
) {
112 AddDriver (PciIoDevice
, mRomImageTable
[Index
].ImageHandle
);
114 PciIoDevice
->PciIo
.RomImage
= mRomImageTable
[Index
].RomImage
;
115 PciIoDevice
->PciIo
.RomSize
= mRomImageTable
[Index
].RomSize
;