summaryrefslogtreecommitdiff
path: root/MdeModulePkg
diff options
context:
space:
mode:
authorqwang12 <qwang12@6f19259b-4bc3-4df7-8a09-765794883524>2008-03-06 11:48:52 +0000
committerqwang12 <qwang12@6f19259b-4bc3-4df7-8a09-765794883524>2008-03-06 11:48:52 +0000
commita1a99cca132359b0f08b66a73e54f6008f90a28e (patch)
treedc19cbf0546948af92d81b993e31e5726b1b9bb4 /MdeModulePkg
parent189eac2199940cdc1265503ba4854ea947042424 (diff)
downloadedk2-platforms-a1a99cca132359b0f08b66a73e54f6008f90a28e.tar.xz
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
Diffstat (limited to 'MdeModulePkg')
-rw-r--r--MdeModulePkg/Library/GenericBdsLib/BdsBoot.c48
-rw-r--r--MdeModulePkg/Library/GenericBdsLib/BdsConnect.c2
-rw-r--r--MdeModulePkg/Library/GenericBdsLib/BdsConsole.c3
-rw-r--r--MdeModulePkg/Library/GenericBdsLib/BdsMisc.c111
-rw-r--r--MdeModulePkg/Library/GenericBdsLib/DevicePath.c10
-rw-r--r--MdeModulePkg/Library/GenericBdsLib/GenericBdsLib.inf1
-rw-r--r--MdeModulePkg/Library/GenericBdsLib/InternalBdsLib.h1
7 files changed, 33 insertions, 143 deletions
diff --git a/MdeModulePkg/Library/GenericBdsLib/BdsBoot.c b/MdeModulePkg/Library/GenericBdsLib/BdsBoot.c
index 5071a679cf..4f9ab144e4 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 6e9068b053..98a6709c69 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 db28b68dd0..53766f98a8 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 739913bcaa..2c567fc3de 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 96a3c5daf9..6701fd2b44 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 990e9aaf61..0752bc88f2 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 cae57b9e18..cf63e80afd 100644
--- a/MdeModulePkg/Library/GenericBdsLib/InternalBdsLib.h
+++ b/MdeModulePkg/Library/GenericBdsLib/InternalBdsLib.h
@@ -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>