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; UINTN Size;
EFI_FV_FILE_ATTRIBUTES Attributes; EFI_FV_FILE_ATTRIBUTES Attributes;
UINT32 AuthenticationStatus; UINT32 AuthenticationStatus;
#if (PI_SPECIFICATION_VERSION < 0x00010000)
EFI_FIRMWARE_VOLUME_PROTOCOL *Fv;
#else
EFI_FIRMWARE_VOLUME2_PROTOCOL *Fv; EFI_FIRMWARE_VOLUME2_PROTOCOL *Fv;
#endif
EFI_DEVICE_PATH_PROTOCOL *DevicePath; EFI_DEVICE_PATH_PROTOCOL *DevicePath;
UINTN DevicePathType; UINTN DevicePathType;
CHAR16 Buffer[40]; CHAR16 Buffer[40];
@ -1046,23 +1042,27 @@ BdsLibEnumerateAllBootOption (
// //
gBS->LocateHandleBuffer ( gBS->LocateHandleBuffer (
ByProtocol, ByProtocol,
#if (PI_SPECIFICATION_VERSION < 0x00010000)
&gEfiFirmwareVolumeProtocolGuid,
#else
&gEfiFirmwareVolume2ProtocolGuid, &gEfiFirmwareVolume2ProtocolGuid,
#endif
NULL, NULL,
&FvHandleCount, &FvHandleCount,
&FvHandleBuffer &FvHandleBuffer
); );
for (Index = 0; Index < FvHandleCount; Index++) { 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 ( gBS->HandleProtocol (
FvHandleBuffer[Index], FvHandleBuffer[Index],
#if (PI_SPECIFICATION_VERSION < 0x00010000)
&gEfiFirmwareVolumeProtocolGuid,
#else
&gEfiFirmwareVolume2ProtocolGuid, &gEfiFirmwareVolume2ProtocolGuid,
#endif
(VOID **) &Fv (VOID **) &Fv
); );
@ -1731,11 +1731,7 @@ BdsLibUpdateFvFileDevicePath (
UINT32 AuthenticationStatus; UINT32 AuthenticationStatus;
BOOLEAN FindFvFile; BOOLEAN FindFvFile;
EFI_LOADED_IMAGE_PROTOCOL *LoadedImage; EFI_LOADED_IMAGE_PROTOCOL *LoadedImage;
#if (PI_SPECIFICATION_VERSION < 0x00010000)
EFI_FIRMWARE_VOLUME_PROTOCOL *Fv;
#else
EFI_FIRMWARE_VOLUME2_PROTOCOL *Fv; EFI_FIRMWARE_VOLUME2_PROTOCOL *Fv;
#endif
MEDIA_FW_VOL_FILEPATH_DEVICE_PATH FvFileNode; MEDIA_FW_VOL_FILEPATH_DEVICE_PATH FvFileNode;
EFI_HANDLE FoundFvHandle; EFI_HANDLE FoundFvHandle;
EFI_DEVICE_PATH_PROTOCOL *NewDevicePath; EFI_DEVICE_PATH_PROTOCOL *NewDevicePath;
@ -1777,22 +1773,14 @@ BdsLibUpdateFvFileDevicePath (
TempDevicePath = *DevicePath; TempDevicePath = *DevicePath;
FoundFvHandle = NULL; FoundFvHandle = NULL;
Status = gBS->LocateDevicePath ( Status = gBS->LocateDevicePath (
#if (PI_SPECIFICATION_VERSION < 0x00010000)
&gEfiFirmwareVolumeProtocolGuid,
#else
&gEfiFirmwareVolume2ProtocolGuid, &gEfiFirmwareVolume2ProtocolGuid,
#endif
&TempDevicePath, &TempDevicePath,
&FoundFvHandle &FoundFvHandle
); );
if (!EFI_ERROR (Status)) { if (!EFI_ERROR (Status)) {
Status = gBS->HandleProtocol ( Status = gBS->HandleProtocol (
FoundFvHandle, FoundFvHandle,
#if (PI_SPECIFICATION_VERSION < 0x00010000)
&gEfiFirmwareVolumeProtocolGuid,
#else
&gEfiFirmwareVolume2ProtocolGuid, &gEfiFirmwareVolume2ProtocolGuid,
#endif
(VOID **) &Fv (VOID **) &Fv
); );
if (!EFI_ERROR (Status)) { if (!EFI_ERROR (Status)) {
@ -1828,11 +1816,7 @@ BdsLibUpdateFvFileDevicePath (
if (!EFI_ERROR (Status)) { if (!EFI_ERROR (Status)) {
Status = gBS->HandleProtocol ( Status = gBS->HandleProtocol (
LoadedImage->DeviceHandle, LoadedImage->DeviceHandle,
#if (PI_SPECIFICATION_VERSION < 0x00010000)
&gEfiFirmwareVolumeProtocolGuid,
#else
&gEfiFirmwareVolume2ProtocolGuid, &gEfiFirmwareVolume2ProtocolGuid,
#endif
(VOID **) &Fv (VOID **) &Fv
); );
if (!EFI_ERROR (Status)) { if (!EFI_ERROR (Status)) {
@ -1857,11 +1841,7 @@ BdsLibUpdateFvFileDevicePath (
if (!FindFvFile) { if (!FindFvFile) {
gBS->LocateHandleBuffer ( gBS->LocateHandleBuffer (
ByProtocol, ByProtocol,
#if (PI_SPECIFICATION_VERSION < 0x00010000)
&gEfiFirmwareVolumeProtocolGuid,
#else
&gEfiFirmwareVolume2ProtocolGuid, &gEfiFirmwareVolume2ProtocolGuid,
#endif
NULL, NULL,
&FvHandleCount, &FvHandleCount,
&FvHandleBuffer &FvHandleBuffer
@ -1869,11 +1849,7 @@ BdsLibUpdateFvFileDevicePath (
for (Index = 0; Index < FvHandleCount; Index++) { for (Index = 0; Index < FvHandleCount; Index++) {
gBS->HandleProtocol ( gBS->HandleProtocol (
FvHandleBuffer[Index], FvHandleBuffer[Index],
#if (PI_SPECIFICATION_VERSION < 0x00010000)
&gEfiFirmwareVolumeProtocolGuid,
#else
&gEfiFirmwareVolume2ProtocolGuid, &gEfiFirmwareVolume2ProtocolGuid,
#endif
(VOID **) &Fv (VOID **) &Fv
); );

View File

@ -360,9 +360,7 @@ BdsLibConnectUsbDevByShortFormDP(
if ((DevicePathType (RemainingDevicePath) != MESSAGING_DEVICE_PATH) || if ((DevicePathType (RemainingDevicePath) != MESSAGING_DEVICE_PATH) ||
((DevicePathSubType (RemainingDevicePath) != MSG_USB_CLASS_DP) ((DevicePathSubType (RemainingDevicePath) != MSG_USB_CLASS_DP)
#if (EFI_SPECIFICATION_VERSION >= 0x00020000)
&& (DevicePathSubType (RemainingDevicePath) != MSG_USB_WWID_DP) && (DevicePathSubType (RemainingDevicePath) != MSG_USB_WWID_DP)
#endif
)) { )) {
return EFI_INVALID_PARAMETER; return EFI_INVALID_PARAMETER;
} }

View File

@ -21,7 +21,6 @@ Abstract:
**/ **/
#include "InternalBdsLib.h" #include "InternalBdsLib.h"
//@MT:#include "EfiPrintLib.h"
BOOLEAN BOOLEAN
IsNvNeed ( IsNvNeed (
@ -228,9 +227,7 @@ BdsLibConnectConsoleVariable (
// //
if ((DevicePathType (Instance) == MESSAGING_DEVICE_PATH) && if ((DevicePathType (Instance) == MESSAGING_DEVICE_PATH) &&
((DevicePathSubType (Instance) == MSG_USB_CLASS_DP) ((DevicePathSubType (Instance) == MSG_USB_CLASS_DP)
#if (EFI_SPECIFICATION_VERSION >= 0x00020000)
|| (DevicePathSubType (Instance) == MSG_USB_WWID_DP) || (DevicePathSubType (Instance) == MSG_USB_WWID_DP)
#endif
)) { )) {
// //
// Check the Usb console in Usb2.0 bus firstly, then Usb1.1 bus // 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; EFI_DEVICE_PATH_PROTOCOL *OptionDevicePath;
CHAR16 *Description; CHAR16 *Description;
CHAR16 OptionName[10]; CHAR16 OptionName[10];
BOOLEAN UpdateBootDevicePath; BOOLEAN UpdateDescription;
UINT16 BootOrderEntry; UINT16 BootOrderEntry;
UINTN OrderItemNum; UINTN OrderItemNum;
@ -280,7 +280,7 @@ BdsLibRegisterNewOption (
OptionDevicePath = NULL; OptionDevicePath = NULL;
Description = NULL; Description = NULL;
OptionOrderPtr = NULL; OptionOrderPtr = NULL;
UpdateBootDevicePath = FALSE; UpdateDescription = FALSE;
ZeroMem (OptionName, sizeof (OptionName)); ZeroMem (OptionName, sizeof (OptionName));
TempOptionSize = 0; TempOptionSize = 0;
@ -318,8 +318,8 @@ BdsLibRegisterNewOption (
// //
// Notes: the description may will change base on the GetStringToken // 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 // Got the option, so just return
// //
@ -328,9 +328,10 @@ BdsLibRegisterNewOption (
return EFI_SUCCESS; return EFI_SUCCESS;
} else { } else {
// //
// Boot device path changed, need update. // Option description changed, need update.
// //
UpdateBootDevicePath = TRUE; UpdateDescription = TRUE;
gBS->FreePool (OptionPtr);
break; break;
} }
} }
@ -350,7 +351,7 @@ BdsLibRegisterNewOption (
TempPtr += StrSize (String); TempPtr += StrSize (String);
CopyMem (TempPtr, DevicePath, GetDevicePathSize (DevicePath)); CopyMem (TempPtr, DevicePath, GetDevicePathSize (DevicePath));
if (UpdateBootDevicePath) { if (UpdateDescription) {
// //
// The number in option#### to be updated // The number in option#### to be updated
// //
@ -375,7 +376,10 @@ BdsLibRegisterNewOption (
OptionSize, OptionSize,
OptionPtr 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 (OptionPtr);
gBS->FreePool (TempOptionPtr); gBS->FreePool (TempOptionPtr);
return Status; return Status;
@ -388,7 +392,7 @@ BdsLibRegisterNewOption (
// //
// //
// If no BootOrder // If no option order
// //
if (TempOptionSize == 0) { if (TempOptionSize == 0) {
BootOrderEntry = 0; BootOrderEntry = 0;
@ -406,18 +410,12 @@ BdsLibRegisterNewOption (
return EFI_SUCCESS; return EFI_SUCCESS;
} }
if (UpdateBootDevicePath) { //
// // Append the new option number to the original option order
// If just update a old option, the new optionorder size not change //
// OrderItemNum = (TempOptionSize / sizeof (UINT16)) + 1 ;
OrderItemNum = (TempOptionSize / sizeof (UINT16)) ; OptionOrderPtr = AllocateZeroPool ( OrderItemNum * sizeof (UINT16));
OptionOrderPtr = AllocateZeroPool ( OrderItemNum * sizeof (UINT16)); CopyMem (OptionOrderPtr, TempOptionPtr, (OrderItemNum - 1) * 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));
}
OptionOrderPtr[Index] = RegisterOptionNumber; OptionOrderPtr[Index] = RegisterOptionNumber;
@ -995,10 +993,6 @@ SetupResetReminder (
VOID VOID
) )
{ {
#if (EFI_SPECIFICATION_VERSION < 0x0002000A)
EFI_STATUS Status;
EFI_FORM_BROWSER_PROTOCOL *Browser;
#endif
EFI_INPUT_KEY Key; EFI_INPUT_KEY Key;
CHAR16 *StringBuffer1; CHAR16 *StringBuffer1;
CHAR16 *StringBuffer2; CHAR16 *StringBuffer2;
@ -1010,14 +1004,6 @@ SetupResetReminder (
if (IsResetReminderFeatureEnable ()) { if (IsResetReminderFeatureEnable ()) {
if (IsResetRequired ()) { if (IsResetRequired ()) {
#if (EFI_SPECIFICATION_VERSION < 0x0002000A)
Status = gBS->LocateProtocol (
&gEfiFormBrowserProtocolGuid,
NULL,
&Browser
);
#endif
StringBuffer1 = AllocateZeroPool (MAX_STRING_LEN * sizeof (CHAR16)); StringBuffer1 = AllocateZeroPool (MAX_STRING_LEN * sizeof (CHAR16));
ASSERT (StringBuffer1 != NULL); ASSERT (StringBuffer1 != NULL);
StringBuffer2 = AllocateZeroPool (MAX_STRING_LEN * sizeof (CHAR16)); StringBuffer2 = AllocateZeroPool (MAX_STRING_LEN * sizeof (CHAR16));
@ -1028,11 +1014,7 @@ SetupResetReminder (
// Popup a menu to notice user // Popup a menu to notice user
// //
do { do {
#if (EFI_SPECIFICATION_VERSION < 0x0002000A)
Browser->CreatePopUp (2, TRUE, 0, NULL, &Key, StringBuffer1, StringBuffer2);
#else
IfrLibCreatePopUp (2, &Key, StringBuffer1, StringBuffer2); IfrLibCreatePopUp (2, &Key, StringBuffer1, StringBuffer2);
#endif
} while ((Key.ScanCode != SCAN_ESC) && (Key.UnicodeChar != CHAR_CARRIAGE_RETURN)); } while ((Key.ScanCode != SCAN_ESC) && (Key.UnicodeChar != CHAR_CARRIAGE_RETURN));
gBS->FreePool (StringBuffer1); gBS->FreePool (StringBuffer1);
@ -1187,61 +1169,6 @@ BdsLibGetImageHeader (
return Status; 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 VOID
EFIAPI EFIAPI
BdsSetMemoryTypeInformationVariable ( BdsSetMemoryTypeInformationVariable (

View File

@ -622,7 +622,6 @@ DevPathUsb (
CatPrint (Str, L"Usb(%x,%x)", (UINTN) Usb->ParentPortNumber, (UINTN) Usb->InterfaceNumber); CatPrint (Str, L"Usb(%x,%x)", (UINTN) Usb->ParentPortNumber, (UINTN) Usb->InterfaceNumber);
} }
#if (EFI_SPECIFICATION_VERSION >= 0x00020000)
VOID VOID
DevPathUsbWWID ( DevPathUsbWWID (
IN OUT POOL_PRINT *Str, IN OUT POOL_PRINT *Str,
@ -652,7 +651,6 @@ DevPathLogicalUnit (
LogicalUnit = DevPath; LogicalUnit = DevPath;
CatPrint (Str, L"Unit(%x)", (UINTN) LogicalUnit->Lun); CatPrint (Str, L"Unit(%x)", (UINTN) LogicalUnit->Lun);
} }
#endif
VOID VOID
DevPathUsbClass ( DevPathUsbClass (
@ -876,7 +874,6 @@ DevPathUart (
} }
} }
#if (EFI_SPECIFICATION_VERSION >= 0x00020000)
VOID VOID
DevPathiSCSI ( DevPathiSCSI (
IN OUT POOL_PRINT *Str, IN OUT POOL_PRINT *Str,
@ -912,7 +909,6 @@ DevPathiSCSI (
CatPrint (Str, L"%s)", (iSCSI->NetworkProtocol == 0) ? L"TCP" : L"reserved"); CatPrint (Str, L"%s)", (iSCSI->NetworkProtocol == 0) ? L"TCP" : L"reserved");
} }
#endif
VOID VOID
DevPathHardDrive ( DevPathHardDrive (
@ -1106,14 +1102,12 @@ DEVICE_PATH_STRING_TABLE DevPathTable[] = {
MESSAGING_DEVICE_PATH, MESSAGING_DEVICE_PATH,
MSG_USB_DP, MSG_USB_DP,
DevPathUsb, DevPathUsb,
#if (EFI_SPECIFICATION_VERSION >= 0x00020000)
MESSAGING_DEVICE_PATH, MESSAGING_DEVICE_PATH,
MSG_USB_WWID_DP, MSG_USB_WWID_DP,
DevPathUsbWWID, DevPathUsbWWID,
MESSAGING_DEVICE_PATH, MESSAGING_DEVICE_PATH,
MSG_DEVICE_LOGICAL_UNIT_DP, MSG_DEVICE_LOGICAL_UNIT_DP,
DevPathLogicalUnit, DevPathLogicalUnit,
#endif
MESSAGING_DEVICE_PATH, MESSAGING_DEVICE_PATH,
MSG_USB_CLASS_DP, MSG_USB_CLASS_DP,
DevPathUsbClass, DevPathUsbClass,
@ -1141,11 +1135,9 @@ DEVICE_PATH_STRING_TABLE DevPathTable[] = {
MESSAGING_DEVICE_PATH, MESSAGING_DEVICE_PATH,
MSG_VENDOR_DP, MSG_VENDOR_DP,
DevPathVendor, DevPathVendor,
#if (EFI_SPECIFICATION_VERSION >= 0x00020000)
MESSAGING_DEVICE_PATH, MESSAGING_DEVICE_PATH,
MSG_ISCSI_DP, MSG_ISCSI_DP,
DevPathiSCSI, DevPathiSCSI,
#endif
MEDIA_DEVICE_PATH, MEDIA_DEVICE_PATH,
MEDIA_HARDDRIVE_DP, MEDIA_HARDDRIVE_DP,
DevPathHardDrive, DevPathHardDrive,
@ -1161,11 +1153,9 @@ DEVICE_PATH_STRING_TABLE DevPathTable[] = {
MEDIA_DEVICE_PATH, MEDIA_DEVICE_PATH,
MEDIA_PROTOCOL_DP, MEDIA_PROTOCOL_DP,
DevPathMediaProtocol, DevPathMediaProtocol,
#if (EFI_SPECIFICATION_VERSION != 0x00020000)
MEDIA_DEVICE_PATH, MEDIA_DEVICE_PATH,
MEDIA_PIWG_FW_FILE_DP, MEDIA_PIWG_FW_FILE_DP,
DevPathFvFilePath, DevPathFvFilePath,
#endif
BBS_DEVICE_PATH, BBS_DEVICE_PATH,
BBS_BBS_DP, BBS_BBS_DP,
DevPathBssBss, DevPathBssBss,

View File

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

View File

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