提交 45804a28 编写于 作者: V vit9696

OcAppleKernelLib: Fixed SetApfsTrimTimeout on macOS 12

上级 060e0fc8
......@@ -7,6 +7,7 @@ OpenCore Changelog
- Fixed `PowerTimeoutKernelPanic` on macOS 12
- Fixed transparency click detection on OpenCanopy boot entries
- Added PCI device info dumping to `SysReport`
- Fixed `SetApfsTrimTimeout` on macOS 12
#### v0.7.0
- Fixed NVRAM reset on firmware with write-protected `BootOptionSupport`
......
......@@ -125,6 +125,7 @@ typedef enum KERNEL_CACHE_TYPE_ {
#define KERNEL_VERSION_MOJAVE_MIN KERNEL_VERSION (18, 0, 0)
#define KERNEL_VERSION_CATALINA_MIN KERNEL_VERSION (19, 0, 0)
#define KERNEL_VERSION_BIG_SUR_MIN KERNEL_VERSION (20, 0, 0)
#define KERNEL_VERSION_MONTEREY_MIN KERNEL_VERSION (21, 0, 0)
//
// Maximum kernel versions for each release.
......@@ -141,6 +142,7 @@ typedef enum KERNEL_CACHE_TYPE_ {
#define KERNEL_VERSION_HIGH_SIERRA_MAX (KERNEL_VERSION_MOJAVE_MIN - 1)
#define KERNEL_VERSION_MOJAVE_MAX (KERNEL_VERSION_CATALINA_MIN - 1)
#define KERNEL_VERSION_CATALINA_MAX (KERNEL_VERSION_BIG_SUR_MIN - 1)
#define KERNEL_VERSION_BIG_SUR_MAX (KERNEL_VERSION_MONTEREY_MIN - 1)
//
// Prelinked context used for kernel modification.
......
......@@ -1970,6 +1970,34 @@ mApfsTimeoutPatch = {
.Limit = 0
};
STATIC
UINT8
mApfsTimeoutV2Find[] = {
0x40, 0x42, 0x0F, 0x00
};
STATIC
UINT8
mApfsTimeoutV2Replace[] = {
0x00, 0x02, 0x00, 0x00
};
STATIC
PATCHER_GENERIC_PATCH
mApfsTimeoutV2Patch = {
.Comment = DEBUG_POINTER ("ApfsTimeout V2"),
.Base = "_spaceman_scan_free_blocks",
.Find = mApfsTimeoutV2Find,
.Mask = NULL,
.Replace = mApfsTimeoutV2Replace,
.ReplaceMask = NULL,
.Size = sizeof (mApfsTimeoutV2Find),
.Count = 2,
.Skip = 0,
.Limit = 4096
};
VOID
PatchSetApfsTimeout (
IN UINT32 Timeout
......@@ -1978,6 +2006,7 @@ PatchSetApfsTimeout (
// FIXME: This is really ugly, make quirks take a context param.
DEBUG ((DEBUG_INFO, "OCAK: Registering %u APFS timeout\n", Timeout));
CopyMem (&mApfsTimeoutReplace[2], &Timeout, sizeof (Timeout));
CopyMem (&mApfsTimeoutV2Replace[0], &Timeout, sizeof (Timeout));
}
STATIC
......@@ -1998,11 +2027,20 @@ PatchSetApfsTrimTimeout (
return EFI_NOT_FOUND;
}
Status = PatcherApplyGenericPatch (Patcher, &mApfsTimeoutPatch);
if (EFI_ERROR (Status)) {
DEBUG ((DEBUG_INFO, "OCAK: Failed to apply patch SetApfsTrimTimeout - %r\n", Status));
if (KernelVersion >= KERNEL_VERSION_MONTEREY_MIN) {
Status = PatcherApplyGenericPatch (Patcher, &mApfsTimeoutV2Patch);
if (EFI_ERROR (Status)) {
DEBUG ((DEBUG_INFO, "OCAK: Failed to apply patch SetApfsTrimTimeoutV2 - %r\n", Status));
} else {
DEBUG ((DEBUG_INFO, "OCAK: Patch success SetApfsTrimTimeoutV2\n"));
}
} else {
DEBUG ((DEBUG_INFO, "OCAK: Patch success SetApfsTrimTimeout\n"));
Status = PatcherApplyGenericPatch (Patcher, &mApfsTimeoutPatch);
if (EFI_ERROR (Status)) {
DEBUG ((DEBUG_INFO, "OCAK: Failed to apply patch SetApfsTrimTimeout - %r\n", Status));
} else {
DEBUG ((DEBUG_INFO, "OCAK: Patch success SetApfsTrimTimeout\n"));
}
}
return Status;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册