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
This commit is contained in:
qwang12 2008-03-06 11:48:52 +00:00
parent 189eac2199
commit a1a99cca13
7 changed files with 33 additions and 143 deletions

View File

@ -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
);

View File

@ -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;
}

View File

@ -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

View File

@ -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 (

View File

@ -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,

View File

@ -114,6 +114,7 @@
gEfiLegacyBiosProtocolGuid # PROTOCOL ALWAYS_CONSUMED
gEfiCpuArchProtocolGuid # PROTOCOL ALWAYS_CONSUMED
gEfiDevicePathProtocolGuid # PROTOCOL ALWAYS_CONSUMED
gEfiFirmwareVolumeDispatchProtocolGuid # PROTOCOL ALWAYS_CONSUMED
[Pcd]
gEfiMdeModulePkgTokenSpaceGuid.PcdPlatformBootTimeOutDefault

View File

@ -42,6 +42,7 @@ Abstract:
#include <Protocol/PciIo.h>
#include <Protocol/AcpiS3Save.h>
#include <Protocol/Performance.h>
#include <Protocol/FirmwareVolumeDispatch.h>
#include <Guid/MemoryTypeInformation.h>
#include <Guid/FileInfo.h>