X-Git-Url: https://code.delx.au/refind/blobdiff_plain/f750551a23ac517385f105b7de582b6e45616266..b04a842814ccc991ed93a52acbd7ac27768be686:/refind/global.h diff --git a/refind/global.h b/refind/global.h index 8ad30f5..d35f9b0 100644 --- a/refind/global.h +++ b/refind/global.h @@ -75,7 +75,8 @@ #define TAG_MEMTEST (15) #define TAG_GDISK (16) #define TAG_NETBOOT (17) -#define NUM_TOOLS (18) +#define TAG_CSR_ROTATE (18) +#define NUM_TOOLS (19) #define NUM_SCAN_OPTIONS 10 @@ -121,16 +122,18 @@ // Filesystem type identifiers. Not all are yet used.... #define FS_TYPE_UNKNOWN 0 -#define FS_TYPE_FAT 1 -#define FS_TYPE_EXFAT 2 -#define FS_TYPE_NTFS 3 -#define FS_TYPE_EXT2 4 -#define FS_TYPE_EXT3 5 -#define FS_TYPE_EXT4 6 -#define FS_TYPE_HFSPLUS 7 -#define FS_TYPE_REISERFS 8 -#define FS_TYPE_BTRFS 9 -#define FS_TYPE_ISO9660 10 +#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 @@ -146,7 +149,7 @@ #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" // 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" @@ -155,6 +158,13 @@ // 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) @@ -182,6 +192,11 @@ // global types +typedef struct _uint32_list { + UINT32 Value; + struct _uint32_list *Next; +} UINT32_LIST; + typedef struct { UINT8 Flags; UINT8 StartCHS1; @@ -203,6 +218,8 @@ typedef struct { CHAR16 *PartName; EFI_GUID VolUuid; EFI_GUID PartGuid; + EFI_GUID PartTypeGuid; + BOOLEAN IsMarkedReadOnly; UINTN VolNumber; EG_IMAGE *VolIconImage; EG_IMAGE *VolBadgeImage; @@ -268,38 +285,43 @@ typedef struct { } LEGACY_ENTRY; typedef struct { - BOOLEAN TextOnly; - BOOLEAN ScanAllLinux; - BOOLEAN DeepLegacyScan; - BOOLEAN EnableAndLockVMX; - 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; - 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; - 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; + 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 @@ -325,12 +347,17 @@ EFI_STATUS StartEFIImageList(IN EFI_DEVICE_PATH **DevicePaths, 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);