]> code.delx.au - refind/blobdiff - refind/global.h
Added support for "%v" as a variable for the kernel version number in
[refind] / refind / global.h
index 4e381db2c13811d5661ecc7b291b65aa1c2eab3e..0da3ff38c28d3c65daa40170568a6f9fee5fd646 100644 (file)
@@ -34,7 +34,7 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 /*
- * Modifications copyright (c) 2012 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 NUM_TOOLS          (11)
+#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_ISO9660        7
+#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,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} };
+
+// Configuration file variables
+#define KERNEL_VERSION L"%v"
 
 //
 // global definitions
 
 // global types
 
+typedef struct _uint32_list {
+    UINT32               Value;
+    struct _uint32_list  *Next;
+} UINT32_LIST;
+
 typedef struct {
    UINT8 Flags;
    UINT8 StartCHS1;
@@ -144,6 +229,11 @@ typedef struct {
    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;
@@ -203,38 +293,50 @@ typedef struct {
 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       RequestedTextMode;
-   UINTN       Timeout;
-   UINTN       HideUIFlags;
-   UINTN       MaxTags;     // max. number of OS entries to show simultaneously in graphics mode
-   UINTN       GraphicsFor;
-   UINTN       LegacyType;
-   UINTN       ScanDelay;
-   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
@@ -254,13 +356,26 @@ extern REFIT_CONFIG     GlobalConfig;
 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 StoreLoaderName(IN CHAR16 *Name);
 
 #endif