mirror of
https://github.com/CloverHackyColor/CloverBootloader.git
synced 2024-12-25 16:37:42 +01:00
c5f8b7df7b
Signed-off-by: Sergey Isakov <isakov-sl@bk.ru>
902 lines
26 KiB
C
902 lines
26 KiB
C
/*
|
|
* refit/lib.h
|
|
* General header file
|
|
*
|
|
* Copyright (c) 2006-2009 Christoph Pfisterer
|
|
* All rights reserved.
|
|
*
|
|
* Redistribution and use in source and binary forms, with or without
|
|
* modification, are permitted provided that the following conditions are
|
|
* met:
|
|
*
|
|
* * Redistributions of source code must retain the above copyright
|
|
* notice, this list of conditions and the following disclaimer.
|
|
*
|
|
* * Redistributions in binary form must reproduce the above copyright
|
|
* notice, this list of conditions and the following disclaimer in the
|
|
* documentation and/or other materials provided with the
|
|
* distribution.
|
|
*
|
|
* * Neither the name of Christoph Pfisterer nor the names of the
|
|
* contributors may be used to endorse or promote products derived
|
|
* from this software without specific prior written permission.
|
|
*
|
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
|
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
|
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
|
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
|
* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
|
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
|
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
|
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
|
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
|
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
|
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
*/
|
|
|
|
#ifndef __REFITLIB_STANDARD_H__
|
|
#define __REFITLIB_STANDARD_H__
|
|
|
|
|
|
/*
|
|
- ADVLOG: Thu Aug 4 18:14:19 2016
|
|
|
|
Add log routine line separator.
|
|
|
|
- LODEPNG: Thu Aug 4 18:14:19 2016
|
|
|
|
Size matter, screenshot as PNG instead of BMP.
|
|
|
|
- ANDX86: Mon Aug 8 04:07:13 2016
|
|
|
|
Scan grubx64 (Remix, Phoenix, & Chrome OS). Tested with 64bit only & live USB. Build with "-D ANDX86".
|
|
http://www.jide.com/remixos
|
|
http://www.phoenixos.com
|
|
https://www.chromium.org/chromium-os
|
|
*/
|
|
|
|
#define ADVLOG 1
|
|
|
|
// Experimental <--
|
|
|
|
#include "libeg.h"
|
|
#ifdef __cplusplus
|
|
#include "../cpp_foundation/XObjArray.h"
|
|
#include "../cpp_foundation/XStringWArray.h"
|
|
#include "../cpp_foundation/XStringW.h"
|
|
#endif
|
|
|
|
#define REFIT_DEBUG (2)
|
|
#define Print if ((!GlobalConfig.Quiet) || (GlobalConfig.TextOnly)) Print
|
|
//#include "GenericBdsLib.h"
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
extern EFI_HANDLE gImageHandle;
|
|
extern EFI_SYSTEM_TABLE* gST;
|
|
extern EFI_BOOT_SERVICES* gBS;
|
|
extern EFI_RUNTIME_SERVICES* gRT;
|
|
|
|
#include <Protocol/SimpleFileSystem.h>
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|
|
|
|
//
|
|
// lib module
|
|
//
|
|
|
|
typedef struct {
|
|
EFI_STATUS LastStatus;
|
|
EFI_FILE *DirHandle;
|
|
BOOLEAN CloseDirHandle;
|
|
EFI_FILE_INFO *LastFileInfo;
|
|
} REFIT_DIR_ITER;
|
|
|
|
typedef struct {
|
|
UINT8 Flags;
|
|
UINT8 StartCHS[3];
|
|
UINT8 Type;
|
|
UINT8 EndCHS[3];
|
|
UINT32 StartLBA;
|
|
UINT32 Size;
|
|
} MBR_PARTITION_INFO;
|
|
|
|
#define DISK_KIND_INTERNAL (0)
|
|
#define DISK_KIND_EXTERNAL (1)
|
|
#define DISK_KIND_OPTICAL (2)
|
|
#define DISK_KIND_FIREWIRE (3)
|
|
#define DISK_KIND_NODISK (4)
|
|
#define DISK_KIND_BOOTER (5)
|
|
|
|
#define BOOTING_BY_BOOTLOADER (1)
|
|
#define BOOTING_BY_EFI (2)
|
|
#define BOOTING_BY_BOOTEFI (3)
|
|
#define BOOTING_BY_MBR (4)
|
|
#define BOOTING_BY_PBR (5)
|
|
#define BOOTING_BY_CD (6)
|
|
|
|
#define OSTYPE_OSX (1)
|
|
#define OSTYPE_WIN (2)
|
|
#define OSTYPE_VAR (3)
|
|
#define OSTYPE_LIN (4)
|
|
#define OSTYPE_LINEFI (5)
|
|
#define OSTYPE_EFI (6)
|
|
#define OSTYPE_WINEFI (7)
|
|
//#define OSTYPE_BOOT_OSX (9)
|
|
#define OSTYPE_RECOVERY (10)
|
|
#define OSTYPE_OSX_INSTALLER (11)
|
|
/*#define OSTYPE_TIGER (14)
|
|
#define OSTYPE_LEO (15)
|
|
#define OSTYPE_SNOW (16)
|
|
#define OSTYPE_LION (17)
|
|
#define OSTYPE_ML (18)
|
|
#define OSTYPE_MAV (19)*/
|
|
#define OSTYPE_OTHER (99)
|
|
//#define OSTYPE_HIDE (100)
|
|
|
|
#define OSTYPE_IS_OSX(type) ((type == OSTYPE_OSX) /*|| (type == OSTYPE_BOOT_OSX) || ((type >= OSTYPE_TIGER) && (type <= OSTYPE_MAV))*/ || (type == OSTYPE_VAR))
|
|
#define OSTYPE_IS_OSX_RECOVERY(type) ((type == OSTYPE_RECOVERY) /*|| ((type >= OSTYPE_TIGER) && (type <= OSTYPE_MAV))*/ || (type == OSTYPE_VAR))
|
|
#define OSTYPE_IS_OSX_INSTALLER(type) ((type == OSTYPE_OSX_INSTALLER) /*|| ((type >= OSTYPE_TIGER) && (type <= OSTYPE_MAV))*/ || (type == OSTYPE_VAR))
|
|
#define OSTYPE_IS_WINDOWS(type) ((type == OSTYPE_WIN) || (type == OSTYPE_WINEFI) || (type == OSTYPE_EFI) || (type == OSTYPE_VAR))
|
|
#define OSTYPE_IS_LINUX(type) ((type == OSTYPE_LIN) || (type == OSTYPE_EFI) || (type == OSTYPE_VAR))
|
|
#define OSTYPE_IS_OTHER(type) ((type == OSTYPE_OTHER) || (type == OSTYPE_EFI) || (type == OSTYPE_VAR))
|
|
#define OSTYPE_COMPARE_IMP(comparator, type1, type2) (comparator(type1) && comparator(type2))
|
|
#define OSTYPE_COMPARE(type1, type2) (OSTYPE_COMPARE_IMP(OSTYPE_IS_OSX, type1, type2) || OSTYPE_COMPARE_IMP(OSTYPE_IS_OSX_RECOVERY, type1, type2) || \
|
|
OSTYPE_COMPARE_IMP(OSTYPE_IS_OSX_INSTALLER, type1, type2) || OSTYPE_COMPARE_IMP(OSTYPE_IS_WINDOWS, type1, type2) || \
|
|
OSTYPE_COMPARE_IMP(OSTYPE_IS_LINUX, type1, type2) || OSTYPE_COMPARE_IMP(OSTYPE_IS_OTHER, type1, type2))
|
|
|
|
#define OSFLAG_ISSET(flags, flag) ((flags & flag) == flag)
|
|
#define OSFLAG_ISUNSET(flags, flag) ((flags & flag) != flag)
|
|
#define OSFLAG_SET(flags, flag) (flags | flag)
|
|
#define OSFLAG_UNSET(flags, flag) (flags & (~flag))
|
|
#define OSFLAG_TOGGLE(flags, flag) (flags ^ flag)
|
|
#define OSFLAG_USEGRAPHICS (1 << 0)
|
|
#define OSFLAG_WITHKEXTS (1 << 1)
|
|
#define OSFLAG_CHECKFAKESMC (1 << 2)
|
|
#define OSFLAG_NOCACHES (1 << 3)
|
|
#define OSFLAG_NODEFAULTARGS (1 << 4)
|
|
#define OSFLAG_NODEFAULTMENU (1 << 5)
|
|
#define OSFLAG_HIDDEN (1 << 6)
|
|
#define OSFLAG_DISABLED (1 << 7)
|
|
#define OSFLAG_HIBERNATED (1 << 8)
|
|
#define OSFLAG_NOSIP (1 << 9)
|
|
|
|
#define CUSTOM_BOOT_DISABLED 0
|
|
#define CUSTOM_BOOT_USER_DISABLED 1
|
|
#define CUSTOM_BOOT_NONE 2
|
|
#define CUSTOM_BOOT_APPLE 3
|
|
#define CUSTOM_BOOT_ALT_APPLE 4
|
|
#define CUSTOM_BOOT_THEME 5
|
|
#define CUSTOM_BOOT_USER 6
|
|
|
|
#define OPT_I386 (1 << 0)
|
|
#define OPT_X64 (1 << 1)
|
|
#define OPT_VERBOSE (1 << 2)
|
|
#define OPT_NOCACHES (1 << 3)
|
|
#define OPT_SINGLE_USER (1 << 4)
|
|
#define OPT_SAFE (1 << 5)
|
|
#define OPT_NVDISABLE (1 << 6)
|
|
#define OPT_SLIDE (1 << 7)
|
|
#define OPT_POWERNAPOFF (1 << 8)
|
|
#define OPT_XCPM (1 << 9)
|
|
#define OPT_GNOIDLE (1 << 10)
|
|
#define OPT_GNOSLEEP (1 << 11)
|
|
#define OPT_GNOMSI (1 << 12)
|
|
#define OPT_EHCUSB (1 << 13)
|
|
#define OPT_KEEPSYMS (1 << 14)
|
|
#define OPT_DEBUG (1 << 15)
|
|
#define OPT_KEXTLOG (1 << 16)
|
|
#define OPT_APPLEALC (1 << 17)
|
|
#define OPT_SHIKI (1 << 18)
|
|
#define INX_NVWEBON 19
|
|
#define OPT_NVWEBON (1 << INX_NVWEBON)
|
|
#define NUM_OPT 20
|
|
//extern CHAR16* ArgOptional[];
|
|
|
|
#define AsciiPageSize 0xC0
|
|
|
|
#define IS_EXTENDED_PART_TYPE(type) ((type) == 0x05 || (type) == 0x0f || (type) == 0x85)
|
|
|
|
typedef struct {
|
|
UINT8 Type;
|
|
CONST CHAR16 *IconName;
|
|
CONST CHAR16 *Name;
|
|
} LEGACY_OS;
|
|
|
|
typedef struct {
|
|
EFI_DEVICE_PATH *DevicePath;
|
|
EFI_HANDLE DeviceHandle;
|
|
EFI_FILE *RootDir;
|
|
CONST CHAR16 *DevicePathString;
|
|
CONST CHAR16 *VolName;
|
|
CONST CHAR16 *VolLabel;
|
|
UINT8 DiskKind;
|
|
LEGACY_OS *LegacyOS;
|
|
BOOLEAN Hidden;
|
|
UINT8 BootType;
|
|
BOOLEAN IsAppleLegacy;
|
|
BOOLEAN HasBootCode;
|
|
BOOLEAN IsMbrPartition;
|
|
UINTN MbrPartitionIndex;
|
|
EFI_BLOCK_IO *BlockIO;
|
|
UINT64 BlockIOOffset;
|
|
EFI_BLOCK_IO *WholeDiskBlockIO;
|
|
EFI_DEVICE_PATH *WholeDiskDevicePath;
|
|
EFI_HANDLE WholeDiskDeviceHandle;
|
|
MBR_PARTITION_INFO *MbrPartitionTable;
|
|
UINT32 DriveCRC32;
|
|
EFI_GUID RootUUID; //for recovery it is UUID of parent partition
|
|
UINT64 SleepImageOffset;
|
|
} REFIT_VOLUME;
|
|
|
|
typedef enum {
|
|
AlignNo,
|
|
AlignLeft,
|
|
AlignRight,
|
|
AlignCenter,
|
|
AlignUp,
|
|
AlignDown
|
|
|
|
} ALIGNMENT;
|
|
|
|
//mouse types
|
|
typedef enum {
|
|
NoEvents,
|
|
Move,
|
|
LeftClick,
|
|
RightClick,
|
|
DoubleClick,
|
|
ScrollClick,
|
|
ScrollDown,
|
|
ScrollUp,
|
|
LeftMouseDown,
|
|
RightMouseDown,
|
|
MouseMove
|
|
} MOUSE_EVENT;
|
|
|
|
typedef struct _pointers {
|
|
EFI_SIMPLE_POINTER_PROTOCOL *SimplePointerProtocol;
|
|
EG_IMAGE *Pointer;
|
|
EG_IMAGE *newImage;
|
|
EG_IMAGE *oldImage;
|
|
|
|
EG_RECT newPlace;
|
|
EG_RECT oldPlace;
|
|
|
|
UINT64 LastClickTime; //not EFI_TIME
|
|
EFI_SIMPLE_POINTER_STATE State;
|
|
MOUSE_EVENT MouseEvent;
|
|
} POINTERS;
|
|
|
|
//GUI types
|
|
typedef enum {
|
|
BoolValue,
|
|
Decimal,
|
|
Hex,
|
|
ASString,
|
|
UNIString,
|
|
RadioSwitch,
|
|
CheckBit,
|
|
|
|
} ITEM_TYPE;
|
|
|
|
typedef struct {
|
|
ITEM_TYPE ItemType; //string, value, boolean
|
|
BOOLEAN Valid;
|
|
BOOLEAN BValue;
|
|
UINT8 Pad8;
|
|
UINT32 IValue;
|
|
// UINT64 UValue;
|
|
// CHAR8* AValue;
|
|
CHAR16* SValue; // Max Size (see below) so the field can be edit by the GUI
|
|
UINTN LineShift;
|
|
} INPUT_ITEM;
|
|
|
|
// Allow for 255 unicode characters + 2 byte unicode null terminator.
|
|
#define SVALUE_MAX_SIZE 512
|
|
|
|
typedef enum {
|
|
ActionNone = 0,
|
|
ActionHelp,
|
|
ActionSelect,
|
|
ActionEnter,
|
|
ActionDeselect,
|
|
ActionDestroy,
|
|
ActionOptions,
|
|
ActionDetails,
|
|
ActionFinish,
|
|
ActionScrollDown,
|
|
ActionScrollUp,
|
|
ActionMoveScrollbar,
|
|
ActionPageDown,
|
|
ActionPageUp,
|
|
ActionLight
|
|
} ACTION;
|
|
|
|
typedef struct {
|
|
INTN CurrentSelection, LastSelection;
|
|
INTN MaxScroll, MaxIndex;
|
|
INTN FirstVisible, LastVisible, MaxVisible, MaxFirstVisible;
|
|
BOOLEAN IsScrolling, PaintAll, PaintSelection;
|
|
} SCROLL_STATE;
|
|
|
|
extern BOOLEAN ScrollEnabled;
|
|
extern EG_RECT UpButton;
|
|
extern EG_RECT DownButton;
|
|
extern EG_RECT ScrollbarBackground;
|
|
extern EG_RECT Scrollbar;
|
|
extern BOOLEAN IsDragging;
|
|
extern EG_RECT ScrollbarOldPointerPlace;
|
|
extern EG_RECT ScrollbarNewPointerPlace;
|
|
extern INTN ScrollbarYMovement;
|
|
|
|
#define SCREEN_UNKNOWN 0
|
|
#define SCREEN_MAIN 1
|
|
#define SCREEN_ABOUT 2
|
|
#define SCREEN_HELP 3
|
|
#define SCREEN_OPTIONS 4
|
|
#define SCREEN_GRAPHICS 5
|
|
#define SCREEN_CPU 6
|
|
#define SCREEN_BINARIES 7
|
|
#define SCREEN_DSDT 8
|
|
#define SCREEN_BOOT 9
|
|
#define SCREEN_SMBIOS 10
|
|
#define SCREEN_TABLES 11
|
|
#define SCREEN_RC_SCRIPTS 12
|
|
#define SCREEN_USB 13
|
|
#define SCREEN_THEME 14
|
|
#define SCREEN_SYSVARS 15
|
|
#define SCREEN_CSR 16
|
|
#define SCREEN_BLC 17
|
|
#define SCREEN_DSM 18
|
|
#define SCREEN_ACPI 19
|
|
#define SCREEN_GUI 20
|
|
#define SCREEN_SYSTEM 21
|
|
#define SCREEN_AUDIO 22
|
|
#define SCREEN_KEXTS 23
|
|
#define SCREEN_KERNELS 24
|
|
#define SCREEN_DSDT_PATCHES 25
|
|
#define SCREEN_DEVICES 26
|
|
#define SCREEN_BOOTER 27
|
|
#define SCREEN_KEXT_INJECT 28
|
|
#define SCREEN_KEXTS_MAN 29
|
|
#define SCREEN_AUDIOPORTS 30
|
|
|
|
#define MAX_ANIME 41
|
|
|
|
|
|
|
|
//some unreal values
|
|
#define FILM_CENTRE 40000
|
|
//#define FILM_LEFT 50000
|
|
//#define FILM_TOP 50000
|
|
//#define FILM_RIGHT 60000
|
|
//#define FILM_BOTTOM 60000
|
|
//#define FILM_PERCENT 100000
|
|
#define INITVALUE 40000
|
|
|
|
#define VOLTYPE_OPTICAL (0x0001)
|
|
#define VOLTYPE_EXTERNAL (0x0002)
|
|
#define VOLTYPE_INTERNAL (0x0004)
|
|
#define VOLTYPE_FIREWIRE (0x0008)
|
|
|
|
#define HIDEUI_FLAG_SHELL (0x0010)
|
|
#define HIDEUI_FLAG_TOOLS (0x0020)
|
|
#define HIDEUI_FLAG_SINGLEUSER (0x0040)
|
|
#define HIDEUI_FLAG_HWTEST (0x0080)
|
|
#define HIDEUI_FLAG_BANNER (0x0100)
|
|
#define HIDEUI_FLAG_FUNCS (0x0200)
|
|
#define HIDEUI_FLAG_LABEL (0x0400)
|
|
#define HIDEUI_FLAG_REVISION (0x0800)
|
|
#define HIDEUI_FLAG_MENU_TITLE (0x1000)
|
|
#define HIDEUI_FLAG_MENU_TITLE_IMAGE (0x2000)
|
|
#define HIDEUI_FLAG_HELP (0x4000)
|
|
#define HIDEUI_FLAG_ROW1 (0x8000)
|
|
#define HIDEUI_ALL (0xffff & (~VOLTYPE_INTERNAL))
|
|
|
|
#define HDBADGES_SWAP (1<<0)
|
|
#define HDBADGES_SHOW (1<<1)
|
|
#define HDBADGES_INLINE (1<<2)
|
|
|
|
typedef enum {
|
|
imNone,
|
|
imScale,
|
|
imCrop,
|
|
imTile
|
|
|
|
} SCALING;
|
|
|
|
typedef struct {
|
|
INTN Timeout;
|
|
UINTN DisableFlags;
|
|
UINTN HideBadges;
|
|
UINTN HideUIFlags;
|
|
BOOLEAN TextOnly;
|
|
BOOLEAN Quiet;
|
|
BOOLEAN LegacyFirst;
|
|
BOOLEAN NoLegacy;
|
|
BOOLEAN DebugLog;
|
|
BOOLEAN FastBoot;
|
|
BOOLEAN NeverHibernate;
|
|
BOOLEAN StrictHibernate;
|
|
BOOLEAN RtcHibernateAware;
|
|
FONT_TYPE Font;
|
|
INTN CharWidth;
|
|
UINTN SelectionColor;
|
|
CHAR16 *FontFileName;
|
|
CHAR16 *Theme;
|
|
CHAR16 *BannerFileName;
|
|
CHAR16 *SelectionSmallFileName;
|
|
CHAR16 *SelectionBigFileName;
|
|
CHAR16 *SelectionIndicatorName;
|
|
CHAR16 *DefaultSelection;
|
|
CHAR16 *ScreenResolution;
|
|
INTN ConsoleMode;
|
|
CHAR16 *BackgroundName;
|
|
SCALING BackgroundScale;
|
|
UINTN BackgroundSharp;
|
|
BOOLEAN BackgroundDark;
|
|
BOOLEAN CustomIcons;
|
|
BOOLEAN SelectionOnTop;
|
|
BOOLEAN BootCampStyle;
|
|
INTN BadgeOffsetX;
|
|
INTN BadgeOffsetY;
|
|
INTN BadgeScale;
|
|
INTN ThemeDesignWidth;
|
|
INTN ThemeDesignHeight;
|
|
INTN BannerPosX;
|
|
INTN BannerPosY;
|
|
INTN BannerEdgeHorizontal;
|
|
INTN BannerEdgeVertical;
|
|
INTN BannerNudgeX;
|
|
INTN BannerNudgeY;
|
|
BOOLEAN VerticalLayout;
|
|
BOOLEAN NonSelectedGrey;
|
|
INTN MainEntriesSize;
|
|
INTN TileXSpace;
|
|
INTN TileYSpace;
|
|
INTN IconFormat;
|
|
BOOLEAN Proportional;
|
|
BOOLEAN NoEarlyProgress;
|
|
BOOLEAN ShowOptimus;
|
|
BOOLEAN HibernationFixup;
|
|
BOOLEAN SignatureFixup;
|
|
BOOLEAN DarkEmbedded;
|
|
BOOLEAN TypeSVG;
|
|
INT32 Timezone;
|
|
INTN Codepage;
|
|
INTN CodepageSize;
|
|
float Scale;
|
|
float CentreShift;
|
|
} REFIT_CONFIG;
|
|
|
|
// types
|
|
typedef struct KEXT_PATCH KEXT_PATCH;
|
|
struct KEXT_PATCH
|
|
{
|
|
CHAR8 *Name;
|
|
CHAR8 *Label;
|
|
BOOLEAN IsPlistPatch;
|
|
CHAR8 align[7];
|
|
INT64 DataLen;
|
|
UINT8 *Data;
|
|
UINT8 *Patch;
|
|
UINT8 *MaskFind;
|
|
UINT8 *MaskReplace;
|
|
CHAR8 *MatchOS;
|
|
CHAR8 *MatchBuild;
|
|
INPUT_ITEM MenuItem;
|
|
};
|
|
|
|
typedef struct {
|
|
CHAR8 *Label;
|
|
INTN DataLen;
|
|
UINT8 *Data;
|
|
UINT8 *Patch;
|
|
UINT8 *MaskFind;
|
|
UINT8 *MaskReplace;
|
|
INTN Count;
|
|
CHAR8 *MatchOS;
|
|
CHAR8 *MatchBuild;
|
|
INPUT_ITEM MenuItem;
|
|
} KERNEL_PATCH;
|
|
|
|
typedef struct KERNEL_AND_KEXT_PATCHES
|
|
{
|
|
BOOLEAN KPDebug;
|
|
BOOLEAN KPKernelCpu;
|
|
BOOLEAN KPKernelLapic;
|
|
BOOLEAN KPKernelXCPM;
|
|
BOOLEAN KPKernelPm;
|
|
BOOLEAN KPAppleIntelCPUPM;
|
|
BOOLEAN KPAppleRTC;
|
|
BOOLEAN KPDELLSMBIOS; // Dell SMBIOS patch
|
|
BOOLEAN KPPanicNoKextDump;
|
|
UINT8 pad[3];
|
|
UINT32 FakeCPUID;
|
|
// UINT32 align0;
|
|
CHAR16 *KPATIConnectorsController;
|
|
#if defined(MDE_CPU_IA32)
|
|
UINT32 align1;
|
|
#endif
|
|
|
|
UINT8 *KPATIConnectorsData;
|
|
#if defined(MDE_CPU_IA32)
|
|
UINT32 align2;
|
|
#endif
|
|
|
|
UINTN KPATIConnectorsDataLen;
|
|
#if defined(MDE_CPU_IA32)
|
|
UINT32 align3;
|
|
#endif
|
|
UINT8 *KPATIConnectorsPatch;
|
|
#if defined(MDE_CPU_IA32)
|
|
UINT32 align4;
|
|
#endif
|
|
|
|
INT32 NrKexts;
|
|
UINT32 align40;
|
|
KEXT_PATCH *KextPatches; //zzzz
|
|
#if defined(MDE_CPU_IA32)
|
|
UINT32 align5;
|
|
#endif
|
|
|
|
INT32 NrForceKexts;
|
|
UINT32 align50;
|
|
CHAR16 **ForceKexts;
|
|
#if defined(MDE_CPU_IA32)
|
|
UINT32 align6;
|
|
#endif
|
|
INT32 NrKernels;
|
|
KERNEL_PATCH *KernelPatches;
|
|
INT32 NrBoots;
|
|
KERNEL_PATCH *BootPatches;
|
|
|
|
} KERNEL_AND_KEXT_PATCHES;
|
|
|
|
#define ANIME_INFINITE ((UINTN)-1)
|
|
//some unreal values
|
|
#define SCREEN_EDGE_LEFT 50000
|
|
#define SCREEN_EDGE_TOP 60000
|
|
#define SCREEN_EDGE_RIGHT 70000
|
|
#define SCREEN_EDGE_BOTTOM 80000
|
|
|
|
typedef struct GUI_ANIME GUI_ANIME;
|
|
struct GUI_ANIME {
|
|
UINTN ID;
|
|
CHAR16 *Path;
|
|
UINTN Frames;
|
|
UINTN FrameTime;
|
|
INTN FilmX, FilmY; //relative
|
|
INTN ScreenEdgeHorizontal;
|
|
INTN ScreenEdgeVertical;
|
|
INTN NudgeX, NudgeY;
|
|
BOOLEAN Once;
|
|
GUI_ANIME *Next;
|
|
};
|
|
|
|
extern EFI_HANDLE SelfImageHandle;
|
|
extern EFI_HANDLE SelfDeviceHandle;
|
|
extern EFI_LOADED_IMAGE *SelfLoadedImage;
|
|
extern EFI_FILE *SelfRootDir;
|
|
extern EFI_FILE *SelfDir;
|
|
extern CHAR16 *SelfDirPath;
|
|
extern EFI_DEVICE_PATH *SelfDevicePath;
|
|
extern EFI_DEVICE_PATH *SelfFullDevicePath;
|
|
extern EFI_FILE *ThemeDir;
|
|
extern CHAR16 *ThemePath;
|
|
extern EFI_FILE *OEMDir;
|
|
extern CHAR16 *OEMPath;
|
|
extern EFI_FILE *OemThemeDir;
|
|
|
|
extern BOOLEAN MainAnime;
|
|
extern GUI_ANIME *GuiAnime;
|
|
|
|
extern REFIT_VOLUME *SelfVolume;
|
|
#ifdef __cplusplus
|
|
extern XObjArray<REFIT_VOLUME> Volumes;
|
|
#endif
|
|
//extern UINTN VolumesCount;
|
|
|
|
extern EG_IMAGE *Banner;
|
|
extern EG_IMAGE *BigBack;
|
|
extern EG_IMAGE *FontImage;
|
|
extern EG_IMAGE *SelectionImages[];
|
|
extern EG_IMAGE *Buttons[];
|
|
extern BOOLEAN gThemeChanged;
|
|
//extern BOOLEAN gBootArgsChanged;
|
|
extern BOOLEAN gBootChanged;
|
|
extern BOOLEAN gThemeOptionsChanged;
|
|
//extern POINTERS gPointer;
|
|
//extern EFI_GUID gEfiAppleBootGuid;
|
|
|
|
|
|
EFI_STATUS InitRefitLib(IN EFI_HANDLE ImageHandle);
|
|
EFI_STATUS GetRootFromPath(IN EFI_DEVICE_PATH_PROTOCOL* DevicePath, OUT EFI_FILE **Root);
|
|
VOID UninitRefitLib(VOID);
|
|
EFI_STATUS ReinitRefitLib(VOID);
|
|
EFI_STATUS ReinitSelfLib(VOID);
|
|
//extern EFI_STATUS FinishInitRefitLib(VOID); -- static
|
|
VOID PauseForKey(IN CONST CHAR16 *Msg);
|
|
BOOLEAN IsEmbeddedTheme(VOID);
|
|
UINT8 GetOSTypeFromPath (IN CONST CHAR16 *Path);
|
|
|
|
//VOID CreateList(OUT VOID ***ListPtr, OUT UINTN *ElementCount, IN UINTN InitialElementCount);
|
|
//VOID AddListElement(IN OUT VOID ***ListPtr, IN OUT UINTN *ElementCount, IN VOID *NewElement);
|
|
//VOID FreeList(IN OUT VOID ***ListPtr, IN OUT UINTN *ElementCount /*, IN Callback*/);
|
|
|
|
VOID GetListOfThemes(VOID);
|
|
VOID GetListOfConfigs(VOID);
|
|
VOID GetListOfACPI(VOID);
|
|
VOID GetListOfDsdts(VOID);
|
|
|
|
// syscl - get list of inject kext(s)
|
|
VOID GetListOfInjectKext(CHAR16 *);
|
|
|
|
EFI_STATUS ExtractLegacyLoaderPaths(EFI_DEVICE_PATH **PathList, UINTN MaxPaths, EFI_DEVICE_PATH **HardcodedPathList);
|
|
|
|
VOID ScanVolumes(VOID);
|
|
|
|
REFIT_VOLUME *FindVolumeByName(IN CHAR16 *VolName);
|
|
|
|
BOOLEAN FileExists(IN CONST EFI_FILE *BaseDir, IN CONST CHAR16 *RelativePath);
|
|
|
|
BOOLEAN DeleteFile(IN EFI_FILE *Root, IN CONST CHAR16 *RelativePath);
|
|
|
|
EFI_STATUS DirNextEntry(IN EFI_FILE *Directory, IN OUT EFI_FILE_INFO **DirEntry, IN UINTN FilterMode);
|
|
|
|
VOID DirIterOpen(IN EFI_FILE *BaseDir, IN CONST CHAR16 *RelativePath OPTIONAL, OUT REFIT_DIR_ITER *DirIter);
|
|
BOOLEAN DirIterNext(IN OUT REFIT_DIR_ITER *DirIter, IN UINTN FilterMode, IN CONST CHAR16 *FilePattern OPTIONAL, OUT EFI_FILE_INFO **DirEntry);
|
|
EFI_STATUS DirIterClose(IN OUT REFIT_DIR_ITER *DirIter);
|
|
|
|
CONST CHAR16 * Basename(IN CONST CHAR16 *Path);
|
|
VOID ReplaceExtension(IN OUT CHAR16 *Path, IN CHAR16 *Extension);
|
|
CHAR16 * egFindExtension(IN CHAR16 *FileName);
|
|
|
|
INTN FindMem(IN CONST VOID *Buffer, IN UINTN BufferLength, IN CONST VOID *SearchString, IN UINTN SearchStringLength);
|
|
|
|
CHAR16 *FileDevicePathToStr(IN EFI_DEVICE_PATH_PROTOCOL *DevPath);
|
|
CHAR16 *FileDevicePathFileToStr(IN EFI_DEVICE_PATH_PROTOCOL *DevPath);
|
|
//UINTN FileDevicePathNameLen(IN CONST FILEPATH_DEVICE_PATH *FilePath);
|
|
|
|
EFI_STATUS InitializeUnicodeCollationProtocol (VOID);
|
|
|
|
//
|
|
// screen module
|
|
//
|
|
|
|
#define ATTR_BASIC (EFI_LIGHTGRAY | EFI_BACKGROUND_BLACK)
|
|
#define ATTR_ERROR (EFI_RED | EFI_BACKGROUND_BLACK)
|
|
#define ATTR_BANNER (EFI_WHITE | EFI_BACKGROUND_BLACK)
|
|
#define ATTR_CHOICE_BASIC ATTR_BASIC
|
|
#define ATTR_CHOICE_CURRENT (EFI_WHITE | EFI_BACKGROUND_LIGHTGRAY)
|
|
#define ATTR_SCROLLARROW (EFI_LIGHTGREEN | EFI_BACKGROUND_BLACK)
|
|
|
|
#define LAYOUT_TEXT_WIDTH (500)
|
|
#define LAYOUT_TOTAL_HEIGHT (376)
|
|
#define LAYOUT_BANNER_HEIGHT (32)
|
|
#define LAYOUT_BANNER_YOFFSET (LAYOUT_BANNER_HEIGHT + 32)
|
|
#define LAYOUT_Y_EDGE (20)
|
|
#define LAYOUT_X_EDGE (20)
|
|
#define BAR_WIDTH (16)
|
|
|
|
extern INTN FontWidth;
|
|
extern INTN FontHeight;
|
|
extern INTN TextHeight;
|
|
extern INTN row0TileSize;
|
|
extern INTN row1TileSize;
|
|
extern INTN BCSMargin;
|
|
|
|
extern INTN LayoutBannerOffset;
|
|
extern INTN LayoutButtonOffset;
|
|
extern INTN LayoutTextOffset;
|
|
extern INTN LayoutAnimMoveForMenuX;
|
|
extern INTN LayoutMainMenuHeight;
|
|
|
|
extern UINTN ConWidth;
|
|
extern UINTN ConHeight;
|
|
extern CHAR16 *BlankLine;
|
|
|
|
extern INTN UGAWidth;
|
|
extern INTN UGAHeight;
|
|
extern BOOLEAN AllowGraphicsMode;
|
|
|
|
extern EG_PIXEL StdBackgroundPixel;
|
|
extern EG_PIXEL MenuBackgroundPixel;
|
|
extern EG_PIXEL InputBackgroundPixel;
|
|
extern EG_PIXEL BlueBackgroundPixel;
|
|
extern EG_PIXEL DarkBackgroundPixel;
|
|
extern EG_PIXEL SelectionBackgroundPixel;
|
|
extern EG_PIXEL DarkEmbeddedBackgroundPixel;
|
|
extern EG_PIXEL DarkSelectionPixel;
|
|
extern EG_PIXEL WhitePixel;
|
|
extern EG_PIXEL BlackPixel;
|
|
|
|
extern EG_RECT BannerPlace;
|
|
extern EG_IMAGE *BackgroundImage;
|
|
|
|
|
|
#if REFIT_DEBUG > 0
|
|
VOID DebugPause(VOID);
|
|
#else
|
|
#define DebugPause()
|
|
#endif
|
|
VOID EndlessIdleLoop(VOID);
|
|
|
|
BOOLEAN CheckFatalError(IN EFI_STATUS Status, IN CONST CHAR16 *where);
|
|
BOOLEAN CheckError(IN EFI_STATUS Status, IN CONST CHAR16 *where);
|
|
|
|
//
|
|
// icns loader module
|
|
//
|
|
|
|
EG_IMAGE * LoadOSIcon(IN CONST CHAR16 *OSIconName OPTIONAL, IN CONST CHAR16 *FallbackIconName, IN UINTN PixelSize, IN BOOLEAN BootLogo, IN BOOLEAN WantDummy);
|
|
EG_IMAGE * LoadIcns(IN EFI_FILE_HANDLE BaseDir, IN CONST CHAR16 *FileName, IN UINTN PixelSize);
|
|
EG_IMAGE * LoadIcnsFallback(IN EFI_FILE_HANDLE BaseDir, IN CONST CHAR16 *FileName, IN UINTN PixelSize);
|
|
EG_IMAGE * DummyImage(IN UINTN PixelSize);
|
|
EG_IMAGE * BuiltinIcon(IN UINTN Id);
|
|
CHAR16 * GetIconsExt(IN CONST CHAR16 *Icon, IN CONST CHAR16 *Def);
|
|
EG_IMAGE * GetSmallHover(IN UINTN Id);
|
|
|
|
#define BUILTIN_ICON_FUNC_ABOUT (0)
|
|
#define BUILTIN_ICON_FUNC_OPTIONS (1)
|
|
#define BUILTIN_ICON_FUNC_CLOVER (2)
|
|
#define BUILTIN_ICON_FUNC_SECURE_BOOT (3)
|
|
#define BUILTIN_ICON_FUNC_SECURE_BOOT_CONFIG (4)
|
|
#define BUILTIN_ICON_FUNC_RESET (5)
|
|
#define BUILTIN_ICON_FUNC_EXIT (6)
|
|
#define BUILTIN_ICON_FUNC_HELP (7)
|
|
#define BUILTIN_ICON_TOOL_SHELL (8)
|
|
#define BUILTIN_ICON_TOOL_PART (9)
|
|
#define BUILTIN_ICON_TOOL_RESCUE (10)
|
|
#define BUILTIN_ICON_POINTER (11)
|
|
#define BUILTIN_ICON_VOL_INTERNAL (12)
|
|
#define BUILTIN_ICON_VOL_EXTERNAL (13)
|
|
#define BUILTIN_ICON_VOL_OPTICAL (14)
|
|
#define BUILTIN_ICON_VOL_FIREWIRE (15)
|
|
#define BUILTIN_ICON_VOL_BOOTER (16)
|
|
#define BUILTIN_ICON_VOL_INTERNAL_HFS (17)
|
|
#define BUILTIN_ICON_VOL_INTERNAL_APFS (18)
|
|
#define BUILTIN_ICON_VOL_INTERNAL_NTFS (19)
|
|
#define BUILTIN_ICON_VOL_INTERNAL_EXT3 (20)
|
|
#define BUILTIN_ICON_VOL_INTERNAL_REC (21)
|
|
#define BUILTIN_ICON_BANNER (22)
|
|
#define BUILTIN_SELECTION_SMALL (23)
|
|
#define BUILTIN_SELECTION_BIG (24)
|
|
#define BUILTIN_ICON_COUNT (25)
|
|
#define BUILTIN_ICON_BACKGROUND (100)
|
|
#define BUILTIN_ICON_SELECTION (101)
|
|
#define BUILTIN_ICON_ANIME (102)
|
|
//
|
|
// menu module
|
|
//
|
|
|
|
#define MENU_EXIT_ENTER ((ACTION)(1))
|
|
#define MENU_EXIT_ESCAPE (2)
|
|
#define MENU_EXIT_DETAILS (3)
|
|
#define MENU_EXIT_TIMEOUT (4)
|
|
#define MENU_EXIT_OPTIONS (5)
|
|
#define MENU_EXIT_EJECT (6)
|
|
#define MENU_EXIT_HELP (7)
|
|
#define MENU_EXIT_HIDE_TOGGLE (8)
|
|
|
|
#define X_IS_LEFT 64
|
|
#define X_IS_RIGHT 0
|
|
#define X_IS_CENTER 1
|
|
#define BADGE_DIMENSION 64
|
|
|
|
// IconFormat
|
|
#define ICON_FORMAT_DEF (0)
|
|
#define ICON_FORMAT_ICNS (1)
|
|
#define ICON_FORMAT_PNG (2)
|
|
#define ICON_FORMAT_BMP (3)
|
|
VOID ReinitVolumes(VOID);
|
|
BOOLEAN ReadAllKeyStrokes(VOID);
|
|
//
|
|
// config module
|
|
//
|
|
|
|
typedef struct MISC_ICONS {
|
|
EG_IMAGE *image;
|
|
CONST CHAR8 *name;
|
|
} MISC_ICONS;
|
|
|
|
extern MISC_ICONS OSIconsTable[];
|
|
extern BUILTIN_ICON BuiltinIconTable[];
|
|
extern REFIT_CONFIG GlobalConfig;
|
|
|
|
VOID ReadConfig(INTN What);
|
|
//
|
|
// BmLib
|
|
//
|
|
extern EFI_STATUS
|
|
EfiLibLocateProtocol (
|
|
IN EFI_GUID *ProtocolGuid,
|
|
OUT VOID **Interface
|
|
);
|
|
|
|
|
|
extern EFI_FILE_HANDLE
|
|
EfiLibOpenRoot (
|
|
IN EFI_HANDLE DeviceHandle
|
|
);
|
|
|
|
extern EFI_FILE_SYSTEM_VOLUME_LABEL *
|
|
EfiLibFileSystemVolumeLabelInfo (
|
|
IN EFI_FILE_HANDLE FHand
|
|
);
|
|
extern CHAR16 *
|
|
EfiStrDuplicate (
|
|
IN CONST CHAR16 *Src
|
|
);
|
|
|
|
extern INTN StriCmp (
|
|
IN CONST CHAR16 *FirstString,
|
|
IN CONST CHAR16 *SecondString
|
|
);
|
|
|
|
extern INTN EFIAPI AsciiStriCmp (
|
|
IN CONST CHAR8 *FirstString,
|
|
IN CONST CHAR8 *SecondString
|
|
);
|
|
|
|
extern BOOLEAN AsciiStriNCmp (
|
|
IN CONST CHAR8 *FirstString,
|
|
IN CONST CHAR8 *SecondString,
|
|
IN CONST UINTN sSize
|
|
);
|
|
|
|
extern BOOLEAN AsciiStrStriN (
|
|
IN CONST CHAR8 *WhatString,
|
|
IN CONST UINTN sWhatSize,
|
|
IN CONST CHAR8 *WhereString,
|
|
IN CONST UINTN sWhereSize
|
|
);
|
|
|
|
extern EFI_FILE_INFO * EfiLibFileInfo (IN EFI_FILE_HANDLE FHand);
|
|
extern EFI_FILE_SYSTEM_INFO * EfiLibFileSystemInfo (IN EFI_FILE_HANDLE Root);
|
|
|
|
extern UINTN
|
|
EfiDevicePathInstanceCount (
|
|
IN EFI_DEVICE_PATH_PROTOCOL *DevicePath
|
|
);
|
|
|
|
extern VOID *
|
|
EfiReallocatePool (
|
|
IN VOID *OldPool,
|
|
IN UINTN OldSize,
|
|
IN UINTN NewSize
|
|
);
|
|
|
|
extern BOOLEAN
|
|
TimeCompare (
|
|
IN EFI_TIME *FirstTime,
|
|
IN EFI_TIME *SecondTime
|
|
);
|
|
|
|
extern BOOLEAN DumpVariable(CHAR16* Name, EFI_GUID* Guid, INTN DevicePathAt);
|
|
#ifdef DUMP_KERNEL_KEXT_PATCHES
|
|
// Utils functions
|
|
VOID DumpKernelAndKextPatches(KERNEL_AND_KEXT_PATCHES *Patches);
|
|
#endif
|
|
//VOID FilterKextPatches(IN LOADER_ENTRY *Entry);
|
|
|
|
|
|
UINT32 EncodeOptions(CONST CHAR16 *Options);
|
|
|
|
CHAR8* GetUnicodeChar(CHAR8 *s, CHAR16* UnicodeChar);
|
|
|
|
#define KERNEL_MAX_SIZE 40000000
|
|
|
|
|
|
VOID DbgHeader(CONST CHAR8 *str);
|
|
|
|
#endif
|
|
/*
|
|
|
|
EOF */
|