]> code.delx.au - refind/blobdiff - refind/main.c
Documentation changes for legacy support from GNU-EFI builds.
[refind] / refind / main.c
index 5df0aebbfad9fc3851ab1128f67dfb5faf5a4987..13408141e0effe70bcf501da187952543781bdd7 100644 (file)
 #ifndef EFI_SECURITY_VIOLATION
 #define EFI_SECURITY_VIOLATION    EFIERR (26)
 #endif
-#else
+#endif
+
 #include "../EfiLib/BdsHelper.h"
 #include "../EfiLib/legacy.h"
-#endif // __MAKEWITH_GNUEFI
 
 #ifndef EFI_OS_INDICATIONS_BOOT_TO_FW_UI
 #define EFI_OS_INDICATIONS_BOOT_TO_FW_UI 0x0000000000000001ULL
 #endif
 
+#ifdef __MAKEWITH_TIANO
+#define LibLocateHandle gBS->LocateHandleBuffer
+#endif
+
 //
 // constants
 
@@ -164,7 +168,7 @@ static VOID AboutrEFInd(VOID)
 
     if (AboutMenu.EntryCount == 0) {
         AboutMenu.TitleImage = BuiltinIcon(BUILTIN_ICON_FUNC_ABOUT);
-        AddMenuInfoLine(&AboutMenu, L"rEFInd Version 0.8.0");
+        AddMenuInfoLine(&AboutMenu, L"rEFInd Version 0.8.0.5");
         AddMenuInfoLine(&AboutMenu, L"");
         AddMenuInfoLine(&AboutMenu, L"Copyright (c) 2006-2010 Christoph Pfisterer");
         AddMenuInfoLine(&AboutMenu, L"Copyright (c) 2012-2014 Roderick W. Smith");
@@ -907,10 +911,12 @@ VOID SetLoaderDefaults(LOADER_ENTRY *Entry, CHAR16 *LoaderPath, REFIT_VOLUME *Vo
 
    // locate a custom icon for the loader
    // Anything found here takes precedence over the "hints" in the OSIconName variable
-   if (!Entry->me.Image)
+   if (!Entry->me.Image) {
       Entry->me.Image = egLoadIconAnyType(Volume->RootDir, PathOnly, NoExtension, GlobalConfig.IconSizes[ICON_SIZE_BIG]);
-   if (!Entry->me.Image)
+   }
+   if (!Entry->me.Image) {
       Entry->me.Image = egCopyImage(Volume->VolIconImage);
+   }
 
    // Begin creating icon "hints" by using last part of directory path leading
    // to the loader
@@ -960,9 +966,6 @@ VOID SetLoaderDefaults(LOADER_ENTRY *Entry, CHAR16 *LoaderPath, REFIT_VOLUME *Vo
       Entry->OSType = 'R';
       ShortcutLetter = 'R';
    } else if (StriCmp(LoaderPath, MACOSX_LOADER_PATH) == 0) {
-      if (Volume->VolIconImage != NULL) { // custom icon file found
-         Entry->me.Image = Volume->VolIconImage;
-      }
       MergeStrings(&OSIconName, L"mac", L',');
       Entry->OSType = 'M';
       ShortcutLetter = 'M';
@@ -1650,7 +1653,6 @@ static VOID StartLegacy(IN LEGACY_ENTRY *Entry)
 } /* static VOID StartLegacy() */
 
 // Start a device on a non-Mac using the EFI_LEGACY_BIOS_PROTOCOL
-#ifdef __MAKEWITH_TIANO
 static VOID StartLegacyUEFI(LEGACY_ENTRY *Entry)
 {
     BeginExternalScreen(TRUE, L"Booting Legacy OS (UEFI mode)");
@@ -1663,7 +1665,6 @@ static VOID StartLegacyUEFI(LEGACY_ENTRY *Entry)
     PauseForKey();
     FinishExternalScreen();
 } // static VOID StartLegacyUEFI()
-#endif // __MAKEWITH_TIANO
 
 static LEGACY_ENTRY * AddLegacyEntry(IN CHAR16 *LoaderTitle, IN REFIT_VOLUME *Volume)
 {
@@ -1734,9 +1735,9 @@ static LEGACY_ENTRY * AddLegacyEntry(IN CHAR16 *LoaderTitle, IN REFIT_VOLUME *Vo
 } /* static LEGACY_ENTRY * AddLegacyEntry() */
 
 
-#ifdef __MAKEWITH_GNUEFI
-static VOID ScanLegacyUEFI(IN UINTN DiskType){}
-#else
+// #ifdef __MAKEWITH_GNUEFI
+// static VOID ScanLegacyUEFI(IN UINTN DiskType){}
+// #else
 // default volume badge icon based on disk kind
 static EG_IMAGE * GetDiskBadge(IN UINTN DiskType) {
    EG_IMAGE * Badge = NULL;
@@ -1833,9 +1834,9 @@ static VOID ScanLegacyUEFI(IN UINTN DiskType)
 
     // If LegacyBios protocol is not implemented on this platform, then
     //we do not support this type of legacy boot on this machine.
-    Status = gBS->LocateProtocol(&gEfiLegacyBootProtocolGuid, NULL, (VOID **) &LegacyBios);
+    Status = refit_call3_wrapper(gBS->LocateProtocol, &gEfiLegacyBootProtocolGuid, NULL, (VOID **) &LegacyBios);
     if (EFI_ERROR (Status))
-        return;
+       return;
 
     // EFI calls USB drives BBS_HARDDRIVE, but we want to distinguish them,
     // so we set DiskType inappropriately elsewhere in the program and
@@ -1883,7 +1884,7 @@ static VOID ScanLegacyUEFI(IN UINTN DiskType)
         Index++;
     } // while
 } /* static VOID ScanLegacyUEFI() */
-#endif // __MAKEWITH_GNUEFI
+//#endif // __MAKEWITH_GNUEFI
 
 static VOID ScanLegacyVolume(REFIT_VOLUME *Volume, UINTN VolumeIndex) {
    UINTN VolumeIndex2;
@@ -2151,20 +2152,16 @@ static VOID LoadDrivers(VOID)
 
 // Determine what (if any) type of legacy (BIOS) boot support is available
 static VOID FindLegacyBootType(VOID) {
-#ifdef __MAKEWITH_TIANO
    EFI_STATUS                Status;
    EFI_LEGACY_BIOS_PROTOCOL  *LegacyBios;
-#endif
 
    GlobalConfig.LegacyType = LEGACY_TYPE_NONE;
 
    // UEFI-style legacy BIOS support is available only with the TianoCore EDK2
    // build environment, and then only with some EFI implementations....
-#ifdef __MAKEWITH_TIANO
-   Status = gBS->LocateProtocol (&gEfiLegacyBootProtocolGuid, NULL, (VOID **) &LegacyBios);
+   Status = refit_call3_wrapper(gBS->LocateProtocol, &gEfiLegacyBootProtocolGuid, NULL, (VOID **) &LegacyBios);
    if (!EFI_ERROR (Status))
       GlobalConfig.LegacyType = LEGACY_TYPE_UEFI;
-#endif
 
    // Macs have their own system. If the firmware vendor code contains the
    // string "Apple", assume it's available. Note that this overrides the
@@ -2175,8 +2172,7 @@ static VOID FindLegacyBootType(VOID) {
       GlobalConfig.LegacyType = LEGACY_TYPE_MAC;
 } // static VOID FindLegacyBootType
 
-// Warn the user if legacy OS scans are enabled but the firmware or this
-// application can't support them....
+// Warn the user if legacy OS scans are enabled but the firmware can't support them....
 static VOID WarnIfLegacyProblems() {
    BOOLEAN  found = FALSE;
    UINTN    i = 0;
@@ -2189,16 +2185,8 @@ static VOID WarnIfLegacyProblems() {
       } while ((i < NUM_SCAN_OPTIONS) && (!found));
       if (found) {
          Print(L"NOTE: refind.conf's 'scanfor' line specifies scanning for one or more legacy\n");
-         Print(L"(BIOS) boot options; however, this is not possible because ");
-#ifdef __MAKEWITH_TIANO
-         Print(L"your computer lacks\n");
+         Print(L"(BIOS) boot options; however, this is not possible because your computer lacks\n");
          Print(L"the necessary Compatibility Support Module (CSM) support.\n");
-#else
-         Print(L"this program was\n");
-         Print(L"compiled without the necessary support. Please visit\n");
-         Print(L"http://www.rodsbooks.com/refind/getting.html and download and install a rEFInd\n");
-         Print(L"binary built with the TianoCore EDK2 to enable legacy boot support.\n");
-#endif
          PauseForKey();
       } // if (found)
    } // if no legacy support
@@ -2207,7 +2195,6 @@ static VOID WarnIfLegacyProblems() {
 // Locates boot loaders. NOTE: This assumes that GlobalConfig.LegacyType is set correctly.
 static VOID ScanForBootloaders(VOID) {
    UINTN    i;
-#ifdef __MAKEWITH_TIANO
    CHAR8    s;
    BOOLEAN  ScanForLegacy = FALSE;
 
@@ -2223,7 +2210,6 @@ static VOID ScanForBootloaders(VOID) {
       BdsDeleteAllInvalidLegacyBootOptions();
       BdsAddNonExistingLegacyBootOptions();
    } // if
-#endif
 
    // scan for loaders and tools, add them to the menu
    for (i = 0; i < NUM_SCAN_OPTIONS; i++) {
@@ -2445,7 +2431,7 @@ static VOID InitializeLib(IN EFI_HANDLE ImageHandle, IN EFI_SYSTEM_TABLE *System
    gRT = SystemTable->RuntimeServices; // Some BDS functions need gRT to be set
    EfiGetSystemConfigurationTable (&gEfiDxeServicesTableGuid, (VOID **) &gDS);
 
-   InitializeConsoleSim();
+//   InitializeConsoleSim();
 }
 
 #endif
@@ -2611,11 +2597,9 @@ efi_main (EFI_HANDLE ImageHandle, EFI_SYSTEM_TABLE *SystemTable)
                 StartLegacy((LEGACY_ENTRY *)ChosenEntry);
                 break;
 
-#ifdef __MAKEWITH_TIANO
             case TAG_LEGACY_UEFI: // Boot a legacy OS on a non-Mac
                 StartLegacyUEFI((LEGACY_ENTRY *)ChosenEntry);
                 break;
-#endif
 
             case TAG_TOOL:     // Start a EFI tool
                 StartTool((LOADER_ENTRY *)ChosenEntry);