/* * 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/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 #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 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 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 */