未验证 提交 e93624ab 编写于 作者: P PMheart 提交者: GitHub

OcAppleKernelLib: Added `ExtendBTFeatureFlags` quirk (#126)

This quirk substitutes BT4LEContinuityFixup which actually fails to function properly due to late patching.
上级 bf97afa0
......@@ -16,6 +16,7 @@ OpenCore Changelog
- Added prelinkedkernel 32-bit kext injection (10.6-10.7)
- Added `SystemMemoryStatus` to override memory replacement on some models
- Added older Pentium CPU recognition in SMBIOS
- Added `ExtendBTFeatureFlags` to properly set `FeatureFlags` for Bluetooth (which substitutes BT4LEContinuityFixup)
#### v0.6.1
- Improved recognition of early pressed hotkeys, thx @varahash
......
......@@ -2310,6 +2310,17 @@ blocking.
\texttt{NullCpuPowerManagement.kext} for CPUs without native power
management driver in macOS.
\item
\texttt{ExtendBTFeatureFlags}\\
\textbf{Type}: \texttt{plist\ boolean}\\
\textbf{Failsafe}: \texttt{false}\\
\textbf{Requirement}: 10.8\\
\textbf{Description}: Set \texttt{FeatureFlags} to \texttt{0x0F} for full
functionality of Bluetooth, including Continuity.
\emph{Note}: This option is a substitution for BT4LEContinuityFixup.kext,
which does not function properly due to late patching progress.
\item
\texttt{ExternalDiskIcons}\\
\textbf{Type}: \texttt{plist\ boolean}\\
......
\documentclass[]{article}
%DIF LATEXDIFF DIFFERENCE FILE
%DIF DEL PreviousConfiguration.tex Tue Sep 8 21:12:21 2020
%DIF ADD ../Configuration.tex Fri Oct 2 03:37:52 2020
%DIF DEL PreviousConfiguration.tex Thu Sep 24 19:29:02 2020
%DIF ADD ../Configuration.tex Fri Oct 2 09:04:03 2020
\usepackage{lmodern}
\usepackage{amssymb,amsmath}
......@@ -2371,7 +2371,20 @@ blocking.
management driver in macOS.
\item
\texttt{ExternalDiskIcons}\\
\DIFaddbegin \texttt{\DIFadd{ExtendBTFeatureFlags}}\\
\textbf{\DIFadd{Type}}\DIFadd{: }\texttt{\DIFadd{plist\ boolean}}\\
\textbf{\DIFadd{Failsafe}}\DIFadd{: }\texttt{\DIFadd{false}}\\
\textbf{\DIFadd{Requirement}}\DIFadd{: 10.8}\\
\textbf{\DIFadd{Description}}\DIFadd{: Set }\texttt{\DIFadd{FeatureFlags}} \DIFadd{to }\texttt{\DIFadd{0x0F}} \DIFadd{for full
functionality of Bluetooth, including Continuity.
}
\emph{\DIFadd{Note}}\DIFadd{: This option is a substitution for BT4LEContinuityFixup.kext,
which does not function properly due to late patching progress.
}
\item
\DIFaddend \texttt{ExternalDiskIcons}\\
\textbf{Type}: \texttt{plist\ boolean}\\
\textbf{Failsafe}: \texttt{false}\\
\textbf{Requirement}: \DIFdelbegin \DIFdel{10.6 (64-bit)}\DIFdelend \DIFaddbegin \DIFadd{10.4}\DIFaddend \\
......
......@@ -672,6 +672,8 @@
<false/>
<key>DummyPowerManagement</key>
<false/>
<key>ExtendBTFeatureFlags</key>
<false/>
<key>ExternalDiskIcons</key>
<false/>
<key>IncreasePciBarSize</key>
......
......@@ -672,6 +672,8 @@
<false/>
<key>DummyPowerManagement</key>
<false/>
<key>ExtendBTFeatureFlags</key>
<false/>
<key>ExternalDiskIcons</key>
<false/>
<key>IncreasePciBarSize</key>
......
......@@ -531,6 +531,10 @@ typedef enum {
//
KernelQuirkDummyPowerManagement,
//
// Apply feature flags patches to IOBluetoothFamily kext to ensure full Bluetooth functionality.
//
KernelQuirkExtendBTFeatureFlags,
//
// Apply icon type patches to IOAHCIPort kext to force internal disk icons.
//
KernelQuirkExternalDiskIcons,
......
......@@ -258,6 +258,7 @@
_(BOOLEAN , DisableLinkeditJettison , , FALSE , ()) \
_(BOOLEAN , DisableRtcChecksum , , FALSE , ()) \
_(BOOLEAN , DummyPowerManagement , , FALSE , ()) \
_(BOOLEAN , ExtendBTFeatureFlags , , FALSE , ()) \
_(BOOLEAN , ExternalDiskIcons , , FALSE , ()) \
_(BOOLEAN , IncreasePciBarSize , , FALSE , ()) \
_(BOOLEAN , LapicKernelPanic , , FALSE , ()) \
......
......@@ -1601,6 +1601,76 @@ PatchSegmentJettison (
return EFI_NOT_FOUND;
}
STATIC
UINT8
mBTFeatureFlagsReplace[] = {
0x55, // push rbp
0x83, 0xCE, 0x0F // or esi, 0x0F
};
STATIC
PATCHER_GENERIC_PATCH
mBTFeatureFlagsPatchV1 = {
.Comment = DEBUG_POINTER ("BTFeatureFlagsV1"),
.Base = "__ZN25IOBluetoothHostController25SetControllerFeatureFlagsEj",
.Find = NULL,
.Mask = NULL,
.Replace = mBTFeatureFlagsReplace,
.ReplaceMask = NULL,
.Size = sizeof (mBTFeatureFlagsReplace),
.Count = 1,
.Skip = 0
};
STATIC
PATCHER_GENERIC_PATCH
mBTFeatureFlagsPatchV2 = {
.Comment = DEBUG_POINTER ("BTFeatureFlagsV2"),
.Base = "__ZN24IOBluetoothHCIController25SetControllerFeatureFlagsEj",
.Find = NULL,
.Mask = NULL,
.Replace = mBTFeatureFlagsReplace,
.ReplaceMask = NULL,
.Size = sizeof (mBTFeatureFlagsReplace),
.Count = 1,
.Skip = 0
};
STATIC
EFI_STATUS
PatchBTFeatureFlags (
IN OUT PATCHER_CONTEXT *Patcher,
IN UINT32 KernelVersion
)
{
EFI_STATUS Status;
ASSERT (Patcher != NULL);
if (!OcMatchDarwinVersion (KernelVersion, KERNEL_VERSION_MOUNTAIN_LION_MIN, 0)) {
DEBUG ((DEBUG_INFO, "OCAK: Skipping BTFeatureFlags on %u\n", KernelVersion));
return EFI_SUCCESS;
}
Status = PatcherApplyGenericPatch (
Patcher,
&mBTFeatureFlagsPatchV1
);
if (EFI_ERROR (Status)) {
DEBUG ((DEBUG_INFO, "OCAK: Failed to find BT FeatureFlags symbol v1 - %r, trying v2\n", Status));
Status = PatcherApplyGenericPatch (
Patcher,
&mBTFeatureFlagsPatchV2
);
if (EFI_ERROR (Status)) {
DEBUG ((DEBUG_INFO, "OCAK: Failed to find BT FeatureFlags symbol v2 - %r\n", Status));
return EFI_NOT_FOUND;
}
}
return EFI_SUCCESS;
}
//
// Quirks table.
//
......@@ -1624,6 +1694,7 @@ KERNEL_QUIRK gKernelQuirks[] = {
[KernelQuirkXhciPortLimit2] = { "com.apple.driver.usb.AppleUSBXHCI", PatchUsbXhciPortLimit2 },
[KernelQuirkXhciPortLimit3] = { "com.apple.driver.usb.AppleUSBXHCIPCI", PatchUsbXhciPortLimit3 },
[KernelQuirkSegmentJettison] = { NULL, PatchSegmentJettison },
[KernelQuirkExtendBTFeatureFlags] = { "com.apple.iokit.IOBluetoothFamily", PatchBTFeatureFlags },
};
EFI_STATUS
......
......@@ -320,6 +320,7 @@ mKernelQuirksSchema[] = {
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 ("DummyPowerManagement", OC_GLOBAL_CONFIG, Kernel.Quirks.DummyPowerManagement),
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),
......
......@@ -249,6 +249,10 @@ OcKernelApplyPatches (
if (Config->Kernel.Quirks.DummyPowerManagement) {
OcKernelApplyQuirk (KernelQuirkDummyPowerManagement, CacheType, DarwinVersion, Context, NULL);
}
if (Config->Kernel.Quirks.ExtendBTFeatureFlags) {
OcKernelApplyQuirk (KernelQuirkExtendBTFeatureFlags, CacheType, DarwinVersion, Context, NULL);
}
} else {
if (Config->Kernel.Quirks.AppleXcpmCfgLock) {
OcKernelApplyQuirk (KernelQuirkAppleXcpmCfgLock, CacheType, DarwinVersion, NULL, &KernelPatcher);
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册