Remove 0xc8000 check when searching PNP header. Remove the check about the size of Init code when validating if PCI 3.0 OPROM is successfully started.

Signed-off-by: Li Elvin <elvin.li@intel.com>
Reviewed-by: Ni Ruiyu <ruiyu.ni@intel.com>


git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@13944 6f19259b-4bc3-4df7-8a09-765794883524
This commit is contained in:
li-elvin 2012-11-15 02:10:44 +00:00
parent 926704714e
commit 22921b02ab
1 changed files with 46 additions and 48 deletions

View File

@ -1500,54 +1500,52 @@ UpdateBevBcvTable (
}
}
if (PciPtr >= (EFI_LEGACY_EXPANSION_ROM_HEADER *) ((UINTN) 0xc8000)) {
while (TRUE) {
Status = FindNextPnpExpansionHeader (Private, Instance, &PnpPtr);
Instance = NOT_FIRST_INSTANCE;
if (EFI_ERROR (Status)) {
break;
}
//
// There can be additional $PnP headers within the OPROM.
// Example: SCSI can have one per drive.
//
BbsTable[BbsIndex].BootPriority = BBS_UNPRIORITIZED_ENTRY;
BbsTable[BbsIndex].DeviceType = DeviceType;
BbsTable[BbsIndex].Bus = (UINT32) Bus;
BbsTable[BbsIndex].Device = (UINT32) Device;
BbsTable[BbsIndex].Function = (UINT32) Function;
BbsTable[BbsIndex].StatusFlags.OldPosition = 0;
BbsTable[BbsIndex].StatusFlags.Reserved1 = 0;
BbsTable[BbsIndex].StatusFlags.Enabled = 0;
BbsTable[BbsIndex].StatusFlags.Failed = 0;
BbsTable[BbsIndex].StatusFlags.MediaPresent = 0;
BbsTable[BbsIndex].StatusFlags.Reserved2 = 0;
BbsTable[BbsIndex].Class = PnpPtr->Class;
BbsTable[BbsIndex].SubClass = PnpPtr->SubClass;
BbsTable[BbsIndex].DescStringOffset = PnpPtr->ProductNamePointer;
BbsTable[BbsIndex].DescStringSegment = mBbsRomSegment;
BbsTable[BbsIndex].MfgStringOffset = PnpPtr->MfgPointer;
BbsTable[BbsIndex].MfgStringSegment = mBbsRomSegment;
BbsTable[BbsIndex].BootHandlerSegment = mBbsRomSegment;
while (TRUE) {
Status = FindNextPnpExpansionHeader (Private, Instance, &PnpPtr);
Instance = NOT_FIRST_INSTANCE;
if (EFI_ERROR (Status)) {
break;
}
//
// There can be additional $PnP headers within the OPROM.
// Example: SCSI can have one per drive.
//
BbsTable[BbsIndex].BootPriority = BBS_UNPRIORITIZED_ENTRY;
BbsTable[BbsIndex].DeviceType = DeviceType;
BbsTable[BbsIndex].Bus = (UINT32) Bus;
BbsTable[BbsIndex].Device = (UINT32) Device;
BbsTable[BbsIndex].Function = (UINT32) Function;
BbsTable[BbsIndex].StatusFlags.OldPosition = 0;
BbsTable[BbsIndex].StatusFlags.Reserved1 = 0;
BbsTable[BbsIndex].StatusFlags.Enabled = 0;
BbsTable[BbsIndex].StatusFlags.Failed = 0;
BbsTable[BbsIndex].StatusFlags.MediaPresent = 0;
BbsTable[BbsIndex].StatusFlags.Reserved2 = 0;
BbsTable[BbsIndex].Class = PnpPtr->Class;
BbsTable[BbsIndex].SubClass = PnpPtr->SubClass;
BbsTable[BbsIndex].DescStringOffset = PnpPtr->ProductNamePointer;
BbsTable[BbsIndex].DescStringSegment = mBbsRomSegment;
BbsTable[BbsIndex].MfgStringOffset = PnpPtr->MfgPointer;
BbsTable[BbsIndex].MfgStringSegment = mBbsRomSegment;
BbsTable[BbsIndex].BootHandlerSegment = mBbsRomSegment;
//
// Have seen case where PXE base code have PnP expansion ROM
// header but no Bcv or Bev vectors.
//
if (PnpPtr->Bcv != 0) {
BbsTable[BbsIndex].BootHandlerOffset = PnpPtr->Bcv;
++BbsIndex;
}
//
// Have seen case where PXE base code have PnP expansion ROM
// header but no Bcv or Bev vectors.
//
if (PnpPtr->Bcv != 0) {
BbsTable[BbsIndex].BootHandlerOffset = PnpPtr->Bcv;
++BbsIndex;
}
if (PnpPtr->Bev != 0) {
BbsTable[BbsIndex].BootHandlerOffset = PnpPtr->Bev;
BbsTable[BbsIndex].DeviceType = BBS_BEV_DEVICE;
++BbsIndex;
}
if (PnpPtr->Bev != 0) {
BbsTable[BbsIndex].BootHandlerOffset = PnpPtr->Bev;
BbsTable[BbsIndex].DeviceType = BBS_BEV_DEVICE;
++BbsIndex;
}
if ((PnpPtr == (LEGACY_PNP_EXPANSION_HEADER *) PciPtr) || (PnpPtr > (LEGACY_PNP_EXPANSION_HEADER *) RomEnd)) {
break;
}
if ((PnpPtr == (LEGACY_PNP_EXPANSION_HEADER *) PciPtr) || (PnpPtr > (LEGACY_PNP_EXPANSION_HEADER *) RomEnd)) {
break;
}
}
@ -2557,10 +2555,10 @@ LegacyBiosInstallRom (
//
// The ROM could have updated it's size so we need to read again.
//
if ((((EFI_LEGACY_EXPANSION_ROM_HEADER *) RuntimeAddress)->Signature != PCI_EXPANSION_ROM_HEADER_SIGNATURE) &&
(((EFI_LEGACY_EXPANSION_ROM_HEADER *) InitAddress)->Size512 == 0)) {
if (((EFI_LEGACY_EXPANSION_ROM_HEADER *) RuntimeAddress)->Signature != PCI_EXPANSION_ROM_HEADER_SIGNATURE) {
//
// The INIT function didn't copy the RUNTIME code to RuntimeAddress
// Now we check the signature (0xaa55) to judge whether the run-time code is truly generated by INIT function.
// If signature is not valid, that means the INIT function didn't copy the run-time code to RuntimeAddress.
//
*RuntimeImageLength = 0;
} else {