Compare commits

..

128 Commits

Author SHA1 Message Date
Mykola Grymalyuk
e5fd984daf Fix audio support on iMac7,1 and iMac8,1 2021-05-11 10:52:56 -06:00
Mykola Grymalyuk
0a0a59feea Fix NVMe properties applying with OC installed
Closes https://github.com/dortania/OpenCore-Legacy-Patcher/issues/212
2021-05-11 10:44:23 -06:00
Mykola Grymalyuk
75200e9c8d Remove unused setting 2021-05-10 17:55:13 -06:00
Mykola Grymalyuk
83d4cc5a16 Work-around BT2.0 panic
Based on StarPlayrX’s BigMac patch
2021-05-10 10:30:07 -06:00
Mykola Grymalyuk
faecdc3b0c Add misc info 2021-05-10 09:18:28 -06:00
Mykola Grymalyuk
0fe230e56b Fix typo 2021-05-10 08:55:29 -06:00
Mykola Grymalyuk
6f13247151 Add accel issues docs 2021-05-10 08:53:57 -06:00
Mykola Grymalyuk
24a8249a60 Update docs 2021-05-09 17:38:52 -06:00
Mykola Grymalyuk
7df345d286 Fix USB mapping witout CPUFriend 2021-05-09 10:29:52 -06:00
Mykola Grymalyuk
7c0088e0ff Merge pull request #208 from dortania/accel-testing
Import dosdude1 patches
2021-05-09 08:08:38 -06:00
Mykola Grymalyuk
204cf5beea Increment Apple binaries 2021-05-09 08:07:57 -06:00
Mykola Grymalyuk
04b69f4288 Fix typo 2021-05-08 22:25:28 -06:00
Mykola Grymalyuk
b4ef000fc0 Import dosdude1 patches 2021-05-08 22:24:05 -06:00
Mykola Grymalyuk
78038b9607 Add partial TeraScale 2 support 2021-05-08 22:04:33 -06:00
Mykola Grymalyuk
a458b68f2b Merge pull request #207 from dortania/pci-id
Revamp PCI ID handling
2021-05-08 21:39:21 -06:00
Mykola Grymalyuk
1509dffa1c Fix iMac7,1 audio support
Closes https://github.com/dortania/OpenCore-Legacy-Patcher/issues/191
2021-05-08 21:38:36 -06:00
Mykola Grymalyuk
e274137503 Fix codesigning crashes 2021-05-08 20:52:26 -06:00
Mykola Grymalyuk
97bfb9f730 Clean up SysPatch code 2021-05-08 20:33:10 -06:00
Mykola Grymalyuk
b1f8b80e83 Fix typo 2021-05-08 20:18:30 -06:00
Mykola Grymalyuk
f0a339b0f7 Rework PCI ID storage 2021-05-08 20:14:51 -06:00
Mykola Grymalyuk
6bb5c2e74e Update donate.md 2021-05-08 18:07:50 -06:00
Mykola Grymalyuk
5f1b732e12 Heavily expand Graphics ID list 2021-05-08 17:35:26 -06:00
Mykola Grymalyuk
2a9f94ac99 Add user-configurable CPUFriend
Closes https://github.com/dortania/OpenCore-Legacy-Patcher/issues/199
2021-05-08 14:04:01 -06:00
Mykola Grymalyuk
9b89b62219 Add device ID comments 2021-05-08 12:51:03 -06:00
Mykola Grymalyuk
315be87f31 Fix table 2021-05-08 12:35:26 -06:00
Mykola Grymalyuk
0613ad9bc3 Merge pull request #196 from fussel132/patch-1
Adding successful report of MacBookPro7,1
2021-05-08 12:34:25 -06:00
Mykola Grymalyuk
0ff6977bb7 Add iMac12,x troubleshooting 2021-05-08 12:29:19 -06:00
Mykola Grymalyuk
025d03e7e8 Fix crashing 2021-05-07 14:56:32 -06:00
Mykola Grymalyuk
a4efb1ecd5 Fix DevicePath handling
Closes https://github.com/dortania/OpenCore-Legacy-Patcher/issues/195
2021-05-07 08:23:12 -06:00
Mykola Grymalyuk
7340539742 Fix iMac display output support
Closes https://github.com/dortania/OpenCore-Legacy-Patcher/issues/190
2021-05-07 07:54:37 -06:00
Mykola Grymalyuk
377fdc8de1 Fix crashing on Nvidia iGPUs 2021-05-05 15:32:51 -06:00
Fussel132
36a68ca147 Adding successful report of MacBookPro7,1
Tried out Big Sur 11.3 on MacBookPro7,1 with OpenCore patcher version v0.1.2, working fine (with graphics acceleration).  Not working: Keyboard backlight and graphical issues with sliders in control center.
2021-05-05 23:11:25 +02:00
Mykola Grymalyuk
922f207da7 Add better debug during Root Patch 2021-05-05 12:38:20 -06:00
Mykola Grymalyuk
ec4d1d4471 Fix crash 2021-05-05 12:34:23 -06:00
Mykola Grymalyuk
057b8739d3 Refactor Device Probing 2021-05-05 12:28:24 -06:00
Dhinak G
332376030e Fix typo in storage device detection
Fixes #192
2021-05-05 08:19:58 -04:00
Mykola Grymalyuk
302cfb3bef Add built-in to party PCI drives 2021-05-04 22:24:14 -06:00
Mykola Grymalyuk
0cb70d896d Fix iMac9,1 audio support 2021-05-04 21:03:11 -06:00
Mykola Grymalyuk
f5c511366e Fix NightShift disabling on Minimal SMBIOS configs 2021-05-04 14:07:50 -06:00
Mykola Grymalyuk
79a2f49739 Fix integer 2021-05-04 00:13:05 -06:00
Mykola Grymalyuk
d6b5b65183 Avoid having too fast RAM 2021-05-04 00:11:30 -06:00
Mykola Grymalyuk
89444bc4bc Fix input handling 2021-05-04 00:03:49 -06:00
Mykola Grymalyuk
2435a7e651 Fix typo 2021-05-03 23:56:48 -06:00
Mykola Grymalyuk
1957e70cfd Fix CPU Renaming on non-i5 models 2021-05-03 23:49:43 -06:00
Mykola Grymalyuk
aba21bca43 Fix crash 2021-05-03 21:33:05 -06:00
Mykola Grymalyuk
ccc9549fc4 Fix typo 2021-05-03 21:24:30 -06:00
Mykola Grymalyuk
07bd8fa33f Support custom CPU names in About This Mac 2021-05-03 21:12:01 -06:00
Mykola Grymalyuk
85e0761460 Fix MacBookPro5,4 audio
Closes https://github.com/dortania/OpenCore-Legacy-Patcher/issues/185
2021-05-03 12:44:11 -06:00
Mykola Grymalyuk
5bca1a0ad6 Add Innie Support
Closes https://github.com/dortania/OpenCore-Legacy-Patcher/issues/187
2021-05-03 12:28:47 -06:00
Mykola Grymalyuk
ca4051b10d Increment binaries to release 2021-05-03 09:05:57 -06:00
Mykola Grymalyuk
ece4065de3 Clarify changelog 2021-05-02 23:00:35 -06:00
Mykola Grymalyuk
e5aea82b6f Add Sidecar support 2021-05-02 22:59:13 -06:00
Mykola Grymalyuk
85fc1d6627 Adjust CPUFriend for custom SMBIOS better 2021-05-02 20:25:24 -06:00
Mykola Grymalyuk
a0e9de2cb8 Strip garbage code 2021-05-02 18:38:27 -06:00
Mykola Grymalyuk
c39b719093 Fix pci-aspm-default parsing on non-int vars
Closes https://github.com/dortania/OpenCore-Legacy-Patcher/issues/183
2021-05-02 16:41:42 -06:00
Mykola Grymalyuk
dd7cc97645 Fix comment 2021-05-02 13:56:32 -06:00
Mykola Grymalyuk
76f104ddab Increment binaries
Closes https://github.com/dortania/OpenCore-Legacy-Patcher/issues/180
2021-05-02 12:35:50 -06:00
Mykola Grymalyuk
6f1ed43f4e Disable L0 for NVMe drives 2021-05-01 10:40:06 -06:00
Mykola Grymalyuk
7209aa98d0 Append 0x2 for NVMe PM 2021-05-01 08:52:26 -06:00
Mykola Grymalyuk
0ac33532f2 Fix MacBook6,1 audio support
Closes https://github.com/dortania/OpenCore-Legacy-Patcher/issues/179
2021-04-30 23:36:22 -06:00
Mykola Grymalyuk
d40e9c869d Allow native Macs to use OpenCore
Closes https://github.com/dortania/OpenCore-Legacy-Patcher/issues/178
2021-04-30 23:27:43 -06:00
Mykola Grymalyuk
d5ff1edc44 Add 3rd Party NVMe Power Management Patches 2021-04-30 22:51:12 -06:00
Mykola Grymalyuk
c3d8d77b07 Add documentation on UEFI Windows install 2021-04-29 21:46:25 -06:00
Mykola Grymalyuk
9ae7be59b5 Add Windows UEFI Audio support
Closes https://github.com/dortania/OpenCore-Legacy-Patcher/issues/133
2021-04-29 20:53:54 -06:00
Mykola Grymalyuk
e1be0d32ab Update config 2021-04-29 18:41:07 -06:00
Mykola Grymalyuk
a675771bc6 Add better model logging to config.plist 2021-04-29 18:20:49 -06:00
Mykola Grymalyuk
c0a15477c9 Update docs 2021-04-29 08:46:20 -06:00
Mykola Grymalyuk
c2291ab590 Merge pull request #176 from Ausdauersportler/patch-4
How to apply the legacy Video Patches
2021-04-29 08:31:48 -06:00
Mykola Grymalyuk
be9cc0d41b Merge pull request #177 from Ausdauersportler/patch-5
make OLCP EFI default boot object
2021-04-29 08:30:52 -06:00
Ausdauersportler
01e0f3061c make OLCP EFI default boot object
Select EFI by pressing control. You should possibly change the picture (../images/efi-boot.png) with one showing the circle arrow in that case!
2021-04-29 16:27:19 +02:00
Mykola Grymalyuk
8cd7b0b43b Clarify Imac Metal Setting 2021-04-29 07:48:32 -06:00
Mykola Grymalyuk
ef11715e79 Probe hardware for Backlight pathing 2021-04-29 07:41:07 -06:00
Ausdauersportler
7a7ff557ea How to apply the legacy Video Patches
Added two pictures  and some text about the legacy video patching process.
2021-04-29 11:10:38 +02:00
Mykola Grymalyuk
cb307d852a Update DONATE.md 2021-04-28 17:39:10 -06:00
Mykola Grymalyuk
e943c69c82 Update README 2021-04-28 10:31:25 -06:00
Mykola Grymalyuk
fa8d3a800e Remove ACPI Patching for Minimal SMBIOS 2021-04-28 09:45:30 -06:00
Mykola Grymalyuk
f592524054 Fix incorrect agdpmod arg for AMD GPUs 2021-04-28 08:34:15 -06:00
Mykola Grymalyuk
aaa114e753 Fix disabling non-existent iGPU in iMac11,2 2021-04-27 14:19:02 -06:00
Mykola Grymalyuk
0625bdb3d1 Fix reduced output speeds on BCM94360 Wifi cards
Closes https://github.com/dortania/OpenCore-Legacy-Patcher/issues/170
2021-04-27 07:14:20 -06:00
Mykola Grymalyuk
7e918c86e2 Fix URL error message 2021-04-26 19:48:28 -06:00
Mykola Grymalyuk
2216bc0212 Fix IDE support on 2008 era MacBooks and iMacs
Closes https://github.com/dortania/OpenCore-Legacy-Patcher/issues/169
2021-04-26 19:04:35 -06:00
Mykola Grymalyuk
e76ceb7cf4 Update Discord link 2021-04-26 14:59:19 -06:00
Mykola Grymalyuk
22b9853452 Fix CLI model checking
Closes https://github.com/dortania/OpenCore-Legacy-Patcher/issues/168
2021-04-26 09:11:14 -06:00
Mykola Grymalyuk
8c7e991779 Revert MBP8,x AMD patch 2021-04-25 15:19:08 -06:00
Mykola Grymalyuk
b2fcb77c24 Fix more typos 2021-04-25 00:37:17 -06:00
Mykola Grymalyuk
2ac80fda32 Merge branch 'main' of https://github.com/dortania/Opencore-Legacy-Patcher into main 2021-04-25 00:26:02 -06:00
Mykola Grymalyuk
31e48c7d96 Fix misc typos 2021-04-25 00:25:54 -06:00
Mykola Grymalyuk
18bbe60088 Merge pull request #167 from guanzhangrtk/main
Fix typo
2021-04-25 00:15:56 -06:00
guanzhangrtk
5a0ad4379e Fix typo 2021-04-24 23:12:13 -07:00
Mykola Grymalyuk
8971a3c4a9 SysPatch.py: Fix typo 2021-04-24 23:57:07 -06:00
Mykola Grymalyuk
37cd66265b Fix Acceleration Linking for Intel Ironlake iGPUs 2021-04-24 23:04:13 -06:00
Dhinak G
faad02a7fa Sync changelog 2021-04-24 14:10:43 -04:00
Dhinak G
06d4c86ad8 Fix report error output 2021-04-24 14:09:28 -04:00
Mykola Grymalyuk
a5998cb226 Sync changelog 2021-04-24 10:35:22 -06:00
Mykola Grymalyuk
e86b48e0fc Update GPU detection 2021-04-24 09:38:09 -06:00
Mykola Grymalyuk
53a59c0ce3 Update docs 2021-04-24 09:24:03 -06:00
Mykola Grymalyuk
fe5045edbe Fix dGPU detection on patcher start 2021-04-24 09:12:05 -06:00
Mykola Grymalyuk
6a357d8cdf Disable AMD TeraScale 2 GPUs in MacBook Pros 2021-04-24 08:33:55 -06:00
Mykola Grymalyuk
5005d1f1eb Update SysPatch.py 2021-04-24 00:35:27 -06:00
Mykola Grymalyuk
b801afcff0 Enable GPU Accel on legacy GPUs by default 2021-04-23 20:30:52 -06:00
Mykola Grymalyuk
758c1d9649 Fix TeraScale 1 GPU detection 2021-04-22 20:27:24 -06:00
Mykola Grymalyuk
9e6d742c6d Fix iMac11,3 Nvidia boot issues after PRAM reset 2021-04-22 10:01:51 -06:00
Mykola Grymalyuk
de1b893049 Disable iGPU when running iMac13,x/14,x 2021-04-22 09:51:54 -06:00
Mykola Grymalyuk
0483b5651a Patch AppleIntelSNBGraphicsFB’s board ID 2021-04-22 07:45:51 -06:00
Mykola Grymalyuk
7680c20221 Fix build crashing on iMac7,1 2021-04-21 21:55:09 -06:00
Mykola Grymalyuk
349bdb2936 Update iMac7,1 notes 2021-04-21 21:05:13 -06:00
Mykola Grymalyuk
60dc7c4490 Fix USB kernel panics on iMac7,1 2021-04-21 20:43:57 -06:00
Mykola Grymalyuk
7aaaa79571 Merge pull request #163 from dortania/test-sandy
Misc fixes
2021-04-21 18:14:24 -06:00
Mykola Grymalyuk
b83495702b Disable HD3000 work-around 2021-04-21 18:13:54 -06:00
Mykola Grymalyuk
d482443f0e Allow Legacy Acceleration Patches on Mac Pros and Xserves 2021-04-21 18:13:02 -06:00
Mykola Grymalyuk
d4b55ad0e4 Fix build crashing when no wifi card is present 2021-04-21 17:47:51 -06:00
Mykola Grymalyuk
77cff8a6f3 Initial Sandy Bridge test 2021-04-21 15:23:43 -06:00
Mykola Grymalyuk
2e62f1f65c Add better kmutil crash handling 2021-04-21 14:42:54 -06:00
Mykola Grymalyuk
87359ee642 Fix typo 2021-04-21 12:43:07 -06:00
Mykola Grymalyuk
0b8c4b20b6 Update menubar patches 2021-04-21 12:17:38 -06:00
Mykola Grymalyuk
3049d1adef Fix misc issues
Closes https://github.com/dortania/OpenCore-Legacy-Patcher/issues/161
2021-04-21 10:53:21 -06:00
Mykola Grymalyuk
e3e9be01a2 Fix iMac13/14,x building 2021-04-21 08:02:37 -06:00
Mykola Grymalyuk
f178b22423 Add beta support for Legacy GPU Acceleration 2021-04-20 18:38:42 -06:00
Mykola Grymalyuk
797b56b9f9 Fix DRM support on Nvidia-only configurations 2021-04-20 15:00:53 -06:00
Mykola Grymalyuk
d08807e301 Fix bluetooth on iMac12,x 2021-04-20 11:19:31 -06:00
Mykola Grymalyuk
c78f7d0bdb Fix crashing on custom models 2021-04-20 09:11:56 -06:00
Mykola Grymalyuk
bd4564f98e Clarify uninstallation docs 2021-04-20 07:15:04 -06:00
Mykola Grymalyuk
25a5a3d168 Add MouSSE support to iMac10,1 with Metal AMD GPU 2021-04-18 10:45:01 -06:00
Mykola Grymalyuk
4b54711434 Fix iMac11,3 GFX0 pathing
Reference https://github.com/dortania/OpenCore-Legacy-Patcher/issues/89
2021-04-18 09:11:14 -06:00
Mykola Grymalyuk
6eec2e95b8 Increment build 2021-04-17 17:34:02 -06:00
Mykola Grymalyuk
03ed8ed1f0 Fix crash on iMacs with Metal GPUs 2021-04-17 17:05:32 -06:00
Mykola Grymalyuk
9720d90493 Update docs
Closes https://github.com/dortania/OpenCore-Legacy-Patcher/issues/155
2021-04-17 13:40:27 -06:00
Mykola Grymalyuk
d0eada1d85 Increment build 2021-04-17 12:49:11 -06:00
57 changed files with 2612 additions and 650 deletions

View File

@@ -18,7 +18,7 @@ jobs:
# python3 -m pip install -U pip
# pip3 install pyinstaller
- run: pyinstaller Opencore-Patcher.spec
- run: pyinstaller OpenCore-Patcher.spec
- run: ./after_pyinstaller.sh
- run: 'codesign -s "Developer ID Application: Mykola Grymalyuk (S74BDJXQMD)" -v --deep --timestamp --entitlements entitlements.plist -o runtime "dist/OpenCore-Patcher.app"'

3
.gitignore vendored
View File

@@ -1,6 +1,6 @@
.DS_Store
OCLP-GUI.command
/payloads/Apple-Binaries-OCLP-main
/payloads/Apple
/payloads/__MACOSX
/App
/Build-Folder
@@ -8,6 +8,7 @@ OCLP-GUI.command
/dist
/.vscode
__pycache__/
*.kext
*.py[cod]
*$py.class
/docs/.vuepress/dist

View File

@@ -1,5 +1,70 @@
# OpenCore Legacy Patcher changelog
## 0.1.3
- Fix internal PCIe devices reporting as external
- Opt for `built-in` when device path is detectable
- Innie 0ccd95e (1.3.0 release - 01-16-2021)
- Fix MacBookPro5,4 audio support
- Increment binaries
- AppleALC 58b57ee (1.6.1 rolling - 05-07-2021)
- Apple Binaries 74bd80f (0.0.6 release - 05-09-2021)
- Support custom CPU names in About This Mac
- Fix NightShift accidentally disabling on Minimal SMBIOS configs
- Fix iMac9,1 audio support
- Heavily expand Graphics ID list
- Fix iMac7,1 and iMac8,1 audio support
- Work-around Bluetooth Kernel Panic on Apple's Bluetooth 2.0 Controllers (USB 05AC:8206)
- Affects iMac7,1 and MacPro3,1
- Fix iMac external display support
- Fix NVMe properties not applying when OpenCore is installed
## 0.1.2
- Fix IDE support on 2008 era MacBooks, iMacs and Xserves
- Fix reduced output speeds on BCM94360 series Wifi cards
- Fix accidentally disabling non-existent iGPU in iMac11,2
- Remove USB ACPI Patching requirement for Minimal SMBIOS setups
- Probe hardware for Backlight pathing on iMac10,1, iMac11,x and iMac12,x with Metal GPUs
- Add Windows UEFI Audio support to Sandy and Ivy Bridge Macs
- Add 3rd Party NVMe Power Management Patches
- NVMeFix fafc52d (1.0.7 release - 05-03-2021)
- Strip unused ACPI and Kernel entries during build
- Allow native Macs to use OpenCore
- Better 3rd party NVMe support
- Better Wireless networking support
- Fix MacBook6,1 audio support
- Increment binaries
- OpenCore 65cc81b (0.6.9 release - 05-03-2021)
- Lilu c77722d (1.5.3 release - 05-03-2021)
- AppleALC 84850d0 (1.6.0 rolling - 04-30-2021)
- RestrictEvents 9e2bb0f (1.0.1 release - 05-03-2021)
- Allow CPUFriend on all El-Capitan Era Macs
- Fix UEFI 2.0 Application support on upgraded Nvidia GPUs
- Add experimental Sidecar support
- Requires Mac with Metal Intel iGPU and the iPad to be directly plugged in, wireless highly unstable
- SidecarFixup efdf11c (1.0.0 release - 05-02-2021)
## 0.1.1
- Fix iMac11,3 GFX0 pathing
- Add MouSSE support to iMac10,1 with Metal AMD GPU
- Fix iMac11,1 and iMac11,3 Nvidia boot issues after PRAM reset
- Fix DRM support on Nvidia-only configurations
- Support optional setting between DRM and QuickSync support on iMacs13,x and iMac14,x
- Add public beta support for Legacy GPU Acceleration (v0.0.4)
- Note ATI/AMD TeraScale 2 unsupported (HD 5/6000)
- Add better kmutil crash handling
- Fix build crashing when no wifi card is present
- Allow Legacy Acceleration Patches on Mac Pros and Xserves
- Fix USB kernel panics on iMac7,1
- Fix AppleALC support in Mojave
- Fix TeraScale 1 GPU detection
- Enable Graphics Acceleration on legacy GPUs by default
- Fix incorrectly disabling SIP/SMB on Metal GPUs
- Fix error output when rebuilding kernel cache fails
- Fix Acceleration Linking for Intel Ironlake iGPUs
## 0.1.0
- Fix crash on iMacs with Metal GPUs
## 0.0.23
- Fix MacBookPro4,1 15" and 17" audio support
- Fix iMac7,1 24" and iMac9,1 24" audio support
@@ -31,7 +96,7 @@
## 0.0.21
- Fix botched images in OpenCanopy
- Add support for 3rd party OpenCore usage detection during building
- Mainly for users transtioning from Ausdauersportler's OpenCore configuration
- Mainly for users transitioning from Ausdauersportler's OpenCore configuration
## 0.0.20
- Fix CPU Calculation on early MCP79 chipsets (ie. iMac9,1, MacBook5,x)
@@ -178,4 +243,4 @@
- Add El Capitan era wireless cards
## 0.0.1
- Inital developer preview
- Initial developer preview

View File

@@ -3,6 +3,8 @@
from __future__ import print_function
import binascii
import plistlib
import subprocess
import sys
import time
@@ -10,7 +12,7 @@ import platform
import argparse
from pathlib import Path
from Resources import Build, ModelArray, Constants, SysPatch, Utilities, CliMenu
from Resources import Build, ModelArray, PCIIDArray, Constants, SysPatch, Utilities, CliMenu, DeviceProbe
class OpenCoreLegacyPatcher():
@@ -28,10 +30,14 @@ class OpenCoreLegacyPatcher():
if self.current_model in ModelArray.NoAPFSsupport:
self.constants.serial_settings = "Moderate"
if self.current_model in ModelArray.LegacyGPU:
Build.BuildOpenCore(self.constants.custom_model or self.current_model, self.constants).check_pciid(False)
if not (self.constants.dgpu_devices and self.constants.dgpu_vendor == self.constants.pci_amd_ati and self.constants.dgpu_device in ModelArray.AMDMXMGPUs) or not (self.constants.dgpu_devices and self.constants.dgpu_vendor == self.constants.pci_nvidia and self.constants.dgpu_device in ModelArray.NVIDIAMXMGPUs):
self.constants.sip_status = False
self.constants.secure_status = False
dgpu_vendor,dgpu_device,dgpu_acpi = DeviceProbe.pci_probe().gpu_probe("GFX0")
if dgpu_vendor:
if (dgpu_vendor == self.constants.pci_amd_ati and (dgpu_device in PCIIDArray.amd_ids().polaris_ids or dgpu_device in PCIIDArray.amd_ids().vega_ids or dgpu_device in PCIIDArray.amd_ids().navi_ids or dgpu_device in PCIIDArray.amd_ids().legacy_gcn_ids)) or (dgpu_vendor == self.constants.pci_nvidia and dgpu_device in PCIIDArray.nvidia_ids().kepler_ids):
self.constants.sip_status = True
self.constants.secure_status = True
else:
self.constants.sip_status = False
self.constants.secure_status = False
# Logic for when user runs custom OpenCore build and do not expose it
# Note: This logic currently only applies for iMacPro1,1 users, see below threads on the culprits:
@@ -47,6 +53,15 @@ class OpenCoreLegacyPatcher():
if not true_model.startswith("Unknown"):
self.current_model = true_model
custom_cpu_model_value: str = subprocess.run("nvram 4D1FDA02-38C7-4A6A-9CC6-4BCCA8B30102:revcpuname".split(), stdout=subprocess.PIPE, stderr=subprocess.STDOUT).stdout.decode()
if not custom_cpu_model_value.startswith("nvram: Error getting variable"):
custom_cpu_model_value = [line.strip().split(":revcpuname ", 1)[1] for line in custom_cpu_model_value.split("\n") if line.strip().startswith("4D1FDA02-38C7-4A6A-9CC6-4BCCA8B30102:")][0]
if custom_cpu_model_value.split("%00")[0] != "":
self.constants.custom_cpu_model = 1
self.constants.custom_cpu_model_value = custom_cpu_model_value.split("%00")[0]
parser = argparse.ArgumentParser()
# Generic building args
@@ -59,6 +74,8 @@ class OpenCoreLegacyPatcher():
parser.add_argument('--disable_sip', help='Disable SIP', action='store_true', required=False)
parser.add_argument('--disable_smb', help='Disable SecureBootModel', action='store_true', required=False)
parser.add_argument('--vault', help='Enable OpenCore Vaulting', action='store_true', required=False)
parser.add_argument('--support_all', help='Allow OpenCore on natively supported Models', action='store_true', required=False)
parser.add_argument('--force_legacy', help='Allow acceleration on Mac Pros and Xserves', action='store_true', required=False)
# Building args requiring value values
parser.add_argument('--model', action='store', help='Set custom model', required=False)
@@ -68,7 +85,6 @@ class OpenCoreLegacyPatcher():
# SysPatch args
parser.add_argument('--patch_sys_vol', help='Patches root volume', action='store_true', required=False)
parser.add_argument('--unpatch_sys_vol', help='Unpatches root volume, EXPERIMENTAL', action='store_true', required=False)
parser.add_argument('--custom_repo', action='store', help='Set SMBIOS patching mode', required=False)
args = parser.parse_args()
@@ -129,6 +145,15 @@ class OpenCoreLegacyPatcher():
else:
print(f"- Unknown SMBIOS arg passed: {args.smbios_spoof}")
if args.support_all:
print("- Building for natively supported model")
self.constants.allow_oc_everywhere = True
self.constants.serial_settings = "None"
if args.force_legacy:
print("- Allowing legacy acceleration patches on newer models")
self.constants.assume_legacy = True
if args.build:
if args.model:
print(f"- Using custom model: {args.model}")
@@ -139,14 +164,22 @@ class OpenCoreLegacyPatcher():
self.build_opencore()
if args.patch_sys_vol:
print("- Set System Volume patching")
if args.custom_repo:
self.constants.url_apple_binaries = args.custom_repo
print(f"- Custom set repo to: {self.constants.url_apple_binaries}")
SysPatch.PatchSysVolume(self.constants.custom_model or self.current_model, self.constants).start_patch()
self.patch_vol()
elif args.unpatch_sys_vol:
print("- Set System Volume unpatching")
SysPatch.PatchSysVolume(self.constants.custom_model or self.current_model, self.constants).start_unpatch()
self.unpatch_vol()
def hexswap(self, input_hex: str):
hex_pairs = [input_hex[i:i + 2] for i in range(0, len(input_hex), 2)]
hex_rev = hex_pairs[::-1]
hex_str = "".join(["".join(x) for x in hex_rev])
return hex_str.upper()
def patch_vol(self):
SysPatch.PatchSysVolume(self.constants.custom_model or self.current_model, self.constants).start_patch()
def unpatch_vol(self):
SysPatch.PatchSysVolume(self.constants.custom_model or self.current_model, self.constants).start_unpatch()
def build_opencore(self):
Build.BuildOpenCore(self.constants.custom_model or self.current_model, self.constants).build_opencore()

