CloverBootloader/CloverApp/Clover/Clover-Bridging-Header.h
2020-08-31 23:41:39 +02:00

660 lines
19 KiB
Objective-C

//
// Use this file to import your target's public headers that you would like to expose to Swift.
//
#ifndef CLOVERAPPLICATION
#define CLOVERAPPLICATION 1
#endif
/*
#ifdef DEBUG
#define DEBUG_BACKUP DEBUG // backup original
#undef DEBUG
#endif
#include "../../rEFIt_UEFI/Platform/Platform.h"
#ifdef DEBUG_BACKUP
#undef DEBUG
#define DEBUG DEBUG_BACKUP // restore original
#endif
*/
#import "NSWindowFix.h"
#import "ThemeImage.h"
#import "gfxutil.h"
#import "efidevp.h"
/*
NOTE for developers:
Unless edk2 headers are imported (as a UEFI application), below definitions runs in a clean enviroment
and are totally disconnected from Clover. They are just duplicates to deserialize the SETTINGS_DATA structure
(and until compatible).
This was done to mantains compatibility across revisions. The tuple is in fact accessed by
strings (using the Swift Mirror class) so that the app can access variables if the element really exist
inside the SETTINGS_DATA structure, and w/o crash if an element get removed, like can happen in newer commits.
This header is used to expose c (or objective-c) code to Swift and doesn't affect Clover bootloader in no way.
c++ code can also be imported, but only inside an obj-c Class.
*/
#define VOID void
#define CONST const
typedef signed char INT8;
typedef unsigned char UINT8;
typedef UINT8 BOOLEAN;
typedef char CHAR8;
typedef unsigned short CHAR16;
typedef short INT16;
typedef unsigned short UINT16;
typedef int INT32;
typedef unsigned int UINT32;
typedef long long INT64;
typedef INT64 INTN;
typedef unsigned long long UINT64;
typedef UINT64 UINTN;
typedef float FLOAT;
typedef double DOUBLE;
typedef struct {
UINT8 Type; ///< 0x01 Hardware Device Path.
///< 0x02 ACPI Device Path.
///< 0x03 Messaging Device Path.
///< 0x04 Media Device Path.
///< 0x05 BIOS Boot Specification Device Path.
///< 0x7F End of Hardware Device Path.
UINT8 SubType; ///< Varies by Type
///< 0xFF End Entire Device Path, or
///< 0x01 End This Instance of a Device Path and start a new
///< Device Path.
UINT8 Length[2]; ///< Specific Device Path data. Type and Sub-Type define
///< type of data. Size of data is included in Length.
} EFI_DEVICE_PATH_PROTOCOL;
typedef struct {
UINT32 Data1;
UINT16 Data2;
UINT16 Data3;
UINT8 Data4[8];
} EFI_GUID;
typedef struct {
UINT8 b, g, r, a;
} EG_PIXEL;
typedef struct {
INTN Width;
INTN Height;
EG_PIXEL *PixelData;
BOOLEAN HasAlpha; //moved here to avoid alignment issue
} EG_IMAGE;
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;
typedef enum {
kTagTypeNone,
kTagTypeDict,
kTagTypeKey,
kTagTypeString,
kTagTypeInteger,
kTagTypeData,
kTagTypeDate,
kTagTypeFalse,
kTagTypeTrue,
kTagTypeArray
} TAG_TYPE;
typedef struct DEV_PROPERTY DEV_PROPERTY; //yyyy
struct DEV_PROPERTY {
UINT32 Device;
EFI_DEVICE_PATH_PROTOCOL* DevicePath;
CHAR8 *Key;
UINT8 *Value;
UINTN ValueLen;
DEV_PROPERTY *Next; //next device or next property
DEV_PROPERTY *Child; // property list of the device
CHAR8 *Label;
INPUT_ITEM MenuItem;
TAG_TYPE ValueType;
};
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;
typedef struct ACPI_NAME_LIST ACPI_NAME_LIST;
struct ACPI_NAME_LIST {
ACPI_NAME_LIST *Next;
CHAR8 *Name;
};
typedef struct ACPI_DROP_TABLE ACPI_DROP_TABLE;
struct ACPI_DROP_TABLE
{
ACPI_DROP_TABLE *Next;
UINT32 Signature;
UINT32 Length;
UINT64 TableId;
INPUT_ITEM MenuItem;
};
typedef struct RT_VARIABLES RT_VARIABLES;
struct RT_VARIABLES {
// BOOLEAN Disabled;
CHAR16 *Name;
EFI_GUID VarGuid;
};
typedef struct CUSTOM_LOADER_ENTRY CUSTOM_LOADER_ENTRY;
struct CUSTOM_LOADER_ENTRY {
CUSTOM_LOADER_ENTRY *Next;
CUSTOM_LOADER_ENTRY *SubEntries;
EG_IMAGE *Image;
EG_IMAGE *DriveImage;
CONST CHAR16 *ImagePath;
CONST CHAR16 *DriveImagePath;
CONST CHAR16 *Volume;
CONST CHAR16 *Path;
CONST CHAR16 *Options;
CONST CHAR16 *FullTitle;
CONST CHAR16 *Title;
CONST CHAR16 *Settings;
CHAR16 Hotkey;
BOOLEAN CommonSettings;
UINT8 Flags;
UINT8 Type;
UINT8 VolumeType;
UINT8 KernelScan;
UINT8 CustomBoot;
EG_IMAGE *CustomLogo;
EG_PIXEL *BootBgColor;
KERNEL_AND_KEXT_PATCHES KernelAndKextPatches; //zzzz
};
typedef struct CUSTOM_LEGACY_ENTRY CUSTOM_LEGACY_ENTRY;
struct CUSTOM_LEGACY_ENTRY {
CUSTOM_LEGACY_ENTRY *Next;
EG_IMAGE *Image;
EG_IMAGE *DriveImage;
CONST CHAR16 *ImagePath;
CONST CHAR16 *DriveImagePath;
CONST CHAR16 *Volume;
CONST CHAR16 *FullTitle;
CONST CHAR16 *Title;
CHAR16 Hotkey;
UINT8 Flags;
UINT8 Type;
UINT8 VolumeType;
};
typedef struct CUSTOM_TOOL_ENTRY CUSTOM_TOOL_ENTRY;
struct CUSTOM_TOOL_ENTRY {
CUSTOM_TOOL_ENTRY *Next;
EG_IMAGE *Image;
CHAR16 *ImagePath;
CHAR16 *Volume;
CHAR16 *Path;
CHAR16 *Options;
CHAR16 *FullTitle;
CHAR16 *Title;
CHAR16 Hotkey;
UINT8 Flags;
UINT8 VolumeType;
};
// Set of Search & replace bytes for VideoBiosPatchBytes().
typedef struct _VBIOS_PATCH_BYTES {
VOID *Find;
VOID *Replace;
UINTN NumberOfBytes;
} VBIOS_PATCH_BYTES;
typedef struct {
// SMBIOS TYPE0
CHAR8 VendorName[64];
CHAR8 RomVersion[64];
CHAR8 EfiVersion[64];
CHAR8 ReleaseDate[64];
// SMBIOS TYPE1
CHAR8 ManufactureName[64];
CHAR8 ProductName[64];
CHAR8 VersionNr[64];
CHAR8 SerialNr[64];
EFI_GUID SmUUID;
BOOLEAN SmUUIDConfig;
CHAR8 pad0[7];
//CHAR8 Uuid[64];
//CHAR8 SKUNumber[64];
CHAR8 FamilyName[64];
CHAR8 OEMProduct[64];
CHAR8 OEMVendor[64];
// SMBIOS TYPE2
CHAR8 BoardManufactureName[64];
CHAR8 BoardSerialNumber[64];
CHAR8 BoardNumber[64]; //Board-ID
CHAR8 LocationInChassis[64];
CHAR8 BoardVersion[64];
CHAR8 OEMBoard[64];
UINT8 BoardType;
UINT8 Pad1;
// SMBIOS TYPE3
BOOLEAN Mobile;
UINT8 ChassisType;
CHAR8 ChassisManufacturer[64];
CHAR8 ChassisAssetTag[64];
// SMBIOS TYPE4
UINT32 CpuFreqMHz;
UINT32 BusSpeed; //in kHz
BOOLEAN Turbo;
UINT8 EnabledCores;
BOOLEAN UserChange;
BOOLEAN QEMU;
// SMBIOS TYPE17
UINT16 SmbiosVersion;
INT8 Attribute;
INT8 Pad17[1];
CHAR8 MemoryManufacturer[64];
CHAR8 MemorySerialNumber[64];
CHAR8 MemoryPartNumber[64];
CHAR8 MemorySpeed[64];
// SMBIOS TYPE131
UINT16 CpuType;
// SMBIOS TYPE132
UINT16 QPI;
BOOLEAN SetTable132;
BOOLEAN TrustSMBIOS;
BOOLEAN InjectMemoryTables;
INT8 XMPDetection;
BOOLEAN UseARTFreq;
// SMBIOS TYPE133
UINT64 PlatformFeature;
// PatchTableType11
BOOLEAN NoRomInfo;
// OS parameters
CHAR8 Language[16];
CHAR8 BootArgs[256];
CHAR16 CustomUuid[40];
CHAR16 *DefaultVolume;
CHAR16 *DefaultLoader;
//Boot
BOOLEAN LastBootedVolume;
BOOLEAN SkipHibernateTimeout;
//Monitor
BOOLEAN IntelMaxBacklight;
// UINT8 Pad21[1];
UINT16 VendorEDID;
UINT16 ProductEDID;
UINT16 BacklightLevel;
BOOLEAN BacklightLevelConfig;
BOOLEAN IntelBacklight;
//Boot options
BOOLEAN MemoryFix;
BOOLEAN WithKexts;
BOOLEAN WithKextsIfNoFakeSMC;
BOOLEAN FakeSMCFound;
BOOLEAN NoCaches;
// GUI parameters
BOOLEAN Debug;
BOOLEAN Proportional;
// UINT8 Pad22[1];
UINT32 DefaultBackgroundColor;
//ACPI
UINT64 ResetAddr;
UINT8 ResetVal;
BOOLEAN NoASPM;
BOOLEAN DropSSDT;
BOOLEAN NoOemTableId;
BOOLEAN NoDynamicExtract;
BOOLEAN AutoMerge;
BOOLEAN GeneratePStates;
BOOLEAN GenerateCStates;
BOOLEAN GenerateAPSN;
BOOLEAN GenerateAPLF;
BOOLEAN GeneratePluginType;
UINT8 PLimitDict;
UINT8 UnderVoltStep;
BOOLEAN DoubleFirstState;
BOOLEAN SuspendOverride;
BOOLEAN EnableC2;
BOOLEAN EnableC4;
BOOLEAN EnableC6;
BOOLEAN EnableISS;
BOOLEAN SlpSmiEnable;
BOOLEAN FixHeaders;
UINT16 C3Latency;
BOOLEAN smartUPS;
BOOLEAN PatchNMI;
BOOLEAN EnableC7;
UINT8 SavingMode;
CHAR16 DsdtName[28];
UINT32 FixDsdt;
UINT8 MinMultiplier;
UINT8 MaxMultiplier;
UINT8 PluginType;
// BOOLEAN DropMCFG;
BOOLEAN FixMCFG;
UINT32 DeviceRenameCount;
ACPI_NAME_LIST *DeviceRename;
//Injections
BOOLEAN StringInjector;
BOOLEAN InjectSystemID;
BOOLEAN NoDefaultProperties;
BOOLEAN ReuseFFFF;
//PCI devices
UINT32 FakeATI; //97
UINT32 FakeNVidia;
UINT32 FakeIntel;
UINT32 FakeLAN; //100
UINT32 FakeWIFI;
UINT32 FakeSATA;
UINT32 FakeXHCI; //103
UINT32 FakeIMEI; //106
//Graphics
// UINT16 PCIRootUID;
BOOLEAN GraphicsInjector;
BOOLEAN InjectIntel;
BOOLEAN InjectATI;
BOOLEAN InjectNVidia;
BOOLEAN DeInit;
BOOLEAN LoadVBios;
BOOLEAN PatchVBios;
VBIOS_PATCH_BYTES *PatchVBiosBytes;
UINTN PatchVBiosBytesCount;
BOOLEAN InjectEDID;
BOOLEAN LpcTune;
UINT16 DropOEM_DSM; // vacant (unused in 0b7eed38f14400c8501228a30dcc023e1132cec3 r5017+)
UINT8 *CustomEDID;
UINT16 CustomEDIDsize;
UINT16 EdidFixHorizontalSyncPulseWidth;
UINT8 EdidFixVideoInputSignal;
CHAR16 FBName[16];
UINT16 VideoPorts;
BOOLEAN NvidiaGeneric;
BOOLEAN NvidiaNoEFI;
BOOLEAN NvidiaSingle;
UINT64 VRAM;
UINT8 Dcfg[8];
UINT8 NVCAP[20];
INT8 BootDisplay;
BOOLEAN NvidiaWeb;
UINT8 pad41[2];
UINT32 DualLink;
UINT32 IgPlatform;
// Secure boot white/black list
UINT32 SecureBootWhiteListCount;
UINT32 SecureBootBlackListCount;
CHAR16 **SecureBootWhiteList;
CHAR16 **SecureBootBlackList;
// Secure boot
UINT8 SecureBoot;
UINT8 SecureBootSetupMode;
UINT8 SecureBootPolicy;
// HDA
BOOLEAN HDAInjection;
INT32 HDALayoutId;
// USB DeviceTree injection
BOOLEAN USBInjection;
BOOLEAN USBFixOwnership;
BOOLEAN InjectClockID;
BOOLEAN HighCurrent;
BOOLEAN NameEH00;
BOOLEAN NameXH00;
BOOLEAN LANInjection;
BOOLEAN HDMIInjection;
// UINT8 pad61[2];
// LegacyBoot
CHAR16 LegacyBoot[32];
UINT16 LegacyBiosDefaultEntry;
//SkyLake
BOOLEAN HWP;
UINT8 TDP;
UINT32 HWPValue;
//Volumes hiding
CHAR16 **HVHideStrings;
INTN HVCount;
// KernelAndKextPatches
KERNEL_AND_KEXT_PATCHES KernelAndKextPatches; //zzzz
BOOLEAN KextPatchesAllowed;
BOOLEAN KernelPatchesAllowed; //From GUI: Only for user patches, not internal Clover
CHAR8 AirportBridgeDeviceName[5];
// Pre-language
BOOLEAN KbdPrevLang;
//Pointer
BOOLEAN PointerEnabled;
INTN PointerSpeed;
UINT64 DoubleClickTime;
BOOLEAN PointerMirror;
// UINT8 pad7[6];
UINT8 CustomBoot;
EG_IMAGE *CustomLogo;
UINT32 RefCLK;
// SysVariables
CHAR8 *RtMLB;
UINT8 *RtROM;
UINTN RtROMLen;
UINT32 CsrActiveConfig;
UINT16 BooterConfig;
CHAR8 BooterCfgStr[64];
BOOLEAN DisableCloverHotkeys;
BOOLEAN NeverDoRecovery;
// Multi-config
CHAR16 ConfigName[30];
CHAR16 *MainConfigName;
//Drivers
INTN BlackListCount;
CHAR16 **BlackList;
//SMC keys
CHAR8 RPlt[8];
CHAR8 RBr[8];
UINT8 EPCI[4];
UINT8 REV[6];
//other devices
BOOLEAN Rtc8Allowed;
BOOLEAN ForceHPET;
BOOLEAN ResetHDA;
BOOLEAN PlayAsync;
UINT32 DisableFunctions;
//Patch DSDT arbitrary
UINT32 PatchDsdtNum;
UINT8 **PatchDsdtFind;
UINT32 *LenToFind;
UINT8 **PatchDsdtReplace;
UINT32 *LenToReplace;
BOOLEAN DebugDSDT;
BOOLEAN SlpWak;
BOOLEAN UseIntelHDMI;
UINT8 AFGLowPowerState;
UINT8 PNLF_UID;
// UINT8 pad83[4];
// Table dropping
ACPI_DROP_TABLE *ACPIDropTables;
// Custom entries
BOOLEAN DisableEntryScan;
BOOLEAN DisableToolScan;
BOOLEAN ShowHiddenEntries;
UINT8 KernelScan;
BOOLEAN LinuxScan;
// UINT8 pad84[3];
CUSTOM_LOADER_ENTRY *CustomEntries;
CUSTOM_LEGACY_ENTRY *CustomLegacy;
CUSTOM_TOOL_ENTRY *CustomTool;
//Add custom properties
UINTN NrAddProperties;
DEV_PROPERTY *AddProperties;
//BlackListed kexts
CHAR16 BlockKexts[64];
// Disable inject kexts
// UINT32 DisableInjectKextCount;
// CHAR16 **DisabledInjectKext;
// INPUT_ITEM *InjectKextMenuItem;
//ACPI tables
UINTN SortedACPICount;
CHAR16 **SortedACPI;
// ACPI/PATCHED/AML
UINT32 DisabledAMLCount;
CHAR16 **DisabledAML;
CHAR8 **PatchDsdtLabel; //yyyy
CHAR8 **PatchDsdtTgt;
INPUT_ITEM *PatchDsdtMenuItem;
//other
UINT32 IntelMaxValue;
// UINT32 AudioVolume;
// boot.efi
UINT32 OptionsBits;
UINT32 FlagsBits;
UINT32 UIScale;
UINT32 EFILoginHiDPI;
UINT8 flagstate[32];
DEV_PROPERTY *ArbProperties;
} SETTINGS_DATA;