]> git.proxmox.com Git - mirror_edk2.git/commitdiff
ArmPlatformPkg/Bds: Check if the assumed requirements are set before to use it
authoroliviermartin <oliviermartin@6f19259b-4bc3-4df7-8a09-765794883524>
Tue, 28 Jun 2011 11:50:32 +0000 (11:50 +0000)
committeroliviermartin <oliviermartin@6f19259b-4bc3-4df7-8a09-765794883524>
Tue, 28 Jun 2011 11:50:32 +0000 (11:50 +0000)
There were some assumptions that some PCDs and protocols were defined.
Check if these requirements are defined; either print a debug message
to inform the user or skip the statements that require these PCDs or protocol.

git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@11915 6f19259b-4bc3-4df7-8a09-765794883524

ArmPlatformPkg/Bds/Bds.c
ArmPlatformPkg/Bds/BootMenu.c

index 8f6e82073f9f79fe78e92317b05a6793fbc329d2..7b49be4c114e0e6f8c3ec22792edecfd0e73cca5 100644 (file)
@@ -198,11 +198,11 @@ DefineDefaultBootEntries (
   VOID
   )
 {
-  BDS_LOAD_OPTION     *BdsLoadOption;
-  UINTN               Size;
-  EFI_STATUS          Status;
-  EFI_DEVICE_PATH_FROM_TEXT_PROTOCOL  *EfiDevicePathFromTextProtocol;
-  EFI_DEVICE_PATH*    BootDevicePath;
+  BDS_LOAD_OPTION*                    BdsLoadOption;
+  UINTN                               Size;
+  EFI_STATUS                          Status;
+  EFI_DEVICE_PATH_FROM_TEXT_PROTOCOLEfiDevicePathFromTextProtocol;
+  EFI_DEVICE_PATH*                    BootDevicePath;
 
   //
   // If Boot Order does not exist then create a default entry
@@ -210,8 +210,16 @@ DefineDefaultBootEntries (
   Size = 0;
   Status = gRT->GetVariable (L"BootOrder", &gEfiGlobalVariableGuid, NULL, &Size, NULL);
   if (Status == EFI_NOT_FOUND) {
+    if ((PcdGetPtr(PcdDefaultBootDevicePath) == NULL) || (StrLen ((CHAR16*)PcdGetPtr(PcdDefaultBootDevicePath)) == 0)) {
+      return EFI_UNSUPPORTED;
+    }
+
     Status = gBS->LocateProtocol (&gEfiDevicePathFromTextProtocolGuid, NULL, (VOID **)&EfiDevicePathFromTextProtocol);
-    ASSERT_EFI_ERROR(Status);
+    if (EFI_ERROR(Status)) {
+      // You must provide an implementation of DevicePathFromTextProtocol in your firmware (eg: DevicePathDxe)
+      DEBUG((EFI_D_ERROR,"Error: Bds requires DevicePathFromTextProtocol\n"));
+      return Status;
+    }
     BootDevicePath = EfiDevicePathFromTextProtocol->ConvertTextToDevicePath ((CHAR16*)PcdGetPtr(PcdDefaultBootDevicePath));
 
     DEBUG_CODE_BEGIN();
@@ -238,6 +246,8 @@ DefineDefaultBootEntries (
         &BdsLoadOption
         );
       FreePool (BdsLoadOption);
+    } else {
+      Status = EFI_UNSUPPORTED;
     }
   }
 
@@ -341,10 +351,12 @@ BdsEntry (
   //
   // Declare the Firmware Vendor
   //
-  Size = 0x100;
-  gST->FirmwareVendor = AllocateRuntimePool (Size);
-  ASSERT (gST->FirmwareVendor != NULL);
-  UnicodeSPrint (gST->FirmwareVendor, Size, L"%a EFI %a %a", PcdGetPtr(PcdFirmwareVendor), __DATE__, __TIME__);
+  if (PcdGetPtr(PcdFirmwareVendor)) {
+    Size = 0x100;
+    gST->FirmwareVendor = AllocateRuntimePool (Size);
+    ASSERT (gST->FirmwareVendor != NULL);
+    UnicodeSPrint (gST->FirmwareVendor, Size, L"%a EFI %a %a", PcdGetPtr(PcdFirmwareVendor), __DATE__, __TIME__);
+  }
 
   // If BootNext environment variable is defined then we just load it !
   Status = BdsStartBootOption (L"BootNext");
index 1bcf2ad00f33a37468f19c92c3e18f1be3e6e033..35c569d0b77d620be9ecb5d5f74fe21a342994d7 100644 (file)
@@ -427,7 +427,11 @@ BootMenuMain (
         EFI_DEVICE_PATH_TO_TEXT_PROTOCOL* DevicePathToTextProtocol;\r
 \r
         Status = gBS->LocateProtocol(&gEfiDevicePathToTextProtocolGuid, NULL, (VOID **)&DevicePathToTextProtocol);\r
-        ASSERT_EFI_ERROR(Status);\r
+        if (EFI_ERROR(Status)) {\r
+          // You must provide an implementation of DevicePathToTextProtocol in your firmware (eg: DevicePathDxe)\r
+          DEBUG((EFI_D_ERROR,"Error: Bds requires DevicePathToTextProtocol\n"));\r
+          return Status;\r
+        }\r
         DevicePathTxt = DevicePathToTextProtocol->ConvertDevicePathToText(BootOption->FilePathList,TRUE,TRUE);\r
 \r
         Print(L"\t- %s\n",DevicePathTxt);\r