Merge branch 'main' into sonoma-development

This commit is contained in:
Mykola Grymalyuk
2023-07-16 21:43:06 -06:00
committed by GitHub
70 changed files with 423 additions and 436 deletions

View File

@@ -12,7 +12,6 @@ body:
label: Machine Model
description: What model was being patched?
options:
- MacBook4,1
- MacBook5,1
- MacBook5,2
- MacBook6,1

View File

@@ -8,6 +8,24 @@
- Drops ColorSync downgrade configuration option
- Resolve app not updating in `/Applications` after an update
- Work-around users manually copying app to `/Applications` instead of allowing Root Volume Patcher to create a proper alias
- Add configuration for mediaanalysisd usage
- For systems that are the primary iCloud Photo Library host, mediaanalysisd may be unstable on large amounts of unprocessed faces
- Applicable to 3802-based GPUs (ie. Intel Ivy Bridge and Haswell iGPUs, Nvidia Kepler dGPUs)
- Remove MacBook4,1 references
- Machine was never properly supported by OCLP
- Restore support for Aquantia Aqtion 10GBe Ethernet for Pre-VT-d systems on 12.3 and newer
- i.e. MacPro5,1 with AQC107 expansion card running macOS Ventura/Monterey 12.6.x
- Thanks [@jazzzny](https://github.com/jazzzny)
- Resolve AMD Vega support on pre-AVX2 Macs in macOS Ventura
- Originally caused by regression from 0.6.2
- Backend Changes:
- device_probe.py:
- Add USB device parsing via `IOUSBDevice` class
- Streamline Bluetooth device detection
- Add Probing for Top Case hardware (Jazzzny)
- Improves handling for altered hardware scenarios (i.e. MacBookPro4,1 with MacBookPro3,1 topcase)
- utilities.py:
- Fix indexing error on Device Paths (thx [@Ausdauersportler](https://github.com/Ausdauersportler))
- Increment Binaries:
- PatcherSupportPkg 1.1.4 - release
@@ -15,7 +33,7 @@
- Resolve partition buttons overlapping in Install OpenCore UI
- ex. "EFI" and additional FAT32 partitions on a single drive
- Re-enable mediaanalysisd on Ventura
- Allows for Live Text support on systems with3802 GPUs
- Allows for Live Text support on systems with 3802 GPUs
- ie. Intel Ivy Bridge and Haswell, Nvidia Kepler
- Previously disabled due to high instability in Photos with Face Scanning, now resolved
- Work-around crashing after patching with MenuBar2 implementation enabled

View File

@@ -93,6 +93,7 @@ To run the project from source, see here: [Build and run from source](./SOURCE.m
* [FixPCIeLinkrate](https://github.com/joevt/joevtApps)
* [Jazzzny](https://github.com/Jazzzny)
* Research and various contributions to the project
* Aquantia Ethernet Patch
* Amazing users who've graciously donate hardware:
* [JohnD](https://forums.macrumors.com/members/johnd.53633/) - 2013 Mac Pro
* [SpiGAndromeda](https://github.com/SpiGAndromeda) - AMD Vega 64

View File

@@ -2,7 +2,6 @@
# Copyright (C) 2020-2022, Dhinak G, Mykola Grymalyuk
SupportedSMBIOS = [
# MacBook
"MacBook4,1",
"MacBook5,1",
"MacBook5,2",
"MacBook6,1",
@@ -97,7 +96,6 @@ SupportedSMBIOS = [
# Audio
LegacyAudio = [
"MacBook4,1",
"MacBook5,1",
"MacBook5,2",
"MacBook6,1",
@@ -182,7 +180,6 @@ ModernGPU = [
]
LegacyGPU = [
"MacBook4,1", # GMA X3100
"MacBook5,1", # Nvidia 9000
"MacBook5,2", # Nvidia 9000
"MacBook6,1", # Nvidia 9000
@@ -259,7 +256,7 @@ MacPro = ["MacPro3,1", "MacPro4,1", "MacPro5,1", "Xserve2,1", "Xserve3,1", "Dort
# MXM iMac
MXMiMac = ["iMac11,1", "iMac11,2", "iMac11,3", "iMac10,1", "iMac12,1", "iMac12,2", "Dortania1,1"]
NoAGPMSupport = ["MacBook4,1", "MacBookPro4,1", "iMac7,1", "iMac8,1", "MacPro3,1", "Xserve2,1", "Dortania1,1"]
NoAGPMSupport = ["MacBookPro4,1", "iMac7,1", "iMac8,1", "MacPro3,1", "Xserve2,1", "Dortania1,1"]
AGDPSupport = [
"MacBookPro9,1",
@@ -284,7 +281,6 @@ AGDPSupport = [
]
Missing_USB_Map = [
"MacBook4,1",
"MacBook5,1",
"MacBook5,2",
"MacBook6,1",

View File

@@ -818,7 +818,6 @@ class SystemPatchDictionary():
"Install": {
"/System/Library/Extensions": {
"AMDRadeonX5000.kext": "12.5",
"AMDRadeonX5000HWServices.kext": "12.5",
"AMDRadeonVADriver2.bundle": "12.5",
"AMDRadeonX5000GLDriver.bundle": "12.5",

111
data/usb_data.py Normal file
View File

@@ -0,0 +1,111 @@
class AppleIDs:
# All top case devices use Vendor ID 05ac
Modern_AppleUSBTCKeyboard = [
0x223,
0x224,
0x225,
0x230,
0x231,
0x232,
0x236,
0x237,
0x238,
0x23f,
0x240,
0x241,
0x242,
0x243,
0x244,
0x245,
0x246,
0x247,
0x249,
0x24a,
0x24b,
0x259,
0x25a,
0x25b,
0x262,
0x263,
0x264,
0x24c,
0x24d,
0x24e,
0x252,
0x253,
0x254
]
Legacy_AppleUSBTCKeyboard = [
0x20e,
0x20f,
0x210,
0x214,
0x215,
0x216,
0x20d,
0x218,
0x219,
0x21a,
0x21b,
0x21c,
0x229,
0x22a,
0x22b
]
AppleUSBTrackpad = [
0x20e,
0x20f,
0x210,
0x30a,
0x30b,
0x214,
0x215,
0x216,
0x217,
0x218,
0x219,
0x21a,
0x21b,
0x21c,
0x229,
0x22a,
0x22b
]
AppleUSBMultiTouch = [
0x223,
0x224,
0x225,
0x230,
0x231,
0x232,
0x236,
0x237,
0x238,
0x23f,
0x240,
0x241,
0x242,
0x243,
0x244,
0x245,
0x246,
0x247,
0x249,
0x24a,
0x24b,
0x259,
0x25a,
0x25b,
0x262,
0x263,
0x264,
0x24c,
0x24d,
0x24e,
0x252,
0x253,
0x254
]

View File

@@ -64,12 +64,15 @@ Currently Zoom relies partially on Metal and so needs a small binary patch. Dosd
* [Zoom Non-Metal Fix](http://dosdude1.com/catalina/zoomnonmetal-new.command.zip)
## Unable to grant special permissions to apps (ie. Camera Access to Zoom)
Currently for Ventura 13.3 and newer, due to new patches required, permissions are yet again broken. Use TCCPlus in the Workaround dropdown to work around the issue.
With version 0.2.5, this issue should be full resolved
This issue is fully resolved for 13.2.1 and lower starting from 0.2.5.
::: details 0.2.4 and older Work-Around
::: details Workaround for 0.2.4, Ventura 13.3+
Due to the usage of `amfi_get_out_of_my_way=1`, macOS will fail to prompt users for special permissions upon application start as well as omit the entires in System Preferences. To work around this, we recommend users install [tccplus](https://github.com/jslegendre/tccplus) to manage permissions.
Due to the usage of amfi_get_out_of_my_way=1, macOS will fail to prompt users for special permissions upon application start as well as omit the entires in System Preferences. To work around this, we recommend users install tccplus to manage permissions.
[Download TCCPlus](https://github.com/jslegendre/tccplus)
Example usage with Discord and microphone permissions:

View File

@@ -148,7 +148,7 @@ Regarding OS support, see below:
| MacPro3,1 | Early 2008 | <span style="color:#30BCD5"> YES </span> | - UHCI/OHCI support in Public Beta, see current issues ([#1021](https://github.com/dortania/OpenCore-Legacy-Patcher/issues/1021)) <br/>- Potential boot issues with stock Bluetooth card, recommend removing to avoid kernel panics |
| MacPro4,1 | Early 2009 | ^^ | - Everything is supported as long as GPU is Metal capable <br/> - UHCI/OHCI support in Public Beta, see current issues ([#1021](https://github.com/dortania/OpenCore-Legacy-Patcher/issues/1021))|
| MacPro5,1 | Mid 2010, Mid 2012 | ^^ | ^^ |
| MacPro6,1 | Late 2013 | ^^ | - CPU Power Management currently unsupported<br/> - No DRM support |
| MacPro6,1 | Late 2013 | ^^ | - DRM support is flaky |
### Xserve

View File

@@ -149,7 +149,7 @@ Below is a rundown of the main logic that OpenCore Legacy Patcher uses to gain n
* GopPassThrough
* Reason: Used for proper output on machines with UGA firmware but GOP GPU
* Logic: Provide GOP protocol instances on top of UGA protocol instances
* Models: MacPro3,1, MacBook4,1 iMac7,1-8,1
* Models: MacPro3,1, iMac7,1-8,1
:::
@@ -299,7 +299,7 @@ Below is an explanation of what Kexts OpenCore Legacy Patcher will inject into m
* SimpleMSR
* Reason: Disables BD PROCHOT to prevent firmware throttling on Nehalem+ MacBooks
* LegacyKeyboardInjector
* Reason: Fixes function keys on MacBook4,1/MacBook5,2
* Reason: Fixes function keys on MacBook5,2
:::

View File

@@ -3,11 +3,11 @@
Here are some common errors that users may experience while using this patcher:
* [OpenCore Legacy Patcher not launching](#opencore-legacy-patcher-not-launching)
* [Stuck on `This version of Mac OS X is not supported on this platform`](#stuck-on-this-version-of-mac-os-x-is-not-supported-on-this-platform)
* [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)
* [Infinite Recovery OS Booting](#infinite-recovery-os-reboot)
* [Reboot when entering Hibernation (`Sleep Wake Failure`)](#reboot-when-entering-hibernation-sleep-wake-failure)
* [How to Boot Big Sur Recovery](#how-to-boot-big-sur-recovery)
* [How to Boot Recovery through OpenCore Legacy Patcher](#how-to-boot-recovery-through-opencore-legacy-patcher)
* [Stuck on "Your Mac needs a firmware update"](#stuck-on-your-mac-needs-a-firmware-update)
* [No Brightness Control](#no-brightness-control)
* [Cannot connect Wi-Fi on Monterey with legacy cards](#cannot-connect-Wi-Fi-on-Monterey-with-legacy-cards)
@@ -29,15 +29,19 @@ If the application won't launch (e.g. icon will bounce in the Dock), try launchi
/Applications/OpenCore-Patcher.app/Contents/MacOS/OpenCore-Patcher
```
## Stuck on `This version of Mac OS X is not supported on this platform`
## Stuck on `This version of Mac OS X is not supported on this platform` or (🚫) Prohibited Symbol
This means macOS has detected an SMBIOS it does not support. To resolve this, ensure you're booting OpenCore **before** the macOS installer in the boot picker. Reminder that the option will be called `EFI Boot`.
Once you've booted OpenCore at least once, your hardware should now auto-boot it until either an NVRAM reset occurs, or you remove the drive with OpenCore installed.
However, if the 🚫 Symbol only appears after the boot process has already started (the bootscreen appears/verbose boot starts), it could mean that your USB drive has failed to pass macOS' integrity checks. To resolve this, create a new installer using a different USB drive (preferably of a different model.)
## Cannot boot macOS without the USB
By default, the OpenCore Patcher won't install OpenCore onto the internal drive itself during installs. Instead, you'll need to either [manually transfer](https://dortania.github.io/OpenCore-Post-Install/universal/oc2hdd.html) OpenCore to the internal drive's EFI or run this patcher's Option 2 again and select your internal drive.
By default, the OpenCore Patcher won't install OpenCore onto the internal drive itself during installs.
After installing macOS, OpenCore Legacy Patcher should automatically prompt you to install OpenCore onto the internal drive. However, if it doesn't show the prompt, you'll need to either [manually transfer](https://dortania.github.io/OpenCore-Post-Install/universal/oc2hdd.html) OpenCore to the internal drive's EFI or Build and Install again and select your internal drive.
Reminder that once this is done, you'll need to select OpenCore in the boot picker again for your hardware to remember this entry and auto boot from then on.
@@ -55,7 +59,7 @@ With OpenCore Legacy Patcher, we rely on Apple Secure Boot to ensure OS updates
sudo pmset -a hibernatemode 0
```
## How to Boot Big Sur Recovery
## How to Boot Recovery through OpenCore Legacy Patcher
By default, the patcher will try to hide extra boot options such as recovery from the user. To make them appear, simply press the `Spacebar` key while inside OpenCore's Picker to list all boot options.
@@ -160,7 +164,7 @@ Applicable models include:
| Family | Year | Model | Notes |
| :---------- | :--------------------| :---------------------------- | :----------------------------------------------- |
| MacBook | Mid 2010 and older | MacBook4,1 - MacBook7,1 | |
| MacBook | Mid 2010 and older | MacBook5,1 - MacBook7,1 | |
| MacBook Air | Late 2010 and older | MacBookAir2,1 - MacBookAir3,x | |
| MacBook Pro | Mid 2010 and older | MacBookPro4,1 - MacBookPro7,x | Excludes Mid 2010 15" and 17" (MacBookPro6,x) |
| iMac | Late 2009 and older | iMac7,1 - iMac10,x | Excludes Core i5/7 27" late 2009 iMac (iMac11,1) |

View File

@@ -51,8 +51,7 @@ Note: For AirPort upgrades, only the best/newest cards are listed.
| SMBIOS | WiFi/BT version | UC OOB | Comment |
|------------|-----------------|------------|---------|
| MacBook4,1 | Wi-Fi 4 / BT 2.0 EDR | <span style="color:red"> NO </span> | Replace stock AirPort card with an mPCIE + USB Connector Adapter board with a BCM94360CS2 card |
| MacBook5,1 | ^^ | ^^ | Use a Broadcom USB Bluetooth 4.0+ Dongle </span> |
| MacBook5,1 | Wi-Fi 4 / BT 2.0 EDR | <span style="color:red"> NO </span> | Use a Broadcom USB Bluetooth 4.0+ Dongle </span> |
| MacBook5,2 | WiFi 4 / BT 2.1 EDR | ^^ | Replace stock AirPort card with an mPCIE + USB Connector Adapter board with a BCM94360CS2 card |
| MacBook6,1 | ^^ | ^^ | Replace stock AirPort card with a BCM94331PCIEBT4CAX/BCM94331PCIEBT4 card |
| MacBook7,1 | ^^ | ^^ | ^^ |

View File

@@ -127,7 +127,7 @@ The following GPUs are applicable:
The following machines shipped stock with an unsupported GPU:
* iMac7,1 - iMac12,x
* MacBook4,1 - MacBook7,1
* MacBook5,1 - MacBook7,1
* MacBookAir2,1 - MacBookAir4,x
* MacBookPro4,1 - MacBookPro8,x
* Macmini3,1 - Macmini5,x

BIN
images/BOOTCAMP-1.png Executable file → Normal file

Binary file not shown.

Before

Width:  |  Height:  |  Size: 22 KiB

After

Width:  |  Height:  |  Size: 178 KiB

BIN
images/BOOTCAMP-2.png Executable file → Normal file

Binary file not shown.

Before

Width:  |  Height:  |  Size: 56 KiB

After

Width:  |  Height:  |  Size: 312 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 542 KiB

After

Width:  |  Height:  |  Size: 504 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 427 KiB

After

Width:  |  Height:  |  Size: 382 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 307 KiB

After

Width:  |  Height:  |  Size: 446 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 158 KiB

After

Width:  |  Height:  |  Size: 368 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 206 KiB

After

Width:  |  Height:  |  Size: 268 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 240 KiB

After

Width:  |  Height:  |  Size: 201 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 153 KiB

After

Width:  |  Height:  |  Size: 156 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 214 KiB

After

Width:  |  Height:  |  Size: 116 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 257 KiB

After

Width:  |  Height:  |  Size: 221 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 251 KiB

After

Width:  |  Height:  |  Size: 384 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 176 KiB

After

Width:  |  Height:  |  Size: 387 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 452 KiB

After

Width:  |  Height:  |  Size: 473 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 450 KiB

After

Width:  |  Height:  |  Size: 492 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 526 KiB

After

Width:  |  Height:  |  Size: 554 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 530 KiB

After

Width:  |  Height:  |  Size: 548 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 533 KiB

After

Width:  |  Height:  |  Size: 551 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 530 KiB

After

Width:  |  Height:  |  Size: 536 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 172 KiB

After

Width:  |  Height:  |  Size: 273 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 451 KiB

After

Width:  |  Height:  |  Size: 476 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 298 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 297 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 309 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 85 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 451 KiB

After

Width:  |  Height:  |  Size: 476 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 370 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 292 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 435 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 404 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 68 KiB

After

Width:  |  Height:  |  Size: 251 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 304 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 706 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 374 KiB

After

Width:  |  Height:  |  Size: 654 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 349 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 392 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 791 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 291 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 77 KiB

After

Width:  |  Height:  |  Size: 209 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 62 KiB

After

Width:  |  Height:  |  Size: 192 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 62 KiB

After

Width:  |  Height:  |  Size: 199 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 316 KiB

After

Width:  |  Height:  |  Size: 536 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 39 KiB

After

Width:  |  Height:  |  Size: 188 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 332 KiB

After

Width:  |  Height:  |  Size: 447 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 445 KiB

After

Width:  |  Height:  |  Size: 474 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 446 KiB

After

Width:  |  Height:  |  Size: 476 KiB

View File

@@ -1653,6 +1653,42 @@
<key>PlistPath</key>
<string>Contents/Info.plist</string>
</dict>
<dict>
<key>Arch</key>
<string>x86_64</string>
<key>Comment</key>
<string>Aquantia Ethernet Patch - Core</string>
<key>Enabled</key>
<false/>
<key>MaxKernel</key>
<string></string>
<key>MinKernel</key>
<string>21.4.0</string>
<key>BundlePath</key>
<string>AppleEthernetAbuantiaAqtion.kext</string>
<key>ExecutablePath</key>
<string>Contents/MacOS/AppleEthernetAbuantiaAqtion</string>
<key>PlistPath</key>
<string>Contents/Info.plist</string>
</dict>
<dict>
<key>Arch</key>
<string>x86_64</string>
<key>Comment</key>
<string>Aquantia Ethernet Patch - Firmware</string>
<key>Enabled</key>
<false/>
<key>MaxKernel</key>
<string></string>
<key>MinKernel</key>
<string>21.4.0</string>
<key>BundlePath</key>
<string>AppleEthernetAbuantiaAqtionFirmware.kext</string>
<key>ExecutablePath</key>
<string>Contents/MacOS/AppleEthernetAbuantiaAqtionFirmware</string>
<key>PlistPath</key>
<string>Contents/Info.plist</string>
</dict>
</array>
<key>Block</key>
<array>

File diff suppressed because one or more lines are too long

View File

@@ -1,346 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>IOPlatformThermalProfile</key>
<dict>
<key>ConfigArray</key>
<array>
<dict>
<key>WWEN</key>
<true/>
<key>model</key>
<string>MacBook4,1</string>
</dict>
</array>
<key>CStateDict</key>
<dict>
<key>MacBook4,1</key>
<string>CSD3</string>
<key>CSD3</key>
<dict>
<key>C6</key>
<dict>
<key>enable</key>
<false/>
</dict>
</dict>
</dict>
<key>ControlArray</key>
<array>
<dict>
<key>Desc-Key</key>
<string>CPU_PLIMIT</string>
<key>IOClass</key>
<string>AppleSMCControl</string>
<key>control-flags</key>
<integer>2</integer>
<key>control-id</key>
<integer>10</integer>
<key>location</key>
<string>cpu plimit</string>
<key>type</key>
<string>smc</string>
</dict>
<dict>
<key>Desc-Key</key>
<string>CPU_STATE</string>
<key>IOClass</key>
<string>AppleSMCControl</string>
<key>control-flags</key>
<integer>2</integer>
<key>control-id</key>
<integer>13</integer>
<key>location</key>
<string>cpu state</string>
<key>type</key>
<string>smc</string>
</dict>
<dict>
<key>Desc-Key</key>
<string>GPU_PLIMIT</string>
<key>IOClass</key>
<string>AppleSMCControl</string>
<key>control-flags</key>
<integer>2</integer>
<key>control-id</key>
<integer>11</integer>
<key>location</key>
<string>gpu plimit</string>
<key>type</key>
<string>smc</string>
</dict>
<dict>
<key>Desc-Key</key>
<string>GPU_STATE</string>
<key>IOClass</key>
<string>AppleSMCControl</string>
<key>control-flags</key>
<integer>2</integer>
<key>control-id</key>
<integer>14</integer>
<key>location</key>
<string>gpu state</string>
<key>type</key>
<string>smc</string>
</dict>
<dict>
<key>Desc-Key</key>
<string>MEM_PLIMIT</string>
<key>IOClass</key>
<string>AppleSMCControl</string>
<key>control-flags</key>
<integer>2</integer>
<key>control-id</key>
<integer>12</integer>
<key>location</key>
<string>mem plimit</string>
<key>type</key>
<string>smc</string>
</dict>
</array>
<key>CreationDate</key>
<string>Tue May 26 15:26:07 PDT 2009</string>
<key>CtrlLoopArray</key>
<array>
<dict>
<key>Description</key>
<string>SMC_CPU_Control_Loop</string>
<key>IOClass</key>
<string>ACPI_SMC_CtrlLoop</string>
<key>PLimitClass</key>
<array>
<string>CPU</string>
</array>
<key>MetaStateArray</key>
<array>
<dict>
<key>Description</key>
<string>Normal</string>
</dict>
<dict>
<key>Description</key>
<string>Reduced Power</string>
</dict>
<dict>
<key>Description</key>
<string>User Low Power</string>
</dict>
<dict>
<key>Description</key>
<string>User High Power</string>
</dict>
</array>
<key>StepDataDict</key>
<dict>
<key>MacBook4,1</key>
<string>SP1</string>
<key>SP1</key>
<data>
xgYAAAAAAQIEAAACAgAAVQBuAHMAcABlAGMAaQBmAGkAZQBkDAAH/wcAACEAAAACAAAB//8A/wD/
AP8A/wD/AAYAAP8BAAP/AAsPAAD/AQAD/wALDwAA/wEAA/8ACw8AAP8BAAP/AAsPAAD/AQAD/wAL
DwAA/wEAA/8ACw8AAP8BAAP/AAsPAAD/AQAD/wALDwAA/wEAA/8ACw8AAP8BAAP/AAsPAAD/AQAD
/wALDwAA/wEAA/8ACw8AAP8BAAP/AAsPAAD/AQAD/wALDwAA/wEAA/8ACw8AAP8BAAP/AAsPAAD/
AQAD/wALDwAA/wEAA/8ACw8AAP8BAAP/AAsPAAD/AQAD/wALDwAA/wEAA/8ACw8AAP8BAAP/AAsP
AAD/AQAD/wALDwAA/wEAA/8ACw8AAP8BAAP/AAsPAAD/AQAD/wALDwAA/wEAA/8ACw8AAP8BAAP/
AAsPAAD/AQAD/wALDwAA/wEAA/8ACw8AAP8BAAP/AAsPAAD/AQAD/wALDwAA/wEAA/8ACw8AAP8B
AAP/AAsPAAD/AQAD/wALDwAA/wEAA/8ACw8AAP8BAAP/AAsPAAD/AQAD/wALDwAA/wEAA/8ACw8A
AP8BAAP/AAsPAAD/AQAD/wALDwAA/wEAA/8ACw8AAP8BAAP/AAsPAAD/AQAD/wALDwAA/wEAA/8A
Cw8AAP8BAAP/AAsPAAD/AQAD/wALDwAA/wEAA/8ACw8AAP8BAAP/AAsPAAD/AQAD/wALDwAA/wEA
A/8ACw8AAP8BAAP/AAsPAAD/AQAD/wALDwAA/wEAA/8ACw8AAP8BAAP/AAsPAAD/AQAD/wALDwAA
/wEAA/8ACw8AAP8BAAP/AAsPAAD/AQAD/wALDwAA/wEAA/8ACw8AAP8BAAP/AAsPAAD/AQAD/wAL
DwAA/wEAA/8ACw8AAP8BAAP/AAsKAAABCgAAAQAAAAEAAAD1AAEFAAABAAAF/wABAAAAAQAAAAEG
AAACAAAABAEAAIAAwwC3AC4ANAALAAAAAgAAAAEAAAABAAAAAgAAAAICAAACBgAAAQAAAAEAAAD1
AAEFAAADAAAF/wADAgAAAwYAAAkAAAAEAAAATAAEBQAABAAABf8AAwAAAAEAAAAEBAAAgAAAAAoK
AAAIAAAABQAAAAgAAAAFAAAAAwAAAAIAAAAFBgAABwAAAAEAAAD1AAEFAAAGAAAF/wADAAAAAwAA
AAYGAAACAAAABAAAAKAADwUAAAcEAAAHAAAAAwAAAAQAAAAHBgAACAoAAAMAAAX/AAQCAAAIBgAA
AQAAAAEAAADoAAMFAAAJAAAF/wAFAgAACQYAAAIAAAAEAAAA6AADBQAADQAAAAoAAAANAAAACgAA
AAUAAAABAAAACgYAAAcAAAABAAAA9QABBQAACwAABf8ABQAAAAIAAAALBgAAAgAAAAQAAACgAA8F
AAAMBAAADAAAAAUAAAADAAAADAYAAAgKAAAJAAAF/wAGAgAADQYAAAEAAAABAAAA6AADBQAADgAA
Bf8ABwIAAA4GAAACAAAABAAAAFgAGwUAABIAAAAPAAAAEgAAAA8AAAAHAAAAAQAAAA8GAAAHAAAA
AQAAAPUAAQUAABAAAAX/AAcAAAACAAAAEAYAAAIAAAAEAAAAoAAPBQAAEQQAABEAAAAHAAAAAwAA
ABEGAAAICgAADgAABf8ACAIAABIGAAABAAAAAQAAAOgAAwUAABMAAAX/AAkCAAATBgAAAgAAAAQA
AAD8AAgFAAAXAAAAFAAAABcAAAAUAAAACQAAAAEAAAAUBgAABwAAAAEAAAD1AAEFAAAVAAAF/wAJ
AAAAAgAAABUGAAACAAAABAAAAKAADwUAABYEAAAWAAAACQAAAAMAAAAWBgAACAoAABMAAAX/AAoC
AAAXBgAAAQAAAAEAAADoAAMFAAAYAAAF/wALAgAAGAYAAAIAAAAEAAAAKAAKBQAAHAAAABkAAAAc
AAAAGQAAAAsAAAABAAAAGQYAAAcAAAABAAAA9QABBQAAGgAABf8ACwAAAAIAAAAaBgAAAgAAAAQA
AACgAA8FAAAbBAAAGwAAAAsAAAADAAAAGwYAAAgKAAAYAAAF/wAMAgAAHAYAAAEAAAABAAAA9AAB
BQAAHQAABf8ADQIAAB0GAAACAAAABAEAAIAAwwC3AC4ANAALAAAAHQAAAB4AAAAdAAAAHgAAAA0A
AAABAAAAHgYAAAcAAAABAAAA9QABBQAAHwAABf8ADQAAAAIAAAAfBgAAAgAAAAQAAACgAA8FAAAg
BAAAIAAAAA0AAAADAAAAIAYAAAgKAAAdAAAF/w==
</data>
</dict>
<key>ctrlloop-id</key>
<integer>0</integer>
<key>is-state-driven</key>
<integer>1</integer>
</dict>
<dict>
<key>Description</key>
<string>SMC_GPU_sensor_Control_Loop</string>
<key>GPUPowerMgmtFloorArray</key>
<array>
<integer>1</integer>
</array>
<key>GPUThresholdDict</key>
<dict>
<key>MacBook4,1</key>
<string>TA3</string>
<key>TA3</key>
<array>
<dict>
<key>high-threshold</key>
<integer>25</integer>
<key>low-threshold</key>
<integer>0</integer>
</dict>
<dict>
<key>high-threshold</key>
<integer>33</integer>
<key>low-threshold</key>
<integer>25</integer>
</dict>
<dict>
<key>high-threshold</key>
<integer>99</integer>
<key>low-threshold</key>
<integer>33</integer>
</dict>
<dict>
<key>high-threshold</key>
<integer>100</integer>
<key>low-threshold</key>
<integer>99</integer>
</dict>
</array>
</dict>
<key>IOClass</key>
<string>ACPI_SMC_CtrlLoop</string>
<key>PLimitClass</key>
<array>
<string>GPU</string>
</array>
<key>MetaStateArray</key>
<array>
<dict>
<key>Description</key>
<string>Normal</string>
</dict>
<dict>
<key>Description</key>
<string>Reduced Power</string>
</dict>
<dict>
<key>Description</key>
<string>User Low Power</string>
</dict>
<dict>
<key>Description</key>
<string>User High Power</string>
</dict>
</array>
<key>SensorIDArray</key>
<array>
<integer>6</integer>
</array>
<key>ctrlloop-id</key>
<integer>1</integer>
<key>is-state-driven</key>
<integer>1</integer>
</dict>
<dict>
<key>Description</key>
<string>SMC_Memory_Control_Loop</string>
<key>IOClass</key>
<string>ACPI_SMC_CtrlLoop</string>
<key>PLimitClass</key>
<array>
<string>Mem</string>
</array>
<key>MCHThrottleDict</key>
<dict>
<key>MacBook4,1</key>
<string>MT3</string>
<key>MT3</key>
<array>
<dict>
<key>DTC_WAB</key>
<integer>32</integer>
<key>DTC_WAT</key>
<integer>0</integer>
<key>GTC_WAB</key>
<integer>0</integer>
<key>GTC_WAT</key>
<integer>15</integer>
</dict>
<dict>
<key>DTC_WAB</key>
<integer>32</integer>
<key>DTC_WAT</key>
<integer>0</integer>
<key>GTC_WAB</key>
<integer>0</integer>
<key>GTC_WAT</key>
<integer>15</integer>
</dict>
<dict>
<key>DTC_WAB</key>
<integer>32</integer>
<key>DTC_WAT</key>
<integer>0</integer>
<key>GTC_WAB</key>
<integer>0</integer>
<key>GTC_WAT</key>
<integer>15</integer>
</dict>
<dict>
<key>DTC_WAB</key>
<integer>32</integer>
<key>DTC_WAT</key>
<integer>0</integer>
<key>GTC_WAB</key>
<integer>0</integer>
<key>GTC_WAT</key>
<integer>15</integer>
</dict>
</array>
</dict>
<key>MetaStateArray</key>
<array>
<dict>
<key>Description</key>
<string>Normal</string>
</dict>
<dict>
<key>Description</key>
<string>Reduced Power</string>
</dict>
<dict>
<key>Description</key>
<string>User Low Power</string>
</dict>
<dict>
<key>Description</key>
<string>User High Power</string>
</dict>
</array>
<key>ctrlloop-id</key>
<integer>2</integer>
<key>is-state-driven</key>
<integer>1</integer>
</dict>
</array>
<key>SensorArray</key>
<array>
<dict>
<key>Desc-Key</key>
<string>GPU</string>
<key>IOClass</key>
<string>IOPlatformSensor</string>
<key>sensor-id</key>
<integer>6</integer>
</dict>
</array>
</dict>
</dict>
</plist>

View File

@@ -36,7 +36,7 @@ class BuildMiscellaneous:
self._feature_unlock_handling()
self._restrict_events_handling()
self._firewire_handling()
self._trackpad_handling()
self._topcase_handling()
self._thunderbolt_handling()
self._webcam_handling()
self._usb_handling()
@@ -106,6 +106,12 @@ class BuildMiscellaneous:
logging.info("- Disabling memory error reporting")
re_block_args.append("pcie")
# Resolve mediaanalysisd crashing on 3802 GPUs
# Applicable for systems that are the primary iCloud Photos library host, with large amounts of unprocessed faces
if self.constants.disable_mediaanalysisd is True:
logging.info("- Disabling mediaanalysisd")
re_block_args.append("media")
return re_block_args
@@ -171,25 +177,43 @@ class BuildMiscellaneous:
support.BuildSupport(self.model, self.constants, self.config).get_kext_by_bundle_path("IOFireWireFamily.kext/Contents/PlugIns/AppleFWOHCI.kext")["Enabled"] = True
def _trackpad_handling(self) -> None:
def _topcase_handling(self) -> None:
"""
Trackpad Handler
USB Top Case Handler
"""
# Pre-Force Touch trackpad & keyboard support for macOS Ventura
if smbios_data.smbios_dictionary[self.model]["CPU Generation"] < cpu_data.CPUGen.skylake.value:
if self.model.startswith("MacBook"):
# These units got force touch & the new keyboard mapping early, so ignore them
if self.model not in ["MacBookPro11,4", "MacBookPro11,5", "MacBookPro12,1", "MacBook8,1"]:
support.BuildSupport(self.model, self.constants, self.config).enable_kext("AppleUSBTopCase.kext", self.constants.topcase_version, self.constants.top_case_path)
support.BuildSupport(self.model, self.constants, self.config).get_kext_by_bundle_path("AppleUSBTopCase.kext/Contents/PlugIns/AppleUSBTCButtons.kext")["Enabled"] = True
support.BuildSupport(self.model, self.constants, self.config).get_kext_by_bundle_path("AppleUSBTopCase.kext/Contents/PlugIns/AppleUSBTCKeyboard.kext")["Enabled"] = True
support.BuildSupport(self.model, self.constants, self.config).get_kext_by_bundle_path("AppleUSBTopCase.kext/Contents/PlugIns/AppleUSBTCKeyEventDriver.kext")["Enabled"] = True
support.BuildSupport(self.model, self.constants, self.config).enable_kext("AppleUSBMultitouch.kext", self.constants.multitouch_version, self.constants.multitouch_path)
# Legacy Trackpad & Keyboard support
if self.model in ["MacBook4,1", "MacBook5,2"]:
support.BuildSupport(self.model, self.constants, self.config).enable_kext("AppleUSBTrackpad.kext", self.constants.apple_trackpad, self.constants.apple_trackpad_path)
support.BuildSupport(self.model, self.constants, self.config).enable_kext("LegacyKeyboardInjector.kext", self.constants.legacy_keyboard, self.constants.legacy_keyboard_path) # Inject legacy personalities into AppleUSBTCKeyboard and AppleUSBTCKeyEventDriver
#On-device probing
if not self.constants.custom_model and self.computer.internal_keyboard_type and self.computer.trackpad_type:
support.BuildSupport(self.model, self.constants, self.config).enable_kext("AppleUSBTopCase.kext", self.constants.topcase_version, self.constants.top_case_path)
support.BuildSupport(self.model, self.constants, self.config).get_kext_by_bundle_path("AppleUSBTopCase.kext/Contents/PlugIns/AppleUSBTCButtons.kext")["Enabled"] = True
support.BuildSupport(self.model, self.constants, self.config).get_kext_by_bundle_path("AppleUSBTopCase.kext/Contents/PlugIns/AppleUSBTCKeyboard.kext")["Enabled"] = True
support.BuildSupport(self.model, self.constants, self.config).get_kext_by_bundle_path("AppleUSBTopCase.kext/Contents/PlugIns/AppleUSBTCKeyEventDriver.kext")["Enabled"] = True
if self.computer.internal_keyboard_type == "Legacy":
support.BuildSupport(self.model, self.constants, self.config).enable_kext("LegacyKeyboardInjector.kext", self.constants.legacy_keyboard, self.constants.legacy_keyboard_path)
if self.computer.trackpad_type == "Legacy":
support.BuildSupport(self.model, self.constants, self.config).enable_kext("AppleUSBTrackpad.kext", self.constants.apple_trackpad, self.constants.apple_trackpad_path)
elif self.computer.trackpad_type == "Modern":
support.BuildSupport(self.model, self.constants, self.config).enable_kext("AppleUSBMultitouch.kext", self.constants.multitouch_version, self.constants.multitouch_path)
#Predefined fallback
else:
# Multi Touch Top Case support for macOS Ventura+
if smbios_data.smbios_dictionary[self.model]["CPU Generation"] < cpu_data.CPUGen.skylake.value:
if self.model.startswith("MacBook"):
# These units got the Force Touch top case, so ignore them
if self.model not in ["MacBookPro11,4", "MacBookPro11,5", "MacBookPro12,1", "MacBook8,1"]:
support.BuildSupport(self.model, self.constants, self.config).enable_kext("AppleUSBTopCase.kext", self.constants.topcase_version, self.constants.top_case_path)
support.BuildSupport(self.model, self.constants, self.config).get_kext_by_bundle_path("AppleUSBTopCase.kext/Contents/PlugIns/AppleUSBTCButtons.kext")["Enabled"] = True
support.BuildSupport(self.model, self.constants, self.config).get_kext_by_bundle_path("AppleUSBTopCase.kext/Contents/PlugIns/AppleUSBTCKeyboard.kext")["Enabled"] = True
support.BuildSupport(self.model, self.constants, self.config).get_kext_by_bundle_path("AppleUSBTopCase.kext/Contents/PlugIns/AppleUSBTCKeyEventDriver.kext")["Enabled"] = True
support.BuildSupport(self.model, self.constants, self.config).enable_kext("AppleUSBMultitouch.kext", self.constants.multitouch_version, self.constants.multitouch_path)
# Two-finger Top Case support for macOS High Sierra+
if self.model == "MacBook5,2":
support.BuildSupport(self.model, self.constants, self.config).enable_kext("AppleUSBTrackpad.kext", self.constants.apple_trackpad, self.constants.apple_trackpad_path) # Also requires AppleUSBTopCase.kext
support.BuildSupport(self.model, self.constants, self.config).enable_kext("LegacyKeyboardInjector.kext", self.constants.legacy_keyboard, self.constants.legacy_keyboard_path) # Inject legacy personalities into AppleUSBTCKeyboard and AppleUSBTCKeyEventDriver
def _thunderbolt_handling(self) -> None:

View File

@@ -63,6 +63,14 @@ class BuildWiredNetworking:
support.BuildSupport(self.model, self.constants, self.config).enable_kext("nForceEthernet.kext", self.constants.nforce_version, self.constants.nforce_path)
elif isinstance(controller, device_probe.Marvell) or isinstance(controller, device_probe.SysKonnect):
support.BuildSupport(self.model, self.constants, self.config).enable_kext("MarvelYukonEthernet.kext", self.constants.marvel_version, self.constants.marvel_path)
# Pre-Ivy Bridge Aquantia Ethernet Patch
if isinstance(controller, device_probe.Aquantia) and controller.chipset == device_probe.Aquantia.Chipsets.AppleEthernetAquantiaAqtion:
if not self.model in smbios_data.smbios_dictionary:
continue
if smbios_data.smbios_dictionary[self.model]["CPU Generation"] < cpu_data.CPUGen.ivy_bridge.value:
support.BuildSupport(self.model, self.constants, self.config).enable_kext("AppleEthernetAbuantiaAqtion.kext", self.constants.aquantia_version, self.constants.aquantia_path)
support.BuildSupport(self.model, self.constants, self.config).enable_kext("AppleEthernetAbuantiaAqtionFirmware.kext", self.constants.aquantiafirmware_version, self.constants.aquantiafirmware_path)
def _prebuilt_assumption(self) -> None:

View File

@@ -76,6 +76,10 @@ class Constants:
self.bigsursdxc_version: str = "1.0.0" # BigSurSDXC
self.monterey_ahci_version: str = "1.0.0" # CatalinaAHCI
## Apple - Jazzzny Modified
self.aquantia_version: str = "1.0.0" # AppleEthernetAbuantiaAqtion
self.aquantiafirmware_version: str = "1.0.0" # AppleEthernetAbuantiaAqtionFirmware
## Dortania
## https://github.com/dortania
self.backlight_injector_version: str = "1.1.0" # BacklightInjector
@@ -217,6 +221,7 @@ class Constants:
self.force_vmm: bool = False # Force VMM patch
self.disable_connectdrivers: bool = False # Disable ConnectDrivers (hibernation)
self.set_vmm_cpuid: bool = False # Set VMM bit inside CPUID
self.disable_mediaanalysisd: bool = False # Set mediaanalysisd to spawn
self.set_alc_usage: bool = True # Set AppleALC usage
self.allow_3rd_party_drives: bool = True # Allow ThridPartyDrives quirk
self.allow_nvme_fixing: bool = True # Allow NVMe Kernel Space Patches
@@ -346,6 +351,14 @@ class Constants:
@property
def bcm570_path(self):
return self.payload_kexts_path / Path(f"Ethernet/CatalinaBCM5701Ethernet-v{self.bcm570_version}.zip")
@property
def aquantia_path(self):
return self.payload_kexts_path / Path(f"Ethernet/AppleEthernetAbuantiaAqtion-v{self.aquantia_version}.zip")
@property
def aquantiafirmware_path(self):
return self.payload_kexts_path / Path(f"Ethernet/AppleEthernetAbuantiaAqtionFirmware-v{self.aquantiafirmware_version}.zip")
@property
def i210_path(self):

View File

@@ -12,7 +12,7 @@ from dataclasses import dataclass, field
from typing import Any, ClassVar, Optional, Type, Union
from resources import utilities, ioreg
from data import pci_data
from data import pci_data, usb_data
@dataclass
@@ -22,6 +22,94 @@ class CPU:
leafs: list[str]
@dataclass
class USBDevice:
vendor_id: int
device_id: int
device_class: int
device_speed: int
product_name: str
vendor_name: Optional[str] = None
@classmethod
def from_ioregistry(cls, entry: ioreg.io_registry_entry_t):
properties: dict = ioreg.corefoundation_to_native(ioreg.IORegistryEntryCreateCFProperties(entry, None, ioreg.kCFAllocatorDefault, ioreg.kNilOptions)[1])
vendor_id = None
device_id = None
device_class = None
device_speed = None
vendor_name = None
product_name = "N/A"
if "idVendor" in properties:
vendor_id = properties["idVendor"]
if "idProduct" in properties:
device_id = properties["idProduct"]
if "bDeviceClass" in properties:
device_class = properties["bDeviceClass"]
if "kUSBProductString" in properties:
product_name = properties["kUSBProductString"].strip()
if "kUSBVendorString" in properties:
vendor_name = properties["kUSBVendorString"].strip()
if "USBSpeed" in properties:
device_speed = properties["USBSpeed"]
return cls(vendor_id, device_id, device_class, device_speed, product_name, vendor_name)
def detect(self):
self.detect_class()
self.detect_speed()
def detect_class(self) -> None:
for device_class in self.ClassCode:
if self.device_class == device_class.value:
self.device_class = device_class
def detect_speed(self) -> None:
for speed in self.Speed:
if self.device_speed == speed.value:
self.device_speed = speed
class Speed(enum.Enum):
LOW_SPEED = 0x01
FULL_SPEED = 0x02
HIGH_SPEED = 0x03
SUPER_SPEED = 0x04
SUPER_SPEED_PLUS = 0x05
class ClassCode(enum.Enum):
# https://www.usb.org/defined-class-codes
GENERIC = 0x00
AUDIO = 0x01
CDC_CONTROL = 0x02
HID = 0x03
PHYSICAL = 0x05
IMAGE = 0x06
PRINTER = 0x07
MASS_STORAGE = 0x08
HUB = 0x09
CDC_DATA = 0x0A
SMART_CARD = 0x0B
CONTENT_SEC = 0x0D
VIDEO = 0x0E
PERSONAL_HEALTH = 0x0F
AUDIO_VIDEO = 0x10
BILLBOARD = 0x11
USB_TYPE_C_BRIDGE = 0x12
DISPLAY_BDP = 0x13
I3C = 0x3C
DIAGNOSTIC = 0xDC
WIRELESS = 0xE0
MISCELLANEOUS = 0xEF
APPLICATION = 0xFE
VENDOR_SPEC = 0xFF
@dataclass
class PCIDevice:
VENDOR_ID: ClassVar[int] # Default vendor id, for subclasses.
@@ -502,10 +590,13 @@ class Computer:
ethernet: Optional[EthernetController] = field(default_factory=list)
wifi: Optional[WirelessCard] = None
cpu: Optional[CPU] = None
usb_devices: list[USBDevice] = field(default_factory=list)
oclp_version: Optional[str] = None
opencore_version: Optional[str] = None
opencore_path: Optional[str] = None
bluetooth_chipset: Optional[str] = None
internal_keyboard_type: Optional[str] = None
trackpad_type: Optional[str] = None
ambient_light_sensor: Optional[bool] = False
third_party_sata_ssd: Optional[bool] = False
secure_boot_model: Optional[str] = None
@@ -528,14 +619,31 @@ class Computer:
computer.sdxc_controller_probe()
computer.ethernet_probe()
computer.smbios_probe()
computer.usb_device_probe()
computer.cpu_probe()
computer.bluetooth_probe()
computer.topcase_probe()
computer.ambient_light_sensor_probe()
computer.sata_disk_probe()
computer.oclp_sys_patch_probe()
computer.check_rosetta()
return computer
def usb_device_probe(self):
devices = ioreg.ioiterator_to_list(
ioreg.IOServiceGetMatchingServices(
ioreg.kIOMasterPortDefault, {"IOProviderClass": "IOUSBDevice"}, None
)[1]
)
for device in devices:
properties = USBDevice.from_ioregistry(device)
if properties:
properties.detect()
self.usb_devices.append(properties)
ioreg.IOObjectRelease(device)
def gpu_probe(self):
# Chain together two iterators: one for class code 00000300, the other for class code 00800300
devices = ioreg.ioiterator_to_list(
@@ -758,18 +866,41 @@ class Computer:
return leafs
def bluetooth_probe(self):
usb_data: str = subprocess.run("system_profiler SPUSBDataType".split(), stdout=subprocess.PIPE, stderr=subprocess.STDOUT).stdout.decode()
if "BRCM20702 Hub" in usb_data:
if not self.usb_devices:
return
# Ensure we get the "best" bluetooth chipset (if multiple are present)
if any("BRCM20702" in usb_device.product_name for usb_device in self.usb_devices):
self.bluetooth_chipset = "BRCM20702 Hub"
elif "BCM20702A0" in usb_data or "BCM2045A0" in usb_data:
elif any("BCM20702A0" in usb_device.product_name or "BCM2045A0" in usb_device.product_name for usb_device in self.usb_devices):
self.bluetooth_chipset = "3rd Party Bluetooth 4.0 Hub"
elif "BRCM2070 Hub" in usb_data:
elif any("BRCM2070 Hub" in usb_device.product_name for usb_device in self.usb_devices):
self.bluetooth_chipset = "BRCM2070 Hub"
elif "BRCM2046 Hub" in usb_data:
elif any("BRCM2046 Hub" in usb_device.product_name for usb_device in self.usb_devices):
self.bluetooth_chipset = "BRCM2046 Hub"
elif "Bluetooth" in usb_data:
elif any("Bluetooth" in usb_device.product_name for usb_device in self.usb_devices):
self.bluetooth_chipset = "Generic"
def topcase_probe(self):
if not self.usb_devices:
return
for usb_device in self.usb_devices:
if self.internal_keyboard_type and self.trackpad_type:
break
if usb_device.vendor_id != 0x5ac:
continue
if usb_device.device_id in usb_data.AppleIDs.Legacy_AppleUSBTCKeyboard:
self.internal_keyboard_type = "Legacy"
elif usb_device.device_id in usb_data.AppleIDs.Modern_AppleUSBTCKeyboard:
self.internal_keyboard_type = "Modern"
if usb_device.device_id in usb_data.AppleIDs.AppleUSBTrackpad:
self.trackpad_type = "Legacy"
elif usb_device.device_id in usb_data.AppleIDs.AppleUSBMultiTouch:
self.trackpad_type = "Modern"
def sata_disk_probe(self):
# Get all SATA Controllers/Disks from 'system_profiler SPSerialATADataType'
# Determine whether SATA SSD is present and Apple-made

View File

@@ -437,7 +437,7 @@ def clean_device_path(device_path: str):
if len(device_path_array) >= 2:
device_path_stripped = device_path_array[-2]
device_path_root_array = device_path_stripped.split(",")
if len(device_path_root_array) >= 2:
if len(device_path_root_array) > 2:
return device_path_root_array[2]
return None

View File

@@ -386,6 +386,17 @@ class SettingsFrame(wx.Frame):
"for unsupported models.",
],
},
"Disable mediaanalysisd service": {
"type": "checkbox",
"value": self.constants.disable_mediaanalysisd,
"variable": "disable_mediaanalysisd",
"description": [
"For systems that are the primary iCloud",
"Photo Library host with a 3802-based GPU,",
"this may aid in prolonged idle stability.",
],
"condition": gui_support.CheckProperties(self.constants).host_has_3802_gpu()
},
"wrap_around 1": {
"type": "wrap_around",
},
@@ -1003,7 +1014,7 @@ Hardware Information:
if self.constants.computer.real_model in smbios_data.smbios_dictionary:
if self.constants.detected_os > smbios_data.smbios_dictionary[self.constants.computer.real_model]["Max OS Supported"]:
chassis_type = "aluminum"
if self.constants.computer.real_model in ["MacBook4,1", "MacBook5,2", "MacBook6,1", "MacBook7,1"]:
if self.constants.computer.real_model in ["MacBook5,2", "MacBook6,1", "MacBook7,1"]:
chassis_type = "plastic"
dlg = wx.MessageDialog(self.frame_modal, f"This model, {self.constants.computer.real_model}, does not natively support macOS {os_data.os_conversion.kernel_to_os(self.constants.detected_os)}, {os_data.os_conversion.convert_kernel_to_marketing_name(self.constants.detected_os)}. The last native OS was macOS {os_data.os_conversion.kernel_to_os(smbios_data.smbios_dictionary[self.constants.computer.real_model]['Max OS Supported'])}, {os_data.os_conversion.convert_kernel_to_marketing_name(smbios_data.smbios_dictionary[self.constants.computer.real_model]['Max OS Supported'])}\n\nToggling this option will break booting on this OS. Are you absolutely certain this is desired?\n\nYou may end up with a nice {chassis_type} brick 🧱", "Are you certain?", wx.YES_NO | wx.ICON_WARNING | wx.NO_DEFAULT)
if dlg.ShowModal() == wx.ID_NO:

View File

@@ -13,7 +13,7 @@ import packaging.version
from pathlib import Path
from resources.wx_gui import gui_about
from resources import constants
from resources import constants, device_probe
from data import model_array, os_data, smbios_data
@@ -179,6 +179,26 @@ class CheckProperties:
return packaging.version.parse(oclp_plist["PatcherSupportPkg"])
def host_has_3802_gpu(self) -> bool:
"""
Check if either host, or override model, has a 3802 GPU
"""
gpu_dict = [] if self.constants.custom_model else self.constants.computer.gpus
model = self.constants.custom_model if self.constants.custom_model else self.constants.computer.real_model
if gpu_dict == []:
gpu_dict = smbios_data.smbios_dictionary[model]["Stock GPUs"] if model in smbios_data.smbios_dictionary else []
for gpu in gpu_dict:
if not self.constants.custom_model:
gpu = gpu.arch
if gpu in [
device_probe.Intel.Archs.Ivy_Bridge,
device_probe.Intel.Archs.Haswell,
device_probe.NVIDIA.Archs.Kepler,
]:
return True
return False
class PayloadMount: