/* * ConfigPlist.h * * Created on: Oct 9, 2020 * Author: jief */ #ifndef _CONFIGPLISTCLASS_H_ #define _CONFIGPLISTCLASS_H_ #include "../../include/VolumeTypes.h" #include "../../include/OSTypes.h" #include "../../include/OSFlags.h" #include "../../include/BootTypes.h" #include "../../include/Languages.h" #include "../../include/Devices.h" #include "../../include/QuirksCodes.h" #include "../../include/TagTypes.h" #include "../../include/Pci.h" #include "../../entry_scan/loader.h" // for KERNEL_SCAN_xxx constants #include // for Smbios memory type #include "../../Platform/guid.h" #include "../../entry_scan/secureboot.h" extern "C" { #include } #include "../../Platform/cpu.h" //#include "../../Platform/nvidia.h" extern UINT8 default_NVCAP[]; // dependecy problem. TODO extern const UINT8 default_dcfg_0[]; extern const UINT8 default_dcfg_1[]; #include "../../cpp_lib/undefinable.h" #include "../../cpp_lib/XmlLiteSimpleTypes.h" #include "../../cpp_lib/XmlLiteCompositeTypes.h" #include "../../cpp_lib/XmlLiteDictTypes.h" #include "../../cpp_lib/XmlLiteArrayTypes.h" #include "../../cpp_lib/XmlLiteUnionTypes.h" #include "../../cpp_lib/XmlLiteParser.h" #include "../../cpp_foundation/XString.h" #include "../../cpp_foundation/XStringArray.h" #include "../../cpp_foundation/XArray.h" #include "../../cpp_foundation/XObjArray.h" #include "../../Platform/Utils.h" #include "ConfigPlistAbstract.h" #include "SMBIOSPlist.h" class ConfigPlistClass : public ConfigPlistAbstractClass { using super = ConfigPlistAbstractClass; public: #include "Config_ACPI.h" #include "Config_Boot.h" #include "Config_BootGraphics.h" #include "Config_CPU.h" #include "Config_Devices.h" #include "Config_GUI.h" #include "Config_Graphics.h" #include "Config_KernelAndKextPatches.h" #include "Config_SystemParameters.h" #include "Config_RtVariables.h" #include "Config_Quirks.h" ACPI_Class ACPI = ACPI_Class(); Boot_Class Boot = Boot_Class(); BootGraphics_Class BootGraphics = BootGraphics_Class(); CPU_Class CPU = CPU_Class(); DevicesClass Devices = DevicesClass(); XmlStringWArray DisableDrivers = XmlStringWArray(); GUI_Class GUI = GUI_Class(); Graphics_Class Graphics; // Cannot do this : = Graphics_Class(*this); because of a MSVC bug. Compilation failed at ssignment of m_fields because all member become const. KernelAndKextPatches_Class KernelAndKextPatches = KernelAndKextPatches_Class(); protected: SmbiosPlistClass::SmbiosDictClass SMBIOS = SmbiosPlistClass::SmbiosDictClass(); // use the same dict as for standalone smbios plist public: SystemParameters_Class SystemParameters = SystemParameters_Class(); RtVariables_Class RtVariables = RtVariables_Class(); Quirks_Class Quirks = Quirks_Class(); XmlDictField m_fields[13] = { {"ACPI", ACPI}, {"Boot", Boot}, {"BootGraphics", BootGraphics}, {"CPU", CPU}, {"Devices", Devices}, {"DisableDrivers", DisableDrivers}, {"GUI", GUI}, {"Graphics", Graphics}, {"KernelAndKextPatches", KernelAndKextPatches}, {"SMBIOS", SMBIOS}, {"SystemParameters", SystemParameters}, {"RtVariables", RtVariables}, {"Quirks", Quirks}, }; public: ConfigPlistClass() : Graphics(*this) {} virtual void getFields(XmlDictField** fields, size_t* nb) override { *fields = m_fields; *nb = sizeof(m_fields)/sizeof(m_fields[0]); }; virtual XBool validate(XmlLiteParser* xmlLiteParser, const XString8& xmlPath, const XmlParserPosition& keyPos, XBool generateErrors) override { if ( !super::validate(xmlLiteParser, xmlPath, keyPos, generateErrors) ) return false; if ( !isDefined() ) return true; if ( LString8(ACPI.DSDT.Fixes.ACPI_DSDT_Fixe_Array[29].getNewName()) != "FixHeaders_20000000"_XS8 ) { log_technical_bug("ACPI_DSDT_Fixe_Array[29].getNewName() != \"FixHeaders_20000000\""); } if ( ACPI.getFixHeaders().isDefined() && ACPI.DSDT.Fixes.ACPI_DSDT_Fixe_Array[29].isDefined() ) { if ( ACPI.getFixHeaders().value() == ACPI.DSDT.Fixes.ACPI_DSDT_Fixe_Array[29].dgetEnabled() ) { xmlLiteParser->addWarning(generateErrors, S8Printf("FixHeaders exists in ACPI and ACPI/DSDT/Fixes. Delete FixHeaders from ACPI/DSDT/Fixes.")); }else{ if ( ACPI.getFixHeaders().value() || ACPI.DSDT.Fixes.ACPI_DSDT_Fixe_Array[29].dgetEnabled() ) { if ( ACPI.getFixHeaders().value() ) { xmlLiteParser->addWarning(generateErrors, S8Printf("FixHeaders exists in ACPI and ACPI/DSDT/Fixes with a different value. Using value of ACPI/FixHeaders. Delete FixHeaders from ACPI/DSDT/Fixes.")); }else{ xmlLiteParser->addWarning(generateErrors, S8Printf("FixHeaders exists in ACPI and ACPI/DSDT/Fixes with a different value. Using value of ACPI/DSDT/Fixes/FixHeaders. Delete FixHeaders from ACPI/DSDT/Fixes and set ACPI/FixHeaders to true.")); } } } } return true; } const decltype(DisableDrivers)::ValueType& dgetDisabledDriverArray() const { return DisableDrivers.isDefined() ? DisableDrivers.value() : DisableDrivers.nullValue; }; const decltype(SMBIOS)& getSMBIOS() const { return SMBIOS; }; }; #endif /* _CONFIGPLISTCLASS_H_ */