Revision: 13944
http://edk2.svn.sourceforge.net/edk2/?rev=13944&view=rev
Author: li-elvin
Date: 2012-11-15 02:10:44 +0000 (Thu, 15 Nov 2012)
Log Message:
-----------
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 <[email protected]>
Reviewed-by: Ni Ruiyu <[email protected]>
Modified Paths:
--------------
trunk/edk2/IntelFrameworkModulePkg/Csm/LegacyBiosDxe/LegacyPci.c
Modified: trunk/edk2/IntelFrameworkModulePkg/Csm/LegacyBiosDxe/LegacyPci.c
===================================================================
--- trunk/edk2/IntelFrameworkModulePkg/Csm/LegacyBiosDxe/LegacyPci.c
2012-11-14 23:43:33 UTC (rev 13943)
+++ trunk/edk2/IntelFrameworkModulePkg/Csm/LegacyBiosDxe/LegacyPci.c
2012-11-15 02:10:44 UTC (rev 13944)
@@ -1500,54 +1500,52 @@
}
}
- 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 @@
//
// 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 {
This was sent by the SourceForge.net collaborative development platform, the
world's largest Open Source development site.
------------------------------------------------------------------------------
Monitor your physical, virtual and cloud infrastructure from a single
web console. Get in-depth insight into apps, servers, databases, vmware,
SAP, cloud infrastructure, etc. Download 30-day Free Trial.
Pricing starts from $795 for 25 servers or applications!
http://p.sf.net/sfu/zoho_dev2dev_nov
_______________________________________________
edk2-commits mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/edk2-commits