View File

@@ -3,12 +3,14 @@
from __future__ import print_function
import binascii
import plistlib
import subprocess
import sys
import time
import platform
from Resources import Build, ModelArray, Constants, SysPatch, Utilities, CliMenu
from Resources import Build, ModelArray, PCIIDArray, Constants, SysPatch, Utilities, CliMenu, DeviceProbe
class OpenCoreLegacyPatcher():
@@ -20,14 +22,17 @@ class OpenCoreLegacyPatcher():
opencore_model = [line.strip().split(":oem-product ", 1)[1] for line in opencore_model.split("\n") if line.strip().startswith("4D1FDA02-38C7-4A6A-9CC6-4BCCA8B30102:")][0]
self.current_model = opencore_model
else:
self.current_model = subprocess.run("system_profiler SPHardwareDataType".split(), stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
self.current_model = [line.strip().split(": ", 1)[1] for line in self.current_model.stdout.decode().split("\n") if line.strip().startswith("Model Identifier")][0]
self.current_model = plistlib.loads(subprocess.run("system_profiler -detailLevel mini -xml SPHardwareDataType".split(), stdout=subprocess.PIPE, stderr=subprocess.STDOUT).stdout.strip())[0]["_items"][0]["machine_model"]
self.constants.detected_os = int(platform.uname().release.partition(".")[0])
if self.current_model in ModelArray.NoAPFSsupport:
self.constants.serial_settings = "Moderate"
if self.current_model in ModelArray.LegacyGPU:
Build.BuildOpenCore(self.constants.custom_model or self.current_model, self.constants).check_pciid(False)
if not (self.constants.dgpu_devices and self.constants.dgpu_vendor == self.constants.pci_amd_ati and self.constants.dgpu_device in ModelArray.AMDMXMGPUs) or not (self.constants.dgpu_devices and self.constants.dgpu_vendor == self.constants.pci_nvidia and self.constants.dgpu_device in ModelArray.NVIDIAMXMGPUs):
dgpu_vendor,dgpu_device,dgpu_acpi = DeviceProbe.pci_probe().gpu_probe("GFX0")
if (dgpu_vendor == self.constants.pci_amd_ati and (dgpu_device in PCIIDArray.amd_ids().polaris_ids or dgpu_device in PCIIDArray.amd_ids().vega_ids or dgpu_device in PCIIDArray.amd_ids().navi_ids or dgpu_device in PCIIDArray.amd_ids().legacy_gcn_ids)) or (dgpu_vendor == self.constants.pci_nvidia and dgpu_device in PCIIDArray.nvidia_ids().kepler_ids):
self.constants.sip_status = True
self.constants.secure_status = True
else:
self.constants.sip_status = False
self.constants.secure_status = False
@@ -45,6 +50,20 @@ class OpenCoreLegacyPatcher():
if not true_model.startswith("Unknown"):
self.current_model = true_model
custom_cpu_model_value: str = subprocess.run("nvram 4D1FDA02-38C7-4A6A-9CC6-4BCCA8B30102:revcpuname".split(), stdout=subprocess.PIPE, stderr=subprocess.STDOUT).stdout.decode()
if not custom_cpu_model_value.startswith("nvram: Error getting variable"):
custom_cpu_model_value = [line.strip().split(":revcpuname ", 1)[1] for line in custom_cpu_model_value.split("\n") if line.strip().startswith("4D1FDA02-38C7-4A6A-9CC6-4BCCA8B30102:")][0]
if custom_cpu_model_value.split("%00")[0] != "":
self.constants.custom_cpu_model = 1
self.constants.custom_cpu_model_value = custom_cpu_model_value.split("%00")[0]
def hexswap(self, input_hex: str):
hex_pairs = [input_hex[i:i + 2] for i in range(0, len(input_hex), 2)]
hex_rev = hex_pairs[::-1]
hex_str = "".join(["".join(x) for x in hex_rev])
return hex_str.upper()
def build_opencore(self):
Build.BuildOpenCore(self.constants.custom_model or self.current_model, self.constants).build_opencore()
@@ -84,14 +103,35 @@ system_profiler SPHardwareDataType | grep 'Model Identifier'
[f"Enable Verbose Mode:\t\tCurrently {self.constants.verbose_debug}", CliMenu.MenuOptions(self.constants.custom_model or self.current_model, self.constants).change_verbose],
[f"Enable OpenCore DEBUG:\t\tCurrently {self.constants.opencore_debug}", CliMenu.MenuOptions(self.constants.custom_model or self.current_model, self.constants).change_oc],
[f"Enable Kext DEBUG:\t\t\tCurrently {self.constants.kext_debug}", CliMenu.MenuOptions(self.constants.custom_model or self.current_model, self.constants).change_kext],
[f"Force iMac Metal Patch:\t\tCurrently {self.constants.imac_vendor}", CliMenu.MenuOptions(self.constants.custom_model or self.current_model, self.constants).change_metal],
[f"Assume Upgraded Wifi Always:\tCurrently {self.constants.wifi_build}", CliMenu.MenuOptions(self.constants.custom_model or self.current_model, self.constants).change_wifi],
[f"Set ShowPicker Mode:\t\tCurrently {self.constants.showpicker}", CliMenu.MenuOptions(self.constants.custom_model or self.current_model, self.constants).change_showpicker],
[f"Set Vault Mode:\t\t\tCurrently {self.constants.vault}", CliMenu.MenuOptions(self.constants.custom_model or self.current_model, self.constants).change_vault],
[f"Set SIP and SecureBootModel:\tSIP: {self.constants.sip_status} SBM: {self.constants.secure_status}", CliMenu.MenuOptions(self.constants.custom_model or self.current_model, self.constants).change_sip],
[f"Allow OpenCore on native Models:\tCurrently {self.constants.allow_oc_everywhere}", CliMenu.MenuOptions(self.constants.custom_model or self.current_model, self.constants).allow_native_models],
[f"Advanced Patch Settings, for developers only", self.advanced_patcher_settings],
]
for option in options:
menu.add_menu_option(option[0], function=option[1])
response = menu.start()
def advanced_patcher_settings(self):
response = None
while not (response and response == -1):
title = [
"Adjust Advanced Patcher Settings, for developers ONLY"
]
menu = Utilities.TUIMenu(title, "Please select an option: ", auto_number=True, top_level=True)
options = [
[f"Assume Metal GPU Always:\t\tCurrently {self.constants.imac_vendor}", CliMenu.MenuOptions(self.constants.custom_model or self.current_model, self.constants).change_metal],
[f"Assume Upgraded Wifi Always:\tCurrently {self.constants.wifi_build}", CliMenu.MenuOptions(self.constants.custom_model or self.current_model, self.constants).change_wifi],
[f"Set SMBIOS Mode:\t\t\tCurrently {self.constants.serial_settings}", CliMenu.MenuOptions(self.constants.custom_model or self.current_model, self.constants).change_serial],
[f"Set Generic Bootstrap:\t\t{self.constants.boot_efi}", CliMenu.MenuOptions(self.constants.custom_model or self.current_model, self.constants).bootstrap_setting],
["Set Custom Patch Repo", CliMenu.MenuOptions(self.constants.custom_model or self.current_model, self.constants).custom_repo],
[f"DRM Preferences:\t\t\tCurrently {self.constants.drm_support}", CliMenu.MenuOptions(self.constants.custom_model or self.current_model, self.constants).drm_setting],
[f"Set Generic Bootstrap:\t\tCurrently {self.constants.boot_efi}", CliMenu.MenuOptions(self.constants.custom_model or self.current_model, self.constants).bootstrap_setting],
[f"Assume Legacy GPU:\t\t\tCurrently {self.constants.assume_legacy}", CliMenu.MenuOptions(self.constants.custom_model or self.current_model, self.constants).force_accel_setting],
#[f"Download more RAM:\t\t\tCurrently {self.constants.download_ram}", CliMenu.MenuOptions(self.constants.custom_model or self.current_model, self.constants).download_more_ram_dot_com],
[f"Disable CPU Friend:\t\t\tCurrently {self.constants.disallow_cpufriend}", CliMenu.MenuOptions(self.constants.custom_model or self.current_model, self.constants).disable_cpufriend],
[f"Set Custom name {self.constants.custom_cpu_model_value}", CliMenu.MenuOptions(self.constants.custom_model or self.current_model, self.constants).custom_cpu],
]
for option in options:
@@ -109,14 +149,18 @@ system_profiler SPHardwareDataType | grep 'Model Identifier'
- ASentientBot:\tLegacy Acceleration Patches
- Ausdauersportler:\tLinking fixes for SNBGraphicsFB and AMDX3000
- Syncretic:\t\tAAAMouSSE and telemetrap
- cdf:\t\tNightShiftEnabler"""]).start()
- cdf:\t\tNightShiftEnabler and Innie"""]).start()
def PatchVolume(self):
Utilities.cls()
Utilities.header(["Patching System Volume"])
print("""Patches Root volume to fix misc issues such as:
- Brightness control for non-Metal GPUs
- Graphics Acceleration for non-Metal GPUs
- Nvidia: Tesla - Fermi (8000-500 series)
- Intel: Ironlake - Sandy Bridge
- AMD: TeraScale 1 (2000-4000 series)
- Audio support for iMac7,1 and iMac8,1
WARNING: Root Volume Patching is still in active development, please
have all important user data backed up. Note when the system volume
@@ -147,9 +191,9 @@ B. Exit
f"Target OS: macOS {self.constants.os_support}",
]
if (self.constants.custom_model or self.current_model) not in ModelArray.SupportedSMBIOS:
if (self.constants.custom_model or self.current_model) not in ModelArray.SupportedSMBIOS and self.constants.allow_oc_everywhere is False:
in_between = [
'Your model is not supported by this patcher!',
'Your model is not supported by this patcher for running unsupported OSes!',
'',
'If you plan to create the USB for another machine, please select the "Change Model" option in the menu.'
]
@@ -170,7 +214,7 @@ B. Exit
menu = Utilities.TUIMenu(title, "Please select an option: ", in_between=in_between, auto_number=True, top_level=True)
options = (
[["Build OpenCore", self.build_opencore]] if ((self.constants.custom_model or self.current_model) in ModelArray.SupportedSMBIOS) else []) + [
[["Build OpenCore", self.build_opencore]] if ((self.constants.custom_model or self.current_model) in ModelArray.SupportedSMBIOS) or self.constants.allow_oc_everywhere is True else []) + [
["Install OpenCore to USB/internal drive", self.install_opencore],
["Post-Install Volume Patch", self.PatchVolume],
["Change Model", self.change_model],

View File

@@ -2,59 +2,55 @@
<img src="images/OC-Patcher.png" width="256">
A python program for building and booting [OpenCore](https://github.com/acidanthera/OpenCorePkg) on legacy Macs, see [Supported SMBIOS](https://dortania.github.io/OpenCore-Legacy-Patcher/MODELS.html) on whether your model is supported. Designed around Big Sur support, however can be used on older OSes.
| Support Entry | Supported OSes | Description | Comment |
| :--- | :--- | :--- | :--- |
| HostOS | macOS 10.9 - macOS 11 | Refers to OSes where running OpenCore-Patcher.app are supported | Supports 10.7+ if [Python 3.6 or higher](https://www.python.org/downloads/) is manually installed, simply run the `OpenCore-Patcher.command` located in the repo |
| TargetOS | macOS 11 | Refers to OSes that can be patched to run with OpenCore | May support 10.4 and newer (in a potentially broken state). No support provided. |
A python program for building and booting [OpenCore](https://github.com/acidanthera/OpenCorePkg) on both legacy and modern Macs, see our in-depth [Guide](https://dortania.github.io/OpenCore-Legacy-Patcher/) for more information.
Supported features:
* System Integrity Protection, FileVault 2, .im4m Secure Boot and Vaulting
* WPA Wifi and Personal Hotspot support
* Native OTA OS DELTA updates on all Macs
* Recovery OS, Safe Mode and Single-user Mode booting
* Zero firmware patching required (ie. APFS ROM patching)
* GPU Switching on MacBook Pro models (2012 and newer)
Note: Only clean-installs and upgrades are supported, installs already patched with other patchers, such as [Patched Sur](https://github.com/BenSova/Patched-Sur) or [bigmac](https://github.com/StarPlayrX/bigmac), cannot be used due to broken file integrity with APFS snapshots and SIP.
Note: Only clean-installs and upgrades are supported, macOS Big Sur installs already patched with other patchers, such as [Patched Sur](https://github.com/BenSova/Patched-Sur) or [bigmac](https://github.com/StarPlayrX/bigmac), cannot be used due to broken file integrity with APFS snapshots and SIP.
* You can however reinstall macOS with this patcher and retain your original data
Note 2: Currently OpenCore Legacy Patcher officially supports patching to run macOS 11, Big Sur installs. For older OSes, OpenCore may function however support is currently not provided from Dortania.
For Mojave and Catalina support, we recommend the use of [dosdude1's patchers](http://dosdude1.com)
## How to use
See the online guide on how:
* [OpenCore Legacy Patcher Guide](https://dortania.github.io/OpenCore-Legacy-Patcher/)
## Patcher Warnings
Since this patcher tricks macOS into thinking you're running a newer Mac, certain functionality may be broken:
* Boot Camp Assistant.app
* We recommend running the assistant on a natively supported OS, running via the patcher may result in unforeseen issues
* Legacy Windows Booting
* Currently OpenCore cannot boot MBR-based installs, so Ivy Bridge and older Machines may [not be able to see Windows in OpenCore's Boot Picker](https://github.com/acidanthera/bugtracker/issues/912)
* [Solution is to convert install to UEFI](https://docs.microsoft.com/en-us/mem/configmgr/osd/deploy-use/task-sequence-steps-to-manage-bios-to-uefi-conversion), see MacRumors thread for more examples: [Installing Windows 10](https://forums.macrumors.com/threads/opencore-on-the-mac-pro.2207814/)
* Boot Buddy support
* Due to how OpenCore overwrites NVRAM, the usage of Boot Buddy and such tools are **highly** in-advised
* For Mojave and Catalina support, we recommend the use of [dosdude1's patchers](http://dosdude1.com)
## Support
To get aid with the patcher, we recommend joining the [Unsupported Mac Discord Server](https://discord.gg/XbbWAsE) and heading over to our `#opencore-patcher` channel. We're actively there and is the quickest way to receive help. For bigger issues such as patcher crashing on build and such, we recommend opening an issue right here on GitHub:
To get aid with the patcher, we recommend joining the [OpenCore Patcher Paradise Discord Server](https://discord.gg/rqdPgH8xSN). We're actively there and is the quickest way to receive help. For bigger issues such as patcher crashing on build and such, we recommend opening an issue right here on GitHub(Please review [How to debug with OpenCore](https://dortania.github.io/OpenCore-Legacy-Patcher/DEBUG.html) before opening issues):
* [OpenCore Legacy Patcher's Issue's tab](https://github.com/dortania/OpenCore-Legacy-Patcher/issues)
Regarding how to debug OpenCore Patcher, we recommend seeing the below:
## Credits
* [How to debug with OpenCore](https://dortania.github.io/OpenCore-Legacy-Patcher/DEBUG.html)
## Supporting us!
To help support this patcher, we recommend checking this page:
* [Supporting the patcher](https://dortania.github.io/OpenCore-Legacy-Patcher/DONATE.html)
* [Acidanthera](https://github.com/Acidanthera)
* OpenCorePkg as well as many of the core kexts and tools
* [DhinakG](https://github.com/DhinakG)
* Main co-author
* [Khronokernel](https://github.com/Khronokernel)
* Main co-author
* [Ausdauersportler](https://github.com/Ausdauersportler)
* iMacs Metal GPUs Upgrade Patch set and documentation
* [ASentientBot](https://github.com/ASentientBot)
* Legacy Acceleration Patch set and documentation
* [cdf](https://github.com/cdf)
* Mac Pro on OpenCore Patch set and documentation
* [Innie](https://github.com/cdf/Innie) and [NightShiftEnabler](https://github.com/cdf/NightShiftEnabler)
* [Syncretic](https://forums.macrumors.com/members/syncretic.1173816/)
* [AAAMouSSE](https://forums.macrumors.com/threads/mp3-1-others-sse-4-2-emulation-to-enable-amd-metal-driver.2206682/) and [telemetrap](https://forums.macrumors.com/threads/mp3-1-others-sse-4-2-emulation-to-enable-amd-metal-driver.2206682/post-28447707)
* [dosdude1](https://github.com/dosdude1) and [BarryKN](https://github.com/BarryKN)
* Development of previous patchers, laying out much of what needs to be patched
* [vit9696](https://github.com/vit9696)
* Endless amount of help troubleshooting, determining fixes and writing patches
* [mario_bros_tech](https://github.com/mariobrostech) and the rest of the Unsupported Mac Discord
* Catalyst that started OpenCore Legacy Patcher
* MacRumors and Unsupported Mac Communities
* Endless testing, reporting issues
* Apple
* for macOS and many of the kexts, frameworks and other binaries we reimplemented into newer OSes

View File

@@ -11,10 +11,11 @@ import zipfile
import os
import sys
import platform
import ast
from pathlib import Path
from datetime import date
from Resources import Constants, ModelArray, Utilities
from Resources import Constants, ModelArray, PCIIDArray, Utilities, DeviceProbe
def human_fmt(num):
@@ -43,33 +44,9 @@ class BuildOpenCore:
hex_str = "".join(["".join(x) for x in hex_rev])
return hex_str.upper()
def check_pciid(self, print_status):
try:
self.constants.igpu_devices = plistlib.loads(subprocess.run("ioreg -r -n IGPU -a".split(), stdout=subprocess.PIPE).stdout.decode().strip().encode())
self.constants.igpu_devices = [i for i in self.constants.igpu_devices if i["class-code"] == binascii.unhexlify("00000300")]
self.constants.igpu_vendor = self.hexswap(binascii.hexlify(self.constants.igpu_devices[0]["vendor-id"]).decode()[:4])
self.constants.igpu_device = self.hexswap(binascii.hexlify(self.constants.igpu_devices[0]["device-id"]).decode()[:4])
if print_status is True:
print(f"- Detected iGPU: {self.constants.igpu_vendor}:{self.constants.igpu_device}")
except ValueError:
if print_status is True:
print("- No iGPU detected")
self.constants.igpu_devices = ""
try:
self.constants.dgpu_devices = plistlib.loads(subprocess.run("ioreg -r -n GFX0 -a".split(), stdout=subprocess.PIPE).stdout.decode().strip().encode())
self.constants.dgpu_devices = [i for i in self.constants.dgpu_devices if i["class-code"] == binascii.unhexlify("00000300")]
self.constants.dgpu_vendor = self.hexswap(binascii.hexlify(self.constants.dgpu_devices[0]["vendor-id"]).decode()[:4])
self.constants.dgpu_device = self.hexswap(binascii.hexlify(self.constants.dgpu_devices[0]["device-id"]).decode()[:4])
if print_status is True:
print(f"- Detected dGPU: {self.constants.dgpu_vendor}:{self.constants.dgpu_device}")
except ValueError:
if print_status is True:
print("- No dGPU detected")
self.constants.dgpu_devices = ""
def build_efi(self):
Utilities.cls()
print(f"Building Configuration for model: {self.model}")
if not Path(self.constants.build_path).exists():
Path(self.constants.build_path).mkdir()
print("Created build folder")
@@ -95,6 +72,10 @@ class BuildOpenCore:
# Set revision in config
self.config["#Revision"]["Build-Version"] = f"{self.constants.patcher_version} - {date.today()}"
if not self.constants.custom_model:
self.config["#Revision"]["Build-Type"] = "OpenCore Built on Target Machine"
else:
self.config["#Revision"]["Build-Type"] = "OpenCore Built for External Machine"
self.config["#Revision"]["OpenCore-Version"] = f"{self.constants.opencore_version} - {self.constants.opencore_build} - {self.constants.opencore_commit}"
self.config["#Revision"]["Original-Model"] = self.model
self.config["NVRAM"]["Add"]["4D1FDA02-38C7-4A6A-9CC6-4BCCA8B30102"]["OCLP-Version"] = f"{self.constants.patcher_version}"
@@ -102,16 +83,16 @@ class BuildOpenCore:
for name, version, path, check in [
# Essential kexts
("Lilu.kext", self.constants.lilu_version, self.constants.lilu_path, lambda: True),
("WhateverGreen.kext", self.constants.whatevergreen_version, self.constants.whatevergreen_path, lambda: True),
("WhateverGreen.kext", self.constants.whatevergreen_version, self.constants.whatevergreen_path, lambda: self.constants.allow_oc_everywhere is False),
("RestrictEvents.kext", self.constants.restrictevents_version, self.constants.restrictevents_path, lambda: self.model in ModelArray.MacPro71),
("RestrictEvents.kext", self.constants.restrictevents_mbp_version, self.constants.restrictevents_mbp_path, lambda: self.model == "MacBookPro9,1"),
("NightShiftEnabler.kext", self.constants.nightshift_version, self.constants.nightshift_path, lambda: self.model not in ModelArray.NightShiftExclude),
("SMC-Spoof.kext", self.constants.smcspoof_version, self.constants.smcspoof_path, lambda: True),
("NightShiftEnabler.kext", self.constants.nightshift_version, self.constants.nightshift_path, lambda: self.model not in ModelArray.NightShiftExclude and self.constants.allow_oc_everywhere is False and self.constants.serial_settings == "Minimal"),
("SMC-Spoof.kext", self.constants.smcspoof_version, self.constants.smcspoof_path, lambda: self.constants.allow_oc_everywhere is False),
# CPU patches
("AppleMCEReporterDisabler.kext", self.constants.mce_version, self.constants.mce_path, lambda: self.model in ModelArray.DualSocket),
("AAAMouSSE.kext", self.constants.mousse_version, self.constants.mousse_path, lambda: self.model in ModelArray.SSEEmulator),
("telemetrap.kext", self.constants.telemetrap_version, self.constants.telemetrap_path, lambda: self.model in ModelArray.MissingSSE42),
("CPUFriend.kext", self.constants.cpufriend_version, self.constants.cpufriend_path, lambda: self.model not in ModelArray.NoAPFSsupport),
("CPUFriend.kext", self.constants.cpufriend_version, self.constants.cpufriend_path, lambda: self.model != "iMac7,1" and self.constants.allow_oc_everywhere is False and self.constants.disallow_cpufriend is False),
# Ethernet patches
("nForceEthernet.kext", self.constants.nforce_version, self.constants.nforce_path, lambda: self.model in ModelArray.EthernetNvidia),
("MarvelYukonEthernet.kext", self.constants.marvel_version, self.constants.marvel_path, lambda: self.model in ModelArray.EthernetMarvell),
@@ -120,22 +101,93 @@ class BuildOpenCore:
("AppleALC.kext", self.constants.applealc_version, self.constants.applealc_path, lambda: self.model in ModelArray.LegacyAudio or self.model in ModelArray.MacPro71),
# IDE patch
("AppleIntelPIIXATA.kext", self.constants.piixata_version, self.constants.piixata_path, lambda: self.model in ModelArray.IDEPatch),
# Misc
("SidecarFixup.kext", self.constants.sidecarfixup_version, self.constants.sidecarfixup_path, lambda: self.model in ModelArray.SidecarPatch),
]:
self.enable_kext(name, version, path, check)
if self.constants.allow_oc_everywhere is False:
self.get_item_by_kv(self.config["Kernel"]["Patch"], "Identifier", "com.apple.driver.AppleSMC")["Enabled"] = True
if not self.constants.custom_model and (self.constants.allow_oc_everywhere is True or self.model in ModelArray.MacPro71):
# Use Innie's same logic:
# https://github.com/cdf/Innie/blob/v1.3.0/Innie/Innie.cpp#L90-L97
storage_devices = plistlib.loads(subprocess.run("ioreg -c IOPCIDevice -r -d2 -a".split(), stdout=subprocess.PIPE).stdout.decode().strip().encode())
storage_devices = [i for i in storage_devices if i["class-code"] == binascii.unhexlify(self.constants.classcode_sata) or i["class-code"] == binascii.unhexlify(self.constants.classcode_nvme)]
storage_path_gfx: str = subprocess.run([self.constants.gfxutil_path] + f"-v".split(), stdout=subprocess.PIPE, stderr=subprocess.STDOUT).stdout.decode()
try:
x = 1
for i in storage_devices:
storage_vendor = self.hexswap(binascii.hexlify(i["vendor-id"]).decode()[:4])
storage_device = self.hexswap(binascii.hexlify(i["device-id"]).decode()[:4])
print(f'- Fixing PCIe Storage Controller ({x}) reporting')
try:
storage_path = [line.strip().split("= ", 1)[1] for line in storage_path_gfx.split("\n") if f'{storage_vendor}:{storage_device}'.lower() in line.strip()][0]
self.config["DeviceProperties"]["Add"][storage_path] = { "built-in": 1}
except IndexError:
print(f"- Failed to find Device path for PCIe Storage Controller {x}, falling back to Innie")
if self.get_kext_by_bundle_path("Innie.kext")["Enabled"] is False:
self.enable_kext("Innie.kext", self.constants.innie_version, self.constants.innie_path)
x = x + 1
except ValueError:
print("- No PCIe Storage Controllers found to fix(V)")
except IndexError:
print("- No PCIe Storage Controllers found to fix(I)")
if not self.constants.custom_model:
nvme_devices = plistlib.loads(subprocess.run("ioreg -c IOPCIDevice -r -d2 -a".split(), stdout=subprocess.PIPE).stdout.decode().strip().encode())
nvme_devices = [i for i in nvme_devices if i.get("IORegistryEntryChildren", None) and i["vendor-id"] != binascii.unhexlify("6B100000") and i["IORegistryEntryChildren"][0]["IORegistryEntryName"] == "IONVMeController"]
try:
x = 1
for i in nvme_devices:
nvme_vendor = self.hexswap(binascii.hexlify(i["vendor-id"]).decode()[:4])
nvme_device = self.hexswap(binascii.hexlify(i["device-id"]).decode()[:4])
print(f'- Found 3rd Party NVMe SSD ({x}): {nvme_vendor}:{nvme_device}')
nvme_aspm = i["pci-aspm-default"]
try:
nvme_acpi = i["acpi-path"]
nvme_acpi = DeviceProbe.pci_probe().acpi_strip(nvme_acpi)
except KeyError:
print(f"- No ACPI entry found for NVMe SSD ({x})")
nvme_acpi = ""
# Disable Bit 0 (L0s), enable Bit 1 (L1)
if not isinstance(nvme_aspm, int):
nvme_aspm = int.from_bytes(nvme_aspm, byteorder='little')
nvme_aspm = (nvme_aspm & (~3)) | 2
#nvme_aspm &= ~1 # Turn off bit 1
#nvme_aspm |= 2 # Turn on bit 2
self.config["#Revision"][f"Hardware-NVMe-{x}"] = f'{nvme_vendor}:{nvme_device}'
try:
nvme_path = DeviceProbe.pci_probe().deviceproperty_probe(nvme_vendor, nvme_device, nvme_acpi)
if nvme_path == "":
raise IndexError
nvme_path_parent = DeviceProbe.pci_probe().device_property_parent(nvme_path)
print(f"- Found NVMe ({x}) at {nvme_path}")
self.config["DeviceProperties"]["Add"][nvme_path] = {"pci-aspm-default": nvme_aspm, "built-in": 1}
self.config["DeviceProperties"]["Add"][nvme_path_parent] = {"pci-aspm-default": nvme_aspm}
except IndexError:
if "-nvmefaspm" not in self.config["NVRAM"]["Add"]["7C436110-AB2A-4BBB-A880-FE41995C9F82"]["boot-args"]:
print("- Falling back to -nvmefaspm")
self.config["NVRAM"]["Add"]["7C436110-AB2A-4BBB-A880-FE41995C9F82"]["boot-args"] += " -nvmefaspm"
if self.get_kext_by_bundle_path("NVMeFix.kext")["Enabled"] is False:
self.enable_kext("NVMeFix.kext", self.constants.nvmefix_version, self.constants.nvmefix_path)
x = x + 1
except ValueError:
print("- No 3rd Party NVMe drive found(V)")
except IndexError:
print("- No 3rd Party NVMe drive found(I)")
def wifi_fake_id(self):
default_path = True
self.enable_kext("AirportBrcmFixup.kext", self.constants.airportbcrmfixup_version, self.constants.airportbcrmfixup_path)
self.get_kext_by_bundle_path("AirportBrcmFixup.kext/Contents/PlugIns/AirPortBrcmNIC_Injector.kext")["Enabled"] = True
if not self.constants.custom_model:
# Try finding
arpt_path: str = subprocess.run([self.constants.gfxutil_path] + f"-v".split(), stdout=subprocess.PIPE, stderr=subprocess.STDOUT).stdout.decode()
try:
arpt_path = [line.strip().split("= ", 1)[1] for line in arpt_path.split("\n") if f"{wifi_vendor}:{wifi_device}".lower() in line.strip()][0]
arpt_path = DeviceProbe.pci_probe().deviceproperty_probe(wifi_vendor, wifi_device, wifi_acpi)
if arpt_path:
print(f"- Found ARPT device at {arpt_path}")
default_path = False
except IndexError:
print("- Failed to find Device path")
else:
default_path = True
if default_path is True:
if self.model in ModelArray.nvidiaHDEF:
@@ -157,44 +209,37 @@ class BuildOpenCore:
# WiFi patches
# TODO: -a is not supported in Lion and older, need to add proper fix
if self.constants.detected_os > self.constants.lion:
try:
wifi_devices = plistlib.loads(subprocess.run("ioreg -r -n ARPT -a".split(), stdout=subprocess.PIPE).stdout.decode().strip().encode())
except ValueError:
# Work-around Mac Pros where Wifi card may not be named ARPT (ie. installed in dedicated PCIe card slot)
wifi_devices = plistlib.loads(subprocess.run("ioreg -c IOPCIDevice -r -d2 -a".split(), stdout=subprocess.PIPE).stdout.decode().strip().encode())
vendor_atheros = binascii.unhexlify("E4140000")
vendor_broadcom = binascii.unhexlify("8C160000")
wifi_devices = [i for i in wifi_devices if i["vendor-id"] == vendor_atheros or i["vendor-id"] == vendor_broadcom and i["class-code"] == binascii.unhexlify("00800200")]
wifi_vendor = self.hexswap(binascii.hexlify(wifi_devices[0]["vendor-id"]).decode()[:4])
wifi_device = self.hexswap(binascii.hexlify(wifi_devices[0]["device-id"]).decode()[:4])
wifi_ioname = wifi_devices[0]["IOName"]
if not self.constants.custom_model:
print(f"- Detected Wifi Card: {wifi_vendor}:{wifi_device}")
if self.constants.detected_os > self.constants.lion and not self.constants.custom_model:
wifi_vendor,wifi_device,wifi_ioname,wifi_acpi = DeviceProbe.pci_probe().wifi_probe()
if wifi_vendor:
print(f"- Found Wireless Device {wifi_vendor}:{wifi_device} ({wifi_ioname})")
self.config["#Revision"]["Hardware-Wifi"] = f"{wifi_vendor}:{wifi_device} ({wifi_ioname}"
else:
wifi_devices = ""
print("- Can't run Wifi hardware detection on Snow Leopard and older")
wifi_vendor = ""
print("- Unable to run Wireless hardware detection")
if self.constants.wifi_build is True:
print("- Skipping Wifi patches on request")
elif not self.constants.custom_model and wifi_devices:
elif not self.constants.custom_model and wifi_vendor:
if wifi_vendor == self.constants.pci_broadcom:
if wifi_device in ModelArray.BCM4360Wifi and wifi_ioname not in ["pci14e4,4353", "pci14e4,4331"]:
print("- Found supported WiFi card, skipping wifi patches")
elif wifi_ioname in ["pci14e4,4353", "pci14e4,4331"] or wifi_device in ModelArray.BCM94331Wifi:
# This works around OCLP spoofing the Wifi card and therefore unable to actually detect the correct device
if wifi_device in PCIIDArray.broadcom_ids().BCM4360Wifi and wifi_ioname not in ["pci14e4,4353", "pci14e4,4331"]:
self.enable_kext("AirportBrcmFixup.kext", self.constants.airportbcrmfixup_version, self.constants.airportbcrmfixup_path)
elif wifi_ioname in ["pci14e4,4353", "pci14e4,4331"] or wifi_device in PCIIDArray.broadcom_ids().BCM94331Wifi:
wifi_fake_id(self)
elif wifi_device in ModelArray.BCM94322Wifi:
elif wifi_device in PCIIDArray.broadcom_ids().BCM94322Wifi:
self.enable_kext("IO80211Mojave.kext", self.constants.io80211mojave_version, self.constants.io80211mojave_path)
self.get_kext_by_bundle_path("IO80211Mojave.kext/Contents/PlugIns/AirPortBrcm4331.kext")["Enabled"] = True
elif wifi_device in ModelArray.BCM94328Wifi:
elif wifi_device in PCIIDArray.broadcom_ids().BCM94328Wifi:
self.enable_kext("corecaptureElCap.kext", self.constants.corecaptureelcap_version, self.constants.corecaptureelcap_path)
self.enable_kext("IO80211ElCap.kext", self.constants.io80211elcap_version, self.constants.io80211elcap_path)
self.get_kext_by_bundle_path("IO80211ElCap.kext/Contents/PlugIns/AppleAirPortBrcm43224.kext")["Enabled"] = True
elif wifi_vendor == self.constants.pci_atheros and wifi_device in ModelArray.AtherosWifi:
elif wifi_vendor == self.constants.pci_atheros and wifi_device in PCIIDArray.atheros_ids().AtherosWifi:
self.enable_kext("IO80211HighSierra.kext", self.constants.io80211high_sierra_version, self.constants.io80211high_sierra_path)
self.get_kext_by_bundle_path("IO80211HighSierra.kext/Contents/PlugIns/AirPortAtheros40.kext")["Enabled"] = True
else:
if self.model in ModelArray.WifiBCM94331:
if self.model in ["iMac14,1", "iMac14,2", "iMac14,3"]:
self.enable_kext("AirportBrcmFixup.kext", self.constants.airportbcrmfixup_version, self.constants.airportbcrmfixup_path)
elif self.model in ModelArray.WifiBCM94331:
wifi_fake_id(self)
elif self.model in ModelArray.WifiBCM94322:
self.enable_kext("IO80211Mojave.kext", self.constants.io80211mojave_version, self.constants.io80211mojave_path)
@@ -209,7 +254,7 @@ class BuildOpenCore:
# CPUFriend
pp_map_path = Path(self.constants.platform_plugin_plist_path) / Path(f"{self.model}/Info.plist")
if self.model not in ModelArray.NoAPFSsupport:
if self.model != "iMac7,1" and self.constants.allow_oc_everywhere is False:
Path(self.constants.pp_kext_folder).mkdir()
Path(self.constants.pp_contents_folder).mkdir()
shutil.copy(pp_map_path, self.constants.pp_contents_folder)
@@ -226,9 +271,17 @@ class BuildOpenCore:
self.get_item_by_kv(self.config["ACPI"]["Add"], "Path", "SSDT-CPBG.aml")["Enabled"] = True
shutil.copy(self.constants.pci_ssdt_path, self.constants.acpi_path)
if self.model in ModelArray.windows_audio:
# Based on: https://egpu.io/forums/pc-setup/fix-dsdt-override-to-correct-error-12/
print("- Enabling Windows 10 UEFI Audio support")
self.get_item_by_kv(self.config["ACPI"]["Add"], "Path", "SSDT-PCI.aml")["Enabled"] = True
self.get_item_by_kv(self.config["ACPI"]["Patch"], "Comment", "BUF0 to BUF1")["Enabled"] = True
shutil.copy(self.constants.windows_ssdt_path, self.constants.acpi_path)
# USB Map
usb_map_path = Path(self.constants.plist_folder_path) / Path("AppleUSBMaps/Info.plist")
if usb_map_path.exists():
# iMac7,1 kernel panics with USB map installed, remove for time being until properly debugged
if usb_map_path.exists() and self.constants.allow_oc_everywhere is False and self.model != "iMac7,1":
print(f"- Adding USB-Map.kext")
Path(self.constants.map_kext_folder).mkdir()
Path(self.constants.map_contents_folder).mkdir()
@@ -259,7 +312,18 @@ class BuildOpenCore:
# AGPM Patch
if self.model in ModelArray.DualGPUPatch:
print("- Adding dual GPU patch")
self.config["DeviceProperties"]["Add"]["PciRoot(0x0)/Pci(0x1,0x0)/Pci(0x0,0x0)"] = {"agdpmod": "pikera"}
if not self.constants.custom_model:
gfx0_path: str = subprocess.run([self.constants.gfxutil_path] + f"-f GFX0".split(), stdout=subprocess.PIPE, stderr=subprocess.STDOUT).stdout.decode()
if gfx0_path == "":
gfx0_path = "PciRoot(0x0)/Pci(0x1,0x0)/Pci(0x0,0x0)"
else:
gfx0_path = "PciRoot(0x0)/Pci(0x1,0x0)/Pci(0x0,0x0)"
if self.model in ModelArray.IntelNvidiaDRM and self.constants.drm_support is True:
print("- Prioritizing DRM support over Intel QuickSync")
self.config["DeviceProperties"]["Add"][gfx0_path] = {"agdpmod": "vit9696", "shikigva": 256}
self.config["DeviceProperties"]["Add"]["PciRoot(0x0)/Pci(0x2,0x0)"] = {"disable-gpu-min": "20.0.0"}
else:
self.config["DeviceProperties"]["Add"][gfx0_path] = {"agdpmod": "vit9696"}
# HiDPI OpenCanopy and FileVault
if self.model in ModelArray.HiDPIpicker:
@@ -276,52 +340,129 @@ class BuildOpenCore:
else:
self.config["DeviceProperties"]["Add"][hdef_path] = {"apple-layout-id": 90, "use-apple-layout-id": 1, "use-layout-id": 1, }
def nvidia_patch(self):
def backlight_path_detection(self):
if not self.constants.custom_model:
gfx0_path: str = subprocess.run([self.constants.gfxutil_path] + f"-f GFX0".split(), stdout=subprocess.PIPE, stderr=subprocess.STDOUT).stdout.decode()
try:
self.gfx0_path = [line.strip().split("= ", 1)[1] for line in gfx0_path.split("\n") if "GFX0" in line.strip()][0]
print(f"- Found GFX0 device at {self.gfx0_path}")
except IndexError:
print("- Failed to find GFX0 Device path, falling back on known logic")
if self.model in ["iMac11,1", "iMac11,3"]:
self.gfx0_path = "PciRoot(0x0)/Pci(0x3,0x0)/Pci(0x0,0x0)"
else:
self.gfx0_path = "PciRoot(0x0)/Pci(0x1,0x0)/Pci(0x0,0x0)"
else:
if self.model in ["iMac11,1", "iMac11,3"]:
self.gfx0_path = "PciRoot(0x0)/Pci(0x3,0x0)/Pci(0x0,0x0)"
else:
self.gfx0_path = "PciRoot(0x0)/Pci(0x1,0x0)/Pci(0x0,0x0)"
print(f"- Using known GFX0 path: {self.gfx0_path}")
def nvidia_patch(self, backlight_path):
self.constants.custom_mxm_gpu = True
print("- Adding Nvidia Brightness Control patches")
if self.model == "iMac11,1":
backlight_path = "PciRoot(0x0)/Pci(0x3,0x0)/Pci(0x0,0x0)"
self.config["DeviceProperties"]["Add"][backlight_path] = {"@0,backlight-control": binascii.unhexlify("01000000"), "@0,built-in": binascii.unhexlify("01000000")}
if self.model in ["iMac11,1", "iMac11,2", "iMac11,3"]:
print("- Adding Nvidia Brightness Control and DRM patches")
self.config["DeviceProperties"]["Add"][backlight_path] = {"@0,backlight-control": binascii.unhexlify("01000000"), "@0,built-in": binascii.unhexlify("01000000"), "shikigva": 256, "agdpmod": "vit9696"}
if self.constants.custom_model and self.model == "iMac11,2":
# iMac11,2 can have either PciRoot(0x0)/Pci(0x3,0x0)/Pci(0x0,0x0) or PciRoot(0x0)/Pci(0x1,0x0)/Pci(0x0,0x0)
# Set both properties when we cannot run hardware detection
self.config["DeviceProperties"]["Add"]["PciRoot(0x0)/Pci(0x3,0x0)/Pci(0x0,0x0)"] = {"@0,backlight-control": binascii.unhexlify("01000000"), "@0,built-in": binascii.unhexlify("01000000"), "shikigva": 256, "agdpmod": "vit9696"}
shutil.copy(self.constants.backlight_path, self.constants.kexts_path)
self.get_kext_by_bundle_path("AppleBacklightFixup.kext")["Enabled"] = True
elif self.model in ["iMac11,2", "iMac11,3", "iMac12,1", "iMac12,2"]:
backlight_path = "PciRoot(0x0)/Pci(0x1,0x0)/Pci(0x0,0x0)"
self.config["DeviceProperties"]["Add"][backlight_path] = {"@0,backlight-control": binascii.unhexlify("01000000"), "@0,built-in": binascii.unhexlify("01000000")}
elif self.model in ["iMac12,1", "iMac12,2"]:
print("- Adding Nvidia Brightness Control and DRM patches")
self.config["DeviceProperties"]["Add"][backlight_path] = {"@0,backlight-control": binascii.unhexlify("01000000"), "@0,built-in": binascii.unhexlify("01000000"), "shikigva": 256}
print("- Disabling unsupported iGPU")
self.config["DeviceProperties"]["Add"]["PciRoot(0x0)/Pci(0x2,0x0)"] = {"name": binascii.unhexlify("23646973706C6179"), "IOName": "#display", "class-code": binascii.unhexlify("FFFFFFFF")}
shutil.copy(self.constants.backlight_path, self.constants.kexts_path)
self.get_kext_by_bundle_path("AppleBacklightFixup.kext")["Enabled"] = True
else:
print("- Failed to determine supported model")
self.config["UEFI"]["Quirks"]["ForgeUefiSupport"] = True
self.config["UEFI"]["Quirks"]["ReloadOptionRoms"] = True
def amd_patch(self):
def amd_patch(self, backlight_path):
self.constants.custom_mxm_gpu = True
print("- Adding AMD DRM patches")
if self.model == "iMac11,1":
self.config["DeviceProperties"]["Add"]["PciRoot(0x0)/Pci(0x3,0x0)/Pci(0x0,0x0)"] = {"shikigva": 80, "unfairgva": 1}
elif self.model in ["iMac11,2", "iMac11,3", "iMac12,1", "iMac12,2"]:
self.config["DeviceProperties"]["Add"]["PciRoot(0x0)/Pci(0x1,0x0)/Pci(0x0,0x0)"] = {"shikigva": 80, "unfairgva": 1}
self.config["DeviceProperties"]["Add"][backlight_path] = {"shikigva": 80, "unfairgva": 1}
if self.constants.custom_model and self.model == "iMac11,2":
# iMac11,2 can have either PciRoot(0x0)/Pci(0x3,0x0)/Pci(0x0,0x0) or PciRoot(0x0)/Pci(0x1,0x0)/Pci(0x0,0x0)
# Set both properties when we cannot run hardware detection
self.config["DeviceProperties"]["Add"]["PciRoot(0x0)/Pci(0x3,0x0)/Pci(0x0,0x0)"] = {"shikigva": 80, "unfairgva": 1}
if self.model in ["iMac12,1", "iMac12,2"]:
print("- Disabling unsupported iGPU")
self.config["DeviceProperties"]["Add"]["PciRoot(0x0)/Pci(0x2,0x0)"] = {"name": binascii.unhexlify("23646973706C6179"), "IOName": "#display", "class-code": binascii.unhexlify("FFFFFFFF")}
elif self.model == "iMac10,1":
self.enable_kext("AAAMouSSE.kext", self.constants.mousse_version, self.constants.mousse_path)
# Check GPU Vendor
if self.constants.metal_build is True:
backlight_path_detection(self)
print("- Adding Metal GPU patches on request")
if self.constants.imac_vendor == "AMD":
amd_patch(self)
amd_patch(self, self.gfx0_path)
elif self.constants.imac_vendor == "Nvidia":
nvidia_patch(self)
nvidia_patch(self, self.gfx0_path)
else:
print("- Failed to find vendor")
elif self.constants.custom_model == "None":
self.check_pciid(True)
if self.constants.dgpu_devices and self.constants.dgpu_vendor == self.constants.pci_amd_ati and self.constants.dgpu_device in ModelArray.AMDMXMGPUs:
amd_patch(self)
elif self.constants.dgpu_devices and self.constants.dgpu_vendor == self.constants.pci_nvidia and self.constants.dgpu_device in ModelArray.NVIDIAMXMGPUs:
nvidia_patch(self)
elif self.model in ModelArray.MacPro71:
print("- Adding Mac Pro, Xserve DRM patches")
self.config["NVRAM"]["Add"]["7C436110-AB2A-4BBB-A880-FE41995C9F82"]["boot-args"] += " shikigva=128 unfairgva=1 -wegtree"
elif not self.constants.custom_model and self.model in ModelArray.LegacyGPU:
dgpu_vendor,dgpu_device,dgpu_acpi = DeviceProbe.pci_probe().gpu_probe("GFX0")
if dgpu_vendor:
print(f"- Detected dGPU: {dgpu_vendor}:{dgpu_device}")
if dgpu_vendor == self.constants.pci_amd_ati and (dgpu_device in PCIIDArray.amd_ids().polaris_ids or dgpu_device in PCIIDArray.amd_ids().vega_ids or dgpu_device in PCIIDArray.amd_ids().navi_ids or dgpu_device in PCIIDArray.amd_ids().legacy_gcn_ids):
backlight_path_detection(self)
amd_patch(self, self.gfx0_path)
elif dgpu_vendor == self.constants.pci_nvidia and dgpu_device in PCIIDArray.nvidia_ids().kepler_ids:
backlight_path_detection(self)
nvidia_patch(self, self.gfx0_path)
if self.model in ModelArray.MacPro71:
if not self.constants.custom_model:
mp_dgpu_devices = plistlib.loads(subprocess.run("ioreg -c IOPCIDevice -r -d2 -a".split(), stdout=subprocess.PIPE).stdout.decode().strip().encode())
mp_dgpu_devices = [i for i in mp_dgpu_devices if i["class-code"] == binascii.unhexlify("00000300") or i["class-code"] == binascii.unhexlify("00800300")]
mp_dgpu_devices_gfx: str = subprocess.run([self.constants.gfxutil_path] + f"-v".split(), stdout=subprocess.PIPE, stderr=subprocess.STDOUT).stdout.decode()
try:
x = 1
for i in mp_dgpu_devices:
mp_dgpu_vendor = self.hexswap(binascii.hexlify(i["vendor-id"]).decode()[:4])
mp_dgpu_device = self.hexswap(binascii.hexlify(i["device-id"]).decode()[:4])
print(f'- Found dGPU ({x}): {mp_dgpu_vendor}:{mp_dgpu_device}')
self.config["#Revision"][f"Hardware-MacPro-dGPU-{x}"] = f'{mp_dgpu_vendor}:{mp_dgpu_device}'
try:
mp_dgpu_path = [line.strip().split("= ", 1)[1] for line in mp_dgpu_devices_gfx.split("\n") if f'{mp_dgpu_vendor}:{mp_dgpu_device}'.lower() in line.strip()][0]
print(f"- Found dGPU ({x}) at {mp_dgpu_path}")
if mp_dgpu_vendor == self.constants.pci_amd_ati:
print("- Adding Mac Pro, Xserve DRM patches")
self.config["DeviceProperties"]["Add"][mp_dgpu_path] = {"shikigva": 128, "unfairgva": 1, "wegtree": 1}
elif mp_dgpu_vendor == self.constants.pci_nvidia:
print("- Enabling Nvidia Output Patch")
self.config["DeviceProperties"]["Add"][mp_dgpu_path] = {"wegtree": 1}
self.config["UEFI"]["Quirks"]["ForgeUefiSupport"] = True
self.config["UEFI"]["Quirks"]["ReloadOptionRoms"] = True
except IndexError:
print(f"- Failed to find Device path for NVMe {x}")
if mp_dgpu_vendor == self.constants.pci_amd_ati:
print("- Adding Mac Pro, Xserve DRM patches")
if "shikigva=128 unfairgva=1 -wegtree" not in self.config["NVRAM"]["Add"]["7C436110-AB2A-4BBB-A880-FE41995C9F82"]["boot-args"]:
print("- Falling back to boot-args")
self.config["NVRAM"]["Add"]["7C436110-AB2A-4BBB-A880-FE41995C9F82"]["boot-args"] += " shikigva=128 unfairgva=1 -wegtree"
elif mp_dgpu_vendor == self.constants.pci_nvidia:
print("- Enabling Nvidia Output Patch")
if "-wegtree" not in self.config["NVRAM"]["Add"]["7C436110-AB2A-4BBB-A880-FE41995C9F82"]["boot-args"]:
print("- Falling back to boot-args")
self.config["NVRAM"]["Add"]["7C436110-AB2A-4BBB-A880-FE41995C9F82"]["boot-args"] += " -wegtree"
self.config["UEFI"]["Quirks"]["ForgeUefiSupport"] = True
self.config["UEFI"]["Quirks"]["ReloadOptionRoms"] = True
x = x + 1
except ValueError:
print("- No socketed dGPU found")
except IndexError:
print("- No socketed dGPU found")
else:
print("- Adding Mac Pro, Xserve DRM patches")
self.config["NVRAM"]["Add"]["7C436110-AB2A-4BBB-A880-FE41995C9F82"]["boot-args"] += " shikigva=128 unfairgva=1 -wegtree"
# Add OpenCanopy
print("- Adding OpenCanopy GUI")
@@ -339,7 +480,7 @@ class BuildOpenCore:
print("- Adding UGA to GOP Patch")
self.config["UEFI"]["Output"]["GopPassThrough"] = True
# ThridPartDrives Check
# ThirdPartDrives Check
if self.model not in ModelArray.NoSATAPatch:
print("- Adding SATA Hibernation Patch")
self.config["Kernel"]["Quirks"]["ThirdPartyDrives"] = True
@@ -375,6 +516,20 @@ class BuildOpenCore:
if self.constants.secure_status is False:
print("- Disabling SecureBootModel")
self.config["Misc"]["Security"]["SecureBootModel"] = "Disabled"
if self.constants.serial_settings in ["Moderate", "Advanced"]:
print("- Enabling USB Rename Patches")
self.get_item_by_kv(self.config["ACPI"]["Patch"], "Comment", "XHC1 to SHC1")["Enabled"] = True
self.get_item_by_kv(self.config["ACPI"]["Patch"], "Comment", "EHC1 to EH01")["Enabled"] = True
self.get_item_by_kv(self.config["ACPI"]["Patch"], "Comment", "EHC2 to EH02")["Enabled"] = True
if self.constants.custom_cpu_model == 0 or self.constants.custom_cpu_model == 1:
self.config["NVRAM"]["Add"]["4D1FDA02-38C7-4A6A-9CC6-4BCCA8B30102"]["revcpu"] = self.constants.custom_cpu_model
if self.constants.custom_cpu_model_value != "":
print(f"- Adding custom CPU Name: {self.constants.custom_cpu_model_value}")
self.config["NVRAM"]["Add"]["4D1FDA02-38C7-4A6A-9CC6-4BCCA8B30102"]["revcpuname"] = self.constants.custom_cpu_model_value
else:
print("- Adding CPU Name Patch")
if self.get_kext_by_bundle_path("RestrictEvents.kext")["Enabled"] is False:
self.enable_kext("RestrictEvents.kext", self.constants.restrictevents_version, self.constants.restrictevents_path)
def set_smbios(self):
spoofed_model = self.model
@@ -405,15 +560,7 @@ class BuildOpenCore:
spoofed_board = "Mac-7BA5B2D9E42DDD94"
elif self.model in ModelArray.iMac151:
# Check for upgraded GPUs on iMacs
if self.constants.metal_build is True:
print("- Spoofing to iMacPro1,1")
spoofed_model = "iMacPro1,1"
spoofed_board = "Mac-7BA5B2D9E42DDD94"
elif (self.constants.current_gpuv == "AMD (0x1002)") & (self.constants.current_gpud in ModelArray.AMDMXMGPUs) & (self.constants.custom_model == "None"):
print("- Spoofing to iMacPro1,1")
spoofed_model = "iMacPro1,1"
spoofed_board = "Mac-7BA5B2D9E42DDD94"
elif (self.constants.current_gpuv == "NVIDIA (0x10de)") & (self.constants.current_gpud in ModelArray.NVIDIAMXMGPUs) & (self.constants.custom_model == "None"):
if self.constants.drm_support is True:
print("- Spoofing to iMacPro1,1")
spoofed_model = "iMacPro1,1"
spoofed_board = "Mac-7BA5B2D9E42DDD94"
@@ -429,29 +576,46 @@ class BuildOpenCore:
print("- Spoofing to MacPro7,1")
spoofed_model = "MacPro7,1"
spoofed_board = "Mac-27AD2F918AE68F61"
else:
spoofed_model = self.model
spoofed_board = ""
self.spoofed_model = spoofed_model
self.spoofed_board = spoofed_board
self.config["#Revision"]["Spoofed-Model"] = self.spoofed_model
if self.constants.allow_oc_everywhere is False:
self.config["#Revision"]["Spoofed-Model"] = f"{self.spoofed_model} - {self.constants.serial_settings}"
# Setup menu
def minimal_serial_patch(self):
if self.constants.custom_cpu_model == 0 or self.constants.custom_cpu_model == 1:
self.config["PlatformInfo"]["PlatformNVRAM"]["ProcessorType"] = 1537
self.config["NVRAM"]["Add"]["7C436110-AB2A-4BBB-A880-FE41995C9F82"]["run-efi-updater"] = "No"
self.config["PlatformInfo"]["PlatformNVRAM"]["BID"] = self.spoofed_board
self.config["PlatformInfo"]["SMBIOS"]["BoardProduct"] = self.spoofed_board
self.config["PlatformInfo"]["SMBIOS"]["BIOSVersion"] = "9999.999.999.999.999"
self.config["PlatformInfo"]["UpdateNVRAM"] = True
self.config["PlatformInfo"]["UpdateSMBIOS"] = True
def moderate_serial_patch(self):
if self.constants.custom_cpu_model == 0 or self.constants.custom_cpu_model == 1:
self.config["PlatformInfo"]["Generic"]["ProcessorType"] = 1537
self.config["NVRAM"]["Add"]["7C436110-AB2A-4BBB-A880-FE41995C9F82"]["run-efi-updater"] = "No"
self.config["PlatformInfo"]["Automatic"] = True
self.config["PlatformInfo"]["UpdateDataHub"] = True
self.config["PlatformInfo"]["UpdateNVRAM"] = True
self.config["PlatformInfo"]["UpdateSMBIOS"] = True
self.config["UEFI"]["ProtocolOverrides"]["DataHub"] = True
self.config["PlatformInfo"]["Generic"]["SystemProductName"] = self.spoofed_model
def adanced_serial_patch(self):
def advanced_serial_patch(self):
if self.constants.custom_cpu_model == 0 or self.constants.custom_cpu_model == 1:
self.config["PlatformInfo"]["Generic"]["ProcessorType"] = 1537
macserial_output = subprocess.run([self.constants.macserial_path] + f"-g -m {self.spoofed_model} -n 1".split(), stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
macserial_output = macserial_output.stdout.decode().strip().split(" | ")
self.config["NVRAM"]["Add"]["7C436110-AB2A-4BBB-A880-FE41995C9F82"]["run-efi-updater"] = "No"
self.config["PlatformInfo"]["Automatic"] = True
self.config["PlatformInfo"]["UpdateDataHub"] = True
self.config["PlatformInfo"]["UpdateNVRAM"] = True
self.config["PlatformInfo"]["UpdateSMBIOS"] = True
self.config["UEFI"]["ProtocolOverrides"]["DataHub"] = True
self.config["PlatformInfo"]["Generic"]["ROM"] = binascii.unhexlify("0016CB445566")
self.config["PlatformInfo"]["Generic"]["SystemProductName"] = self.spoofed_model
@@ -464,25 +628,53 @@ class BuildOpenCore:
moderate_serial_patch(self)
elif self.constants.serial_settings == "Advanced":
print("- Using Advanced SMBIOS patching")
adanced_serial_patch(self)
else:
advanced_serial_patch(self)
elif self.constants.serial_settings == "Minimal":
print("- Using Minimal SMBIOS patching")
self.spoofed_model = self.model
minimal_serial_patch(self)
# USB Map Patching
new_map_ls = Path(self.constants.map_contents_folder) / Path("Info.plist")
map_config = plistlib.load(Path(new_map_ls).open("rb"))
if self.constants.download_ram is False:
self.config["PlatformInfo"].pop("Memory")
else:
print("- Inserting 1.5TB of RAM into your Mac")
self.config["PlatformInfo"]["CustomMemory"] = True
for model_controller in ModelArray.ControllerTypes:
model_patch = f"{self.model}{model_controller}"
try:
# Avoid erroring out when specific identity not found
map_config["IOKitPersonalities_x86_64"][model_patch]["model"] = self.spoofed_model
except KeyError:
continue
# USB Map and CPUFriend Patching
if self.constants.allow_oc_everywhere is False and self.model != "iMac7,1":
new_map_ls = Path(self.constants.map_contents_folder) / Path("Info.plist")
map_config = plistlib.load(Path(new_map_ls).open("rb"))
for model_controller in ModelArray.ControllerTypes:
model_patch = f"{self.model}{model_controller}"
try:
# Avoid erroring out when specific identity not found
map_config["IOKitPersonalities_x86_64"][model_patch]["model"] = self.spoofed_model
# Avoid ACPI renaming when not required
if self.constants.serial_settings == "Minimal":
if map_config["IOKitPersonalities_x86_64"][model_patch]["IONameMatch"] == "EH01":
map_config["IOKitPersonalities_x86_64"][model_patch]["IONameMatch"] = "EHC1"
if map_config["IOKitPersonalities_x86_64"][model_patch]["IONameMatch"] == "EH02":
map_config["IOKitPersonalities_x86_64"][model_patch]["IONameMatch"] = "EHC2"
if map_config["IOKitPersonalities_x86_64"][model_patch]["IONameMatch"] == "SHC1":
map_config["IOKitPersonalities_x86_64"][model_patch]["IONameMatch"] = "XHC1"
except KeyError:
continue
plistlib.dump(map_config, Path(new_map_ls).open("wb"), sort_keys=True)
if self.constants.allow_oc_everywhere is False and self.model != "iMac7,1" and self.constants.disallow_cpufriend is False:
# Adjust CPU Friend Data to correct SMBIOS
new_cpu_ls = Path(self.constants.pp_contents_folder) / Path("Info.plist")
cpu_config = plistlib.load(Path(new_cpu_ls).open("rb"))
string_stuff = str(cpu_config["IOKitPersonalities"]["CPUFriendDataProvider"]["cf-frequency-data"])
string_stuff = string_stuff.replace(self.model, self.spoofed_model)
string_stuff = ast.literal_eval(string_stuff)
cpu_config["IOKitPersonalities"]["CPUFriendDataProvider"]["cf-frequency-data"] = string_stuff
#cpu_data_config = plistlib.loads(cpu_config["IOKitPersonalities"]["CPUFriendDataProvider"]["cf-frequency-data"])
#print(f'Patching CPUFriend Data to: {cpu_data_config["IOPlatformThermalProfile"]["ConfigArray"][0]["model"]}')
plistlib.dump(cpu_config, Path(new_cpu_ls).open("wb"), sort_keys=True)
plistlib.dump(map_config, Path(new_map_ls).open("wb"), sort_keys=True)
if self.model == "MacBookPro9,1":
new_agdp_ls = Path(self.constants.agdp_contents_folder) / Path("Info.plist")
@@ -537,10 +729,20 @@ class BuildOpenCore:
def cleanup(self):
print("- Cleaning up files")
# Remove unused kexts
for kext in list(self.config["Kernel"]["Add"]):
if not kext["Enabled"]:
self.config["Kernel"]["Add"].remove(kext)
# Remove unused entries
for entry in list(self.config["ACPI"]["Add"]):
if not entry["Enabled"]:
self.config["ACPI"]["Add"].remove(entry)
for entry in list(self.config["ACPI"]["Patch"]):
if not entry["Enabled"]:
self.config["ACPI"]["Patch"].remove(entry)
for entry in list(self.config["Kernel"]["Add"]):
if not entry["Enabled"]:
self.config["Kernel"]["Add"].remove(entry)
for entry in list(self.config["Kernel"]["Patch"]):
if not entry["Enabled"]:
self.config["Kernel"]["Patch"].remove(entry)
plistlib.dump(self.config, Path(self.constants.plist_path).open("wb"), sort_keys=True)
for kext in self.constants.kexts_path.rglob("*.zip"):
with zipfile.ZipFile(kext) as zip_file:
@@ -568,7 +770,7 @@ class BuildOpenCore:
self.cleanup()
self.sign_files()
print("")
print("Your OpenCore EFI has been built at:")
print(f"Your OpenCore EFI for {self.model} has been built at:")
print(f" {self.constants.opencore_release_folder}")
print("")
if self.constants.gui_mode is False:
@@ -702,7 +904,7 @@ Please build OpenCore first!"""
if (mount_path / Path("System")).exists():
print("- Removing preexisting System folder")
shutil.rmtree(mount_path / Path("System"), onerror=rmtree_handler)
print("- Coping OpenCore onto EFI partition")
print("- Copying OpenCore onto EFI partition")
shutil.copytree(self.constants.opencore_release_folder / Path("EFI/OC"), mount_path / Path("EFI/OC"))
shutil.copytree(self.constants.opencore_release_folder / Path("System"), mount_path / Path("System"))
if self.constants.boot_efi is True:

View File

@@ -158,7 +158,7 @@ pressing the "Esc" key
contents can be tampered with. However for more advanced users, you may
want to be able to freely edit the config.plist and files.
Note: For secuirty reasons, OpenShell will be disabled when Vault is set.
Note: For security reasons, OpenShell will be disabled when Vault is set.
""")
change_menu = input("Enable Vault(y/n): ")
@@ -206,7 +206,7 @@ Valid options:
def change_imac_nvidia(self):
Utilities.cls()
Utilities.header(["Force iMac Nvidia Patches"])
Utilities.header(["Assume Metal GPU Always"])
print("""Specifically for iMac10,x-12,x with Metal Nvidia GPU upgrades
By default the patcher will try to detect what hardware is
running, however this will enforce iMac Nvidia Build Patches.
@@ -219,31 +219,6 @@ running, however this will enforce iMac Nvidia Build Patches.
else:
print("Invalid option")
def custom_repo(self):
Utilities.cls()
Utilities.header(["Set custom patch repo"])
print(f"""For users participating in OpenCore Patcher betas, this is
where you can add custom repos such as Google Drive links.
Valid options:
1. Set custom location
2. Reset repo location
3. Exit
Current repo:
{self.constants.url_apple_binaries}
""")
change_menu = input("Set custom location?: ")
if change_menu == "1":
self.constants.url_backup = self.constants.url_apple_binaries
self.constants.url_apple_binaries = input("Enter new URL: ")
elif change_menu == "2":
if self.constants.url_backup != "":
self.constants.url_apple_binaries = self.constants.url_backup
else:
print("Invalid option")
def bootstrap_setting(self):
Utilities.cls()
Utilities.header(["Set Bootstrap method"])
@@ -270,3 +245,141 @@ see the EFI Boot entry in the boot picker.
self.constants.boot_efi = True
else:
print("Invalid option")
def drm_setting(self):
Utilities.cls()
Utilities.header(["Set DRM preferences"])
print("""Sets OpenCore's DRM preferences for iMac13,x and iMac14,x.
In Big Sur, some DRM based content may be broken by
default in AppleTV, Photobooth, etc.
To resolve, you can opt to disable Intel QuickSync support in
favor of Nvidia's Software rendering. This can aid in DRM however
greatly hampers Video rendering performance in Final Cut Pro and
other programs relying on such features.
Recommend only disabling if absolutely required.
""")
change_menu = input("Enable Nvidia's Software DRM rendering(y/n): ")
if change_menu in {"y", "Y", "yes", "Yes"}:
self.constants.drm_support = True
elif change_menu in {"n", "N", "no", "No"}:
self.constants.drm_support = False
else:
print("Invalid option")
def force_accel_setting(self):
Utilities.cls()
Utilities.header(["Assume Legacy GPU"])
print("""Allows any model to force install Legacy Acceleration
patches. Only required for Mac Pro and Xserve users.
DO NOT RUN IF METAL GPU IS INSTALLED
""")
change_menu = input("Enable Beta Acceleration Patches(y/n): ")
if change_menu in {"y", "Y", "yes", "Yes"}:
self.constants.assume_legacy = True
elif change_menu in {"n", "N", "no", "No"}:
self.constants.assume_legacy = False
else:
print("Invalid option")
def allow_native_models(self):
Utilities.cls()
Utilities.header(["Allow OpenCore on native Models"])
print("""Allows natively supported Macs to use OpenCore. Recommended
for users with 3rd Party NVMe SSDs to achieve improved overall
power usage.
""")
change_menu = input("Allow OpenCore on all Models(y/n): ")
if change_menu in {"y", "Y", "yes", "Yes"}:
self.constants.allow_oc_everywhere = True
self.constants.serial_settings = "None"
elif change_menu in {"n", "N", "no", "No"}:
self.constants.allow_oc_everywhere = False
self.constants.serial_settings = "Minimal"
else:
print("Invalid option")
def custom_cpu(self):
Utilities.cls()
Utilities.header(["Set custom CPU Model Name"])
print("""Change reported CPU Model name in About This Mac
Custom names will report as follows:
1: Original Name: 2.5 Ghz Dual-Core Intel Core i5
2. CPU name: Intel(R) Core(TM) i5-3210M CPU @ 2.50Ghz
3. Custom Name: 2.5Ghz Cotton Candy (example)
""")
if self.constants.custom_cpu_model_value == "":
if self.constants.custom_cpu_model == 0:
print("Currently using original name")
else:
print("Currently using CPU name")
else:
print(f"Custom CPU name currently: {self.constants.custom_cpu_model_value}")
change_menu = input("Set custom CPU Name(1,2,3): ")
if change_menu == "1":
self.constants.custom_cpu_model = 2
self.constants.custom_cpu_model_value = ""
elif change_menu == "2":
self.constants.custom_cpu_model = 0
self.constants.custom_cpu_model_value = ""
elif change_menu == "3":
self.constants.custom_cpu_model = 1
self.constants.custom_cpu_model_value = input("Enter new CPU Name: ")
else:
print("Invalid option")
def custom_color_thing(self):
Utilities.cls()
Utilities.header(["Set custom CPU Model Name"])
print("""Change reported CPU Model name in About This Mac
Custom names will report as follows:
1: Custom Color
2. Reset
""")
change_menu = input("Set custom CPU Name(1,2,3): ")
if change_menu == "1":
print("")
#temp_tk_root = tk.Tk()
#temp_tk_root.wm_withdraw()
#self.constants.custom_color = colorchooser.askcolor(title="Choose color")
#temp_tk_root.destroy()
elif change_menu == "2":
self.constants.custom_color = ""
else:
print("Invalid option")
def download_more_ram_dot_com(self):
Utilities.cls()
Utilities.header(["Download more RAM"])
print("""Downloads more RAM to your Mac!
Currently only offers 1.5TB bundles
""")
change_menu = input("Download more RAM?(y/n): ")
if change_menu == "y":
self.constants.download_ram = True
elif change_menu == "n":
self.constants.download_ram = False
else:
print("Invalid option")
def disable_cpufriend(self):
Utilities.cls()
Utilities.header(["Disable CPU Friend?"])
print("""Only recommended for advanced users
Disabling CPUFriend forces macOS into using a different
Mac's power profile for CPUs and GPUs, which can harm the
hardware
""")
change_menu = input("Disable CPU Friend?(y/n): ")
if change_menu == "y":
self.constants.disallow_cpufriend = True
elif change_menu == "n":
self.constants.disallow_cpufriend = False
else:
print("Invalid option")

View File

@@ -9,10 +9,10 @@ from pathlib import Path
class Constants:
def __init__(self):
self.patcher_version = "0.0.23"
self.opencore_commit = "c528597 - 2021-04-05"
self.opencore_version = "0.6.8"
self.lilu_version = "1.5.2"
self.patcher_version = "0.1.3"
self.opencore_commit = "65cc81b - 05-03-2021"
self.opencore_version = "0.6.9"
self.lilu_version = "1.5.3"
self.whatevergreen_version = "1.4.9"
self.airportbcrmfixup_version = "2.1.2"
self.bcm570_version = "1.0.1"
@@ -25,8 +25,8 @@ class Constants:
self.io80211elcap_version = "1.0.0"
self.io80211high_sierra_version = "1.0.0"
self.io80211mojave_version = "1.0.0"
self.applealc_version = "1.6.0"
self.restrictevents_version = "1.0.0"
self.applealc_version = "1.6.1"
self.restrictevents_version = "1.0.1"
self.restrictevents_mbp_version = "1.0.1"
self.piixata_version = "1.0.0"
self.backlight_version = "1.0.1"
@@ -35,6 +35,10 @@ class Constants:
self.smcspoof_version = "1.0.0"
self.cputscsync = "1.0.3"
self.hibernationfixup = "1.3.9"
self.nvmefix_version = "1.0.7"
self.sidecarfixup_version = "1.0.0"
self.innie_version = "1.3.0"
self.payload_version = "0.0.6"
# Get resource path
self.current_path = Path(__file__).parent.parent.resolve()
@@ -44,10 +48,6 @@ class Constants:
self.custom_mxm_gpu: str = None
self.current_gpuv: str = None
self.current_gpud: str = None
self.igpu_vendor = ""
self.igpu_device = ""
self.dgpu_vendor = ""
self.dgpu_device = ""
# Patcher Settings
self.opencore_debug = False
@@ -68,6 +68,15 @@ class Constants:
self.secure_status = True
self.detected_os = 0
self.boot_efi = False
self.drm_support = False
self.legacy_acceleration_patch = True
self.assume_legacy = False
self.allow_oc_everywhere = False
self.custom_cpu_model = 2
self.custom_cpu_model_value = ""
self.custom_color = ""
self.download_ram = False
self.disallow_cpufriend = False
# OS Versions
self.tiger = 8
@@ -90,10 +99,24 @@ class Constants:
self.pci_intel = "8086"
self.pci_broadcom = "14E4"
self.pci_atheros = "168C"
self.pci_apple = "106B"
# Class Codes
# https://pci-ids.ucw.cz/read/PD
self.classcode_sata = "01060100"
self.classcode_nvme = "02080100"
self.classcode_nvme_generic = "02800100"
self.classcode_wifi = "00800200"
self.classcode_gpu = "00000300"
self.classcode_gpu_variant = "00800300"
# Nvidia GPU Architecture
self.arch_tesla = "NV50"
self.arch_fermi = "GF100"
self.arch_kepler = "GK100"
# External Files
self.url_backup = ""
self.url_apple_binaries = "https://github.com/dortania/Apple-Binaries-OCLP/archive/refs/heads/main.zip"
self.url_apple_binaries = "https://github.com/dortania/Apple-Binaries-OCLP/archive/refs/tags/"
# Payload Location
# OpenCore
@@ -105,6 +128,8 @@ class Constants:
# ACPI
@property
def pci_ssdt_path(self): return self.payload_path / Path("ACPI/SSDT-CPBG.aml")
@property
def windows_ssdt_path(self): return self.payload_path / Path("ACPI/SSDT-PCI.aml")
# Drivers
@property
@@ -162,6 +187,12 @@ class Constants:
@property
def hibernationfixup_path(self): return self.payload_kexts_path / Path(f"Acidanthera/HibernationFixup-v{self.hibernationfixup}.zip")
@property
def nvmefix_path(self): return self.payload_kexts_path / Path(f"Acidanthera/NVMeFix-v{self.nvmefix_version}.zip")
@property
def sidecarfixup_path(self): return self.payload_kexts_path / Path(f"Acidanthera/SidecarFixup-v{self.sidecarfixup_version}.zip")
@property
def innie_path(self): return self.payload_kexts_path / Path(f"Misc/Innie-v{self.innie_version}.zip")
@property
def plist_folder_path(self): return self.payload_kexts_path / Path(f"Plists")
@property
def platform_plugin_plist_path(self): return self.plist_folder_path / Path(f"PlatformPlugin")
@@ -229,9 +260,9 @@ class Constants:
@property
def gui_path(self): return self.payload_path / Path("Icon/Resources.zip")
# Apple Paylods Paths
# Apple Payloads Paths
@property
def payload_apple_root_path_unzip(self): return self.payload_path / Path("Apple-Binaries-OCLP-main")
def payload_apple_root_path_unzip(self): return self.payload_path / Path(f"Apple-Binaries-OCLP-{self.payload_version}")
@property
def payload_apple_root_path_zip(self): return self.payload_path / Path("Apple.zip")
@property
@@ -255,7 +286,7 @@ class Constants:
# Apple Extensions
@property
def applehda_path(self): return self.payload_apple_kexts_path / Path("Audio/AppleHDA.kext")
def audio_path(self): return self.payload_apple_kexts_path / Path("Audio")
# GPU Kexts and Bundles
@@ -264,11 +295,17 @@ class Constants:
@property
def legacy_nvidia_path(self): return self.legacy_graphics / Path("Nvidia-Tesla-Fermi")
@property
def legacy_nvidia_kepler_path(self): return self.legacy_graphics / Path("Nvidia-Kepler")
@property
def legacy_amd_path(self): return self.legacy_graphics / Path("AMD-ATI")
@property
def legacy_intel_gen1_path(self): return self.legacy_graphics / Path("Intel-Gen5-Ironlake")
@property
def legacy_intel_gen2_path(self): return self.legacy_graphics / Path("Intel-Gen6-SandyBridge")
@property
def legacy_intel_gen3_path(self): return self.legacy_graphics / Path("Intel-Gen7-IvyBridge")
@property
def legacy_general_path(self): return self.legacy_graphics / Path("General-Patches")
@property
def legacy_brightness(self): return self.payload_apple_kexts_path / Path("Brightness-Control")
@@ -283,7 +320,9 @@ class Constants:
# Apple LaunchDaemons
@property
def hiddhack_path(self): return self.payload_apple_lauchd_path_accel / Path("HiddHack.plist")
def hiddhack_path(self): return self.payload_apple_lauchd_path_accel / Path("IOHID-Fixup.plist")
@property
def legacy_hiddhack_path(self): return self.payload_apple_lauchd_path_accel / Path("HiddHack.plist")
# Apple PrivateFrameworks
@property

96
Resources/DeviceProbe.py Normal file
View File

@@ -0,0 +1,96 @@
# Probe devices, return device entries
# Copyright (C) 2021 Mykola Grymalyuk
from __future__ import print_function
import binascii
import plistlib
import shutil
import subprocess
import uuid
import os
import sys
import platform
from pathlib import Path
from Resources import Constants, ModelArray, Utilities
class pci_probe:
def __init__(self):
self.constants = Constants.Constants()
def hexswap(self, input_hex: str):
hex_pairs = [input_hex[i:i + 2] for i in range(0, len(input_hex), 2)]
hex_rev = hex_pairs[::-1]
hex_str = "".join(["".join(x) for x in hex_rev])
return hex_str.upper()
# Converts given device IDs to DeviceProperty pathing, requires ACPI pathing as DeviceProperties shouldn't be used otherwise
def deviceproperty_probe(self, vendor_id, device_id, acpi_path):
gfxutil_output: str = subprocess.run([self.constants.gfxutil_path] + f"-v".split(), stdout=subprocess.PIPE, stderr=subprocess.STDOUT).stdout.decode()
try:
if acpi_path == "":
acpi_path = "No ACPI Path Given"
raise IndexError
device_path = [line.strip().split("= ", 1)[1] for line in gfxutil_output.split("\n") if f'{vendor_id}:{device_id}'.lower() in line.strip() and acpi_path in line.strip()][0]
return device_path
except IndexError:
print(f"- No DevicePath found for {vendor_id}:{device_id} ({acpi_path})")
return ""
# Returns the device path of parent controller
def device_property_parent(self, device_path):
device_path_parent = "/".join(device_path.split("/")[:-1])
return device_path_parent
def acpi_strip(self, acpi_path_full):
# Strip IOACPIPlane:/_SB, remove 000's, convert ffff into 0 and finally make everything upper case
# IOReg | gfxutil
# IOACPIPlane:/_SB/PC00@0/DMI0@0 -> /PC00@0/DMI0@0
# IOACPIPlane:/_SB/PC03@0/BR3A@0/SL09@ffff -> /PC03@0/BR3A@0/SL09@0
# IOACPIPlane:/_SB/PC03@0/M2U0@150000 -> /PC03@0/M2U0@15
# IOACPIPlane:/_SB/PC01@0/CHA6@100000 -> /PC01@0/CHA6@10
# IOACPIPlane:/_SB/PC00@0/RP09@1d0000/PXSX@0 -> /PC00@0/RP09@1D/PXSX@0
# IOACPIPlane:/_SB/PCI0@0/P0P2@10000 -> /PCI0@0/P0P2@1
acpi_path = acpi_path_full.replace("IOACPIPlane:/_SB", "")
acpi_path = acpi_path.replace("0000", "")
acpi_path = acpi_path.replace("ffff", "0")
acpi_path = acpi_path.upper()
return acpi_path
# Note gpu_probe should only be used on IGPU and GFX0 entries
def gpu_probe(self, gpu_type):
try:
devices = plistlib.loads(subprocess.run(f"ioreg -r -n {gpu_type} -a".split(), stdout=subprocess.PIPE).stdout.decode().strip().encode())
vendor_id = self.hexswap(binascii.hexlify(devices[0]["vendor-id"]).decode()[:4])
device_id = self.hexswap(binascii.hexlify(devices[0]["device-id"]).decode()[:4])
try:
acpi_path = devices[0]["acpi-path"]
acpi_path = self.acpi_strip(acpi_path)
return vendor_id, device_id, acpi_path
except KeyError:
print(f"- No ACPI entry found for {gpu_type}")
return vendor_id, device_id, ""
except ValueError:
print(f"- No IOService entry found for {gpu_type}")
return "", "", ""
def wifi_probe(self):
try:
devices = plistlib.loads(subprocess.run("ioreg -r -n ARPT -a".split(), stdout=subprocess.PIPE).stdout.decode().strip().encode())
except ValueError:
devices = plistlib.loads(subprocess.run("ioreg -c IOPCIDevice -r -d2 -a".split(), stdout=subprocess.PIPE).stdout.decode().strip().encode())
try:
devices = [i for i in devices if i["class-code"] == binascii.unhexlify(self.constants.classcode_wifi)]
vendor_id = self.hexswap(binascii.hexlify(devices[0]["vendor-id"]).decode()[:4])
device_id = self.hexswap(binascii.hexlify(devices[0]["device-id"]).decode()[:4])
ioname = devices[0]["IOName"]
try:
acpi_path = devices[0]["acpi-path"]
acpi_path = self.acpi_strip(acpi_path)
return vendor_id, device_id, ioname, acpi_path
except KeyError:
print(f"- No ACPI entry found for {vendor_id}:{device_id}")
return vendor_id, device_id, ioname, ""
except ValueError:
print(f"- No IOService entry found for Wireless Card")
return "", "", "", ""

View File

@@ -67,7 +67,7 @@ SupportedSMBIOS11 = [
# Xserve
"Xserve2,1",
"Xserve3,1",
"Dortania1,1"
"Dortania1,1",
]
SupportedSMBIOS12 = [
@@ -268,8 +268,8 @@ LegacyAudio = [
"Macmini5,1",
"Macmini5,2",
"Macmini5,3",
"iMac7,1",
"iMac8,1",
#"iMac7,1",
#"iMac8,1",
"iMac9,1",
"iMac10,1",
"iMac11,1",
@@ -443,20 +443,37 @@ NVMePatch = [
]
SidecarPatch = [
"MacBook8,1",
"MacBookAir5,1",
"MacBookAir5,2",
"MacBookAir6,1",
"MacBookAir6,2",
"MacBookAir7,1",
"MacBookAir7,2",
"MacBookPro9,1",
"MacBookPro9,2",
"MacBookPro10,1",
"MacBookPro10,2",
"MacBookPro11,1",
"MacBookPro11,2",
"MacBookPro11,3",
"MacBookPro11,4",
"MacBookPro11,5",
"MacBookPro12,1",
"Macmini6,1",
"Macmini6,2",
"Macmini7,1",
"iMac13,1",
"iMac13,2",
"iMac13,3",
"iMac14,1",
"iMac14,2",
"iMac14,3",
"iMac15,1",
"iMac16,1",
"iMac16,2",
"MacPro5,1",
"MacPro6,1",
"Dortania1,1"
]
@@ -471,6 +488,7 @@ DualGPUPatch = [
"Macmini5,2",
"iMac12,1",
"iMac12,2",
"iMac13,1",
"iMac13,2",
"iMac14,2",
"iMac14,3",
@@ -481,6 +499,13 @@ DualGPUPatchRetina = [
"MacBookPro10,1",
]
IntelNvidiaDRM = [
"iMac13,1",
"iMac13,2",
"iMac14,2",
"iMac14,3",
]
HiDPIpicker = [
"MacBookPro10,1",
"MacBookPro10,2",
@@ -488,7 +513,12 @@ HiDPIpicker = [
]
IDEPatch = [
"MacBook4,1",
"MacBookPro4,1",
"iMac7,1",
"iMac8,1",
"MacPro3,1",
"Xserve2,1",
"Dortania1,1"
]
@@ -558,12 +588,12 @@ iMacPro11 = [
"iMac11,1",
"iMac11,2",
"iMac11,3",
"iMac12,1",
"iMac12,2",
]
# iMac = AMD and Nvidia GPU with iGPU
iMac151 = [
"iMac12,1",
"iMac12,2",
"iMac13,2",
"iMac14,2",
"iMac14,3"
@@ -667,6 +697,10 @@ ControllerTypes = [
"-XHC1",
"-OHC1",
"-OHC2",
"-UHC1",
"-UHC2",
"-UHC3",
"-UHC4",
"-InternalHub-EHC1",
"-InternalHub-EHC1-InternalHub",
"-InternalHub-EHC2",
@@ -684,75 +718,6 @@ upgradableMXMGPUs = [
"Dortania1,1"
]
# Reference: https://forums.macrumors.com/threads/2011-imac-graphics-card-upgrade.1596614/
NVIDIAMXMGPUs = [
"12B9", # Quadro K610M
"0FF6", # Quadro K1100M
"11FC", # Quadro K2100M
"0FFC", # Quadro K1000M
"0FFB", # Quadro K2000M
"11B6", # Quadro K3100M
"11B7", # Quadro K4100M
"11BC", # Quadro K5000M
"11B8", # Quadro K5100M
"11E1", # GTX 765M
"11E2", # GTX 765M
"11E0", # GTX 770M
"119E", # GTX 780M Mac Edition
"119E", # GTX 780M
"119F", # GTX 880M
"119A", # GTX 860M
"1392", # GTX 860M
"1199", # GTX 870M
"11A9", # GTX 870M
]
AMDMXMGPUs = [
"67EF", # AMD RX 460
"67E8", # AMD WX 4130/WX 4150
"67E0", # AMD WX 4170
"67C0", # AMD WX 7100
"67DF", # AMD RX 480
]
BCM4360Wifi = [
"43BA", # BCM43602
"43A3", # BCM4350
"43A0", # BCM4360
]
BCM94331Wifi = [
"4331", # BCM94331
"4353", # BCM943224
]
BCM94322Wifi = [
"432B", # BCM94322
]
BCM94328Wifi = [
"4311",
"4312",
"4313",
"4318",
"4319",
"431A",
"4320",
"4324",
"4325",
"4328",
"432C",
"432D",
]
AtherosWifi = [
"0030",
"002A",
"001C",
"0023",
"0024",
]
NightShiftExclude = [
"MacBookAir5,1",
"MacBookAir5,2",
@@ -864,6 +829,41 @@ NoExFat = [
"Dortania1,1"
]
SandyIGPU = [
"MacBookAir4,1",
"MacBookAir4,2",
"MacBookPro8,1",
"MacBookPro8,2",
"MacBookPro8,3",
"Macmini5,1",
"Macmini5,2",
"Macmini5,3",
]
windows_audio = [
"MacBookAir4,1",
"MacBookAir4,2",
"MacBookAir5,1",
"MacBookAir5,2",
"MacBookPro8,1",
"MacBookPro8,2",
"MacBookPro8,3",
"MacBookPro9,1",
"MacBookPro9,2",
"MacBookPro10,1",
"MacBookPro10,2",
"Macmini5,1",
"Macmini5,2",
"Macmini5,3",
"Macmini6,1",
"Macmini6,2",
"iMac12,1",
"iMac12,2",
"iMac13,1",
"iMac13,2",
"iMac13,3",
]
DeleteNvidiaAccel11 = [
"AMDRadeonX4000.kext",
"AMDRadeonX4000HWServices.kext",
@@ -899,11 +899,11 @@ DeleteAMDAccel11 = [
"AMDRadeonX6000.kext",
"AMDRadeonX6000Framebuffer.kext",
"AMDRadeonX6000HWServices.kext",
"AMD7000Controller.kext", # AMDSupport Dependancy
"AMD8000Controller.kext", # AMDSupport Dependancy
"AMD9000Controller.kext", # AMDSupport Dependancy
"AMD9500Controller.kext", # AMDSupport Dependancy
"AMD10000Controller.kext", # AMDSupport Dependancy
"AMD7000Controller.kext", # AMDSupport Dependency
"AMD8000Controller.kext", # AMDSupport Dependency
"AMD9000Controller.kext", # AMDSupport Dependency
"AMD9500Controller.kext", # AMDSupport Dependency
"AMD10000Controller.kext", # AMDSupport Dependency
"AppleIntelBDWGraphics.kext",
"AppleIntelBDWGraphicsFramebuffer.kext",
"AppleIntelCFLGraphicsFramebuffer.kext",
@@ -919,7 +919,6 @@ DeleteAMDAccel11 = [
"AppleIntelFramebufferCapri.kext",
"AppleParavirtGPU.kext",
"GeForce.kext",
"IOAcceleratorFamily2.kext",
"IOGPUFamily.kext",
]
@@ -933,13 +932,17 @@ AddNvidiaAccel11 = [
"IOSurface.kext",
]
AddNvidiaBrightness11 = [
"GeForceGA.bundle",
"GeForceTesla.kext",
"GeForceTeslaGLDriver.bundle",
"GeForceTeslaVADriver.bundle",
"NVDANV50HalTesla.kext",
"NVDAResmanTesla.kext",
AddNvidiaKeplerAccel11 = [
"GeForce.kext",
"GeForceAIRPlugin.bundle",
"GeForceGLDriver.bundle",
"GeForceMTLDriver.bundle",
"GeForceVADriver.bundle",
"NVDAGF100Hal.kext",
"NVDAGK100Hal.kext",
"NVDAResman.kext",
"NVDAStartup.kext",
"NVSMU.kext",
]
AddAMDAccel11 = [
@@ -955,55 +958,17 @@ AddAMDAccel11 = [
"AMDLegacySupport.kext",
"AMDRadeonVADriver.bundle",
"AMDRadeonVADriver2.bundle",
# "AMDRadeonX3000.kext", # __ZN22IOAccelDisplayMachine210gMetaClassE link issues
# "AMDRadeonX3000GLDriver.bundle",
"AMDRadeonX3000.kext",
"AMDRadeonX3000GLDriver.bundle",
"AMDShared.bundle",
"AMDSupport.kext",
"ATIRadeonX2000.kext",
"ATIRadeonX2000GA.plugin",
"ATIRadeonX2000GLDriver.bundle",
"ATIRadeonX2000VADriver.bundle",
"IOSurface.kext",
]
AddAMDTeraScale1Brightness11 = [
"AMD2400Controller.kext",
"AMD2600Controller.kext",
"AMD3800Controller.kext",
"AMD4600Controller.kext",
"AMD4800Controller.kext",
"AMDLegacyFramebuffer.kext",
"AMDLegacySupport.kext",
"ATIRadeonX2000.kext",
"ATIRadeonX2000GA.plugin",
"ATIRadeonX2000GLDriver.bundle",
"ATIRadeonX2000VADriver.bundle",
]
AddAMDTeraScale2Brightness11 = [
"AMD5000Controller.kext",
"AMD6000Controller.kext",
"AMDLegacyFramebuffer.kext",
"AMDLegacySupport.kext",
"AMDRadeonX3000.kext",
"AMDRadeonX3000GLDriver.bundle",
"IOAcceleratorFamily2.kext"
]
AddIntelGen1Accel = [
"AppleIntelFramebufferAzul.kext",
"AppleIntelFramebufferCapri.kext",
"AppleIntelHDGraphics.kext",
"AppleIntelHDGraphicsFB.kext",
"AppleIntelHDGraphicsGA.plugin",
"AppleIntelHDGraphicsGLDriver.bundle",
"AppleIntelHDGraphicsVADriver.bundle",
"IOSurface.kext",
]
AddIntelGen1Brightness = [
"AppleIntelFramebufferAzul.kext",
"AppleIntelFramebufferCapri.kext",
"AppleIntelHDGraphics.kext",
"AppleIntelHDGraphicsFB.kext",
"AppleIntelHDGraphicsGA.plugin",
@@ -1018,16 +983,25 @@ AddIntelGen2Accel = [
"AppleIntelHD3000GraphicsVADriver.bundle",
"AppleIntelSNBGraphicsFB.kext",
"AppleIntelSNBVA.bundle",
"IOSurface.kext",
]
AddIntelGen2Brightness = [
"AppleIntelHD3000Graphics.kext",
"AppleIntelHD3000GraphicsGA.plugin",
"AppleIntelHD3000GraphicsGLDriver.bundle",
"AppleIntelHD3000GraphicsVADriver.bundle",
"AppleIntelSNBGraphicsFB.kext",
"AppleIntelSNBVA.bundle",
AddIntelGen3Accel = [
"AppleIntelFramebufferCapri.kext",
"AppleIntelHD4000Graphics.kext",
"AppleIntelHD4000GraphicsGLDriver.bundle",
"AppleIntelHD4000GraphicsMTLDriver.bundle",
"AppleIntelHD4000GraphicsVADriver.bundle",
]
AddGeneralAccel = [
# Below 5 from dosdude1, unknown whether they benifit
#"AppleGraphicsControl.kext",
#"AppleGraphicsPowerManagement.kext",
#"AppleMCCSControl.kext",
#"IOGraphicsFamily.kext",
#"IONDRVSupport.kext",
"IOAcceleratorFamily2.kext",
"IOSurface.kext"
]
DeleteBrightness = [
@@ -1039,86 +1013,7 @@ AddBrightness = [
"AppleBacklightExpert.kext",
]
# List supported IDs
TeraScale1pciid = [
"9400",
"9401",
"9402",
"9403",
"9581",
"9583",
"9588",
"94c8",
"94c9",
"9500",
"9501",
"9505",
"9507",
"9504",
"9506",
"9598",
"9488",
"9599",
"9591",
"9593",
"9440",
"9442",
"944A",
"945A",
"9490",
"949E",
"9480",
"9540",
"9541",
"954E",
"954F",
"9552",
"9553",
"94a0",
]
TeraScale2pciid = [
"6738",
"6739",
"6720",
"6722",
"6768",
"6770",
"6779",
"6760",
"6761",
"68E0",
"6898",
"6899",
"68B8",
"68B0",
"68B1",
"68A0",
"68A1",
"6840",
"6841",
"68D8",
"68C0",
"68C1",
"68D9",
"6750",
"6758",
"6759",
"6740",
"6741",
"6745",
]
IronLakepciid = [
"0044",
"0046",
]
SandyBridgepiciid = [
"0106",
"0601",
"0116",
"0102",
"0126",
AddVolumeControl = [
"AppleHDA.kext",
"IOAudioFamily.kext",
]

732
Resources/PCIIDArray.py Normal file
View File

@@ -0,0 +1,732 @@
# Array of Device IDs for different devices
class nvidia_ids:
# Courteous of envytools as well as Macrumors:
# https://envytools.readthedocs.io/en/latest/hw/pciid.html
# https://forums.macrumors.com/threads/2011-imac-graphics-card-upgrade.1596614/
tesla_ids = [
# G84
"0400", # G84 [8600 GTS]
"0401", # G84 [8600 GT]
"0402", # G84 [8600 GT]
"0403", # G84 [8600 GS]
"0404", # G84 [8400 GS]
"0405", # G84 [9500M GS]
"0406", # G84 [8300 GS]
"0407", # G84 [8600M GT]
"0408", # G84 [9650M GS]
"0409", # G84 [8700M GT]
"040A", # G84 [FX 370]
"040B", # G84 [NVS 320M]
"040C", # G84 [FX 570M]
"040D", # G84 [FX 1600M]
"040E", # G84 [FX 570]
"040F", # G84 [FX 1700]
# G86
"0420", # G86 [8400 SE]
"0421", # G86 [8500 GT]
"0422", # G86 [8400 GS]
"0423", # G86 [8300 GS]
"0424", # G86 [8400 GS]
"0425", # G86 [8600M GS]
"0426", # G86 [8400M GT]
"0427", # G86 [8400M GS]
"0428", # G86 [8400M G]
"0429", # G86 [NVS 140M]
"042A", # G86 [NVS 130M]
"042B", # G86 [NVS 135M]
"042C", # G86 [9400 GT]
"042D", # G86 [FX 360M]
"042E", # G86 [9300M G]
"042F", # G86 [NVS 290]
# G92
"0410", # G92 [GT 330]
"0600", # G92 [8800 GTS 512]
"0601", # G92 [9800 GT]
"0602", # G92 [8800 GT]
"0603", # G92 [GT 230]
"0604", # G92 [9800 GX2]
"0605", # G92 [9800 GT]
"0606", # G92 [8800 GS]
"0607", # G92 [GTS 240]
"0608", # G92 [9800M GTX]
"0609", # G92 [8800M GTS]
"060A", # G92 [GTX 280M]
"060B", # G92 [9800M GT]
"060C", # G92 [8800M GTX]
"060F", # G92 [GTX 285M]
"0610", # G92 [9600 GSO]
"0611", # G92 [8800 GT]
"0612", # G92 [9800 GTX/9800 GTX+]
"0613", # G92 [9800 GTX+]
"0614", # G92 [9800 GT]
"0615", # G92 [GTS 250]
"0617", # G92 [9800M GTX]
"0618", # G92 [GTX 260M]
"0619", # G92 [FX 4700 X2]
"061A", # G92 [FX 3700]
"061B", # G92 [VX 200]
"061C", # G92 [FX 3600M]
"061D", # G92 [FX 2800M]
"061E", # G92 [FX 3700M]
"061F", # G92 [FX 3800M]
# G94
"0621", # G94 [GT 230]
"0622", # G94 [9600 GT]
"0623", # G94 [9600 GS]
"0625", # G94 [9600 GSO 512]
"0626", # G94 [GT 130]
"0627", # G94 [GT 140]
"0628", # G94 [9800M GTS]
"062A", # G94 [9700M GTS]
"062B", # G94 [9800M GS]
"062C", # G94 [9800M GTS ]
"062D", # G94 [9600 GT]
"062E", # G94 [9600 GT]
"0631", # G94 [GTS 160M]
"0635", # G94 [9600 GSO]
"0637", # G94 [9600 GT]
"0638", # G94 [FX 1800]
"063A", # G94 [FX 2700M]
# G96
"0640", # G96 [9500 GT]
"0641", # G96 [9400 GT]
"0643", # G96 [9500 GT]
"0644", # G96 [9500 GS]
"0645", # G96 [9500 GS]
"0646", # G96 [GT 120]
"0647", # G96 [9600M GT]
"0648", # G96 [9600M GS]
"0649", # G96 [9600M GT]
"064A", # G96 [9700M GT]
"064B", # G96 [9500M G]
"064C", # G96 [9650M GT]
"0651", # G96 [G 110M]
"0652", # G96 [GT 130M]
"0653", # G96 [GT 120M]
"0654", # G96 [GT 220M]
"0655", # G96 [GT 120]
"0656", # G96 [GT 120 ]
"0658", # G96 [FX 380]
"0659", # G96 [FX 580]
"065A", # G96 [FX 1700M]
"065B", # G96 [9400 GT]
"065C", # G96 [FX 770M]
"065F", # G96 [G210]
# G98
"06E0", # G98 [9300 GE]
"06E1", # G98 [9300 GS]
"06E2", # G98 [8400]
"06E3", # G98 [8400 SE]
"06E4", # G98 [8400 GS]
"06E6", # G98 [G100]
"06E7", # G98 [9300 SE]
"06E8", # G98 [9200M GS]
"06E9", # G98 [9300M GS]
"06EA", # G98 [NVS 150M]
"06EB", # G98 [NVS 160M]
"06EC", # G98 [G 105M]
"06EF", # G98 [G 103M]
"06F1", # G98 [G105M]
"06F8", # G98 [NVS 420]
"06F9", # G98 [FX 370 LP]
"06FA", # G98 [NVS 450]
"06FB", # G98 [FX 370M]
"06FD", # G98 [NVS 295]
"06FF", # G98 [HICx16]
# G200
"05E0", # G200 [GTX 295]
"05E1", # G200 [GTX 280]
"05E2", # G200 [GTX 260]
"05E3", # G200 [GTX 285]
"05E6", # G200 [GTX 275]
"05E7", # G200 [C1060]
"05E9", # G200 [CX]
"05EA", # G200 [GTX 260]
"05EB", # G200 [GTX 295]
"05ED", # G200 [FX 5800]
"05EE", # G200 [FX 4800]
"05EF", # G200 [FX 3800]
# MCP77 GPU
"0840", # MCP77 GPU [8200M]
"0844", # MCP77 GPU [9100M G]
"0845", # MCP77 GPU [8200M G]
"0846", # MCP77 GPU [9200]
"0847", # MCP77 GPU [9100]
"0848", # MCP77 GPU [8300]
"0849", # MCP77 GPU [8200]
"084A", # MCP77 GPU [730A]
"084B", # MCP77 GPU [9200]
"084C", # MCP77 GPU [980A/780A SLI]
"084D", # MCP77 GPU [750A SLI]
"084F", # MCP77 GPU [8100 / 720A]
# MCP79 GPU
"0860", # MCP79 GPU [9400]
"0861", # MCP79 GPU [9400]
"0862", # MCP79 GPU [9400M G]
"0863", # MCP79 GPU [9400M]
"0864", # MCP79 GPU [9300]
"0865", # MCP79 GPU [ION]
"0866", # MCP79 GPU [9400M G]
"0867", # MCP79 GPU [9400]
"0868", # MCP79 GPU [760i SLI]
"0869", # MCP79 GPU [9400]
"086A", # MCP79 GPU [9400]
"086C", # MCP79 GPU [9300 / 730i]
"086D", # MCP79 GPU [9200]
"086E", # MCP79 GPU [9100M G]
"086F", # MCP79 GPU [8200M G]
"0870", # MCP79 GPU [9400M]
"0871", # MCP79 GPU [9200]
"0872", # MCP79 GPU [G102M]
"0873", # MCP79 GPU [G102M]
"0874", # MCP79 GPU [ION]
"0876", # MCP79 GPU [ION]
"087A", # MCP79 GPU [9400]
"087D", # MCP79 GPU [ION]
"087E", # MCP79 GPU [ION LE]
"087F", # MCP79 GPU [ION LE]
# GT215
"0CA0", # GT215 [GT 330]
"0CA2", # GT215 [GT 320]
"0CA3", # GT215 [GT 240]
"0CA4", # GT215 [GT 340]
"0CA5", # GT215 [GT 220]
"0CA7", # GT215 [GT 330]
"0CA9", # GT215 [GTS 250M]
"0CAC", # GT215 [GT 220]
"0CAF", # GT215 [GT 335M]
"0CB0", # GT215 [GTS 350M]
"0CB1", # GT215 [GTS 360M]
"0CBC", # GT215 [FX 1800M]
# GT216
"0A20", # GT216 [GT 220]
"0A22", # GT216 [315]
"0A23", # GT216 [210]
"0A26", # GT216 [405]
"0A27", # GT216 [405]
"0A28", # GT216 [GT 230M]
"0A29", # GT216 [GT 330M]
"0A2A", # GT216 [GT 230M]
"0A2B", # GT216 [GT 330M]
"0A2C", # GT216 [NVS 5100M]
"0A2D", # GT216 [GT 320M]
"0A32", # GT216 [GT 415]
"0A34", # GT216 [GT 240M]
"0A35", # GT216 [GT 325M]
"0A38", # GT216 [400]
"0A3C", # GT216 [FX 880M]
# GT218
"0A60", # GT218 [G210]
"0A62", # GT218 [205]
"0A63", # GT218 [310]
"0A64", # GT218 [ION]
"0A65", # GT218 [210]
"0A66", # GT218 [310]
"0A67", # GT218 [315]
"0A68", # GT218 [G105M]
"0A69", # GT218 [G105M]
"0A6A", # GT218 [NVS 2100M]
"0A6C", # GT218 [NVS 3100M]
"0A6E", # GT218 [305M]
"0A6F", # GT218 [ION]
"0A70", # GT218 [310M]
"0A71", # GT218 [305M]
"0A72", # GT218 [310M]
"0A73", # GT218 [305M]
"0A74", # GT218 [G210M]
"0A75", # GT218 [310M]
"0A76", # GT218 [ION]
"0A78", # GT218 [FX 380 LP]
"0A7A", # GT218 [315M]
"0A7C", # GT218 [FX 380M]
"10C0", # GT218 [9300 GS]
"10C3", # GT218 [8400GS]
"10C5", # GT218 [405]
"10D8", # GT218 [NVS 300]
# MCP89 GPU
"08A0", # MCP89 GPU [320M]
"08A2", # MCP89 GPU [320M]
"08A3", # MCP89 GPU [320M]
"08A4", # MCP89 GPU [320M]
]
fermi_ids = [
# GF100
"06C0", # GF100 [GTX 480]
"06C4", # GF100 [GTX 465]
"06CA", # GF100 [GTX 480M]
"06CB", # GF100 [GTX 480]
"06CD", # GF100 [GTX 470]
"06D1", # GF100 [C2050 / C2070]
"06D2", # GF100 [M2070]
"06D8", # GF100 [6000]
"06D9", # GF100 [5000]
"06DA", # GF100 [5000M]
"06DC", # GF100 [6000]
"06DD", # GF100 [4000]
"06DE", # GF100 [T20]
"06DF", # GF100 [M2070-Q]
# GF104
"0E22", # GF104 [GTX 460]
"0E23", # GF104 [GTX 460 SE]
"0E24", # GF104 [GTX 460 OEM]
"0E30", # GF104 [GTX 470M]
"0E31", # GF104 [GTX 485M]
"0E3A", # GF104 [3000M]
"0E3B", # GF104 [4000M]
# GF114
"1200", # GF114 [GTX 560 Ti]
"1201", # GF114 [GTX 560]
"1202", # GF114 [GTX 560 Ti OEM]
"1203", # GF114 [GTX 460 SE v2]
"1205", # GF114 [GTX 460 v2]
"1206", # GF114 [GTX 555]
"1207", # GF114 [GT 645 OEM]
"1208", # GF114 [GTX 560 SE]
"1210", # GF114 [GTX 570M]
"1211", # GF114 [GTX 580M]
"1212", # GF114 [GTX 675M]
"1213", # GF114 [GTX 670M]
# GF106
"0DC0", # GF106 [GT 440]
"0DC4", # GF106 [GTS 450]
"0DC5", # GF106 [GTS 450]
"0DC6", # GF106 [GTS 450]
"0DCD", # GF106 [GT 555M]
"0DCE", # GF106 [GT 555M]
"0DD1", # GF106 [GTX 460M]
"0DD2", # GF106 [GT 445M]
"0DD3", # GF106 [GT 435M]
"0DD6", # GF106 [GT 550M]
"0DD8", # GF106 [2000]
"0DDA", # GF106 [2000M]
# GF116
"1241", # GF116 [GT 545 OEM]
"1243", # GF116 [GT 545]
"1244", # GF116 [GTX 550 Ti]
"1245", # GF116 [GTS 450 Rev. 2]
"1246", # GF116 [GT 550M]
"1247", # GF116 [GT 635M]
"1248", # GF116 [GT 555M]
"1249", # GF116 [GTS 450 Rev. 3]
"124B", # GF116 [GT 640 OEM]
"124D", # GF116 [GT 555M]
"1251", # GF116 [GTX 560M]
# GF108
"0DE0", # GF108 [GT 440]
"0DE1", # GF108 [GT 430]
"0DE2", # GF108 [GT 420]
"0DE3", # GF108 [GT 635M]
"0DE4", # GF108 [GT 520]
"0DE5", # GF108 [GT 530]
"0DE8", # GF108 [GT 620M]
"0DE9", # GF108 [GT 630M]
"0DEA", # GF108 [610M]
"0DEB", # GF108 [GT 555M]
"0DEC", # GF108 [GT 525M]
"0DED", # GF108 [GT 520M]
"0DEE", # GF108 [GT 415M]
"0DEF", # GF108 [NVS 5400M]
"0DF0", # GF108 [GT 425M]
"0DF1", # GF108 [GT 420M]
"0DF2", # GF108 [GT 435M]
"0DF3", # GF108 [GT 420M]
"0DF4", # GF108 [GT 540M]
"0DF5", # GF108 [GT 525M]
"0DF6", # GF108 [GT 550M]
"0DF7", # GF108 [GT 520M]
"0DF8", # GF108 [600]
"0DF9", # GF108 [500M]
"0DFA", # GF108 [1000M]
"0DFC", # GF108 [NVS 5200M]
"0F00", # GF108 [GT 630]
"0F01", # GF108 [GT 620]
# GF110
"1080", # GF110 [GTX 580]
"1081", # GF110 [GTX 570]
"1082", # GF110 [GTX 560 Ti]
"1084", # GF110 [GTX 560]
"1086", # GF110 [GTX 570]
"1087", # GF110 [GTX 560 Ti]
"1088", # GF110 [GTX 590]
"1089", # GF110 [GTX 580]
"108B", # GF110 [GTX 580]
"1091", # GF110 [M2090]
"109A", # GF110 [5010M]
"109B", # GF110 [7000]
# GF119
"1040", # GF119 [GT 520]
"1042", # GF119 [510]
"1048", # GF119 [605]
"1049", # GF119 [GT 620]
"104A", # GF119 [GT 610]
"1050", # GF119 [GT 520M]
"1051", # GF119 [GT 520MX]
"1052", # GF119 [GT 520M]
"1054", # GF119 [410M]
"1055", # GF119 [410M]
"1056", # GF119 [NVS 4200M]
"1057", # GF119 [NVS 4200M]
"1058", # GF119 [610M]
"1059", # GF119 [610M]
"105A", # GF119 [610M]
"107D", # GF119 [NVS 310]
# GF117
"1140", # GF117 [GT 620M]
]
kepler_ids = [
# GK104
"1180", # GK104 [GTX 680]
"1183", # GK104 [GTX 660 Ti]
"1185", # GK104 [GTX 660]
"1188", # GK104 [GTX 690]
"1189", # GK104 [GTX 670]
"1198", # GTX 880M
"1199", # GK104 [GTX 870M]
"119A", # GTX 860M
"119E", # GTX 780M
"119F", # GK104 [GTX 780M]
"11A0", # GK104 [GTX 680M]
"11A1", # GK104 [GTX 670MX]
"11A2", # GK104 [GTX 675MX]
"11A3", # GK104 [GTX 680MX]
"11A7", # GK104 [GTX 675MX]
"11A9", # GTX 870M
"11B6", # Quadro K3100M
"11B7", # Quadro K4100M
"11B8", # Quadro K5100M
"11BA", # GK104 [K5000]
"11BC", # GK104 [K5000M]
"11BD", # GK104 [K4000M]
"11BE", # GK104 [K3000M]
"11BF", # GK104 [GRID K2]
# GK106
"11C0", # GK106 [GTX 660]
"11C6", # GK106 [GTX 650 Ti]
"11E0", # GK106 [GTX 770M]
"11E1", # GTX 765M
"11E2", # GTX 765M
"11FA", # GK106 [K4000]
"11FC", # Quadro K2100M
# GK107
"0FC0", # GK107 [GT 640]
"0FC1", # GK107 [GT 640]
"0FC2", # GK107 [GT 630]
"0FC6", # GK107 [GTX 650]
"0FD1", # GK107 [GT 650M]
"0FD2", # GK107 [GT 640M]
"0FD3", # GK107 [GT 640M LE]
"0FD4", # GK107 [GTX 660M]
"0FD5", # GK107 [GT 650M]
"0FD8", # GK107 [GT 640M]
"0FD9", # GK107 [GT 645M]
"0FE0", # GK107 [GTX 660M]
"0FE9", # GK107 [GT 750M Mac Edition]
"0FF6", # Quadro K1100M
"0FF9", # GK107 [K2000D]
"0FFA", # GK107 [K600]
"0FFB", # GK107 [K2000M]
"0FFC", # GK107 [K1000M]
"0FFD", # GK107 [NVS 510]
"0FFE", # GK107 [K2000]
"0FFF", # GK107 [410]
# GK110
"1003", # GK110 [GTX Titan LE]
"1004", # GK110 [GTX 780]
"1005", # GK110 [GTX Titan]
"101F", # GK110 [TEslA K20]
"1020", # GK110 [TEslA K2]
"1021", # GK110 [TEslA K2m]
"1022", # GK110 [TEslA K20C]
"1026", # GK110 [TEslA K20s]
"1028", # GK110 [TEslA K20m]
# GK208
"1280", # GK208 [GT 635]
"1282", # GK208 [GT 640 REv. 2]
"1284", # GK208 [GT 630 REv. 2]
"1290", # GK208 [GT 730M]
"1291", # GK208 [GT 735M]
"1292", # GK208 [GT 740M]
"1293", # GK208 [GT 730M]
"1294", # GK208 [GT 740M]
"1295", # GK208 [710M]
"12B9", # GK208 [K610M]
"12BA", # GK208 [K510M]
]
class amd_ids:
legacy_gcn_ids = [
# AMDRadeonX4000
# AMDBonaireGraphicsAccelerator
"6640",
"6641",
"6646",
"6647",
"6650",
"6651",
"665C",
"665D",
# AMDFijiGraphicsAccelerator
"7300",
"730F",
# AMDHawaiiGraphicsAccelerator
"67B0",
# AMDPitcairnGraphicsAccelerator
"6800",
"6801",
"6806",
"6808",
"6810",
"6818",
"6819",
# AMDTahitiGraphicsAccelerator
"6790",
"6798",
"679A",
"679E",
"6780",
# AMDTongaGraphicsAccelerator
"6920",
"6921",
"6930",
"6938",
"6939",
# AMDVerdeGraphicsAccelerator
"6820",
"6821",
"6823",
"6825",
"6827",
"682B",
"682D",
"682F",
"6835",
"6839",
"683B",
"683D",
"683F",
]
polaris_ids = [
# AMDRadeonX4000
# AMDBaffinGraphicsAccelerator
"67E0",
"67E3",
"67E8",
"67EB",
"67EF",
"67FF",
"67E1",
"67E7",
"67E9",
# AMDEllesmereGraphicsAccelerator
"67C0",
"67C1",
"67C2",
"67C4",
"67C7",
"67DF",
"67D0",
"67C8",
"67C9",
"67CA",
"67CC",
"67CF",
]
vega_ids = [
# AMDRadeonX5000
# AMDVega10GraphicsAccelerator
"6860",
"6861",
"6862",
"6863",
"6864",
"6867",
"6868",
"6869",
"686A",
"686B",
"686C",
"686D",
"686E",
"686F",
"687F",
# AMDVega12GraphicsAccelerator
"69A0",
"69A1",
"69A2",
"69A3",
"69AF",
# AMDVega20GraphicsAccelerator
"66A0",
"66A1",
"66A2",
"66A3",
"66A7",
"66AF",
]
navi_ids = [
# AMDRadeonX6000
# AMDNavi10GraphicsAccelerator
"7310",
"7312",
"7318",
"7319",
"731A",
"731B",
"731F",
# AMDNavi12GraphicsAccelerator
"7360",
# AMDNavi14GraphicsAccelerator
"7340",
"7341",
"7343",
"7347",
"734F",
# AMDNavi21GraphicsAccelerator
"73A2",
"73AB",
"73BF",
]
terascale_1_ids = [
"9400",
"9401",
"9402",
"9403",
"9581",
"9583",
"9588",
"94C8",
"94C9",
"9500",
"9501",
"9505",
"9507",
"9504",
"9506",
"9598",
"9488",
"9599",
"9591",
"9593",
"9440",
"9442",
"944A",
"945A",
"9490",
"949E",
"9480",
"9540",
"9541",
"954E",
"954F",
"9552",
"9553",
"94A0",
]
terascale_2_ids = [
"6738",
"6739",
"6720",
"6722",
"6768",
"6770",
"6779",
"6760",
"6761",
"68E0",
"6898",
"6899",
"68B8",
"68B0",
"68B1",
"68A0",
"68A1",
"6840",
"6841",
"68D8",
"68C0",
"68C1",
"68D9",
"6750",
"6758",
"6759",
"6740",
"6741",
"6745",
]
class intel_ids:
iron_ids = [
# AppleIntelHDGraphics IDs
"0044",
"0046",
]
sandy_ids = [
# AppleIntelHD3000Graphics IDs
# AppleIntelSNBGraphicsFB IDs
"0106",
"0601",
"0116",
"0102",
"0126",
]
ivy_ids = [
# AppleIntelHD4000Graphics IDs
# AppleIntelFramebufferCapri IDs
"0152",
"0156",
"0162",
"0166",
]
class broadcom_ids:
BCM4360Wifi = [
# AirPortBrcmNIC IDs
"43BA", # BCM43602
"43A3", # BCM4350
"43A0", # BCM4360
]
BCM94331Wifi = [
# AirPortBrcm4360 IDs (removed duplicates for 4360 class cards)
"4331", # BCM94331
"4353", # BCM943224
]
BCM94322Wifi = [
# AirPortBrcm4331 IDs (removed duplicates for 4331 class cards)
"432B", # BCM94322
]
BCM94328Wifi = [
# AppleAirPortBrcm43224 IDs
"4311", # BCM4311 - never used by Apple
"4312", # BCM4311 - never used by Apple
"4313", # BCM4311 - never used by Apple
"4318", # BCM4318 - never used by Apple
"4319", # BCM4318 - never used by Apple
"431A", # Unknown - never used by Apple
"4320", # BCM4306 - never used by Apple
"4324", # BCM4309 - never used by Apple
"4325", # BCM4306 - never used by Apple
"4328", # BCM94328
"432C", # BCM4322 - never used by Apple
"432D", # BCM4322 - never used by Apple
]
class atheros_ids:
AtherosWifi = [
# AirPortAtheros40 IDs
"0030", # AR93xx
"002A", # AR928X
"001C", # AR242x / AR542x
"0023", # AR5416 - never used by Apple
"0024", # AR5418
]

View File

@@ -2,9 +2,8 @@
# Copyright (C) 2020-2021, Dhinak G, Mykola Grymalyuk
# Missing Features:
# - Full System/Library Snapshotting (need to research how Apple achieves this)
# - Temorary Work-around: sudo bless --mount /System/Volumes/Update/mnt1 --bootefi --last-sealed-snapshot
# - Temporary Work-around: sudo bless --mount /System/Volumes/Update/mnt1 --bootefi --last-sealed-snapshot
# - Work-around battery throttling on laptops with no battery (IOPlatformPluginFamily.kext/Contents/PlugIns/ACPI_SMC_PlatformPlugin.kext/Contents/Resources/)
# - Add kmutil error checking
from __future__ import print_function
import binascii
@@ -19,7 +18,7 @@ import os
from pathlib import Path
from datetime import date
from Resources import Constants, ModelArray, Utilities
from Resources import Constants, ModelArray, PCIIDArray, Utilities, DeviceProbe
class PatchSysVolume:
@@ -45,8 +44,14 @@ class PatchSysVolume:
if print_status is True:
print(f"- {current_sip_bit}\t {temp}")
i = i + 1
# TODO: Fix this garbage when I have more sanity
if ((self.constants.csr_values["CSR_ALLOW_UNTRUSTED_KEXTS "] is True) and (self.constants.csr_values["CSR_ALLOW_UNRESTRICTED_FS "] is True) and (self.constants.csr_values["CSR_ALLOW_UNRESTRICTED_DTRACE "] is True) and (self.constants.csr_values["CSR_ALLOW_UNRESTRICTED_NVRAM "] is True) and (self.constants.csr_values["CSR_ALLOW_DEVICE_CONFIGURATION "] is True) and (self.constants.csr_values["CSR_ALLOW_UNAPPROVED_KEXTS "] is True) and (self.constants.csr_values["CSR_ALLOW_EXECUTABLE_POLICY_OVERRIDE"] is True) and (self.constants.csr_values["CSR_ALLOW_UNAUTHENTICATED_ROOT "] is True)):
if ((self.constants.csr_values["CSR_ALLOW_UNTRUSTED_KEXTS "] is True) \
and (self.constants.csr_values["CSR_ALLOW_UNRESTRICTED_FS "] is True) \
and (self.constants.csr_values["CSR_ALLOW_UNRESTRICTED_DTRACE "] is True) \
and (self.constants.csr_values["CSR_ALLOW_UNRESTRICTED_NVRAM "] is True) \
and (self.constants.csr_values["CSR_ALLOW_DEVICE_CONFIGURATION "] is True) \
and (self.constants.csr_values["CSR_ALLOW_UNAPPROVED_KEXTS "] is True) \
and (self.constants.csr_values["CSR_ALLOW_EXECUTABLE_POLICY_OVERRIDE"] is True) \
and (self.constants.csr_values["CSR_ALLOW_UNAUTHENTICATED_ROOT "] is True)):
self.sip_patch_status = False
else:
self.sip_patch_status = True
@@ -73,7 +78,7 @@ class PatchSysVolume:
print("- Mounting drive as writable")
subprocess.run(f"sudo mount -o nobrowse -t apfs /dev/{self.root_mount_path} {self.mount_location}".split(), stdout=subprocess.PIPE).stdout.decode().strip().encode()
if Path(self.mount_extensions).exists():
print("- Sucessfully mounted the Root Volume")
print("- Successfully mounted the Root Volume")
if patch is True:
self.patch_root_vol()
else:
@@ -116,56 +121,51 @@ class PatchSysVolume:
subprocess.run(f"sudo chmod -R 755 {self.mount_private_frameworks}/DisplayServices.framework".split(), stdout=subprocess.PIPE).stdout.decode().strip().encode()
subprocess.run(f"sudo chown -R root:wheel {self.mount_private_frameworks}/DisplayServices.framework".split(), stdout=subprocess.PIPE).stdout.decode().strip().encode()
def check_pciid(self):
try:
self.igpu_devices = plistlib.loads(subprocess.run("ioreg -r -n IGPU -a".split(), stdout=subprocess.PIPE).stdout.decode().strip().encode())
self.igpu_devices = [i for i in self.igpu_devices if i["class-code"] == binascii.unhexlify("00000300")]
self.igpu_vendor = self.hexswap(binascii.hexlify(self.igpu_devices[0]["vendor-id"]).decode()[:4])
self.igpu_device = self.hexswap(binascii.hexlify(self.igpu_devices[0]["device-id"]).decode()[:4])
print(f"- Detected iGPU: {self.igpu_vendor}:{self.igpu_device}")
except ValueError:
print("- No iGPU detected")
self.igpu_devices = ""
try:
self.dgpu_devices = plistlib.loads(subprocess.run("ioreg -r -n GFX0 -a".split(), stdout=subprocess.PIPE).stdout.decode().strip().encode())
self.dgpu_devices = [i for i in self.dgpu_devices if i["class-code"] == binascii.unhexlify("00000300")]
self.dgpu_vendor = self.hexswap(binascii.hexlify(self.dgpu_devices[0]["vendor-id"]).decode()[:4])
self.dgpu_device = self.hexswap(binascii.hexlify(self.dgpu_devices[0]["device-id"]).decode()[:4])
print(f"- Detected dGPU: {self.dgpu_vendor}:{self.dgpu_device}")
except ValueError:
print("- No dGPU detected")
self.dgpu_devices = ""
def gpu_accel_patches_11(self):
if self.dgpu_devices:
if self.dgpu_vendor == self.constants.pci_nvidia:
print("- Merging legacy Nvidia Kexts and Bundles")
self.delete_old_binaries(ModelArray.DeleteNvidiaAccel11)
self.add_new_binaries(ModelArray.AddNvidiaAccel11, self.constants.legacy_nvidia_path)
elif self.dgpu_vendor == self.constants.pci_amd_ati:
print("- Merging legacy AMD Kexts and Bundles")
self.delete_old_binaries(ModelArray.DeleteAMDAccel11)
self.add_new_binaries(ModelArray.AddAMDAccel11, self.constants.legacy_amd_path)
if self.igpu_devices:
if self.igpu_vendor == self.constants.pci_intel:
if self.igpu_device in ModelArray.IronLakepciid:
igpu_vendor,igpu_device,igpu_acpi = DeviceProbe.pci_probe().gpu_probe("IGPU")
dgpu_vendor,dgpu_device,dgpu_acpi = DeviceProbe.pci_probe().gpu_probe("GFX0")
if dgpu_vendor:
print(f"- Found GFX0: {dgpu_vendor}:{dgpu_device}")
if dgpu_vendor == self.constants.pci_nvidia:
if dgpu_device in PCIIDArray.nvidia_ids().tesla_ids or dgpu_device in PCIIDArray.nvidia_ids().fermi_ids:
print("- Merging legacy Nvidia Tesla and Fermi Kexts and Bundles")
self.delete_old_binaries(ModelArray.DeleteNvidiaAccel11)
self.add_new_binaries(ModelArray.AddGeneralAccel, self.constants.legacy_general_path)
self.add_new_binaries(ModelArray.AddNvidiaAccel11, self.constants.legacy_nvidia_path)
# TODO: Enable below code if macOS 12 drops support
#elif dgpu_device in PCIIDArray.nvidia_ids().kepler_ids and self.constants.detected_os > self.constants.big_sur:
# print("- Merging legacy Nvidia Kepler Kexts and Bundles")
# self.add_new_binaries(ModelArray.AddNvidiaKeplerAccel11, self.constants.legacy_nvidia_kepler_path)
elif dgpu_vendor == self.constants.pci_amd_ati:
if dgpu_device in PCIIDArray.amd_ids().terascale_1_ids:
print("- Merging legacy AMD Kexts and Bundles")
self.delete_old_binaries(ModelArray.DeleteAMDAccel11)
self.add_new_binaries(ModelArray.AddGeneralAccel, self.constants.legacy_general_path)
self.add_new_binaries(ModelArray.AddAMDAccel11, self.constants.legacy_amd_path)
if igpu_vendor:
print(f"- Found IGPU: {igpu_vendor}:{igpu_device}")
if igpu_vendor == self.constants.pci_intel:
if igpu_device in PCIIDArray.intel_ids().iron_ids:
print("- Merging legacy Intel 1st Gen Kexts and Bundles")
self.delete_old_binaries(ModelArray.DeleteNvidiaAccel11)
self.add_new_binaries(ModelArray.AddGeneralAccel, self.constants.legacy_general_path)
self.add_new_binaries(ModelArray.AddIntelGen1Accel, self.constants.legacy_intel_gen1_path)
elif self.igpu_device in ModelArray.SandyBridgepiciid:
elif igpu_device in PCIIDArray.intel_ids().sandy_ids:
print("- Merging legacy Intel 2nd Gen Kexts and Bundles")
self.delete_old_binaries(ModelArray.DeleteNvidiaAccel11)
self.add_new_binaries(ModelArray.AddGeneralAccel, self.constants.legacy_general_path)
self.add_new_binaries(ModelArray.AddIntelGen2Accel, self.constants.legacy_intel_gen2_path)
if self.model in ModelArray.LegacyGPUAMDIntelGen2:
# Swap custom AppleIntelSNBGraphicsFB-AMD.kext, required to fix linking
subprocess.run(f"sudo rm -R {self.mount_extensions}/AppleIntelSNBGraphicsFB.kext".split(), stdout=subprocess.PIPE).stdout.decode().strip().encode()
subprocess.run(f"sudo cp -R {self.constants.legacy_amd_path}/AMD-Link/AppleIntelSNBGraphicsFB.kext {self.mount_extensions}".split(), stdout=subprocess.PIPE).stdout.decode().strip().encode()
elif self.igpu_vendor == self.constants.pci_nvidia:
if not self.dgpu_devices:
# TODO: Enable below code if macOS 12 drops support
#elif igpu_device in PCIIDArray.intel_ids().ivy_ids:
# print("- Merging legacy Intel 3rd Gen Kexts and Bundles")
# self.add_new_binaries(ModelArray.AddIntelGen3Accel, self.constants.legacy_intel_gen3_path)
elif igpu_vendor == self.constants.pci_nvidia:
if not dgpu_vendor:
# Avoid patching twice, as Nvidia iGPUs will only have Nvidia dGPUs
print("- Merging legacy Nvidia Kexts and Bundles")
self.delete_old_binaries(ModelArray.DeleteNvidiaAccel11)
self.add_new_binaries(ModelArray.AddGeneralAccel, self.constants.legacy_general_path)
self.add_new_binaries(ModelArray.AddNvidiaAccel11, self.constants.legacy_nvidia_path)
# Frameworks
@@ -176,10 +176,13 @@ class PatchSysVolume:
self.add_brightness_patch()
# LaunchDaemons
print("- Adding HiddHack.plist")
if Path(self.mount_lauchd / Path("HiddHack.plist")).exists():
print("- Removing legacy HiddHack")
subprocess.run(f"sudo rm {self.mount_lauchd}/HiddHack.plist".split(), stdout=subprocess.PIPE).stdout.decode().strip().encode()
print("- Adding IOHID-Fixup.plist")
subprocess.run(f"sudo ditto {self.constants.payload_apple_lauchd_path_accel} {self.mount_lauchd}".split(), stdout=subprocess.PIPE).stdout.decode().strip().encode()
subprocess.run(f"sudo chmod 755 {self.mount_lauchd}/HiddHack.plist".split(), stdout=subprocess.PIPE).stdout.decode().strip().encode()
subprocess.run(f"sudo chown root:wheel {self.mount_lauchd}/HiddHack.plist".split(), stdout=subprocess.PIPE).stdout.decode().strip().encode()
subprocess.run(f"sudo chmod 755 {self.mount_lauchd}/IOHID-Fixup.plist".split(), stdout=subprocess.PIPE).stdout.decode().strip().encode()
subprocess.run(f"sudo chown root:wheel {self.mount_lauchd}/IOHID-Fixup.plist".split(), stdout=subprocess.PIPE).stdout.decode().strip().encode()
# PrivateFrameworks
print("- Merging legacy PrivateFrameworks")
@@ -194,64 +197,31 @@ class PatchSysVolume:
print(f"- Detecting patches for {self.model}")
rebuild_required = False
# TODO: Create Backup of S*/L*/Extensions, Frameworks and PrivateFramework to easily revert changes
# APFS snapshotting seems to ignore System Volume changes inconcistently, would like a backup to avoid total brick
# APFS snapshotting seems to ignore System Volume changes inconsistently, would like a backup to avoid total brick
# Perhaps a basic py2 script to run in recovery to restore
print("- Creating backup snapshot of user data (This may take some time)")
subprocess.run("tmutil snapshot".split(), stdout=subprocess.PIPE).stdout.decode().strip().encode()
# Ensures no .DS_Stores got in
print("- Preparing Files")
subprocess.run(f"sudo find {self.constants.payload_apple_root_path} -name '.DS_Store' -delete".split(), stdout=subprocess.PIPE).stdout.decode().strip().encode()
if self.model in ModelArray.LegacyGPU:
self.check_pciid()
if self.dgpu_devices and self.dgpu_vendor == self.constants.pci_amd_ati and self.dgpu_device in ModelArray.AMDMXMGPUs:
if self.model in ModelArray.LegacyGPU or self.constants.assume_legacy is True:
dgpu_vendor,dgpu_device,dgpu_acpi = DeviceProbe.pci_probe().gpu_probe("GFX0")
if dgpu_vendor and dgpu_vendor == self.constants.pci_amd_ati and (dgpu_device in PCIIDArray.amd_ids().polaris_ids or dgpu_device in PCIIDArray.amd_ids().vega_ids or dgpu_device in PCIIDArray.amd_ids().navi_ids or dgpu_device in PCIIDArray.amd_ids().legacy_gcn_ids):
print("- Detected Metal-based AMD GPU, skipping legacy patches")
elif self.dgpu_devices and self.dgpu_vendor == self.constants.pci_nvidia and self.dgpu_device in ModelArray.NVIDIAMXMGPUs:
elif dgpu_vendor and dgpu_vendor == self.constants.pci_nvidia and dgpu_device in PCIIDArray.nvidia_ids().kepler_ids:
print("- Detected Metal-based Nvidia GPU, skipping legacy patches")
else:
if Path(self.constants.hiddhack_path).exists():
print("- Detected legacy GPU, attempting legacy acceleration patches")
self.gpu_accel_patches_11()
else:
if self.dgpu_devices:
if self.dgpu_vendor == self.constants.pci_nvidia:
print("- Adding Nvidia Brightness Control patches")
self.add_new_binaries(ModelArray.AddNvidiaBrightness11, self.constants.legacy_nvidia_path)
elif self.dgpu_vendor == self.constants.pci_amd_ati:
if self.dgpu_device in ModelArray.TeraScale1pciid:
print("- Adding AMD/ATI TeraScale 1 Brightness Control patches")
self.add_new_binaries(ModelArray.AddAMDTeraScale1Brightness11, self.constants.legacy_amd_path)
elif self.dgpu_device in ModelArray.TeraScale2pciid:
print("- Adding AMD/ATI TeraScale 2 Brightness Control patches")
self.add_new_binaries(ModelArray.AddAMDTeraScale2Brightness11, self.constants.legacy_amd_path)
else:
print("- Could not find supported Legacy AMD/ATI GPU")
if self.igpu_devices:
if self.igpu_vendor == self.constants.pci_intel:
if self.igpu_device in ModelArray.IronLakepciid:
print("- Adding Intel Ironlake Brightness Control patches")
self.add_new_binaries(ModelArray.AddIntelGen1Brightness, self.constants.legacy_intel_gen1_path)
elif self.igpu_device in ModelArray.SandyBridgepiciid:
print("- Adding Intel Sandy Bridge Brightness Control patches")
self.add_new_binaries(ModelArray.AddIntelGen2Brightness, self.constants.legacy_intel_gen2_path)
if self.dgpu_devices and self.dgpu_vendor == self.constants.pci_amd_ati and self.dgpu_device in ModelArray.TeraScale2pciid:
# Swap custom AppleIntelSNBGraphicsFB-AMD.kext, required to fix linking
subprocess.run(f"sudo rm -R {self.mount_extensions}/AppleIntelSNBGraphicsFB.kext".split(), stdout=subprocess.PIPE).stdout.decode().strip().encode()
subprocess.run(f"sudo cp -R {self.constants.legacy_amd_path}/AMD-Link/AppleIntelSNBGraphicsFB.kext {self.mount_extensions}".split(), stdout=subprocess.PIPE).stdout.decode().strip().encode()
elif self.igpu_vendor == self.constants.pci_nvidia and not self.dgpu_devices:
# Avoid patching twice, as Nvidia iGPUs will only have Nvidia dGPUs
print("- Adding Nvidia Brightness Control patches")
self.add_new_binaries(ModelArray.AddNvidiaBrightness11, self.constants.legacy_nvidia_path)
if self.model in ModelArray.LegacyBrightness:
self.add_brightness_patch()
print("- Detected legacy GPU, attempting legacy acceleration patches")
self.gpu_accel_patches_11()
rebuild_required = True
if self.model in ["iMac7,1", "iMac8,1"]:
print("- Fixing Volume Control Support")
self.add_new_binaries(ModelArray.AddVolumeControl, self.constants.audio_path)
if rebuild_required is True:
self.rebuild_snapshot()
def unpatch_root_vol(self):
print("- Creating backup snapshot of user data (This may take some time)")
subprocess.run("tmutil snapshot".split(), stdout=subprocess.PIPE).stdout.decode().strip().encode()
print("- Reverting to last signed APFS snapshot")
subprocess.run(f"sudo bless --mount {self.mount_location} --bootefi --last-sealed-snapshot".split(), stdout=subprocess.PIPE).stdout.decode().strip().encode()
@@ -259,11 +229,22 @@ class PatchSysVolume:
if self.constants.gui_mode is False:
input("Press [ENTER] to continue with cache rebuild")
print("- Rebuilding Kernel Cache (This may take some time)")
subprocess.run(f"sudo kmutil install --volume-root {self.mount_location} --update-all".split(), stdout=subprocess.PIPE).stdout.decode().strip().encode()
if self.constants.gui_mode is False:
input("Press [ENTER] to continue with snapshotting")
print("- Creating new APFS snapshot")
subprocess.run(f"sudo bless --folder {self.mount_location}/System/Library/CoreServices --bootefi --create-snapshot".split(), stdout=subprocess.PIPE).stdout.decode().strip().encode()
result = subprocess.run(f"sudo kmutil install --volume-root {self.mount_location} --update-all".split(), stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
if result.returncode != 0:
self.sucess_status = False
print("- Unable to build new kernel cache")
print("\nPlease report this to Github")
print("Reason for Patch Failure:")
print(result.stdout.decode())
print("")
else:
self.sucess_status = True
print("- Successfully built new kernel cache")
if self.constants.gui_mode is False:
input("Press [ENTER] to continue with snapshotting")
print("- Creating new APFS snapshot")
subprocess.run(f"sudo bless --folder {self.mount_location}/System/Library/CoreServices --bootefi --create-snapshot".split(), stdout=subprocess.PIPE).stdout.decode().strip().encode()
def unmount_drive(self):
print("- Unmounting Root Volume (Don't worry if this fails)")
@@ -311,7 +292,7 @@ class PatchSysVolume:
def download_files(self):
Utilities.cls()
print("- Downloading Apple binaries")
popen_oclp = subprocess.Popen(f"curl -S -L {self.constants.url_apple_binaries} --output {self.constants.payload_apple_root_path_zip}".split(), stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.STDOUT, universal_newlines=True)
popen_oclp = subprocess.Popen(f"curl -S -L {self.constants.url_apple_binaries}{self.constants.payload_version}.zip --output {self.constants.payload_apple_root_path_zip}".split(), stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.STDOUT, universal_newlines=True)
for stdout_line in iter(popen_oclp.stdout.readline, ""):
print(stdout_line, end="")
popen_oclp.stdout.close()
@@ -331,15 +312,16 @@ class PatchSysVolume:
os.remove(self.constants.payload_apple_root_path_zip)
else:
print("- Download failed, please verify the below link works:")
print(self.constants.url_apple_binaries)
print(f"{self.constants.url_apple_binaries}{self.constants.payload_version}")
def start_patch(self):
# Check SIP
# self.check_files()
if self.constants.custom_model is not None:
print("Root Patching must be done on target machine!")
elif self.model in ModelArray.NoRootPatch11:
elif self.model in ModelArray.NoRootPatch11 and self.constants.assume_legacy is False:
print("Root Patching not required for this machine!")
elif self.model not in ModelArray.SupportedSMBIOS:
elif self.model not in ModelArray.SupportedSMBIOS11 and self.constants.assume_legacy is False:
print("Cannot run on this machine, model is unsupported!")
elif self.constants.detected_os < self.constants.big_sur:
print(f"Cannot run on this OS, requires macOS 11!")
@@ -355,7 +337,10 @@ class PatchSysVolume:
self.find_mount_root_vol(True)
self.unmount_drive()
print("- Patching complete")
print("\nPlease reboot the machine for patches to take effect")
if self.sucess_status is True:
print("\nPlease reboot the machine for patches to take effect")
else:
print("\nPlease reboot the machine to avoid potential issues rerunning the patcher")
if self.sip_patch_status is True:
print("SIP set incorrectly, cannot patch on this machine!")
print("Please disable SIP and SecureBootModel in Patcher Settings")

View File

@@ -98,11 +98,13 @@ module.exports = {
collapsable: false,
sidebarDepth: 1,
children: [
'ACCEL',
'TROUBLESHOOTING',
'DEBUG',
'UPDATE',
'UNINSTALL',
'ICNS',
'WINDOWS',
]
},
{
@@ -124,6 +126,7 @@ module.exports = {
'TERMS',
'HOW',
'PATCHEXPLAIN',
'CLI',
]
},

65
docs/ACCEL.md Normal file
View File

@@ -0,0 +1,65 @@
# Working Around Legacy Acceleration Issues
* [Downloading older non-Metal Apps](#downloading-older-non-metal-apps)
* [Unable to run Zoom](#unable-to-run-zoom)
* [Unable to grant special permissions to apps (ie. Camera Access to Zoom)](#unable-to-grant-special-permissions-to-apps-ie-camera-access-to-zoom)
* [Keyboard Backlight broken](#keyboard-backlight-broken)
* [Photos and Maps Apps Heavily Distorted](#photos-and-maps-apps-heavily-distorted)
* [Cannot press "Done" when editing a Sidebar Widget](#cannot-press-done-when-editing-a-sidebar-widget)
* [Wake from sleep heavily distorted on AMD/ATI in macOS 11.3 and newer](#wake-from-sleep-heavily-distorted-on-amd-ati-in-macos-11-3-and-newer)
* [Unable to achieve GPU Acceleration on 2011 15" and 17" MacBook Pros](#unable-to-achieve-gpu-acceleration-on-2011-15-and-17-macbook-pros)
The below page is for users experiencing issues with their overall usage of macOS Big Sur and the Legacy Graphics Acceleration patches. Note that the following GPUs currently do not have acceleration support in Big Sur:
* AMD/ATI TeraScale 2 - HD5/6000 series
* Intel 3rd and 4th Gen - GMA series
## Downloading older non-Metal Apps
Many Apple apps now have direct reliance on Metal for proper functioning, however legacy builds of these apps still do work in Big Sur. See below for archive of many apps such as Pages, iMovie, GarageBand.
* [Apple Apps for Non-Metal Macs](https://archive.org/details/apple-apps-for-non-metal-macs)
Note: This archive assumes that you own these copies of these apps through the Mac App Store, Dortania does not condone piracy
## Unable to run Zoom
Currently Zoom relies partially on Metal and so needs a small binary patch. Dosdude1 has provided a nice script for this:
* [Zoom Non-Metal Fix](http://dosdude1.com/catalina/zoomnonmetal-new.command.zip)
## Unable to grant special permissions to apps (ie. Camera Access to Zoom)
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.
## Keyboard Backlight broken
Due to forcing `hidd` into spinning up with the fallback mode enabled, this can break the OS's recognition of backlight keyboards. Thankfully the drivers themselves still do operate so applications such as [LabTick](https://www.macupdate.com/app/mac/22151/lab-tick) are able to set the brightness manually.
## Photos and Maps Apps Heavily Distorted
Due to the Metal Backend, the enhanced color output of these apps seems to heavily break overall UI usage. To work around this, [users reported](https://forums.macrumors.com/threads/macos-11-big-sur-on-unsupported-macs-thread.2242172/post-29870324) forcing the color output of their monitor from Billions to Millions of colors helped greatly. Apps easily allowing this customization are [SwitchResX](https://www.madrau.com), [ResXreme](https://macdownload.informer.com/resxtreme/) and [EasyRes](http://easyresapp.com).
## Cannot press "Done" when editing a Sidebar Widget
To work around this, simply press Tab to hover over and press spacebar to simulate a click.
## Wake from sleep heavily distorted on AMD/ATI in macOS 11.3 and newer
Unfortunately a very well known issue the community is investigating, current known solution is to simply downgrade to 11.2.3 or older until a proper fix can be found.
In the event Apple removes 11.2.3 from their catalogue, we've provided a mirror below:
* [Install macOS 11.2.3 20D91](https://archive.org/details/install-mac-os-11.2.3-20-d-91)
## Unable to achieve GPU Acceleration on 2011 15" and 17" MacBook Pros
Currently OpenCore Legacy Patcher doesn't have support for the TeraScale 2 series dGPUs found in the 15" and 17" models. Currently the best way to achieve graphics acceleration is to simply disable the dGPU and force the iGPU always.
The best way to achieve this is to boot Recovery (or Single User Mode if the dGPU refuses to function at all) and run the following command:
```sh
nvram fa4ce28d-b62f-4c99-9cc3-6815686e30f9:gpu-power-prefs=%01%00%00%00
```
This will disable the dGPU and allow graphics acceleration in Big Sur. Note that external display outputs are directly routed to the dGPU and therefore can no longer be used. Solutions such as a [DisplayLink Adapters](https://www.displaylink.com/products/usb-adapters) can work around this limitation.

View File

@@ -2,20 +2,23 @@
With OpenCore Legacy Patcher we recommend users go through the below table to understand what the benefits and drawbacks are compared to other patchers. There are positive and negatives to each and we feel transparency is most important when patching another users machine. There should be no grey areas where users may be mislead.
* Note: [Patched Sur](https://github.com/BenSova/Patched-Sur) and [MicropatcherAutomator](https://github.com/moosethegoose2213/automator-for-barrykn-micropatcher) are iterations of [BarryKN's micropatcher](https://github.com/barrykn/big-sur-micropatcher) and therefore share many of the same benefits and limitations. Patched Sur is used for this comparison as it's the most common form of BarryKN's patcher users will find.
| Features | [OpenCore Legacy Patcher](https://github.com/dortania/OpenCore-Legacy-Patcher/) | [Patched Sur](https://github.com/BenSova/Patched-Sur) |
| :--- | :--- | :--- |
| Over The Air Updates | <span style="color:#30BCD5">Native System Preferences, additionally supports Deltas (~2GB) for Metal GPUs</span> | <span style="color:red">Inside Patcher Sur app (~12GB), only available when InstallAssistants release</span> |
| Over The Air Updates | <span style="color:#30BCD5">Native System Preferences, additionally supports Deltas (~2GB) for Metal GPUs</span> | <span style="color:red">Inside Patcher Sur app (~12GB), only available when InstallAssistants release.</span> InstallAssistants generally available same day as System Preference updates, however developer betas will lag behind by 1 day compared to OTAs |
| FileVault | <span style="color:#30BCD5">Supported on Metal GPUs</span> | <span style="color:red">Not supported</span> |
| System Integrity Protection | <span style="color:#30BCD5">Fully enabled on Metal GPUs</span> | <span style="color:red">Disabled for early 2013 and older</span> |
| System Integrity Protection | <span style="color:#30BCD5">Fully enabled on Metal GPUs</span> | <span style="color:red">Disabled for early 2013 and older during the patching process and first boot afterwards, otherwise enabled</span> |
| APFS Snapshots | <span style="color:#30BCD5">Fully enabled</span> | <span style="color:red">Disabled</span> |
| User facing | <span style="color:red">TUI interface</span> | <span style="color:#30BCD5">SwiftUI interface, more user friendly</span> |
| Supported OSes | <span style="color:#30BCD5">10.7-11</span> | <span style="color:red">10.15-11</span> |
| Firmware Patching | <span style="color:#30BCD5">None required</span> | <span style="color:red">Required for models without native APFS support</span> |
| BootCamp Switching | <span style="color:red">Requires EFI Conversion for Start Disk support, otherwise still supported</span> | <span style="color:#30BCD5">Native</span> |
| Brightness Control on Legacy GPUs | <span style="color:#30BCD5">Supported</span> | <span style="color:#30BCD5">Supported</span> |
| Legacy GPU Acceleration | <span style="color:#30BCD5">In active development</span>, see Acceleration Progress Tracker: [Link](https://github.com/dortania/OpenCore-Legacy-Patcher/issues/108) | <span style="color:red">Currently not researching</span> |
| WPA Wifi Support | <span style="color:#30BCD5">Native, stable</span> | <span style="color:red">Unstable</span> |
| El Capitan-era Wifi cards | <span style="color:#30BCD5">Supported</span> | <span style="colorred">Not supported</span> |
| WPA Wireless Support | <span style="color:#30BCD5">Supported</span> | <span style="color:red">Minority may experience issues on early 2013 and older Models</span> |
| Personal Hotspot Support | <span style="color:#30BCD5">Native</span> | <span style="color:red">Often requires extra steps to achieve on early 2013 and older Models</span> |
| HEVC/H.265 Support for Mac Pros and iMacs with Polaris+ GPUs | <span style="color:#30BCD5">Supported</span> | <span style="color:red">Not supported</span> |
| Big Sur-styled Boot Picker | <span style="color:#30BCD5">Available</span> | <span style="color:red">Not available</span> |
| El Capitan-era Wifi cards | <span style="color:#30BCD5">Supported</span> | <span style="color:red">Not supported</span> |
| Hibernation Support | <span style="color:#30BCD5">Supports 3rd party SATA SSDs in addition to stock models</span> | <span style="color:red">Only supports stock drives</span> |
| Big Sur-styled Boot Picker | <span style="color:#30BCD5">Available</span>, though as a shim to the original boot picker | <span style="color:red">Not available</span> |
| Hibernation Support | <span style="color:#30BCD5">Supports 3rd party SATA SSDs on 2011 and older models in addition to stock drives</span> | <span style="color:red">Only supports stock drives on 2011 and older models</span> |
| Sidecar Support | <span style="color:#30BCD5">Supports any Mac with Metal Intel iGPU</span>, artifacting way exhibited on high movement screen content | <span style="color:red">Not supported at all</span> |

View File

@@ -2,7 +2,7 @@
Now we finally get to boot OpenCore!
Reboot machine while holding `Option` to select the EFI Boot entry with the OpenCore icon:
Reboot machine while holding `Option` to select the EFI Boot entry with the OpenCore icon (holding the `Control` key will make this the default boot entry):
* This will be the Mac Boot Picker
@@ -19,4 +19,4 @@ After plenty of verbose booting, you will reach the installer screen! From there
* [OpenCore Legacy Patcher Boot Process](https://www.youtube.com/watch?v=AN3zsbQV_n4)
# Once installed and booting, head to [Post-Installation](./POST-INSTALL.md)
# Once installed and booting, head to [Post-Installation](./POST-INSTALL.md)

41
docs/CLI.md Normal file
View File

@@ -0,0 +1,41 @@
# Command Line Args
With OpenCore Legacy Patcher, we include an extra binary called [OCLP-CLI](https://github.com/dortania/OpenCore-Legacy-Patcher/releases/). The purpose of this binary is to easily run our OpenCore build process for other programs to hook onto. Below is documentation on currently supported arguments.
### Build Arguments
* **--build**: Build OpenCore
* **--model xxxx**: override default model detection
* ex. **--model iMac11,2**
* **--metal_gpu xxxx**: override default GPU detection (ie. Nvidia, AMD)
* **--metal_gpu Nvidia**
* **--smbios_spoof xxxx**: set spoofing mode, defaults to Minimal if no arg provided (ie. Minimal, Moderate, Advanced)
* ex. **--smbios_spoof Moderate**
* **--verbose**: enable verbose booting
* **--debug_oc**: enable debug OpenCore
* **--debug_kext**: enable debug kexts
* **--skip_wifi**: skip wifi patch
* **--hide_picker**: hide OpenCore's picker
* **--disable_sip**: disables SIP
* **--disable_smb**: disables SecureBootModel
* **--vault**: enable OpenCore vaulting
Example usage:
```bash
./OCLP-CLI --build --verbose --debug_oc --debug_kext --model iMac11,2
```
Note, when building OpenCore the output folder will be next to the OCLP binary as OpenCore-RELEASE or OpenCore-DEBUG folder.
### Patch System Arguments
* **--patch_sys_vol**: patches root volume with detected hardware
Example usage:
```bash
sudo ./OCLP-CLI --patch_sys_vol
```
Note, root volume patching needs to be run as sudo

View File

@@ -2,7 +2,7 @@
For those who've hit an odd bug and unsure if it's user error or patcher, the below will tell you how to get more verbose debug information as well as logs to help [file issues with us](https://github.com/dortania/OpenCore-Legacy-Patcher/issues)
* For users who are less experienced, we recommend asking on the [Unsupported Mac Discord Server](https://discord.gg/XbbWAsE) for help.
* For users who are less experienced, we recommend asking on the [OpenCore Patcher Paradise Discord Server](https://discord.gg/rqdPgH8xSN) for help.
## Debugging yourself

View File

@@ -4,10 +4,14 @@ OpenCore Legacy Patcher is a hobby project for us developers, and while we love
The best way to support us in all honesty is to donate any old hardware you no longer need, as this allows us to have machines to test locally and push fixes much faster. While we appreciate cash donations, this makes it much more difficult for us to handle as an organization.
Main hardware we'd appreciate:
Main sections of help we'd appreciate:
* Any Mac you own
* Donating any Mac you own
* Does require SSE4,1 CPU to test on Sierra and newer however
* Donating any spare SATA SSDs
* Having extra SSDs on hand allows us to quickly and easily test specific builds of macOS without having to wipe drives and reinstall as much
* Aiding by buying items in our Amazon Wishlist
* Currently we have a few members within Dortania testing so we recommend messaging the email listed below to see which member at the time would something purchased the most
Additionally, hardware info dumps are greatly beneficial for us to determine what patches a machine might need:
@@ -15,7 +19,7 @@ Additionally, hardware info dumps are greatly beneficial for us to determine wha
* `File -> SaveAs` and open an issue on Github
* Note: We want IOReg dumps of hardware not running on OpenCore, instead running a clean, supported OS
If you have any legacy hardware you're willing to donate, please contact us at the following email:
If you have any legacy hardware you're willing to donate or what to buy us something, please contact us at the following email:
* khronokernel@icloud.com
@@ -25,8 +29,7 @@ Current hardware we own:
| :--- | :--- | :--- | :--- | :--- |
| MacBook7,1 | Penryn | GT320M | Dhinak | N/A |
| MacBook7,1 | Penryn | GT320M | Mykola | N/A |
| MacBookPro8,1 | Sandy Bridge | HD 3000 | Mykola | N/A |
| MacBookPro5,3 | Penryn | 9400M + 9600M | Dhinak | Display's partially broken |
| Macmini4,1 | Penryn | GT320M | Dhinak | N/A |
| iMac11,2 | Clarksdale | HD4670 | Mykola | N/A |
<!-- | MacBookPro5,3 | Penryn | 9400M + 9600M | Dhinak | Display's partially broken | -->
<!-- | Macmini4,1 | Penryn | GT320M | Dhinak | N/A | -->

View File

@@ -10,9 +10,13 @@ This patcher is made of multiple external applications from different people and
* [CPUFriend](https://github.com/acidanthera/CPUFriend/blob/master/LICENSE)
* [RestrictEvents](https://github.com/acidanthera/RestrictEvents/blob/master/LICENSE.txt)
* [NightShiftEnabler](https://github.com/cdf/NightShiftEnabler/blob/master/LICENSE.txt)
* [Innie](https://github.com/cdf/Innie/blob/master/LICENSE.txt)
* GPL 2.0
* [NVMeFix](https://github.com/acidanthera/NVMeFix/blob/master/LICENSE.txt)
* All rights reserved to respective authors
* [AAAMouSSE](https://forums.macrumors.com/threads/mp3-1-others-sse-4-2-emulation-to-enable-amd-metal-driver.2206682/) - Syncretic
* [telemetrap](https://forums.macrumors.com/threads/mp3-1-others-sse-4-2-emulation-to-enable-amd-metal-driver.2206682/post-28447707) - Syncretic
* [SidecarFixup](https://github.com/khronokernel/SidecarFixup) - Khronokernel
* Apple Binaries - Apple Inc.
Remaining files within OpenCore Legacy Patcher are copyrighted 2020-2021 Mykola Grymalyuk & Dhinak G, under the BSD-3 Clause license:

View File

@@ -20,8 +20,8 @@ Regarding OS support, see below:
| Support Entry | Supported OSes | Description | Comment |
| :--- | :--- | :--- | :--- |
| HostOS | macOS 10.9-11 | Refers to OSes where running OpenCore-Patcher.app are supported | Supports 10.7+ if [python 3.6 or higher](https://www.python.org/downloads/) is manually installed, simply run the `OpenCore-Patcher.command` located in the repo |
| TargetOS | macOS 11 | Refers to OSes that can be patched to run with OpenCore | Unofficially supports 10.4 and newer, no support provided via this patcher |
| HostOS | macOS 10.9 - macOS 11 | Refers to OSes where running OpenCore-Patcher.app are supported | Supports 10.7+ if [Python 3.6 or higher](https://www.python.org/downloads/) is manually installed, simply run the `OpenCore-Patcher.command` located in the repo |
| TargetOS | macOS 11 | Refers to OSes that can be patched to run with OpenCore | May support 10.4 and newer (in a potentially broken state). No support provided. |
### MacBook
@@ -30,10 +30,10 @@ Regarding OS support, see below:
| MacBook1,1 | Mid-2006 | <span style="color:red"> NO </span> | 32-Bit CPU limitation |
| MacBook2,1 | Late 2006 | ^^ | 32-Bit Firmware limitation |
| MacBook3,1 | Late 2007 | ^^ | ^^ |
| MacBook4,1 | Early 2008 | <span style="color:#30BCD5"> YES </span> | - No GPU Acceleration in Mavericks and newer<br/>- No Keyboard and Trackpad<br/>- No USB<br/>- No Ethernet) |
| MacBook5,1 | Late 2008 | ^^ | - No GPU Acceleration in Big Sur([#108](https://github.com/dortania/OpenCore-Legacy-Patcher/issues/108))<br/>- Trackpad is recognized as mouse |
| MacBook5,2 | Early 2009 | ^^ | - No GPU Acceleration in Big Sur([#108](https://github.com/dortania/OpenCore-Legacy-Patcher/issues/108))<br/>- Trackpad is recognized as mouse<br/>- Brightness control partially supported |
| MacBook6,1 | Late 2009 | ^^ | - No GPU Acceleration in Big Sur([#108](https://github.com/dortania/OpenCore-Legacy-Patcher/issues/108))<br/> |
| MacBook4,1 | Early 2008 | <span style="color:#30BCD5"> YES </span> | - No GPU Acceleration in Mavericks and newer<br/>- No Keyboard and Trackpad<br/>- No USB |
| MacBook5,1 | Late 2008 | ^^ | - GPU Acceleration in Public Beta, see current issues ([#108](https://github.com/dortania/OpenCore-Legacy-Patcher/issues/108))<br/> |
| MacBook5,2 | Early 2009 | ^^ | - GPU Acceleration in Public Beta, see current issues ([#108](https://github.com/dortania/OpenCore-Legacy-Patcher/issues/108))<br/>- Trackpad is recognized as mouse<br/>- Brightness control partially supported |
| MacBook6,1 | Late 2009 | ^^ | - GPU Acceleration in Public Beta, see current issues ([#108](https://github.com/dortania/OpenCore-Legacy-Patcher/issues/108))<br/> |
| MacBook7,1 | Mid-2010 | ^^ | ^^ |
### MacBook Air
@@ -41,7 +41,7 @@ Regarding OS support, see below:
| SMBIOS | Year | Supported | Comment |
| :--- | :--- | :--- | :--- |
| MacBookAir1,1 | Early 2008 | <span style="color:red"> NO </span> | Requires SSE4.1 CPU |
| MacBookAir2,1 | Late 2008 |<span style="color:#30BCD5"> YES </span> | No GPU Acceleration in Big Sur([#108](https://github.com/dortania/OpenCore-Legacy-Patcher/issues/108)) |
| MacBookAir2,1 | Late 2008 |<span style="color:#30BCD5"> YES </span> | GPU Acceleration in Public Beta, see current issues ([#108](https://github.com/dortania/OpenCore-Legacy-Patcher/issues/108)) |
| MacBookAir3,1 | Late 2010 | ^^ | ^^ |
| MacBookAir3,2 | ^^ | ^^ | ^^ |
| MacBookAir4,1 | Mid-2011 | ^^ | ^^ |
@@ -58,7 +58,7 @@ Regarding OS support, see below:
| MacBookPro2,1 | Late 2006 | ^^ | 32-Bit Firmware limitation |
| MacBookPro2,2 | Late 2006 | ^^ | ^^ |
| MacBookPro3,1 | Mid-2007 | ^^ | Requires SSE4.1 CPU |
| MacBookPro4,1 | Early 2008 | <span style="color:#30BCD5"> YES </span> | No GPU Acceleration in Big Sur([#108](https://github.com/dortania/OpenCore-Legacy-Patcher/issues/108)) |
| MacBookPro4,1 | Early 2008 | <span style="color:#30BCD5"> YES </span> | GPU Acceleration in Public Beta, see current issues ([#108](https://github.com/dortania/OpenCore-Legacy-Patcher/issues/108)) |
| MacBookPro5,1 | Late 2008 | ^^ | ^^ |
| MacBookPro5,2 | Early 2009 | ^^ | ^^ |
| MacBookPro5,3 | Mid-2009 | ^^ | ^^ |
@@ -81,7 +81,7 @@ Regarding OS support, see below:
| :--- | :--- | :--- | :--- |
| Macmini1,1 | Early 2006 | <span style="color:red"> NO </span> | 32-Bit CPU limitation |
| Macmini2,1 | Mid-2007 | ^^ | 32-Bit Firmware limitation |
| Macmini3,1 | Early 2009 | <span style="color:#30BCD5"> YES </span> | No GPU Acceleration in Big Sur([#108](https://github.com/dortania/OpenCore-Legacy-Patcher/issues/108)) |
| Macmini3,1 | Early 2009 | <span style="color:#30BCD5"> YES </span> | GPU Acceleration in Public Beta, see current issues ([#108](https://github.com/dortania/OpenCore-Legacy-Patcher/issues/108)) |
| Macmini4,1 | Mid-2010 | ^^ | ^^ |
| Macmini5,1 | Mid-2011 | ^^ | ^^ |
| Macmini5,2 | ^^ | ^^ | ^^ |
@@ -98,10 +98,10 @@ Regarding OS support, see below:
| iMac5,1 | Late 2006 | ^^ | 32-Bit Firmware limitation |
| iMac5,2 | ^^ | ^^ | ^^ |
| iMac6,1 | ^^ | ^^ | ^^ |
| iMac7,1 | Mid-2007 | <span style="color:#30BCD5"> YES </span> | - Requires an SSE4.1 CPU Upgrade<br/>- No GPU Acceleration in Big Sur([#108](https://github.com/dortania/OpenCore-Legacy-Patcher/issues/108))<br/>- Brightness control partially supported on Nvidia GPUs, AMD unsupported |
| iMac8,1 | Early 2008 | ^^ | - No GPU Acceleration in Big Sur([#108](https://github.com/dortania/OpenCore-Legacy-Patcher/issues/108)))<br/>- Brightness control partially supported on Nvidia GPUs, AMD unsupported |
| iMac7,1 | Mid-2007 | <span style="color:#30BCD5"> YES </span> | - Requires an [SSE4.1 CPU Upgrade](https://lowendmac.com/2018/penryn-t9300-9500-cpu-upgrades-for-the-2007-imac/)<br/>- GPU Acceleration in Public Beta, see current issues ([#108](https://github.com/dortania/OpenCore-Legacy-Patcher/issues/108))<br/>- Brightness control partially supported on Nvidia GPUs, AMD unsupported<br/>- Stock Bluetooth 2.0 card non-functional |
| iMac8,1 | Early 2008 | ^^ | - GPU Acceleration in Public Beta, see current issues ([#108](https://github.com/dortania/OpenCore-Legacy-Patcher/issues/108)))<br/>- Brightness control partially supported on Nvidia GPUs, AMD unsupported |
| iMac9,1 | Early 2009 | ^^ | ^^ |
| iMac10,1 | Late 2009 | ^^ | GPU is socketed, [recommend upgrading to Metal GPU](https://forums.macrumors.com/threads/2011-imac-graphics-card-upgrade.1596614/?post=17425857#post-17425857) |
| iMac10,1 | Late 2009 | ^^ | - GPU is socketed, [recommend upgrading to Metal GPU](https://forums.macrumors.com/threads/2011-imac-graphics-card-upgrade.1596614/?post=17425857#post-17425857) <br/>- GPU Acceleration in Public Beta, see current issues ([#108](https://github.com/dortania/OpenCore-Legacy-Patcher/issues/108)) |
| iMac11,1 | ^^ | ^^ | ^^ |
| iMac11,2 | Mid-2010 | ^^ | ^^ |
| iMac11,3 | ^^ | ^^ | ^^ |
@@ -114,7 +114,7 @@ Regarding OS support, see below:
| iMac14,2 | ^^ | ^^ | ^^ |
| iMac14,3 | ^^ | ^^ | ^^ |
* For iMac10,1 through iMac12,x, we highly recommend users upgrade the GPU to a Metal supported model. See here for more information: [iMac late 2009 to mid-2012 Graphics Card Upgrade Guide](https://forums.macrumors.com/threads/2011-imac-graphics-card-upgrade.1596614/?post=17425857#post-17425857)
* For iMac10,1 through iMac12,x, we highly recommend users upgrade the GPU to a Metal supported model. See here for more information: [iMac late 2009 to mid-2011 Graphics Card Upgrade Guide](https://forums.macrumors.com/threads/2011-imac-graphics-card-upgrade.1596614/?post=17425857#post-17425857)
### Mac Pro
@@ -135,4 +135,4 @@ Regarding OS support, see below:
| Xserve2,1 | Early 2008 | <span style="color:#30BCD5"> YES </span> | <span style="color:green"> Everything is supported as long as GPU is Metal capable </span> |
| Xserve3,1 | Early 2009 | ^^ | ^^ |
# Once you've verified your hardware is supported, head to [Download and build macOS Installers](./INSTALLER.md)
# Once you've verified your hardware is supported, head to [Download and build macOS Installers](./INSTALLER.md)

View File

@@ -2,6 +2,7 @@
* [Booting without USB drive](#booting-without-usb-drive)
* [Booting seamlessly without Verbose or OpenCore Picker](#booting-seamlessly-without-verbose-or-opencore-picker)
* [Applying Post Install Volume Patches](#applying-post-install-volume-patches)
## Booting without USB drive
@@ -27,9 +28,21 @@ Here you can change different patcher settings, however the main interest is:
Once you've toggled them both off, build your OpenCore EFI once again and install to your desired drive. Now to show the OpenCore selector, you can simply hold down the "ESC" key while clicking on EFI boot, then you can release the "ESC" key when you see the cursor arrow at the top left.
**Note**: For users who need Post-Install Volume patches for Audio support, you **must** disable the following settings in "Patcher Settings" when building and installing your new OpenCore:
## Applying Post Install Volume Patches
**Note**: For users who need Post-Install Volume patches for legacy video acceleration support, you **must** disable the following settings in "Patcher Settings" when building and installing your new OpenCore:
* SIP: Disabled
* SecureBootModel: Disabled
Once set, rebuild OpenCore, install to drive and reboot. Then, Post-Install Volume patches will run just fine
Once set, rebuild OpenCore, install to drive and reboot. Then, Post-Install Volume patches will run just fine
To apply the Post-Install Volume patches [to test out the Beta Graphics Acceleration Patches system](https://github.com/dortania/OpenCore-Legacy-Patcher/issues/108), select option #3 as shown below:
![](../images/root-patch.png)
And go ahead to option #1 and let the OCLP patcher apply the needed legacy video patches.
![](../images/root-patcher-2.png)
Reboot your system and check out the now working graphics acceleration on your legacy system. This is still Beta software.

View File

@@ -5,12 +5,20 @@ This is a sophisticated boot loader used to inject and patch data in memory, ins
* System Integrity Protection, FileVault 2, .im4m Secure Boot and Vaulting
* Native OTA OS DELTA updates on all Macs
* Recovery OS, Safe Mode and Single-user Mode booting
* WPA Wifi and Personal Hotspot support
While many PC users from the Hackintosh community are familiar with OpenCore, OpenCore was designed as Mac and PC agnostic ensuring both platforms can use it easily. And with OpenCore Legacy Patcher, we help automate the process making running with OpenCore that much easier.
For advanced troubleshooting, we highly recommend users check out the [Unsupported Mac Discord Server](https://discord.gg/XbbWAsE) as this is generally the quickest way to get a hold of us developers and get help from the community.
For advanced troubleshooting, we highly recommend users check out the [OpenCore Patcher Paradise Discord Server](https://discord.gg/rqdPgH8xSN) as this is generally the quickest way to get a hold of us developers and get help from the community.
For those who wish to support this patcher, please see the [Supporting the Patcher page](./DONATE.md)
For those who wish to support this patcher, please see the [Supporting the Patcher page](./DONATE.md)
## Patcher Warnings
Since this patcher tricks macOS into thinking you're running a newer Mac, certain functionality may be broken:
* Boot Camp Assistant.app
* We recommend following our [guide on getting a UEFI Windows Install working](). Legacy MBR Based installs won't show up in OpenCore
## How do I get started?

View File

@@ -42,8 +42,8 @@ To aid users in troubleshooting, we've compiled a list of users who've reported
| MacBookPro5,5 | ^^ | ^^ | ^^ |
| MacBookPro6,1 | ^^ | ^^ | ^^ |
| MacBookPro6,2 | <span style="color:#30BCD5"> YES </span> | Jakeluke | - Stock model, dGPU broken <br/>- Patcher version unknown |
| MacBookPro7,1 | No reports | N/A | N/A |
| MacBookPro8,1 | <span style="color:#30BCD5"> YES </span> | AvaQueen | - Stock model <br/>- Patcher version 0.0.19 |
| MacBookPro7,1 | ^^ | fussel132 | - Stock model <br/>-Patcher version v0.1.2 |
| MacBookPro8,1 | ^^ | AvaQueen | - Stock model <br/>- Patcher version 0.0.19 |
| MacBookPro8,2 | ^^ | air.man | - Stock model, dGPU disabled <br/>- Patcher version 0.0.22 |
| ^^ | ^^ | cboukouv | - Stock model <br/>- Patcher version 0.0.19 |
| MacBookPro8,3 | No reports | N/A | N/A |
@@ -56,6 +56,7 @@ To aid users in troubleshooting, we've compiled a list of users who've reported
| ^^ | ^^ | CyberDroid1 | - Stock model<br/>- Patcher version 0.0.16 |
| ^^ | ^^ | woefi | - BCM94331CAX upgrade<br/>- Patcher version 0.0.13 |
| ^^ | ^^ | whgmkeller | - Stock model<br/>- Patcher version 0.0.11 |
| ^^ | ^^ | vinaypundith | - Patcher version 0.0.7 |
| MacBookPro10,1 | ^^ | traviswparker | - Stock model <br/>- Patcher version 0.0.14 |
| ^^ | ^^ | il-rollino | - Upgraded BCM94360CSAX <br/>- Patcher version 0.0.21 |
| MacBookPro10,2 | No reports | N/A | N/A |
@@ -86,6 +87,7 @@ To aid users in troubleshooting, we've compiled a list of users who've reported
| iMac11,1 | ^^ | internetzel | - Upgraded with RX580 mobile |
| iMac11,2 | ^^ | MykolaG | - Stock Model<br/>- Patcher version 0.0.21 |
| ^^ | ^^ | iMac-iPad | - Stock Model<br/>- Patcher version 0.0.21 |
| ^^ | ^^ | vinaypundith | - Patcher version 0.0.19 |
| iMac11,3 | ^^ | Ausdauersportler | - Upgraded with Polaris GPU<br/>- Upgraded BCM943602CDP<br/>- Patcher version 0.0.21 |
| iMac12,1 | ^^ | shnockdu | - Upgraded with Kepler GPU<br/>- Patcher version 0.0.21 |
| ^^ | ^^ | StephN999 | - Upgraded WX4150 GPU<br/>- Upgraded BCM94360CD<br/>- Patcher version 0.0.21 |
@@ -109,6 +111,7 @@ To aid users in troubleshooting, we've compiled a list of users who've reported
| ^^ | ^^ | AlexSakha67 | - Upgraded R9 280<br/>- Patcher version 0.0.20 |
| ^^ | ^^ | nekton1 | - Upgraded GTX 680<br/>- Patcher version 0.0.20 |
| ^^ | ^^ | Pri-est | - Patcher version 0.0.9 |
| ^^ | ^^ | vinaypundith | - Upgraded GTX 680<br/>- Upgraded BCM94360CD<br/>- Patcher version 0.0.6 |
| MacPro4,1 | ^^ | ^^ | - Patcher version 0.0.9 |
| MacPro5,1 | ^^ | woefi | - Upgraded with RX 580<br/>- Patcher version 0.0.21 |
| ^^ | ^^ | Mabrouk Oscar | - Patcher version 0.0.21 |

View File

@@ -3,7 +3,8 @@
To remove OpenCore is actually quite simply:
1. Remove OpenCore either from the USB or internal drive
* You'll need to mount the drive's EFI partition, and delete the EFI folder
* You'll need to mount the drive's EFI partition, and delete the EFI/OC folder as well as the System folder
* Note **do not** delete the entire EFI folder, this will likely break any existing Windows and Linux installations
* [See here for example how to mount](https://dortania.github.io/OpenCore-Post-Install/universal/oc2hdd.html)
2. Reset NVRAM
* [Reset NVRAM or PRAM on your Mac](https://support.apple.com/HT204063)

88
docs/WINDOWS.md Normal file
View File

@@ -0,0 +1,88 @@
# Installing UEFI Windows 10
* Guide based off of [cdf's Mac Pro Thread](https://forums.macrumors.com/threads/opencore-on-the-mac-pro.2207814/)
To install UEFI is actually super simple! All it requires is to boot Windows' Installer through OpenCore to force a UEFI setup. Here we'll be going a bit more step by step in the process including partitioning and such.
* Note: UEFI Windows is generally quite usable for Arrendale and newer models, however machines with Penryn CPUs may experience issues
* Recommended Models:
* MacBookAir4,x and newer
* MacBookPro8,x and newer
* Macmini5,x and newer
* iMac11,x and newer
* MacPro4,1 and newer
* Xserve3,1 and newer
Once you know your model is supported, you're good to go with the rest of this guide
## Disk Formatting
To start off, we'll need the following:
* An 8GB USB drive for the Windows Installer
* Minimum of 30GB of free space on whatever drive you want to install Windows too
First, lets format out drives as follows:
### USB Drive Formatting
Open Disk Utility in macOS and format the USB Drive as ExFat with MBR Scheme:
![](../images/windows-mbr-format.png)
### Disk Formatting
Next, grab the drive you wish to install Windows on and partition it as ExFat (If formatting entire drive, ensure it's GUID Partition Table):
![](../images/windows-partition-1.png)
If you plan to use the same hard drive for macOS and Windows, we recommend creating a dedicated partition just for OpenCore. This lets Windows have the ESP to itself and OpenCore can stay within it's own bubble.
Recommended size is 200MB and the partition format **must** be FAT32 for OpenCore to operate correctly. You will next want to install OpenCore onto the new partition, either moving from the ESP with [MountEFI](https://github.com/corpnewt/MountEFI) or rerunning the OpenCore-Patcher.app
* Note: For machines with dedicated drives for Windows, having different partitions for OpenCore is not required
* Note 2: We recommend uninstalling OpenCore from the ESP/EFI Partition when you create this new OpenCore partition to avoid confusion when selecting OpenCore builds in the Mac's boot picker
![](../images/windows-partition-2.png)
## Creating the Installer
First up, lets grab Windows's Installer at the below link:
* [Download Windows 10 Disc Image (ISO File)](https://www.microsoft.com/en-ca/software-download/windows10ISO)
Next, mount the Windows 10 ISO:
![](../images/windows-iso.png)
The open terminal and run `rsync` on the USB drive (replace CCCOMA_X64 with the mounted ISO's name, as well as replacing W10USB with your USB drive's name):
```
rsync -r -P /Volumes/CCCOMA_X64/ /Volumes/W10USB
```
![](../images/rsync-progess.png)
Command will take some time, so sit back and get some coffee. Once finished, the root of the USB drive should look as follows:
* Ensure that these folders and files are on the root, otherwise the USB will not boot
![](../images/windows-rsync-done.png)
Once done, lets reboot into OpenCore's Menu and you'll see a new Windows' entry:
* Note: Do not boot the installer outside of OpenCore as this will default back to the old MBR BIOS setup. Booting through OpenCore ensures Windows uses UEFI
![](../images/oc-windows.png)
From there, install Windows as normal and you'll get a new BootCamp entry in OpenCore's picker when done!
* Don't forget to run BootCamp's utilities installer as well to ensure Wifi and such are functioning correctly. This can be downloaded from the BootCamp Assistant app in macOS
![](../images/oc-windows-done.png)
## Troubleshooting
### iMac12,x Bluescreen after driver installation
Currently Intel's iGPU drivers for the HD 3000 series do not support UEFI booting in Windows. Recommended solution is to simply disable: [iMac 12,1 Windows 10 Boot Loop Fix Intel Graphics issue](https://zzq.org/?p=39)

BIN
images/oc-windows-done.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 62 KiB

BIN
images/oc-windows.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 62 KiB

BIN
images/root-patch.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 260 KiB

BIN
images/root-patcher-2.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 292 KiB

BIN
images/rsync-progess.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 838 KiB

BIN
images/windows-iso.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 432 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 613 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 302 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 308 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 456 KiB

BIN
images/windows-rsync.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 280 KiB

BIN
payloads/ACPI/SSDT-PCI.aml Normal file

Binary file not shown.

View File

@@ -0,0 +1,27 @@
/* Disable the non-existant Co-processor Bridge found on Arrendale, Lynnfield and Clarkdale Macs.
* IOPCIFamily in macOS 11.0 up-to 11.2 was unable to handle ACPI probing when device was not present,
* therefore kernel panicing the machine.
*
* This SSDT reports the device as disabled avoiding the probing.
* Not required for macOS 11.2 and newer, however recommended to alliviate pottential issues
*/
DefinitionBlock ("", "SSDT", 2, "DRTNIA", "CPBGoff", 0x00001000)
{
External (_SB_.CPBG, DeviceObj)
Scope (_SB.CPBG)
{
Method (_STA, 0, NotSerialized) // _STA: Status
{
If (_OSI ("Darwin"))
{
Store ("Disabling incompatible CPBG Device", Debug)
Return (Zero) // Disable only in macOS incase Windows or Linux requires
}
Else
{
Return (0x0F)
}
}
}
}

View File

@@ -0,0 +1,165 @@
/* Removes PCI0's 32-bit Allocation Limitation to resolve PCIe device support on Sandy and
* Ivy Bridge Macs, mainly applicable for Audio and eGPU support.
* BUF0 to BUF1 patch required to override exisiting BuffObj in DSDT.
*
* Source:
* https://egpu.io/forums/pc-setup/fix-dsdt-override-to-correct-error-12/
*/
DefinitionBlock ("", "SSDT", 2, "DRTNIA", "WinPCI", 0x00000000)
{
External (_SB_.PCI0, DeviceObj)
Scope (\_SB.PCI0)
{
Store ("Injecting new BUF0 BuffObj", Debug)
Name (BUF0, ResourceTemplate ()
{
WordBusNumber (ResourceProducer, MinFixed, MaxFixed, PosDecode,
0x0000, // Granularity
0x0000, // Range Minimum
0x00FF, // Range Maximum
0x0000, // Translation Offset
0x0100, // Length
,, )
DWordIO (ResourceProducer, MinFixed, MaxFixed, PosDecode, EntireRange,
0x00000000, // Granularity
0x00000000, // Range Minimum
0x00000CF7, // Range Maximum
0x00000000, // Translation Offset
0x00000CF8, // Length
,, , TypeStatic, DenseTranslation)
IO (Decode16,
0x0CF8, // Range Minimum
0x0CF8, // Range Maximum
0x01, // Alignment
0x08, // Length
)
DWordIO (ResourceProducer, MinFixed, MaxFixed, PosDecode, EntireRange,
0x00000000, // Granularity
0x00000D00, // Range Minimum
0x0000FFFF, // Range Maximum
0x00000000, // Translation Offset
0x0000F300, // Length
,, , TypeStatic, DenseTranslation)
DWordMemory (ResourceProducer, PosDecode, MinFixed, MaxFixed, Cacheable, ReadWrite,
0x00000000, // Granularity
0x000A0000, // Range Minimum
0x000BFFFF, // Range Maximum
0x00000000, // Translation Offset
0x00020000, // Length
,, , AddressRangeMemory, TypeStatic)
DWordMemory (ResourceProducer, PosDecode, MinFixed, MaxFixed, Cacheable, ReadWrite,
0x00000000, // Granularity
0x000C0000, // Range Minimum
0x000C3FFF, // Range Maximum
0x00000000, // Translation Offset
0x00004000, // Length
,, , AddressRangeMemory, TypeStatic)
DWordMemory (ResourceProducer, PosDecode, MinFixed, MaxFixed, Cacheable, ReadWrite,
0x00000000, // Granularity
0x000C4000, // Range Minimum
0x000C7FFF, // Range Maximum
0x00000000, // Translation Offset
0x00004000, // Length
,, , AddressRangeMemory, TypeStatic)
DWordMemory (ResourceProducer, PosDecode, MinFixed, MaxFixed, Cacheable, ReadWrite,
0x00000000, // Granularity
0x000C8000, // Range Minimum
0x000CBFFF, // Range Maximum
0x00000000, // Translation Offset
0x00004000, // Length
,, , AddressRangeMemory, TypeStatic)
DWordMemory (ResourceProducer, PosDecode, MinFixed, MaxFixed, Cacheable, ReadWrite,
0x00000000, // Granularity
0x000CC000, // Range Minimum
0x000CFFFF, // Range Maximum
0x00000000, // Translation Offset
0x00004000, // Length
,, , AddressRangeMemory, TypeStatic)
DWordMemory (ResourceProducer, PosDecode, MinFixed, MaxFixed, Cacheable, ReadWrite,
0x00000000, // Granularity
0x000D0000, // Range Minimum
0x000D3FFF, // Range Maximum
0x00000000, // Translation Offset
0x00004000, // Length
,, , AddressRangeMemory, TypeStatic)
DWordMemory (ResourceProducer, PosDecode, MinFixed, MaxFixed, Cacheable, ReadWrite,
0x00000000, // Granularity
0x000D4000, // Range Minimum
0x000D7FFF, // Range Maximum
0x00000000, // Translation Offset
0x00004000, // Length
,, , AddressRangeMemory, TypeStatic)
DWordMemory (ResourceProducer, PosDecode, MinFixed, MaxFixed, Cacheable, ReadWrite,
0x00000000, // Granularity
0x000D8000, // Range Minimum
0x000DBFFF, // Range Maximum
0x00000000, // Translation Offset
0x00004000, // Length
,, , AddressRangeMemory, TypeStatic)
DWordMemory (ResourceProducer, PosDecode, MinFixed, MaxFixed, Cacheable, ReadWrite,
0x00000000, // Granularity
0x000DC000, // Range Minimum
0x000DFFFF, // Range Maximum
0x00000000, // Translation Offset
0x00004000, // Length
,, , AddressRangeMemory, TypeStatic)
DWordMemory (ResourceProducer, PosDecode, MinFixed, MaxFixed, Cacheable, ReadWrite,
0x00000000, // Granularity
0x000E0000, // Range Minimum
0x000E3FFF, // Range Maximum
0x00000000, // Translation Offset
0x00004000, // Length
,, , AddressRangeMemory, TypeStatic)
DWordMemory (ResourceProducer, PosDecode, MinFixed, MaxFixed, Cacheable, ReadWrite,
0x00000000, // Granularity
0x000E4000, // Range Minimum
0x000E7FFF, // Range Maximum
0x00000000, // Translation Offset
0x00004000, // Length
,, , AddressRangeMemory, TypeStatic)
DWordMemory (ResourceProducer, PosDecode, MinFixed, MaxFixed, Cacheable, ReadWrite,
0x00000000, // Granularity
0x000E8000, // Range Minimum
0x000EBFFF, // Range Maximum
0x00000000, // Translation Offset
0x00004000, // Length
,, , AddressRangeMemory, TypeStatic)
DWordMemory (ResourceProducer, PosDecode, MinFixed, MaxFixed, Cacheable, ReadWrite,
0x00000000, // Granularity
0x000EC000, // Range Minimum
0x000EFFFF, // Range Maximum
0x00000000, // Translation Offset
0x00004000, // Length
,, , AddressRangeMemory, TypeStatic)
DWordMemory (ResourceProducer, PosDecode, MinFixed, MaxFixed, Cacheable, ReadWrite,
0x00000000, // Granularity
0x000F0000, // Range Minimum
0x000FFFFF, // Range Maximum
0x00000000, // Translation Offset
0x00010000, // Length
,, , AddressRangeMemory, TypeStatic)
DWordMemory (ResourceProducer, PosDecode, MinFixed, MaxFixed, Cacheable, ReadWrite,
0x00000000, // Granularity
0x00000000, // Range Minimum
0xFEAFFFFF, // Range Maximum
0x00000000, // Translation Offset
0xFEB00000, // Length
,, , AddressRangeMemory, TypeStatic)
DWordMemory (ResourceProducer, PosDecode, MinFixed, MaxFixed, Cacheable, ReadWrite,
0x00000000, // Granularity
0xFED40000, // Range Minimum
0xFED44FFF, // Range Maximum
0x00000000, // Translation Offset
0x00005000, // Length
,, , AddressRangeMemory, TypeStatic)
QWordMemory (ResourceProducer, PosDecode, MinFixed, MaxFixed, Cacheable, ReadWrite,
0x0000000000000000, // Granularity
0x0000000C20000000, // Range Minimum, set it to 48.5GB
0x0000000E0FFFFFFF, // Range Maximum, set it to 56.25GB
0x0000000000000000, // Translation Offset
0x00000001F0000000, // Length calculated by Range Max - Range Min.
,, , AddressRangeMemory, TypeStatic)
})
}
}

View File

@@ -23,6 +23,14 @@
<key>Path</key>
<string>SSDT-CPBG.aml</string>
</dict>
<dict>
<key>Enabled</key>
<false/>
<key>Comment</key>
<string>Patch Windows Audio support for Sandy and Ivy Bridge</string>
<key>Path</key>
<string>SSDT-PCI.aml</string>
</dict>
</array>
<key>Delete</key>
<array/>
@@ -38,7 +46,7 @@
<key>Count</key>
<integer>0</integer>
<key>Enabled</key>
<true/>
<false/>
<key>Find</key>
<data>WEhDMQ==</data>
<key>Limit</key>
@@ -68,7 +76,7 @@
<key>Count</key>
<integer>0</integer>
<key>Enabled</key>
<true/>
<false/>
<key>Find</key>
<data>RUhDMQ==</data>
<key>Limit</key>
@@ -98,7 +106,7 @@
<key>Count</key>
<integer>0</integer>
<key>Enabled</key>
<true/>
<false/>
<key>Find</key>
<data>RUhDMg==</data>
<key>Limit</key>
@@ -118,6 +126,36 @@
<key>TableSignature</key>
<data></data>
</dict>
<dict>
<key>Base</key>
<string>\_SB.PCI0</string>
<key>BaseSkip</key>
<integer>0</integer>
<key>Comment</key>
<string>BUF0 to BUF1</string>
<key>Count</key>
<integer>1</integer>
<key>Enabled</key>
<false/>
<key>Find</key>
<data>QlVGMA==</data>
<key>Limit</key>
<integer>0</integer>
<key>Mask</key>
<data></data>
<key>OemTableId</key>
<data></data>
<key>Replace</key>
<data>QlVGMQ==</data>
<key>ReplaceMask</key>
<data></data>
<key>Skip</key>
<integer>0</integer>
<key>TableLength</key>
<integer>0</integer>
<key>TableSignature</key>
<data>RFNEVA==</data>
</dict>
</array>
<key>Quirks</key>
<dict>
@@ -220,7 +258,7 @@
<key>MaxKernel</key>
<string></string>
<key>MinKernel</key>
<string>19.0.0</string>
<string>18.0.0</string>
<key>BundlePath</key>
<string>AppleALC.kext</string>
<key>ExecutablePath</key>
@@ -274,7 +312,7 @@
<key>MaxKernel</key>
<string></string>
<key>MinKernel</key>
<string>18.0.0</string>
<string></string>
<key>BundlePath</key>
<string>AAAMouSSE.kext</string>
<key>ExecutablePath</key>
@@ -534,24 +572,6 @@
<key>PlistPath</key>
<string>Contents/Info.plist</string>
</dict>
<dict>
<key>Arch</key>
<string>x86_64</string>
<key>Comment</key>
<string>VoodooHDA</string>
<key>Enabled</key>
<false/>
<key>MaxKernel</key>
<string></string>
<key>MinKernel</key>
<string>18.0.0</string>
<key>BundlePath</key>
<string>VoodooHDA.kext</string>
<key>ExecutablePath</key>
<string>Contents/MacOS/VoodooHDA</string>
<key>PlistPath</key>
<string>Contents/Info.plist</string>
</dict>
<dict>
<key>Arch</key>
<string>x86_64</string>
@@ -768,6 +788,60 @@
<key>PlistPath</key>
<string>Contents/Info.plist</string>
</dict>
<dict>
<key>Arch</key>
<string>x86_64</string>
<key>Comment</key>
<string>NVMeFix</string>
<key>Enabled</key>
<false/>
<key>MaxKernel</key>
<string></string>
<key>MinKernel</key>
<string></string>
<key>BundlePath</key>
<string>NVMeFix.kext</string>
<key>ExecutablePath</key>
<string>Contents/MacOS/NVMeFix</string>
<key>PlistPath</key>
<string>Contents/Info.plist</string>
</dict>
<dict>
<key>Arch</key>
<string>x86_64</string>
<key>Comment</key>
<string>SidecarFixup</string>
<key>Enabled</key>
<false/>
<key>MaxKernel</key>
<string></string>
<key>MinKernel</key>
<string>19.0.0</string>
<key>BundlePath</key>
<string>SidecarFixup.kext</string>
<key>ExecutablePath</key>
<string>Contents/MacOS/SidecarFixup</string>
<key>PlistPath</key>
<string>Contents/Info.plist</string>
</dict>
<dict>
<key>Arch</key>
<string>x86_64</string>
<key>Comment</key>
<string>Innie</string>
<key>Enabled</key>
<false/>
<key>MaxKernel</key>
<string></string>
<key>MinKernel</key>
<string></string>
<key>BundlePath</key>
<string>Innie.kext</string>
<key>ExecutablePath</key>
<string>Contents/MacOS/Innie</string>
<key>PlistPath</key>
<string>Contents/Info.plist</string>
</dict>
</array>
<key>Block</key>
<array/>
@@ -828,7 +902,7 @@
<key>Count</key>
<integer>1</integer>
<key>Enabled</key>
<true/>
<false/>
<key>Find</key>
<data>c21jLXZlcnNpb24=</data>
<key>Identifier</key>
@@ -1038,8 +1112,6 @@
</dict>
<key>4D1FDA02-38C7-4A6A-9CC6-4BCCA8B30102</key>
<dict>
<key>rtc-blacklist</key>
<data></data>
<key>OCLP-Version</key>
<string></string>
</dict>
@@ -1049,11 +1121,11 @@
<data>Rg==</data>
<key>boot-args</key>
<string>keepsyms=1 debug=0x100</string>
<key>run-efi-updater</key>
<string>No</string>
<key>csr-active-config</key>
<data>AAAAAA==</data>
</dict>
<key>FA4CE28D-B62F-4C99-9CC3-6815686E30F9</key>
<dict/>
</dict>
<key>Delete</key>
<dict>
@@ -1064,44 +1136,23 @@
</array>
<key>4D1FDA02-38C7-4A6A-9CC6-4BCCA8B30102</key>
<array>
<string>rtc-blacklist</string>
<string>OCLP-Version</string>
<string>revcpu</string>
<string>revcpuname</string>
</array>
<key>7C436110-AB2A-4BBB-A880-FE41995C9F82</key>
<array>
<string>boot-args</string>
</array>
<key>FA4CE28D-B62F-4C99-9CC3-6815686E30F9</key>
<array/>
</dict>
<key>LegacyEnable</key>
<false/>
<key>LegacyOverwrite</key>
<false/>
<key>LegacySchema</key>
<dict>
<key>7C436110-AB2A-4BBB-A880-FE41995C9F82</key>
<array>
<string>EFILoginHiDPI</string>
<string>EFIBluetoothDelay</string>
<string>LocationServicesEnabled</string>
<string>SystemAudioVolume</string>
<string>SystemAudioVolumeDB</string>
<string>SystemAudioVolumeSaved</string>
<string>bluetoothActiveControllerInfo</string>
<string>bluetoothInternalControllerInfo</string>
<string>flagstate</string>
<string>fmm-computer-name</string>
<string>nvda_drv</string>
<string>prev-lang:kbd</string>
</array>
<key>8BE4DF61-93CA-11D2-AA0D-00E098032B8C</key>
<array>
<string>Boot0080</string>
<string>Boot0081</string>
<string>Boot0082</string>
<string>BootNext</string>
<string>BootOrder</string>
</array>
</dict>
<dict/>
<key>WriteFlash</key>
<true/>
</dict>
@@ -1165,6 +1216,242 @@
<key>SystemUUID</key>
<string></string>
</dict>
<key>Memory</key>
<dict>
<key>DataWidth</key>
<integer>64</integer>
<key>ErrorCorrection</key>
<integer>3</integer>
<key>FormFactor</key>
<integer>9</integer>
<key>MaxCapacity</key>
<integer>137438953472</integer>
<key>TotalWidth</key>
<integer>64</integer>
<key>Type</key>
<integer>26</integer>
<key>TypeDetail</key>
<integer>128</integer>
<key>Devices</key>
<array>
<dict>
<key>AssetTag</key>
<string></string>
<key>BankLocator</key>
<string></string>
<key>DeviceLocator</key>
<string>Slot 1</string>
<key>Manufacturer</key>
<string>Acidanthera</string>
<key>PartNumber</key>
<string>M00001-4GB</string>
<key>SerialNumber</key>
<string>AAA000000001</string>
<key>Size</key>
<integer>131072</integer>
<key>Speed</key>
<integer>5733</integer>
</dict>
<dict>
<key>AssetTag</key>
<string></string>
<key>BankLocator</key>
<string></string>
<key>DeviceLocator</key>
<string>Slot 2</string>
<key>Manufacturer</key>
<string>Acidanthera</string>
<key>PartNumber</key>
<string>M00001-4GB</string>
<key>SerialNumber</key>
<string>AAA00000000X</string>
<key>Size</key>
<integer>131072</integer>
<key>Speed</key>
<integer>5733</integer>
</dict>
<dict>
<key>AssetTag</key>
<string></string>
<key>BankLocator</key>
<string></string>
<key>DeviceLocator</key>
<string>Slot 3</string>
<key>Manufacturer</key>
<string>Acidanthera</string>
<key>PartNumber</key>
<string>M00001-4GB</string>
<key>SerialNumber</key>
<string>AAA000000002</string>
<key>Size</key>
<integer>131072</integer>
<key>Speed</key>
<integer>5733</integer>
</dict>
<dict>
<key>AssetTag</key>
<string></string>
<key>BankLocator</key>
<string></string>
<key>DeviceLocator</key>
<string>Slot 4</string>
<key>Manufacturer</key>
<string>Acidanthera</string>
<key>PartNumber</key>
<string>M00001-4GB</string>
<key>SerialNumber</key>
<string>AAA00000000X</string>
<key>Size</key>
<integer>131072</integer>
<key>Speed</key>
<integer>5733</integer>
</dict>
<dict>
<key>AssetTag</key>
<string></string>
<key>BankLocator</key>
<string></string>
<key>DeviceLocator</key>
<string>Slot 5</string>
<key>Manufacturer</key>
<string>Acidanthera</string>
<key>PartNumber</key>
<string>M00001-4GB</string>
<key>SerialNumber</key>
<string>AAA000000002</string>
<key>Size</key>
<integer>131072</integer>
<key>Speed</key>
<integer>5733</integer>
</dict>
<dict>
<key>AssetTag</key>
<string></string>
<key>BankLocator</key>
<string></string>
<key>DeviceLocator</key>
<string>Slot 6</string>
<key>Manufacturer</key>
<string>Acidanthera</string>
<key>PartNumber</key>
<string>M00001-4GB</string>
<key>SerialNumber</key>
<string>AAA00000000X</string>
<key>Size</key>
<integer>131072</integer>
<key>Speed</key>
<integer>5733</integer>
</dict>
<dict>
<key>AssetTag</key>
<string></string>
<key>BankLocator</key>
<string></string>
<key>DeviceLocator</key>
<string>Slot 7</string>
<key>Manufacturer</key>
<string>Acidanthera</string>
<key>PartNumber</key>
<string>M00001-4GB</string>
<key>SerialNumber</key>
<string>AAA000000001</string>
<key>Size</key>
<integer>131072</integer>
<key>Speed</key>
<integer>5733</integer>
</dict>
<dict>
<key>AssetTag</key>
<string></string>
<key>BankLocator</key>
<string></string>
<key>DeviceLocator</key>
<string>Slot 8</string>
<key>Manufacturer</key>
<string>Acidanthera</string>
<key>PartNumber</key>
<string>M00001-4GB</string>
<key>SerialNumber</key>
<string>AAA00000000X</string>
<key>Size</key>
<integer>131072</integer>
<key>Speed</key>
<integer>5733</integer>
</dict>
<dict>
<key>AssetTag</key>
<string></string>
<key>BankLocator</key>
<string></string>
<key>DeviceLocator</key>
<string>Slot 9</string>
<key>Manufacturer</key>
<string>Acidanthera</string>
<key>PartNumber</key>
<string>M00001-4GB</string>
<key>SerialNumber</key>
<string>AAA00000000X</string>
<key>Size</key>
<integer>131072</integer>
<key>Speed</key>
<integer>5733</integer>
</dict>
<dict>
<key>AssetTag</key>
<string></string>
<key>BankLocator</key>
<string></string>
<key>DeviceLocator</key>
<string>Slot 10</string>
<key>Manufacturer</key>
<string>Acidanthera</string>
<key>PartNumber</key>
<string>M00001-4GB</string>
<key>SerialNumber</key>
<string>AAA00000000X</string>
<key>Size</key>
<integer>131072</integer>
<key>Speed</key>
<integer>5733</integer>
</dict>
<dict>
<key>AssetTag</key>
<string></string>
<key>BankLocator</key>
<string></string>
<key>DeviceLocator</key>
<string>Slot 11</string>
<key>Manufacturer</key>
<string>Acidanthera</string>
<key>PartNumber</key>
<string>M00001-4GB</string>
<key>SerialNumber</key>
<string>AAA00000000X</string>
<key>Size</key>
<integer>131072</integer>
<key>Speed</key>
<integer>5733</integer>
</dict>
<dict>
<key>AssetTag</key>
<string></string>
<key>BankLocator</key>
<string></string>
<key>DeviceLocator</key>
<string>Slot 12</string>
<key>Manufacturer</key>
<string>Acidanthera</string>
<key>PartNumber</key>
<string>M00001-4GB</string>
<key>SerialNumber</key>
<string>AAA00000000X</string>
<key>Size</key>
<integer>131072</integer>
<key>Speed</key>
<integer>5733</integer>
</dict>
</array>
</dict>
<key>PlatformNVRAM</key>
<dict>
<key>BID</key>
@@ -1189,7 +1476,7 @@
<key>BIOSVendor</key>
<string></string>
<key>BIOSVersion</key>
<string>9999.999.999.999.999</string>
<string></string>
<key>BoardAssetTag</key>
<string></string>
<key>BoardLocationInChassis</key>
@@ -1244,7 +1531,7 @@
<key>UpdateNVRAM</key>
<false/>
<key>UpdateSMBIOS</key>
<true/>
<false/>
<key>UpdateSMBIOSMode</key>
<string>Create</string>
<key>UseRawUuidEncoding</key>
@@ -1272,7 +1559,7 @@
<key>AppleEvent</key>
<string>Builtin</string>
<key>CustomDelays</key>
<string>Disabled</string>
<false/>
<key>KeyInitialDelay</key>
<integer>0</integer>
<key>KeySubsequentDelay</key>
@@ -1287,7 +1574,7 @@
<key>AudioCodec</key>
<integer>0</integer>
<key>AudioDevice</key>
<string>PciRoot(0x0)/Pci(0x1b,0x0)</string>
<string></string>
<key>AudioOut</key>
<integer>0</integer>
<key>AudioSupport</key>
@@ -1322,7 +1609,7 @@
<key>PointerSupport</key>
<false/>
<key>PointerSupportMode</key>
<string>ASUS</string>
<string></string>
<key>TimerResolution</key>
<integer>50000</integer>
</dict>
@@ -1396,14 +1683,20 @@
<dict>
<key>ActivateHpetSupport</key>
<false/>
<key>EnableVectorAcceleration</key>
<true/>
<key>DisableSecurityPolicy</key>
<false/>
<key>ExitBootServicesDelay</key>
<integer>0</integer>
<key>ForgeUefiSupport</key>
<false/>
<key>IgnoreInvalidFlexRatio</key>
<false/>
<key>ReleaseUsbOwnership</key>
<false/>
<key>ReloadOptionRoms</key>
<false/>
<key>RequestBootVarRouting</key>
<true/>
<key>TscSyncTimeout</key>

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@@ -764,7 +764,7 @@
<key>model</key>
<string>XXerve3,1</string>
</dict>
<key>iMac7,1</key>
<key>#iMac7,1</key>
<dict>
<key>CFBundleIdentifier</key>
<string>com.apple.driver.AppleUSBHostMergeProperties</string>
@@ -2860,6 +2860,28 @@
<key>model</key>
<string>XacPro3,1</string>
</dict>
<key>MacPro3,1-UHC3</key>
<dict>
<key>CFBundleIdentifier</key>
<string>com.apple.driver.AppleUSBHostMergeProperties</string>
<key>IOClass</key>
<string>AppleUSBHostMergeProperties</string>
<key>IONameMatch</key>
<string>UHC3</string>
<key>IOProviderClass</key>
<string>AppleUSBUHCIPCI</string>
<key>IOProviderMergeProperties</key>
<dict>
<key>kUSBMuxEnabled</key>
<false/>
<key>port-count</key>
<data>AAAAAA==</data>
<key>ports</key>
<dict/>
</dict>
<key>model</key>
<string>MacPro3,1</string>
</dict>
<key>MacPro4,1-EHC1</key>
<dict>
<key>CFBundleIdentifier</key>
@@ -3505,7 +3527,7 @@
<key>Tunnel Endpoint Device Vendor ID</key>
<data>AQAAAA==</data>
</dict>
<key>iMac7,1-EHC1</key>
<key>#iMac7,1-EHC1</key>
<dict>
<key>CFBundleIdentifier</key>
<string>com.apple.driver.AppleUSBHostMergeProperties</string>
@@ -3568,7 +3590,7 @@
<key>model</key>
<string>iXac7,1</string>
</dict>
<key>iMac7,1-EHC2</key>
<key>#iMac7,1-EHC2</key>
<dict>
<key>CFBundleIdentifier</key>
<string>com.apple.driver.AppleUSBHostMergeProperties</string>
@@ -3617,6 +3639,28 @@
<key>model</key>
<string>iXac7,1</string>
</dict>
<key>iMac7,1-UHC4</key>
<dict>
<key>CFBundleIdentifier</key>
<string>com.apple.driver.AppleUSBHostMergeProperties</string>
<key>IOClass</key>
<string>AppleUSBHostMergeProperties</string>
<key>IONameMatch</key>
<string>UHC4</string>
<key>IOProviderClass</key>
<string>AppleUSBUHCIPCI</string>
<key>IOProviderMergeProperties</key>
<dict>
<key>kUSBMuxEnabled</key>
<false/>
<key>port-count</key>
<data>AAAAAA==</data>
<key>ports</key>
<dict/>
</dict>
<key>model</key>
<string>iMac7,1</string>
</dict>
<key>iMac8,1-EHC1</key>
<dict>
<key>CFBundleIdentifier</key>
@@ -5417,7 +5461,7 @@
<key>model</key>
<string>Xacmini4,1</string>
</dict>
<key>iMac7,1-OHC1</key>
<key>#iMac7,1-OHC1</key>
<dict>
<key>CFBundleIdentifier</key>
<string>com.apple.driver.AppleUSBHostMergeProperties</string>
@@ -5459,7 +5503,7 @@
<key>model</key>
<string>iXac9,1</string>
</dict>
<key>iMac7,1-OHC2</key>
<key>#iMac7,1-OHC2</key>
<dict>
<key>CFBundleIdentifier</key>
<string>com.apple.driver.AppleUSBHostMergeProperties</string>

Binary file not shown.