From 5e0f400c69115b2d21f402f3ba694bc595e23ba9 Mon Sep 17 00:00:00 2001 From: vit9696 Date: Thu, 17 Oct 2019 11:42:28 +0300 Subject: [PATCH] OcAppleKernelLib: Add PowerTimeoutKernelPanic option --- Include/Library/OcAppleKernelLib.h | 12 +++++ Include/Library/OcConfigurationLib.h | 1 + Library/OcAppleKernelLib/CommonPatches.c | 50 +++++++++++++++++++ .../OcConfigurationLib/OcConfigurationLib.c | 21 ++++---- 4 files changed, 74 insertions(+), 10 deletions(-) diff --git a/Include/Library/OcAppleKernelLib.h b/Include/Library/OcAppleKernelLib.h index cc133492..02933ab0 100644 --- a/Include/Library/OcAppleKernelLib.h +++ b/Include/Library/OcAppleKernelLib.h @@ -537,4 +537,16 @@ PatchLapicKernelPanic ( IN OUT PATCHER_CONTEXT *Patcher ); +/** + Disable power state change timeout kernel panic (10.15+). + + @param Patcher Patcher context. + + @return RETURN_SUCCESS on success. +**/ +RETURN_STATUS +PatchPowerStateTimeout ( + IN OUT PATCHER_CONTEXT *Patcher + ); + #endif // OC_APPLE_KERNEL_LIB_H diff --git a/Include/Library/OcConfigurationLib.h b/Include/Library/OcConfigurationLib.h index bfb1a7eb..1d9c316e 100644 --- a/Include/Library/OcConfigurationLib.h +++ b/Include/Library/OcConfigurationLib.h @@ -241,6 +241,7 @@ _(BOOLEAN , ExternalDiskIcons , , FALSE , ()) \ _(BOOLEAN , LapicKernelPanic , , FALSE , ()) \ _(BOOLEAN , PanicNoKextDump , , FALSE , ()) \ + _(BOOLEAN , PowerTimeoutKernelPanic , , FALSE , ()) \ _(BOOLEAN , ThirdPartyTrim , , FALSE , ()) \ _(BOOLEAN , XhciPortLimit , , FALSE , ()) OC_DECLARE (OC_KERNEL_QUIRKS) diff --git a/Library/OcAppleKernelLib/CommonPatches.c b/Library/OcAppleKernelLib/CommonPatches.c index ebf969d0..33ad34ad 100644 --- a/Library/OcAppleKernelLib/CommonPatches.c +++ b/Library/OcAppleKernelLib/CommonPatches.c @@ -1216,3 +1216,53 @@ PatchLapicKernelPanic ( return Status; } + +STATIC +UINT8 +mPowerStateTimeoutPanicFind[] = { + // com.apple\0__kernel__\0 + 0x63, 0x6F, 0x6D, 0x2E, 0x61, 0x70, 0x70, 0x6C, 0x65, 0x00, 0x5F, 0x5F, 0x6B, 0x65, 0x72, 0x6E, 0x65, 0x6C, 0x5F, 0x5F, 0x00 +}; + +STATIC +UINT8 +mPowerStateTimeoutPanicReplace[] = { + // not.apple\0__kernel__\0 + 0x6E, 0x6F, 0x74, 0x2E, 0x61, 0x70, 0x70, 0x6C, 0x65, 0x00, 0x5F, 0x5F, 0x6B, 0x65, 0x72, 0x6E, 0x65, 0x6C, 0x5F, 0x5F, 0x00 +}; + +STATIC +PATCHER_GENERIC_PATCH +mPowerStateTimeoutPanicMasterPatch = { + .Comment = DEBUG_POINTER ("PowerStateTimeout"), + .Base = NULL, + .Find = mPowerStateTimeoutPanicFind, + .Mask = NULL, + .Replace = mPowerStateTimeoutPanicReplace, + .ReplaceMask = NULL, + .Size = sizeof (mPowerStateTimeoutPanicFind), + .Count = 1, + .Skip = 0, + .Limit = 0 +}; + +RETURN_STATUS +PatchPowerStateTimeout ( + IN OUT PATCHER_CONTEXT *Patcher + ) +{ + RETURN_STATUS Status; + + Status = PatcherApplyGenericPatch (Patcher, &mPowerStateTimeoutPanicMasterPatch); + if (RETURN_ERROR (Status)) { + DEBUG ((DEBUG_INFO, "OCAK: Failed to apply power state patch - %r\n", Status)); + } else { + DEBUG ((DEBUG_INFO, "OCAK: Patch success power state\n")); + } + + // + // TODO: Implement a patch to not require setpowerstate_panic=0 on debug kernels. + // + + return Status; +} diff --git a/Library/OcConfigurationLib/OcConfigurationLib.c b/Library/OcConfigurationLib/OcConfigurationLib.c index 79f0443f..064b1936 100644 --- a/Library/OcConfigurationLib/OcConfigurationLib.c +++ b/Library/OcConfigurationLib/OcConfigurationLib.c @@ -278,16 +278,17 @@ 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 ("CustomSMBIOSGuid", OC_GLOBAL_CONFIG, Kernel.Quirks.CustomSmbiosGuid), - OC_SCHEMA_BOOLEAN_IN ("DisableIoMapper", OC_GLOBAL_CONFIG, Kernel.Quirks.DisableIoMapper), - OC_SCHEMA_BOOLEAN_IN ("ExternalDiskIcons", OC_GLOBAL_CONFIG, Kernel.Quirks.ExternalDiskIcons), - OC_SCHEMA_BOOLEAN_IN ("LapicKernelPanic", OC_GLOBAL_CONFIG, Kernel.Quirks.LapicKernelPanic), - OC_SCHEMA_BOOLEAN_IN ("PanicNoKextDump", OC_GLOBAL_CONFIG, Kernel.Quirks.PanicNoKextDump), - OC_SCHEMA_BOOLEAN_IN ("ThirdPartyTrim", OC_GLOBAL_CONFIG, Kernel.Quirks.ThirdPartyTrim), - OC_SCHEMA_BOOLEAN_IN ("XhciPortLimit", OC_GLOBAL_CONFIG, Kernel.Quirks.XhciPortLimit), + 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 ("CustomSMBIOSGuid", OC_GLOBAL_CONFIG, Kernel.Quirks.CustomSmbiosGuid), + OC_SCHEMA_BOOLEAN_IN ("DisableIoMapper", OC_GLOBAL_CONFIG, Kernel.Quirks.DisableIoMapper), + OC_SCHEMA_BOOLEAN_IN ("ExternalDiskIcons", OC_GLOBAL_CONFIG, Kernel.Quirks.ExternalDiskIcons), + OC_SCHEMA_BOOLEAN_IN ("LapicKernelPanic", OC_GLOBAL_CONFIG, Kernel.Quirks.LapicKernelPanic), + 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 ("ThirdPartyTrim", OC_GLOBAL_CONFIG, Kernel.Quirks.ThirdPartyTrim), + OC_SCHEMA_BOOLEAN_IN ("XhciPortLimit", OC_GLOBAL_CONFIG, Kernel.Quirks.XhciPortLimit), }; STATIC