2020-04-04 14:27:02 +02:00
# ifndef __SETTINGS_H__
# define __SETTINGS_H__
2021-02-06 18:16:46 +01:00
# include <Efi.h>
2020-04-16 11:09:22 +02:00
# include "../gui/menu_items/menu_items.h"
2021-03-22 13:40:01 +01:00
# include "../include/OSFlags.h"
# include "../include/OSTypes.h"
2021-03-23 20:59:30 +01:00
# include "../include/Languages.h"
2020-08-25 17:35:19 +02:00
# include "../Platform/plist/plist.h"
2020-11-18 22:49:02 +01:00
# include "../Platform/guid.h"
2020-11-12 22:25:56 +01:00
# include "MacOsVersion.h"
2021-02-06 18:16:46 +01:00
# include "KERNEL_AND_KEXT_PATCHES.h"
# include "../libeg/XIcon.h"
2021-03-19 16:35:01 +01:00
# include "../cpp_lib/undefinable.h"
2021-03-20 15:29:34 +01:00
# include "../entry_scan/loader.h" // for KERNEL_SCAN_xxx constants
2021-04-03 16:42:49 +02:00
# include "../Platform/smbios.h"
2021-04-11 07:18:52 +02:00
# include "../Platform/platformdata.h"
2021-02-06 18:16:46 +01:00
# define CLOVER_SIGN SIGNATURE_32('C','l','v','r')
2020-04-16 09:48:13 +02:00
//// SysVariables
//typedef struct SYSVARIABLES SYSVARIABLES;
//struct SYSVARIABLES
//{
// SYSVARIABLES *Next;
// CHAR16 *Key;
// INPUT_ITEM MenuItem;
//};
2021-02-06 18:16:46 +01:00
extern CONST CHAR8 * AudioOutputNames [ ] ;
2021-04-01 10:06:53 +02:00
UINT8
* GetDataSetting (
IN const TagDict * Dict ,
IN CONST CHAR8 * PropName ,
OUT UINTN * DataLen
) ;
2020-08-31 09:07:36 +02:00
class HDA_OUTPUTS
{
public :
XStringW Name ;
2020-04-16 09:15:26 +02:00
// CHAR8 *LineName;
2020-08-31 09:07:36 +02:00
UINT8 Index ;
2021-02-06 18:16:46 +01:00
EFI_HANDLE Handle = NULL ;
EFI_AUDIO_IO_PROTOCOL_DEVICE Device = EfiAudioIoDeviceOther ;
2020-08-31 09:07:36 +02:00
2021-02-06 18:16:46 +01:00
HDA_OUTPUTS ( ) : Name ( ) , Index ( 0 ) { }
2020-08-31 09:07:36 +02:00
HDA_OUTPUTS ( const HDA_OUTPUTS & other ) = delete ; // Can be defined if needed
const HDA_OUTPUTS & operator = ( const HDA_OUTPUTS & ) = delete ; // Can be defined if needed
~ HDA_OUTPUTS ( ) { }
} ;
2020-04-16 09:15:26 +02:00
typedef enum {
Unknown ,
Ati , /* 0x1002 */
Intel , /* 0x8086 */
Nvidia , /* 0x10de */
RDC , /* 0x17f3 */
VIA , /* 0x1106 */
SiS , /* 0x1039 */
ULI /* 0x10b9 */
} HRDW_MANUFACTERER ;
typedef struct {
HRDW_MANUFACTERER Vendor ;
UINT8 Ports ;
UINT16 DeviceID ;
UINT16 Family ;
//UINT16 Width;
//UINT16 Height;
CHAR8 Model [ 64 ] ;
CHAR8 Config [ 64 ] ;
BOOLEAN LoadVBios ;
//BOOLEAN PatchVBios;
UINTN Segment ;
UINTN Bus ;
UINTN Device ;
UINTN Function ;
EFI_HANDLE Handle ;
UINT8 * Mmio ;
UINT32 Connectors ;
BOOLEAN ConnChanged ;
} GFX_PROPERTIES ;
2021-04-01 10:06:53 +02:00
extern GFX_PROPERTIES gGraphics [ 4 ] ; //no more then 4 graphics cards
extern UINTN NGFX ; // number of GFX
2020-04-16 09:15:26 +02:00
typedef struct {
HRDW_MANUFACTERER Vendor ;
UINT16 controller_vendor_id ;
UINT16 controller_device_id ;
CHAR16 * controller_name ;
// -- Codec Info -- //
UINT16 codec_vendor_id ;
UINT16 codec_device_id ;
UINT8 codec_revision_id ;
UINT8 codec_stepping_id ;
UINT8 codec_maj_rev ;
UINT8 codec_min_rev ;
UINT8 codec_num_function_groups ;
CHAR16 * codec_name ;
} HDA_PROPERTIES ;
2021-04-05 10:57:55 +02:00
class ACPI_NAME
{
public :
XString8 Name = XString8 ( ) ;
2021-04-05 14:00:17 +02:00
2021-04-11 07:18:52 +02:00
# if __cplusplus > 201703L
bool operator = = ( const ACPI_NAME & ) const = default ;
# endif
bool isEqual ( const ACPI_NAME & other ) const
{
if ( ! ( Name = = other . Name ) ) return false ;
return true ;
}
2021-04-05 10:57:55 +02:00
XString8Array getSplittedName ( ) const {
XString8Array splittedName = Split < XString8Array > ( Name , " . " ) ;
for ( size_t idx = 0 ; idx < splittedName . size ( ) ; + + idx ) {
XString8 & name = splittedName [ idx ] ;
while ( name . length ( ) > 4 ) name . deleteCharsAtPos ( name . length ( ) - 1 ) ;
while ( name . length ( ) < 4 ) name . strcat ( ' _ ' ) ;
}
for ( size_t idx = 1 ; idx < splittedName . size ( ) ; + + idx ) {
splittedName . insertReferenceAtPos ( splittedName . ExtractFromPos ( idx ) , 0 , true ) ; // A swap method in XObjARray would be slightly better to avoid memcpy in XObjArray when an object is removed.
}
return splittedName ;
}
} ;
class ACPI_RENAME_DEVICE
{
public :
2021-04-05 14:00:17 +02:00
ACPI_NAME acpiName = ACPI_NAME ( ) ;
2021-04-05 10:57:55 +02:00
XString8 renameTo = XString8 ( ) ;
2021-04-05 14:00:17 +02:00
2021-04-11 07:18:52 +02:00
# if __cplusplus > 201703L
bool operator = = ( const ACPI_RENAME_DEVICE & ) const = default ;
# endif
bool isEqual ( const ACPI_RENAME_DEVICE & other ) const
{
if ( ! acpiName . isEqual ( other . acpiName ) ) return false ;
if ( ! ( renameTo = = other . renameTo ) ) return false ;
return true ;
}
2021-04-05 10:57:55 +02:00
XString8 getRenameTo ( ) const {
if ( renameTo . length ( ) = = 4 ) return renameTo ;
XString8 newName = renameTo ;
while ( newName . length ( ) > 4 ) newName . deleteCharsAtPos ( newName . length ( ) - 1 ) ;
while ( newName . length ( ) < 4 ) newName . strcat ( ' _ ' ) ;
return newName ;
}
2020-04-16 09:15:26 +02:00
} ;
2020-08-09 17:55:30 +02:00
class ACPI_DROP_TABLE
2020-04-16 09:15:26 +02:00
{
2020-08-09 17:55:30 +02:00
public :
2020-04-16 09:15:26 +02:00
ACPI_DROP_TABLE * Next ;
UINT32 Signature ;
UINT32 Length ;
UINT64 TableId ;
2021-02-06 18:16:46 +01:00
INPUT_ITEM MenuItem = INPUT_ITEM ( ) ;
2020-04-20 18:33:42 +02:00
BOOLEAN OtherOS ;
2020-08-09 17:55:30 +02:00
2021-02-06 18:16:46 +01:00
ACPI_DROP_TABLE ( ) : Next ( 0 ) , Signature ( 0 ) , Length ( 0 ) , TableId ( 0 ) , OtherOS ( 0 ) { }
2020-08-09 17:55:30 +02:00
ACPI_DROP_TABLE ( const ACPI_DROP_TABLE & other ) = delete ; // Can be defined if needed
const ACPI_DROP_TABLE & operator = ( const ACPI_DROP_TABLE & ) = delete ; // Can be defined if needed
~ ACPI_DROP_TABLE ( ) { }
2020-04-16 09:15:26 +02:00
} ;
2021-03-23 09:32:57 +01:00
class CUSTOM_LOADER_SUBENTRY_SETTINGS ;
class CUSTOM_LOADER_SUBENTRY ;
2021-03-27 19:53:30 +01:00
//class ConfigPlistClass;
//class ConfigPlistClass::GUI_Custom_Entry_Class;
//template<class C> class XmlArray;
2021-03-22 13:40:01 +01:00
2021-03-27 19:53:30 +01:00
//void CompareCustomSubEntries(const XString8& label, const XObjArray<CUSTOM_LOADER_SUBENTRY_SETTINGS>& olDCustomEntries, const XmlArray<GUI_Custom_SubEntry_Class>& newCustomEntries);
//BOOLEAN FillinCustomSubEntry(UINT8 parentType, IN OUT CUSTOM_LOADER_SUBENTRY_SETTINGS *Entry, const TagDict* DictPointer, IN BOOLEAN SubEntry);
2021-03-22 13:40:01 +01:00
class CUSTOM_LOADER_SUBENTRY_SETTINGS
2020-08-15 22:39:25 +02:00
{
public :
2021-03-20 15:29:34 +01:00
bool Disabled = 0 ;
2021-03-27 19:53:30 +01:00
public : // temporary, must be protected:
// member defined with _ prefix should not be accessed from outside. I left them public for now for CompareCustomEntries()
undefinable_XString8 _Arguments = undefinable_XString8 ( ) ;
XString8 _AddArguments = XString8 ( ) ;
2021-03-22 13:40:01 +01:00
2021-03-27 19:53:30 +01:00
undefinable_XString8 _FullTitle = undefinable_XString8 ( ) ;
undefinable_XString8 _Title = undefinable_XString8 ( ) ;
2021-03-22 13:40:01 +01:00
2021-03-27 19:53:30 +01:00
undefinable_bool _NoCaches = undefinable_bool ( ) ;
2021-04-11 07:18:52 +02:00
# if __cplusplus > 201703L
bool operator = = ( const CUSTOM_LOADER_SUBENTRY_SETTINGS & ) const = default ;
# endif
bool isEqual ( const CUSTOM_LOADER_SUBENTRY_SETTINGS & other ) const
{
if ( ! ( Disabled = = other . Disabled ) ) return false ;
if ( ! ( _Arguments = = other . _Arguments ) ) return false ;
if ( ! ( _AddArguments = = other . _AddArguments ) ) return false ;
if ( ! ( _FullTitle = = other . _FullTitle ) ) return false ;
if ( ! ( _Title = = other . _Title ) ) return false ;
if ( ! ( _NoCaches = = other . _NoCaches ) ) return false ;
return true ;
}
2021-03-23 09:32:57 +01:00
2021-03-22 13:40:01 +01:00
public :
2021-03-27 19:53:30 +01:00
// friend void ::CompareCustomSubEntries(const XString8& label, const XObjArray<CUSTOM_LOADER_SUBENTRY_SETTINGS>& olDCustomEntries, const XmlArray<GUI_Custom_SubEntry_Class>& newCustomEntries);
// friend BOOLEAN FillinCustomSubEntry(UINT8 parentType, IN OUT CUSTOM_LOADER_SUBENTRY_SETTINGS *Entry, const TagDict* DictPointer, IN BOOLEAN SubEntry);
// friend class ::CUSTOM_LOADER_SUBENTRY;
2021-03-22 13:40:01 +01:00
} ;
class CUSTOM_LOADER_ENTRY ;
class CUSTOM_LOADER_SUBENTRY
{
public :
const CUSTOM_LOADER_ENTRY & parent ;
const CUSTOM_LOADER_SUBENTRY_SETTINGS & settings = CUSTOM_LOADER_SUBENTRY_SETTINGS ( ) ;
CUSTOM_LOADER_SUBENTRY ( const CUSTOM_LOADER_ENTRY & _customLoaderEntry , const CUSTOM_LOADER_SUBENTRY_SETTINGS & _settings ) : parent ( _customLoaderEntry ) , settings ( _settings ) { }
XString8Array getLoadOptions ( ) const ;
UINT8 getFlags ( bool NoCachesDefault ) const ;
const XString8 & getTitle ( ) const ;
const XString8 & getFullTitle ( ) const ;
} ;
2021-03-27 19:53:30 +01:00
//class GUI_Custom_Entry_Class;
2021-03-23 09:32:57 +01:00
class CUSTOM_LOADER_ENTRY_SETTINGS ;
2021-03-27 19:53:30 +01:00
//
//void CompareCustomEntries(const XString8& label, const XObjArray<CUSTOM_LOADER_ENTRY_SETTINGS>& olDCustomEntries, const XmlArray<GUI_Custom_Entry_Class>& newCustomEntries);
//BOOLEAN FillinCustomEntry(IN OUT CUSTOM_LOADER_ENTRY_SETTINGS *Entry, const TagDict* DictPointer, IN BOOLEAN SubEntry);
2021-03-23 09:32:57 +01:00
extern const XString8 defaultInstallTitle ;
extern const XString8 defaultRecoveryTitle ;
extern const XStringW defaultRecoveryImagePath ;
extern const XStringW defaultRecoveryDriveImagePath ;
2021-04-11 07:18:52 +02:00
class EFI_GRAPHICS_OUTPUT_BLT_PIXELClass : public EFI_GRAPHICS_OUTPUT_BLT_PIXEL
{
public :
EFI_GRAPHICS_OUTPUT_BLT_PIXELClass ( ) { Blue = 0 ; Green = 0 ; Red = 0 ; Reserved = 0 ; }
bool operator = = ( const EFI_GRAPHICS_OUTPUT_BLT_PIXELClass & other ) const {
if ( ! ( Blue = = other . Blue ) ) return false ;
if ( ! ( Green = = other . Green ) ) return false ;
if ( ! ( Red = = other . Red ) ) return false ;
if ( ! ( Reserved = = other . Reserved ) ) return false ;
return true ;
}
} ;
2021-03-22 13:40:01 +01:00
class CUSTOM_LOADER_ENTRY_SETTINGS
{
public :
bool Disabled = 0 ;
XBuffer < UINT8 > ImageData = XBuffer < UINT8 > ( ) ;
XBuffer < UINT8 > DriveImageData = XBuffer < UINT8 > ( ) ;
XStringW Volume = XStringW ( ) ;
XStringW Path = XStringW ( ) ;
undefinable_XString8 Arguments = undefinable_XString8 ( ) ;
XString8 AddArguments = XString8 ( ) ;
XString8 FullTitle = XStringW ( ) ;
XStringW Settings = XStringW ( ) ; // path of a config.plist that'll be read at the beginning of startloader
2021-03-19 21:32:42 +01:00
CHAR16 Hotkey = 0 ;
BOOLEAN CommonSettings = 0 ;
2021-03-22 13:40:01 +01:00
// UINT8 Flags = 0;
2021-03-19 21:32:42 +01:00
bool Hidden = 0 ;
2021-03-22 13:40:01 +01:00
bool AlwaysHidden = 0 ;
2021-03-19 21:32:42 +01:00
UINT8 Type = 0 ;
UINT8 VolumeType = 0 ;
2021-03-20 15:29:34 +01:00
UINT8 KernelScan = KERNEL_SCAN_ALL ;
XString8 CustomLogoAsXString8 = XString8 ( ) ;
XBuffer < UINT8 > CustomLogoAsData = XBuffer < UINT8 > ( ) ;
2021-04-11 07:18:52 +02:00
EFI_GRAPHICS_OUTPUT_BLT_PIXELClass BootBgColor = EFI_GRAPHICS_OUTPUT_BLT_PIXELClass ( ) ;
2021-03-20 15:29:34 +01:00
INT8 InjectKexts = - 1 ;
2021-03-22 13:40:01 +01:00
undefinable_bool NoCaches = undefinable_bool ( ) ;
2021-03-27 19:53:30 +01:00
XObjArray < CUSTOM_LOADER_SUBENTRY_SETTINGS > SubEntriesSettings = XObjArray < CUSTOM_LOADER_SUBENTRY_SETTINGS > ( ) ;
public : // temporary, must be protected:
XStringW m_DriveImagePath = XStringW ( ) ;
XString8 m_Title = XStringW ( ) ;
UINT8 CustomLogoTypeSettings = 0 ;
XStringW m_ImagePath = XStringW ( ) ;
2021-03-22 13:40:01 +01:00
2021-03-27 19:53:30 +01:00
public :
2021-04-11 07:18:52 +02:00
# if __cplusplus > 201703L
bool operator = = ( const CUSTOM_LOADER_ENTRY_SETTINGS & ) const = default ;
# endif
bool isEqual ( const CUSTOM_LOADER_ENTRY_SETTINGS & other ) const
{
if ( ! ( Disabled = = other . Disabled ) ) return false ;
if ( ! ( ImageData = = other . ImageData ) ) return false ;
if ( ! ( DriveImageData = = other . DriveImageData ) ) return false ;
if ( ! ( Volume = = other . Volume ) ) return false ;
if ( ! ( Path = = other . Path ) ) return false ;
if ( ! ( Arguments = = other . Arguments ) ) return false ;
if ( ! ( AddArguments = = other . AddArguments ) ) return false ;
if ( ! ( FullTitle = = other . FullTitle ) ) return false ;
if ( ! ( Settings = = other . Settings ) ) return false ;
if ( ! ( Hotkey = = other . Hotkey ) ) return false ;
if ( ! ( CommonSettings = = other . CommonSettings ) ) return false ;
if ( ! ( Hidden = = other . Hidden ) ) return false ;
if ( ! ( AlwaysHidden = = other . AlwaysHidden ) ) return false ;
if ( ! ( Type = = other . Type ) ) return false ;
if ( ! ( VolumeType = = other . VolumeType ) ) return false ;
if ( ! ( KernelScan = = other . KernelScan ) ) return false ;
if ( ! ( CustomLogoAsXString8 = = other . CustomLogoAsXString8 ) ) return false ;
if ( ! ( CustomLogoAsData = = other . CustomLogoAsData ) ) return false ;
if ( memcmp ( & BootBgColor , & other . BootBgColor , sizeof ( BootBgColor ) ) ! = 0 ) return false ;
if ( ! ( InjectKexts = = other . InjectKexts ) ) return false ;
if ( ! ( NoCaches = = other . NoCaches ) ) return false ;
if ( ! SubEntriesSettings . isEqual ( other . SubEntriesSettings ) ) return false ;
if ( ! ( m_DriveImagePath = = other . m_DriveImagePath ) ) return false ;
if ( ! ( m_Title = = other . m_Title ) ) return false ;
if ( ! ( CustomLogoTypeSettings = = other . CustomLogoTypeSettings ) ) return false ;
if ( ! ( m_ImagePath = = other . m_ImagePath ) ) return false ;
return true ;
}
2021-03-23 09:32:57 +01:00
friend class : : CUSTOM_LOADER_ENTRY ;
2021-03-27 19:53:30 +01:00
// friend void ::CompareCustomEntries(const XString8& label, const XObjArray<CUSTOM_LOADER_ENTRY_SETTINGS>& olDCustomEntries, const XmlArray<GUI_Custom_Entry_Class>& newCustomEntries);
2021-03-23 09:32:57 +01:00
friend BOOLEAN FillinCustomEntry ( IN OUT CUSTOM_LOADER_ENTRY_SETTINGS * Entry , const TagDict * DictPointer , IN BOOLEAN SubEntry ) ;
const XString8 & dgetTitle ( ) const {
if ( m_Title . notEmpty ( ) ) return m_Title ;
if ( OSTYPE_IS_OSX_RECOVERY ( Type ) ) {
return defaultRecoveryTitle ;
} else if ( OSTYPE_IS_OSX_INSTALLER ( Type ) ) {
return defaultInstallTitle ;
}
return NullXString8 ;
}
const XStringW & dgetImagePath ( ) const {
if ( m_ImagePath . notEmpty ( ) ) return m_ImagePath ;
if ( ImageData . notEmpty ( ) ) return NullXStringW ;
if ( OSTYPE_IS_OSX_RECOVERY ( Type ) ) return defaultRecoveryImagePath ;
return NullXStringW ;
}
const XStringW & dgetDriveImagePath ( ) const {
if ( m_DriveImagePath . notEmpty ( ) ) return m_DriveImagePath ;
if ( DriveImageData . notEmpty ( ) ) return NullXStringW ;
if ( OSTYPE_IS_OSX_RECOVERY ( Type ) ) return defaultRecoveryDriveImagePath ;
return NullXStringW ;
}
2020-04-16 09:15:26 +02:00
} ;
2021-03-22 13:40:01 +01:00
class CUSTOM_LOADER_ENTRY
{
public :
const CUSTOM_LOADER_ENTRY_SETTINGS & settings = CUSTOM_LOADER_ENTRY_SETTINGS ( ) ;
XObjArray < CUSTOM_LOADER_SUBENTRY > SubEntries = XObjArray < CUSTOM_LOADER_SUBENTRY > ( ) ;
2021-03-23 09:32:57 +01:00
XIcon Image = XIcon ( ) ;
XIcon DriveImage = XIcon ( ) ;
XImage CustomLogoImage = XImage ( ) ; // Todo : remove from settings.
UINT8 CustomLogoType = 0 ;
KERNEL_AND_KEXT_PATCHES KernelAndKextPatches = KERNEL_AND_KEXT_PATCHES ( ) ;
CUSTOM_LOADER_ENTRY ( const CUSTOM_LOADER_ENTRY_SETTINGS & _settings ) ;
2021-03-22 13:40:01 +01:00
XString8Array getLoadOptions ( ) const ;
2021-03-23 09:32:57 +01:00
2021-03-22 13:40:01 +01:00
UINT8 getFlags ( bool NoCachesDefault ) const {
UINT8 Flags = 0 ;
if ( settings . Arguments . isDefined ( ) ) Flags = OSFLAG_SET ( Flags , OSFLAG_NODEFAULTARGS ) ;
if ( settings . AlwaysHidden ) Flags = OSFLAG_SET ( Flags , OSFLAG_DISABLED ) ;
if ( settings . Type = = OSTYPE_LIN ) Flags = OSFLAG_SET ( Flags , OSFLAG_NODEFAULTARGS ) ;
if ( OSTYPE_IS_OSX ( settings . Type ) | | OSTYPE_IS_OSX_RECOVERY ( settings . Type ) | | OSTYPE_IS_OSX_INSTALLER ( settings . Type ) ) {
Flags = OSFLAG_UNSET ( Flags , OSFLAG_NOCACHES ) ;
}
if ( settings . NoCaches . isDefined ( ) ) {
if ( settings . NoCaches ) Flags = OSFLAG_SET ( Flags , OSFLAG_NOCACHES ) ;
} else {
if ( NoCachesDefault ) {
Flags = OSFLAG_SET ( Flags , OSFLAG_NOCACHES ) ;
}
}
if ( SubEntries . notEmpty ( ) ) Flags = OSFLAG_SET ( Flags , OSFLAG_NODEFAULTMENU ) ;
return Flags ;
}
} ;
2021-03-23 20:59:30 +01:00
class CUSTOM_LEGACY_ENTRY_SETTINGS
2020-08-09 17:55:30 +02:00
{
public :
2021-03-23 20:59:30 +01:00
bool Disabled = 0 ;
2021-03-19 21:32:42 +01:00
XStringW ImagePath = XStringW ( ) ;
2021-03-23 20:59:30 +01:00
XBuffer < UINT8 > ImageData = XBuffer < UINT8 > ( ) ;
2021-03-19 21:32:42 +01:00
XStringW DriveImagePath = XStringW ( ) ;
2021-03-23 20:59:30 +01:00
XBuffer < UINT8 > DriveImageData = XBuffer < UINT8 > ( ) ;
2021-03-19 21:32:42 +01:00
XStringW Volume = XStringW ( ) ;
XStringW FullTitle = XStringW ( ) ;
XStringW Title = XStringW ( ) ;
CHAR16 Hotkey = 0 ;
2021-03-23 20:59:30 +01:00
// UINT8 Flags = 0;
2021-03-19 21:32:42 +01:00
bool Hidden = 0 ;
2021-03-23 20:59:30 +01:00
bool AlwaysHidden = 0 ;
2021-03-19 21:32:42 +01:00
UINT8 Type = 0 ;
UINT8 VolumeType = 0 ;
2021-04-11 07:18:52 +02:00
# if __cplusplus > 201703L
bool operator = = ( const CUSTOM_LEGACY_ENTRY_SETTINGS & ) const = default ;
# endif
bool isEqual ( const CUSTOM_LEGACY_ENTRY_SETTINGS & other ) const
{
if ( ! ( Disabled = = other . Disabled ) ) return false ;
if ( ! ( ImagePath = = other . ImagePath ) ) return false ;
if ( ! ( ImageData = = other . ImageData ) ) return false ;
if ( ! ( DriveImagePath = = other . DriveImagePath ) ) return false ;
if ( ! ( DriveImageData = = other . DriveImageData ) ) return false ;
if ( ! ( Volume = = other . Volume ) ) return false ;
if ( ! ( FullTitle = = other . FullTitle ) ) return false ;
if ( ! ( Title = = other . Title ) ) return false ;
if ( ! ( Hotkey = = other . Hotkey ) ) return false ;
if ( ! ( Hidden = = other . Hidden ) ) return false ;
if ( ! ( AlwaysHidden = = other . AlwaysHidden ) ) return false ;
if ( ! ( Type = = other . Type ) ) return false ;
if ( ! ( VolumeType = = other . VolumeType ) ) return false ;
return true ;
}
2021-03-23 20:59:30 +01:00
} ;
2021-03-19 21:32:42 +01:00
2021-03-23 20:59:30 +01:00
class CUSTOM_LEGACY_ENTRY
{
public :
const CUSTOM_LEGACY_ENTRY_SETTINGS & settings = CUSTOM_LEGACY_ENTRY_SETTINGS ( ) ;
XIcon Image = XIcon ( ) ;
XIcon DriveImage = XIcon ( ) ;
2021-03-23 22:23:44 +01:00
CUSTOM_LEGACY_ENTRY ( const CUSTOM_LEGACY_ENTRY_SETTINGS & _settings , const EFI_FILE & ThemeDir ) : settings ( _settings )
2021-03-23 20:59:30 +01:00
{
if ( settings . ImagePath . notEmpty ( ) ) {
Image . LoadXImage ( & ThemeDir , settings . ImagePath ) ;
} else if ( settings . ImageData . notEmpty ( ) ) {
if ( ! EFI_ERROR ( Image . Image . FromPNG ( settings . ImageData . data ( ) , settings . ImageData . size ( ) ) ) ) {
Image . setFilled ( ) ;
}
}
if ( settings . DriveImagePath . notEmpty ( ) ) {
DriveImage . LoadXImage ( & ThemeDir , settings . DriveImagePath ) ;
} else if ( settings . DriveImageData . notEmpty ( ) ) {
if ( ! EFI_ERROR ( DriveImage . Image . FromPNG ( settings . DriveImageData . data ( ) , settings . DriveImageData . size ( ) ) ) ) {
DriveImage . setFilled ( ) ;
}
}
}
UINT8 getFlags ( ) const {
UINT8 Flags = 0 ;
if ( settings . Disabled | | settings . AlwaysHidden ) Flags = OSFLAG_SET ( Flags , OSFLAG_DISABLED ) ;
return Flags ;
}
2020-04-16 09:15:26 +02:00
} ;
2021-03-23 20:59:30 +01:00
class CUSTOM_TOOL_ENTRY_SETTINGS
2020-08-09 17:55:30 +02:00
{
public :
2021-03-23 20:59:30 +01:00
bool Disabled = 0 ;
2021-03-19 21:32:42 +01:00
XStringW ImagePath = XStringW ( ) ;
2021-03-23 20:59:30 +01:00
XBuffer < UINT8 > ImageData = XBuffer < UINT8 > ( ) ;
2021-03-19 21:32:42 +01:00
XStringW Volume = XStringW ( ) ;
XStringW Path = XStringW ( ) ;
2021-03-23 20:59:30 +01:00
// XString8Array LoadOptions = XString8Array();
XString8 Arguments = XString8 ( ) ;
2021-03-19 21:32:42 +01:00
XStringW FullTitle = XStringW ( ) ;
XStringW Title = XStringW ( ) ;
CHAR16 Hotkey = 0 ;
2021-03-23 20:59:30 +01:00
// UINT8 Flags = 0;
2021-03-19 21:32:42 +01:00
bool Hidden = 0 ;
2021-03-23 20:59:30 +01:00
bool AlwaysHidden = 0 ;
2021-03-19 21:32:42 +01:00
UINT8 VolumeType = 0 ;
2021-04-11 07:18:52 +02:00
# if __cplusplus > 201703L
bool operator = = ( const CUSTOM_TOOL_ENTRY_SETTINGS & ) const = default ;
# endif
bool isEqual ( const CUSTOM_TOOL_ENTRY_SETTINGS & other ) const
{
if ( ! ( Disabled = = other . Disabled ) ) return false ;
if ( ! ( ImagePath = = other . ImagePath ) ) return false ;
if ( ! ( ImageData = = other . ImageData ) ) return false ;
if ( ! ( Volume = = other . Volume ) ) return false ;
if ( ! ( Path = = other . Path ) ) return false ;
if ( ! ( Arguments = = other . Arguments ) ) return false ;
if ( ! ( FullTitle = = other . FullTitle ) ) return false ;
if ( ! ( Title = = other . Title ) ) return false ;
if ( ! ( Hotkey = = other . Hotkey ) ) return false ;
if ( ! ( Hidden = = other . Hidden ) ) return false ;
if ( ! ( AlwaysHidden = = other . AlwaysHidden ) ) return false ;
if ( ! ( VolumeType = = other . VolumeType ) ) return false ;
return true ;
}
2021-03-19 21:32:42 +01:00
2021-03-23 20:59:30 +01:00
} ;
class CUSTOM_TOOL_ENTRY
{
public :
XIcon Image = XIcon ( ) ;
const CUSTOM_TOOL_ENTRY_SETTINGS & settings = CUSTOM_TOOL_ENTRY_SETTINGS ( ) ;
2021-03-23 22:23:44 +01:00
CUSTOM_TOOL_ENTRY ( const CUSTOM_TOOL_ENTRY_SETTINGS & _settings , const EFI_FILE & ThemeDir ) : settings ( _settings )
2021-03-23 20:59:30 +01:00
{
if ( settings . ImagePath . notEmpty ( ) ) {
Image . LoadXImage ( & ThemeDir , settings . ImagePath ) ;
} else if ( settings . ImageData . notEmpty ( ) ) {
if ( ! EFI_ERROR ( Image . Image . FromPNG ( settings . ImageData . data ( ) , settings . ImageData . size ( ) ) ) ) {
Image . setFilled ( ) ;
}
}
}
UINT8 getFlags ( ) const {
UINT8 Flags = 0 ;
if ( settings . Disabled | | settings . AlwaysHidden ) Flags = OSFLAG_SET ( Flags , OSFLAG_DISABLED ) ;
return Flags ;
}
XString8Array getLoadOptions ( ) const {
return Split < XString8Array > ( settings . Arguments , " " ) ;
}
2020-04-16 09:15:26 +02:00
} ;
2021-04-01 10:06:53 +02:00
/*
* From config . plist ,
* / Devices / Properties will construct a XObjArray < DEV_PROPERTY > , stored in ArbProperties
* / Devices / Arbitrary / CustomProperties will construct a XObjArray < DEV_PROPERTY > , stored in ArbProperties
*/
// 2021-04 Jief : this is the old structure. Kept here for be able to compare old and new code.
2020-08-09 17:55:30 +02:00
class DEV_PROPERTY
{
public :
2021-04-01 10:06:53 +02:00
UINT32 Device = 0 ;
EFI_DEVICE_PATH_PROTOCOL * DevicePath = NULL ;
CHAR8 * Key = 0 ;
UINT8 * Value = 0 ;
UINTN ValueLen = 0 ;
DEV_PROPERTY * Next = 0 ; //next device or next property
DEV_PROPERTY * Child = 0 ; // property list of the device
CHAR8 * Label = 0 ;
INPUT_ITEM MenuItem = INPUT_ITEM ( ) ;
TAG_TYPE ValueType = kTagTypeNone ;
DEV_PROPERTY ( ) { }
2020-08-09 17:55:30 +02:00
// Not sure if default are valid. Delete them. If needed, proper ones can be created
2021-04-01 10:06:53 +02:00
DEV_PROPERTY ( const DEV_PROPERTY & ) { panic ( " nope " ) ; }
DEV_PROPERTY & operator = ( const DEV_PROPERTY & ) = delete ;
2021-03-29 10:50:02 +02:00
} ;
2020-04-16 09:15:26 +02:00
2021-03-26 10:43:15 +01:00
/**
Set of Search & replace bytes for VideoBiosPatchBytes ( ) .
this is supposed to be a replacement of VBIOS_PATCH_BYTES , but that would need VbiosPatchLibrary to be update to C + + . Quite easy , but need cpp_fundation to become a library . TODO
* */
class VBIOS_PATCH {
public :
XBuffer < uint8_t > Find = XBuffer < uint8_t > ( ) ;
XBuffer < uint8_t > Replace = XBuffer < uint8_t > ( ) ;
2021-04-11 07:18:52 +02:00
# if __cplusplus > 201703L
bool operator = = ( const VBIOS_PATCH & ) const = default ;
# endif
bool isEqual ( const VBIOS_PATCH & other ) const
{
if ( ! ( Find = = other . Find ) ) return false ;
if ( ! ( Replace = = other . Replace ) ) return false ;
return true ;
}
2021-03-26 10:43:15 +01:00
} ;
class PatchVBiosBytesNewClass : public XObjArray < VBIOS_PATCH >
{
mutable XArray < VBIOS_PATCH_BYTES > VBIOS_PATCH_BYTES_array = XArray < VBIOS_PATCH_BYTES > ( ) ;
public :
2021-04-11 07:18:52 +02:00
# if __cplusplus > 201703L
bool operator = = ( const PatchVBiosBytesNewClass & other ) const { return XObjArray < VBIOS_PATCH > : : operator = = ( other ) ; }
# endif
2021-03-26 10:43:15 +01:00
// Temporary bridge to old struct.
2021-04-11 07:18:52 +02:00
const VBIOS_PATCH_BYTES * getVBIOS_PATCH_BYTES ( ) const {
2021-03-26 10:43:15 +01:00
VBIOS_PATCH_BYTES_array . setSize ( size ( ) ) ;
for ( size_t idx = 0 ; idx < size ( ) ; + + idx ) {
VBIOS_PATCH_BYTES_array [ idx ] . Find = ElementAt ( idx ) . Find . data ( ) ;
VBIOS_PATCH_BYTES_array [ idx ] . Replace = ElementAt ( idx ) . Replace . data ( ) ;
VBIOS_PATCH_BYTES_array [ idx ] . NumberOfBytes = ElementAt ( idx ) . Replace . size ( ) ;
}
return VBIOS_PATCH_BYTES_array ;
}
size_t getVBIOS_PATCH_BYTES_count ( ) const {
return size ( ) ;
}
2021-04-11 07:18:52 +02:00
bool isEqual ( const PatchVBiosBytesNewClass & other ) const
{
return XObjArray < VBIOS_PATCH > : : isEqual ( other ) ;
// getVBIOS_PATCH_BYTES();
// if ( VBIOS_PATCH_BYTES_array.size() != other.VBIOS_PATCH_BYTES_array.size() ) return false;
// for ( size_t idx = 0 ; idx < VBIOS_PATCH_BYTES_array.size() ; ++idx ) {
// if ( VBIOS_PATCH_BYTES_array[idx].NumberOfBytes != other[idx].Find.size() ) return false;
// if ( memcmp(VBIOS_PATCH_BYTES_array[idx].Find, other.VBIOS_PATCH_BYTES_array[idx].Find, VBIOS_PATCH_BYTES_array[idx].NumberOfBytes) != 0 ) return false;
// if ( memcmp(VBIOS_PATCH_BYTES_array[idx].Replace, other.VBIOS_PATCH_BYTES_array[idx].Replace, VBIOS_PATCH_BYTES_array[idx].NumberOfBytes) != 0 ) return false;
// }
// return true;
}
2021-03-26 10:43:15 +01:00
} ;
2021-04-03 16:42:49 +02:00
class SLOT_DEVICE
{
public :
2021-04-05 10:57:55 +02:00
UINT16 SegmentGroupNum = UINT16 ( ) ; // assigned by GetDevices
UINT8 BusNum = UINT8 ( ) ; // assigned by GetDevices
UINT8 DevFuncNum = UINT8 ( ) ; // assigned by GetDevices
bool Valid = bool ( ) ; // assigned by GetDevices
2021-04-03 16:42:49 +02:00
//UINT8 DeviceN;
2021-04-05 10:57:55 +02:00
UINT8 SlotID = UINT8 ( ) ;
MISC_SLOT_TYPE SlotType = MISC_SLOT_TYPE ( ) ;
XString8 SlotName = XString8 ( ) ;
2021-04-11 07:18:52 +02:00
# if __cplusplus > 201703L
bool operator = = ( const SLOT_DEVICE & ) const = default ;
# endif
bool isEqual ( const SLOT_DEVICE & other ) const
{
if ( ! ( SegmentGroupNum = = other . SegmentGroupNum ) ) return false ;
if ( ! ( BusNum = = other . BusNum ) ) return false ;
if ( ! ( DevFuncNum = = other . DevFuncNum ) ) return false ;
if ( ! ( Valid = = other . Valid ) ) return false ;
//if ( !(DeviceN == other.DeviceN) ) return false;
if ( ! ( SlotID = = other . SlotID ) ) return false ;
if ( ! ( SlotType = = other . SlotType ) ) return false ;
if ( ! ( SlotName = = other . SlotName ) ) return false ;
return true ;
}
2021-04-03 16:42:49 +02:00
} ;
2021-03-25 15:32:56 +01:00
class SETTINGS_DATA ;
2021-03-27 19:53:30 +01:00
class ConfigPlistClass ;
2021-03-25 15:32:56 +01:00
class TagDict ;
2021-03-27 19:53:30 +01:00
//bool CompareOldNewSettings(const SETTINGS_DATA& , const ConfigPlistClass& );
2021-03-25 15:32:56 +01:00
EFI_STATUS GetUserSettings ( const TagDict * CfgDict , SETTINGS_DATA & gSettings ) ;
2020-08-11 14:43:53 +02:00
class SETTINGS_DATA {
public :
2021-02-02 10:02:21 +01:00
class BootClass {
public :
INTN Timeout = - 1 ;
bool SkipHibernateTimeout = false ;
bool DisableCloverHotkeys = false ;
XString8 BootArgs = XString8 ( ) ;
2021-03-15 10:02:34 +01:00
bool NeverDoRecovery = 0 ;
2021-02-02 10:02:21 +01:00
bool LastBootedVolume = false ;
XStringW DefaultVolume = XStringW ( ) ;
XStringW DefaultLoader = XStringW ( ) ;
bool DebugLog = false ;
bool FastBoot = false ;
bool NoEarlyProgress = false ;
bool NeverHibernate = false ;
bool StrictHibernate = false ;
bool RtcHibernateAware = false ;
bool HibernationFixup = false ;
bool SignatureFixup = false ;
2021-03-15 10:02:34 +01:00
INT8 SecureSetting = 0 ; // 0 == false, 1 == true, -1 == undefined
2021-03-27 19:53:30 +01:00
//UINT8 SecureBoot = 0;
//UINT8 SecureBootSetupMode = 0;
2021-02-02 10:02:21 +01:00
UINT8 SecureBootPolicy = 0 ;
// Secure boot white/black list
2021-02-11 12:41:59 +01:00
XStringWArray SecureBootWhiteList = XStringWArray ( ) ;
XStringWArray SecureBootBlackList = XStringWArray ( ) ;
2021-02-02 10:02:21 +01:00
INT8 XMPDetection = 0 ;
// LegacyBoot
XStringW LegacyBoot = XStringW ( ) ;
UINT16 LegacyBiosDefaultEntry = 0 ;
2021-03-20 15:29:34 +01:00
UINT8 CustomLogoType = 0 ;
2021-03-15 10:02:34 +01:00
XString8 CustomLogoAsXString8 = XString8 ( ) ;
XBuffer < UINT8 > CustomLogoAsData = XBuffer < UINT8 > ( ) ;
2021-04-11 07:18:52 +02:00
# if __cplusplus > 201703L
bool operator = = ( const BootClass & ) const = default ;
# endif
bool isEqual ( const BootClass & other ) const
{
if ( ! ( Timeout = = other . Timeout ) ) return false ;
if ( ! ( SkipHibernateTimeout = = other . SkipHibernateTimeout ) ) return false ;
if ( ! ( DisableCloverHotkeys = = other . DisableCloverHotkeys ) ) return false ;
if ( ! ( BootArgs = = other . BootArgs ) ) return false ;
if ( ! ( NeverDoRecovery = = other . NeverDoRecovery ) ) return false ;
if ( ! ( LastBootedVolume = = other . LastBootedVolume ) ) return false ;
if ( ! ( DefaultVolume = = other . DefaultVolume ) ) return false ;
if ( ! ( DefaultLoader = = other . DefaultLoader ) ) return false ;
if ( ! ( DebugLog = = other . DebugLog ) ) return false ;
if ( ! ( FastBoot = = other . FastBoot ) ) return false ;
if ( ! ( NoEarlyProgress = = other . NoEarlyProgress ) ) return false ;
if ( ! ( NeverHibernate = = other . NeverHibernate ) ) return false ;
if ( ! ( StrictHibernate = = other . StrictHibernate ) ) return false ;
if ( ! ( RtcHibernateAware = = other . RtcHibernateAware ) ) return false ;
if ( ! ( HibernationFixup = = other . HibernationFixup ) ) return false ;
if ( ! ( SignatureFixup = = other . SignatureFixup ) ) return false ;
if ( ! ( SecureSetting = = other . SecureSetting ) ) return false ;
if ( ! ( SecureBootPolicy = = other . SecureBootPolicy ) ) return false ;
if ( ! ( SecureBootWhiteList = = other . SecureBootWhiteList ) ) return false ;
if ( ! ( SecureBootBlackList = = other . SecureBootBlackList ) ) return false ;
if ( ! ( XMPDetection = = other . XMPDetection ) ) return false ;
if ( ! ( LegacyBoot = = other . LegacyBoot ) ) return false ;
if ( ! ( LegacyBiosDefaultEntry = = other . LegacyBiosDefaultEntry ) ) return false ;
if ( ! ( CustomLogoType = = other . CustomLogoType ) ) return false ;
if ( ! ( CustomLogoAsXString8 = = other . CustomLogoAsXString8 ) ) return false ;
if ( ! ( CustomLogoAsData = = other . CustomLogoAsData ) ) return false ;
return true ;
}
2021-03-27 19:53:30 +01:00
} ;
2021-02-11 12:41:59 +01:00
class ACPIClass
{
public :
class ACPIDropTablesClass
{
public :
UINT32 Signature = 0 ;
UINT64 TableId = 0 ;
UINT32 TabLength = 0 ;
bool OtherOS = 0 ;
2021-04-11 07:18:52 +02:00
# if __cplusplus > 201703L
bool operator = = ( const ACPIDropTablesClass & ) const = default ;
# endif
bool isEqual ( const ACPIDropTablesClass & other ) const
{
if ( ! ( Signature = = other . Signature ) ) return false ;
if ( ! ( TableId = = other . TableId ) ) return false ;
if ( ! ( TabLength = = other . TabLength ) ) return false ;
if ( ! ( OtherOS = = other . OtherOS ) ) return false ;
return true ;
}
2021-02-11 12:41:59 +01:00
} ;
class DSDTClass
{
public :
2021-03-27 19:53:30 +01:00
class DSDT_Patch
{
public :
bool Disabled = bool ( ) ;
XString8 PatchDsdtLabel = XString8 ( ) ;
XBuffer < UINT8 > PatchDsdtFind = XBuffer < UINT8 > ( ) ;
XBuffer < UINT8 > PatchDsdtReplace = XBuffer < UINT8 > ( ) ;
XBuffer < UINT8 > PatchDsdtTgt = XBuffer < UINT8 > ( ) ;
2021-04-05 10:57:55 +02:00
INPUT_ITEM PatchDsdtMenuItem = INPUT_ITEM ( ) ; // Not read from config.plist. Should be moved out.
2021-04-11 07:18:52 +02:00
# if __cplusplus > 201703L
bool operator = = ( const DSDT_Patch & ) const = default ;
# endif
bool isEqual ( const DSDT_Patch & other ) const
{
if ( ! ( Disabled = = other . Disabled ) ) return false ;
if ( ! ( PatchDsdtLabel = = other . PatchDsdtLabel ) ) return false ;
if ( ! ( PatchDsdtFind = = other . PatchDsdtFind ) ) return false ;
if ( ! ( PatchDsdtReplace = = other . PatchDsdtReplace ) ) return false ;
if ( ! ( PatchDsdtTgt = = other . PatchDsdtTgt ) ) return false ;
if ( ! ( PatchDsdtMenuItem = = other . PatchDsdtMenuItem ) ) return false ;
return true ;
}
2021-03-27 19:53:30 +01:00
} ;
2021-02-11 12:41:59 +01:00
XStringW DsdtName = XStringW ( ) ;
2021-03-25 21:21:41 +01:00
bool DebugDSDT = 0 ;
bool Rtc8Allowed = 0 ;
2021-02-11 12:41:59 +01:00
UINT8 PNLF_UID = 0 ;
UINT32 FixDsdt = 0 ;
2021-03-25 21:21:41 +01:00
bool ReuseFFFF = 0 ;
bool SuspendOverride = 0 ;
2021-02-11 12:41:59 +01:00
XObjArray < DSDT_Patch > DSDTPatchArray = XObjArray < DSDT_Patch > ( ) ;
2021-04-11 07:18:52 +02:00
# if __cplusplus > 201703L
bool operator = = ( const DSDTClass & ) const = default ;
# endif
bool isEqual ( const DSDTClass & other ) const
{
if ( ! ( DsdtName = = other . DsdtName ) ) return false ;
if ( ! ( DebugDSDT = = other . DebugDSDT ) ) return false ;
if ( ! ( Rtc8Allowed = = other . Rtc8Allowed ) ) return false ;
if ( ! ( PNLF_UID = = other . PNLF_UID ) ) return false ;
if ( ! ( FixDsdt = = other . FixDsdt ) ) return false ;
if ( ! ( ReuseFFFF = = other . ReuseFFFF ) ) return false ;
if ( ! ( SuspendOverride = = other . SuspendOverride ) ) return false ;
if ( ! DSDTPatchArray . isEqual ( other . DSDTPatchArray ) ) return false ;
return true ;
}
2021-03-27 19:53:30 +01:00
} ;
2021-02-11 12:41:59 +01:00
class SSDTClass
{
public :
class GenerateClass
{
public :
2021-03-23 20:59:30 +01:00
bool GeneratePStates = 0 ;
bool GenerateCStates = 0 ;
bool GenerateAPSN = 0 ;
bool GenerateAPLF = 0 ;
bool GeneratePluginType = 0 ;
2021-04-11 07:18:52 +02:00
# if __cplusplus > 201703L
bool operator = = ( const GenerateClass & ) const = default ;
# endif
bool isEqual ( const GenerateClass & other ) const
{
if ( ! ( GeneratePStates = = other . GeneratePStates ) ) return false ;
if ( ! ( GenerateCStates = = other . GenerateCStates ) ) return false ;
if ( ! ( GenerateAPSN = = other . GenerateAPSN ) ) return false ;
if ( ! ( GenerateAPLF = = other . GenerateAPLF ) ) return false ;
if ( ! ( GeneratePluginType = = other . GeneratePluginType ) ) return false ;
return true ;
}
2021-03-27 19:53:30 +01:00
} ;
bool DropSSDTSetting = 0 ;
bool NoOemTableId = 0 ;
bool NoDynamicExtract = 0 ;
bool EnableISS = 0 ;
bool EnableC7 = 0 ;
bool _EnableC6 = 0 ;
bool _EnableC4 = 0 ;
bool _EnableC2 = 0 ;
2021-03-19 16:35:01 +01:00
UINT16 _C3Latency = 0 ;
2021-02-11 12:41:59 +01:00
UINT8 PLimitDict = 0 ;
UINT8 UnderVoltStep = 0 ;
2021-03-27 19:53:30 +01:00
bool DoubleFirstState = 0 ;
2021-02-11 12:41:59 +01:00
UINT8 MinMultiplier = 0 ;
UINT8 MaxMultiplier = 0 ;
UINT8 PluginType = 0 ;
2021-03-27 19:53:30 +01:00
GenerateClass Generate = GenerateClass ( ) ;
2021-04-11 07:18:52 +02:00
# if __cplusplus > 201703L
bool operator = = ( const SSDTClass & ) const = default ;
# endif
bool isEqual ( const SSDTClass & other ) const
{
if ( ! ( DropSSDTSetting = = other . DropSSDTSetting ) ) return false ;
if ( ! ( NoOemTableId = = other . NoOemTableId ) ) return false ;
if ( ! ( NoDynamicExtract = = other . NoDynamicExtract ) ) return false ;
if ( ! ( EnableISS = = other . EnableISS ) ) return false ;
if ( ! ( EnableC7 = = other . EnableC7 ) ) return false ;
if ( ! ( _EnableC6 = = other . _EnableC6 ) ) return false ;
if ( ! ( _EnableC4 = = other . _EnableC4 ) ) return false ;
if ( ! ( _EnableC2 = = other . _EnableC2 ) ) return false ;
if ( ! ( _C3Latency = = other . _C3Latency ) ) return false ;
if ( ! ( PLimitDict = = other . PLimitDict ) ) return false ;
if ( ! ( UnderVoltStep = = other . UnderVoltStep ) ) return false ;
if ( ! ( DoubleFirstState = = other . DoubleFirstState ) ) return false ;
if ( ! ( MinMultiplier = = other . MinMultiplier ) ) return false ;
if ( ! ( MaxMultiplier = = other . MaxMultiplier ) ) return false ;
if ( ! ( PluginType = = other . PluginType ) ) return false ;
if ( ! Generate . isEqual ( other . Generate ) ) return false ;
return true ;
}
2021-03-27 19:53:30 +01:00
} ;
UINT64 ResetAddr = 0 ;
UINT8 ResetVal = 0 ;
bool SlpSmiEnable = 0 ;
bool FixHeaders = 0 ;
bool FixMCFG = 0 ;
bool NoASPM = 0 ;
bool smartUPS = 0 ;
bool PatchNMI = 0 ;
bool AutoMerge = 0 ;
XStringWArray DisabledAML = XStringWArray ( ) ;
XString8Array SortedACPI = XString8Array ( ) ;
2021-04-05 10:57:55 +02:00
XObjArray < ACPI_RENAME_DEVICE > DeviceRename = XObjArray < ACPI_RENAME_DEVICE > ( ) ;
2021-03-27 19:53:30 +01:00
XObjArray < ACPIDropTablesClass > ACPIDropTablesArray = XObjArray < ACPIDropTablesClass > ( ) ;
DSDTClass DSDT = DSDTClass ( ) ;
SSDTClass SSDT = SSDTClass ( ) ;
2021-04-11 07:18:52 +02:00
# if __cplusplus > 201703L
bool operator = = ( const ACPIClass & ) const = default ;
# endif
bool isEqual ( const ACPIClass & other ) const
{
if ( ! ( ResetAddr = = other . ResetAddr ) ) return false ;
if ( ! ( ResetVal = = other . ResetVal ) ) return false ;
if ( ! ( SlpSmiEnable = = other . SlpSmiEnable ) ) return false ;
if ( ! ( FixHeaders = = other . FixHeaders ) ) return false ;
if ( ! ( FixMCFG = = other . FixMCFG ) ) return false ;
if ( ! ( NoASPM = = other . NoASPM ) ) return false ;
if ( ! ( smartUPS = = other . smartUPS ) ) return false ;
if ( ! ( PatchNMI = = other . PatchNMI ) ) return false ;
if ( ! ( AutoMerge = = other . AutoMerge ) ) return false ;
if ( ! ( DisabledAML = = other . DisabledAML ) ) return false ;
if ( ! ( SortedACPI = = other . SortedACPI ) ) return false ;
if ( ! DeviceRename . isEqual ( other . DeviceRename ) ) return false ;
if ( ! ACPIDropTablesArray . isEqual ( other . ACPIDropTablesArray ) ) return false ;
if ( ! DSDT . isEqual ( other . DSDT ) ) return false ;
if ( ! SSDT . isEqual ( other . SSDT ) ) return false ;
return true ;
}
2021-03-27 19:53:30 +01:00
} ;
2021-02-02 10:02:21 +01:00
class GUIClass {
public :
2021-03-19 21:32:42 +01:00
class MouseClass {
public :
2021-04-11 07:18:52 +02:00
INTN PointerSpeed = 0 ;
2021-03-23 20:59:30 +01:00
bool PointerEnabled = 0 ;
2021-04-11 07:18:52 +02:00
UINT64 DoubleClickTime = 0 ;
2021-03-23 20:59:30 +01:00
bool PointerMirror = 0 ;
2021-04-11 07:18:52 +02:00
# if __cplusplus > 201703L
bool operator = = ( const MouseClass & ) const = default ;
# endif
bool isEqual ( const MouseClass & other ) const
{
if ( ! ( PointerSpeed = = other . PointerSpeed ) ) return false ;
if ( ! ( PointerEnabled = = other . PointerEnabled ) ) return false ;
if ( ! ( DoubleClickTime = = other . DoubleClickTime ) ) return false ;
if ( ! ( PointerMirror = = other . PointerMirror ) ) return false ;
return true ;
}
2021-03-27 19:53:30 +01:00
} ;
2021-03-19 21:32:42 +01:00
class ScanClass {
public :
2021-03-23 20:59:30 +01:00
bool DisableEntryScan = 0 ;
bool DisableToolScan = 0 ;
UINT8 KernelScan = 0 ;
bool LinuxScan = 0 ;
bool LegacyFirst = false ;
bool NoLegacy = false ;
2021-04-11 07:18:52 +02:00
# if __cplusplus > 201703L
bool operator = = ( const ScanClass & ) const = default ;
# endif
bool isEqual ( const ScanClass & other ) const
{
if ( ! ( DisableEntryScan = = other . DisableEntryScan ) ) return false ;
if ( ! ( DisableToolScan = = other . DisableToolScan ) ) return false ;
if ( ! ( KernelScan = = other . KernelScan ) ) return false ;
if ( ! ( LinuxScan = = other . LinuxScan ) ) return false ;
if ( ! ( LegacyFirst = = other . LegacyFirst ) ) return false ;
if ( ! ( NoLegacy = = other . NoLegacy ) ) return false ;
return true ;
}
2021-03-27 19:53:30 +01:00
} ;
2021-04-11 12:53:21 +02:00
INT32 Timezone = 0xFF ;
2021-03-27 19:53:30 +01:00
XStringW Theme = XStringW ( ) ;
//bool DarkEmbedded = 0;
XString8 EmbeddedThemeType = XString8 ( ) ;
bool PlayAsync = 0 ;
bool CustomIcons = false ;
bool TextOnly = false ;
bool ShowOptimus = false ;
XStringW ScreenResolution = XStringW ( ) ;
bool ProvideConsoleGop = 0 ;
INTN ConsoleMode = 0 ;
2021-04-05 10:57:55 +02:00
XString8 Language = XString8 ( ) ;
2021-04-03 16:42:49 +02:00
LanguageCode languageCode = english ;
2021-03-27 19:53:30 +01:00
bool KbdPrevLang = 0 ;
XString8Array HVHideStrings = XString8Array ( ) ;
2021-04-11 07:18:52 +02:00
ScanClass Scan = ScanClass ( ) ;
MouseClass Mouse = MouseClass ( ) ;
2021-03-22 13:40:01 +01:00
XObjArray < CUSTOM_LOADER_ENTRY_SETTINGS > CustomEntriesSettings = XObjArray < CUSTOM_LOADER_ENTRY_SETTINGS > ( ) ;
2021-03-23 20:59:30 +01:00
XObjArray < CUSTOM_LEGACY_ENTRY_SETTINGS > CustomLegacySettings = XObjArray < CUSTOM_LEGACY_ENTRY_SETTINGS > ( ) ;
XObjArray < CUSTOM_TOOL_ENTRY_SETTINGS > CustomToolSettings = XObjArray < CUSTOM_TOOL_ENTRY_SETTINGS > ( ) ;
2021-03-27 19:53:30 +01:00
bool getDarkEmbedded ( bool isDaylight ) const ;
2021-04-11 07:18:52 +02:00
# if __cplusplus > 201703L
bool operator = = ( const GUIClass & ) const = default ;
# endif
bool isEqual ( const GUIClass & other ) const
{
if ( ! ( Timezone = = other . Timezone ) ) return false ;
if ( ! ( Theme = = other . Theme ) ) return false ;
if ( ! ( EmbeddedThemeType = = other . EmbeddedThemeType ) ) return false ;
if ( ! ( PlayAsync = = other . PlayAsync ) ) return false ;
if ( ! ( CustomIcons = = other . CustomIcons ) ) return false ;
if ( ! ( TextOnly = = other . TextOnly ) ) return false ;
if ( ! ( ShowOptimus = = other . ShowOptimus ) ) return false ;
if ( ! ( ScreenResolution = = other . ScreenResolution ) ) return false ;
if ( ! ( ProvideConsoleGop = = other . ProvideConsoleGop ) ) return false ;
if ( ! ( ConsoleMode = = other . ConsoleMode ) ) return false ;
if ( ! ( Language = = other . Language ) ) return false ;
if ( ! ( languageCode = = other . languageCode ) ) return false ;
if ( ! ( KbdPrevLang = = other . KbdPrevLang ) ) return false ;
if ( ! ( HVHideStrings = = other . HVHideStrings ) ) return false ;
if ( ! Scan . isEqual ( other . Scan ) ) return false ;
if ( ! Mouse . isEqual ( other . Mouse ) ) return false ;
if ( ! CustomEntriesSettings . isEqual ( other . CustomEntriesSettings ) ) return false ;
if ( ! CustomLegacySettings . isEqual ( other . CustomLegacySettings ) ) return false ;
if ( ! CustomToolSettings . isEqual ( other . CustomToolSettings ) ) return false ;
return true ;
}
2021-03-19 21:32:42 +01:00
2021-03-27 19:53:30 +01:00
} ;
2021-02-02 10:02:21 +01:00
2021-03-19 16:35:01 +01:00
class CPUClass {
public :
UINT16 QPI = 0 ;
UINT32 CpuFreqMHz = 0 ;
UINT16 CpuType = 0 ;
2021-03-26 10:43:15 +01:00
bool QEMU = 0 ;
bool UseARTFreq = 0 ;
2021-03-19 16:35:01 +01:00
UINT32 BusSpeed = 0 ; //in kHz
2021-03-26 10:43:15 +01:00
bool UserChange = 0 ;
2021-03-19 16:35:01 +01:00
UINT8 SavingMode = 0 ;
bool HWPEnable = false ;
undefinable_uint32 HWPValue = undefinable_uint32 ( ) ;
UINT8 TDP = 0 ;
2021-03-26 10:43:15 +01:00
bool TurboDisabled = 0 ;
2021-03-19 16:35:01 +01:00
undefinable_bool _EnableC6 = undefinable_bool ( ) ;
undefinable_bool _EnableC4 = undefinable_bool ( ) ;
undefinable_bool _EnableC2 = undefinable_bool ( ) ;
undefinable_uint16 _C3Latency = undefinable_uint16 ( ) ;
2021-04-11 07:18:52 +02:00
# if __cplusplus > 201703L
bool operator = = ( const CPUClass & ) const = default ;
# endif
bool isEqual ( const CPUClass & other ) const
{
if ( ! ( QPI = = other . QPI ) ) return false ;
if ( ! ( CpuFreqMHz = = other . CpuFreqMHz ) ) return false ;
if ( ! ( CpuType = = other . CpuType ) ) return false ;
if ( ! ( QEMU = = other . QEMU ) ) return false ;
if ( ! ( UseARTFreq = = other . UseARTFreq ) ) return false ;
if ( ! ( BusSpeed = = other . BusSpeed ) ) return false ;
if ( ! ( UserChange = = other . UserChange ) ) return false ;
if ( ! ( SavingMode = = other . SavingMode ) ) return false ;
if ( ! ( HWPEnable = = other . HWPEnable ) ) return false ;
if ( ! ( HWPValue = = other . HWPValue ) ) return false ;
if ( ! ( TDP = = other . TDP ) ) return false ;
if ( ! ( TurboDisabled = = other . TurboDisabled ) ) return false ;
if ( ! ( _EnableC6 = = other . _EnableC6 ) ) return false ;
if ( ! ( _EnableC4 = = other . _EnableC4 ) ) return false ;
if ( ! ( _EnableC2 = = other . _EnableC2 ) ) return false ;
if ( ! ( _C3Latency = = other . _C3Latency ) ) return false ;
return true ;
}
2021-03-27 19:53:30 +01:00
} ;
2021-03-19 16:35:01 +01:00
2021-03-25 15:32:56 +01:00
class SystemParametersClass {
public :
bool WithKexts = true ;
bool WithKextsIfNoFakeSMC = 0 ;
bool NoCaches = 0 ;
uint16_t BacklightLevel = 0xFFFF ;
bool BacklightLevelConfig = false ;
XString8 CustomUuid = XString8 ( ) ;
2021-03-27 19:53:30 +01:00
public : // temporary, must be protected:
UINT8 _InjectSystemID = 2 ; // 0=false, 1=true, other value = default.
2021-03-25 15:32:56 +01:00
public :
bool NvidiaWeb = 0 ;
friend class : : SETTINGS_DATA ;
friend unsigned long long : : GetUserSettings ( const TagDict * CfgDict , SETTINGS_DATA & gSettings ) ;
2021-04-11 07:18:52 +02:00
# if __cplusplus > 201703L
bool operator = = ( const SystemParametersClass & ) const = default ;
# endif
bool isEqual ( const SystemParametersClass & other ) const
{
if ( ! ( WithKexts = = other . WithKexts ) ) return false ;
if ( ! ( WithKextsIfNoFakeSMC = = other . WithKextsIfNoFakeSMC ) ) return false ;
if ( ! ( NoCaches = = other . NoCaches ) ) return false ;
if ( ! ( BacklightLevel = = other . BacklightLevel ) ) return false ;
if ( ! ( BacklightLevelConfig = = other . BacklightLevelConfig ) ) return false ;
if ( ! ( CustomUuid = = other . CustomUuid ) ) return false ;
if ( ! ( _InjectSystemID = = other . _InjectSystemID ) ) return false ;
if ( ! ( NvidiaWeb = = other . NvidiaWeb ) ) return false ;
return true ;
}
2021-03-27 19:53:30 +01:00
} ;
2021-03-26 10:43:15 +01:00
class GraphicsClass {
public :
class EDIDClass {
public :
bool InjectEDID = bool ( ) ;
XBuffer < UINT8 > CustomEDID = XBuffer < UINT8 > ( ) ;
UINT16 VendorEDID = UINT16 ( ) ;
UINT16 ProductEDID = UINT16 ( ) ;
UINT16 EdidFixHorizontalSyncPulseWidth = UINT16 ( ) ;
UINT8 EdidFixVideoInputSignal = UINT8 ( ) ;
2021-04-11 07:18:52 +02:00
# if __cplusplus > 201703L
bool operator = = ( const EDIDClass & ) const = default ;
# endif
bool isEqual ( const EDIDClass & other ) const
{
if ( ! ( InjectEDID = = other . InjectEDID ) ) return false ;
if ( ! ( CustomEDID = = other . CustomEDID ) ) return false ;
if ( ! ( VendorEDID = = other . VendorEDID ) ) return false ;
if ( ! ( ProductEDID = = other . ProductEDID ) ) return false ;
if ( ! ( EdidFixHorizontalSyncPulseWidth = = other . EdidFixHorizontalSyncPulseWidth ) ) return false ;
if ( ! ( EdidFixVideoInputSignal = = other . EdidFixVideoInputSignal ) ) return false ;
return true ;
}
2021-03-27 19:53:30 +01:00
} ;
2021-03-26 10:43:15 +01:00
class InjectAsDictClass {
public :
2021-03-28 22:13:43 +02:00
bool GraphicsInjector = bool ( ) ;
2021-03-26 10:43:15 +01:00
bool InjectIntel = bool ( ) ;
bool InjectATI = bool ( ) ;
bool InjectNVidia = bool ( ) ;
2021-04-11 07:18:52 +02:00
# if __cplusplus > 201703L
bool operator = = ( const InjectAsDictClass & ) const = default ;
# endif
bool isEqual ( const InjectAsDictClass & other ) const
{
if ( ! ( GraphicsInjector = = other . GraphicsInjector ) ) return false ;
if ( ! ( InjectIntel = = other . InjectIntel ) ) return false ;
if ( ! ( InjectATI = = other . InjectATI ) ) return false ;
if ( ! ( InjectNVidia = = other . InjectNVidia ) ) return false ;
return true ;
}
2021-03-27 19:53:30 +01:00
} ;
class GRAPHIC_CARD {
public :
UINT32 Signature = 0 ;
XString8 Model = XString8 ( ) ;
UINT32 Id = 0 ;
UINT32 SubId = 0 ;
UINT64 VideoRam = 0 ;
UINTN VideoPorts = 0 ;
bool LoadVBios = 0 ;
2021-04-11 07:18:52 +02:00
# if __cplusplus > 201703L
bool operator = = ( const GRAPHIC_CARD & ) const = default ;
# endif
bool isEqual ( const GRAPHIC_CARD & other ) const
{
if ( ! ( Signature = = other . Signature ) ) return false ;
if ( ! ( Model = = other . Model ) ) return false ;
if ( ! ( Id = = other . Id ) ) return false ;
if ( ! ( SubId = = other . SubId ) ) return false ;
if ( ! ( VideoRam = = other . VideoRam ) ) return false ;
if ( ! ( VideoPorts = = other . VideoPorts ) ) return false ;
if ( ! ( LoadVBios = = other . LoadVBios ) ) return false ;
return true ;
}
2021-03-27 19:53:30 +01:00
} ;
bool PatchVBios = bool ( ) ;
PatchVBiosBytesNewClass PatchVBiosBytes = PatchVBiosBytesNewClass ( ) ;
2021-03-28 22:13:43 +02:00
// undefinable_bool InjectAsBool = undefinable_bool();
2021-03-26 10:43:15 +01:00
bool RadeonDeInit = bool ( ) ;
bool LoadVBios = bool ( ) ;
UINT64 VRAM = bool ( ) ;
UINT32 RefCLK = UINT32 ( ) ;
XStringW FBName = XStringW ( ) ;
UINT16 VideoPorts = UINT16 ( ) ;
bool NvidiaGeneric = bool ( ) ;
bool NvidiaNoEFI = bool ( ) ;
bool NvidiaSingle = bool ( ) ;
2021-04-11 07:18:52 +02:00
XArray < UINT8 > Dcfg = XArray < UINT8 > ( ) ;
XArray < UINT8 > NVCAP = XArray < UINT8 > ( ) ;
2021-03-26 10:43:15 +01:00
INT8 BootDisplay = INT8 ( ) ;
UINT32 DualLink = UINT32 ( ) ;
UINT32 IgPlatform = UINT32 ( ) ; //could also be snb-platform-id
2021-03-27 19:53:30 +01:00
EDIDClass EDID = EDIDClass ( ) ;
InjectAsDictClass InjectAsDict = InjectAsDictClass ( ) ;
2021-03-28 22:13:43 +02:00
XObjArray < GRAPHIC_CARD > ATICardList = XObjArray < GRAPHIC_CARD > ( ) ;
XObjArray < GRAPHIC_CARD > NVIDIACardList = XObjArray < GRAPHIC_CARD > ( ) ;
2021-03-26 10:43:15 +01:00
2021-04-11 07:18:52 +02:00
GraphicsClass ( ) {
Dcfg . setSize ( 8 ) ;
memset ( Dcfg . data ( ) , 0 , 8 ) ;
NVCAP . setSize ( 20 ) ;
memset ( NVCAP . data ( ) , 0 , 20 ) ;
}
2021-03-26 10:43:15 +01:00
2021-04-11 07:18:52 +02:00
# if __cplusplus > 201703L
bool operator = = ( const GraphicsClass & ) const = default ;
# endif
bool isEqual ( const GraphicsClass & other ) const
{
if ( ! ( PatchVBios = = other . PatchVBios ) ) return false ;
if ( ! PatchVBiosBytes . isEqual ( other . PatchVBiosBytes ) ) return false ;
if ( ! ( RadeonDeInit = = other . RadeonDeInit ) ) return false ;
if ( ! ( LoadVBios = = other . LoadVBios ) ) return false ;
if ( ! ( VRAM = = other . VRAM ) ) return false ;
if ( ! ( RefCLK = = other . RefCLK ) ) return false ;
if ( ! ( FBName = = other . FBName ) ) return false ;
if ( ! ( VideoPorts = = other . VideoPorts ) ) return false ;
if ( ! ( NvidiaGeneric = = other . NvidiaGeneric ) ) return false ;
if ( ! ( NvidiaNoEFI = = other . NvidiaNoEFI ) ) return false ;
if ( ! ( NvidiaSingle = = other . NvidiaSingle ) ) return false ;
if ( ! ( Dcfg = = other . Dcfg ) ) return false ;
if ( ! ( NVCAP = = other . NVCAP ) ) return false ;
if ( ! ( BootDisplay = = other . BootDisplay ) ) return false ;
if ( ! ( DualLink = = other . DualLink ) ) return false ;
if ( ! ( IgPlatform = = other . IgPlatform ) ) return false ;
if ( ! EDID . isEqual ( other . EDID ) ) return false ;
if ( ! InjectAsDict . isEqual ( other . InjectAsDict ) ) return false ;
if ( ! ATICardList . isEqual ( other . ATICardList ) ) return false ;
if ( ! NVIDIACardList . isEqual ( other . NVIDIACardList ) ) return false ;
return true ;
}
2021-03-27 19:53:30 +01:00
//bool getGraphicsInjector() const { return InjectAsBool.isDefined() ? InjectAsBool.value() : InjectAsDict.GraphicsInjector; }
2021-03-28 22:13:43 +02:00
//bool InjectIntel() const { return InjectAsBool.isDefined() ? InjectAsBool.value() : InjectAsDict.InjectIntel; }
//bool InjectATI() const { return InjectAsBool.isDefined() ? InjectAsBool.value() : InjectAsDict.InjectATI; }
//bool InjectNVidia() const { return InjectAsBool.isDefined() ? InjectAsBool.value() : InjectAsDict.InjectNVidia; }
2021-03-26 10:43:15 +01:00
2021-03-27 19:53:30 +01:00
} ;
2021-03-26 10:43:15 +01:00
class DevicesClass {
public :
class AudioClass {
public :
2021-03-29 10:50:02 +02:00
bool ResetHDA = bool ( ) ;
2021-04-11 07:18:52 +02:00
bool HDAInjection = bool ( ) ;
2021-03-29 10:50:02 +02:00
INT32 HDALayoutId = INT32 ( ) ;
2021-04-11 07:18:52 +02:00
bool AFGLowPowerState = bool ( ) ;
# if __cplusplus > 201703L
bool operator = = ( const AudioClass & ) const = default ;
# endif
bool isEqual ( const AudioClass & other ) const
{
if ( ! ( ResetHDA = = other . ResetHDA ) ) return false ;
if ( ! ( HDAInjection = = other . HDAInjection ) ) return false ;
if ( ! ( HDALayoutId = = other . HDALayoutId ) ) return false ;
if ( ! ( AFGLowPowerState = = other . AFGLowPowerState ) ) return false ;
return true ;
}
2021-03-29 10:50:02 +02:00
} ;
class USBClass {
public :
bool USBInjection = bool ( ) ;
bool USBFixOwnership = bool ( ) ;
bool InjectClockID = bool ( ) ;
bool HighCurrent = bool ( ) ;
bool NameEH00 = bool ( ) ;
bool NameXH00 = bool ( ) ;
2021-04-11 07:18:52 +02:00
# if __cplusplus > 201703L
bool operator = = ( const USBClass & ) const = default ;
# endif
bool isEqual ( const USBClass & other ) const
{
if ( ! ( USBInjection = = other . USBInjection ) ) return false ;
if ( ! ( USBFixOwnership = = other . USBFixOwnership ) ) return false ;
if ( ! ( InjectClockID = = other . InjectClockID ) ) return false ;
if ( ! ( HighCurrent = = other . HighCurrent ) ) return false ;
if ( ! ( NameEH00 = = other . NameEH00 ) ) return false ;
if ( ! ( NameXH00 = = other . NameXH00 ) ) return false ;
return true ;
}
2021-03-29 10:50:02 +02:00
} ;
2021-04-01 10:06:53 +02:00
class AddPropertyClass
{
public :
uint32_t Device = 0 ;
XString8 Key = XString8 ( ) ;
XBuffer < uint8_t > Value = XBuffer < uint8_t > ( ) ;
TAG_TYPE ValueType = kTagTypeNone ;
INPUT_ITEM MenuItem = INPUT_ITEM ( ) ;
XString8 DevicePathAsString = XString8 ( ) ;
XString8 Label = XString8 ( ) ;
2021-04-11 07:18:52 +02:00
# if __cplusplus > 201703L
bool operator = = ( const AddPropertyClass & ) const = default ;
# endif
bool isEqual ( const AddPropertyClass & other ) const
{
if ( ! ( Device = = other . Device ) ) return false ;
if ( ! ( Key = = other . Key ) ) return false ;
if ( ! ( Value = = other . Value ) ) return false ;
if ( ! ( ValueType = = other . ValueType ) ) return false ;
if ( ! ( MenuItem = = other . MenuItem ) ) return false ;
if ( ! ( DevicePathAsString = = other . DevicePathAsString ) ) return false ;
if ( ! ( Label = = other . Label ) ) return false ;
return true ;
}
2021-04-01 10:06:53 +02:00
} ;
// This is shared by PropertiesClass and ArbitraryClass
class SimplePropertyClass
{
public :
XString8 Key = XString8 ( ) ;
XBuffer < uint8_t > Value = XBuffer < uint8_t > ( ) ;
TAG_TYPE ValueType = kTagTypeNone ; // only used in CreateMenuProps()
INPUT_ITEM MenuItem = INPUT_ITEM ( ) ; // Will get the Disabled value
2021-04-11 07:18:52 +02:00
# if __cplusplus > 201703L
bool operator = = ( const SimplePropertyClass & ) const = default ;
# endif
bool isEqual ( const SimplePropertyClass & other ) const
{
if ( ! ( Key = = other . Key ) ) return false ;
if ( ! ( Value = = other . Value ) ) return false ;
if ( ! ( ValueType = = other . ValueType ) ) return false ;
if ( ! ( MenuItem = = other . MenuItem ) ) return false ;
return true ;
}
2021-04-01 10:06:53 +02:00
} ;
// Property don't have Device. Before it was always Device = 0 to differentiate from Arbitrary properties.
2021-03-29 10:50:02 +02:00
class PropertiesClass {
public :
2021-04-01 10:06:53 +02:00
class PropertyClass
{
public :
bool Enabled = true ;
XStringW DevicePathAsString = XStringW ( ) ;
// XString8 Label = XString8(); // Label is the same as DevicePathAsString, so it's not needed.
XObjArray < SimplePropertyClass > propertiesArray = XObjArray < SimplePropertyClass > ( ) ;
EFI_DEVICE_PATH_PROTOCOL * getDevicePath ( ) const
{
EFI_DEVICE_PATH_PROTOCOL * DevicePath ;
2021-04-11 07:18:52 +02:00
if ( DevicePathAsString . isEqualIC ( " PrimaryGPU " ) ) {
2021-04-01 10:06:53 +02:00
DevicePath = DevicePathFromHandle ( gGraphics [ 0 ] . Handle ) ; // first gpu
2021-04-11 07:18:52 +02:00
} else if ( DevicePathAsString . isEqualIC ( " SecondaryGPU " ) & & NGFX > 1 ) {
2021-04-01 10:06:53 +02:00
DevicePath = DevicePathFromHandle ( gGraphics [ 1 ] . Handle ) ; // second gpu
} else {
DevicePath = ConvertTextToDevicePath ( DevicePathAsString . wc_str ( ) ) ; //TODO
}
return DevicePath ;
}
2021-04-11 07:18:52 +02:00
# if __cplusplus > 201703L
bool operator = = ( const PropertyClass & ) const = default ;
# endif
bool isEqual ( const PropertyClass & other ) const
{
if ( ! ( Enabled = = other . Enabled ) ) return false ;
if ( ! ( DevicePathAsString = = other . DevicePathAsString ) ) return false ;
// if ( !(Label == other.Label) ) return false;
if ( ! propertiesArray . isEqual ( other . propertiesArray ) ) return false ;
return true ;
}
2021-04-01 10:06:53 +02:00
} ;
XString8 propertiesAsString = XString8 ( ) ;
XObjArray < PropertyClass > PropertyArray = XObjArray < PropertyClass > ( ) ;
2021-04-11 07:18:52 +02:00
# if __cplusplus > 201703L
bool operator = = ( const PropertiesClass & ) const = default ;
# endif
bool isEqual ( const PropertiesClass & other ) const
{
if ( ! ( propertiesAsString = = other . propertiesAsString ) ) return false ;
if ( ! PropertyArray . isEqual ( other . PropertyArray ) ) return false ;
return true ;
}
2021-04-01 10:06:53 +02:00
} ;
class ArbitraryPropertyClass {
public :
uint32_t Device = 0 ;
XString8 Label = XString8 ( ) ;
XObjArray < SimplePropertyClass > CustomPropertyArray = XObjArray < SimplePropertyClass > ( ) ;
2021-04-11 07:18:52 +02:00
# if __cplusplus > 201703L
bool operator = = ( const ArbitraryPropertyClass & ) const = default ;
# endif
bool isEqual ( const ArbitraryPropertyClass & other ) const
{
if ( ! ( Device = = other . Device ) ) return false ;
if ( ! ( Label = = other . Label ) ) return false ;
if ( ! CustomPropertyArray . isEqual ( other . CustomPropertyArray ) ) return false ;
return true ;
}
2021-03-29 10:50:02 +02:00
} ;
class FakeIDClass {
public :
//PCI devices
UINT32 FakeATI = UINT32 ( ) ; //97
UINT32 FakeNVidia = UINT32 ( ) ;
UINT32 FakeIntel = UINT32 ( ) ;
UINT32 FakeLAN = UINT32 ( ) ; //100
UINT32 FakeWIFI = UINT32 ( ) ;
UINT32 FakeSATA = UINT32 ( ) ;
UINT32 FakeXHCI = UINT32 ( ) ; //103
UINT32 FakeIMEI = UINT32 ( ) ; //106
2021-04-11 07:18:52 +02:00
# if __cplusplus > 201703L
bool operator = = ( const FakeIDClass & ) const = default ;
# endif
bool isEqual ( const FakeIDClass & other ) const
{
if ( ! ( FakeATI = = other . FakeATI ) ) return false ;
if ( ! ( FakeNVidia = = other . FakeNVidia ) ) return false ;
if ( ! ( FakeIntel = = other . FakeIntel ) ) return false ;
if ( ! ( FakeLAN = = other . FakeLAN ) ) return false ;
if ( ! ( FakeWIFI = = other . FakeWIFI ) ) return false ;
if ( ! ( FakeSATA = = other . FakeSATA ) ) return false ;
if ( ! ( FakeXHCI = = other . FakeXHCI ) ) return false ;
if ( ! ( FakeIMEI = = other . FakeIMEI ) ) return false ;
return true ;
}
2021-03-29 10:50:02 +02:00
} ;
bool StringInjector = bool ( ) ;
bool IntelMaxBacklight = bool ( ) ;
bool IntelBacklight = bool ( ) ;
UINT32 IntelMaxValue = UINT32 ( ) ;
bool LANInjection = bool ( ) ;
bool HDMIInjection = bool ( ) ;
bool NoDefaultProperties = bool ( ) ;
bool UseIntelHDMI = bool ( ) ;
bool ForceHPET = bool ( ) ;
UINT32 DisableFunctions = UINT32 ( ) ;
XString8 AirportBridgeDeviceName = XString8 ( ) ;
AudioClass Audio = AudioClass ( ) ;
USBClass USB = USBClass ( ) ;
FakeIDClass FakeID = FakeIDClass ( ) ;
2021-04-01 10:06:53 +02:00
XObjArray < AddPropertyClass > AddPropertyArray = XObjArray < AddPropertyClass > ( ) ;
PropertiesClass Properties = PropertiesClass ( ) ;
XObjArray < ArbitraryPropertyClass > ArbitraryArray = XObjArray < ArbitraryPropertyClass > ( ) ;
2021-03-26 10:43:15 +01:00
2021-04-11 07:18:52 +02:00
# if __cplusplus > 201703L
bool operator = = ( const DevicesClass & ) const = default ;
# endif
bool isEqual ( const DevicesClass & other ) const
{
if ( ! ( StringInjector = = other . StringInjector ) ) return false ;
if ( ! ( IntelMaxBacklight = = other . IntelMaxBacklight ) ) return false ;
if ( ! ( IntelBacklight = = other . IntelBacklight ) ) return false ;
if ( ! ( IntelMaxValue = = other . IntelMaxValue ) ) return false ;
if ( ! ( LANInjection = = other . LANInjection ) ) return false ;
if ( ! ( HDMIInjection = = other . HDMIInjection ) ) return false ;
if ( ! ( NoDefaultProperties = = other . NoDefaultProperties ) ) return false ;
if ( ! ( UseIntelHDMI = = other . UseIntelHDMI ) ) return false ;
if ( ! ( ForceHPET = = other . ForceHPET ) ) return false ;
if ( ! ( DisableFunctions = = other . DisableFunctions ) ) return false ;
if ( ! ( AirportBridgeDeviceName = = other . AirportBridgeDeviceName ) ) return false ;
if ( ! Audio . isEqual ( other . Audio ) ) return false ;
if ( ! USB . isEqual ( other . USB ) ) return false ;
if ( ! FakeID . isEqual ( other . FakeID ) ) return false ;
if ( ! AddPropertyArray . isEqual ( other . AddPropertyArray ) ) return false ;
if ( ! Properties . isEqual ( other . Properties ) ) return false ;
if ( ! ArbitraryArray . isEqual ( other . ArbitraryArray ) ) return false ;
return true ;
}
2021-04-01 10:06:53 +02:00
// 2021-04 : Following is temporary to compare with old way of storing properties.
// Let's keep it few months until I am sure the refactoring isomorphic
private :
DEV_PROPERTY * ArbProperties = 0 ; // the old version.
public :
void FillDevicePropertiesOld ( SETTINGS_DATA & gSettings , const TagDict * DevicesDict ) ;
2021-04-05 14:00:17 +02:00
bool compareDevProperty ( const XString8 & label , const DEV_PROPERTY & oldProp , const DEV_PROPERTY & newProp ) const
2021-04-01 10:06:53 +02:00
{
2021-04-05 14:00:17 +02:00
if ( newProp . Device ! = oldProp . Device )
2021-04-01 10:06:53 +02:00
{
2021-04-05 14:00:17 +02:00
printf ( " %s.Device != \n " , label . c_str ( ) ) ;
2021-04-01 10:06:53 +02:00
return false ;
}
2021-04-05 14:00:17 +02:00
if ( newProp . Key | | oldProp . Key ) {
if ( ! newProp . Key | | ! oldProp . Key ) {
printf ( " %s.Key != \n " , label . c_str ( ) ) ;
2021-04-01 10:06:53 +02:00
return false ;
}
# ifdef JIEF_DEBUG
2021-04-05 14:00:17 +02:00
if ( strcmp ( oldProp . Key , " 10 " ) = = 0 ) {
2021-04-01 10:06:53 +02:00
printf ( " %s " , " " ) ;
}
# endif
2021-04-05 14:00:17 +02:00
if ( strcmp ( newProp . Key , oldProp . Key ) ! = 0 )
2021-04-01 10:06:53 +02:00
{
2021-04-05 14:00:17 +02:00
printf ( " %s.Key != \n " , label . c_str ( ) ) ;
2021-04-01 10:06:53 +02:00
return false ;
}
}
2021-04-05 14:00:17 +02:00
if ( newProp . ValueLen ! = oldProp . ValueLen )
2021-04-01 10:06:53 +02:00
{
2021-04-05 14:00:17 +02:00
printf ( " %s.Value.ValueLen %lld != %lld \n " , label . c_str ( ) , oldProp . ValueLen , newProp . ValueLen ) ;
2021-04-01 10:06:53 +02:00
return false ;
} else
{
2021-04-05 14:00:17 +02:00
if ( newProp . ValueLen > 0 ) {
if ( memcmp ( newProp . Value , oldProp . Value , oldProp . ValueLen ) ! = 0 )
2021-04-01 10:06:53 +02:00
{
2021-04-05 14:00:17 +02:00
printf ( " %s.Value != \n " , label . c_str ( ) ) ;
2021-04-01 10:06:53 +02:00
return false ;
}
}
}
2021-04-05 14:00:17 +02:00
if ( newProp . ValueType ! = oldProp . ValueType )
2021-04-01 10:06:53 +02:00
{
2021-04-05 14:00:17 +02:00
printf ( " %s.ValueType != \n " , label . c_str ( ) ) ;
2021-04-01 10:06:53 +02:00
return false ;
}
2021-04-05 14:00:17 +02:00
if ( newProp . Label | | oldProp . Label ) {
if ( ! newProp . Label | | ! oldProp . Label ) {
printf ( " %s.Label != \n " , label . c_str ( ) ) ;
2021-04-01 10:06:53 +02:00
return false ;
}
2021-04-05 14:00:17 +02:00
if ( strcmp ( newProp . Label , oldProp . Label ) ! = 0 )
2021-04-01 10:06:53 +02:00
{
2021-04-05 14:00:17 +02:00
printf ( " %s.Label != : old:%s new:%s \n " , label . c_str ( ) , oldProp . Label , newProp . Label ) ;
2021-04-01 10:06:53 +02:00
return false ;
}
}
2021-04-05 14:00:17 +02:00
if ( newProp . MenuItem . BValue ! = oldProp . MenuItem . BValue )
2021-04-01 10:06:53 +02:00
{
2021-04-05 14:00:17 +02:00
printf ( " %s.MenuItem.BValue != \n " , label . c_str ( ) ) ;
2021-04-01 10:06:53 +02:00
return false ;
}
2021-04-05 14:00:17 +02:00
DEV_PROPERTY * oldChild = oldProp . Child ;
DEV_PROPERTY * newChild = newProp . Child ;
2021-04-01 10:06:53 +02:00
size_t jdx = 0 ;
while ( oldChild & & newChild )
{
compareDevProperty ( S8Printf ( " %s.child[%zu] " , label . c_str ( ) , jdx ) , * oldChild , * newChild ) ;
oldChild = oldChild - > Next ;
newChild = newChild - > Next ;
jdx + + ;
}
if ( oldChild ! = newChild )
{
printf ( " %s.Child count \n " , label . c_str ( ) ) ;
return false ;
}
return true ;
}
bool compareOldAndCompatibleArb ( )
{
2021-04-03 16:42:49 +02:00
// {
// size_t oldArbIdx = 0;
// const DEV_PROPERTY* arb = ArbProperties;
// while ( arb ) {
// printf("ArbProperties[%zu].Key = %s\n", oldArbIdx++, arb->Key);
// arb = arb->Next;
// }
// }
2021-04-01 10:06:53 +02:00
const XObjArray < DEV_PROPERTY > compatibleArbProperties = getCompatibleArbProperty ( ) ;
size_t oldArbIdx = 0 ;
for ( size_t idx = 0 ; idx < compatibleArbProperties . size ( ) ; + + idx )
{
if ( ArbProperties = = NULL ) {
printf ( " ArbProperties.size < compatibleArbProperties.size() " ) ;
return false ;
}
if ( ! compareDevProperty ( S8Printf ( " ArbProperties[%zu] " , idx ) , * ArbProperties , compatibleArbProperties [ idx ] ) ) {
return false ;
}
+ + oldArbIdx ;
ArbProperties = ArbProperties - > Next ;
}
if ( ArbProperties ! = NULL ) {
printf ( " ArbProperties.size > compatibleArbProperties.size() " ) ;
return false ;
}
return true ;
}
public :
XObjArray < DEV_PROPERTY > getCompatibleArbProperty ( ) const
{
XObjArray < DEV_PROPERTY > arb ;
for ( size_t idx = ArbitraryArray . size ( ) ; idx - - > 0 ; ) {
const ArbitraryPropertyClass & newArb = ArbitraryArray [ idx ] ;
for ( size_t jdx = newArb . CustomPropertyArray . size ( ) ; jdx - - > 0 ; ) {
const SimplePropertyClass & newArbProp = newArb . CustomPropertyArray [ jdx ] ;
DEV_PROPERTY * newProp = new DEV_PROPERTY ( ) ;
newProp - > Device = newArb . Device ;
newProp - > Key = const_cast < char * > ( newArbProp . Key . c_str ( ) ) ; // const_cast !!! So ugly. It is just because it's temporary. If ArbProperties is modified after this, a lot a memory problem will happen. I could have done some strdup, but that way I don't use memory and don't have to free it.
newProp - > Value = const_cast < unsigned char * > ( newArbProp . Value . data ( ) ) ;
newProp - > ValueLen = newArbProp . Value . size ( ) ;
newProp - > ValueType = newArbProp . ValueType ;
newProp - > MenuItem . BValue = newArbProp . MenuItem . BValue ;
newProp - > Label = const_cast < char * > ( newArb . Label . c_str ( ) ) ;
arb . AddReference ( newProp , true ) ;
// printf("Add prop key=%s label=%s at index %zu\n", newProp->Key.c_str(), newProp->Label.c_str(), arb.size()-1);
}
}
// Non arb : device = 0
for ( size_t idx = Properties . PropertyArray . size ( ) ; idx - - > 0 ; ) {
const PropertiesClass : : PropertyClass & Prop = Properties . PropertyArray [ idx ] ;
DEV_PROPERTY * newProp = new DEV_PROPERTY ( ) ;
newProp - > Device = 0 ;
newProp - > Key = 0 ;
if ( Prop . Enabled ) newProp - > Label = XString8 ( Prop . DevicePathAsString ) . forgetDataWithoutFreeing ( ) ;
else newProp - > Label = S8Printf ( " !%ls " , Prop . DevicePathAsString . wc_str ( ) ) . forgetDataWithoutFreeing ( ) ;
newProp - > Child = NULL ;
for ( size_t jdx = Properties . PropertyArray [ idx ] . propertiesArray . size ( ) ; jdx - - > 0 ; ) {
const SimplePropertyClass & SubProp = Prop . propertiesArray [ jdx ] ;
DEV_PROPERTY * newSubProp = new DEV_PROPERTY ( ) ;
newSubProp - > Device = 0 ;
newSubProp - > Key = const_cast < char * > ( SubProp . Key . c_str ( ) ) ;
2021-04-05 14:00:17 +02:00
// newSubProp->Key = NULL;
2021-04-01 10:06:53 +02:00
newSubProp - > Value = const_cast < unsigned char * > ( SubProp . Value . data ( ) ) ;
newSubProp - > ValueLen = SubProp . Value . size ( ) ;
newSubProp - > ValueType = SubProp . ValueType ;
2021-04-05 14:00:17 +02:00
newSubProp - > MenuItem . BValue = true ;
2021-04-01 10:06:53 +02:00
if ( newProp - > Child ) {
DEV_PROPERTY * childs ;
for ( childs = newProp - > Child ; childs - > Next ; childs = childs - > Next ) ;
childs - > Next = newSubProp ;
} else {
newProp - > Child = newSubProp ;
}
}
arb . AddReference ( newProp , true ) ;
2021-04-05 14:00:17 +02:00
// MsgLog("Add prop %s at index %zu\n", newProp->Label, arb.size()-1);
2021-04-01 10:06:53 +02:00
}
return arb ;
} ;
2021-03-27 19:53:30 +01:00
} ;
2021-03-26 10:43:15 +01:00
2021-03-25 15:32:56 +01:00
class QuirksClass {
public :
2021-03-28 22:13:43 +02:00
class MMIOWhiteList
{
public :
UINTN address = 0 ;
XString8 comment = XString8 ( ) ;
bool enabled = 0 ;
2021-04-11 07:18:52 +02:00
# if __cplusplus > 201703L
bool operator = = ( const MMIOWhiteList & ) const = default ;
# endif
bool isEqual ( const MMIOWhiteList & other ) const
{
if ( ! ( address = = other . address ) ) return false ;
if ( ! ( comment = = other . comment ) ) return false ;
if ( ! ( enabled = = other . enabled ) ) return false ;
return true ;
}
} ;
class OcKernelQuirksClass
{
public :
// bool AppleCpuPmCfgLock = false;
// bool AppleXcpmCfgLock = false;
bool AppleXcpmExtraMsrs = false ;
bool AppleXcpmForceBoost = false ;
// bool CustomSmbiosGuid = false;
bool DisableIoMapper = false ;
bool DisableLinkeditJettison = false ;
// bool DisableRtcChecksum = false;
bool DummyPowerManagement = false ;
bool ExternalDiskIcons = false ;
bool IncreasePciBarSize = false ;
// bool LapicKernelPanic = false;
// bool PanicNoKextDump = false;
bool PowerTimeoutKernelPanic = false ;
bool ThirdPartyDrives = false ;
bool XhciPortLimit = false ;
# if __cplusplus > 201703L
bool operator = = ( const OcKernelQuirksClass & ) const = default ;
# endif
bool isEqual ( const OcKernelQuirksClass & other ) const
{
if ( ! ( AppleXcpmExtraMsrs = = other . AppleXcpmExtraMsrs ) ) return false ;
if ( ! ( AppleXcpmForceBoost = = other . AppleXcpmForceBoost ) ) return false ;
if ( ! ( DisableIoMapper = = other . DisableIoMapper ) ) return false ;
if ( ! ( DisableLinkeditJettison = = other . DisableLinkeditJettison ) ) return false ;
if ( ! ( DummyPowerManagement = = other . DummyPowerManagement ) ) return false ;
if ( ! ( ExternalDiskIcons = = other . ExternalDiskIcons ) ) return false ;
if ( ! ( IncreasePciBarSize = = other . IncreasePciBarSize ) ) return false ;
if ( ! ( PowerTimeoutKernelPanic = = other . PowerTimeoutKernelPanic ) ) return false ;
if ( ! ( ThirdPartyDrives = = other . ThirdPartyDrives ) ) return false ;
if ( ! ( XhciPortLimit = = other . XhciPortLimit ) ) return false ;
return true ;
}
2021-03-28 22:13:43 +02:00
} ;
2021-04-11 07:18:52 +02:00
class OcBooterQuirksClass
{
public :
bool AvoidRuntimeDefrag = false ;
bool DevirtualiseMmio = false ;
bool DisableSingleUser = false ;
bool DisableVariableWrite = false ;
bool DiscardHibernateMap = false ;
bool EnableSafeModeSlide = false ;
bool EnableWriteUnprotector = false ;
bool ForceExitBootServices = false ;
bool ProtectMemoryRegions = false ;
bool ProtectSecureBoot = false ;
bool ProtectUefiServices = false ;
bool ProvideCustomSlide = false ;
uint8_t ProvideMaxSlide = false ;
bool RebuildAppleMemoryMap = false ;
bool SetupVirtualMap = false ;
bool SignalAppleOS = false ;
bool SyncRuntimePermissions = false ;
# if __cplusplus > 201703L
bool operator = = ( const OcBooterQuirksClass & ) const = default ;
# endif
bool isEqual ( const OcBooterQuirksClass & other ) const
{
if ( ! ( AvoidRuntimeDefrag = = other . AvoidRuntimeDefrag ) ) return false ;
if ( ! ( DevirtualiseMmio = = other . DevirtualiseMmio ) ) return false ;
if ( ! ( DisableSingleUser = = other . DisableSingleUser ) ) return false ;
if ( ! ( DisableVariableWrite = = other . DisableVariableWrite ) ) return false ;
if ( ! ( DiscardHibernateMap = = other . DiscardHibernateMap ) ) return false ;
if ( ! ( EnableSafeModeSlide = = other . EnableSafeModeSlide ) ) return false ;
if ( ! ( EnableWriteUnprotector = = other . EnableWriteUnprotector ) ) return false ;
if ( ! ( ForceExitBootServices = = other . ForceExitBootServices ) ) return false ;
if ( ! ( ProtectSecureBoot = = other . ProtectSecureBoot ) ) return false ;
if ( ! ( ProtectUefiServices = = other . ProtectUefiServices ) ) return false ;
if ( ! ( ProtectUefiServices = = other . ProtectUefiServices ) ) return false ;
if ( ! ( ProvideCustomSlide = = other . ProvideCustomSlide ) ) return false ;
if ( ! ( ProvideMaxSlide = = other . ProvideMaxSlide ) ) return false ;
if ( ! ( RebuildAppleMemoryMap = = other . RebuildAppleMemoryMap ) ) return false ;
if ( ! ( SetupVirtualMap = = other . SetupVirtualMap ) ) return false ;
if ( ! ( SignalAppleOS = = other . SignalAppleOS ) ) return false ;
if ( ! ( SyncRuntimePermissions = = other . SyncRuntimePermissions ) ) return false ;
return true ;
}
} ;
2021-03-29 10:50:02 +02:00
bool FuzzyMatch = bool ( ) ;
XString8 OcKernelCache = XString8 ( ) ;
2021-03-28 22:13:43 +02:00
// UINTN MaxSlide;
2021-04-11 07:18:52 +02:00
OcKernelQuirksClass OcKernelQuirks = OcKernelQuirksClass ( ) ;
OcBooterQuirksClass OcBooterQuirks = OcBooterQuirksClass ( ) ;
2021-03-28 22:13:43 +02:00
XObjArray < MMIOWhiteList > mmioWhiteListArray = XObjArray < MMIOWhiteList > ( ) ;
2021-03-29 10:50:02 +02:00
UINT32 QuirksMask = 0 ;
2021-04-11 07:18:52 +02:00
# if __cplusplus > 201703L
bool operator = = ( const QuirksClass & ) const = default ;
# endif
bool isEqual ( const QuirksClass & other ) const
{
if ( ! ( FuzzyMatch = = other . FuzzyMatch ) ) return false ;
if ( ! ( OcKernelCache = = other . OcKernelCache ) ) return false ;
if ( ! ( OcKernelQuirks . isEqual ( other . OcKernelQuirks ) ) ) return false ;
if ( ! ( OcBooterQuirks . isEqual ( other . OcBooterQuirks ) ) ) return false ;
if ( ! mmioWhiteListArray . isEqual ( other . mmioWhiteListArray ) ) return false ;
if ( ! ( QuirksMask = = other . QuirksMask ) ) return false ;
return true ;
}
} ;
2021-03-28 22:13:43 +02:00
2021-03-26 10:43:15 +01:00
class RtVariablesClass {
public :
2021-03-27 19:53:30 +01:00
class RT_VARIABLES
{
public :
2021-03-28 11:12:43 +02:00
bool Disabled = bool ( ) ;
2021-03-27 19:53:30 +01:00
XString8 Comment = XStringW ( ) ;
XStringW Name = XStringW ( ) ;
2021-03-28 11:12:43 +02:00
EFI_GUID Guid = { 0 , 0 , 0 , { 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 } } ;
2021-04-11 07:18:52 +02:00
# if __cplusplus > 201703L
//bool operator == (const RT_VARIABLES&) const = default;
bool operator = = ( const RT_VARIABLES & other ) const { // no default... YET, because of EFI_GUID. // TODO: create a class wrapper around EFI_GUID, take the occasion to put conversion method in that new class
if ( ! ( Disabled = = other . Disabled ) ) return false ;
if ( ! ( Comment = = other . Comment ) ) return false ;
if ( ! ( Name = = other . Name ) ) return false ;
if ( memcmp ( & Guid , & other . Guid , sizeof ( Guid ) ) ! = 0 ) return false ;
return true ;
}
# endif
bool isEqual ( const RT_VARIABLES & other ) const
{
if ( ! ( Disabled = = other . Disabled ) ) return false ;
if ( ! ( Comment = = other . Comment ) ) return false ;
if ( ! ( Name = = other . Name ) ) return false ;
if ( memcmp ( & Guid , & other . Guid , sizeof ( Guid ) ) ! = 0 ) return false ;
return true ;
}
2021-03-27 19:53:30 +01:00
} ;
XString8 RtROMAsString = XString8 ( ) ;
XBuffer < UINT8 > RtROMAsData = XBuffer < UINT8 > ( ) ;
XString8 RtMLBSetting = XString8 ( ) ;
UINT32 CsrActiveConfig = UINT32 ( ) ;
UINT16 BooterConfig = UINT16 ( ) ;
XString8 BooterCfgStr = XString8 ( ) ;
2021-03-28 11:12:43 +02:00
XObjArray < RT_VARIABLES > BlockRtVariableArray = XObjArray < RT_VARIABLES > ( ) ;
2021-03-27 19:53:30 +01:00
bool GetLegacyLanAddress ( ) const {
2021-04-11 07:18:52 +02:00
return RtROMAsString . isEqualIC ( " UseMacAddr0 " ) | | RtROMAsString . isEqualIC ( " UseMacAddr1 " ) ;
2021-03-27 19:53:30 +01:00
}
2021-04-11 07:18:52 +02:00
# if __cplusplus > 201703L
bool operator = = ( const RtVariablesClass & ) const = default ;
# endif
bool isEqual ( const RtVariablesClass & other ) const
{
if ( ! ( RtROMAsString = = other . RtROMAsString ) ) return false ;
if ( ! ( RtROMAsData = = other . RtROMAsData ) ) return false ;
if ( ! ( RtMLBSetting = = other . RtMLBSetting ) ) return false ;
if ( ! ( CsrActiveConfig = = other . CsrActiveConfig ) ) return false ;
if ( ! ( BooterConfig = = other . BooterConfig ) ) return false ;
if ( ! ( BooterCfgStr = = other . BooterCfgStr ) ) return false ;
if ( ! BlockRtVariableArray . isEqual ( other . BlockRtVariableArray ) ) return false ;
return true ;
}
2021-03-26 10:43:15 +01:00
2021-03-27 19:53:30 +01:00
} ;
2021-03-26 10:43:15 +01:00
2021-04-03 16:42:49 +02:00
class SmbiosClass {
public :
2021-03-26 10:43:15 +01:00
2021-04-03 16:42:49 +02:00
class MemoryClass {
public :
2021-04-05 10:57:55 +02:00
UINT8 SlotCounts = UINT8 ( ) ;
UINT8 UserChannels = UINT8 ( ) ;
2021-04-11 07:18:52 +02:00
XObjArray < RAM_SLOT_INFO > User = XObjArray < RAM_SLOT_INFO > ( ) ;
MemoryClass ( ) {
for ( size_t idx = 0 ; idx < MAX_RAM_SLOTS ; + + idx ) { // TODO: refactor this. We don't need to store all invalid slot info
User . AddReference ( new RAM_SLOT_INFO ( ) , true ) ;
}
}
# if __cplusplus > 201703L
bool operator = = ( const MemoryClass & ) const = default ;
# endif
bool isEqual ( const MemoryClass & other ) const
{
if ( ! ( SlotCounts = = other . SlotCounts ) ) return false ;
if ( ! ( UserChannels = = other . UserChannels ) ) return false ;
if ( ! ( User . isEqual ( other . User ) ) ) return false ;
return true ;
}
2021-04-03 16:42:49 +02:00
} ;
2021-03-25 15:32:56 +01:00
2020-04-16 09:15:26 +02:00
// SMBIOS TYPE0
2021-04-05 10:57:55 +02:00
XString8 BiosVendor = XString8 ( ) ;
XString8 _RomVersion = XString8 ( ) ;
XString8 _EfiVersion = XString8 ( ) ;
XString8 _ReleaseDate = XString8 ( ) ;
2020-04-16 09:15:26 +02:00
// SMBIOS TYPE1
2021-04-05 10:57:55 +02:00
XString8 ManufactureName = XString8 ( ) ;
XString8 ProductName = XString8 ( ) ;
XString8 VersionNr = XString8 ( ) ;
XString8 SerialNr = XString8 ( ) ;
XString8 SmUUID = XString8 ( ) ;
XString8 FamilyName = XString8 ( ) ;
2020-04-16 09:15:26 +02:00
// SMBIOS TYPE2
2021-04-05 10:57:55 +02:00
XString8 BoardManufactureName = XString8 ( ) ;
XString8 BoardSerialNumber = XString8 ( ) ;
XString8 BoardNumber = XString8 ( ) ; //Board-ID
XString8 LocationInChassis = XString8 ( ) ;
XString8 BoardVersion = XString8 ( ) ;
UINT8 BoardType = UINT8 ( ) ;
2020-04-16 09:15:26 +02:00
// SMBIOS TYPE3
2021-04-05 10:57:55 +02:00
bool Mobile = bool ( ) ;
UINT8 ChassisType = UINT8 ( ) ;
XString8 ChassisManufacturer = XString8 ( ) ;
XString8 ChassisAssetTag = XString8 ( ) ;
2020-04-16 09:15:26 +02:00
// SMBIOS TYPE4
// SMBIOS TYPE17
2021-04-05 10:57:55 +02:00
UINT16 SmbiosVersion = UINT16 ( ) ;
INT8 Attribute = INT8 ( ) ;
2021-04-03 16:42:49 +02:00
// These were set but never used.
// XString8 MemoryManufacturer;
// XString8 MemorySerialNumber;
// XString8 MemoryPartNumber;
// XString8 MemorySpeed;
2020-04-16 09:15:26 +02:00
// SMBIOS TYPE131
// SMBIOS TYPE132
2021-04-03 16:42:49 +02:00
bool TrustSMBIOS = 0 ;
2021-04-05 10:57:55 +02:00
bool InjectMemoryTables = bool ( ) ; // same as Memory.SlotCounts
2020-04-16 09:15:26 +02:00
// SMBIOS TYPE133
2021-04-05 10:57:55 +02:00
UINT64 gPlatformFeature = UINT64 ( ) ;
2020-04-16 09:15:26 +02:00
// PatchTableType11
2021-04-05 10:57:55 +02:00
bool NoRomInfo = bool ( ) ;
2020-04-16 09:15:26 +02:00
2021-04-05 10:57:55 +02:00
UINT32 gFwFeatures = UINT32 ( ) ;
UINT32 gFwFeaturesMask = UINT32 ( ) ;
2021-04-03 16:42:49 +02:00
MemoryClass Memory = MemoryClass ( ) ;
2021-04-11 07:18:52 +02:00
XObjArray < SLOT_DEVICE > SlotDevices = XObjArray < SLOT_DEVICE > ( ) ; //assume DEV_XXX, Arpt=6
2020-04-16 09:15:26 +02:00
2021-04-03 16:42:49 +02:00
// These are calculated from ApplePlatformData
2021-04-11 07:18:52 +02:00
// CHAR8 RPlt[8] = {0};
// CHAR8 RBr[8] = {0};
// UINT8 EPCI[4] = {0};
// UINT8 REV[6] = {0};
SmbiosClass ( ) {
for ( size_t idx = 0 ; idx < 16 ; + + idx ) {
SlotDevices . AddReference ( new SLOT_DEVICE ( ) , true ) ;
}
}
# if __cplusplus > 201703L
bool operator = = ( const SmbiosClass & ) const = default ;
# endif
bool isEqual ( const SmbiosClass & other ) const
{
// SMBIOS TYPE0
if ( ! ( BiosVendor = = other . BiosVendor ) ) return false ;
if ( ! ( _RomVersion = = other . _RomVersion ) ) return false ;
if ( ! ( _EfiVersion = = other . _EfiVersion ) ) return false ;
if ( ! ( _ReleaseDate = = other . _ReleaseDate ) ) return false ;
// SMBIOS TYPE1
if ( ! ( ManufactureName = = other . ManufactureName ) ) return false ;
if ( ! ( ProductName = = other . ProductName ) ) return false ;
if ( ! ( VersionNr = = other . VersionNr ) ) return false ;
if ( ! ( SerialNr = = other . SerialNr ) ) return false ;
if ( ! ( SmUUID = = other . SmUUID ) ) return false ;
if ( ! ( FamilyName = = other . FamilyName ) ) return false ;
// SMBIOS TYPE2
if ( ! ( BoardManufactureName = = other . BoardManufactureName ) ) return false ;
if ( ! ( BoardSerialNumber = = other . BoardSerialNumber ) ) return false ;
if ( ! ( BoardNumber = = other . BoardNumber ) ) return false ;
if ( ! ( LocationInChassis = = other . LocationInChassis ) ) return false ;
if ( ! ( BoardVersion = = other . BoardVersion ) ) return false ;
if ( ! ( BoardType = = other . BoardType ) ) return false ;
// SMBIOS TYPE3
if ( ! ( Mobile = = other . Mobile ) ) return false ;
if ( ! ( ChassisType = = other . ChassisType ) ) return false ;
if ( ! ( ChassisManufacturer = = other . ChassisManufacturer ) ) return false ;
if ( ! ( ChassisAssetTag = = other . ChassisAssetTag ) ) return false ;
// SMBIOS TYPE17
if ( ! ( SmbiosVersion = = other . SmbiosVersion ) ) return false ;
if ( ! ( Attribute = = other . Attribute ) ) return false ;
// SMBIOS TYPE132
if ( ! ( TrustSMBIOS = = other . TrustSMBIOS ) ) return false ;
if ( ! ( InjectMemoryTables = = other . InjectMemoryTables ) ) return false ;
// SMBIOS TYPE133
if ( ! ( gPlatformFeature = = other . gPlatformFeature ) ) return false ;
// PatchTableType11
if ( ! ( NoRomInfo = = other . NoRomInfo ) ) return false ;
if ( ! ( gFwFeatures = = other . gFwFeatures ) ) return false ;
if ( ! ( gFwFeaturesMask = = other . gFwFeaturesMask ) ) return false ;
if ( ! Memory . isEqual ( other . Memory ) ) return false ;
if ( ! SlotDevices . isEqual ( other . SlotDevices ) ) return false ;
// if ( memcmp(RPlt, other.RPlt, sizeof(RPlt)) != 0 ) return false;
// if ( memcmp(RBr, other.RBr, sizeof(RBr)) != 0 ) return false;
// if ( memcmp(EPCI, other.EPCI, sizeof(EPCI)) != 0 ) return false;
// if ( memcmp(REV, other.REV, sizeof(REV)) != 0 ) return false;
return true ;
}
2020-04-16 09:15:26 +02:00
2021-04-03 16:42:49 +02:00
} ;
class BootGraphicsClass {
public :
2021-04-11 07:18:52 +02:00
UINT32 DefaultBackgroundColor = 0 ;
UINT32 UIScale = 0 ;
UINT32 EFILoginHiDPI = 0 ;
// UINT8 flagstate[32] = {0};
uint32_t _flagstate = uint32_t ( ) ;
BootGraphicsClass ( ) {
// flagstate.memset(0, 32);
}
# if __cplusplus > 201703L
bool operator = = ( const BootGraphicsClass & ) const = default ;
# endif
bool isEqual ( const BootGraphicsClass & other ) const
{
if ( ! ( DefaultBackgroundColor = = other . DefaultBackgroundColor ) ) return false ;
if ( ! ( UIScale = = other . UIScale ) ) return false ;
if ( ! ( EFILoginHiDPI = = other . EFILoginHiDPI ) ) return false ;
if ( _flagstate ! = other . _flagstate ) return false ;
return true ;
}
2021-04-03 16:42:49 +02:00
} ;
2020-04-16 09:15:26 +02:00
2021-04-03 16:42:49 +02:00
BootClass Boot = BootClass ( ) ;
ACPIClass ACPI = ACPIClass ( ) ;
GUIClass GUI = GUIClass ( ) ;
CPUClass CPU = CPUClass ( ) ;
SystemParametersClass SystemParameters = SystemParametersClass ( ) ;
KERNEL_AND_KEXT_PATCHES KernelAndKextPatches = KERNEL_AND_KEXT_PATCHES ( ) ;
GraphicsClass Graphics = GraphicsClass ( ) ;
XStringWArray DisabledDriverArray = XStringWArray ( ) ;
QuirksClass Quirks = QuirksClass ( ) ;
RtVariablesClass RtVariables = RtVariablesClass ( ) ;
DevicesClass Devices = DevicesClass ( ) ;
SmbiosClass Smbios = SmbiosClass ( ) ;
BootGraphicsClass BootGraphics = BootGraphicsClass ( ) ;
2020-04-16 09:15:26 +02:00
2020-09-29 14:15:11 +02:00
2021-04-03 16:42:49 +02:00
//other
// UINT16 DropOEM_DSM; // not used anymore.
// BOOLEAN LpcTune; // never set to true.
2020-08-11 14:43:53 +02:00
2021-04-03 16:42:49 +02:00
SETTINGS_DATA ( ) { }
2021-04-11 07:18:52 +02:00
// SETTINGS_DATA(const SETTINGS_DATA& other) = delete; // Can be defined if needed
// const SETTINGS_DATA& operator = ( const SETTINGS_DATA & ) = delete; // Can be defined if needed
# if __cplusplus > 201703L
bool operator = = ( const SETTINGS_DATA & ) const = default ;
# endif
bool isEqual ( const SETTINGS_DATA & other ) const
{
if ( ! Boot . isEqual ( other . Boot ) ) return false ;
if ( ! ACPI . isEqual ( other . ACPI ) ) return false ;
if ( ! GUI . isEqual ( other . GUI ) ) return false ;
if ( ! CPU . isEqual ( other . CPU ) ) return false ;
if ( ! SystemParameters . isEqual ( other . SystemParameters ) ) return false ;
if ( ! KernelAndKextPatches . isEqual ( other . KernelAndKextPatches ) ) return false ;
if ( ! Graphics . isEqual ( other . Graphics ) ) return false ;
if ( ! ( DisabledDriverArray = = other . DisabledDriverArray ) ) return false ;
if ( ! Quirks . isEqual ( other . Quirks ) ) return false ;
if ( ! RtVariables . isEqual ( other . RtVariables ) ) return false ;
if ( ! Devices . isEqual ( other . Devices ) ) return false ;
if ( ! Smbios . isEqual ( other . Smbios ) ) return false ;
if ( ! BootGraphics . isEqual ( other . BootGraphics ) ) return false ;
return true ;
}
2020-08-13 14:07:40 +02:00
2020-08-11 14:43:53 +02:00
~ SETTINGS_DATA ( ) { }
2020-09-23 15:47:47 +02:00
const XString8 & getUUID ( ) ;
const XString8 & getUUID ( EFI_GUID * efiGuid ) ;
2020-11-18 22:49:02 +01:00
// If CustomUuid is defined, return false by default
// If SmUUID is defined, return true by default.
2020-09-23 15:47:47 +02:00
bool ShouldInjectSystemID ( ) {
2021-03-28 11:12:43 +02:00
if ( SystemParameters . CustomUuid . notEmpty ( ) & & SystemParameters . CustomUuid ! = nullGuidAsString ) {
2021-03-27 19:53:30 +01:00
if ( SystemParameters . _InjectSystemID = = 2 ) return false ;
else return SystemParameters . _InjectSystemID ;
2020-09-23 15:47:47 +02:00
}
2021-04-03 16:42:49 +02:00
if ( Smbios . SmUUID . isEmpty ( ) | | Smbios . SmUUID = = nullGuidAsString ) return false ;
2021-03-27 19:53:30 +01:00
if ( SystemParameters . _InjectSystemID = = 2 ) return true ;
return SystemParameters . _InjectSystemID ;
2020-09-23 15:47:47 +02:00
}
2021-03-27 19:53:30 +01:00
bool getEnableC6 ( ) const {
if ( CPU . _EnableC6 . isDefined ( ) ) return CPU . _EnableC6 . value ( ) ;
return ACPI . SSDT . _EnableC6 ;
}
bool getEnableC4 ( ) const {
if ( CPU . _EnableC4 . isDefined ( ) ) return CPU . _EnableC4 . value ( ) ;
return ACPI . SSDT . _EnableC4 ;
}
bool getEnableC2 ( ) const {
if ( CPU . _EnableC2 . isDefined ( ) ) return CPU . _EnableC2 . value ( ) ;
return ACPI . SSDT . _EnableC2 ;
}
bool getC3Latency ( ) const {
if ( CPU . _C3Latency . isDefined ( ) ) return CPU . _C3Latency . value ( ) ;
return ACPI . SSDT . _C3Latency ;
}
2020-08-11 14:43:53 +02:00
} ;
2020-04-16 09:15:26 +02:00
2020-08-15 15:47:56 +02:00
//#pragma GCC diagnostic ignored "-Wpadded"
2020-08-13 14:07:40 +02:00
2020-04-16 09:15:26 +02:00
typedef struct _DRIVERS_FLAGS {
BOOLEAN EmuVariableLoaded ;
BOOLEAN VideoLoaded ;
BOOLEAN PartitionLoaded ;
BOOLEAN MemFixLoaded ;
BOOLEAN AptioFixLoaded ;
BOOLEAN AptioFix2Loaded ;
BOOLEAN AptioFix3Loaded ;
BOOLEAN AptioMemFixLoaded ;
BOOLEAN HFSLoaded ;
BOOLEAN APFSLoaded ;
} DRIVERS_FLAGS ;
// ACPI/PATCHED/AML
2020-08-09 17:55:30 +02:00
class ACPI_PATCHED_AML
2020-04-16 09:15:26 +02:00
{
2020-08-09 17:55:30 +02:00
public :
2021-03-23 20:59:30 +01:00
XString8 FileName = XString8 ( ) ;
INPUT_ITEM MenuItem = INPUT_ITEM ( ) ;
2020-08-09 17:55:30 +02:00
2021-03-23 20:59:30 +01:00
ACPI_PATCHED_AML ( ) { } ;
2020-08-09 17:55:30 +02:00
ACPI_PATCHED_AML ( const ACPI_PATCHED_AML & other ) = delete ; // Can be defined if needed
const ACPI_PATCHED_AML & operator = ( const ACPI_PATCHED_AML & ) = delete ; // Can be defined if needed
~ ACPI_PATCHED_AML ( ) { }
2020-04-16 09:15:26 +02:00
} ;
// syscl - Side load kext
2020-08-09 17:55:30 +02:00
class SIDELOAD_KEXT
{
public :
2020-09-16 01:01:53 +02:00
XObjArray < SIDELOAD_KEXT > PlugInList ;
2021-02-11 12:41:59 +01:00
XStringW FileName = XStringW ( ) ;
XStringW KextDirNameUnderOEMPath = XStringW ( ) ;
XStringW Version = XStringW ( ) ;
2021-02-06 18:16:46 +01:00
INPUT_ITEM MenuItem = INPUT_ITEM ( ) ;
2020-08-09 17:55:30 +02:00
2021-02-11 12:41:59 +01:00
SIDELOAD_KEXT ( ) : PlugInList ( ) { } ;
2020-08-09 17:55:30 +02:00
SIDELOAD_KEXT ( const SIDELOAD_KEXT & other ) = delete ; // Can be defined if needed
const SIDELOAD_KEXT & operator = ( const SIDELOAD_KEXT & ) = delete ; // Can be defined if needed
2020-09-16 01:01:53 +02:00
~ SIDELOAD_KEXT ( ) { }
2020-04-16 09:15:26 +02:00
} ;
2020-08-31 08:22:21 +02:00
2021-03-26 10:43:15 +01:00
//extern XObjArray<RT_VARIABLES> gSettings.RtVariables.BlockRtVariableArray;
2020-08-31 09:07:36 +02:00
extern XObjArray < HDA_OUTPUTS > AudioList ;
2020-04-04 14:27:02 +02:00
2020-08-31 09:22:11 +02:00
extern XStringWArray ThemeNameArray ;
2020-04-04 14:27:02 +02:00
extern CHAR16 * ConfigsList [ 20 ] ;
extern CHAR16 * DsdtsList [ 20 ] ;
extern UINTN DsdtsNum ;
extern UINTN ConfigsNum ;
2020-05-26 19:12:54 +02:00
//extern INTN ScrollButtonsHeight;
//extern INTN ScrollBarDecorationsHeight;
//extern INTN ScrollScrollDecorationsHeight;
//extern INTN LayoutBannerOffset;
//extern INTN LayoutButtonOffset;
//extern INTN LayoutTextOffset;
2020-04-04 14:27:02 +02:00
// this should go in a globals, not in settings
extern INTN OldChosenTheme ;
extern INTN OldChosenConfig ;
extern INTN OldChosenDsdt ;
extern UINTN OldChosenAudio ;
extern BOOLEAN SavePreBootLog ;
extern UINT8 DefaultAudioVolume ;
2020-02-29 08:30:21 +01:00
2020-04-16 09:15:26 +02:00
extern GFX_PROPERTIES gGraphics [ ] ;
extern HDA_PROPERTIES gAudios [ ] ;
extern UINTN NGFX ;
extern UINTN NHDA ;
//extern UINT16 gCPUtype;
extern SETTINGS_DATA gSettings ;
extern BOOLEAN gFirmwareClover ;
extern DRIVERS_FLAGS gDriversFlags ;
extern EFI_EDID_DISCOVERED_PROTOCOL * EdidDiscovered ;
//extern UINT8 *gEDID;
extern UINTN gEvent ;
extern UINT16 gBacklightLevel ;
2020-05-11 08:30:45 +02:00
//extern BOOLEAN defDSM;
//extern UINT16 dropDSM;
2020-04-16 09:15:26 +02:00
2020-08-25 17:35:19 +02:00
extern TagDict * gConfigDict [ ] ;
2020-04-16 09:15:26 +02:00
// ACPI/PATCHED/AML
2021-03-23 20:59:30 +01:00
extern XObjArray < ACPI_PATCHED_AML > ACPIPatchedAML ;
2020-04-16 09:15:26 +02:00
// SysVariables
//extern SYSVARIABLES *SysVariables;
// Hold theme fixed IconFormat / extension
extern CHAR16 * IconFormat ;
2020-04-16 13:19:37 +02:00
2020-04-16 09:15:26 +02:00
extern CONST CHAR16 * gFirmwareRevision ;
2020-04-16 13:19:37 +02:00
extern CONST CHAR8 * gRevisionStr ;
2020-04-16 14:24:21 +02:00
extern CONST CHAR8 * gFirmwareBuildDate ;
extern CONST CHAR8 * gBuildInfo ;
2020-10-28 18:11:50 +01:00
extern const LString8 gBuildId ;
extern const LString8 path_independant ;
extern const LString8 gBuildIdGrepTag ;
2020-04-16 09:15:26 +02:00
extern BOOLEAN ResumeFromCoreStorage ;
2021-03-25 15:32:56 +01:00
//extern BOOLEAN gRemapSmBiosIsRequire; // syscl: pass argument for Dell SMBIOS here
2020-04-16 09:15:26 +02:00
extern EMU_VARIABLE_CONTROL_PROTOCOL * gEmuVariableControl ;
2020-04-26 11:39:41 +02:00
//
// config module
//
2020-08-09 17:55:30 +02:00
class REFIT_CONFIG
{
public :
2021-03-22 13:40:01 +01:00
UINTN DisableFlags = 0 ; //to disable some volume types (optical, firewire etc)
BOOLEAN Quiet = true ;
BOOLEAN SpecialBootMode = false ; // content of nvram var "aptiofixflag"
2020-08-09 17:55:30 +02:00
2021-02-06 18:16:46 +01:00
BOOLEAN gBootChanged = FALSE ;
BOOLEAN gThemeChanged = FALSE ;
BOOLEAN NeedPMfix = FALSE ;
2021-02-11 12:41:59 +01:00
ACPI_DROP_TABLE * ACPIDropTables = NULL ;
2021-02-06 18:16:46 +01:00
2021-03-20 15:29:34 +01:00
UINT8 CustomLogoType = 0 ; // this will be initialized with gSettings.Boot.CustomBoot and set back to CUSTOM_BOOT_DISABLED if CustomLogo could not be loaded or decoded (see afterGetUserSettings)
2021-03-15 10:02:34 +01:00
XImage * CustomLogo = 0 ;
2021-02-06 18:16:46 +01:00
2021-03-15 10:02:34 +01:00
bool DropSSDT = 0 ; // init with gSettings.Boot.DropSSDTSetting. Put back to false is one table is dropped (see afterGetUserSettings)
UINT8 SecureBoot = 0 ;
UINT8 SecureBootSetupMode = 0 ;
2021-02-06 18:16:46 +01:00
2021-03-19 14:04:19 +01:00
BOOLEAN SetTable132 = 0 ;
2021-03-19 16:35:01 +01:00
BOOLEAN HWP = 0 ;
bool EnableC6 = 0 ;
bool EnableC4 = 0 ;
bool EnableC2 = 0 ;
uint16_t C3Latency = 0 ;
2021-03-19 14:04:19 +01:00
2021-03-22 13:40:01 +01:00
XObjArray < CUSTOM_LOADER_ENTRY > CustomEntries = XObjArray < CUSTOM_LOADER_ENTRY > ( ) ;
2021-03-23 20:59:30 +01:00
XObjArray < CUSTOM_LEGACY_ENTRY > CustomLegacyEntries = XObjArray < CUSTOM_LEGACY_ENTRY > ( ) ;
XObjArray < CUSTOM_TOOL_ENTRY > CustomToolsEntries = XObjArray < CUSTOM_TOOL_ENTRY > ( ) ;
INTN Codepage = 0xC0 ;
INTN CodepageSize = 0xC0 ;
2021-03-22 13:40:01 +01:00
2021-03-25 15:32:56 +01:00
bool KPKernelPm = bool ( ) ;
bool KPAppleIntelCPUPM = bool ( ) ;
2021-03-26 10:43:15 +01:00
XBuffer < UINT8 > RtROM = XBuffer < UINT8 > ( ) ;
XString8 RtMLB = XString8 ( ) ;
2021-03-27 19:53:30 +01:00
bool Turbo = true ;
2021-03-22 13:40:01 +01:00
2021-04-03 16:42:49 +02:00
XString8 OEMProductFromSmbios = XString8 ( ) ;
XString8 OEMVendorFromSmbios = XString8 ( ) ;
XString8 OEMBoardFromSmbios = XString8 ( ) ;
UINT8 EnabledCores = 0 ;
// XStringW ConfigName; // Set but never used
UINT32 OptionsBits = 0 ;
UINT32 FlagsBits = 0 ;
2021-04-05 10:57:55 +02:00
XStringW BlockKexts = XStringW ( ) ;
2021-04-03 16:42:49 +02:00
// KernelAndKextPatches
BOOLEAN KextPatchesAllowed = 0 ;
BOOLEAN KernelPatchesAllowed = 0 ; //From GUI: Only for user patches, not internal Clover
XString8 RomVersionUsed = XString8 ( ) ;
XString8 EfiVersionUsed = XString8 ( ) ;
XString8 ReleaseDateUsed = XString8 ( ) ;
2021-04-11 07:18:52 +02:00
UINT8 flagstate [ 32 ] = { 0 } ;
MACHINE_TYPES CurrentModel = MaxMachineType ;
2021-04-03 16:42:49 +02:00
2021-03-22 13:40:01 +01:00
REFIT_CONFIG ( ) { } ;
2020-09-27 13:52:38 +02:00
REFIT_CONFIG ( const REFIT_CONFIG & other ) = delete ; // Can be defined if needed
2020-08-09 17:55:30 +02:00
const REFIT_CONFIG & operator = ( const REFIT_CONFIG & ) = delete ; // Can be defined if needed
~ REFIT_CONFIG ( ) { }
2021-02-02 10:02:21 +01:00
bool isFastBoot ( ) { return SpecialBootMode | | gSettings . Boot . FastBoot ; }
2020-08-09 17:55:30 +02:00
} ;
2020-04-26 11:39:41 +02:00
extern REFIT_CONFIG GlobalConfig ;
2020-04-16 09:15:26 +02:00
2020-02-29 08:30:21 +01:00
EFI_STATUS
SetFSInjection (
IN LOADER_ENTRY * Entry
) ;
2020-10-03 19:02:31 +02:00
void
2020-02-29 08:30:21 +01:00
SetDevices (
LOADER_ENTRY * Entry
) ;
//
// check if this entry corresponds to Boot# variable and then set BootCurrent
//
2020-10-03 19:02:31 +02:00
void
2020-03-10 10:45:17 +01:00
SetBootCurrent ( REFIT_MENU_ITEM_BOOTNUM * LoadedEntry ) ;
2020-02-29 08:30:21 +01:00
2021-02-04 15:04:31 +01:00
XString8 GetAuthRootDmg ( const EFI_FILE & dir , const XStringW & path ) ;
2020-02-29 08:30:21 +01:00
2021-02-04 15:04:31 +01:00
MacOsVersion GetMacOSVersionFromFolder ( const EFI_FILE & dir , const XStringW & path ) ;
2021-01-31 10:50:23 +01:00
MacOsVersion GetOSVersion ( int LoaderType , const XStringW & APFSTargetUUID , const REFIT_VOLUME * Volume , XString8 * BuildVersionPtr ) ;
inline MacOsVersion GetOSVersion ( IN LOADER_ENTRY * Entry ) { return GetOSVersion ( Entry - > LoaderType , Entry - > APFSTargetUUID , Entry - > Volume , & Entry - > BuildVersion ) ; } ;
2020-04-04 14:27:02 +02:00
2020-04-16 09:15:26 +02:00
UINT32
GetCrc32 (
UINT8 * Buffer ,
UINTN Size
) ;
2020-10-03 19:02:31 +02:00
void
GetDevices ( void ) ;
2020-04-16 09:15:26 +02:00
2020-04-27 11:50:49 +02:00
CONST XStringW
GetOSIconName (
2020-11-12 22:25:56 +01:00
const MacOsVersion & OSVersion
2020-04-16 09:15:26 +02:00
) ;
EFI_STATUS
GetRootUUID (
IN OUT REFIT_VOLUME * Volume
) ;
EFI_STATUS
GetEarlyUserSettings (
2021-02-06 18:16:46 +01:00
const TagDict * CfgDict ,
SETTINGS_DATA & gSettings
2020-04-16 09:15:26 +02:00
) ;
EFI_STATUS
2021-02-06 18:16:46 +01:00
GetUserSettings ( const TagDict * CfgDict , SETTINGS_DATA & gSettings ) ;
2020-04-16 09:15:26 +02:00
2020-08-09 17:55:30 +02:00
XStringW
2020-04-16 09:15:26 +02:00
GetOtherKextsDir ( BOOLEAN On ) ;
2020-11-12 22:25:56 +01:00
XStringW GetOSVersionKextsDir ( const MacOsVersion & OSVersion ) ;
2020-04-16 09:15:26 +02:00
EFI_STATUS
InjectKextsFromDir (
EFI_STATUS Status ,
CHAR16 * SrcDir
) ;
2020-10-03 19:02:31 +02:00
void
2020-04-16 09:15:26 +02:00
ParseLoadOptions (
2020-08-09 17:55:30 +02:00
OUT XStringW * ConfName ,
2020-08-25 17:35:19 +02:00
OUT TagDict * * Dict
2020-04-16 09:15:26 +02:00
) ;
EFI_STATUS
2020-10-03 19:02:31 +02:00
SaveSettings ( void ) ;
2020-04-16 09:15:26 +02:00
/** return true if a given os contains '.' as separator,
and then match components of the current booted OS . Also allow 10.10 . x format meaning all revisions
of the 10.10 OS */
2020-11-12 22:25:56 +01:00
//BOOLEAN IsOSValid(const XString8& MatchOS, const MacOsVersion& CurrOS);
2020-04-16 09:15:26 +02:00
//get default boot
2020-10-03 19:02:31 +02:00
void GetBootFromOption ( void ) ;
2020-04-16 09:15:26 +02:00
EFI_STATUS
LoadUserSettings (
2020-08-09 17:55:30 +02:00
const XStringW & ConfName ,
2020-08-25 17:35:19 +02:00
TagDict * * dict
2020-04-16 09:15:26 +02:00
) ;
2021-04-03 16:42:49 +02:00
void ParseSMBIOSSettings ( SETTINGS_DATA & gSettings , const TagDict * DictPointer ) ;
2020-04-16 09:15:26 +02:00
2020-04-04 14:27:02 +02:00
2020-08-25 17:35:19 +02:00
void testConfigPlist ( ) ;
2020-04-04 14:27:02 +02:00
# endif