diff --git a/Changelog.md b/Changelog.md index f31fb8723291a45e620d7a395f9e8fb3148ce1cf..57898ab41c9bc263d9c4c63432d07bb1bc69dc12 100644 --- a/Changelog.md +++ b/Changelog.md @@ -22,6 +22,7 @@ OpenCore Changelog - Fixed patching of ACPI tables in low memory - Fixed macOS 11.0 DMG recovery loading without hotplug - Fixed `XhciPortLimit` quirk on 10.12.6 and possibly other versions +- Fixed `IncreasePciBarSize` quirk on 10.11.5 and possibly other versions #### v0.6.0 - Fixed sound corruption with AudioDxe diff --git a/Docs/Configuration.tex b/Docs/Configuration.tex index a8065912dd8c091fc57f10ecb0c7c3ea52e46a27..667157ee4140e3f19a119e4741397933ed7f2b5b 100755 --- a/Docs/Configuration.tex +++ b/Docs/Configuration.tex @@ -2181,7 +2181,7 @@ blocking. \texttt{IncreasePciBarSize}\\ \textbf{Type}: \texttt{plist\ boolean}\\ \textbf{Failsafe}: \texttt{false}\\ - \textbf{Requirement}: FIXME\\ + \textbf{Requirement}: 10.10\\ \textbf{Description}: Increases 32-bit PCI bar size in IOPCIFamily from 1 to 4 GBs. \emph{Note}: This option should be avoided whenever possible. In general the necessity diff --git a/Library/OcAppleKernelLib/CommonPatches.c b/Library/OcAppleKernelLib/CommonPatches.c index 24c86ccd31739aef25976f5e8270809cadf96639..2406a08e91104f90de2d72b98ec4ede08e128733 100644 --- a/Library/OcAppleKernelLib/CommonPatches.c +++ b/Library/OcAppleKernelLib/CommonPatches.c @@ -999,6 +999,33 @@ mIncreasePciBarSizePatch = { .Limit = EFI_PAGE_SIZE }; +STATIC +UINT8 +mIncreasePciBarSizePatchLegacyFind[] = { + 0x01, 0x00, 0x00, 0x40 +}; + +STATIC +UINT8 +mIncreasePciBarSizePatchLegacyReplace[] = { + 0x01, 0x00, 0x00, 0x80 +}; + +STATIC +PATCHER_GENERIC_PATCH +mIncreasePciBarSizeLegacyPatch = { + .Comment = DEBUG_POINTER ("IncreasePciBarSizeLegacy"), + .Base = "__ZN17IOPCIConfigurator24probeBaseAddressRegisterEP16IOPCIConfigEntryjj", + .Find = mIncreasePciBarSizePatchLegacyFind, + .Mask = NULL, + .Replace = mIncreasePciBarSizePatchLegacyReplace, + .ReplaceMask = NULL, + .Size = sizeof (mIncreasePciBarSizePatchLegacyFind), + .Count = 1, + .Skip = 0, + .Limit = EFI_PAGE_SIZE +}; + STATIC EFI_STATUS PatchIncreasePciBarSize ( @@ -1012,9 +1039,20 @@ PatchIncreasePciBarSize ( return EFI_NOT_FOUND; } + if (!OcMatchDarwinVersion (KernelVersion, KERNEL_VERSION_YOSEMITE_MIN, 0)) { + DEBUG ((DEBUG_INFO, "OCAK: Skipping com.apple.iokit.IOPCIFamily IncreasePciBarSize on %u\n", KernelVersion)); + return EFI_SUCCESS; + } + Status = PatcherApplyGenericPatch (Patcher, &mIncreasePciBarSizePatch); if (EFI_ERROR (Status)) { DEBUG ((DEBUG_INFO, "OCAK: Failed to apply patch com.apple.iokit.IOPCIFamily IncreasePciBarSize - %r\n", Status)); + Status = PatcherApplyGenericPatch (Patcher, &mIncreasePciBarSizeLegacyPatch); + if (EFI_ERROR (Status)) { + DEBUG ((DEBUG_INFO, "OCAK: Failed to apply legacy patch com.apple.iokit.IOPCIFamily IncreasePciBarSize - %r\n", Status)); + } else { + DEBUG ((DEBUG_INFO, "OCAK: Patch success legacy com.apple.iokit.IOPCIFamily IncreasePciBarSize\n")); + } } else { DEBUG ((DEBUG_INFO, "OCAK: Patch success com.apple.iokit.IOPCIFamily IncreasePciBarSize\n")); }