ImageSize = (UINT32) (Pcir->ImageLength * 512);\r
Indicator = Pcir->Indicator;\r
\r
+ //\r
+ // Skip the image if it is not an EFI PCI Option ROM image\r
+ //\r
+ if (Pcir->CodeType != PCI_CODE_TYPE_EFI_IMAGE) {\r
+ goto NextImage;\r
+ }\r
+\r
+ //\r
+ // Skip the EFI PCI Option ROM image if its machine type is not supported\r
+ //\r
+ if (!EFI_IMAGE_MACHINE_TYPE_SUPPORTED (EfiRomHeader->EfiMachineType)) {\r
+ goto NextImage;\r
+ }\r
+\r
+ //\r
+ // Ignore the EFI PCI Option ROM image if it is an EFI application\r
+ //\r
+ if (EfiRomHeader->EfiSubsystem == EFI_IMAGE_SUBSYSTEM_EFI_APPLICATION) {\r
+ goto NextImage;\r
+ }\r
+\r
//\r
// Create Pci Option Rom Image device path header\r
//\r
//\r
BufferSize = 0;\r
Buffer = NULL;\r
- Status = EFI_SUCCESS;\r
ImageHandle = NULL;\r
\r
- if (!EFI_ERROR (Status)) {\r
- Status = gBS->LoadImage (\r
- FALSE,\r
- gPciBusDriverBinding.DriverBindingHandle,\r
- PciOptionRomImageDevicePath,\r
- Buffer,\r
- BufferSize,\r
- &ImageHandle\r
- );\r
- }\r
+ Status = gBS->LoadImage (\r
+ FALSE,\r
+ gPciBusDriverBinding.DriverBindingHandle,\r
+ PciOptionRomImageDevicePath,\r
+ Buffer,\r
+ BufferSize,\r
+ &ImageHandle\r
+ );\r
\r
FreePool (PciOptionRomImageDevicePath);\r
\r
}\r
}\r
\r
+NextImage:\r
RomBarOffset += ImageSize;\r
\r
} while (((Indicator & 0x80) == 0x00) && ((UINTN) (RomBarOffset - (UINT8 *) RomBar) < PciDevice->RomSize));\r