OpenCorePkg/Library/OcConfigurationLib/OcConfigurationLib.c
John Davis cde37269aa
VBIOS patching via ForceResolution option (#144)
* BiosVideo: Initial Intel patching functions

* BiosVideo: Implement patch protocol

* BiosVideo: Read EDID from VBE

* BiosVideo: Fix previous commits

* OpenDuet: Fix Windows builds

* BiosVideo: Fix MSVC warnings

* BiosVideo: Pull max resolution from EDID

* BiosVideo: Patch based on PCI vendor ID

* BiosVideo: Fix more MSVC warnings

* OcMiscLib: Try to fix OpenDuet MSVC compilation

* BiosVideo: Fix incorrect return status

* OpenDuet: Create OcDebugLogLibNull library

* Protocol: Rename OC_VBIOS_PATCH_PROTOCOL to OC_FORCE_RESOLUTION_PROTOCOL

* OpenCore: Add ForceResolution option

* BiosVideo: Fix consistency of height/width parameters

* Includes: Mark height/width as optional

* BiosVideo: Cleanup misc issues

* Docs: Add support note
2020-10-26 19:18:06 -05:00

778 lines
38 KiB
C

/** @file
Copyright (C) 2019, vit9696. All rights reserved.
All rights reserved.
This program and the accompanying materials
are licensed and made available under the terms and conditions of the BSD License
which accompanies this distribution. The full text of the license may be found at
http://opensource.org/licenses/bsd-license.php
THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
**/
#include <Library/OcConfigurationLib.h>
OC_STRUCTORS (OC_ACPI_ADD_ENTRY, ())
OC_ARRAY_STRUCTORS (OC_ACPI_ADD_ARRAY)
OC_STRUCTORS (OC_ACPI_DELETE_ENTRY, ())
OC_ARRAY_STRUCTORS (OC_ACPI_DELETE_ARRAY)
OC_STRUCTORS (OC_ACPI_PATCH_ENTRY, ())
OC_ARRAY_STRUCTORS (OC_ACPI_PATCH_ARRAY)
OC_STRUCTORS (OC_ACPI_QUIRKS, ())
OC_STRUCTORS (OC_ACPI_CONFIG, ())
OC_STRUCTORS (OC_BOOTER_WL_ENTRY, ())
OC_ARRAY_STRUCTORS (OC_BOOTER_WL_ARRAY)
OC_STRUCTORS (OC_BOOTER_QUIRKS, ())
OC_STRUCTORS (OC_BOOTER_CONFIG, ())
OC_MAP_STRUCTORS (OC_DEV_PROP_ADD_MAP)
OC_STRUCTORS (OC_DEV_PROP_DELETE_ENTRY, ())
OC_MAP_STRUCTORS (OC_DEV_PROP_DELETE_MAP)
OC_STRUCTORS (OC_DEV_PROP_CONFIG, ())
OC_STRUCTORS (OC_KERNEL_ADD_ENTRY, ())
OC_ARRAY_STRUCTORS (OC_KERNEL_ADD_ARRAY)
OC_STRUCTORS (OC_KERNEL_BLOCK_ENTRY, ())
OC_ARRAY_STRUCTORS (OC_KERNEL_BLOCK_ARRAY)
OC_STRUCTORS (OC_KERNEL_EMULATE, ())
OC_ARRAY_STRUCTORS (OC_KERNEL_FORCE_ARRAY)
OC_STRUCTORS (OC_KERNEL_PATCH_ENTRY, ())
OC_ARRAY_STRUCTORS (OC_KERNEL_PATCH_ARRAY)
OC_STRUCTORS (OC_KERNEL_QUIRKS, ())
OC_STRUCTORS (OC_KERNEL_SCHEME, ())
OC_STRUCTORS (OC_KERNEL_CONFIG, ())
OC_ARRAY_STRUCTORS (OC_MISC_BLESS_ARRAY)
OC_STRUCTORS (OC_MISC_BOOT, ())
OC_STRUCTORS (OC_MISC_DEBUG, ())
OC_STRUCTORS (OC_MISC_SECURITY, ())
OC_STRUCTORS (OC_MISC_TOOLS_ENTRY, ())
OC_ARRAY_STRUCTORS (OC_MISC_TOOLS_ARRAY)
OC_STRUCTORS (OC_MISC_CONFIG, ())
OC_MAP_STRUCTORS (OC_NVRAM_ADD_MAP)
OC_STRUCTORS (OC_NVRAM_DELETE_ENTRY, ())
OC_MAP_STRUCTORS (OC_NVRAM_DELETE_MAP)
OC_STRUCTORS (OC_NVRAM_LEGACY_ENTRY, ())
OC_MAP_STRUCTORS (OC_NVRAM_LEGACY_MAP)
OC_STRUCTORS (OC_NVRAM_CONFIG, ())
OC_STRUCTORS (OC_PLATFORM_GENERIC_CONFIG, ())
OC_STRUCTORS (OC_PLATFORM_DATA_HUB_CONFIG, ())
OC_STRUCTORS (OC_PLATFORM_MEMORY_DEVICE_ENTRY, ())
OC_ARRAY_STRUCTORS (OC_PLATFORM_MEMORY_DEVICES_ARRAY)
OC_STRUCTORS (OC_PLATFORM_MEMORY_CONFIG, ())
OC_STRUCTORS (OC_PLATFORM_NVRAM_CONFIG, ())
OC_STRUCTORS (OC_PLATFORM_SMBIOS_CONFIG, ())
OC_STRUCTORS (OC_PLATFORM_CONFIG, ())
OC_ARRAY_STRUCTORS (OC_UEFI_DRIVER_ARRAY)
OC_STRUCTORS (OC_UEFI_APFS, ())
OC_STRUCTORS (OC_UEFI_AUDIO, ())
OC_STRUCTORS (OC_UEFI_INPUT, ())
OC_STRUCTORS (OC_UEFI_OUTPUT, ())
OC_STRUCTORS (OC_UEFI_PROTOCOL_OVERRIDES, ())
OC_STRUCTORS (OC_UEFI_RSVD_ENTRY, ())
OC_ARRAY_STRUCTORS (OC_UEFI_RSVD_ARRAY)
OC_STRUCTORS (OC_UEFI_QUIRKS, ())
OC_STRUCTORS (OC_UEFI_CONFIG, ())
OC_STRUCTORS (OC_GLOBAL_CONFIG, ())
//
// ACPI configuration support
//
STATIC
OC_SCHEMA
mAcpiAddSchemaEntry[] = {
OC_SCHEMA_STRING_IN ("Comment", OC_ACPI_ADD_ENTRY, Comment),
OC_SCHEMA_BOOLEAN_IN ("Enabled", OC_ACPI_ADD_ENTRY, Enabled),
OC_SCHEMA_STRING_IN ("Path", OC_ACPI_ADD_ENTRY, Path)
};
STATIC
OC_SCHEMA
mAcpiAddSchema = OC_SCHEMA_DICT (NULL, mAcpiAddSchemaEntry);
STATIC
OC_SCHEMA
mAcpiDeleteSchemaEntry[] = {
OC_SCHEMA_BOOLEAN_IN ("All", OC_ACPI_DELETE_ENTRY, All),
OC_SCHEMA_STRING_IN ("Comment", OC_ACPI_DELETE_ENTRY, Comment),
OC_SCHEMA_BOOLEAN_IN ("Enabled", OC_ACPI_DELETE_ENTRY, Enabled),
OC_SCHEMA_DATAF_IN ("OemTableId", OC_ACPI_DELETE_ENTRY, OemTableId),
OC_SCHEMA_INTEGER_IN ("TableLength", OC_ACPI_DELETE_ENTRY, TableLength),
OC_SCHEMA_DATAF_IN ("TableSignature", OC_ACPI_DELETE_ENTRY, TableSignature),
};
STATIC
OC_SCHEMA
mAcpiDeleteSchema = OC_SCHEMA_DICT (NULL, mAcpiDeleteSchemaEntry);
STATIC
OC_SCHEMA
mAcpiPatchSchemaEntry[] = {
OC_SCHEMA_STRING_IN ("Comment", OC_ACPI_PATCH_ENTRY, Comment),
OC_SCHEMA_INTEGER_IN ("Count", OC_ACPI_PATCH_ENTRY, Count),
OC_SCHEMA_BOOLEAN_IN ("Enabled", OC_ACPI_PATCH_ENTRY, Enabled),
OC_SCHEMA_DATA_IN ("Find", OC_ACPI_PATCH_ENTRY, Find),
OC_SCHEMA_INTEGER_IN ("Limit", OC_ACPI_PATCH_ENTRY, Limit),
OC_SCHEMA_DATA_IN ("Mask", OC_ACPI_PATCH_ENTRY, Mask),
OC_SCHEMA_DATAF_IN ("OemTableId", OC_ACPI_PATCH_ENTRY, OemTableId),
OC_SCHEMA_DATA_IN ("Replace", OC_ACPI_PATCH_ENTRY, Replace),
OC_SCHEMA_DATA_IN ("ReplaceMask", OC_ACPI_PATCH_ENTRY, ReplaceMask),
OC_SCHEMA_INTEGER_IN ("Skip", OC_ACPI_PATCH_ENTRY, Skip),
OC_SCHEMA_INTEGER_IN ("TableLength", OC_ACPI_PATCH_ENTRY, TableLength),
OC_SCHEMA_DATAF_IN ("TableSignature", OC_ACPI_PATCH_ENTRY, TableSignature),
};
STATIC
OC_SCHEMA
mAcpiPatchSchema = OC_SCHEMA_DICT (NULL, mAcpiPatchSchemaEntry);
STATIC
OC_SCHEMA
mAcpiQuirksSchema[] = {
OC_SCHEMA_BOOLEAN_IN ("FadtEnableReset", OC_GLOBAL_CONFIG, Acpi.Quirks.FadtEnableReset),
OC_SCHEMA_BOOLEAN_IN ("NormalizeHeaders", OC_GLOBAL_CONFIG, Acpi.Quirks.NormalizeHeaders),
OC_SCHEMA_BOOLEAN_IN ("RebaseRegions", OC_GLOBAL_CONFIG, Acpi.Quirks.RebaseRegions),
OC_SCHEMA_BOOLEAN_IN ("ResetHwSig", OC_GLOBAL_CONFIG, Acpi.Quirks.ResetHwSig),
OC_SCHEMA_BOOLEAN_IN ("ResetLogoStatus", OC_GLOBAL_CONFIG, Acpi.Quirks.ResetLogoStatus),
};
STATIC
OC_SCHEMA
mAcpiConfigurationSchema[] = {
OC_SCHEMA_ARRAY_IN ("Add", OC_GLOBAL_CONFIG, Acpi.Add, &mAcpiAddSchema),
OC_SCHEMA_ARRAY_IN ("Delete", OC_GLOBAL_CONFIG, Acpi.Delete, &mAcpiDeleteSchema),
OC_SCHEMA_ARRAY_IN ("Patch", OC_GLOBAL_CONFIG, Acpi.Patch, &mAcpiPatchSchema),
OC_SCHEMA_DICT ("Quirks", mAcpiQuirksSchema),
};
//
// Apple bootloader configuration
//
STATIC
OC_SCHEMA
mBooterWhitelistEntrySchema[] = {
OC_SCHEMA_INTEGER_IN ("Address", OC_BOOTER_WL_ENTRY, Address),
OC_SCHEMA_STRING_IN ("Comment", OC_BOOTER_WL_ENTRY, Comment),
OC_SCHEMA_BOOLEAN_IN ("Enabled", OC_BOOTER_WL_ENTRY, Enabled)
};
STATIC
OC_SCHEMA
mBooterWhitelistSchema = OC_SCHEMA_DICT (NULL, mBooterWhitelistEntrySchema);
STATIC
OC_SCHEMA
mBooterQuirksSchema[] = {
OC_SCHEMA_BOOLEAN_IN ("AvoidRuntimeDefrag", OC_GLOBAL_CONFIG, Booter.Quirks.AvoidRuntimeDefrag),
OC_SCHEMA_BOOLEAN_IN ("DevirtualiseMmio", OC_GLOBAL_CONFIG, Booter.Quirks.DevirtualiseMmio),
OC_SCHEMA_BOOLEAN_IN ("DisableSingleUser", OC_GLOBAL_CONFIG, Booter.Quirks.DisableSingleUser),
OC_SCHEMA_BOOLEAN_IN ("DisableVariableWrite", OC_GLOBAL_CONFIG, Booter.Quirks.DisableVariableWrite),
OC_SCHEMA_BOOLEAN_IN ("DiscardHibernateMap", OC_GLOBAL_CONFIG, Booter.Quirks.DiscardHibernateMap),
OC_SCHEMA_BOOLEAN_IN ("EnableSafeModeSlide", OC_GLOBAL_CONFIG, Booter.Quirks.EnableSafeModeSlide),
OC_SCHEMA_BOOLEAN_IN ("EnableWriteUnprotector", OC_GLOBAL_CONFIG, Booter.Quirks.EnableWriteUnprotector),
OC_SCHEMA_BOOLEAN_IN ("ForceExitBootServices", OC_GLOBAL_CONFIG, Booter.Quirks.ForceExitBootServices),
OC_SCHEMA_BOOLEAN_IN ("ProtectMemoryRegions", OC_GLOBAL_CONFIG, Booter.Quirks.ProtectMemoryRegions),
OC_SCHEMA_BOOLEAN_IN ("ProtectSecureBoot", OC_GLOBAL_CONFIG, Booter.Quirks.ProtectSecureBoot),
OC_SCHEMA_BOOLEAN_IN ("ProtectUefiServices", OC_GLOBAL_CONFIG, Booter.Quirks.ProtectUefiServices),
OC_SCHEMA_BOOLEAN_IN ("ProvideCustomSlide", OC_GLOBAL_CONFIG, Booter.Quirks.ProvideCustomSlide),
OC_SCHEMA_INTEGER_IN ("ProvideMaxSlide", OC_GLOBAL_CONFIG, Booter.Quirks.ProvideMaxSlide),
OC_SCHEMA_BOOLEAN_IN ("RebuildAppleMemoryMap", OC_GLOBAL_CONFIG, Booter.Quirks.RebuildAppleMemoryMap),
OC_SCHEMA_BOOLEAN_IN ("SetupVirtualMap", OC_GLOBAL_CONFIG, Booter.Quirks.SetupVirtualMap),
OC_SCHEMA_BOOLEAN_IN ("SignalAppleOS", OC_GLOBAL_CONFIG, Booter.Quirks.SignalAppleOS),
OC_SCHEMA_BOOLEAN_IN ("SyncRuntimePermissions", OC_GLOBAL_CONFIG, Booter.Quirks.SyncRuntimePermissions),
};
STATIC
OC_SCHEMA
mBooterConfigurationSchema[] = {
OC_SCHEMA_ARRAY_IN ("MmioWhitelist", OC_GLOBAL_CONFIG, Booter.MmioWhitelist, &mBooterWhitelistSchema),
OC_SCHEMA_DICT ("Quirks", mBooterQuirksSchema),
};
//
// Device properties support
//
STATIC
OC_SCHEMA
mDevicePropertiesAddEntrySchema = OC_SCHEMA_MDATA (NULL);
STATIC
OC_SCHEMA
mDevicePropertiesAddSchema = OC_SCHEMA_MAP (NULL, &mDevicePropertiesAddEntrySchema);
STATIC
OC_SCHEMA
mDevicePropertiesDeleteEntrySchema = OC_SCHEMA_STRING (NULL);
STATIC
OC_SCHEMA
mDevicePropertiesDeleteSchema = OC_SCHEMA_ARRAY (NULL, &mDevicePropertiesDeleteEntrySchema);
STATIC
OC_SCHEMA
mDevicePropertiesSchema[] = {
OC_SCHEMA_MAP_IN ("Add", OC_GLOBAL_CONFIG, DeviceProperties.Add, &mDevicePropertiesAddSchema),
OC_SCHEMA_MAP_IN ("Delete", OC_GLOBAL_CONFIG, DeviceProperties.Delete, &mDevicePropertiesDeleteSchema)
};
//
// Kernel space configuration support
//
STATIC
OC_SCHEMA
mKernelAddSchemaEntry[] = {
OC_SCHEMA_STRING_IN ("Arch", OC_KERNEL_ADD_ENTRY, Arch),
OC_SCHEMA_STRING_IN ("BundlePath", OC_KERNEL_ADD_ENTRY, BundlePath),
OC_SCHEMA_STRING_IN ("Comment", OC_KERNEL_ADD_ENTRY, Comment),
OC_SCHEMA_BOOLEAN_IN ("Enabled", OC_KERNEL_ADD_ENTRY, Enabled),
OC_SCHEMA_STRING_IN ("ExecutablePath", OC_KERNEL_ADD_ENTRY, ExecutablePath),
OC_SCHEMA_STRING_IN ("MaxKernel", OC_KERNEL_ADD_ENTRY, MaxKernel),
OC_SCHEMA_STRING_IN ("MinKernel", OC_KERNEL_ADD_ENTRY, MinKernel),
OC_SCHEMA_STRING_IN ("PlistPath", OC_KERNEL_ADD_ENTRY, PlistPath),
};
STATIC
OC_SCHEMA
mKernelAddSchema = OC_SCHEMA_DICT (NULL, mKernelAddSchemaEntry);
STATIC
OC_SCHEMA
mKernelBlockSchemaEntry[] = {
OC_SCHEMA_STRING_IN ("Arch", OC_KERNEL_BLOCK_ENTRY, Arch),
OC_SCHEMA_STRING_IN ("Comment", OC_KERNEL_BLOCK_ENTRY, Comment),
OC_SCHEMA_BOOLEAN_IN ("Enabled", OC_KERNEL_BLOCK_ENTRY, Enabled),
OC_SCHEMA_STRING_IN ("Identifier", OC_KERNEL_BLOCK_ENTRY, Identifier),
OC_SCHEMA_STRING_IN ("MaxKernel", OC_KERNEL_BLOCK_ENTRY, MaxKernel),
OC_SCHEMA_STRING_IN ("MinKernel", OC_KERNEL_BLOCK_ENTRY, MinKernel),
};
STATIC
OC_SCHEMA
mKernelBlockSchema = OC_SCHEMA_DICT (NULL, mKernelBlockSchemaEntry);
STATIC
OC_SCHEMA
mKernelEmulateSchema[] = {
OC_SCHEMA_DATAF_IN ("Cpuid1Data", OC_GLOBAL_CONFIG, Kernel.Emulate.Cpuid1Data),
OC_SCHEMA_DATAF_IN ("Cpuid1Mask", OC_GLOBAL_CONFIG, Kernel.Emulate.Cpuid1Mask),
OC_SCHEMA_BOOLEAN_IN ("DummyPowerManagement", OC_GLOBAL_CONFIG, Kernel.Emulate.DummyPowerManagement),
OC_SCHEMA_STRING_IN ("MaxKernel", OC_GLOBAL_CONFIG, Kernel.Emulate.MaxKernel),
OC_SCHEMA_STRING_IN ("MinKernel", OC_GLOBAL_CONFIG, Kernel.Emulate.MinKernel),
};
STATIC
OC_SCHEMA
mKernelForceSchemaEntry[] = {
OC_SCHEMA_STRING_IN ("Arch", OC_KERNEL_ADD_ENTRY, Arch),
OC_SCHEMA_STRING_IN ("BundlePath", OC_KERNEL_ADD_ENTRY, BundlePath),
OC_SCHEMA_STRING_IN ("Comment", OC_KERNEL_ADD_ENTRY, Comment),
OC_SCHEMA_BOOLEAN_IN ("Enabled", OC_KERNEL_ADD_ENTRY, Enabled),
OC_SCHEMA_STRING_IN ("ExecutablePath", OC_KERNEL_ADD_ENTRY, ExecutablePath),
OC_SCHEMA_STRING_IN ("Identifier", OC_KERNEL_ADD_ENTRY, Identifier),
OC_SCHEMA_STRING_IN ("MaxKernel", OC_KERNEL_ADD_ENTRY, MaxKernel),
OC_SCHEMA_STRING_IN ("MinKernel", OC_KERNEL_ADD_ENTRY, MinKernel),
OC_SCHEMA_STRING_IN ("PlistPath", OC_KERNEL_ADD_ENTRY, PlistPath),
};
STATIC
OC_SCHEMA
mKernelForceSchema = OC_SCHEMA_DICT (NULL, mKernelForceSchemaEntry);
STATIC
OC_SCHEMA
mKernelPatchSchemaEntry[] = {
OC_SCHEMA_STRING_IN ("Arch", OC_KERNEL_PATCH_ENTRY, Arch),
OC_SCHEMA_STRING_IN ("Base", OC_KERNEL_PATCH_ENTRY, Base),
OC_SCHEMA_STRING_IN ("Comment", OC_KERNEL_PATCH_ENTRY, Comment),
OC_SCHEMA_INTEGER_IN ("Count", OC_KERNEL_PATCH_ENTRY, Count),
OC_SCHEMA_BOOLEAN_IN ("Enabled", OC_KERNEL_PATCH_ENTRY, Enabled),
OC_SCHEMA_DATA_IN ("Find", OC_KERNEL_PATCH_ENTRY, Find),
OC_SCHEMA_STRING_IN ("Identifier", OC_KERNEL_PATCH_ENTRY, Identifier),
OC_SCHEMA_INTEGER_IN ("Limit", OC_KERNEL_PATCH_ENTRY, Limit),
OC_SCHEMA_DATA_IN ("Mask", OC_KERNEL_PATCH_ENTRY, Mask),
OC_SCHEMA_STRING_IN ("MaxKernel", OC_KERNEL_PATCH_ENTRY, MaxKernel),
OC_SCHEMA_STRING_IN ("MinKernel", OC_KERNEL_PATCH_ENTRY, MinKernel),
OC_SCHEMA_DATA_IN ("Replace", OC_KERNEL_PATCH_ENTRY, Replace),
OC_SCHEMA_DATA_IN ("ReplaceMask", OC_KERNEL_PATCH_ENTRY, ReplaceMask),
OC_SCHEMA_INTEGER_IN ("Skip", OC_KERNEL_PATCH_ENTRY, Skip)
};
STATIC
OC_SCHEMA
mKernelPatchSchema = OC_SCHEMA_DICT (NULL, mKernelPatchSchemaEntry);
STATIC
OC_SCHEMA
mKernelQuirksSchema[] = {
OC_SCHEMA_BOOLEAN_IN ("AppleCpuPmCfgLock", OC_GLOBAL_CONFIG, Kernel.Quirks.AppleCpuPmCfgLock),
OC_SCHEMA_BOOLEAN_IN ("AppleXcpmCfgLock", OC_GLOBAL_CONFIG, Kernel.Quirks.AppleXcpmCfgLock),
OC_SCHEMA_BOOLEAN_IN ("AppleXcpmExtraMsrs", OC_GLOBAL_CONFIG, Kernel.Quirks.AppleXcpmExtraMsrs),
OC_SCHEMA_BOOLEAN_IN ("AppleXcpmForceBoost", OC_GLOBAL_CONFIG, Kernel.Quirks.AppleXcpmForceBoost),
OC_SCHEMA_BOOLEAN_IN ("CustomSMBIOSGuid", OC_GLOBAL_CONFIG, Kernel.Quirks.CustomSmbiosGuid),
OC_SCHEMA_BOOLEAN_IN ("DisableIoMapper", OC_GLOBAL_CONFIG, Kernel.Quirks.DisableIoMapper),
OC_SCHEMA_BOOLEAN_IN ("DisableLinkeditJettison", OC_GLOBAL_CONFIG, Kernel.Quirks.DisableLinkeditJettison),
OC_SCHEMA_BOOLEAN_IN ("DisableRtcChecksum", OC_GLOBAL_CONFIG, Kernel.Quirks.DisableRtcChecksum),
OC_SCHEMA_BOOLEAN_IN ("ExtendBTFeatureFlags", OC_GLOBAL_CONFIG, Kernel.Quirks.ExtendBTFeatureFlags),
OC_SCHEMA_BOOLEAN_IN ("ExternalDiskIcons", OC_GLOBAL_CONFIG, Kernel.Quirks.ExternalDiskIcons),
OC_SCHEMA_BOOLEAN_IN ("IncreasePciBarSize", OC_GLOBAL_CONFIG, Kernel.Quirks.IncreasePciBarSize),
OC_SCHEMA_BOOLEAN_IN ("LapicKernelPanic", OC_GLOBAL_CONFIG, Kernel.Quirks.LapicKernelPanic),
OC_SCHEMA_BOOLEAN_IN ("LegacyCommpage", OC_GLOBAL_CONFIG, Kernel.Quirks.LegacyCommpage),
OC_SCHEMA_BOOLEAN_IN ("PanicNoKextDump", OC_GLOBAL_CONFIG, Kernel.Quirks.PanicNoKextDump),
OC_SCHEMA_BOOLEAN_IN ("PowerTimeoutKernelPanic", OC_GLOBAL_CONFIG, Kernel.Quirks.PowerTimeoutKernelPanic),
OC_SCHEMA_BOOLEAN_IN ("ThirdPartyDrives", OC_GLOBAL_CONFIG, Kernel.Quirks.ThirdPartyDrives),
OC_SCHEMA_BOOLEAN_IN ("XhciPortLimit", OC_GLOBAL_CONFIG, Kernel.Quirks.XhciPortLimit),
};
STATIC
OC_SCHEMA
mKernelSchemeSchema[] = {
OC_SCHEMA_BOOLEAN_IN ("FuzzyMatch", OC_GLOBAL_CONFIG, Kernel.Scheme.FuzzyMatch),
OC_SCHEMA_STRING_IN ("KernelArch", OC_GLOBAL_CONFIG, Kernel.Scheme.KernelArch),
OC_SCHEMA_STRING_IN ("KernelCache", OC_GLOBAL_CONFIG, Kernel.Scheme.KernelCache),
};
STATIC
OC_SCHEMA
mKernelConfigurationSchema[] = {
OC_SCHEMA_ARRAY_IN ("Add", OC_GLOBAL_CONFIG, Kernel.Add, &mKernelAddSchema),
OC_SCHEMA_ARRAY_IN ("Block", OC_GLOBAL_CONFIG, Kernel.Block, &mKernelBlockSchema),
OC_SCHEMA_DICT ("Emulate", mKernelEmulateSchema),
OC_SCHEMA_ARRAY_IN ("Force", OC_GLOBAL_CONFIG, Kernel.Force, &mKernelForceSchema),
OC_SCHEMA_ARRAY_IN ("Patch", OC_GLOBAL_CONFIG, Kernel.Patch, &mKernelPatchSchema),
OC_SCHEMA_DICT ("Quirks", mKernelQuirksSchema),
OC_SCHEMA_DICT ("Scheme", mKernelSchemeSchema),
};
//
// Misc configuration support
//
STATIC
OC_SCHEMA
mMiscBlessOverrideSchema = OC_SCHEMA_STRING (NULL);
STATIC
OC_SCHEMA
mMiscConfigurationBootSchema[] = {
OC_SCHEMA_INTEGER_IN ("ConsoleAttributes", OC_GLOBAL_CONFIG, Misc.Boot.ConsoleAttributes),
OC_SCHEMA_STRING_IN ("HibernateMode", OC_GLOBAL_CONFIG, Misc.Boot.HibernateMode),
OC_SCHEMA_BOOLEAN_IN ("HideAuxiliary", OC_GLOBAL_CONFIG, Misc.Boot.HideAuxiliary),
OC_SCHEMA_INTEGER_IN ("PickerAttributes", OC_GLOBAL_CONFIG, Misc.Boot.PickerAttributes),
OC_SCHEMA_BOOLEAN_IN ("PickerAudioAssist", OC_GLOBAL_CONFIG, Misc.Boot.PickerAudioAssist),
OC_SCHEMA_STRING_IN ("PickerMode", OC_GLOBAL_CONFIG, Misc.Boot.PickerMode),
OC_SCHEMA_BOOLEAN_IN ("PollAppleHotKeys", OC_GLOBAL_CONFIG, Misc.Boot.PollAppleHotKeys),
OC_SCHEMA_BOOLEAN_IN ("ShowPicker", OC_GLOBAL_CONFIG, Misc.Boot.ShowPicker),
OC_SCHEMA_INTEGER_IN ("TakeoffDelay", OC_GLOBAL_CONFIG, Misc.Boot.TakeoffDelay),
OC_SCHEMA_INTEGER_IN ("Timeout", OC_GLOBAL_CONFIG, Misc.Boot.Timeout),
};
STATIC
OC_SCHEMA
mMiscConfigurationDebugSchema[] = {
OC_SCHEMA_BOOLEAN_IN ("AppleDebug", OC_GLOBAL_CONFIG, Misc.Debug.AppleDebug),
OC_SCHEMA_BOOLEAN_IN ("ApplePanic", OC_GLOBAL_CONFIG, Misc.Debug.ApplePanic),
OC_SCHEMA_BOOLEAN_IN ("DisableWatchDog", OC_GLOBAL_CONFIG, Misc.Debug.DisableWatchDog),
OC_SCHEMA_INTEGER_IN ("DisplayDelay", OC_GLOBAL_CONFIG, Misc.Debug.DisplayDelay),
OC_SCHEMA_INTEGER_IN ("DisplayLevel", OC_GLOBAL_CONFIG, Misc.Debug.DisplayLevel),
OC_SCHEMA_BOOLEAN_IN ("SerialInit", OC_GLOBAL_CONFIG, Misc.Debug.SerialInit),
OC_SCHEMA_BOOLEAN_IN ("SysReport", OC_GLOBAL_CONFIG, Misc.Debug.SysReport),
OC_SCHEMA_INTEGER_IN ("Target", OC_GLOBAL_CONFIG, Misc.Debug.Target)
};
STATIC
OC_SCHEMA
mMiscConfigurationSecuritySchema[] = {
OC_SCHEMA_BOOLEAN_IN ("AllowNvramReset", OC_GLOBAL_CONFIG, Misc.Security.AllowNvramReset),
OC_SCHEMA_BOOLEAN_IN ("AllowSetDefault", OC_GLOBAL_CONFIG, Misc.Security.AllowSetDefault),
OC_SCHEMA_INTEGER_IN ("ApECID", OC_GLOBAL_CONFIG, Misc.Security.ApECID),
OC_SCHEMA_BOOLEAN_IN ("AuthRestart", OC_GLOBAL_CONFIG, Misc.Security.AuthRestart),
OC_SCHEMA_STRING_IN ("BootProtect", OC_GLOBAL_CONFIG, Misc.Security.BootProtect),
OC_SCHEMA_STRING_IN ("DmgLoading", OC_GLOBAL_CONFIG, Misc.Security.DmgLoading),
OC_SCHEMA_BOOLEAN_IN ("EnablePassword", OC_GLOBAL_CONFIG, Misc.Security.EnablePassword),
OC_SCHEMA_INTEGER_IN ("ExposeSensitiveData", OC_GLOBAL_CONFIG, Misc.Security.ExposeSensitiveData),
OC_SCHEMA_INTEGER_IN ("HaltLevel", OC_GLOBAL_CONFIG, Misc.Security.HaltLevel),
OC_SCHEMA_DATAF_IN ("PasswordHash", OC_GLOBAL_CONFIG, Misc.Security.PasswordHash),
OC_SCHEMA_DATA_IN ("PasswordSalt", OC_GLOBAL_CONFIG, Misc.Security.PasswordSalt),
OC_SCHEMA_INTEGER_IN ("ScanPolicy", OC_GLOBAL_CONFIG, Misc.Security.ScanPolicy),
OC_SCHEMA_STRING_IN ("SecureBootModel", OC_GLOBAL_CONFIG, Misc.Security.SecureBootModel),
OC_SCHEMA_STRING_IN ("Vault", OC_GLOBAL_CONFIG, Misc.Security.Vault),
};
STATIC
OC_SCHEMA
mMiscToolsSchemaEntry[] = {
OC_SCHEMA_STRING_IN ("Arguments", OC_MISC_TOOLS_ENTRY, Arguments),
OC_SCHEMA_BOOLEAN_IN ("Auxiliary", OC_MISC_TOOLS_ENTRY, Auxiliary),
OC_SCHEMA_STRING_IN ("Comment", OC_MISC_TOOLS_ENTRY, Comment),
OC_SCHEMA_BOOLEAN_IN ("Enabled", OC_MISC_TOOLS_ENTRY, Enabled),
OC_SCHEMA_STRING_IN ("Name", OC_MISC_TOOLS_ENTRY, Name),
OC_SCHEMA_STRING_IN ("Path", OC_MISC_TOOLS_ENTRY, Path),
};
STATIC
OC_SCHEMA
mMiscToolsSchema = OC_SCHEMA_DICT (NULL, mMiscToolsSchemaEntry);
STATIC
OC_SCHEMA
mMiscConfigurationSchema[] = {
OC_SCHEMA_ARRAY_IN ("BlessOverride", OC_GLOBAL_CONFIG, Misc.BlessOverride, &mMiscBlessOverrideSchema),
OC_SCHEMA_DICT ("Boot", mMiscConfigurationBootSchema),
OC_SCHEMA_DICT ("Debug", mMiscConfigurationDebugSchema),
OC_SCHEMA_ARRAY_IN ("Entries", OC_GLOBAL_CONFIG, Misc.Entries, &mMiscToolsSchema),
OC_SCHEMA_DICT ("Security", mMiscConfigurationSecuritySchema),
OC_SCHEMA_ARRAY_IN ("Tools", OC_GLOBAL_CONFIG, Misc.Tools, &mMiscToolsSchema),
};
//
// Nvram configuration support
//
STATIC
OC_SCHEMA
mNvramAddEntrySchema = OC_SCHEMA_MDATA (NULL);
STATIC
OC_SCHEMA
mNvramAddSchema = OC_SCHEMA_MAP (NULL, &mNvramAddEntrySchema);
STATIC
OC_SCHEMA
mNvramDeleteEntrySchema = OC_SCHEMA_STRING (NULL);
STATIC
OC_SCHEMA
mNvramDeleteSchema = OC_SCHEMA_ARRAY (NULL, &mNvramDeleteEntrySchema);
STATIC
OC_SCHEMA
mNvramLegacyEntrySchema = OC_SCHEMA_STRING (NULL);
STATIC
OC_SCHEMA
mNvramLegacySchema = OC_SCHEMA_ARRAY (NULL, &mNvramLegacyEntrySchema);
STATIC
OC_SCHEMA
mNvramConfigurationSchema[] = {
OC_SCHEMA_MAP_IN ("Add", OC_GLOBAL_CONFIG, Nvram.Add, &mNvramAddSchema),
OC_SCHEMA_MAP_IN ("Delete", OC_GLOBAL_CONFIG, Nvram.Delete, &mNvramDeleteSchema),
OC_SCHEMA_BOOLEAN_IN ("LegacyEnable", OC_GLOBAL_CONFIG, Nvram.LegacyEnable),
OC_SCHEMA_BOOLEAN_IN ("LegacyOverwrite", OC_GLOBAL_CONFIG, Nvram.LegacyOverwrite),
OC_SCHEMA_MAP_IN ("LegacySchema", OC_GLOBAL_CONFIG, Nvram.Legacy, &mNvramLegacySchema),
OC_SCHEMA_BOOLEAN_IN ("WriteFlash", OC_GLOBAL_CONFIG, Nvram.WriteFlash),
};
//
// Platform info configuration support
//
STATIC
OC_SCHEMA
mPlatformConfigurationDataHubSchema[] = {
OC_SCHEMA_INTEGER_IN ("ARTFrequency", OC_GLOBAL_CONFIG, PlatformInfo.DataHub.ARTFrequency),
OC_SCHEMA_STRING_IN ("BoardProduct", OC_GLOBAL_CONFIG, PlatformInfo.DataHub.BoardProduct),
OC_SCHEMA_DATAF_IN ("BoardRevision", OC_GLOBAL_CONFIG, PlatformInfo.DataHub.BoardRevision),
OC_SCHEMA_INTEGER_IN ("DevicePathsSupported", OC_GLOBAL_CONFIG, PlatformInfo.DataHub.DevicePathsSupported),
OC_SCHEMA_INTEGER_IN ("FSBFrequency", OC_GLOBAL_CONFIG, PlatformInfo.DataHub.FSBFrequency),
OC_SCHEMA_INTEGER_IN ("InitialTSC", OC_GLOBAL_CONFIG, PlatformInfo.DataHub.InitialTSC),
OC_SCHEMA_STRING_IN ("PlatformName", OC_GLOBAL_CONFIG, PlatformInfo.DataHub.PlatformName),
OC_SCHEMA_DATAF_IN ("SmcBranch", OC_GLOBAL_CONFIG, PlatformInfo.DataHub.SmcBranch),
OC_SCHEMA_DATAF_IN ("SmcPlatform", OC_GLOBAL_CONFIG, PlatformInfo.DataHub.SmcPlatform),
OC_SCHEMA_DATAF_IN ("SmcRevision", OC_GLOBAL_CONFIG, PlatformInfo.DataHub.SmcRevision),
OC_SCHEMA_INTEGER_IN ("StartupPowerEvents", OC_GLOBAL_CONFIG, PlatformInfo.DataHub.StartupPowerEvents),
OC_SCHEMA_STRING_IN ("SystemProductName", OC_GLOBAL_CONFIG, PlatformInfo.DataHub.SystemProductName),
OC_SCHEMA_STRING_IN ("SystemSerialNumber", OC_GLOBAL_CONFIG, PlatformInfo.DataHub.SystemSerialNumber),
OC_SCHEMA_STRING_IN ("SystemUUID", OC_GLOBAL_CONFIG, PlatformInfo.DataHub.SystemUuid),
};
STATIC
OC_SCHEMA
mPlatformConfigurationGenericSchema[] = {
OC_SCHEMA_BOOLEAN_IN ("AdviseWindows", OC_GLOBAL_CONFIG, PlatformInfo.Generic.AdviseWindows),
OC_SCHEMA_STRING_IN ("MLB", OC_GLOBAL_CONFIG, PlatformInfo.Generic.Mlb),
OC_SCHEMA_INTEGER_IN ("ProcessorType", OC_GLOBAL_CONFIG, PlatformInfo.Generic.ProcessorType),
OC_SCHEMA_DATAF_IN ("ROM", OC_GLOBAL_CONFIG, PlatformInfo.Generic.Rom),
OC_SCHEMA_BOOLEAN_IN ("SpoofVendor", OC_GLOBAL_CONFIG, PlatformInfo.Generic.SpoofVendor),
OC_SCHEMA_STRING_IN ("SystemMemoryStatus", OC_GLOBAL_CONFIG, PlatformInfo.Generic.SystemMemoryStatus),
OC_SCHEMA_STRING_IN ("SystemProductName", OC_GLOBAL_CONFIG, PlatformInfo.Generic.SystemProductName),
OC_SCHEMA_STRING_IN ("SystemSerialNumber", OC_GLOBAL_CONFIG, PlatformInfo.Generic.SystemSerialNumber),
OC_SCHEMA_STRING_IN ("SystemUUID", OC_GLOBAL_CONFIG, PlatformInfo.Generic.SystemUuid),
};
STATIC
OC_SCHEMA
mPlatformConfigurationMemoryDeviceEntry[] = {
OC_SCHEMA_STRING_IN ("AssetTag", OC_PLATFORM_MEMORY_DEVICE_ENTRY, AssetTag),
OC_SCHEMA_STRING_IN ("BankLocator", OC_PLATFORM_MEMORY_DEVICE_ENTRY, BankLocator),
OC_SCHEMA_STRING_IN ("DeviceLocator", OC_PLATFORM_MEMORY_DEVICE_ENTRY, DeviceLocator),
OC_SCHEMA_STRING_IN ("Manufacturer", OC_PLATFORM_MEMORY_DEVICE_ENTRY, Manufacturer),
OC_SCHEMA_STRING_IN ("PartNumber", OC_PLATFORM_MEMORY_DEVICE_ENTRY, PartNumber),
OC_SCHEMA_STRING_IN ("SerialNumber", OC_PLATFORM_MEMORY_DEVICE_ENTRY, SerialNumber),
OC_SCHEMA_INTEGER_IN ("Size", OC_PLATFORM_MEMORY_DEVICE_ENTRY, Size),
OC_SCHEMA_INTEGER_IN ("Speed", OC_PLATFORM_MEMORY_DEVICE_ENTRY, Speed)
};
STATIC
OC_SCHEMA
mPlatformConfigurationMemoryDevicesSchema = OC_SCHEMA_DICT (NULL, mPlatformConfigurationMemoryDeviceEntry);
STATIC
OC_SCHEMA
mPlatformConfigurationMemorySchema[] = {
OC_SCHEMA_INTEGER_IN ("DataWidth", OC_GLOBAL_CONFIG, PlatformInfo.Memory.DataWidth),
OC_SCHEMA_ARRAY_IN ("Devices", OC_GLOBAL_CONFIG, PlatformInfo.Memory.Devices, &mPlatformConfigurationMemoryDevicesSchema),
OC_SCHEMA_INTEGER_IN ("ErrorCorrection", OC_GLOBAL_CONFIG, PlatformInfo.Memory.ErrorCorrection),
OC_SCHEMA_INTEGER_IN ("FormFactor", OC_GLOBAL_CONFIG, PlatformInfo.Memory.FormFactor),
OC_SCHEMA_INTEGER_IN ("MaxCapacity", OC_GLOBAL_CONFIG, PlatformInfo.Memory.MaxCapacity),
OC_SCHEMA_INTEGER_IN ("TotalWidth", OC_GLOBAL_CONFIG, PlatformInfo.Memory.TotalWidth),
OC_SCHEMA_INTEGER_IN ("Type", OC_GLOBAL_CONFIG, PlatformInfo.Memory.Type),
OC_SCHEMA_INTEGER_IN ("TypeDetail", OC_GLOBAL_CONFIG, PlatformInfo.Memory.TypeDetail)
};
STATIC
OC_SCHEMA
mPlatformConfigurationNvramSchema[] = {
OC_SCHEMA_STRING_IN ("BID", OC_GLOBAL_CONFIG, PlatformInfo.Nvram.Bid),
OC_SCHEMA_DATAF_IN ("FirmwareFeatures", OC_GLOBAL_CONFIG, PlatformInfo.Nvram.FirmwareFeatures),
OC_SCHEMA_DATAF_IN ("FirmwareFeaturesMask", OC_GLOBAL_CONFIG, PlatformInfo.Nvram.FirmwareFeaturesMask),
OC_SCHEMA_STRING_IN ("MLB", OC_GLOBAL_CONFIG, PlatformInfo.Nvram.Mlb),
OC_SCHEMA_DATAF_IN ("ROM", OC_GLOBAL_CONFIG, PlatformInfo.Nvram.Rom)
};
STATIC
OC_SCHEMA
mPlatformConfigurationSmbiosSchema[] = {
OC_SCHEMA_STRING_IN ("BIOSReleaseDate", OC_GLOBAL_CONFIG, PlatformInfo.Smbios.BIOSReleaseDate),
OC_SCHEMA_STRING_IN ("BIOSVendor", OC_GLOBAL_CONFIG, PlatformInfo.Smbios.BIOSVendor),
OC_SCHEMA_STRING_IN ("BIOSVersion", OC_GLOBAL_CONFIG, PlatformInfo.Smbios.BIOSVersion),
OC_SCHEMA_STRING_IN ("BoardAssetTag", OC_GLOBAL_CONFIG, PlatformInfo.Smbios.BoardAssetTag),
OC_SCHEMA_STRING_IN ("BoardLocationInChassis", OC_GLOBAL_CONFIG, PlatformInfo.Smbios.BoardLocationInChassis),
OC_SCHEMA_STRING_IN ("BoardManufacturer", OC_GLOBAL_CONFIG, PlatformInfo.Smbios.BoardManufacturer),
OC_SCHEMA_STRING_IN ("BoardProduct", OC_GLOBAL_CONFIG, PlatformInfo.Smbios.BoardProduct),
OC_SCHEMA_STRING_IN ("BoardSerialNumber", OC_GLOBAL_CONFIG, PlatformInfo.Smbios.BoardSerialNumber),
OC_SCHEMA_INTEGER_IN ("BoardType", OC_GLOBAL_CONFIG, PlatformInfo.Smbios.BoardType),
OC_SCHEMA_STRING_IN ("BoardVersion", OC_GLOBAL_CONFIG, PlatformInfo.Smbios.BoardVersion),
OC_SCHEMA_STRING_IN ("ChassisAssetTag", OC_GLOBAL_CONFIG, PlatformInfo.Smbios.ChassisAssetTag),
OC_SCHEMA_STRING_IN ("ChassisManufacturer", OC_GLOBAL_CONFIG, PlatformInfo.Smbios.ChassisManufacturer),
OC_SCHEMA_STRING_IN ("ChassisSerialNumber", OC_GLOBAL_CONFIG, PlatformInfo.Smbios.ChassisSerialNumber),
OC_SCHEMA_INTEGER_IN ("ChassisType", OC_GLOBAL_CONFIG, PlatformInfo.Smbios.ChassisType),
OC_SCHEMA_STRING_IN ("ChassisVersion", OC_GLOBAL_CONFIG, PlatformInfo.Smbios.ChassisVersion),
OC_SCHEMA_DATAF_IN ("FirmwareFeatures", OC_GLOBAL_CONFIG, PlatformInfo.Smbios.FirmwareFeatures),
OC_SCHEMA_DATAF_IN ("FirmwareFeaturesMask", OC_GLOBAL_CONFIG, PlatformInfo.Smbios.FirmwareFeaturesMask),
OC_SCHEMA_INTEGER_IN ("PlatformFeature", OC_GLOBAL_CONFIG, PlatformInfo.Smbios.PlatformFeature),
OC_SCHEMA_INTEGER_IN ("ProcessorType", OC_GLOBAL_CONFIG, PlatformInfo.Smbios.ProcessorType),
OC_SCHEMA_DATAF_IN ("SmcVersion", OC_GLOBAL_CONFIG, PlatformInfo.Smbios.SmcVersion),
OC_SCHEMA_STRING_IN ("SystemFamily", OC_GLOBAL_CONFIG, PlatformInfo.Smbios.SystemFamily),
OC_SCHEMA_STRING_IN ("SystemManufacturer", OC_GLOBAL_CONFIG, PlatformInfo.Smbios.SystemManufacturer),
OC_SCHEMA_STRING_IN ("SystemProductName", OC_GLOBAL_CONFIG, PlatformInfo.Smbios.SystemProductName),
OC_SCHEMA_STRING_IN ("SystemSKUNumber", OC_GLOBAL_CONFIG, PlatformInfo.Smbios.SystemSKUNumber),
OC_SCHEMA_STRING_IN ("SystemSerialNumber", OC_GLOBAL_CONFIG, PlatformInfo.Smbios.SystemSerialNumber),
OC_SCHEMA_STRING_IN ("SystemUUID", OC_GLOBAL_CONFIG, PlatformInfo.Smbios.SystemUuid),
OC_SCHEMA_STRING_IN ("SystemVersion", OC_GLOBAL_CONFIG, PlatformInfo.Smbios.SystemVersion),
};
STATIC
OC_SCHEMA
mPlatformConfigurationSchema[] = {
OC_SCHEMA_BOOLEAN_IN ("Automatic", OC_GLOBAL_CONFIG, PlatformInfo.Automatic),
OC_SCHEMA_BOOLEAN_IN ("CustomMemory", OC_GLOBAL_CONFIG, PlatformInfo.CustomMemory),
OC_SCHEMA_DICT_OPT ("DataHub", mPlatformConfigurationDataHubSchema),
OC_SCHEMA_DICT ("Generic", mPlatformConfigurationGenericSchema),
OC_SCHEMA_DICT_OPT ("Memory", mPlatformConfigurationMemorySchema),
OC_SCHEMA_DICT_OPT ("PlatformNVRAM", mPlatformConfigurationNvramSchema),
OC_SCHEMA_DICT_OPT ("SMBIOS", mPlatformConfigurationSmbiosSchema),
OC_SCHEMA_BOOLEAN_IN ("UpdateDataHub", OC_GLOBAL_CONFIG, PlatformInfo.UpdateDataHub),
OC_SCHEMA_BOOLEAN_IN ("UpdateNVRAM", OC_GLOBAL_CONFIG, PlatformInfo.UpdateNvram),
OC_SCHEMA_BOOLEAN_IN ("UpdateSMBIOS", OC_GLOBAL_CONFIG, PlatformInfo.UpdateSmbios),
OC_SCHEMA_STRING_IN ("UpdateSMBIOSMode", OC_GLOBAL_CONFIG, PlatformInfo.UpdateSmbiosMode)
};
//
// Uefi configuration support
//
STATIC
OC_SCHEMA
mUefiDriversSchema = OC_SCHEMA_STRING (NULL);
STATIC
OC_SCHEMA
mUefiQuirksSchema[] = {
OC_SCHEMA_BOOLEAN_IN ("DeduplicateBootOrder", OC_GLOBAL_CONFIG, Uefi.Quirks.DeduplicateBootOrder),
OC_SCHEMA_INTEGER_IN ("ExitBootServicesDelay", OC_GLOBAL_CONFIG, Uefi.Quirks.ExitBootServicesDelay),
OC_SCHEMA_BOOLEAN_IN ("IgnoreInvalidFlexRatio", OC_GLOBAL_CONFIG, Uefi.Quirks.IgnoreInvalidFlexRatio),
OC_SCHEMA_BOOLEAN_IN ("ReleaseUsbOwnership", OC_GLOBAL_CONFIG, Uefi.Quirks.ReleaseUsbOwnership),
OC_SCHEMA_BOOLEAN_IN ("RequestBootVarRouting", OC_GLOBAL_CONFIG, Uefi.Quirks.RequestBootVarRouting),
OC_SCHEMA_INTEGER_IN ("TscSyncTimeout", OC_GLOBAL_CONFIG, Uefi.Quirks.TscSyncTimeout),
OC_SCHEMA_BOOLEAN_IN ("UnblockFsConnect", OC_GLOBAL_CONFIG, Uefi.Quirks.UnblockFsConnect)
};
STATIC
OC_SCHEMA
mUefiProtocolOverridesSchema[] = {
OC_SCHEMA_BOOLEAN_IN ("AppleAudio", OC_GLOBAL_CONFIG, Uefi.ProtocolOverrides.AppleAudio),
OC_SCHEMA_BOOLEAN_IN ("AppleBootPolicy", OC_GLOBAL_CONFIG, Uefi.ProtocolOverrides.AppleBootPolicy),
OC_SCHEMA_BOOLEAN_IN ("AppleDebugLog", OC_GLOBAL_CONFIG, Uefi.ProtocolOverrides.AppleDebugLog),
OC_SCHEMA_BOOLEAN_IN ("AppleEvent", OC_GLOBAL_CONFIG, Uefi.ProtocolOverrides.AppleEvent),
OC_SCHEMA_BOOLEAN_IN ("AppleFramebufferInfo", OC_GLOBAL_CONFIG, Uefi.ProtocolOverrides.AppleFramebufferInfo),
OC_SCHEMA_BOOLEAN_IN ("AppleImageConversion", OC_GLOBAL_CONFIG, Uefi.ProtocolOverrides.AppleImageConversion),
OC_SCHEMA_BOOLEAN_IN ("AppleImg4Verification", OC_GLOBAL_CONFIG, Uefi.ProtocolOverrides.AppleImg4Verification),
OC_SCHEMA_BOOLEAN_IN ("AppleKeyMap", OC_GLOBAL_CONFIG, Uefi.ProtocolOverrides.AppleKeyMap),
OC_SCHEMA_BOOLEAN_IN ("AppleRtcRam", OC_GLOBAL_CONFIG, Uefi.ProtocolOverrides.AppleRtcRam),
OC_SCHEMA_BOOLEAN_IN ("AppleSecureBoot", OC_GLOBAL_CONFIG, Uefi.ProtocolOverrides.AppleSecureBoot),
OC_SCHEMA_BOOLEAN_IN ("AppleSmcIo", OC_GLOBAL_CONFIG, Uefi.ProtocolOverrides.AppleSmcIo),
OC_SCHEMA_BOOLEAN_IN ("AppleUserInterfaceTheme", OC_GLOBAL_CONFIG, Uefi.ProtocolOverrides.AppleUserInterfaceTheme),
OC_SCHEMA_BOOLEAN_IN ("DataHub", OC_GLOBAL_CONFIG, Uefi.ProtocolOverrides.DataHub),
OC_SCHEMA_BOOLEAN_IN ("DeviceProperties", OC_GLOBAL_CONFIG, Uefi.ProtocolOverrides.DeviceProperties),
OC_SCHEMA_BOOLEAN_IN ("FirmwareVolume", OC_GLOBAL_CONFIG, Uefi.ProtocolOverrides.FirmwareVolume),
OC_SCHEMA_BOOLEAN_IN ("HashServices", OC_GLOBAL_CONFIG, Uefi.ProtocolOverrides.HashServices),
OC_SCHEMA_BOOLEAN_IN ("OSInfo", OC_GLOBAL_CONFIG, Uefi.ProtocolOverrides.OSInfo),
OC_SCHEMA_BOOLEAN_IN ("UnicodeCollation", OC_GLOBAL_CONFIG, Uefi.ProtocolOverrides.UnicodeCollation)
};
STATIC
OC_SCHEMA
mUefiApfsSchema[] = {
OC_SCHEMA_BOOLEAN_IN ("EnableJumpstart", OC_GLOBAL_CONFIG, Uefi.Apfs.EnableJumpstart),
OC_SCHEMA_BOOLEAN_IN ("GlobalConnect", OC_GLOBAL_CONFIG, Uefi.Apfs.GlobalConnect),
OC_SCHEMA_BOOLEAN_IN ("HideVerbose", OC_GLOBAL_CONFIG, Uefi.Apfs.HideVerbose),
OC_SCHEMA_BOOLEAN_IN ("JumpstartHotPlug", OC_GLOBAL_CONFIG, Uefi.Apfs.JumpstartHotPlug),
OC_SCHEMA_INTEGER_IN ("MinDate", OC_GLOBAL_CONFIG, Uefi.Apfs.MinDate),
OC_SCHEMA_INTEGER_IN ("MinVersion", OC_GLOBAL_CONFIG, Uefi.Apfs.MinVersion),
};
STATIC
OC_SCHEMA
mUefiAudioSchema[] = {
OC_SCHEMA_INTEGER_IN ("AudioCodec", OC_GLOBAL_CONFIG, Uefi.Audio.AudioCodec),
OC_SCHEMA_STRING_IN ("AudioDevice", OC_GLOBAL_CONFIG, Uefi.Audio.AudioDevice),
OC_SCHEMA_INTEGER_IN ("AudioOut", OC_GLOBAL_CONFIG, Uefi.Audio.AudioOut),
OC_SCHEMA_BOOLEAN_IN ("AudioSupport", OC_GLOBAL_CONFIG, Uefi.Audio.AudioSupport),
OC_SCHEMA_INTEGER_IN ("MinimumVolume", OC_GLOBAL_CONFIG, Uefi.Audio.MinimumVolume),
OC_SCHEMA_BOOLEAN_IN ("PlayChime", OC_GLOBAL_CONFIG, Uefi.Audio.PlayChime),
OC_SCHEMA_INTEGER_IN ("VolumeAmplifier", OC_GLOBAL_CONFIG, Uefi.Audio.VolumeAmplifier),
};
STATIC
OC_SCHEMA
mUefiInputSchema[] = {
OC_SCHEMA_BOOLEAN_IN ("KeyFiltering", OC_GLOBAL_CONFIG, Uefi.Input.KeyFiltering),
OC_SCHEMA_INTEGER_IN ("KeyForgetThreshold", OC_GLOBAL_CONFIG, Uefi.Input.KeyForgetThreshold),
OC_SCHEMA_INTEGER_IN ("KeyMergeThreshold", OC_GLOBAL_CONFIG, Uefi.Input.KeyMergeThreshold),
OC_SCHEMA_BOOLEAN_IN ("KeySupport", OC_GLOBAL_CONFIG, Uefi.Input.KeySupport),
OC_SCHEMA_STRING_IN ("KeySupportMode", OC_GLOBAL_CONFIG, Uefi.Input.KeySupportMode),
OC_SCHEMA_BOOLEAN_IN ("KeySwap", OC_GLOBAL_CONFIG, Uefi.Input.KeySwap),
OC_SCHEMA_BOOLEAN_IN ("PointerSupport", OC_GLOBAL_CONFIG, Uefi.Input.PointerSupport),
OC_SCHEMA_STRING_IN ("PointerSupportMode", OC_GLOBAL_CONFIG, Uefi.Input.PointerSupportMode),
OC_SCHEMA_INTEGER_IN ("TimerResolution", OC_GLOBAL_CONFIG, Uefi.Input.TimerResolution)
};
STATIC
OC_SCHEMA
mUefiOutputSchema[] = {
OC_SCHEMA_BOOLEAN_IN ("ClearScreenOnModeSwitch",OC_GLOBAL_CONFIG, Uefi.Output.ClearScreenOnModeSwitch),
OC_SCHEMA_STRING_IN ("ConsoleMode", OC_GLOBAL_CONFIG, Uefi.Output.ConsoleMode),
OC_SCHEMA_BOOLEAN_IN ("DirectGopRendering", OC_GLOBAL_CONFIG, Uefi.Output.DirectGopRendering),
OC_SCHEMA_BOOLEAN_IN ("ForceResolution", OC_GLOBAL_CONFIG, Uefi.Output.ForceResolution),
OC_SCHEMA_BOOLEAN_IN ("IgnoreTextInGraphics", OC_GLOBAL_CONFIG, Uefi.Output.IgnoreTextInGraphics),
OC_SCHEMA_BOOLEAN_IN ("ProvideConsoleGop", OC_GLOBAL_CONFIG, Uefi.Output.ProvideConsoleGop),
OC_SCHEMA_BOOLEAN_IN ("ReconnectOnResChange", OC_GLOBAL_CONFIG, Uefi.Output.ReconnectOnResChange),
OC_SCHEMA_BOOLEAN_IN ("ReplaceTabWithSpace", OC_GLOBAL_CONFIG, Uefi.Output.ReplaceTabWithSpace),
OC_SCHEMA_STRING_IN ("Resolution", OC_GLOBAL_CONFIG, Uefi.Output.Resolution),
OC_SCHEMA_BOOLEAN_IN ("SanitiseClearScreen", OC_GLOBAL_CONFIG, Uefi.Output.SanitiseClearScreen),
OC_SCHEMA_STRING_IN ("TextRenderer", OC_GLOBAL_CONFIG, Uefi.Output.TextRenderer),
OC_SCHEMA_BOOLEAN_IN ("UgaPassThrough", OC_GLOBAL_CONFIG, Uefi.Output.UgaPassThrough),
};
STATIC
OC_SCHEMA
mUefiReservedMemoryEntrySchema[] = {
OC_SCHEMA_INTEGER_IN ("Address", OC_UEFI_RSVD_ENTRY, Address),
OC_SCHEMA_STRING_IN ("Comment", OC_UEFI_RSVD_ENTRY, Comment),
OC_SCHEMA_BOOLEAN_IN ("Enabled", OC_UEFI_RSVD_ENTRY, Enabled),
OC_SCHEMA_INTEGER_IN ("Size", OC_UEFI_RSVD_ENTRY, Size),
OC_SCHEMA_STRING_IN ("Type", OC_UEFI_RSVD_ENTRY, Type),
};
STATIC
OC_SCHEMA
mUefiReservedMemorySchema = OC_SCHEMA_DICT (NULL, mUefiReservedMemoryEntrySchema);
STATIC
OC_SCHEMA
mUefiConfigurationSchema[] = {
OC_SCHEMA_DICT ("APFS", mUefiApfsSchema),
OC_SCHEMA_DICT ("Audio", mUefiAudioSchema),
OC_SCHEMA_BOOLEAN_IN ("ConnectDrivers", OC_GLOBAL_CONFIG, Uefi.ConnectDrivers),
OC_SCHEMA_ARRAY_IN ("Drivers", OC_GLOBAL_CONFIG, Uefi.Drivers, &mUefiDriversSchema),
OC_SCHEMA_DICT ("Input", mUefiInputSchema),
OC_SCHEMA_DICT ("Output", mUefiOutputSchema),
OC_SCHEMA_DICT ("ProtocolOverrides", mUefiProtocolOverridesSchema),
OC_SCHEMA_DICT ("Quirks", mUefiQuirksSchema),
OC_SCHEMA_ARRAY_IN ("ReservedMemory", OC_GLOBAL_CONFIG, Uefi.ReservedMemory, &mUefiReservedMemorySchema),
};
//
// Root configuration
//
STATIC
OC_SCHEMA
mRootConfigurationNodes[] = {
OC_SCHEMA_DICT ("ACPI", mAcpiConfigurationSchema),
OC_SCHEMA_DICT ("Booter", mBooterConfigurationSchema),
OC_SCHEMA_DICT ("DeviceProperties", mDevicePropertiesSchema),
OC_SCHEMA_DICT ("Kernel", mKernelConfigurationSchema),
OC_SCHEMA_DICT ("Misc", mMiscConfigurationSchema),
OC_SCHEMA_DICT ("NVRAM", mNvramConfigurationSchema),
OC_SCHEMA_DICT ("PlatformInfo", mPlatformConfigurationSchema),
OC_SCHEMA_DICT ("UEFI", mUefiConfigurationSchema)
};
STATIC
OC_SCHEMA_INFO
mRootConfigurationInfo = {
.Dict = {mRootConfigurationNodes, ARRAY_SIZE (mRootConfigurationNodes)}
};
EFI_STATUS
OcConfigurationInit (
OUT OC_GLOBAL_CONFIG *Config,
IN VOID *Buffer,
IN UINT32 Size
)
{
BOOLEAN Success;
OC_GLOBAL_CONFIG_CONSTRUCT (Config, sizeof (*Config));
Success = ParseSerialized (Config, &mRootConfigurationInfo, Buffer, Size);
if (!Success) {
OC_GLOBAL_CONFIG_DESTRUCT (Config, sizeof (*Config));
return EFI_UNSUPPORTED;
}
return EFI_SUCCESS;
}
VOID
OcConfigurationFree (
IN OUT OC_GLOBAL_CONFIG *Config
)
{
OC_GLOBAL_CONFIG_DESTRUCT (Config, sizeof (*Config));
}