Skip to content
This repository has been archived by the owner on Feb 29, 2020. It is now read-only.

Commit

Permalink
Browse files Browse the repository at this point in the history
OcAppleKernelLib: Add PowerTimeoutKernelPanic option
  • Loading branch information
vit9696 committed Oct 17, 2019
1 parent 12a2709 commit 5e0f400
Show file tree
Hide file tree
Showing 4 changed files with 74 additions and 10 deletions.
12 changes: 12 additions & 0 deletions Include/Library/OcAppleKernelLib.h
Expand Up @@ -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
1 change: 1 addition & 0 deletions Include/Library/OcConfigurationLib.h
Expand Up @@ -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)
Expand Down
50 changes: 50 additions & 0 deletions Library/OcAppleKernelLib/CommonPatches.c
Expand Up @@ -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;
}
21 changes: 11 additions & 10 deletions Library/OcConfigurationLib/OcConfigurationLib.c
Expand Up @@ -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
Expand Down

0 comments on commit 5e0f400

Please sign in to comment.