* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
/*
- * Modifications copyright (c) 2012-2013 Roderick W. Smith
+ * Modifications copyright (c) 2012-2015 Roderick W. Smith
*
* Modifications distributed under the terms of the GNU General Public
* License (GPL) version 3 (GPLv3), a copy of which must be distributed
#include <efilib.h>
#else
#include "../include/tiano_includes.h"
-#include "../EfiLib/GenericBdsLib.h"
#endif
+#include "../EfiLib/GenericBdsLib.h"
#include "libeg.h"
#define REFIT_DEBUG (0)
// Tag classifications; used in various ways.
-#define TAG_ABOUT (1)
-#define TAG_REBOOT (2)
-#define TAG_SHUTDOWN (3)
-#define TAG_TOOL (4)
-#define TAG_LOADER (5)
-#define TAG_LEGACY (6)
-#define TAG_EXIT (7)
-#define TAG_SHELL (8)
-#define TAG_GPTSYNC (9)
-#define TAG_LEGACY_UEFI (10)
-#define TAG_APPLE_RECOVERY (11)
-#define TAG_MOK_TOOL (12)
-#define TAG_FIRMWARE (13)
-#define NUM_TOOLS (13)
+#define TAG_ABOUT (1)
+#define TAG_REBOOT (2)
+#define TAG_SHUTDOWN (3)
+#define TAG_TOOL (4)
+#define TAG_LOADER (5)
+#define TAG_LEGACY (6)
+#define TAG_EXIT (7)
+#define TAG_SHELL (8)
+#define TAG_GPTSYNC (9)
+#define TAG_LEGACY_UEFI (10)
+#define TAG_APPLE_RECOVERY (11)
+#define TAG_WINDOWS_RECOVERY (12)
+#define TAG_MOK_TOOL (13)
+#define TAG_FIRMWARE (14)
+#define TAG_MEMTEST (15)
+#define TAG_GDISK (16)
+#define TAG_NETBOOT (17)
+#define TAG_CSR_ROTATE (18)
+#define TAG_FWUPDATE_TOOL (19)
+#define NUM_TOOLS (20)
#define NUM_SCAN_OPTIONS 10
#define GRAPHICS_FOR_GRUB 8
#define GRAPHICS_FOR_WINDOWS 16
+// Load types
+#define TYPE_EFI 1
+#define TYPE_LEGACY 2
+
// Type of legacy (BIOS) boot support detected
#define LEGACY_TYPE_NONE 0
#define LEGACY_TYPE_MAC 1
// Filesystem type identifiers. Not all are yet used....
#define FS_TYPE_UNKNOWN 0
-#define FS_TYPE_FAT 1
-#define FS_TYPE_EXT2 2
-#define FS_TYPE_EXT3 3
-#define FS_TYPE_EXT4 4
-#define FS_TYPE_HFSPLUS 5
-#define FS_TYPE_REISERFS 6
-#define FS_TYPE_BTRFS 7
-#define FS_TYPE_ISO9660 8
+#define FS_TYPE_WHOLEDISK 1
+#define FS_TYPE_FAT 2
+#define FS_TYPE_EXFAT 3
+#define FS_TYPE_NTFS 4
+#define FS_TYPE_EXT2 5
+#define FS_TYPE_EXT3 6
+#define FS_TYPE_EXT4 7
+#define FS_TYPE_HFSPLUS 8
+#define FS_TYPE_REISERFS 9
+#define FS_TYPE_BTRFS 10
+#define FS_TYPE_XFS 11
+#define FS_TYPE_ISO9660 12
+
+// How to scale banner images
+#define BANNER_NOSCALE 0
+#define BANNER_FILLSCREEN 1
+
+// Sizes of the default icons; badges are 1/4 the big icon size
+#define DEFAULT_SMALL_ICON_SIZE 48
+#define DEFAULT_BIG_ICON_SIZE 128
+
+// Codes for types of icon sizes; used for indexing into GlobalConfig.IconSizes[]
+#define ICON_SIZE_BADGE 0
+#define ICON_SIZE_SMALL 1
+#define ICON_SIZE_BIG 2
// Names of binaries that can manage MOKs....
-#define MOK_NAMES L"MokManager.efi,HashTool.efi,HashTool-signed.efi"
+#define MOK_NAMES L"MokManager.efi,HashTool.efi,HashTool-signed.efi,KeyTool.efi,KeyTool-signed.efi"
+// Names of binaries that can update firmware....
+#if defined (EFIX64)
+#define FWUPDATE_NAMES L"fwupx64.efi"
+#elif defined(EFI32)
+#define FWUPDATE_NAMES L"fwupia32.efi"
+#elif defined(EFIAARCH64)
+#define FWUPDATE_NAMES L"fwupaa64.efi"
+#else
+#define FWUPDATE_NAMES L"fwup.efi"
+#endif
// Directories to search for these MOK-managing programs. Note that SelfDir is
// searched in addition to these locations....
#define MOK_LOCATIONS L"\\,EFI\\tools,EFI\\fedora,EFI\\redhat,EFI\\ubuntu,EFI\\suse,EFI\\opensuse,EFI\\altlinux"
+// Directories to search for memtest86....
+#define MEMTEST_LOCATIONS L"EFI\\tools,EFI\\tools\\memtest86,EFI\\tools\\memtest,EFI\\memtest86,EFI\\memtest"
+// Files that may be Windows recovery files
+#define WINDOWS_RECOVERY_FILES L"EFI\\Microsoft\\Boot\\LrsBootmgr.efi,Recovery:\\EFI\\BOOT\\bootx64.efi,Recovery:\\EFI\\BOOT\\bootia32.efi"
+
+// Filename patterns that identify EFI boot loaders. Note that a single case (either L"*.efi" or
+// L"*.EFI") is fine for most systems; but Gigabyte's buggy Hybrid EFI does a case-sensitive
+// comparison when it should do a case-insensitive comparison, so I'm doubling this up. It does
+// no harm on other computers, AFAIK. In theory, every case variation should be done for
+// completeness, but that's ridiculous....
+#define LOADER_MATCH_PATTERNS L"*.efi,*.EFI"
+
+// Definitions for the "hideui" option in refind.conf
+#define HIDEUI_FLAG_NONE (0x0000)
+#define HIDEUI_FLAG_BANNER (0x0001)
+#define HIDEUI_FLAG_LABEL (0x0002)
+#define HIDEUI_FLAG_SINGLEUSER (0x0004)
+#define HIDEUI_FLAG_HWTEST (0x0008)
+#define HIDEUI_FLAG_ARROWS (0x0010)
+#define HIDEUI_FLAG_HINTS (0x0020)
+#define HIDEUI_FLAG_EDITOR (0x0040)
+#define HIDEUI_FLAG_SAFEMODE (0x0080)
+#define HIDEUI_FLAG_BADGES (0x0100)
+#define HIDEUI_FLAG_ALL ((0xffff))
+
+// Default hint text for program-launch submenus
+#define SUBSCREEN_HINT1 L"Use arrow keys to move cursor; Enter to boot;"
+#define SUBSCREEN_HINT2 L"Insert or F2 to edit options; Esc to return to main menu"
+#define SUBSCREEN_HINT2_NO_EDITOR L"Esc to return to main menu"
+
+#define NULL_GUID_VALUE { 0x00000000, 0x0000, 0x0000, {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00} };
+#define REFIND_GUID_VALUE { 0x36D08FA7, 0xCF0B, 0x42F5, {0x8F, 0x14, 0x68, 0xDF, 0x73, 0xED, 0x37, 0x40} };
//
// global definitions
// global types
+typedef struct _uint32_list {
+ UINT32 Value;
+ struct _uint32_list *Next;
+} UINT32_LIST;
+
typedef struct {
UINT8 Flags;
UINT8 StartCHS1;
EFI_HANDLE DeviceHandle;
EFI_FILE *RootDir;
CHAR16 *VolName;
+ CHAR16 *PartName;
+ EFI_GUID VolUuid;
+ EFI_GUID PartGuid;
+ EFI_GUID PartTypeGuid;
+ BOOLEAN IsMarkedReadOnly;
UINTN VolNumber;
EG_IMAGE *VolIconImage;
EG_IMAGE *VolBadgeImage;
typedef struct {
REFIT_MENU_ENTRY me;
REFIT_VOLUME *Volume;
-#ifndef __MAKEWITH_GNUEFI
BDS_COMMON_OPTION *BdsOption;
-#endif
CHAR16 *LoadOptions;
BOOLEAN Enabled;
} LEGACY_ENTRY;
typedef struct {
- BOOLEAN TextOnly;
- BOOLEAN ScanAllLinux;
- UINTN RequestedScreenWidth;
- UINTN RequestedScreenHeight;
- UINTN BannerBottomEdge;
- UINTN RequestedTextMode;
- UINTN Timeout;
- UINTN HideUIFlags;
- UINTN MaxTags; // max. number of OS entries to show simultaneously in graphics mode
- UINTN GraphicsFor;
- UINTN LegacyType;
- UINTN ScanDelay;
- UINTN ScreensaverTime;
- CHAR16 *BannerFileName;
- EG_IMAGE *ScreenBackground;
- CHAR16 *SelectionSmallFileName;
- CHAR16 *SelectionBigFileName;
- CHAR16 *DefaultSelection;
- CHAR16 *AlsoScan;
- CHAR16 *DontScanVolumes;
- CHAR16 *DontScanDirs;
- CHAR16 *DontScanFiles;
- CHAR16 *DriverDirs;
- CHAR16 *IconsDir;
- UINTN ShowTools[NUM_TOOLS];
- CHAR8 ScanFor[NUM_SCAN_OPTIONS]; // codes of types of loaders for which to scan
+ BOOLEAN TextOnly;
+ BOOLEAN ScanAllLinux;
+ BOOLEAN DeepLegacyScan;
+ BOOLEAN EnableAndLockVMX;
+ BOOLEAN FoldLinuxKernels;
+ BOOLEAN EnableTouch;
+ UINTN RequestedScreenWidth;
+ UINTN RequestedScreenHeight;
+ UINTN BannerBottomEdge;
+ UINTN RequestedTextMode;
+ UINTN Timeout;
+ UINTN HideUIFlags;
+ UINTN MaxTags; // max. number of OS entries to show simultaneously in graphics mode
+ UINTN GraphicsFor;
+ UINTN LegacyType;
+ UINTN ScanDelay;
+ UINTN ScreensaverTime;
+ UINTN IconSizes[3];
+ UINTN BannerScale;
+ REFIT_VOLUME *DiscoveredRoot;
+ EFI_DEVICE_PATH *SelfDevicePath;
+ CHAR16 *BannerFileName;
+ EG_IMAGE *ScreenBackground;
+ CHAR16 *ConfigFilename;
+ CHAR16 *SelectionSmallFileName;
+ CHAR16 *SelectionBigFileName;
+ CHAR16 *DefaultSelection;
+ CHAR16 *AlsoScan;
+ CHAR16 *DontScanVolumes;
+ CHAR16 *DontScanDirs;
+ CHAR16 *DontScanFiles;
+ CHAR16 *WindowsRecoveryFiles;
+ CHAR16 *DriverDirs;
+ CHAR16 *IconsDir;
+ CHAR16 *SpoofOSXVersion;
+ UINT32_LIST *CsrValues;
+ UINTN ShowTools[NUM_TOOLS];
+ CHAR8 ScanFor[NUM_SCAN_OPTIONS]; // codes of types of loaders for which to scan
} REFIT_CONFIG;
// Global variables
extern EFI_GUID gEfiLegacyBootProtocolGuid;
extern EFI_GUID gEfiGlobalVariableGuid;
+EFI_STATUS StartEFIImageList(IN EFI_DEVICE_PATH **DevicePaths,
+ IN CHAR16 *LoadOptions, IN UINTN LoaderType,
+ IN CHAR16 *ImageTitle, IN CHAR8 OSType,
+ OUT UINTN *ErrorInStep,
+ IN BOOLEAN Verbose,
+ IN BOOLEAN IsDriver);
+EFI_STATUS StartEFIImage(IN EFI_DEVICE_PATH *DevicePath,
+ IN CHAR16 *LoadOptions, IN UINTN LoaderType,
+ IN CHAR16 *ImageTitle, IN CHAR8 OSType,
+ OUT UINTN *ErrorInStep,
+ IN BOOLEAN Verbose,
+ IN BOOLEAN IsDriver);
LOADER_ENTRY *InitializeLoaderEntry(IN LOADER_ENTRY *Entry);
REFIT_MENU_SCREEN *InitializeSubScreen(IN LOADER_ENTRY *Entry);
-VOID GenerateSubScreen(LOADER_ENTRY *Entry, IN REFIT_VOLUME *Volume);
+VOID GenerateSubScreen(LOADER_ENTRY *Entry, IN REFIT_VOLUME *Volume, IN BOOLEAN GenerateReturn);
+EG_IMAGE * GetDiskBadge(IN UINTN DiskType);
LOADER_ENTRY * MakeGenericLoaderEntry(VOID);
-LOADER_ENTRY * AddLoaderEntry(IN CHAR16 *LoaderPath, IN CHAR16 *LoaderTitle, IN REFIT_VOLUME *Volume);
VOID SetLoaderDefaults(LOADER_ENTRY *Entry, CHAR16 *LoaderPath, IN REFIT_VOLUME *Volume);
LOADER_ENTRY * AddPreparedLoaderEntry(LOADER_ENTRY *Entry);
-VOID disable_secure_boot(VOID);
+VOID StoreLoaderName(IN CHAR16 *Name);
#endif