]> git.proxmox.com Git - mirror_edk2.git/commitdiff
1) Sync in patch for EDK 1063 Boot option enumeration algorithm enhancement
authorqwang12 <qwang12@6f19259b-4bc3-4df7-8a09-765794883524>
Thu, 6 Mar 2008 11:48:52 +0000 (11:48 +0000)
committerqwang12 <qwang12@6f19259b-4bc3-4df7-8a09-765794883524>
Thu, 6 Mar 2008 11:48:52 +0000 (11:48 +0000)
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
MdeModulePkg/Library/GenericBdsLib/BdsConnect.c
MdeModulePkg/Library/GenericBdsLib/BdsConsole.c
MdeModulePkg/Library/GenericBdsLib/BdsMisc.c
MdeModulePkg/Library/GenericBdsLib/DevicePath.c
MdeModulePkg/Library/GenericBdsLib/GenericBdsLib.inf
MdeModulePkg/Library/GenericBdsLib/InternalBdsLib.h

index 5071a679cfb8d48f9ace62f76e5ba45f0f609d21..4f9ab144e4e8003a82af34f2c1fac19182ed881c 100644 (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
             );
 
index 6e9068b053c9840465ee0b09154d82fca7c9c504..98a6709c6965b522e1d005a2f7151bbd5e3d7576 100644 (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;
   }
index db28b68dd0402688918dd8fc2326ff33885deef2..53766f98a83d7915ee4affd16665304811687991 100644 (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
index 739913bcaa788ec4313819b6c531d57a0599d40f..2c567fc3def4d0efc6a756d28236fa16d8672b75 100644 (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 (
index 96a3c5daf96fd403968693cfd75ae0e4e9920235..6701fd2b44be15c91676a98e9cf2be8dce9d66f6 100644 (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,
index 990e9aaf615c2bef8bc2b3d147e2e21e1d872e95..0752bc88f2b124594f3517ace7999ce30cf2c1da 100644 (file)
   gEfiLegacyBiosProtocolGuid                    # PROTOCOL ALWAYS_CONSUMED\r
   gEfiCpuArchProtocolGuid                       # PROTOCOL ALWAYS_CONSUMED\r
   gEfiDevicePathProtocolGuid                    # PROTOCOL ALWAYS_CONSUMED\r
+  gEfiFirmwareVolumeDispatchProtocolGuid        # PROTOCOL ALWAYS_CONSUMED\r
 \r
 [Pcd]\r
   gEfiMdeModulePkgTokenSpaceGuid.PcdPlatformBootTimeOutDefault
\ No newline at end of file
index cae57b9e188e2d1f07d55d968eeacf352fa20d46..cf63e80afdccb5ad69f9f63f5fe8d543c159bdda 100644 (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>