From a1a99cca132359b0f08b66a73e54f6008f90a28e Mon Sep 17 00:00:00 2001 From: qwang12 Date: Thu, 6 Mar 2008 11:48:52 +0000 Subject: 1) Sync in patch for EDK 1063 Boot option enumeration algorithm enhancement 2) Sync in patch for EDK 1081: Enhance the BDS shell enumeration logic to skip the those not dispatched FVs in system. 3) Remove all EFI_SPECIFICATION_VERSION as all module should comply to UEFI 2.1 and later. git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@4798 6f19259b-4bc3-4df7-8a09-765794883524 --- MdeModulePkg/Library/GenericBdsLib/BdsBoot.c | 48 +++------ MdeModulePkg/Library/GenericBdsLib/BdsConnect.c | 2 - MdeModulePkg/Library/GenericBdsLib/BdsConsole.c | 3 - MdeModulePkg/Library/GenericBdsLib/BdsMisc.c | 111 ++++----------------- MdeModulePkg/Library/GenericBdsLib/DevicePath.c | 10 -- .../Library/GenericBdsLib/GenericBdsLib.inf | 1 + .../Library/GenericBdsLib/InternalBdsLib.h | 1 + 7 files changed, 33 insertions(+), 143 deletions(-) (limited to 'MdeModulePkg/Library') diff --git a/MdeModulePkg/Library/GenericBdsLib/BdsBoot.c b/MdeModulePkg/Library/GenericBdsLib/BdsBoot.c index 5071a67..4f9ab14 100644 --- a/MdeModulePkg/Library/GenericBdsLib/BdsBoot.c +++ b/MdeModulePkg/Library/GenericBdsLib/BdsBoot.c @@ -830,11 +830,7 @@ BdsLibEnumerateAllBootOption ( UINTN Size; EFI_FV_FILE_ATTRIBUTES Attributes; UINT32 AuthenticationStatus; -#if (PI_SPECIFICATION_VERSION < 0x00010000) - EFI_FIRMWARE_VOLUME_PROTOCOL *Fv; -#else EFI_FIRMWARE_VOLUME2_PROTOCOL *Fv; -#endif EFI_DEVICE_PATH_PROTOCOL *DevicePath; UINTN DevicePathType; CHAR16 Buffer[40]; @@ -1046,23 +1042,27 @@ BdsLibEnumerateAllBootOption ( // gBS->LocateHandleBuffer ( ByProtocol, - #if (PI_SPECIFICATION_VERSION < 0x00010000) - &gEfiFirmwareVolumeProtocolGuid, - #else &gEfiFirmwareVolume2ProtocolGuid, - #endif NULL, &FvHandleCount, &FvHandleBuffer ); for (Index = 0; Index < FvHandleCount; Index++) { + // + // Only care the dispatched FV. If no dispatch protocol on the FV, it is not dispatched, then skip it. + // + Status = gBS->HandleProtocol ( + FvHandleBuffer[Index], + &gEfiFirmwareVolumeDispatchProtocolGuid, + (VOID **) &Fv + ); + if (EFI_ERROR (Status)) { + continue; + } + gBS->HandleProtocol ( FvHandleBuffer[Index], - #if (PI_SPECIFICATION_VERSION < 0x00010000) - &gEfiFirmwareVolumeProtocolGuid, - #else &gEfiFirmwareVolume2ProtocolGuid, - #endif (VOID **) &Fv ); @@ -1731,11 +1731,7 @@ BdsLibUpdateFvFileDevicePath ( UINT32 AuthenticationStatus; BOOLEAN FindFvFile; EFI_LOADED_IMAGE_PROTOCOL *LoadedImage; -#if (PI_SPECIFICATION_VERSION < 0x00010000) - EFI_FIRMWARE_VOLUME_PROTOCOL *Fv; -#else EFI_FIRMWARE_VOLUME2_PROTOCOL *Fv; -#endif MEDIA_FW_VOL_FILEPATH_DEVICE_PATH FvFileNode; EFI_HANDLE FoundFvHandle; EFI_DEVICE_PATH_PROTOCOL *NewDevicePath; @@ -1777,22 +1773,14 @@ BdsLibUpdateFvFileDevicePath ( TempDevicePath = *DevicePath; FoundFvHandle = NULL; Status = gBS->LocateDevicePath ( - #if (PI_SPECIFICATION_VERSION < 0x00010000) - &gEfiFirmwareVolumeProtocolGuid, - #else &gEfiFirmwareVolume2ProtocolGuid, - #endif &TempDevicePath, &FoundFvHandle ); if (!EFI_ERROR (Status)) { Status = gBS->HandleProtocol ( FoundFvHandle, - #if (PI_SPECIFICATION_VERSION < 0x00010000) - &gEfiFirmwareVolumeProtocolGuid, - #else &gEfiFirmwareVolume2ProtocolGuid, - #endif (VOID **) &Fv ); if (!EFI_ERROR (Status)) { @@ -1828,11 +1816,7 @@ BdsLibUpdateFvFileDevicePath ( if (!EFI_ERROR (Status)) { Status = gBS->HandleProtocol ( LoadedImage->DeviceHandle, - #if (PI_SPECIFICATION_VERSION < 0x00010000) - &gEfiFirmwareVolumeProtocolGuid, - #else &gEfiFirmwareVolume2ProtocolGuid, - #endif (VOID **) &Fv ); if (!EFI_ERROR (Status)) { @@ -1857,11 +1841,7 @@ BdsLibUpdateFvFileDevicePath ( if (!FindFvFile) { gBS->LocateHandleBuffer ( ByProtocol, - #if (PI_SPECIFICATION_VERSION < 0x00010000) - &gEfiFirmwareVolumeProtocolGuid, - #else &gEfiFirmwareVolume2ProtocolGuid, - #endif NULL, &FvHandleCount, &FvHandleBuffer @@ -1869,11 +1849,7 @@ BdsLibUpdateFvFileDevicePath ( for (Index = 0; Index < FvHandleCount; Index++) { gBS->HandleProtocol ( FvHandleBuffer[Index], - #if (PI_SPECIFICATION_VERSION < 0x00010000) - &gEfiFirmwareVolumeProtocolGuid, - #else &gEfiFirmwareVolume2ProtocolGuid, - #endif (VOID **) &Fv ); diff --git a/MdeModulePkg/Library/GenericBdsLib/BdsConnect.c b/MdeModulePkg/Library/GenericBdsLib/BdsConnect.c index 6e9068b..98a6709 100644 --- a/MdeModulePkg/Library/GenericBdsLib/BdsConnect.c +++ b/MdeModulePkg/Library/GenericBdsLib/BdsConnect.c @@ -360,9 +360,7 @@ BdsLibConnectUsbDevByShortFormDP( if ((DevicePathType (RemainingDevicePath) != MESSAGING_DEVICE_PATH) || ((DevicePathSubType (RemainingDevicePath) != MSG_USB_CLASS_DP) -#if (EFI_SPECIFICATION_VERSION >= 0x00020000) && (DevicePathSubType (RemainingDevicePath) != MSG_USB_WWID_DP) -#endif )) { return EFI_INVALID_PARAMETER; } diff --git a/MdeModulePkg/Library/GenericBdsLib/BdsConsole.c b/MdeModulePkg/Library/GenericBdsLib/BdsConsole.c index db28b68..53766f9 100644 --- a/MdeModulePkg/Library/GenericBdsLib/BdsConsole.c +++ b/MdeModulePkg/Library/GenericBdsLib/BdsConsole.c @@ -21,7 +21,6 @@ Abstract: **/ #include "InternalBdsLib.h" -//@MT:#include "EfiPrintLib.h" BOOLEAN IsNvNeed ( @@ -228,9 +227,7 @@ BdsLibConnectConsoleVariable ( // if ((DevicePathType (Instance) == MESSAGING_DEVICE_PATH) && ((DevicePathSubType (Instance) == MSG_USB_CLASS_DP) -#if (EFI_SPECIFICATION_VERSION >= 0x00020000) || (DevicePathSubType (Instance) == MSG_USB_WWID_DP) -#endif )) { // // Check the Usb console in Usb2.0 bus firstly, then Usb1.1 bus diff --git a/MdeModulePkg/Library/GenericBdsLib/BdsMisc.c b/MdeModulePkg/Library/GenericBdsLib/BdsMisc.c index 739913b..2c567fc 100644 --- a/MdeModulePkg/Library/GenericBdsLib/BdsMisc.c +++ b/MdeModulePkg/Library/GenericBdsLib/BdsMisc.c @@ -269,7 +269,7 @@ BdsLibRegisterNewOption ( EFI_DEVICE_PATH_PROTOCOL *OptionDevicePath; CHAR16 *Description; CHAR16 OptionName[10]; - BOOLEAN UpdateBootDevicePath; + BOOLEAN UpdateDescription; UINT16 BootOrderEntry; UINTN OrderItemNum; @@ -280,7 +280,7 @@ BdsLibRegisterNewOption ( OptionDevicePath = NULL; Description = NULL; OptionOrderPtr = NULL; - UpdateBootDevicePath = FALSE; + UpdateDescription = FALSE; ZeroMem (OptionName, sizeof (OptionName)); TempOptionSize = 0; @@ -318,8 +318,8 @@ BdsLibRegisterNewOption ( // // Notes: the description may will change base on the GetStringToken // - if (CompareMem (Description, String, StrSize (Description)) == 0) { - if (CompareMem (OptionDevicePath, DevicePath, GetDevicePathSize (OptionDevicePath)) == 0) { + if (CompareMem (OptionDevicePath, DevicePath, GetDevicePathSize (OptionDevicePath)) == 0) { + if (CompareMem (Description, String, StrSize (Description)) == 0) { // // Got the option, so just return // @@ -328,9 +328,10 @@ BdsLibRegisterNewOption ( return EFI_SUCCESS; } else { // - // Boot device path changed, need update. + // Option description changed, need update. // - UpdateBootDevicePath = TRUE; + UpdateDescription = TRUE; + gBS->FreePool (OptionPtr); break; } } @@ -350,7 +351,7 @@ BdsLibRegisterNewOption ( TempPtr += StrSize (String); CopyMem (TempPtr, DevicePath, GetDevicePathSize (DevicePath)); - if (UpdateBootDevicePath) { + if (UpdateDescription) { // // The number in option#### to be updated // @@ -375,7 +376,10 @@ BdsLibRegisterNewOption ( OptionSize, OptionPtr ); - if (EFI_ERROR (Status) || UpdateBootDevicePath) { + // + // Return if only need to update a changed description or fail to set option. + // + if (EFI_ERROR (Status) || UpdateDescription) { gBS->FreePool (OptionPtr); gBS->FreePool (TempOptionPtr); return Status; @@ -388,7 +392,7 @@ BdsLibRegisterNewOption ( // // - // If no BootOrder + // If no option order // if (TempOptionSize == 0) { BootOrderEntry = 0; @@ -406,18 +410,12 @@ BdsLibRegisterNewOption ( return EFI_SUCCESS; } - if (UpdateBootDevicePath) { - // - // If just update a old option, the new optionorder size not change - // - OrderItemNum = (TempOptionSize / sizeof (UINT16)) ; - OptionOrderPtr = AllocateZeroPool ( OrderItemNum * sizeof (UINT16)); - CopyMem (OptionOrderPtr, TempOptionPtr, OrderItemNum * sizeof (UINT16)); - } else { - OrderItemNum = (TempOptionSize / sizeof (UINT16)) + 1 ; - OptionOrderPtr = AllocateZeroPool ( OrderItemNum * sizeof (UINT16)); - CopyMem (OptionOrderPtr, TempOptionPtr, (OrderItemNum - 1) * sizeof (UINT16)); - } + // + // Append the new option number to the original option order + // + OrderItemNum = (TempOptionSize / sizeof (UINT16)) + 1 ; + OptionOrderPtr = AllocateZeroPool ( OrderItemNum * sizeof (UINT16)); + CopyMem (OptionOrderPtr, TempOptionPtr, (OrderItemNum - 1) * sizeof (UINT16)); OptionOrderPtr[Index] = RegisterOptionNumber; @@ -995,10 +993,6 @@ SetupResetReminder ( VOID ) { -#if (EFI_SPECIFICATION_VERSION < 0x0002000A) - EFI_STATUS Status; - EFI_FORM_BROWSER_PROTOCOL *Browser; -#endif EFI_INPUT_KEY Key; CHAR16 *StringBuffer1; CHAR16 *StringBuffer2; @@ -1010,14 +1004,6 @@ SetupResetReminder ( if (IsResetReminderFeatureEnable ()) { if (IsResetRequired ()) { -#if (EFI_SPECIFICATION_VERSION < 0x0002000A) - Status = gBS->LocateProtocol ( - &gEfiFormBrowserProtocolGuid, - NULL, - &Browser - ); -#endif - StringBuffer1 = AllocateZeroPool (MAX_STRING_LEN * sizeof (CHAR16)); ASSERT (StringBuffer1 != NULL); StringBuffer2 = AllocateZeroPool (MAX_STRING_LEN * sizeof (CHAR16)); @@ -1028,11 +1014,7 @@ SetupResetReminder ( // Popup a menu to notice user // do { -#if (EFI_SPECIFICATION_VERSION < 0x0002000A) - Browser->CreatePopUp (2, TRUE, 0, NULL, &Key, StringBuffer1, StringBuffer2); -#else IfrLibCreatePopUp (2, &Key, StringBuffer1, StringBuffer2); -#endif } while ((Key.ScanCode != SCAN_ESC) && (Key.UnicodeChar != CHAR_CARRIAGE_RETURN)); gBS->FreePool (StringBuffer1); @@ -1187,61 +1169,6 @@ BdsLibGetImageHeader ( return Status; } -#if (EFI_SPECIFICATION_VERSION < 0x0002000A) -EFI_STATUS -BdsLibGetHiiHandles ( - IN EFI_HII_PROTOCOL *Hii, - IN OUT UINT16 *HandleBufferLength, - OUT EFI_HII_HANDLE **HiiHandleBuffer - ) -/*++ - -Routine Description: - - Determines the handles that are currently active in the database. - It's the caller's responsibility to free handle buffer. - -Arguments: - - This - A pointer to the EFI_HII_PROTOCOL instance. - HandleBufferLength - On input, a pointer to the length of the handle buffer. On output, - the length of the handle buffer that is required for the handles found. - HiiHandleBuffer - Pointer to an array of EFI_HII_PROTOCOL instances returned. - -Returns: - - EFI_SUCCESS - Get an array of EFI_HII_PROTOCOL instances successfully. - EFI_INVALID_PARAMETER - Hii is NULL. - EFI_NOT_FOUND - Database not found. - ---*/ -{ - UINT16 TempBufferLength; - EFI_STATUS Status; - - TempBufferLength = 0; - - // - // Try to find the actual buffer size for HiiHandle Buffer. - // - Status = Hii->FindHandles (Hii, &TempBufferLength, *HiiHandleBuffer); - - if (Status == EFI_BUFFER_TOO_SMALL) { - *HiiHandleBuffer = AllocateZeroPool (TempBufferLength); - Status = Hii->FindHandles (Hii, &TempBufferLength, *HiiHandleBuffer); - // - // we should not fail here. - // - ASSERT_EFI_ERROR (Status); - } - - *HandleBufferLength = TempBufferLength; - - return Status; - -} -#endif - VOID EFIAPI BdsSetMemoryTypeInformationVariable ( diff --git a/MdeModulePkg/Library/GenericBdsLib/DevicePath.c b/MdeModulePkg/Library/GenericBdsLib/DevicePath.c index 96a3c5d..6701fd2 100644 --- a/MdeModulePkg/Library/GenericBdsLib/DevicePath.c +++ b/MdeModulePkg/Library/GenericBdsLib/DevicePath.c @@ -622,7 +622,6 @@ DevPathUsb ( CatPrint (Str, L"Usb(%x,%x)", (UINTN) Usb->ParentPortNumber, (UINTN) Usb->InterfaceNumber); } -#if (EFI_SPECIFICATION_VERSION >= 0x00020000) VOID DevPathUsbWWID ( IN OUT POOL_PRINT *Str, @@ -652,7 +651,6 @@ DevPathLogicalUnit ( LogicalUnit = DevPath; CatPrint (Str, L"Unit(%x)", (UINTN) LogicalUnit->Lun); } -#endif VOID DevPathUsbClass ( @@ -876,7 +874,6 @@ DevPathUart ( } } -#if (EFI_SPECIFICATION_VERSION >= 0x00020000) VOID DevPathiSCSI ( IN OUT POOL_PRINT *Str, @@ -912,7 +909,6 @@ DevPathiSCSI ( CatPrint (Str, L"%s)", (iSCSI->NetworkProtocol == 0) ? L"TCP" : L"reserved"); } -#endif VOID DevPathHardDrive ( @@ -1106,14 +1102,12 @@ DEVICE_PATH_STRING_TABLE DevPathTable[] = { MESSAGING_DEVICE_PATH, MSG_USB_DP, DevPathUsb, -#if (EFI_SPECIFICATION_VERSION >= 0x00020000) MESSAGING_DEVICE_PATH, MSG_USB_WWID_DP, DevPathUsbWWID, MESSAGING_DEVICE_PATH, MSG_DEVICE_LOGICAL_UNIT_DP, DevPathLogicalUnit, -#endif MESSAGING_DEVICE_PATH, MSG_USB_CLASS_DP, DevPathUsbClass, @@ -1141,11 +1135,9 @@ DEVICE_PATH_STRING_TABLE DevPathTable[] = { MESSAGING_DEVICE_PATH, MSG_VENDOR_DP, DevPathVendor, -#if (EFI_SPECIFICATION_VERSION >= 0x00020000) MESSAGING_DEVICE_PATH, MSG_ISCSI_DP, DevPathiSCSI, -#endif MEDIA_DEVICE_PATH, MEDIA_HARDDRIVE_DP, DevPathHardDrive, @@ -1161,11 +1153,9 @@ DEVICE_PATH_STRING_TABLE DevPathTable[] = { MEDIA_DEVICE_PATH, MEDIA_PROTOCOL_DP, DevPathMediaProtocol, -#if (EFI_SPECIFICATION_VERSION != 0x00020000) MEDIA_DEVICE_PATH, MEDIA_PIWG_FW_FILE_DP, DevPathFvFilePath, -#endif BBS_DEVICE_PATH, BBS_BBS_DP, DevPathBssBss, diff --git a/MdeModulePkg/Library/GenericBdsLib/GenericBdsLib.inf b/MdeModulePkg/Library/GenericBdsLib/GenericBdsLib.inf index 990e9aa..0752bc8 100644 --- a/MdeModulePkg/Library/GenericBdsLib/GenericBdsLib.inf +++ b/MdeModulePkg/Library/GenericBdsLib/GenericBdsLib.inf @@ -114,6 +114,7 @@ gEfiLegacyBiosProtocolGuid # PROTOCOL ALWAYS_CONSUMED gEfiCpuArchProtocolGuid # PROTOCOL ALWAYS_CONSUMED gEfiDevicePathProtocolGuid # PROTOCOL ALWAYS_CONSUMED + gEfiFirmwareVolumeDispatchProtocolGuid # PROTOCOL ALWAYS_CONSUMED [Pcd] gEfiMdeModulePkgTokenSpaceGuid.PcdPlatformBootTimeOutDefault \ No newline at end of file diff --git a/MdeModulePkg/Library/GenericBdsLib/InternalBdsLib.h b/MdeModulePkg/Library/GenericBdsLib/InternalBdsLib.h index cae57b9..cf63e80 100644 --- a/MdeModulePkg/Library/GenericBdsLib/InternalBdsLib.h +++ b/MdeModulePkg/Library/GenericBdsLib/InternalBdsLib.h @@ -42,6 +42,7 @@ Abstract: #include #include #include +#include #include #include -- cgit v1.1