mirror of
https://github.com/dortania/OpenCore-Legacy-Patcher.git
synced 2026-04-21 03:04:31 +10:00
Compare commits
54 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
15ad0c509e | ||
|
|
0e0b1436b2 | ||
|
|
528d32cc9d | ||
|
|
8e15ed6d6e | ||
|
|
796b5bcd9e | ||
|
|
a37571a8a5 | ||
|
|
9796ecf75e | ||
|
|
cade003b31 | ||
|
|
2d8c9c5beb | ||
|
|
0a138ee435 | ||
|
|
6b414526ac | ||
|
|
a67a6d6c67 | ||
|
|
da887e3722 | ||
|
|
e65b8386ab | ||
|
|
0d7edc8e09 | ||
|
|
32080fdcc3 | ||
|
|
c2d9d01a24 | ||
|
|
cdb6603ed6 | ||
|
|
dbf7444009 | ||
|
|
c46133b0b5 | ||
|
|
dde558a951 | ||
|
|
9bdce62f59 | ||
|
|
098a4f9661 | ||
|
|
d9f23b556c | ||
|
|
0f63ce2fde | ||
|
|
adc58b417b | ||
|
|
b1bb01af69 | ||
|
|
2751ca69de | ||
|
|
e9744fffd6 | ||
|
|
e0e731b13a | ||
|
|
bb34bbb6a1 | ||
|
|
c68afc2f8e | ||
|
|
55ed78f5b4 | ||
|
|
c065aae29f | ||
|
|
8333c3d8ec | ||
|
|
b8b591a8ed | ||
|
|
4542287613 | ||
|
|
597b167285 | ||
|
|
7e5f171210 | ||
|
|
861898272b | ||
|
|
16ab3367f8 | ||
|
|
9d43d66f5d | ||
|
|
753cd6cf3f | ||
|
|
192dfb79ae | ||
|
|
d7f3d09c14 | ||
|
|
41a5731546 | ||
|
|
2e513b98ca | ||
|
|
5c1326881a | ||
|
|
1d6631f24d | ||
|
|
61872a8b94 | ||
|
|
024559885d | ||
|
|
3e0a2a2198 | ||
|
|
86be4acedb | ||
|
|
ce08129d4b |
19
CHANGELOG.md
19
CHANGELOG.md
@@ -1,5 +1,24 @@
|
|||||||
# OpenCore Legacy Patcher changelog
|
# OpenCore Legacy Patcher changelog
|
||||||
|
|
||||||
|
## 2.0.2
|
||||||
|
- Fix Nvidia Kepler patches not installing on Monterey
|
||||||
|
- Fix `iMac7,1` and `iMac8,1` failing to apply root patches on macOS Sequoia
|
||||||
|
- Avoid downgrading AppleGVA stack on AMD GCN and newer GPUs
|
||||||
|
- Resolves VTDecoderXPC crashes
|
||||||
|
- Thanks @ausdauersportler for the catch!
|
||||||
|
- Resolve glitched widgets on 3802-based GPUs running macOS Sequoia 15.1
|
||||||
|
- Resolve CoreImage crashes on 3802-based GPUs running macOS Sequoia
|
||||||
|
- Resolve missing screen capture crop borders on non-Metal GPUs running macOS Sequoia
|
||||||
|
- Resolve TeraScale 2 HDCP kernel panic
|
||||||
|
- Resolve specific Wallpaper locking up on non-Metal GPUs running macOS Sequoia
|
||||||
|
- Removes unsupported Metal-based wallpaper (Macintosh Wallpaper)
|
||||||
|
- Resolve firmware upload incompatibilities on pre-2012 Macs with 2012+ Airport cards
|
||||||
|
- Thanks @ausdauersportler for the catch!
|
||||||
|
- Resolve `diskutil` failing to be located in the installer creation process
|
||||||
|
- Thanks @niklasravnsborg for the report!
|
||||||
|
- Increment binaries:
|
||||||
|
- PatcherSupportPkg 1.8.3 - release
|
||||||
|
|
||||||
## 2.0.1
|
## 2.0.1
|
||||||
- Fix MacBookPro13,3 listing 'Available patches' after having installed all applicable patches
|
- Fix MacBookPro13,3 listing 'Available patches' after having installed all applicable patches
|
||||||
- Fix Nvidia Tesla and Kepler patches not installing on Monterey (and older if applicable)
|
- Fix Nvidia Tesla and Kepler patches not installing on Monterey (and older if applicable)
|
||||||
|
|||||||
@@ -69,6 +69,7 @@ module.exports = {
|
|||||||
children: [
|
children: [
|
||||||
'START',
|
'START',
|
||||||
'MODELS',
|
'MODELS',
|
||||||
|
'FAQ',
|
||||||
]
|
]
|
||||||
|
|
||||||
},
|
},
|
||||||
|
|||||||
75
docs/FAQ.md
Normal file
75
docs/FAQ.md
Normal file
@@ -0,0 +1,75 @@
|
|||||||
|
# FAQ
|
||||||
|
|
||||||
|
* [Why are the settings "not saving"?](#why-are-the-settings-not-saving)
|
||||||
|
* [Can I use the same USB install media as a universal installer?](#can-i-use-the-same-usb-install-media-as-a-universal-installer)
|
||||||
|
* [Can I use OTA updates?](#can-i-use-ota-updates)
|
||||||
|
* [Can I update to macOS betas?](#can-i-update-to-macos-betas)
|
||||||
|
* [Can I use automatic updates?](#can-i-use-automatic-updates)
|
||||||
|
* [Why is my system slow?](#why-is-my-system-slow)
|
||||||
|
* [Crashing in random places](#crashing-in-random-places)
|
||||||
|
* [Why isn't iPhone Mirroring working?](#why-isn-t-iphone-mirroring-working)
|
||||||
|
* [Where is Apple Intelligence?](#where-is-apple-intelligence)
|
||||||
|
|
||||||
|
|
||||||
|
## Why are the settings "not saving"?
|
||||||
|
|
||||||
|
OpenCore Legacy Patcher is a config build tool and as such the user interface always reverts to safe defaults, the user interface therefore **does not** reflect the status of settings. Settings are accounted for and saved by the OpenCore building process and you will always have to build OpenCore again after settings change.
|
||||||
|
|
||||||
|
Settings are saved to a config.plist file inside your EFI partition.
|
||||||
|
|
||||||
|
In SIP settings, booted SIP is reported in text form e.g. "0x803" but the checkboxes **do not** reflect the applied settings. Refer to [SIP Settings](https://dortania.github.io/OpenCore-Legacy-Patcher/POST-INSTALL.html#sip-settings) for more information.
|
||||||
|
|
||||||
|
## Can I use the same USB install media as a universal installer?
|
||||||
|
|
||||||
|
OpenCore configurations are device specific, due to different quirks needed for different systems. If you are building OpenCore for a different system that you're running, you will have to select the targeted model from Settings before building OpenCore on the USB media.
|
||||||
|
|
||||||
|
When building OpenCore on a different system, OCLP cannot be aware of all the hardware installed in the target, meaning safe defaults will be used. However, this may not be the most optimal experience especially with custom hardware. As such it's recommended to rebuild OpenCore **on device** to apply settings that are based on hardware detection, after the OS has been installed.
|
||||||
|
|
||||||
|
## Can I use OTA updates?
|
||||||
|
|
||||||
|
You can. However it is extremely recommended to use USB drive for major OS upgrades (such as 13 -> 14) to avoid larger issues from potentially occurring.
|
||||||
|
|
||||||
|
General updates are usually fine, though it is always a good idea to wait few days to see whether patches break and have to be fixed.
|
||||||
|
|
||||||
|
## Can I update to macOS betas?
|
||||||
|
|
||||||
|
If you are feeling brave and don't mind having to possibly recover your system. However, be advised that no help will be given in situations where a beta was installed.
|
||||||
|
|
||||||
|
## Can I use automatic updates?
|
||||||
|
|
||||||
|
It is extremely recommended to disable automatic updates (even downloading) when using OCLP, as Apple has recently changed the way automatic updates work. You can still manually initiate an update when you're ready to do so.
|
||||||
|
|
||||||
|
For a related "System version mismatch" error while root patching, refer to [System version mismatch error when root patching](https://dortania.github.io/OpenCore-Legacy-Patcher/TROUBLESHOOTING.html#system-version-mismatch-error-when-root-patching) for troubleshooting.
|
||||||
|
|
||||||
|
## Why is my system slow?
|
||||||
|
|
||||||
|
This can mean many things. Firstly, newer operating systems are harder to run and can appear more slow.
|
||||||
|
|
||||||
|
However, if your system is being **really** slow and you have no transparency in Dock and menubar, this typically indicates that root patches are not installed and as such there is no acceleration. Make sure to install root patches to get proper drivers and functionality. Refer to [Applying post install volume patches](https://dortania.github.io/OpenCore-Legacy-Patcher/POST-INSTALL.html#applying-post-install-volume-patches) and the [Troubleshooting](https://dortania.github.io/OpenCore-Legacy-Patcher/TROUBLESHOOTING.html) section for more information.
|
||||||
|
|
||||||
|
Patches can also break if automatic updates are enabled and an update modifies the system volume, refer to [System version mismatch error when root patching](https://dortania.github.io/OpenCore-Legacy-Patcher/TROUBLESHOOTING.html#system-version-mismatch-error-when-root-patching) for more information.
|
||||||
|
|
||||||
|
## Crashing in random places
|
||||||
|
|
||||||
|
There are two rather common things that can cause weird crashing. First is a process called "mediaanalysisd" on 3802-based systems* and secondly FeatureUnlock. You can try disabling these settings in OCLP to try and gain higher stability.
|
||||||
|
|
||||||
|
Be advised that by disabling FeatureUnlock, you will lose some macOS functionality. The features enabled by FeatureUnlock are listed [here](https://github.com/acidanthera/FeatureUnlock).
|
||||||
|
|
||||||
|
*3802 systems include:
|
||||||
|
* NVIDIA
|
||||||
|
* Kepler (600-800 series GPUs)
|
||||||
|
* Intel
|
||||||
|
* Ivy Bridge (3rd generation, HD 4000 series GPUs)
|
||||||
|
* Haswell (4th generation, HD/Iris 4000-5000 series GPUs)
|
||||||
|
|
||||||
|
These GPUs are typically met in systems from 2012-2015.
|
||||||
|
|
||||||
|
|
||||||
|
## Why isn't iPhone Mirroring working?
|
||||||
|
|
||||||
|
iPhone Mirroring requires a T2 chip, which means it will not be available on OCLP patched systems. The connection fails due to failure to establish T2 attestation.
|
||||||
|
|
||||||
|
## Where is Apple Intelligence?
|
||||||
|
|
||||||
|
Apple Intelligence requires Neural Engine, which is only found in Apple Silicon chips.
|
||||||
|
|
||||||
@@ -58,9 +58,7 @@ All unsupported systems require lowered SIP.
|
|||||||
|
|
||||||
Majority of unsupported systems from 2013 onward can enable full SIP.
|
Majority of unsupported systems from 2013 onward can enable full SIP.
|
||||||
|
|
||||||
Pre-2012 systems, also known as "non-Metal" (includes Mac Pros without upgraded GPU), as well as NVIDIA Kepler and Intel HD 4000 GPUs require lowered SIP.
|
Pre-2012 systems, also known as "non-Metal", as well as NVIDIA Kepler and Intel HD 4000 GPUs require lowered SIP. Mac Pros also require lowered SIP for stock WiFi cards and stock GPUs (due to root patching) but if you do not need WiFi (or you plan to upgrade it) and you're running on an upgraded GPU, there is no need for root patching and as such SIP can be fully enabled.
|
||||||
|
|
||||||
Some systems such as Mac Pros also require lowered SIP for stock WiFi cards and stock GPUs (due to root patching) but if you do not need WiFi (or you plan to upgrade it) and you're running on an upgraded GPU, there is no need for root patching and as such SIP can be fully enabled.
|
|
||||||
|
|
||||||
**Big Sur**
|
**Big Sur**
|
||||||
|
|
||||||
|
|||||||
@@ -30,7 +30,7 @@ iPhone Mirroring requires T2 for attestation and Apple Intelligence requires an
|
|||||||
|
|
||||||
* [Dual socket CPUs with Mac Pros and Xserve](#dual-socket-cpus-with-mac-pro-2008-and-xserve-2008)
|
* [Dual socket CPUs with Mac Pros and Xserve](#dual-socket-cpus-with-mac-pro-2008-and-xserve-2008)
|
||||||
* [T2 Security chip](#t2-security-chip)
|
* [T2 Security chip](#t2-security-chip)
|
||||||
* [USB 1.1 (OHCI/UHCI) Support](#usb-11-ohciuhci-support)
|
* [USB 1.1 (OHCI/UHCI) Support](#usb-1-1-ohci-uhci-support)
|
||||||
* [Graphics support and issues](#graphics-support-and-issues)
|
* [Graphics support and issues](#graphics-support-and-issues)
|
||||||
|
|
||||||
|
|
||||||
@@ -85,7 +85,7 @@ However, the driver has recently been weakened starting from Sonoma, which means
|
|||||||
An alternative way is making sure to enable "Remote Login" in General -> Sharing before updating, which will enable SSH.
|
An alternative way is making sure to enable "Remote Login" in General -> Sharing before updating, which will enable SSH.
|
||||||
That means you can take control using Terminal in another system by typing `ssh username@lan-ip-address` and your password.
|
That means you can take control using Terminal in another system by typing `ssh username@lan-ip-address` and your password.
|
||||||
|
|
||||||
After that run Post Install Volume Patching by typing `/Applications/OpenCore-Patcher.app/Contents/MacOS/OpenCore-Patcher --patch-sys-vol` and finally `sudo reboot`.
|
After that run Post Install Volume Patching by typing `/Applications/OpenCore-Patcher.app/Contents/MacOS/OpenCore-Patcher --patch_sys_vol` and finally `sudo reboot`.
|
||||||
|
|
||||||
|
|
||||||

|

|
||||||
|
|||||||
@@ -33,7 +33,7 @@ OpenCore Legacy Patcher 1.0.0 will support Sonoma for all models normally suppor
|
|||||||
|
|
||||||
* [Bluetooth](#bluetooth)
|
* [Bluetooth](#bluetooth)
|
||||||
* [T1 Security chip](#t1-security-chip)
|
* [T1 Security chip](#t1-security-chip)
|
||||||
* [USB 1.1 (OHCI/UHCI) Support](#usb-11-ohciuhci-support)
|
* [USB 1.1 (OHCI/UHCI) Support](#usb-1-1-ohci-uhci-support)
|
||||||
* [Graphics support and issues](#graphics-support-and-issues)
|
* [Graphics support and issues](#graphics-support-and-issues)
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -7,6 +7,7 @@ Here are some common errors that users may experience while using this patcher:
|
|||||||
* [Stuck on `This version of Mac OS X is not supported on this platform` or (🚫) Prohibited Symbol](#stuck-on-this-version-of-mac-os-x-is-not-supported-on-this-platform-or-🚫-prohibited-symbol)
|
* [Stuck on `This version of Mac OS X is not supported on this platform` or (🚫) Prohibited Symbol](#stuck-on-this-version-of-mac-os-x-is-not-supported-on-this-platform-or-🚫-prohibited-symbol)
|
||||||
* [Cannot boot macOS without the USB](#cannot-boot-macos-without-the-usb)
|
* [Cannot boot macOS without the USB](#cannot-boot-macos-without-the-usb)
|
||||||
* [Infinite Recovery OS Booting](#infinite-recovery-os-reboot)
|
* [Infinite Recovery OS Booting](#infinite-recovery-os-reboot)
|
||||||
|
* [System version mismatch error when root patching](#system-version-mismatch-error-when-root-patching)
|
||||||
* [Stuck on boot after root patching](#stuck-on-boot-after-root-patching)
|
* [Stuck on boot after root patching](#stuck-on-boot-after-root-patching)
|
||||||
* ["Unable to resolve dependencies, error code 71" when root patching](#unable-to-resolve-dependencies-error-code-71-when-root-patching)
|
* ["Unable to resolve dependencies, error code 71" when root patching](#unable-to-resolve-dependencies-error-code-71-when-root-patching)
|
||||||
* [Reboot when entering Hibernation (`Sleep Wake Failure`)](#reboot-when-entering-hibernation-sleep-wake-failure)
|
* [Reboot when entering Hibernation (`Sleep Wake Failure`)](#reboot-when-entering-hibernation-sleep-wake-failure)
|
||||||
@@ -78,6 +79,14 @@ With OpenCore Legacy Patcher, we rely on Apple Secure Boot to ensure OS updates
|
|||||||
|
|
||||||
* Note: Machines with modified root volumes will also result in an infinite recovery loop until integrity is restored.
|
* Note: Machines with modified root volumes will also result in an infinite recovery loop until integrity is restored.
|
||||||
|
|
||||||
|
## System version mismatch error when root patching
|
||||||
|
|
||||||
|
Updates from now on modify the system volume already while downloading, which can lead to broken patches out of a sudden as well as a "version mismatch" error while root patching, since the operating system gets into a liminal state between two versions. The "version mismatch" error is a safeguard preventing OCLP from patching on a system that is in a weird liminal state, to avoid leading to a very likely boot failure.
|
||||||
|
|
||||||
|
Currently there is a "PurgePendingUpdate" tool available [on the Discord server](https://discord.com/channels/417165963327176704/1037474131526029362/1255993208966742108) you can download and then run it in Terminal, to get rid of a pending update. This may be integrated into OCLP later on, however there is currently no ETA.
|
||||||
|
|
||||||
|
Disabling automatic macOS updates is extremely recommended once recovered, to prevent it from happening again.
|
||||||
|
|
||||||
## Stuck on boot after root patching
|
## Stuck on boot after root patching
|
||||||
|
|
||||||
Boot into recovery by pressing space when your disk is selected on the OCLP bootpicker (if you have it hidden, hold ESC while starting up)
|
Boot into recovery by pressing space when your disk is selected on the OCLP bootpicker (if you have it hidden, hold ESC while starting up)
|
||||||
@@ -238,7 +247,7 @@ For Macs using legacy USB 1.1 controllers, OpenCore Legacy Patcher can only rest
|
|||||||
|
|
||||||
In macOS Sonoma, this seems to have been further weakened and some hubs may not be functional.
|
In macOS Sonoma, this seems to have been further weakened and some hubs may not be functional.
|
||||||
|
|
||||||
Alternative way is making sure to enable "Remote Login" in General -> Sharing before updating, which will enable SSH. That means you can take control using Terminal in another system by typing `ssh username@lan-ip-address` and your password. After that run Post Install Volume Patching by typing `/Applications/OpenCore-Patcher.app/Contents/MacOS/OpenCore-Patcher --patch-sys-vol` and finally `sudo reboot`.
|
Alternative way is making sure to enable "Remote Login" in General -> Sharing before updating, which will enable SSH. That means you can take control using Terminal in another system by typing `ssh username@lan-ip-address` and your password. After that run Post Install Volume Patching by typing `/Applications/OpenCore-Patcher.app/Contents/MacOS/OpenCore-Patcher --patch_sys_vol` and finally `sudo reboot`.
|
||||||
|
|
||||||
:::
|
:::
|
||||||
|
|
||||||
|
|||||||
@@ -13,8 +13,8 @@ from .detections import device_probe
|
|||||||
class Constants:
|
class Constants:
|
||||||
def __init__(self) -> None:
|
def __init__(self) -> None:
|
||||||
# Patcher Versioning
|
# Patcher Versioning
|
||||||
self.patcher_version: str = "2.0.1" # OpenCore-Legacy-Patcher
|
self.patcher_version: str = "2.0.2" # OpenCore-Legacy-Patcher
|
||||||
self.patcher_support_pkg_version: str = "1.8.0" # PatcherSupportPkg
|
self.patcher_support_pkg_version: str = "1.8.3" # PatcherSupportPkg
|
||||||
self.copyright_date: str = "Copyright © 2020-2024 Dortania"
|
self.copyright_date: str = "Copyright © 2020-2024 Dortania"
|
||||||
self.patcher_name: str = "OpenCore Legacy Patcher"
|
self.patcher_name: str = "OpenCore Legacy Patcher"
|
||||||
|
|
||||||
|
|||||||
@@ -12,6 +12,7 @@ from .. import constants
|
|||||||
from ..detections import device_probe
|
from ..detections import device_probe
|
||||||
|
|
||||||
from ..datasets import (
|
from ..datasets import (
|
||||||
|
cpu_data,
|
||||||
smbios_data,
|
smbios_data,
|
||||||
bluetooth_data
|
bluetooth_data
|
||||||
)
|
)
|
||||||
@@ -44,19 +45,26 @@ class BuildBluetooth:
|
|||||||
self._prebuilt_assumption()
|
self._prebuilt_assumption()
|
||||||
|
|
||||||
|
|
||||||
|
def _bluetooth_firmware_incompatibility_workaround(self) -> None:
|
||||||
|
"""
|
||||||
|
For Mac firmwares that are unable to perform firmware uploads.
|
||||||
|
Namely Macs with BCM2070 and BCM2046 chipsets, as well as pre-2012 Macs with upgraded chipsets.
|
||||||
|
"""
|
||||||
|
self.config["NVRAM"]["Add"]["7C436110-AB2A-4BBB-A880-FE41995C9F82"]["bluetoothInternalControllerInfo"] = binascii.unhexlify("0000000000000000000000000000")
|
||||||
|
self.config["NVRAM"]["Add"]["7C436110-AB2A-4BBB-A880-FE41995C9F82"]["bluetoothExternalDongleFailed"] = binascii.unhexlify("00")
|
||||||
|
self.config["NVRAM"]["Delete"]["7C436110-AB2A-4BBB-A880-FE41995C9F82"] += ["bluetoothInternalControllerInfo", "bluetoothExternalDongleFailed"]
|
||||||
|
|
||||||
|
|
||||||
def _on_model(self) -> None:
|
def _on_model(self) -> None:
|
||||||
"""
|
"""
|
||||||
On-Model Hardware Detection Handling
|
On-Model Hardware Detection Handling
|
||||||
"""
|
"""
|
||||||
|
|
||||||
if self.computer.bluetooth_chipset in ["BRCM2070 Hub", "BRCM2046 Hub"]:
|
if self.computer.bluetooth_chipset in ["BRCM2070 Hub", "BRCM2046 Hub"]:
|
||||||
logging.info("- Fixing Legacy Bluetooth for macOS Monterey")
|
logging.info("- Fixing Legacy Bluetooth for macOS Monterey")
|
||||||
support.BuildSupport(self.model, self.constants, self.config).enable_kext("BlueToolFixup.kext", self.constants.bluetool_version, self.constants.bluetool_path)
|
support.BuildSupport(self.model, self.constants, self.config).enable_kext("BlueToolFixup.kext", self.constants.bluetool_version, self.constants.bluetool_path)
|
||||||
support.BuildSupport(self.model, self.constants, self.config).enable_kext("Bluetooth-Spoof.kext", self.constants.btspoof_version, self.constants.btspoof_path)
|
support.BuildSupport(self.model, self.constants, self.config).enable_kext("Bluetooth-Spoof.kext", self.constants.btspoof_version, self.constants.btspoof_path)
|
||||||
self.config["NVRAM"]["Add"]["7C436110-AB2A-4BBB-A880-FE41995C9F82"]["boot-args"] += " -btlfxallowanyaddr"
|
self.config["NVRAM"]["Add"]["7C436110-AB2A-4BBB-A880-FE41995C9F82"]["boot-args"] += " -btlfxallowanyaddr"
|
||||||
self.config["NVRAM"]["Add"]["7C436110-AB2A-4BBB-A880-FE41995C9F82"]["bluetoothInternalControllerInfo"] = binascii.unhexlify("0000000000000000000000000000")
|
self._bluetooth_firmware_incompatibility_workaround()
|
||||||
self.config["NVRAM"]["Add"]["7C436110-AB2A-4BBB-A880-FE41995C9F82"]["bluetoothExternalDongleFailed"] = binascii.unhexlify("00")
|
|
||||||
self.config["NVRAM"]["Delete"]["7C436110-AB2A-4BBB-A880-FE41995C9F82"] += ["bluetoothInternalControllerInfo", "bluetoothExternalDongleFailed"]
|
|
||||||
elif self.computer.bluetooth_chipset == "BRCM20702 Hub":
|
elif self.computer.bluetooth_chipset == "BRCM20702 Hub":
|
||||||
# BCM94331 can include either BCM2070 or BRCM20702 v1 Bluetooth chipsets
|
# BCM94331 can include either BCM2070 or BRCM20702 v1 Bluetooth chipsets
|
||||||
# Note Monterey only natively supports BRCM20702 v2 (found with BCM94360)
|
# Note Monterey only natively supports BRCM20702 v2 (found with BCM94360)
|
||||||
@@ -65,6 +73,13 @@ class BuildBluetooth:
|
|||||||
if self.computer.wifi.chipset == device_probe.Broadcom.Chipsets.AirPortBrcm4360:
|
if self.computer.wifi.chipset == device_probe.Broadcom.Chipsets.AirPortBrcm4360:
|
||||||
logging.info("- Fixing Legacy Bluetooth for macOS Monterey")
|
logging.info("- Fixing Legacy Bluetooth for macOS Monterey")
|
||||||
support.BuildSupport(self.model, self.constants, self.config).enable_kext("BlueToolFixup.kext", self.constants.bluetool_version, self.constants.bluetool_path)
|
support.BuildSupport(self.model, self.constants, self.config).enable_kext("BlueToolFixup.kext", self.constants.bluetool_version, self.constants.bluetool_path)
|
||||||
|
|
||||||
|
# Older Mac firmwares (pre-2012) don't support the new chipsets correctly (regardless of WiFi card)
|
||||||
|
if self.model in smbios_data.smbios_dictionary:
|
||||||
|
if smbios_data.smbios_dictionary[self.model]["CPU Generation"] < cpu_data.CPUGen.ivy_bridge.value:
|
||||||
|
logging.info("- Fixing Legacy Bluetooth for macOS Monterey")
|
||||||
|
support.BuildSupport(self.model, self.constants, self.config).enable_kext("BlueToolFixup.kext", self.constants.bluetool_version, self.constants.bluetool_path)
|
||||||
|
self._bluetooth_firmware_incompatibility_workaround()
|
||||||
elif self.computer.bluetooth_chipset == "3rd Party Bluetooth 4.0 Hub":
|
elif self.computer.bluetooth_chipset == "3rd Party Bluetooth 4.0 Hub":
|
||||||
logging.info("- Detected 3rd Party Bluetooth Chipset")
|
logging.info("- Detected 3rd Party Bluetooth Chipset")
|
||||||
support.BuildSupport(self.model, self.constants, self.config).enable_kext("BlueToolFixup.kext", self.constants.bluetool_version, self.constants.bluetool_path)
|
support.BuildSupport(self.model, self.constants, self.config).enable_kext("BlueToolFixup.kext", self.constants.bluetool_version, self.constants.bluetool_path)
|
||||||
@@ -87,7 +102,5 @@ class BuildBluetooth:
|
|||||||
support.BuildSupport(self.model, self.constants, self.config).enable_kext("BlueToolFixup.kext", self.constants.bluetool_version, self.constants.bluetool_path)
|
support.BuildSupport(self.model, self.constants, self.config).enable_kext("BlueToolFixup.kext", self.constants.bluetool_version, self.constants.bluetool_path)
|
||||||
if smbios_data.smbios_dictionary[self.model]["Bluetooth Model"] <= bluetooth_data.bluetooth_data.BRCM2070.value:
|
if smbios_data.smbios_dictionary[self.model]["Bluetooth Model"] <= bluetooth_data.bluetooth_data.BRCM2070.value:
|
||||||
self.config["NVRAM"]["Add"]["7C436110-AB2A-4BBB-A880-FE41995C9F82"]["boot-args"] += " -btlfxallowanyaddr"
|
self.config["NVRAM"]["Add"]["7C436110-AB2A-4BBB-A880-FE41995C9F82"]["boot-args"] += " -btlfxallowanyaddr"
|
||||||
self.config["NVRAM"]["Add"]["7C436110-AB2A-4BBB-A880-FE41995C9F82"]["bluetoothInternalControllerInfo"] = binascii.unhexlify("0000000000000000000000000000")
|
self._bluetooth_firmware_incompatibility_workaround()
|
||||||
self.config["NVRAM"]["Add"]["7C436110-AB2A-4BBB-A880-FE41995C9F82"]["bluetoothExternalDongleFailed"] = binascii.unhexlify("00")
|
|
||||||
self.config["NVRAM"]["Delete"]["7C436110-AB2A-4BBB-A880-FE41995C9F82"] += ["bluetoothInternalControllerInfo", "bluetoothExternalDongleFailed"]
|
|
||||||
support.BuildSupport(self.model, self.constants, self.config).enable_kext("Bluetooth-Spoof.kext", self.constants.btspoof_version, self.constants.btspoof_path)
|
support.BuildSupport(self.model, self.constants, self.config).enable_kext("Bluetooth-Spoof.kext", self.constants.btspoof_version, self.constants.btspoof_path)
|
||||||
@@ -135,7 +135,7 @@ class InstallerCreation():
|
|||||||
|
|
||||||
with script_location.open("w") as script:
|
with script_location.open("w") as script:
|
||||||
script.write(f'''#!/bin/bash
|
script.write(f'''#!/bin/bash
|
||||||
erase_disk='diskutil eraseDisk HFS+ OCLP-Installer {disk}'
|
erase_disk='/usr/sbin/diskutil eraseDisk HFS+ OCLP-Installer {disk}'
|
||||||
if $erase_disk; then
|
if $erase_disk; then
|
||||||
"{createinstallmedia_path}" --volume /Volumes/OCLP-Installer --nointeraction{additional_args}
|
"{createinstallmedia_path}" --volume /Volumes/OCLP-Installer --nointeraction{additional_args}
|
||||||
fi
|
fi
|
||||||
|
|||||||
@@ -120,11 +120,10 @@ class AMDLegacyGCN(BaseHardware):
|
|||||||
|
|
||||||
_base = {}
|
_base = {}
|
||||||
|
|
||||||
if self._is_gpu_architecture_present(gpu_architectures=[device_probe.Intel.Archs.Skylake]) is False:
|
# AMD GCN and newer GPUs can still use the native GVA stack
|
||||||
# Monterey GVA is not required for Intel Skylake iGPUs
|
_base.update({
|
||||||
_base.update({
|
**MontereyGVA(self._xnu_major, self._xnu_minor, self._constants.detected_os_version).revert_patches(),
|
||||||
**MontereyGVA(self._xnu_major, self._xnu_minor, self._constants.detected_os_version).patches(),
|
})
|
||||||
})
|
|
||||||
|
|
||||||
_base.update({
|
_base.update({
|
||||||
**MontereyOpenCL(self._xnu_major, self._xnu_minor, self._constants.detected_os_version).patches(),
|
**MontereyOpenCL(self._xnu_major, self._xnu_minor, self._constants.detected_os_version).patches(),
|
||||||
|
|||||||
@@ -0,0 +1,127 @@
|
|||||||
|
"""
|
||||||
|
amd_navi.py: AMD Navi detection (Not implemented, only present for reference)
|
||||||
|
"""
|
||||||
|
|
||||||
|
from ..base import BaseHardware, HardwareVariant, HardwareVariantGraphicsSubclass
|
||||||
|
|
||||||
|
from ...base import PatchType
|
||||||
|
|
||||||
|
from ...shared_patches.monterey_opencl import MontereyOpenCL
|
||||||
|
from ...shared_patches.amd_opencl import AMDOpenCL
|
||||||
|
|
||||||
|
from .....constants import Constants
|
||||||
|
from .....detections import device_probe
|
||||||
|
|
||||||
|
from .....datasets.os_data import os_data
|
||||||
|
|
||||||
|
|
||||||
|
class AMDNavi(BaseHardware):
|
||||||
|
|
||||||
|
def __init__(self, xnu_major, xnu_minor, os_build, global_constants: Constants) -> None:
|
||||||
|
super().__init__(xnu_major, xnu_minor, os_build, global_constants)
|
||||||
|
|
||||||
|
|
||||||
|
def name(self) -> str:
|
||||||
|
"""
|
||||||
|
Display name for end users
|
||||||
|
"""
|
||||||
|
return f"{self.hardware_variant()}: AMD Navi"
|
||||||
|
|
||||||
|
|
||||||
|
def present(self) -> bool:
|
||||||
|
"""
|
||||||
|
Targeting AMD Navi GPUs with CPUs lacking AVX2.0
|
||||||
|
"""
|
||||||
|
return self._is_gpu_architecture_present(
|
||||||
|
gpu_architectures=[
|
||||||
|
device_probe.AMD.Archs.Navi
|
||||||
|
]
|
||||||
|
) and "AVX2" not in self._computer.cpu.leafs and self._dortania_internal_check() is True
|
||||||
|
|
||||||
|
|
||||||
|
def native_os(self) -> bool:
|
||||||
|
"""
|
||||||
|
Dropped support with macOS 13, Ventura
|
||||||
|
"""
|
||||||
|
return self._xnu_major < os_data.ventura.value
|
||||||
|
|
||||||
|
|
||||||
|
def hardware_variant(self) -> HardwareVariant:
|
||||||
|
"""
|
||||||
|
Type of hardware variant
|
||||||
|
"""
|
||||||
|
return HardwareVariant.GRAPHICS
|
||||||
|
|
||||||
|
|
||||||
|
def hardware_variant_graphics_subclass(self) -> HardwareVariantGraphicsSubclass:
|
||||||
|
"""
|
||||||
|
Type of hardware variant subclass
|
||||||
|
"""
|
||||||
|
return HardwareVariantGraphicsSubclass.METAL_31001_GRAPHICS
|
||||||
|
|
||||||
|
|
||||||
|
def requires_kernel_debug_kit(self) -> bool:
|
||||||
|
"""
|
||||||
|
Apple no longer provides standalone kexts in the base OS
|
||||||
|
"""
|
||||||
|
return self._xnu_major >= os_data.ventura.value
|
||||||
|
|
||||||
|
|
||||||
|
def _model_specific_patches(self) -> dict:
|
||||||
|
"""
|
||||||
|
Model specific patches
|
||||||
|
"""
|
||||||
|
return {
|
||||||
|
"AMD Navi": {
|
||||||
|
PatchType.OVERWRITE_SYSTEM_VOLUME: {
|
||||||
|
"AMDRadeonX6000.kext": self._resolve_monterey_framebuffers(),
|
||||||
|
"AMDRadeonX6000Framebuffer.kext": "12.5",
|
||||||
|
|
||||||
|
"AMDRadeonVADriver2.bundle": "12.5",
|
||||||
|
"AMDRadeonX6000GLDriver.bundle": "12.5",
|
||||||
|
"AMDRadeonX6000MTLDriver.bundle": "12.5" if self._xnu_major < os_data.sequoia else "12.5-24",
|
||||||
|
"AMDRadeonX6000Shared.bundle": "12.5",
|
||||||
|
|
||||||
|
"AMDShared.bundle": "12.5",
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
def _model_specific_patches_extended(self) -> dict:
|
||||||
|
"""
|
||||||
|
Support mixed legacy and modern AMD GPUs
|
||||||
|
Specifically systems using AMD GCN 1-3 and Navi (ex. MacPro6,1 with eGPU)
|
||||||
|
Assume 'AMD Legacy GCN' patchset is installed alongside this
|
||||||
|
"""
|
||||||
|
if self._is_gpu_architecture_present([
|
||||||
|
device_probe.AMD.Archs.Legacy_GCN_7000,
|
||||||
|
device_probe.AMD.Archs.Legacy_GCN_8000,
|
||||||
|
device_probe.AMD.Archs.Legacy_GCN_9000
|
||||||
|
]) is False:
|
||||||
|
return {}
|
||||||
|
|
||||||
|
return {
|
||||||
|
"AMD Navi Extended": {
|
||||||
|
PatchType.OVERWRITE_SYSTEM_VOLUME: {
|
||||||
|
"/System/Library/Extensions": {
|
||||||
|
"AMDRadeonX6000HWServices.kext": "12.5",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
def patches(self) -> dict:
|
||||||
|
"""
|
||||||
|
Patches for AMD Navi GPUs
|
||||||
|
"""
|
||||||
|
if self.native_os() is True:
|
||||||
|
return {}
|
||||||
|
|
||||||
|
return {
|
||||||
|
**MontereyOpenCL(self._xnu_major, self._xnu_minor, self._constants.detected_os_version).patches(),
|
||||||
|
**AMDOpenCL(self._xnu_major, self._xnu_minor, self._constants.detected_os_version).patches(),
|
||||||
|
**self._model_specific_patches(),
|
||||||
|
**self._model_specific_patches_extended(),
|
||||||
|
}
|
||||||
@@ -139,10 +139,9 @@ class AMDPolaris(BaseHardware):
|
|||||||
**AMDOpenCL(self._xnu_major, self._xnu_minor, self._constants.detected_os_version).patches(),
|
**AMDOpenCL(self._xnu_major, self._xnu_minor, self._constants.detected_os_version).patches(),
|
||||||
})
|
})
|
||||||
|
|
||||||
if self._is_gpu_architecture_present(gpu_architectures=[device_probe.Intel.Archs.Skylake]) is False:
|
# AMD GCN and newer GPUs can still use the native GVA stack
|
||||||
# Monterey GVA is not required for Intel Skylake iGPUs
|
_base.update({
|
||||||
_base.update({
|
**MontereyGVA(self._xnu_major, self._xnu_minor, self._constants.detected_os_version).revert_patches(),
|
||||||
**MontereyGVA(self._xnu_major, self._xnu_minor, self._constants.detected_os_version).patches(),
|
})
|
||||||
})
|
|
||||||
|
|
||||||
return _base
|
return _base
|
||||||
@@ -122,7 +122,9 @@ class AMDVega(BaseHardware):
|
|||||||
return {}
|
return {}
|
||||||
|
|
||||||
return {
|
return {
|
||||||
**MontereyGVA(self._xnu_major, self._xnu_minor, self._constants.detected_os_version).patches(),
|
# AMD GCN and newer GPUs can still use the native GVA stack
|
||||||
|
**MontereyGVA(self._xnu_major, self._xnu_minor, self._constants.detected_os_version).revert_patches(),
|
||||||
|
|
||||||
**MontereyOpenCL(self._xnu_major, self._xnu_minor, self._constants.detected_os_version).patches(),
|
**MontereyOpenCL(self._xnu_major, self._xnu_minor, self._constants.detected_os_version).patches(),
|
||||||
**AMDOpenCL(self._xnu_major, self._xnu_minor, self._constants.detected_os_version).patches(),
|
**AMDOpenCL(self._xnu_major, self._xnu_minor, self._constants.detected_os_version).patches(),
|
||||||
**self._model_specific_patches(),
|
**self._model_specific_patches(),
|
||||||
|
|||||||
@@ -49,10 +49,9 @@ class NvidiaKepler(BaseHardware):
|
|||||||
return True
|
return True
|
||||||
|
|
||||||
if self._xnu_major == os_data.monterey:
|
if self._xnu_major == os_data.monterey:
|
||||||
if self._xnu_minor < 0: # 12.0 Beta 8
|
if self._xnu_minor <= 0: # 12.0 Beta 8 increased XNU minor
|
||||||
return True
|
if self._os_build != "21A5522h": # 12.0 Beta 7
|
||||||
if self._os_build != "21A5522h": # 12.0 Beta 7
|
return True
|
||||||
return True
|
|
||||||
|
|
||||||
return False
|
return False
|
||||||
|
|
||||||
|
|||||||
@@ -118,6 +118,7 @@ class LegacyAudio(BaseHardware):
|
|||||||
"AppleVirtualPlatform.kext",
|
"AppleVirtualPlatform.kext",
|
||||||
"ApplePVPanic.kext",
|
"ApplePVPanic.kext",
|
||||||
"AppleVirtIOStorage.kext",
|
"AppleVirtIOStorage.kext",
|
||||||
|
"AvpFairPlayDriver.kext",
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -34,7 +34,7 @@ class AMDTeraScale(BaseSharedPatchSet):
|
|||||||
PatchType.OVERWRITE_SYSTEM_VOLUME: {
|
PatchType.OVERWRITE_SYSTEM_VOLUME: {
|
||||||
"/System/Library/Extensions": {
|
"/System/Library/Extensions": {
|
||||||
"AMDFramebuffer.kext": "10.13.6",
|
"AMDFramebuffer.kext": "10.13.6",
|
||||||
"AMDLegacyFramebuffer.kext": "10.13.6",
|
"AMDLegacyFramebuffer.kext": "10.13.6" if self._xnu_float < self.macOS_13_3 else "10.13.6 TS2",
|
||||||
"AMDLegacySupport.kext": "10.13.6",
|
"AMDLegacySupport.kext": "10.13.6",
|
||||||
"AMDShared.bundle": "10.13.6",
|
"AMDShared.bundle": "10.13.6",
|
||||||
"AMDSupport.kext": "10.13.6",
|
"AMDSupport.kext": "10.13.6",
|
||||||
|
|||||||
@@ -2,6 +2,8 @@
|
|||||||
metal_3802.py: Metal 3802 patches
|
metal_3802.py: Metal 3802 patches
|
||||||
"""
|
"""
|
||||||
|
|
||||||
|
import packaging.version
|
||||||
|
|
||||||
from .base import BaseSharedPatchSet
|
from .base import BaseSharedPatchSet
|
||||||
|
|
||||||
from ..base import PatchType, DynamicPatchset
|
from ..base import PatchType, DynamicPatchset
|
||||||
@@ -129,7 +131,7 @@ class LegacyMetal3802(BaseSharedPatchSet):
|
|||||||
"default.metallib": "15.0 Beta 7",
|
"default.metallib": "15.0 Beta 7",
|
||||||
},
|
},
|
||||||
"/System/Library/PrivateFrameworks/RenderBox.framework/Versions/A/Resources": {
|
"/System/Library/PrivateFrameworks/RenderBox.framework/Versions/A/Resources": {
|
||||||
"default.metallib": "15.0 Beta 8",
|
"default.metallib": "15.0 Beta 8" if packaging.version.parse(self._marketing_version) < packaging.version.parse("15.1") else "15.1 Beta 4",
|
||||||
},
|
},
|
||||||
"/System/iOSSupport/System/Library/PrivateFrameworks/VFX.framework/Versions/A/Resources": {
|
"/System/iOSSupport/System/Library/PrivateFrameworks/VFX.framework/Versions/A/Resources": {
|
||||||
"default.metallib": DynamicPatchset.MetallibSupportPkg,
|
"default.metallib": DynamicPatchset.MetallibSupportPkg,
|
||||||
|
|||||||
@@ -39,4 +39,25 @@ class MontereyGVA(BaseSharedPatchSet):
|
|||||||
},
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
def revert_patches(self) -> dict:
|
||||||
|
"""
|
||||||
|
Revert if patches are no longer required/misapplied
|
||||||
|
"""
|
||||||
|
if self._os_requires_patches() is False:
|
||||||
|
return {}
|
||||||
|
|
||||||
|
return {
|
||||||
|
"Revert Monterey GVA": {
|
||||||
|
PatchType.REMOVE_SYSTEM_VOLUME: {
|
||||||
|
"/System/Library/PrivateFrameworks/AppleGVA.framework/Versions/A": [
|
||||||
|
"AppleGVA"
|
||||||
|
],
|
||||||
|
"/System/Library/PrivateFrameworks/AppleGVACore.framework/Versions/A": [
|
||||||
|
"AppleGVACore"
|
||||||
|
],
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
@@ -38,6 +38,9 @@ class NonMetal(BaseSharedPatchSet):
|
|||||||
"/System/Applications": {
|
"/System/Applications": {
|
||||||
**({ "Photo Booth.app": "11.7.9"} if self._xnu_major >= os_data.monterey else {}),
|
**({ "Photo Booth.app": "11.7.9"} if self._xnu_major >= os_data.monterey else {}),
|
||||||
},
|
},
|
||||||
|
"/usr/sbin": {
|
||||||
|
**({ "screencapture": "14.7"} if self._xnu_major >= os_data.sequoia else {}),
|
||||||
|
},
|
||||||
},
|
},
|
||||||
PatchType.REMOVE_SYSTEM_VOLUME: {
|
PatchType.REMOVE_SYSTEM_VOLUME: {
|
||||||
"/System/Library/Extensions": [
|
"/System/Library/Extensions": [
|
||||||
@@ -67,6 +70,9 @@ class NonMetal(BaseSharedPatchSet):
|
|||||||
"IOGPUFamily.kext",
|
"IOGPUFamily.kext",
|
||||||
"AppleAfterburner.kext",
|
"AppleAfterburner.kext",
|
||||||
],
|
],
|
||||||
|
"/System/Library/ExtensionKit/Extensions/": [
|
||||||
|
"WallpaperMacintoshExtension.appex"
|
||||||
|
],
|
||||||
},
|
},
|
||||||
PatchType.OVERWRITE_DATA_VOLUME: {
|
PatchType.OVERWRITE_DATA_VOLUME: {
|
||||||
"/Library/Application Support/SkyLightPlugins": {
|
"/Library/Application Support/SkyLightPlugins": {
|
||||||
|
|||||||
@@ -23,7 +23,8 @@ from ..support import (
|
|||||||
global_settings,
|
global_settings,
|
||||||
defaults,
|
defaults,
|
||||||
generate_smbios,
|
generate_smbios,
|
||||||
network_handler
|
network_handler,
|
||||||
|
subprocess_wrapper
|
||||||
)
|
)
|
||||||
from ..datasets import (
|
from ..datasets import (
|
||||||
model_array,
|
model_array,
|
||||||
@@ -739,9 +740,9 @@ class SettingsFrame(wx.Frame):
|
|||||||
"value": self._get_system_settings("Moraea.EnableSpinHack"),
|
"value": self._get_system_settings("Moraea.EnableSpinHack"),
|
||||||
"variable": "Moraea.EnableSpinHack",
|
"variable": "Moraea.EnableSpinHack",
|
||||||
"description": [
|
"description": [
|
||||||
"Note: May be more CPU intensive.",
|
"Control beach ball cursor behaviour.",
|
||||||
],
|
],
|
||||||
"override_function": self._update_system_defaults,
|
"override_function": self._update_system_defaults_root,
|
||||||
"condition": gui_support.CheckProperties(self.constants).host_is_non_metal(general_check=True)
|
"condition": gui_support.CheckProperties(self.constants).host_is_non_metal(general_check=True)
|
||||||
},
|
},
|
||||||
"wrap_around 2": {
|
"wrap_around 2": {
|
||||||
@@ -1127,6 +1128,19 @@ Hardware Information:
|
|||||||
subprocess.run(["/usr/bin/defaults", "write", "-globalDomain", variable, value_type, str(value)])
|
subprocess.run(["/usr/bin/defaults", "write", "-globalDomain", variable, value_type, str(value)])
|
||||||
|
|
||||||
|
|
||||||
|
def _update_system_defaults_root(self, variable, value, global_setting = None):
|
||||||
|
value_type = type(value)
|
||||||
|
if value_type is str:
|
||||||
|
value_type = "-string"
|
||||||
|
elif value_type is int:
|
||||||
|
value_type = "-int"
|
||||||
|
elif value_type is bool:
|
||||||
|
value_type = "-bool"
|
||||||
|
|
||||||
|
logging.info(f"Updating System Defaults (root): {variable} = {value} ({value_type})")
|
||||||
|
subprocess_wrapper.run_as_root(["/usr/bin/defaults", "write", "/Library/Preferences/.GlobalPreferences.plist", variable, value_type, str(value)])
|
||||||
|
|
||||||
|
|
||||||
def _find_parent_for_key(self, key: str) -> str:
|
def _find_parent_for_key(self, key: str) -> str:
|
||||||
for parent in self.settings:
|
for parent in self.settings:
|
||||||
if key in self.settings[parent]:
|
if key in self.settings[parent]:
|
||||||
|
|||||||
Reference in New Issue
Block a user