summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRuiyu Ni <ruiyu.ni@intel.com>2017-10-27 11:37:18 +0800
committerRuiyu Ni <ruiyu.ni@intel.com>2017-10-31 11:11:04 +0800
commit84ed8edff13384d44372202fc93994233d9d3a98 (patch)
tree9e258c36abd9461be2cb8d82a83e7ce0fcc54486
parent221c8fd512eda0f6b9c9d5409cc3a9df05ba8c92 (diff)
downloadedk2-84ed8edff13384d44372202fc93994233d9d3a98.tar.gz
edk2-84ed8edff13384d44372202fc93994233d9d3a98.tar.bz2
edk2-84ed8edff13384d44372202fc93994233d9d3a98.zip
MdeModulePkg/PciBus: Don't create entry when recording ImageHandle
The patch shouldn't impact functionality. Original code records the ImageHandle of Option ROM by creating a new entry. It's not necessary. The patch updates the ImageHandle in the old entry. Contributed-under: TianoCore Contribution Agreement 1.1 Signed-off-by: Ruiyu Ni <ruiyu.ni@intel.com> Reviewed-by: Star Zeng <star.zeng@intel.com>
-rw-r--r--MdeModulePkg/Bus/Pci/PciBusDxe/PciRomTable.c72
1 files changed, 46 insertions, 26 deletions
diff --git a/MdeModulePkg/Bus/Pci/PciBusDxe/PciRomTable.c b/MdeModulePkg/Bus/Pci/PciBusDxe/PciRomTable.c
index 0eef41739c..fc6f579293 100644
--- a/MdeModulePkg/Bus/Pci/PciBusDxe/PciRomTable.c
+++ b/MdeModulePkg/Bus/Pci/PciBusDxe/PciRomTable.c
@@ -53,31 +53,54 @@ PciRomAddImageMapping (
IN UINT64 RomSize
)
{
+ UINTN Index;
PCI_ROM_IMAGE *NewTable;
- if (mNumberOfPciRomImages == mMaxNumberOfPciRomImages) {
-
- NewTable = ReallocatePool (
- mMaxNumberOfPciRomImages * sizeof (PCI_ROM_IMAGE),
- (mMaxNumberOfPciRomImages + 0x20) * sizeof (PCI_ROM_IMAGE),
- mRomImageTable
- );
- if (NewTable == NULL) {
- return ;
+ for (Index = 0; Index < mNumberOfPciRomImages; Index++) {
+ if (mRomImageTable[Index].Seg == Seg &&
+ mRomImageTable[Index].Bus == Bus &&
+ mRomImageTable[Index].Dev == Dev &&
+ mRomImageTable[Index].Func == Func) {
+ //
+ // Expect once RomImage and RomSize are recorded, they will be passed in
+ // later when updating ImageHandle
+ //
+ ASSERT ((mRomImageTable[Index].RomImage == NULL) || (RomImage == mRomImageTable[Index].RomImage));
+ ASSERT ((mRomImageTable[Index].RomSize == 0 ) || (RomSize == mRomImageTable[Index].RomSize ));
+ break;
}
+ }
- mRomImageTable = NewTable;
- mMaxNumberOfPciRomImages += 0x20;
+ if (Index == mNumberOfPciRomImages) {
+ //
+ // Rom Image Table buffer needs to grow.
+ //
+ if (mNumberOfPciRomImages == mMaxNumberOfPciRomImages) {
+ NewTable = ReallocatePool (
+ mMaxNumberOfPciRomImages * sizeof (PCI_ROM_IMAGE),
+ (mMaxNumberOfPciRomImages + 0x20) * sizeof (PCI_ROM_IMAGE),
+ mRomImageTable
+ );
+ if (NewTable == NULL) {
+ return ;
+ }
+
+ mRomImageTable = NewTable;
+ mMaxNumberOfPciRomImages += 0x20;
+ }
+ //
+ // Record the new PCI device
+ //
+ mRomImageTable[Index].Seg = Seg;
+ mRomImageTable[Index].Bus = Bus;
+ mRomImageTable[Index].Dev = Dev;
+ mRomImageTable[Index].Func = Func;
+ mNumberOfPciRomImages++;
}
- mRomImageTable[mNumberOfPciRomImages].ImageHandle = ImageHandle;
- mRomImageTable[mNumberOfPciRomImages].Seg = Seg;
- mRomImageTable[mNumberOfPciRomImages].Bus = Bus;
- mRomImageTable[mNumberOfPciRomImages].Dev = Dev;
- mRomImageTable[mNumberOfPciRomImages].Func = Func;
- mRomImageTable[mNumberOfPciRomImages].RomImage = RomImage;
- mRomImageTable[mNumberOfPciRomImages].RomSize = RomSize;
- mNumberOfPciRomImages++;
+ mRomImageTable[Index].ImageHandle = ImageHandle;
+ mRomImageTable[Index].RomImage = RomImage;
+ mRomImageTable[Index].RomSize = RomSize;
}
/**
@@ -96,26 +119,23 @@ PciRomGetImageMapping (
{
EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL *PciRootBridgeIo;
UINTN Index;
- BOOLEAN Found;
PciRootBridgeIo = PciIoDevice->PciRootBridgeIo;
- Found = FALSE;
for (Index = 0; Index < mNumberOfPciRomImages; Index++) {
if (mRomImageTable[Index].Seg == PciRootBridgeIo->SegmentNumber &&
mRomImageTable[Index].Bus == PciIoDevice->BusNumber &&
mRomImageTable[Index].Dev == PciIoDevice->DeviceNumber &&
mRomImageTable[Index].Func == PciIoDevice->FunctionNumber ) {
- Found = TRUE;
if (mRomImageTable[Index].ImageHandle != NULL) {
AddDriver (PciIoDevice, mRomImageTable[Index].ImageHandle);
- } else {
- PciIoDevice->PciIo.RomImage = mRomImageTable[Index].RomImage;
- PciIoDevice->PciIo.RomSize = mRomImageTable[Index].RomSize;
}
+ PciIoDevice->PciIo.RomImage = mRomImageTable[Index].RomImage;
+ PciIoDevice->PciIo.RomSize = mRomImageTable[Index].RomSize;
+ return TRUE;
}
}
- return Found;
+ return FALSE;
}