mirror of
https://github.com/dortania/OpenCore-Legacy-Patcher.git
synced 2026-04-15 21:28:55 +10:00
Compare commits
442 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
e31519ac96 | ||
|
|
49fa20ecc3 | ||
|
|
3364ed702a | ||
|
|
32a0289af3 | ||
|
|
a3208acbfe | ||
|
|
983a7bf8d3 | ||
|
|
5d85a98637 | ||
|
|
ba2149407d | ||
|
|
458a2a406a | ||
|
|
374263f926 | ||
|
|
1b5fb1cef6 | ||
|
|
e7897ae857 | ||
|
|
b34239fb8e | ||
|
|
53ea72ed93 | ||
|
|
462e268d0d | ||
|
|
df709afa8d | ||
|
|
7b332e87c4 | ||
|
|
1b2eea6b50 | ||
|
|
0077d6267c | ||
|
|
b18236b237 | ||
|
|
c748b03544 | ||
|
|
81369d1bab | ||
|
|
bf3cc2c9d1 | ||
|
|
159f624060 | ||
|
|
8234738403 | ||
|
|
bf19adef35 | ||
|
|
6c2ed9ad5a | ||
|
|
ac4b796c95 | ||
|
|
afdf49a074 | ||
|
|
48c838d92b | ||
|
|
3e453f4789 | ||
|
|
c7b282b53c | ||
|
|
8c6c723e13 | ||
|
|
9dfe616af8 | ||
|
|
fb9634d29b | ||
|
|
4edbf9df60 | ||
|
|
cd45f7b04c | ||
|
|
6a5ac03c72 | ||
|
|
81ecf14bab | ||
|
|
d84990e91d | ||
|
|
d1726f95fc | ||
|
|
45332d2cf9 | ||
|
|
9e7ad38020 | ||
|
|
18805c8e78 | ||
|
|
98b7824619 | ||
|
|
438ae23ee7 | ||
|
|
0e22a9fb00 | ||
|
|
f78e8edf4e | ||
|
|
986878055f | ||
|
|
1da93b1ca0 | ||
|
|
950f645f02 | ||
|
|
f0c73164d9 | ||
|
|
5b3425d0c4 | ||
|
|
0e1aaf0bbd | ||
|
|
ff685e3504 | ||
|
|
bae1a19cfe | ||
|
|
76aa3bb80f | ||
|
|
ab4089c37b | ||
|
|
a907e05bca | ||
|
|
8944c789b0 | ||
|
|
600e71581c | ||
|
|
15e4650785 | ||
|
|
201bc141bb | ||
|
|
3c69cb6c65 | ||
|
|
9955b76c1e | ||
|
|
d77680f25c | ||
|
|
10354d717e | ||
|
|
0b51a7e9c8 | ||
|
|
372ad31d83 | ||
|
|
d4836514fd | ||
|
|
077af5afb3 | ||
|
|
6ca3e3524e | ||
|
|
8c646b7897 | ||
|
|
90a9ff8bb2 | ||
|
|
1198a37969 | ||
|
|
296978676a | ||
|
|
29fa274096 | ||
|
|
dfdf4529d2 | ||
|
|
28746bbe2b | ||
|
|
60c8cd12cd | ||
|
|
71a045fb13 | ||
|
|
10d11c3b1b | ||
|
|
f0c282cbbc | ||
|
|
7b0b9ea18b | ||
|
|
3f6d8c2283 | ||
|
|
ff5a7f3a35 | ||
|
|
515bd5950f | ||
|
|
b1d5851131 | ||
|
|
3298625351 | ||
|
|
ff4a19b268 | ||
|
|
9b4a1e992b | ||
|
|
fc59cfffa1 | ||
|
|
cf884532d7 | ||
|
|
0b1092d4b9 | ||
|
|
cddd7af701 | ||
|
|
6cb2141654 | ||
|
|
a5fcc35d3c | ||
|
|
8cc22fd88a | ||
|
|
66435c7c08 | ||
|
|
3569a265e6 | ||
|
|
3515d81c26 | ||
|
|
3416a4bbdd | ||
|
|
6a5787abae | ||
|
|
a104316037 | ||
|
|
cabdfe9a27 | ||
|
|
c535609a32 | ||
|
|
a095edc380 | ||
|
|
f1ac88d23b | ||
|
|
4a1918238e | ||
|
|
33653a7108 | ||
|
|
03f65d1766 | ||
|
|
cb7d62f2ee | ||
|
|
4139e555cc | ||
|
|
244d7cfbf9 | ||
|
|
d9dcfc6125 | ||
|
|
c41ffaafc2 | ||
|
|
741eda5fd8 | ||
|
|
1678005ceb | ||
|
|
df029110c7 | ||
|
|
59f43e0ea0 | ||
|
|
9bdc5148c4 | ||
|
|
3283cf514b | ||
|
|
991e449d26 | ||
|
|
f880751539 | ||
|
|
8eade66017 | ||
|
|
bb09b0432f | ||
|
|
eca98c65d3 | ||
|
|
3af8687f42 | ||
|
|
0af93e7936 | ||
|
|
b8904387f3 | ||
|
|
91b2a8b673 | ||
|
|
96748952d3 | ||
|
|
5eddcadaac | ||
|
|
43131150a4 | ||
|
|
5fefc7185e | ||
|
|
ff00e2683e | ||
|
|
e94264f039 | ||
|
|
7fc36ac098 | ||
|
|
8711b4069a | ||
|
|
70cb12413a | ||
|
|
a6dc58a81d | ||
|
|
f8da16bf0a | ||
|
|
e43fecb4bc | ||
|
|
d6ed03eb8a | ||
|
|
49e1fb1ad2 | ||
|
|
ab1dab7fe5 | ||
|
|
6c44472e00 | ||
|
|
d1f545e356 | ||
|
|
e61544dcb9 | ||
|
|
889293ca8a | ||
|
|
a280e22cdb | ||
|
|
bb26a5a5d8 | ||
|
|
ba543ca5cf | ||
|
|
592b0a707f | ||
|
|
8da87aea28 | ||
|
|
4842028516 | ||
|
|
8b6bcd47d2 | ||
|
|
081bb56dd0 | ||
|
|
418de07f84 | ||
|
|
18e3fa37ff | ||
|
|
c36296f2a0 | ||
|
|
8159761833 | ||
|
|
87526226cd | ||
|
|
1cf1e3491d | ||
|
|
9cf19319c5 | ||
|
|
8b47c4fe7b | ||
|
|
3b3f5b3290 | ||
|
|
637981b405 | ||
|
|
20b40f33ce | ||
|
|
9a388009cd | ||
|
|
a4bcefd748 | ||
|
|
7885673363 | ||
|
|
d7aa3889f9 | ||
|
|
4dc76e26fc | ||
|
|
648bb67b73 | ||
|
|
686698272b | ||
|
|
6349b64faf | ||
|
|
09b9194b91 | ||
|
|
827aa96168 | ||
|
|
02ae3c8393 | ||
|
|
8f6bd87721 | ||
|
|
cef684beb9 | ||
|
|
6c7c60fb62 | ||
|
|
1b786e57c3 | ||
|
|
35e6104786 | ||
|
|
ed7c0c6760 | ||
|
|
25522069dc | ||
|
|
cbbbe16031 | ||
|
|
8ed540c7b4 | ||
|
|
467016521f | ||
|
|
33d166a4f8 | ||
|
|
a03623e678 | ||
|
|
bb424e8ab9 | ||
|
|
9e98121e45 | ||
|
|
f7d842a7f4 | ||
|
|
a1981ab56d | ||
|
|
e820a9ecc8 | ||
|
|
b13d47df08 | ||
|
|
e6adcdabac | ||
|
|
3c4795fb47 | ||
|
|
aaf74b2b6a | ||
|
|
2c4b29400e | ||
|
|
98da3a16a8 | ||
|
|
b24ee0e38c | ||
|
|
f557b10c3c | ||
|
|
b876eda144 | ||
|
|
4c8e256e7e | ||
|
|
447afac6eb | ||
|
|
657fc97f4f | ||
|
|
1d8f87fb78 | ||
|
|
c6a34ddeb8 | ||
|
|
694d0397ea | ||
|
|
9cbc243581 | ||
|
|
04a83462c3 | ||
|
|
2e3152f23b | ||
|
|
ba1ac0501b | ||
|
|
3ce8b18ecb | ||
|
|
baaa897d10 | ||
|
|
86ffb83c86 | ||
|
|
db708022e9 | ||
|
|
cc2eebfd42 | ||
|
|
8490893960 | ||
|
|
15a5e54cbb | ||
|
|
1bc9f3d396 | ||
|
|
ca22da4ebb | ||
|
|
e609866c5e | ||
|
|
bb5673e770 | ||
|
|
024d41c946 | ||
|
|
44c4a488f4 | ||
|
|
5c09c10301 | ||
|
|
4f74629e3f | ||
|
|
56194be716 | ||
|
|
8cfa90f352 | ||
|
|
1064be45df | ||
|
|
0428244e60 | ||
|
|
135125bae6 | ||
|
|
120f893d1f | ||
|
|
a33c19448f | ||
|
|
b8e29eca28 | ||
|
|
d4873f8070 | ||
|
|
c42ec31415 | ||
|
|
8f251c1214 | ||
|
|
40aea143cf | ||
|
|
e6fc4f4a6e | ||
|
|
b5ebc7ffd7 | ||
|
|
21482eda88 | ||
|
|
e91148e534 | ||
|
|
c2c2ffc00b | ||
|
|
100c54a82c | ||
|
|
2b81e38ea8 | ||
|
|
db2721354c | ||
|
|
f21856a65b | ||
|
|
c7cd22bf65 | ||
|
|
3d8c523b7a | ||
|
|
11df8195ce | ||
|
|
cdc80ef550 | ||
|
|
85559d4d9e | ||
|
|
88ecd19369 | ||
|
|
22822be944 | ||
|
|
55607c5437 | ||
|
|
0459c0a5dc | ||
|
|
2626f9733d | ||
|
|
128e68d735 | ||
|
|
abc1ca5ec9 | ||
|
|
ed6fee1f94 | ||
|
|
edad35e1f5 | ||
|
|
f8615a8852 | ||
|
|
dec0873a41 | ||
|
|
16e29d3a1e | ||
|
|
fa7e51252d | ||
|
|
84abbb7c11 | ||
|
|
292e09a0d7 | ||
|
|
c5fd4036a7 | ||
|
|
4843ed92c9 | ||
|
|
f75fac14e6 | ||
|
|
ac055a633c | ||
|
|
0dc40318d0 | ||
|
|
84d0272eda | ||
|
|
4b35681b5f | ||
|
|
bbb5c06ddc | ||
|
|
df0c196a94 | ||
|
|
12f9482d3d | ||
|
|
5f7b836330 | ||
|
|
94af2350f4 | ||
|
|
7b758fcf15 | ||
|
|
fecf9502d0 | ||
|
|
4747c2619f | ||
|
|
4b187a045a | ||
|
|
eb9a24eee7 | ||
|
|
b3d2ac190c | ||
|
|
ce6805507d | ||
|
|
ad7d06d4b2 | ||
|
|
04dee1fcff | ||
|
|
3af65423c6 | ||
|
|
af6c98b54d | ||
|
|
eb9b137323 | ||
|
|
178c604507 | ||
|
|
88b660ecf8 | ||
|
|
3feb5a61f6 | ||
|
|
b8708ff193 | ||
|
|
8da945833c | ||
|
|
ee10c104b7 | ||
|
|
803a699658 | ||
|
|
88ee0e813e | ||
|
|
cc44024a8c | ||
|
|
880432970b | ||
|
|
5d6587100e | ||
|
|
df8d95b815 | ||
|
|
f1a868199e | ||
|
|
d0e77cca52 | ||
|
|
eaadaa2d45 | ||
|
|
4a5e3c89b6 | ||
|
|
a0eca53c58 | ||
|
|
8c092494a8 | ||
|
|
5f69a1c917 | ||
|
|
856ac19314 | ||
|
|
6c5aa244af | ||
|
|
f42bdcee03 | ||
|
|
b49db7e739 | ||
|
|
ec20d7b581 | ||
|
|
1c75353f27 | ||
|
|
b14ca8689a | ||
|
|
bd20cf6a1f | ||
|
|
b23e9c2eaa | ||
|
|
e625d9803b | ||
|
|
ae8bba5582 | ||
|
|
f19f08fc06 | ||
|
|
5fd17cc5e8 | ||
|
|
3c6d0de2e3 | ||
|
|
d3de15b594 | ||
|
|
b0db4739ad | ||
|
|
2584c16d41 | ||
|
|
b4caffe0d4 | ||
|
|
46734a7c5a | ||
|
|
484f434a67 | ||
|
|
033b577552 | ||
|
|
f1e2a320dc | ||
|
|
3885bf894a | ||
|
|
04ca447eb7 | ||
|
|
41486c0215 | ||
|
|
69035db2d7 | ||
|
|
c98021b14c | ||
|
|
b576e5a511 | ||
|
|
9b69700733 | ||
|
|
9d731c065e | ||
|
|
93aa69b0b0 | ||
|
|
3679324371 | ||
|
|
ebc6611f5c | ||
|
|
16ac5a6093 | ||
|
|
b1479fbc14 | ||
|
|
375b7c2fd2 | ||
|
|
95afb7d109 | ||
|
|
3956908482 | ||
|
|
e0eda1fa0c | ||
|
|
dc6b14f962 | ||
|
|
dd798c02d1 | ||
|
|
4fc0f4dee7 | ||
|
|
81379dc857 | ||
|
|
1d7eea068a | ||
|
|
0978bcbb87 | ||
|
|
2da88a22d7 | ||
|
|
ccb9aea1e6 | ||
|
|
6b8d1743b3 | ||
|
|
cf0f613a5f | ||
|
|
ba49f45c4c | ||
|
|
3e5ade8047 | ||
|
|
3e47853e75 | ||
|
|
d19f5ba72f | ||
|
|
4918873ad9 | ||
|
|
6ecb8e26c9 | ||
|
|
52ad1f7399 | ||
|
|
f6ee429c8e | ||
|
|
4de79ce633 | ||
|
|
d7c2904868 | ||
|
|
24eec279d8 | ||
|
|
d49575b22b | ||
|
|
3271bcf92f | ||
|
|
41514a35f5 | ||
|
|
8e1809cf3d | ||
|
|
98bc71e46a | ||
|
|
d1dd8a0e2e | ||
|
|
d20d9975c1 | ||
|
|
ecca9f2c72 | ||
|
|
88724c4950 | ||
|
|
fd48419cb2 | ||
|
|
ff5543f9dc | ||
|
|
0130fce0c6 | ||
|
|
d8258a73fd | ||
|
|
939e942f50 | ||
|
|
603aedb6ae | ||
|
|
05a51bf32e | ||
|
|
792a99ce04 | ||
|
|
a6fbbc0c44 | ||
|
|
9b7497946a | ||
|
|
9a68ce67eb | ||
|
|
a6ccd28671 | ||
|
|
f7f66cd732 | ||
|
|
9b316bbbca | ||
|
|
db39757655 | ||
|
|
88903e8edf | ||
|
|
dd968a3244 | ||
|
|
a42811b907 | ||
|
|
15aacddd23 | ||
|
|
f4d3154fd1 | ||
|
|
93e9a8f381 | ||
|
|
69ab0fd17b | ||
|
|
504cdc6214 | ||
|
|
d3b9b6e87a | ||
|
|
0a04c5c156 | ||
|
|
1799625f99 | ||
|
|
8f13906d2c | ||
|
|
771186e6cf | ||
|
|
da32e9d4e3 | ||
|
|
935b3819f0 | ||
|
|
1abe08bcac | ||
|
|
09779f62b3 | ||
|
|
abe865f999 | ||
|
|
f3734f9daa | ||
|
|
7bc993ccc9 | ||
|
|
ab3762e42e | ||
|
|
58ed1634db | ||
|
|
7d579a0942 | ||
|
|
4daa5c4755 | ||
|
|
00c89089c3 | ||
|
|
68f82e1993 | ||
|
|
356646725e | ||
|
|
608decc9de | ||
|
|
9eecbae6da | ||
|
|
3197510b72 | ||
|
|
4830d462aa | ||
|
|
fc1cb53c1d | ||
|
|
7446da8e1f | ||
|
|
04019798e9 | ||
|
|
20a900f052 | ||
|
|
df469be05f | ||
|
|
d42d2d09e9 | ||
|
|
f8c39e957e | ||
|
|
78760b8a08 | ||
|
|
276883059f | ||
|
|
cabb5da981 | ||
|
|
f8afde61fe | ||
|
|
95a802a402 |
2
.flake8
2
.flake8
@@ -1,4 +1,4 @@
|
||||
[flake8]
|
||||
ignore = E501
|
||||
extend-ignore = E501, E203
|
||||
per-file-ignores =
|
||||
Resources/Constants.py:E704
|
||||
34
.github/ISSUE_TEMPLATE/bug_report.md
vendored
34
.github/ISSUE_TEMPLATE/bug_report.md
vendored
@@ -1,34 +0,0 @@
|
||||
---
|
||||
name: Bug report
|
||||
about: Create a report to help notify of issues
|
||||
title: ''
|
||||
labels: ''
|
||||
assignees: ''
|
||||
|
||||
---
|
||||
|
||||
**Describe the bug**
|
||||
A clear and concise description of what the issue is.
|
||||
|
||||
**To Reproduce**
|
||||
Steps to reproduce the behavior:
|
||||
1. Open app or .command '...'
|
||||
2. Enter '....'
|
||||
3. See error
|
||||
|
||||
**Screenshots**
|
||||
If applicable, add screenshots to help explain your problem.
|
||||
|
||||
**Build Folder**
|
||||
If applicable, add the generated OpenCore Build to help explain your problem.
|
||||
|
||||
**Hardware (please complete the following information):**
|
||||
- OS Running (ie. macOS 10.15.7, Catalina)
|
||||
- OS Patching (ie. macOS 11.2.3, Big Sur)
|
||||
- Model Patching (ie. MacPro5,1)
|
||||
|
||||
For in-depth hardware logs, we highly encourage users to run [IORegistryExplorer](https://github.com/khronokernel/IORegistryClone/blob/master/ioreg-210.zip?raw=true) and send the output
|
||||
* ie. `File -> SaveAs`
|
||||
|
||||
**Additional context**
|
||||
Add any other context about the problem here.
|
||||
143
.github/ISSUE_TEMPLATE/bug_report.yml
vendored
Normal file
143
.github/ISSUE_TEMPLATE/bug_report.yml
vendored
Normal file
@@ -0,0 +1,143 @@
|
||||
name: Bug Report
|
||||
description: File a bug report
|
||||
title: "[Bug]: "
|
||||
labels: [bug]
|
||||
body:
|
||||
- type: markdown
|
||||
attributes:
|
||||
value: |
|
||||
Thanks for taking the time to fill out this bug report!
|
||||
- type: dropdown
|
||||
id: machine
|
||||
attributes:
|
||||
label: Machine Model
|
||||
description: What model was being patched?
|
||||
options:
|
||||
- MacBook4,1
|
||||
- MacBook5,1
|
||||
- MacBook5,2
|
||||
- MacBook6,1
|
||||
- MacBook7,1
|
||||
- MacBook8,1
|
||||
- MacBookAir2,1
|
||||
- MacBookAir3,1
|
||||
- MacBookAir3,2
|
||||
- MacBookAir4,1
|
||||
- MacBookAir4,2
|
||||
- MacBookAir5,1
|
||||
- MacBookAir5,2
|
||||
- MacBookAir6,1
|
||||
- MacBookAir6,2
|
||||
- MacBookPro4,1
|
||||
- MacBookPro5,1
|
||||
- MacBookPro5,2
|
||||
- MacBookPro5,3
|
||||
- MacBookPro5,4
|
||||
- MacBookPro5,5
|
||||
- MacBookPro6,1
|
||||
- MacBookPro6,2
|
||||
- MacBookPro7,1
|
||||
- MacBookPro8,1
|
||||
- MacBookPro8,2
|
||||
- MacBookPro8,3
|
||||
- MacBookPro9,1
|
||||
- MacBookPro9,2
|
||||
- MacBookPro10,1
|
||||
- MacBookPro10,2
|
||||
- MacBookPro11,1
|
||||
- MacBookPro11,2
|
||||
- MacBookPro11,3
|
||||
- Macmini3,1
|
||||
- Macmini4,1
|
||||
- Macmini5,1
|
||||
- Macmini5,2
|
||||
- Macmini5,3
|
||||
- Macmini6,1
|
||||
- Macmini6,2
|
||||
- iMac7,1
|
||||
- iMac8,1
|
||||
- iMac9,1
|
||||
- iMac10,1
|
||||
- iMac11,1
|
||||
- iMac11,2
|
||||
- iMac11,3
|
||||
- iMac12,1
|
||||
- iMac12,2
|
||||
- iMac13,1
|
||||
- iMac13,2
|
||||
- iMac13,3
|
||||
- iMac14,1
|
||||
- iMac14,2
|
||||
- iMac14,3
|
||||
- iMac14,4
|
||||
- iMac15,1
|
||||
- MacPro3,1
|
||||
- MacPro4,1
|
||||
- MacPro5,1
|
||||
- Xserve2,1
|
||||
- Xserve3,1
|
||||
- Other/Non-Applicable
|
||||
validations:
|
||||
required: true
|
||||
- type: dropdown
|
||||
id: version
|
||||
attributes:
|
||||
label: Application Version
|
||||
description: What build version of our software are you running?
|
||||
options:
|
||||
- Latest Build (nightly)
|
||||
- Latest Release
|
||||
validations:
|
||||
required: true
|
||||
- type: dropdown
|
||||
id: variant
|
||||
attributes:
|
||||
label: Application Variant
|
||||
description: What variant of our software are you running?
|
||||
options:
|
||||
- GUI (Graphical User Interface)
|
||||
- TUI (Text User Interface)
|
||||
- CLI (Command Line Interface)
|
||||
- Other/Non-Applicable
|
||||
validations:
|
||||
required: true
|
||||
- type: dropdown
|
||||
id: os-version
|
||||
attributes:
|
||||
label: What versions of macOS are you seeing the problem on?
|
||||
multiple: true
|
||||
options:
|
||||
- macOS 12, Monterey
|
||||
- macOS 11, Big Sur
|
||||
- macOS 10.15, Catalina
|
||||
- macOS 10.14, Mojave
|
||||
- macOS 10.13, High Sierra
|
||||
- macOS 10.12, Sierra
|
||||
- macOS 10.11, El Capitan
|
||||
- Other/Non-Applicable
|
||||
validations:
|
||||
required: true
|
||||
- type: dropdown
|
||||
id: where-issue
|
||||
attributes:
|
||||
label: Where does this issue happen?
|
||||
multiple: true
|
||||
options:
|
||||
- Between booting macOS and Login Screen
|
||||
- Within macOS (Before Logging in)
|
||||
- Within macOS (After Logging in)
|
||||
- Other/Non-Applicable
|
||||
validations:
|
||||
required: true
|
||||
- type: textarea
|
||||
id: what-happened
|
||||
attributes:
|
||||
label: What is the Isssue?
|
||||
description: Additionally, explain what you expected to happen?
|
||||
value: "Please clearly explain the issue"
|
||||
validations:
|
||||
required: true
|
||||
- type: textarea
|
||||
id: extra-info
|
||||
attributes:
|
||||
label: Any Additional Information
|
||||
1
.github/ISSUE_TEMPLATE/config.yml
vendored
Normal file
1
.github/ISSUE_TEMPLATE/config.yml
vendored
Normal file
@@ -0,0 +1 @@
|
||||
blank_issues_enabled: false
|
||||
33
.github/workflows/build-app-offline.yml
vendored
Normal file
33
.github/workflows/build-app-offline.yml
vendored
Normal file
@@ -0,0 +1,33 @@
|
||||
name: CI - Build Offline TUI
|
||||
|
||||
on:
|
||||
push:
|
||||
workflow_dispatch:
|
||||
release:
|
||||
types: [published]
|
||||
|
||||
jobs:
|
||||
build:
|
||||
name: Build Offline TUI
|
||||
runs-on: x86_64_mojave
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
- run: python3 create-offline-build.py
|
||||
- run: /Library/Frameworks/Python.framework/Versions/3.9/bin/pyinstaller OpenCore-Patcher.spec
|
||||
- run: ./after_pyinstaller.sh
|
||||
- run: 'codesign -s "Developer ID Application: Mykola Grymalyuk (S74BDJXQMD)" -v --force --deep --timestamp --entitlements entitlements.plist -o runtime "dist/OpenCore-Patcher.app"'
|
||||
- run: cd dist; zip -r ../OpenCore-Patcher-TUI-Offline.app.zip OpenCore-Patcher.app
|
||||
- name: Upload App to Artifacts
|
||||
uses: actions/upload-artifact@v2
|
||||
with:
|
||||
name: OpenCore-Patcher-TUI-Offline.app
|
||||
path: OpenCore-Patcher-TUI-Offline.app.zip
|
||||
|
||||
- name: Upload to Release
|
||||
if: github.event_name == 'release'
|
||||
uses: svenstaro/upload-release-action@e74ff71f7d8a4c4745b560a485cc5fdb9b5b999d
|
||||
with:
|
||||
repo_token: ${{ secrets.GITHUB_TOKEN }}
|
||||
file: OpenCore-Patcher-TUI.app.zip
|
||||
tag: ${{ github.ref }}
|
||||
file_glob: true
|
||||
31
.github/workflows/build-app.yml
vendored
31
.github/workflows/build-app.yml
vendored
@@ -1,4 +1,4 @@
|
||||
name: CI - Build App
|
||||
name: CI - Build TUI
|
||||
|
||||
on:
|
||||
push:
|
||||
@@ -8,38 +8,27 @@ on:
|
||||
|
||||
jobs:
|
||||
build:
|
||||
name: Build App
|
||||
runs-on: self-hosted
|
||||
name: Build TUI
|
||||
runs-on: x86_64_mojave
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
|
||||
# - name: Install Python Dependencies
|
||||
# run: |
|
||||
# python3 -m pip install -U pip
|
||||
# pip3 install pyinstaller
|
||||
|
||||
- run: pyinstaller OpenCore-Patcher.spec
|
||||
- run: /Library/Frameworks/Python.framework/Versions/3.9/bin/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"'
|
||||
|
||||
- run: cd dist; zip ../OpenCore-Patcher.zip OpenCore-Patcher; zip -r ../OpenCore-Patcher.app.zip OpenCore-Patcher.app
|
||||
- run: ./../sign-app.sh
|
||||
- name: Upload Binary to Artifacts
|
||||
uses: actions/upload-artifact@v2
|
||||
with:
|
||||
name: OpenCore-Patcher
|
||||
path: OpenCore-Patcher.zip
|
||||
- run: 'codesign -s "Developer ID Application: Mykola Grymalyuk (S74BDJXQMD)" -v --force --deep --timestamp --entitlements entitlements.plist -o runtime "dist/OpenCore-Patcher.app"'
|
||||
- run: cd dist; zip -r ../OpenCore-Patcher-TUI.app.zip OpenCore-Patcher.app
|
||||
- run: ./../sign-tui.sh
|
||||
- name: Upload App to Artifacts
|
||||
uses: actions/upload-artifact@v2
|
||||
with:
|
||||
name: OpenCore-Patcher.app
|
||||
path: OpenCore-Patcher.app.zip
|
||||
name: OpenCore-Patcher-TUI.app
|
||||
path: OpenCore-Patcher-TUI.app.zip
|
||||
|
||||
- name: Upload to Release
|
||||
if: github.event_name == 'release'
|
||||
uses: svenstaro/upload-release-action@e74ff71f7d8a4c4745b560a485cc5fdb9b5b999d
|
||||
with:
|
||||
repo_token: ${{ secrets.GITHUB_TOKEN }}
|
||||
file: OpenCore-Patcher.app.zip
|
||||
file: OpenCore-Patcher-TUI.app.zip
|
||||
tag: ${{ github.ref }}
|
||||
file_glob: true
|
||||
|
||||
29
.github/workflows/build-cli.yml
vendored
29
.github/workflows/build-cli.yml
vendored
@@ -1,29 +0,0 @@
|
||||
name: CI - Build CLI
|
||||
|
||||
on:
|
||||
push:
|
||||
workflow_dispatch:
|
||||
release:
|
||||
types: [published]
|
||||
|
||||
jobs:
|
||||
build:
|
||||
name: Build CLI
|
||||
runs-on: self-hosted
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
- run: pyinstaller OCLP-CLI.spec
|
||||
- run: cd dist; zip ../OCLP-CLI.zip OCLP-CLI
|
||||
- name: Upload Binary to Artifacts
|
||||
uses: actions/upload-artifact@v2
|
||||
with:
|
||||
name: OCLP-CLI
|
||||
path: OCLP-CLI.zip
|
||||
- name: Upload to Release
|
||||
if: github.event_name == 'release'
|
||||
uses: svenstaro/upload-release-action@e74ff71f7d8a4c4745b560a485cc5fdb9b5b999d
|
||||
with:
|
||||
repo_token: ${{ secrets.GITHUB_TOKEN }}
|
||||
file: OCLP-CLI.zip
|
||||
tag: ${{ github.ref }}
|
||||
file_glob: true
|
||||
50
.github/workflows/build-gui.yml
vendored
Normal file
50
.github/workflows/build-gui.yml
vendored
Normal file
@@ -0,0 +1,50 @@
|
||||
name: CI - Build GUI
|
||||
|
||||
on:
|
||||
push:
|
||||
workflow_dispatch:
|
||||
release:
|
||||
types: [published]
|
||||
|
||||
jobs:
|
||||
build:
|
||||
name: Build GUI
|
||||
runs-on: x86_64_mojave
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
|
||||
- run: /Library/Frameworks/Python.framework/Versions/3.9/bin/pyinstaller OCLP-CLI.spec
|
||||
- run: cd dist; cp OCLP-CLI ../; cd ..
|
||||
- run: zip OCLP-CLI.zip OCLP-CLI
|
||||
- name: Download latest nightly OCLP-GUI
|
||||
run: curl -S -L https://nightly.link/dortania/OCLP-GUI/workflows/build-app/master/OpenCore-Patcher-GUI.app.zip --output ./OpenCore-Patcher-GUI.app.zip
|
||||
- run: unzip -o OpenCore-Patcher-GUI.app.zip
|
||||
- run: unzip OpenCore-Patcher-GUI.app.zip; rm OpenCore-Patcher-GUI.app.zip
|
||||
- name: Merge new GUI
|
||||
run: cp OCLP-CLI OpenCore\ Patcher.app/Contents/Resources/
|
||||
- run: python3 merge_gui.py
|
||||
- run: 'codesign -s "Developer ID Application: Mykola Grymalyuk (S74BDJXQMD)" -v --force --deep --timestamp --entitlements entitlements.plist -o runtime "OpenCore Patcher.app/Contents/Resources/OCLP-CLI"'
|
||||
- run: 'codesign -s "Developer ID Application: Mykola Grymalyuk (S74BDJXQMD)" -v --force --deep --timestamp --entitlements entitlements.plist -o runtime "OpenCore Patcher.app/Contents/Resources/oclpd"'
|
||||
- run: 'codesign -s "Developer ID Application: Mykola Grymalyuk (S74BDJXQMD)" -v --force --deep --timestamp --entitlements entitlements.plist -o runtime "OpenCore Patcher.app"'
|
||||
- run: ditto -c -k --sequesterRsrc --keepParent OpenCore\ Patcher.app OpenCore-Patcher-GUI.app.zip
|
||||
- run: ./../sign-gui.sh
|
||||
- name: Upload GUI to Artifacts
|
||||
uses: actions/upload-artifact@v2
|
||||
with:
|
||||
name: OpenCore-Patcher-GUI.app
|
||||
path: OpenCore-Patcher-GUI.app.zip
|
||||
- name: Upload CLI to Artifacts
|
||||
uses: actions/upload-artifact@v2
|
||||
with:
|
||||
name: OCLP-CLI
|
||||
path: OCLP-CLI.zip
|
||||
- name: Upload to Release
|
||||
if: github.event_name == 'release'
|
||||
uses: svenstaro/upload-release-action@e74ff71f7d8a4c4745b560a485cc5fdb9b5b999d
|
||||
with:
|
||||
repo_token: ${{ secrets.GITHUB_TOKEN }}
|
||||
file: OpenCore-Patcher-GUI.app.zip
|
||||
tag: ${{ github.ref }}
|
||||
file_glob: true
|
||||
- name: Validate OpenCore
|
||||
run: ./OCLP-CLI --validate
|
||||
1
.gitignore
vendored
1
.gitignore
vendored
@@ -1,6 +1,7 @@
|
||||
.DS_Store
|
||||
OCLP-GUI.command
|
||||
/payloads/Apple
|
||||
/payloads/*.zip
|
||||
/payloads/__MACOSX
|
||||
/App
|
||||
/Build-Folder
|
||||
|
||||
237
CHANGELOG.md
237
CHANGELOG.md
@@ -1,6 +1,203 @@
|
||||
# OpenCore Legacy Patcher changelog
|
||||
|
||||
## 0.2.5
|
||||
|
||||
- Implement Latebloom configuration via command line tool
|
||||
- Implement Root Volume backups in addition to APFS snapshot reversions
|
||||
- Backups applicable to machines with sealed APFS snapshots
|
||||
- Allow Root Patching on Mojave and Catalina
|
||||
- Currently experimental
|
||||
- Allow disabling of faulty Thunderbolt controllers on 2013-2014 MacBook Pros
|
||||
- Currently limited to MacBookPro11,x
|
||||
- Set iMacPro1,1 SMBIOS for Mac Pro and Xserve models
|
||||
- Allows for wider array of OS support (High Sierra+)
|
||||
- Use plist override for BCM943224 and BCM94331 support in Big Sur+
|
||||
- Allows for older OS support through OpenCore
|
||||
- Increment Binaries:
|
||||
- OpenCore 0.7.2 release
|
||||
- Lilu 1.5.5 release
|
||||
- AppleALC 1.6.3 release
|
||||
- WhateverGreen 1.5.2 release
|
||||
- FeatureUnlock 1.0.3 release
|
||||
- PatcherSupportPkg 0.1.2 release
|
||||
- Allow iGPU/dGPU switching in Windows
|
||||
- Applicable to MacBook Pros with Intel iGPU and Nvidia/AMD dGPU
|
||||
- Clean up Patcher Settings
|
||||
- Allow disabling of TeraScale 2 Acceleration during root volume patch
|
||||
- Use for MacBookPro8,x with heavily degraded dGPUs
|
||||
- Add non-Metal Monterey Acceleration
|
||||
- Currently supports:
|
||||
- Intel Ironlake and Sandy Bridge
|
||||
- Nvidia Tesla
|
||||
- AMD TeraScale 1 and 2
|
||||
- Allow Trackpad gestures on MacBook4,1 and MacBook5,2
|
||||
- System Preferences will not report settings however
|
||||
- Allow Root Volume Patched Systems to use FileVault 2
|
||||
- Requires macOS 11.3 (20E232) or newer
|
||||
- Add offline TUI build
|
||||
- Allows for root patching without network connection
|
||||
- Add Legacy Wireless support for Monterey
|
||||
- Applicable for BCM94328, BCM94322 and Atheros chipsets
|
||||
- Add Legacy Bluetooth support for Monterey
|
||||
- Applicable for BRCM2046 and BRCM2070 chipsets
|
||||
- Disable Library Validation allowing for AMFI usage
|
||||
- Remove reliance on amfi_get_out_of_my_way=1
|
||||
- Add Kepler Accleration Patches for Monterey Beta 7 and newer
|
||||
- Add FirmwareFeature upgrading to all Models
|
||||
- Fixes Monterey Beta 7 installation issues
|
||||
- Add iMac7,1 USB map
|
||||
|
||||
## 0.2.4
|
||||
|
||||
- Fix BlessOverride typo
|
||||
- Fix Wake on WLAN typo
|
||||
- Fix Catalyst App crashing in macOS 11.5 (ie. Messages.app)
|
||||
- Increment Binaries
|
||||
- PatcherSupportPkg 0.0.15 release
|
||||
- Implement Latebloom.kext support (v0.19)
|
||||
- Work around macOS 11.3+ race condition on pre-Sandy Bridge Macs
|
||||
- Disable USB Map injection when unneeded
|
||||
|
||||
## 0.2.3
|
||||
|
||||
- Fix more IORegistry issues
|
||||
- Implement OpenCore GUI
|
||||
- Ensure symlinks are preserved
|
||||
- Enable TeraScale 2 patches by default on all models
|
||||
- Fix NightShift support for macOS Monterey
|
||||
- Add UniversalControl support
|
||||
- Currently not enabled by Apple in macOS Monterey Beta 2/iOS 15 Beta 2
|
||||
- Add optional Wake in WLAN setting
|
||||
- Note: enabling may create network instability
|
||||
- Increment Binaries
|
||||
- OpenCore 0.7.1 release (07-05-2021)
|
||||
- FeatureUnlock 1.0.3 rolling (07-07-2021)
|
||||
- Previously known as SidecarFixup
|
||||
- Lilu 1.5.4 release (07-05-2021)
|
||||
- AppleALC 1.6.2 release
|
||||
- WhateverGreen 1.6.2 release
|
||||
- PatcherSupportPkg 0.0.13 release
|
||||
- Fix Intel HD4000 DRM Support in macOS Monterey (thanks EduCovas!)
|
||||
- Support optionally re-enabling iGPU in iMac14,x with dGPUs
|
||||
- Fix Windows scanning in OpenCore menu when Windows and macOS are stored on the same ESP
|
||||
|
||||
## 0.2.2
|
||||
|
||||
- Fix IORegistry issue
|
||||
- Fix Root Patch Failure on Nvidia Tesla GPUs
|
||||
|
||||
## 0.2.1
|
||||
|
||||
- Fix NVMe Crash on build
|
||||
|
||||
## 0.2.0
|
||||
|
||||
- Refactor device probe logic
|
||||
- Implement PatcherSupportPkg v0.0.10
|
||||
- Reduces binary sizes depending on OS
|
||||
- Deprecates Apple-Binaries-OCLP
|
||||
- Fix full screen and Airplay to Mac support for Intel HD4000 iGPUs in Monterey
|
||||
- Automatically set `CMIO_Unit_Input_ASC.DoNotUseOpenCL` on TeraScale 2 GPUs
|
||||
- Fix Country Code detection on Wireless Cards
|
||||
- Add Windows detection and prompt during installation
|
||||
- Fix Google Fonts rendering for Intel HD4000 iGPUs in Monterey
|
||||
- Increment Binaries
|
||||
- Lilu 1.5.4 rolling (f69a972 - 06-20-2021)
|
||||
- RestrictEvents 1.0.3 rolling (3773ce2 - 06-20-2021)
|
||||
- SidecarFixup 1.0.2 rolling (2c29166 - 06-21-2021)
|
||||
- PatcherSupportPkg 0.0.18
|
||||
- Allow AirPlay to Mac support on Skylake - Coffeelake Macs
|
||||
|
||||
## 0.1.9
|
||||
|
||||
- Fix incorrect AMFI and SIP detection
|
||||
|
||||
## 0.1.8
|
||||
|
||||
- Fix Kernel Panic in Big Sur and Monterey
|
||||
- Increment binaries:
|
||||
- Lilu (1.5.4 rolling - 06-15-2021)
|
||||
|
||||
## 0.1.7
|
||||
|
||||
- Add FireWire Boot Support for Catalina and newer
|
||||
- Add NVMe firmware support for older models (ie. MacPro3,1)
|
||||
- OpenCore must be stored on a bootable volume (ie. USB or SATA)
|
||||
- Fix Thunderbolt Ethernet support on MacBookAir4,x
|
||||
- Fix XHCI hangs on pre-2012 Machines
|
||||
- XHCI boot support dropped due to instability
|
||||
- Add beta macOS Monterey Support
|
||||
- Fix iMac13,x sleep support
|
||||
- Add support for following models:
|
||||
- iMac14,4
|
||||
- iMac15,1
|
||||
- MacBook8,1
|
||||
- MacBookAir6,1
|
||||
- MacBookAir6,2
|
||||
- MacBookPro11,1
|
||||
- MacBookPro11,2
|
||||
- MacBookPro11,3
|
||||
- Increment binaries:
|
||||
- OpenCore (0.7.0 release - 06-07-2021)
|
||||
- AirportBrcmFixup (2.1.3 rolling - 06-08-2021)
|
||||
- AppleALC (1.6.2 rolling - 06-08-2021)
|
||||
- CPUFriend (1.2.4 rolling - 06-08-2021)
|
||||
- Lilu (1.5.4 rolling - 06-11-2021)
|
||||
- NVMeFix (1.0.9 rolling - 06-12-2021)
|
||||
- WhateverGreen (1.5.1 rolling - 06-08-2021)
|
||||
- RestrictEvents (1.0.3 rolling - 06-11-2021)
|
||||
- Apple Binaries (0.0.18 release - 06-12-2021)
|
||||
- MouSSE (0.95 release - 06-08-2021)
|
||||
- SidecarFixup (1.0.2 rolling - 06-11-2021)
|
||||
- Fix SSE4,2 Emulation
|
||||
- Fix Sidecar and CPU renaming support in macOS Monterey
|
||||
- Add AirPlay support to older Models
|
||||
- Add Intel HD4000 Acceleration
|
||||
- Big thanks to Jackluke, EduCovas, DhinakG, MykolaG!
|
||||
- Add DebugEnhancer for better macOS Monterey logs
|
||||
- DebugEnhancer (1.0.3 rolling - 06-08-2021)
|
||||
- Add TeraScale 2 Graphics Acceleration to Big Sur
|
||||
- User configurable, those prone to seizures are recommended to avoid or have another setup the machine due to initial colour strobing before forcing Million Colours on the display with SwitchResX or ResXtreme
|
||||
|
||||
## 0.1.6
|
||||
|
||||
- Add XHCI UEFI Driver for 3rd Party USB 3.0 Controllers
|
||||
- Allows for Boot Support from OpenCore' Picker
|
||||
- Fix UEFI output on MacPro3,1 with PC GPUs
|
||||
- Increment binaries:
|
||||
- OpenCore 4e0ff2d (0.7.0 rolling - 05-23-2021)
|
||||
- Apple Binaries 59a52a3 (0.0.8 release - 05-24-2021)
|
||||
- Allow legacy macOS Booting
|
||||
- Fix Photos app distortion on legacy GPUs
|
||||
- Fix device tree renaming on Mac Pros and Xserves
|
||||
- Ensure no Acceleration Patches applied when no compatible GPU found
|
||||
- Allow custom SMBIOS overriding
|
||||
- Fix incorrectly setting CPU override for non-Minimal SMBIOS spoofs
|
||||
- Support Minimal SMBIOS spoofing on El Capitan era Macs
|
||||
- Fix GPU Switching on MacBookPro6,x
|
||||
|
||||
## 0.1.5
|
||||
|
||||
- Fix crashing when Wireless module not present
|
||||
- Add iMac10,1 default dGPU pathing
|
||||
- Add agdpmod=vit9696 to all Nvidia Metal iMacs
|
||||
- Fixes external display support on Nvidia iMac12,x
|
||||
- Remove reliance on AppleBacklightFixup
|
||||
- Support space in path when downloading Root Patches
|
||||
- Enable PanicNoKextDump by default
|
||||
- Expand AppleGraphicsPowerManagement and AppleGraphicsDeviceControl Override support
|
||||
- Fix MacBookPro8,2/3 Brightness Control
|
||||
- dGPU must be disabled via NVRAM or deMUXed
|
||||
- Increment binaries:
|
||||
- Apple Binaries 478f6a6 (0.0.7 release - 05-16-2021)
|
||||
- Add SeedUtil option to Advanced Patcher Settings
|
||||
|
||||
## 0.1.4
|
||||
|
||||
- Fix Device Path formatting on 2012+ iMacs
|
||||
|
||||
## 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)
|
||||
@@ -19,6 +216,7 @@
|
||||
- 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
|
||||
@@ -44,6 +242,7 @@
|
||||
- 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
|
||||
@@ -63,9 +262,11 @@
|
||||
- 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
|
||||
- Fix Macmini4,1 audio support
|
||||
@@ -86,6 +287,7 @@
|
||||
- Disable SIP and SecureBootModel by default on legacy GPUs
|
||||
|
||||
## 0.0.22
|
||||
|
||||
- Add ExFat support for models missing driver
|
||||
- Aids BootCamp support for EFI based installs on 2010 and older Macs
|
||||
- Fix CPU Boosting on 2011 and older Macs
|
||||
@@ -94,11 +296,13 @@
|
||||
- Add BCM94322 and BCM94321 chipset support
|
||||
|
||||
## 0.0.21
|
||||
|
||||
- Fix botched images in OpenCanopy
|
||||
- Add support for 3rd party OpenCore usage detection during building
|
||||
- Mainly for users transitioning from Ausdauersportler's OpenCore configuration
|
||||
|
||||
## 0.0.20
|
||||
|
||||
- Fix CPU Calculation on early MCP79 chipsets (ie. iMac9,1, MacBook5,x)
|
||||
- Increment binaries
|
||||
- OpenCore c528597 (0.6.8 release - 2021-04-05)
|
||||
@@ -114,6 +318,7 @@
|
||||
- Fix Mac Pro and Xserve output issues
|
||||
|
||||
## 0.0.19
|
||||
|
||||
- Add SMC-Spoof.kext to avoid triggering `smcupdater`
|
||||
- Add Root Volume patching for older machines
|
||||
- AppleHDA Patch for 2011 and older (Excluding MacPro4,1+)
|
||||
@@ -132,6 +337,7 @@
|
||||
- Fix Broadcom Ethernet on older 2009-2011 Macs
|
||||
|
||||
## 0.0.18
|
||||
|
||||
- Disable Vault by default due to breaking installations
|
||||
- Move BOOTx64.efi to System/Library/CoreServices/ to support GPT BootCamp installs
|
||||
- Disable verbose by default, still configurable by end-user
|
||||
@@ -142,12 +348,14 @@
|
||||
- Add custom drive icons for external drives
|
||||
|
||||
## 0.0.17
|
||||
|
||||
- Fix build detection breaking on older OS
|
||||
|
||||
## 0.0.16
|
||||
|
||||
- Move Serial selection to Patcher Settings
|
||||
- Add new SMBIOS patching options:
|
||||
- Minimal: Only update board ID and BIOSVersion, keep original serials
|
||||
- Minimal: Only update board ID and BIOSVersion, keep original serials
|
||||
- Moderate: Update entire SMBIOS, keep original serials
|
||||
- Advanced: Update entire SMBIOS, generate new serials
|
||||
- Fix crash on MacBookPro4,1
|
||||
@@ -163,12 +371,14 @@
|
||||
- Enable `amfi_get_out_of_my_way=1` when SIP is disabled
|
||||
|
||||
## 0.0.15
|
||||
|
||||
- Add user-configurable OpenCore DEBUG builds
|
||||
- Add user-configurable Wifi and GPU patches
|
||||
- Fix ThirdPartyDrives model detection
|
||||
- Add HW_BID injection to fix boot.efi error
|
||||
|
||||
## 0.0.14
|
||||
|
||||
- Enable ThirdPartyDrives to aid with hibernation on 3rd party SATA drives
|
||||
- Increment OpenCore 7bb41aa (0.6.8 rolling, 2021-03-06)
|
||||
- Add ForceBooterSignature to resolve hibernation issues
|
||||
@@ -177,70 +387,83 @@
|
||||
- Add GopPassThrough quirk for UGA-based systems
|
||||
|
||||
## 0.0.13
|
||||
|
||||
- Add CPUFriend support to resolve X86PlatformPlugin clashes
|
||||
- (1.2.3 c388a62 release)
|
||||
- (1.2.3 c388a62 release)
|
||||
- Fix crash with MacBookAir5,x
|
||||
- Fix hibernation support
|
||||
- Remove Wireless patches for BCM4328/4321(14e4:4328) due to boot issues
|
||||
|
||||
## 0.0.12
|
||||
|
||||
- Convert OpenCore-Patcher binary to OpenCore-Patcher.app
|
||||
- Add Backlight patches for modded Nvidia GPUs in iMac10,x-12,x
|
||||
- Fix sleep for iMac12,x with upgraded GPUs
|
||||
|
||||
## 0.0.11
|
||||
|
||||
- Re-add OpenCore GUI
|
||||
- Rewrite in py3
|
||||
- Add OpenCore-Patcher binary for releases avoiding local python requirement
|
||||
- Increment binaries
|
||||
- OpenCore cbd2fa3 (0.6.7 release)
|
||||
- WhateverGreen 2e19d1b (1.4.8 release)
|
||||
- OpenCore cbd2fa3 (0.6.7 release)
|
||||
- WhateverGreen 2e19d1b (1.4.8 release)
|
||||
- Rework SMBIOS allowing both original and custom serials(Should resolve all iMessage issues)
|
||||
- Support upgraded GPU detection in iMac10,x-12,x
|
||||
- Add Wifi card upgrade detection
|
||||
|
||||
## 0.0.10
|
||||
|
||||
- Increment binaries
|
||||
- OpenCore 43f5339 (0.6.6 release)
|
||||
- Lilu d107554 (1.5.1 release)
|
||||
- WhateverGreen 9e53d8a (1.4.7 release)
|
||||
- OpenCore 43f5339 (0.6.6 release)
|
||||
- Lilu d107554 (1.5.1 release)
|
||||
- WhateverGreen 9e53d8a (1.4.7 release)
|
||||
- Add IDE support to MacPro3,1
|
||||
- Set SecureBootModel to iMac Pro(should aid in booting older OSes with OpenCore)
|
||||
- Update MacBookPro SMBIOS
|
||||
|
||||
## 0.0.9
|
||||
|
||||
- Resolve firmware install issues bricking Macs
|
||||
|
||||
## 0.0.8
|
||||
|
||||
- Fix USB Map
|
||||
- Add HiDPI patch
|
||||
|
||||
## 0.0.7
|
||||
|
||||
- Add MacPro3,1 to HID patch
|
||||
- Fix missing SSDT-CPBG patch
|
||||
- Fix BlacklistAppleUpdate
|
||||
- Add RestrictEvents kext
|
||||
|
||||
## 0.0.6
|
||||
|
||||
- Fix macserial crashing
|
||||
|
||||
## 0.0.5
|
||||
|
||||
- Enable hibernation support
|
||||
- Work around USB Map failing
|
||||
- Add checks whether booting with OpenCore
|
||||
- Fix MouSSE injection
|
||||
|
||||
## 0.0.4
|
||||
|
||||
- Add basic audio support for legacy chipsets
|
||||
- Add patch for dual GPU machines
|
||||
|
||||
## 0.0.3
|
||||
|
||||
- Fix Wireless patch logic
|
||||
|
||||
## 0.0.2
|
||||
|
||||
- Expand IOHIDFamily Patch to all Nvidia chipsets
|
||||
- Fix Airdrop 1.0 support
|
||||
- Add El Capitan era wireless cards
|
||||
|
||||
## 0.0.1
|
||||
|
||||
- Initial developer preview
|
||||
|
||||
300
OCLP-CLI.command
300
OCLP-CLI.command
@@ -3,88 +3,73 @@
|
||||
|
||||
from __future__ import print_function
|
||||
|
||||
import binascii
|
||||
import plistlib
|
||||
import subprocess
|
||||
import sys
|
||||
import time
|
||||
import platform
|
||||
import argparse
|
||||
from pathlib import Path
|
||||
|
||||
from Resources import Build, ModelArray, PCIIDArray, Constants, SysPatch, Utilities, CliMenu, DeviceProbe
|
||||
from Resources import Build, ModelArray, Constants, SysPatch, device_probe, Utilities, ModelExample
|
||||
|
||||
|
||||
class OpenCoreLegacyPatcher():
|
||||
class OpenCoreLegacyPatcher:
|
||||
def __init__(self):
|
||||
print("Loading...")
|
||||
Utilities.disable_cls()
|
||||
self.constants = Constants.Constants()
|
||||
self.current_model: str = None
|
||||
opencore_model: str = subprocess.run("nvram 4D1FDA02-38C7-4A6A-9CC6-4BCCA8B30102:oem-product".split(), stdout=subprocess.PIPE, stderr=subprocess.STDOUT).stdout.decode()
|
||||
if not opencore_model.startswith("nvram: Error getting variable"):
|
||||
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.constants.computer = device_probe.Computer.probe()
|
||||
self.computer = self.constants.computer
|
||||
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:
|
||||
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
|
||||
self.constants.detected_os_minor = int(platform.uname().release.partition(".")[2].partition(".")[0])
|
||||
detected_os_build: str = subprocess.run("sw_vers -buildVersion".split(), stdout=subprocess.PIPE, stderr=subprocess.STDOUT).stdout.decode()
|
||||
self.constants.detected_os_build = detected_os_build
|
||||
|
||||
# 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:
|
||||
# - https://forums.macrumors.com/threads/2011-imac-graphics-card-upgrade.1596614/post-17425857
|
||||
# - https://forums.macrumors.com/threads/opencore-on-the-mac-pro.2207814/
|
||||
# PLEASE FOR THE LOVE OF GOD JUST SET ExposeSensitiveData CORRECTLY!!!
|
||||
if self.current_model == "iMacPro1,1":
|
||||
serial: str = subprocess.run("system_profiler SPHardwareDataType | grep Serial".split(), stdout=subprocess.PIPE, stderr=subprocess.STDOUT).stdout.decode()
|
||||
serial = [line.strip().split("Number (system): ", 1)[1] for line in serial.split("\n") if line.strip().startswith("Serial")][0]
|
||||
true_model = subprocess.run([str(self.constants.macserial_path), "--info", str(serial)], stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
|
||||
true_model = [i.partition(" - ")[2] for i in true_model.stdout.decode().split("\n") if "Model: " in i][0]
|
||||
print(f"True Model: {true_model}")
|
||||
if not true_model.startswith("Unknown"):
|
||||
self.current_model = true_model
|
||||
custom_cpu_model_value = Utilities.get_nvram("revcpuname", "4D1FDA02-38C7-4A6A-9CC6-4BCCA8B30102", decode=True)
|
||||
if custom_cpu_model_value is not None:
|
||||
# TODO: Fix to not use two separate variables
|
||||
self.constants.custom_cpu_model = 1
|
||||
self.constants.custom_cpu_model_value = custom_cpu_model_value.split("%00")[0]
|
||||
|
||||
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]
|
||||
if "-v" in (Utilities.get_nvram("boot-args") or ""):
|
||||
self.constants.verbose_debug = True
|
||||
|
||||
# Check if running in RecoveryOS
|
||||
self.constants.recovery_status = Utilities.check_recovery()
|
||||
|
||||
parser = argparse.ArgumentParser()
|
||||
|
||||
# Generic building args
|
||||
parser.add_argument('--build', help='Build OpenCore', action='store_true', required=False)
|
||||
parser.add_argument('--verbose', help='Enable verbose boot', action='store_true', required=False)
|
||||
parser.add_argument('--debug_oc', help='Enable OpenCore DEBUG', action='store_true', required=False)
|
||||
parser.add_argument('--debug_kext', help='Enable kext DEBUG', action='store_true', required=False)
|
||||
parser.add_argument('--skip_wifi', help='Skip wifi patches', action='store_true', required=False)
|
||||
parser.add_argument('--hide_picker', help='Hide OpenCore picker', action='store_true', required=False)
|
||||
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)
|
||||
parser.add_argument("--build", help="Build OpenCore", action="store_true", required=False)
|
||||
parser.add_argument("--verbose", help="Enable verbose boot", action="store_true", required=False)
|
||||
parser.add_argument("--debug_oc", help="Enable OpenCore DEBUG", action="store_true", required=False)
|
||||
parser.add_argument("--debug_kext", help="Enable kext DEBUG", action="store_true", required=False)
|
||||
parser.add_argument("--hide_picker", help="Hide OpenCore picker", action="store_true", required=False)
|
||||
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("--firewire", help="Enable FireWire Booting", action="store_true", required=False)
|
||||
parser.add_argument("--nvme", help="Enable NVMe Booting", action="store_true", required=False)
|
||||
parser.add_argument("--wlan", help="Enable Wake on WLAN support", action="store_true", required=False)
|
||||
# parser.add_argument("--disable_amfi", help="Disable AMFI", action="store_true", required=False)
|
||||
parser.add_argument("--moderate_smbios", help="Moderate SMBIOS Patching", action="store_true", required=False)
|
||||
parser.add_argument("--moj_cat_accel", help="Allow Root Patching on Mojave and Catalina", action="store_true", required=False)
|
||||
parser.add_argument("--disable_thunderbolt", help="Disable Thunderbolt on 2013-2014 MacBook Pros", action="store_true", required=False)
|
||||
|
||||
# Building args requiring value values
|
||||
parser.add_argument('--model', action='store', help='Set custom model', required=False)
|
||||
parser.add_argument('--metal_gpu', action='store', help='Set Metal GPU Vendor', required=False)
|
||||
parser.add_argument('--smbios_spoof', action='store', help='Set SMBIOS patching mode', required=False)
|
||||
# Building args requiring value values (ie. --model iMac12,2)
|
||||
parser.add_argument("--model", action="store", help="Set custom model", required=False)
|
||||
parser.add_argument("--disk", action="store", help="Specifies disk to install to", required=False)
|
||||
parser.add_argument("--smbios_spoof", action="store", help="Set SMBIOS patching mode", required=False)
|
||||
parser.add_argument("--lb_delay", action="store", help="Set Latebloom delay in ms", required=False)
|
||||
parser.add_argument("--lb_range", action="store", help="Set Latebloom range in ms", required=False)
|
||||
parser.add_argument("--lb_debug", action="store", help="Set Latebloom debug", required=False)
|
||||
|
||||
# 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("--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("--patch_disk", action="store", help="Specifies disk to root patch", required=False)
|
||||
|
||||
parser.add_argument("--validate", help="Validate", action="store_true", required=False)
|
||||
|
||||
args = parser.parse_args()
|
||||
|
||||
@@ -97,6 +82,14 @@ class OpenCoreLegacyPatcher():
|
||||
else:
|
||||
print("- Using default payloads location")
|
||||
|
||||
if args.disk:
|
||||
print(f"- Install Disk set: {args.disk}")
|
||||
self.constants.disk = args.disk
|
||||
if args.validate:
|
||||
self.validate()
|
||||
# if args.patch_disk:
|
||||
# print(f"- Patch Disk set: {args.patch_disk}")
|
||||
# self.constants.patch_disk = args.patch_disk
|
||||
if args.verbose:
|
||||
print("- Set verbose configuration")
|
||||
self.constants.verbose_debug = True
|
||||
@@ -107,9 +100,6 @@ class OpenCoreLegacyPatcher():
|
||||
if args.debug_kext:
|
||||
print("- Set kext DEBUG configuration")
|
||||
self.constants.kext_debug = True
|
||||
if args.skip_wifi:
|
||||
print("- Set wifi skip configuration")
|
||||
self.constants.wifi_build = True
|
||||
if args.hide_picker:
|
||||
print("- Set HidePicker configuration")
|
||||
self.constants.showpicker = False
|
||||
@@ -122,19 +112,24 @@ class OpenCoreLegacyPatcher():
|
||||
if args.vault:
|
||||
print("- Set Vault configuration")
|
||||
self.constants.vault = True
|
||||
if args.metal_gpu:
|
||||
if args.metal_gpu == "Nvidia":
|
||||
print("- Set Metal GPU patches to Nvidia")
|
||||
self.constants.metal_build = True
|
||||
self.constants.imac_vendor = "Nvidia"
|
||||
elif args.metal_gpu == "AMD":
|
||||
print("- Set Metal GPU patches to AMD")
|
||||
self.constants.metal_build = True
|
||||
self.constants.imac_vendor = "AMD"
|
||||
else:
|
||||
print(f"- Unknown GPU arg passed: {args.metal_gpu}")
|
||||
self.constants.metal_build = False
|
||||
self.constants.imac_vendor = "None"
|
||||
if args.firewire:
|
||||
print("- Set FireWire Boot configuration")
|
||||
self.constants.firewire_boot = True
|
||||
if args.nvme:
|
||||
print("- Set NVMe Boot configuration")
|
||||
self.constants.nvme_boot = True
|
||||
# if args.disable_amfi:
|
||||
# print("- Set Disable AMFI configuration")
|
||||
# self.constants.amfi_status = False
|
||||
if args.wlan:
|
||||
print("- Set Wake on WLAN configuration")
|
||||
self.constants.enable_wake_on_wlan = True
|
||||
if args.disable_thunderbolt:
|
||||
print("- Set Disable Thunderbolt configuration")
|
||||
self.constants.disable_thunderbolt = True
|
||||
if args.moderate_smbios:
|
||||
print("- Set Moderate SMBIOS Patching configuration")
|
||||
self.constants.serial_settings = "Moderate"
|
||||
if args.smbios_spoof:
|
||||
if args.smbios_spoof == "Minimal":
|
||||
self.constants.serial_settings = "Minimal"
|
||||
@@ -145,49 +140,170 @@ class OpenCoreLegacyPatcher():
|
||||
else:
|
||||
print(f"- Unknown SMBIOS arg passed: {args.smbios_spoof}")
|
||||
|
||||
if args.lb_delay:
|
||||
try:
|
||||
self.constants.latebloom_delay = int(args.lb_delay)
|
||||
print(f"- Set LateBloom delay: {args.lb_delay}")
|
||||
except ValueError:
|
||||
print(f"- Invalid LateBloom delay: {args.lb_delay}")
|
||||
|
||||
if args.lb_range:
|
||||
try:
|
||||
self.constants.latebloom_range = int(args.lb_range)
|
||||
print(f"- Set LateBloom range: {args.lb_range}")
|
||||
except ValueError:
|
||||
print(f"- Invalid LateBloom range: {args.lb_range}")
|
||||
|
||||
if args.lb_debug:
|
||||
try:
|
||||
self.constants.latebloom_debug = int(args.lb_debug)
|
||||
if self.constants.latebloom_debug in [0, 1]:
|
||||
print(f"- Set LateBloom debug: {args.lb_debug}")
|
||||
else:
|
||||
print(f"- Invalid LateBloom debug: {args.lb_debug}")
|
||||
except ValueError:
|
||||
print(f"- Invalid LateBloom range: {args.lb_debug}")
|
||||
|
||||
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}")
|
||||
self.constants.custom_model = args.model
|
||||
self.set_defaults(self.constants.custom_model, False)
|
||||
self.build_opencore()
|
||||
elif self.computer.real_model not in ModelArray.SupportedSMBIOS and self.constants.allow_oc_everywhere is False:
|
||||
print(
|
||||
"""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."""
|
||||
)
|
||||
sys.exit(1)
|
||||
else:
|
||||
print(f"- Using detected model: {self.current_model}")
|
||||
print(f"- Using detected model: {self.constants.computer.real_model}")
|
||||
self.set_defaults(self.constants.custom_model, True)
|
||||
self.build_opencore()
|
||||
if args.patch_sys_vol:
|
||||
if args.moj_cat_accel:
|
||||
print("- Set Mojave/Catalina root patch configuration")
|
||||
self.constants.moj_cat_accel = True
|
||||
print("- Set System Volume patching")
|
||||
self.patch_vol()
|
||||
elif args.unpatch_sys_vol:
|
||||
print("- Set System Volume unpatching")
|
||||
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 set_defaults(self, model, host_is_target):
|
||||
if host_is_target:
|
||||
if Utilities.check_metal_support(device_probe, self.computer) is False:
|
||||
self.constants.disable_cs_lv = True
|
||||
if self.computer.dgpu and self.computer.dgpu.arch == device_probe.NVIDIA.Archs.Kepler:
|
||||
self.constants.sip_status = False
|
||||
self.constants.amfi_status = True
|
||||
self.constants.allow_fv_root = True # Allow FileVault on broken seal
|
||||
if (
|
||||
isinstance(self.computer.wifi, device_probe.Broadcom)
|
||||
and self.computer.wifi.chipset in [device_probe.Broadcom.Chipsets.AirPortBrcm4331, device_probe.Broadcom.Chipsets.AirPortBrcm43224]
|
||||
) or (isinstance(self.computer.wifi, device_probe.Atheros) and self.computer.wifi.chipset == device_probe.Atheros.Chipsets.AirPortAtheros40):
|
||||
self.constants.sip_status = False
|
||||
self.constants.allow_fv_root = True # Allow FileVault on broken seal
|
||||
elif model in ModelArray.LegacyGPU:
|
||||
self.constants.disable_cs_lv = True
|
||||
if model in ModelArray.LegacyGPU:
|
||||
if host_is_target and Utilities.check_metal_support(device_probe, self.computer) is True:
|
||||
# Building on device and we have a native, supported GPU
|
||||
if self.computer.dgpu and self.computer.dgpu.arch == device_probe.NVIDIA.Archs.Kepler:
|
||||
self.constants.sip_status = False
|
||||
# self.constants.secure_status = True # Monterey
|
||||
self.constants.amfi_status = True
|
||||
self.constants.allow_fv_root = True # Allow FileVault on broken seal
|
||||
else:
|
||||
self.constants.sip_status = True
|
||||
# self.constants.secure_status = True # Monterey
|
||||
self.constants.amfi_status = True
|
||||
else:
|
||||
self.constants.sip_status = False # Unsigned kexts
|
||||
self.constants.secure_status = False # Root volume modified
|
||||
self.constants.amfi_status = False # Unsigned binaries
|
||||
self.constants.allow_fv_root = True # Allow FileVault on broken seal
|
||||
if model in ModelArray.ModernGPU:
|
||||
self.constants.sip_status = False # Unsigned kexts
|
||||
self.constants.secure_status = False # Modified root volume
|
||||
self.constants.allow_fv_root = True # Allow FileVault on broken seal
|
||||
# self.constants.amfi_status = True # Signed bundles, Don't need to explicitly set currently
|
||||
if model == "MacBook8,1":
|
||||
# MacBook8,1 has an odd bug where it cannot install Monterey with Minimal spoofing
|
||||
self.constants.serial_settings == "Moderate"
|
||||
|
||||
if self.constants.latebloom_delay == 0:
|
||||
self.constants.latebloom_delay, self.constants.latebloom_range, self.constants.latebloom_debug = Utilities.latebloom_detection(model)
|
||||
|
||||
if Utilities.get_nvram("gpu-power-prefs", "FA4CE28D-B62F-4C99-9CC3-6815686E30F9", decode=True):
|
||||
self.constants.allow_ts2_accel = False
|
||||
|
||||
def patch_vol(self):
|
||||
SysPatch.PatchSysVolume(self.constants.custom_model or self.current_model, self.constants).start_patch()
|
||||
SysPatch.PatchSysVolume(self.constants.custom_model or self.constants.computer.real_model, self.constants).start_patch()
|
||||
|
||||
def unpatch_vol(self):
|
||||
SysPatch.PatchSysVolume(self.constants.custom_model or self.current_model, self.constants).start_unpatch()
|
||||
SysPatch.PatchSysVolume(self.constants.custom_model or self.constants.computer.real_model, self.constants).start_unpatch()
|
||||
|
||||
def build_opencore(self):
|
||||
Build.BuildOpenCore(self.constants.custom_model or self.current_model, self.constants).build_opencore()
|
||||
Build.BuildOpenCore(self.constants.custom_model or self.constants.computer.real_model, self.constants).build_opencore()
|
||||
|
||||
def install_opencore(self):
|
||||
Build.BuildOpenCore(self.constants.custom_model or self.current_model, self.constants).copy_efi()
|
||||
Build.BuildOpenCore(self.constants.custom_model or self.constants.computer.real_model, self.constants).copy_efi()
|
||||
|
||||
def validate(self):
|
||||
# Runs through ocvalidate to check for errors
|
||||
|
||||
valid_dumps = [
|
||||
ModelExample.MacBookPro.MacBookPro92_Stock,
|
||||
# ModelExample.MacBookPro.MacBookPro171_Stock,
|
||||
# ModelExample.Macmini.Macmini91_Stock,
|
||||
ModelExample.iMac.iMac81_Stock,
|
||||
ModelExample.iMac.iMac112_Stock,
|
||||
ModelExample.iMac.iMac122_Upgraded,
|
||||
ModelExample.MacPro.MacPro31_Stock,
|
||||
ModelExample.MacPro.MacPro31_Upgrade,
|
||||
ModelExample.MacPro.MacPro31_Modern_AMD,
|
||||
ModelExample.MacPro.MacPro31_Modern_Kepler,
|
||||
ModelExample.MacPro.MacPro41_Upgrade,
|
||||
ModelExample.MacPro.MacPro41_Modern_AMD,
|
||||
ModelExample.MacPro.MacPro41_51__Flashed_Modern_AMD,
|
||||
]
|
||||
self.constants.validate = True
|
||||
|
||||
for model in ModelArray.SupportedSMBIOS:
|
||||
print(f"Validating predefined model: {model}")
|
||||
self.constants.custom_model = model
|
||||
self.build_opencore()
|
||||
result = subprocess.run([self.constants.ocvalidate_path, f"{self.constants.opencore_release_folder}/EFI/OC/config.plist"], stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
|
||||
if result.returncode != 0:
|
||||
print("Error on build!")
|
||||
print(result.stdout.decode())
|
||||
raise Exception(f"Validation failed for predefined model: {model}")
|
||||
else:
|
||||
print(f"Validation succeeded for predefined model: {model}")
|
||||
|
||||
for model in valid_dumps:
|
||||
self.constants.computer = model
|
||||
self.computer = self.constants.computer
|
||||
self.constants.custom_model = ""
|
||||
print(f"Validating dumped model: {self.computer.real_model}")
|
||||
self.build_opencore()
|
||||
result = subprocess.run([self.constants.ocvalidate_path, f"{self.constants.opencore_release_folder}/EFI/OC/config.plist"], stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
|
||||
if result.returncode != 0:
|
||||
print("Error on build!")
|
||||
print(result.stdout.decode())
|
||||
raise Exception(f"Validation failed for predefined model: {self.computer.real_model}")
|
||||
else:
|
||||
print(f"Validation succeeded for predefined model: {self.computer.real_model}")
|
||||
|
||||
|
||||
OpenCoreLegacyPatcher()
|
||||
|
||||
# Example arg for OCLP command line
|
||||
# ./OCLP-CLI --build --verbose --debug_oc --debug_kext --model iMac11,2
|
||||
# ./OCLP-CLI --build --verbose --debug_oc --debug_kext --model iMac11,2
|
||||
|
||||
@@ -6,8 +6,9 @@ block_cipher = None
|
||||
|
||||
|
||||
a = Analysis(['OCLP-CLI.command'],
|
||||
pathex=['Resources'],
|
||||
binaries=[],
|
||||
datas=[('payloads', 'payloads'), ('Resources', 'Resources')],
|
||||
datas=[('payloads', 'payloads')],
|
||||
hiddenimports=[],
|
||||
hookspath=[],
|
||||
runtime_hooks=[],
|
||||
@@ -23,7 +24,7 @@ exe = EXE(pyz,
|
||||
a.binaries,
|
||||
a.zipfiles,
|
||||
a.datas,
|
||||
[],
|
||||
[('u', None, 'OPTION')],
|
||||
name='OCLP-CLI',
|
||||
debug=False,
|
||||
bootloader_ignore_signals=False,
|
||||
|
||||
@@ -3,111 +3,252 @@
|
||||
|
||||
from __future__ import print_function
|
||||
|
||||
import binascii
|
||||
import plistlib
|
||||
import platform
|
||||
import subprocess
|
||||
import sys
|
||||
import time
|
||||
import platform
|
||||
|
||||
from Resources import Build, ModelArray, PCIIDArray, Constants, SysPatch, Utilities, CliMenu, DeviceProbe
|
||||
from Resources import Build, CliMenu, Constants, ModelArray, SysPatch, Utilities, device_probe
|
||||
|
||||
|
||||
class OpenCoreLegacyPatcher():
|
||||
class OpenCoreLegacyPatcher:
|
||||
def __init__(self):
|
||||
print("Loading...")
|
||||
self.constants = Constants.Constants()
|
||||
self.current_model: str = None
|
||||
opencore_model: str = subprocess.run("nvram 4D1FDA02-38C7-4A6A-9CC6-4BCCA8B30102:oem-product".split(), stdout=subprocess.PIPE, stderr=subprocess.STDOUT).stdout.decode()
|
||||
if not opencore_model.startswith("nvram: Error getting variable"):
|
||||
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 = 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.computer = device_probe.Computer.probe()
|
||||
self.computer = self.constants.computer
|
||||
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:
|
||||
dgpu_vendor,dgpu_device,dgpu_acpi = DeviceProbe.pci_probe().gpu_probe("GFX0")
|
||||
self.constants.detected_os_minor = int(platform.uname().release.partition(".")[2].partition(".")[0])
|
||||
detected_os_build: str = subprocess.run("sw_vers -buildVersion".split(), stdout=subprocess.PIPE, stderr=subprocess.STDOUT).stdout.decode()
|
||||
self.constants.detected_os_build = detected_os_build
|
||||
self.set_defaults(self.computer.real_model, True)
|
||||
|
||||
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:
|
||||
def set_defaults(self, model, host_is_target):
|
||||
# Defaults
|
||||
self.constants.sip_status = True
|
||||
self.constants.secure_status = False # Default false for Monterey
|
||||
self.constants.amfi_status = True
|
||||
|
||||
if host_is_target:
|
||||
if Utilities.check_metal_support(device_probe, self.computer) is False:
|
||||
self.constants.disable_cs_lv = True
|
||||
if self.computer.dgpu and self.computer.dgpu.arch == device_probe.NVIDIA.Archs.Kepler:
|
||||
self.constants.sip_status = False
|
||||
self.constants.secure_status = False
|
||||
self.constants.amfi_status = True
|
||||
self.constants.allow_fv_root = True # Allow FileVault on broken seal
|
||||
if (
|
||||
isinstance(self.computer.wifi, device_probe.Broadcom)
|
||||
and self.computer.wifi.chipset in [device_probe.Broadcom.Chipsets.AirPortBrcm4331, device_probe.Broadcom.Chipsets.AirPortBrcm43224]
|
||||
) or (isinstance(self.computer.wifi, device_probe.Atheros) and self.computer.wifi.chipset == device_probe.Atheros.Chipsets.AirPortAtheros40):
|
||||
self.constants.sip_status = False
|
||||
self.constants.allow_fv_root = True # Allow FileVault on broken seal
|
||||
elif model in ModelArray.LegacyGPU:
|
||||
self.constants.disable_cs_lv = True
|
||||
|
||||
# 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:
|
||||
# - https://forums.macrumors.com/threads/2011-imac-graphics-card-upgrade.1596614/post-17425857
|
||||
# - https://forums.macrumors.com/threads/opencore-on-the-mac-pro.2207814/
|
||||
# PLEASE FOR THE LOVE OF GOD JUST SET ExposeSensitiveData CORRECTLY!!!
|
||||
if self.current_model == "iMacPro1,1":
|
||||
serial: str = subprocess.run("system_profiler SPHardwareDataType | grep Serial".split(), stdout=subprocess.PIPE, stderr=subprocess.STDOUT).stdout.decode()
|
||||
serial = [line.strip().split("Number (system): ", 1)[1] for line in serial.split("\n") if line.strip().startswith("Serial")][0]
|
||||
true_model = subprocess.run([str(self.constants.macserial_path), "--info", str(serial)], stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
|
||||
true_model = [i.partition(" - ")[2] for i in true_model.stdout.decode().split("\n") if "Model: " in i][0]
|
||||
print(f"True Model: {true_model}")
|
||||
if not true_model.startswith("Unknown"):
|
||||
self.current_model = true_model
|
||||
if model in ModelArray.LegacyGPU:
|
||||
if host_is_target and Utilities.check_metal_support(device_probe, self.computer) is True:
|
||||
# Building on device and we have a native, supported GPU
|
||||
if self.computer.dgpu and self.computer.dgpu.arch == device_probe.NVIDIA.Archs.Kepler:
|
||||
self.constants.sip_status = False
|
||||
# self.constants.secure_status = True # Monterey
|
||||
self.constants.allow_fv_root = True # Allow FileVault on broken seal
|
||||
else:
|
||||
self.constants.sip_status = True
|
||||
# self.constants.secure_status = True # Monterey
|
||||
self.constants.amfi_status = True
|
||||
else:
|
||||
self.constants.sip_status = False # Unsigned kexts
|
||||
self.constants.secure_status = False # Root volume modified
|
||||
self.constants.amfi_status = False # Unsigned binaries
|
||||
self.constants.allow_fv_root = True # Allow FileVault on broken seal
|
||||
if model in ModelArray.ModernGPU:
|
||||
self.constants.sip_status = False # Unsigned kexts
|
||||
self.constants.secure_status = False # Modified root volume
|
||||
self.constants.allow_fv_root = True # Allow FileVault on broken seal
|
||||
# self.constants.amfi_status = True # Signed bundles, Don't need to explicitly set currently
|
||||
|
||||
|
||||
custom_cpu_model_value: str = subprocess.run("nvram 4D1FDA02-38C7-4A6A-9CC6-4BCCA8B30102:revcpuname".split(), stdout=subprocess.PIPE, stderr=subprocess.STDOUT).stdout.decode()
|
||||
if model == "MacBook8,1":
|
||||
# MacBook8,1 has an odd bug where it cannot install Monterey with Minimal spoofing
|
||||
self.constants.serial_settings = "Moderate"
|
||||
|
||||
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]
|
||||
custom_cpu_model_value = Utilities.get_nvram("revcpuname", "4D1FDA02-38C7-4A6A-9CC6-4BCCA8B30102", decode=True)
|
||||
if custom_cpu_model_value is not None:
|
||||
# TODO: Fix to not use two separate variables
|
||||
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()
|
||||
if "-v" in (Utilities.get_nvram("boot-args") or ""):
|
||||
self.constants.verbose_debug = True
|
||||
|
||||
if Utilities.amfi_status() is False:
|
||||
self.constants.amfi_status = False
|
||||
|
||||
if Utilities.get_nvram("gpu-power-prefs", "FA4CE28D-B62F-4C99-9CC3-6815686E30F9", decode=True):
|
||||
self.constants.allow_ts2_accel = False
|
||||
|
||||
if self.constants.latebloom_delay == 0:
|
||||
self.constants.latebloom_delay, self.constants.latebloom_range, self.constants.latebloom_debug = Utilities.latebloom_detection(model)
|
||||
|
||||
if Utilities.get_nvram("gpu-power-prefs", "FA4CE28D-B62F-4C99-9CC3-6815686E30F9", decode=True):
|
||||
self.constants.allow_ts2_accel = False
|
||||
|
||||
# Check if running in RecoveryOS
|
||||
self.constants.recovery_status = Utilities.check_recovery()
|
||||
|
||||
def build_opencore(self):
|
||||
Build.BuildOpenCore(self.constants.custom_model or self.current_model, self.constants).build_opencore()
|
||||
Build.BuildOpenCore(self.constants.custom_model or self.constants.computer.real_model, self.constants).build_opencore()
|
||||
|
||||
def install_opencore(self):
|
||||
Build.BuildOpenCore(self.constants.custom_model or self.current_model, self.constants).copy_efi()
|
||||
Build.BuildOpenCore(self.constants.custom_model or self.constants.computer.real_model, self.constants).copy_efi()
|
||||
|
||||
def change_model(self):
|
||||
Utilities.cls()
|
||||
Utilities.header(["Select Different Model"])
|
||||
print("""
|
||||
print(
|
||||
"""
|
||||
Tip: Run the following command on the target machine to find the model identifier:
|
||||
|
||||
system_profiler SPHardwareDataType | grep 'Model Identifier'
|
||||
""")
|
||||
"""
|
||||
)
|
||||
self.constants.custom_model = input("Please enter the model identifier of the target machine: ").strip()
|
||||
if self.constants.custom_model not in ModelArray.SupportedSMBIOS:
|
||||
print(f"""
|
||||
{self.constants.custom_model} is not a valid SMBIOS Identifier for macOS {self.constants.os_support}!
|
||||
""")
|
||||
print(
|
||||
f"""
|
||||
{self.constants.custom_model} is not a valid SMBIOS Identifier for macOS {self.constants.os_support}!
|
||||
"""
|
||||
)
|
||||
print_models = input(f"Print list of valid options for macOS {self.constants.os_support}? (y/n)")
|
||||
if print_models in {"y", "Y", "yes", "Yes"}:
|
||||
if print_models.lower() in {"y", "yes"}:
|
||||
print("\n".join(ModelArray.SupportedSMBIOS))
|
||||
input("Press any key to continue...")
|
||||
if self.constants.custom_model in ModelArray.NoAPFSsupport:
|
||||
self.constants.serial_settings = "Moderate"
|
||||
input("\nPress [ENTER] to continue")
|
||||
else:
|
||||
self.set_defaults(self.constants.custom_model, False)
|
||||
|
||||
def patcher_settings(self):
|
||||
response = None
|
||||
while not (response and response == -1):
|
||||
title = [
|
||||
"Adjust Patcher Settings"
|
||||
]
|
||||
title = ["Adjust Patcher Settings"]
|
||||
menu = Utilities.TUIMenu(title, "Please select an option: ", auto_number=True, top_level=True)
|
||||
options = [
|
||||
# TODO: Enable setting OS target when more OSes become supported by the patcher
|
||||
#[f"Change OS version:\t\t\tCurrently macOS {self.constants.os_support}", self.change_os],
|
||||
[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"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],
|
||||
["Debug Settings", self.patcher_setting_debug],
|
||||
["Security Settings", self.patcher_settings_security],
|
||||
["SMBIOS Settings", self.patcher_settings_smbios],
|
||||
["Boot Volume Settings", self.patcher_settings_boot],
|
||||
["Miscellaneous Settings", self.patcher_settings_misc],
|
||||
["Dump detected hardware", CliMenu.MenuOptions(self.constants.custom_model or self.computer.real_model, self.constants).dump_hardware],
|
||||
[
|
||||
f"Allow Accel on Mojave/Catalina:\tCurrently {self.constants.moj_cat_accel}",
|
||||
CliMenu.MenuOptions(self.constants.custom_model or self.computer.real_model, self.constants).allow_moj_cat_patch,
|
||||
],
|
||||
[
|
||||
f"Allow OpenCore on native Models:\tCurrently {self.constants.allow_oc_everywhere}",
|
||||
CliMenu.MenuOptions(self.constants.custom_model or self.computer.real_model, self.constants).allow_native_models,
|
||||
],
|
||||
["Advanced 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 patcher_setting_debug(self):
|
||||
response = None
|
||||
while not (response and response == -1):
|
||||
title = ["Adjust Debug Settings"]
|
||||
menu = Utilities.TUIMenu(title, "Please select an option: ", auto_number=True, top_level=True)
|
||||
options = [
|
||||
[f"Enable Verbose Mode:\tCurrently {self.constants.verbose_debug}", CliMenu.MenuOptions(self.constants.custom_model or self.computer.real_model, self.constants).change_verbose],
|
||||
[f"Enable OpenCore DEBUG:\tCurrently {self.constants.opencore_debug}", CliMenu.MenuOptions(self.constants.custom_model or self.computer.real_model, self.constants).change_oc],
|
||||
[f"Enable Kext DEBUG:\t\tCurrently {self.constants.kext_debug}", CliMenu.MenuOptions(self.constants.custom_model or self.computer.real_model, self.constants).change_kext],
|
||||
] + (
|
||||
[
|
||||
[
|
||||
f"Set Latebloom args:\t\tDelay {self.constants.latebloom_delay}, Range {self.constants.latebloom_range}, Debug {self.constants.latebloom_debug}",
|
||||
CliMenu.MenuOptions(self.constants.custom_model or self.computer.real_model, self.constants).latebloom_settings,
|
||||
]
|
||||
]
|
||||
if ((self.constants.custom_model or self.computer.real_model) in ModelArray.PCIRaceCondition)
|
||||
else []
|
||||
)
|
||||
|
||||
for option in options:
|
||||
menu.add_menu_option(option[0], function=option[1])
|
||||
|
||||
response = menu.start()
|
||||
|
||||
def patcher_settings_security(self):
|
||||
response = None
|
||||
while not (response and response == -1):
|
||||
title = ["Adjust Security Settings"]
|
||||
menu = Utilities.TUIMenu(title, "Please select an option: ", auto_number=True, top_level=True)
|
||||
options = [
|
||||
# [
|
||||
# f"Set Apple Mobile File Integrity (AMFI):\tCurrently {self.constants.amfi_status}",
|
||||
# CliMenu.MenuOptions(self.constants.custom_model or self.computer.real_model, self.constants).set_amfi,
|
||||
# ],
|
||||
[
|
||||
f"Set System Intrgity Protection (SIP):\tCurrently {self.constants.sip_status}",
|
||||
CliMenu.MenuOptions(self.constants.custom_model or self.computer.real_model, self.constants).change_sip,
|
||||
],
|
||||
[
|
||||
f"Set Secure Boot Model (SBM):\t\tCurrently {self.constants.secure_status}",
|
||||
CliMenu.MenuOptions(self.constants.custom_model or self.computer.real_model, self.constants).change_sbm,
|
||||
],
|
||||
[f"Set Vault Mode:\t\t\t\tCurrently {self.constants.vault}", CliMenu.MenuOptions(self.constants.custom_model or self.computer.real_model, self.constants).change_vault],
|
||||
]
|
||||
|
||||
for option in options:
|
||||
menu.add_menu_option(option[0], function=option[1])
|
||||
|
||||
response = menu.start()
|
||||
|
||||
def patcher_settings_smbios(self):
|
||||
response = None
|
||||
while not (response and response == -1):
|
||||
title = ["Adjust SMBIOS Settings"]
|
||||
menu = Utilities.TUIMenu(title, "Please select an option: ", auto_number=True, top_level=True)
|
||||
options = [
|
||||
[f"Set SMBIOS Spoof Level:\tCurrently {self.constants.serial_settings}", CliMenu.MenuOptions(self.constants.custom_model or self.computer.real_model, self.constants).change_serial],
|
||||
[f"Set SMBIOS Spoof Model:\tCurrently {self.constants.override_smbios}", CliMenu.MenuOptions(self.constants.custom_model or self.computer.real_model, self.constants).set_smbios],
|
||||
[f"Set Custom name {self.constants.custom_cpu_model_value}", CliMenu.MenuOptions(self.constants.custom_model or self.computer.real_model, self.constants).custom_cpu],
|
||||
]
|
||||
|
||||
for option in options:
|
||||
menu.add_menu_option(option[0], function=option[1])
|
||||
|
||||
response = menu.start()
|
||||
|
||||
def patcher_settings_boot(self):
|
||||
response = None
|
||||
while not (response and response == -1):
|
||||
title = ["Adjust Bootable Volume Settings"]
|
||||
menu = Utilities.TUIMenu(title, "Please select an option: ", auto_number=True, top_level=True)
|
||||
options = [
|
||||
[f"Set FireWire Boot:\tCurrently {self.constants.firewire_boot}", CliMenu.MenuOptions(self.constants.custom_model or self.computer.real_model, self.constants).allow_firewire],
|
||||
[f"Set NVMe Boot:\tCurrently {self.constants.nvme_boot}", CliMenu.MenuOptions(self.constants.custom_model or self.computer.real_model, self.constants).allow_nvme],
|
||||
]
|
||||
|
||||
for option in options:
|
||||
menu.add_menu_option(option[0], function=option[1])
|
||||
|
||||
response = menu.start()
|
||||
|
||||
def patcher_settings_misc(self):
|
||||
response = None
|
||||
while not (response and response == -1):
|
||||
title = ["Adjust Miscellaneous Settings"]
|
||||
menu = Utilities.TUIMenu(title, "Please select an option: ", auto_number=True, top_level=True)
|
||||
options = [
|
||||
[f"Set ShowPicker Mode:\tCurrently {self.constants.showpicker}", CliMenu.MenuOptions(self.constants.custom_model or self.computer.real_model, self.constants).change_showpicker],
|
||||
[f"Set Wake on WLAN:\t\tCurrently {self.constants.enable_wake_on_wlan}", CliMenu.MenuOptions(self.constants.custom_model or self.computer.real_model, self.constants).allow_wowl],
|
||||
[f"Set Ivy iMac iGPU:\t\tCurrently {self.constants.allow_ivy_igpu}", CliMenu.MenuOptions(self.constants.custom_model or self.computer.real_model, self.constants).allow_ivy],
|
||||
[f"Set TeraScale 2 Accel:\tCurrently {self.constants.allow_ts2_accel}", CliMenu.MenuOptions(self.constants.custom_model or self.computer.real_model, self.constants).terascale_2_accel],
|
||||
[
|
||||
f"Disable Thunderbolt:\tCurrently {self.constants.disable_thunderbolt}",
|
||||
CliMenu.MenuOptions(self.constants.custom_model or self.computer.real_model, self.constants).disable_thunderbolt,
|
||||
],
|
||||
]
|
||||
|
||||
for option in options:
|
||||
@@ -118,20 +259,16 @@ system_profiler SPHardwareDataType | grep 'Model Identifier'
|
||||
def advanced_patcher_settings(self):
|
||||
response = None
|
||||
while not (response and response == -1):
|
||||
title = [
|
||||
"Adjust Advanced Patcher Settings, for developers ONLY"
|
||||
]
|
||||
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"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],
|
||||
[f"Set Metal GPU Status:\t\tCurrently {self.constants.imac_vendor}", CliMenu.MenuOptions(self.constants.custom_model or self.computer.real_model, self.constants).change_metal],
|
||||
[f"Set DRM Preferences:\t\tCurrently {self.constants.drm_support}", CliMenu.MenuOptions(self.constants.custom_model or self.computer.real_model, self.constants).drm_setting],
|
||||
[f"Set Generic Bootstrap:\t\tCurrently {self.constants.boot_efi}", CliMenu.MenuOptions(self.constants.custom_model or self.computer.real_model, self.constants).bootstrap_setting],
|
||||
[
|
||||
f"Disable CPU Friend:\t\t\tCurrently {self.constants.disallow_cpufriend}",
|
||||
CliMenu.MenuOptions(self.constants.custom_model or self.computer.real_model, self.constants).disable_cpufriend,
|
||||
],
|
||||
]
|
||||
|
||||
for option in options:
|
||||
@@ -140,8 +277,11 @@ system_profiler SPHardwareDataType | grep 'Model Identifier'
|
||||
response = menu.start()
|
||||
|
||||
def credits(self):
|
||||
Utilities.TUIOnlyPrint(["Credits"], "Press [Enter] to go back.\n",
|
||||
["""Many thanks to the following:
|
||||
Utilities.TUIOnlyPrint(
|
||||
["Credits"],
|
||||
"Press [Enter] to go back.\n",
|
||||
[
|
||||
"""Many thanks to the following:
|
||||
|
||||
- Acidanthera:\tOpenCore, kexts and other tools
|
||||
- Khronokernel:\tWriting and maintaining this patcher
|
||||
@@ -149,77 +289,137 @@ 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 and Innie"""]).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:
|
||||
big_sur = """Patches Root volume to fix misc issues such as:
|
||||
|
||||
- Graphics Acceleration for non-Metal GPUs
|
||||
- Nvidia: Tesla - Fermi (8000-500 series)
|
||||
- Non-Metal Graphics Acceleration
|
||||
- Intel: Ironlake - Sandy Bridge
|
||||
- AMD: TeraScale 1 (2000-4000 series)
|
||||
- Nvidia: Tesla - Fermi (8000-500 series)
|
||||
- AMD: TeraScale 1 and 2 (2000-6000 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
|
||||
is patched, you can no longer have Delta updates or have FileVault
|
||||
enabled.
|
||||
is patched, you can no longer have Delta updates.
|
||||
|
||||
Supported Options:
|
||||
|
||||
1. Patch System Volume
|
||||
2. Unpatch System Volume (Experimental)
|
||||
B. Exit
|
||||
""")
|
||||
"""
|
||||
monterey = """Patches Root volume to fix misc issues such as:
|
||||
|
||||
- Metal Graphics Acceleration
|
||||
- Intel: Ivy Bridge (4000 series iGPUs)
|
||||
- Nvidia: Kepler (600-700)
|
||||
- Non-Metal Graphics Accelertation
|
||||
- Intel: Ironlake - Sandy Bridge
|
||||
- Nvidia: Tesla - Fermi (8000-500 series)
|
||||
- AMD: TeraScale 1 and 2 (2000-6000 series)
|
||||
- Audio support for iMac7,1 and iMac8,1
|
||||
- Wifi support for BCM94328, BCM94322 and Atheros cards
|
||||
|
||||
WARNING: Root Volume Patching is still in active development, please
|
||||
have all important user data backed up. Note when the system volume
|
||||
is patched, you can no longer have Delta updates.
|
||||
|
||||
Supported Options:
|
||||
|
||||
1. Patch System Volume
|
||||
2. Unpatch System Volume (Experimental)
|
||||
B. Exit
|
||||
"""
|
||||
mojave_catalina = """Patches Root volume to fix misc issues such as:
|
||||
|
||||
- Non-Metal Graphics Acceleration
|
||||
- Intel: Ironlake - Sandy Bridge
|
||||
- Nvidia: Tesla - Fermi (8000-500 series)
|
||||
- AMD: TeraScale 1 and 2 (2000-6000 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
|
||||
is patched, you can no longer have Delta updates.
|
||||
|
||||
Supported Options:
|
||||
|
||||
1. Patch System Volume
|
||||
2. Unpatch System Volume (Experimental)
|
||||
B. Exit
|
||||
"""
|
||||
|
||||
default = """
|
||||
This OS has no root patches available to apply, please ensure you're patching a booted
|
||||
install that requires root patches such as macOS Big Sur or Monterey
|
||||
|
||||
Supported Options:
|
||||
|
||||
B. Exit
|
||||
"""
|
||||
no_patch = False
|
||||
if self.constants.detected_os == self.constants.monterey:
|
||||
print(monterey)
|
||||
elif self.constants.detected_os == self.constants.big_sur:
|
||||
print(big_sur)
|
||||
elif self.constants.detected_os in [self.constants.mojave, self.constants.catalina] and self.constants.moj_cat_accel == True:
|
||||
print(mojave_catalina)
|
||||
else:
|
||||
print(default)
|
||||
no_patch = True
|
||||
change_menu = input("Patch System Volume?: ")
|
||||
if change_menu == "1":
|
||||
SysPatch.PatchSysVolume(self.constants.custom_model or self.current_model, self.constants).start_patch()
|
||||
elif change_menu == "2":
|
||||
SysPatch.PatchSysVolume(self.constants.custom_model or self.current_model, self.constants).start_unpatch()
|
||||
if no_patch is not True and change_menu == "1":
|
||||
SysPatch.PatchSysVolume(self.constants.custom_model or self.computer.real_model, self.constants).start_patch()
|
||||
elif no_patch is not True and change_menu == "2":
|
||||
SysPatch.PatchSysVolume(self.constants.custom_model or self.computer.real_model, self.constants).start_unpatch()
|
||||
else:
|
||||
print("Returning to main menu")
|
||||
|
||||
def main_menu(self):
|
||||
response = None
|
||||
ModelArray.SupportedSMBIOS = ModelArray.SupportedSMBIOS11
|
||||
while not (response and response == -1):
|
||||
title = [
|
||||
f"OpenCore Legacy Patcher v{self.constants.patcher_version}",
|
||||
f"Selected Model: {self.constants.custom_model or self.current_model}",
|
||||
f"Target OS: macOS {self.constants.os_support}",
|
||||
f"Selected Model: {self.constants.custom_model or self.computer.real_model}",
|
||||
]
|
||||
|
||||
if (self.constants.custom_model or self.current_model) not in ModelArray.SupportedSMBIOS and self.constants.allow_oc_everywhere is False:
|
||||
if (self.constants.custom_model or self.computer.real_model) not in ModelArray.SupportedSMBIOS and self.constants.allow_oc_everywhere is False:
|
||||
in_between = [
|
||||
'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.'
|
||||
"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 \n"Change Model" option in the menu.',
|
||||
"",
|
||||
'If you want to run OCLP on a native Mac, please toggle \n"Allow OpenCore on native Models" in settings',
|
||||
]
|
||||
elif not self.constants.custom_model and self.current_model == "iMac7,1" and \
|
||||
"SSE4.1" not in subprocess.run("sysctl machdep.cpu.features".split(), stdout=subprocess.PIPE, stderr=subprocess.STDOUT).stdout.decode():
|
||||
elif not self.constants.custom_model and self.computer.real_model == "iMac7,1" and "SSE4.1" not in self.computer.cpu.flags:
|
||||
in_between = [
|
||||
'Your model requires a CPU upgrade to a CPU supporting SSE4.1+ to be supported by this patcher!',
|
||||
'',
|
||||
f'If you plan to create the USB for another {self.current_model} with SSE4.1+, please select the "Change Model" option in the menu.'
|
||||
"Your model requires a CPU upgrade to a CPU supporting SSE4.1+ to be supported by this patcher!",
|
||||
"",
|
||||
f'If you plan to create the USB for another {self.computer.real_model} with SSE4.1+, please select the "Change Model" option in the menu.',
|
||||
]
|
||||
elif self.constants.custom_model == "iMac7,1":
|
||||
in_between = ["This model is supported",
|
||||
"However please ensure the CPU has been upgraded to support SSE4.1+"
|
||||
]
|
||||
in_between = ["This model is supported", "However please ensure the CPU has been upgraded to support SSE4.1+"]
|
||||
else:
|
||||
in_between = ["This model is supported"]
|
||||
|
||||
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) or self.constants.allow_oc_everywhere is True else []) + [
|
||||
[["Build OpenCore", self.build_opencore]]
|
||||
if ((self.constants.custom_model or self.computer.real_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],
|
||||
["Patcher Settings", self.patcher_settings],
|
||||
["Credits", self.credits]
|
||||
["Credits", self.credits],
|
||||
]
|
||||
|
||||
for option in options:
|
||||
@@ -227,7 +427,7 @@ B. Exit
|
||||
|
||||
response = menu.start()
|
||||
|
||||
if getattr(sys, "frozen", False):
|
||||
if getattr(sys, "frozen", False) and self.constants.recovery_status is False:
|
||||
subprocess.run("""osascript -e 'tell application "Terminal" to close first window' & exit""", shell=True)
|
||||
|
||||
|
||||
|
||||
@@ -6,8 +6,9 @@ block_cipher = None
|
||||
|
||||
|
||||
a = Analysis(['OpenCore-Patcher.command'],
|
||||
pathex=['Resources'],
|
||||
binaries=[],
|
||||
datas=[('payloads', 'payloads'), ('Resources', 'Resources')],
|
||||
datas=[('payloads', 'payloads')],
|
||||
hiddenimports=[],
|
||||
hookspath=[],
|
||||
runtime_hooks=[],
|
||||
|
||||
31
README.md
31
README.md
@@ -1,8 +1,9 @@
|
||||
# OpenCore Legacy Patcher
|
||||
<div align="center">
|
||||
<img src="images/OC-Patcher.png" alt="OpenCore Patcher Logo" width="256" />
|
||||
<h1>OpenCore Legacy Patcher</h1>
|
||||
</div>
|
||||
|
||||
<img src="images/OC-Patcher.png" width="256">
|
||||
|
||||
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.
|
||||
A python program with an [Objective-C GUI](https://github.com/dortania/OCLP-GUI) 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:
|
||||
|
||||
@@ -19,7 +20,8 @@ Note: Only clean-installs and upgrades are supported, macOS Big Sur installs alr
|
||||
|
||||
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)
|
||||
* For macOS Mojave and Catalina support, we recommend the use of [dosdude1's patchers](http://dosdude1.com)
|
||||
* macOS Monterey usage is provided however support is limited, currently recommended for users to run Big Sur for best compatibility
|
||||
|
||||
## Support
|
||||
|
||||
@@ -27,6 +29,13 @@ To get aid with the patcher, we recommend joining the [OpenCore Patcher Paradise
|
||||
|
||||
* [OpenCore Legacy Patcher's Issue's tab](https://github.com/dortania/OpenCore-Legacy-Patcher/issues)
|
||||
|
||||
Nightly builds can be found here courteous of nightly.link:
|
||||
|
||||
* [Nightly OpenCore Patcher (GUI)](https://nightly.link/dortania/OpenCore-Legacy-Patcher/workflows/build-gui/main/OpenCore-Patcher-GUI.app.zip)
|
||||
* [Nightly OpenCore Patcher (TUI)](https://nightly.link/dortania/OpenCore-Legacy-Patcher/workflows/build-app/main/OpenCore-Patcher-TUI.app.zip)
|
||||
* [Offline Variant](https://nightly.link/dortania/OpenCore-Legacy-Patcher/workflows/build-app-offline/main/OpenCore-Patcher-TUI-Offline.app.zip) (No network connection needed on target Mac for Root Patching)
|
||||
* [Nightly OpenCore Patcher (CLI)](https://nightly.link/dortania/OpenCore-Legacy-Patcher/workflows/build-gui/main/OCLP-CLI.zip)
|
||||
|
||||
## Credits
|
||||
|
||||
* [Acidanthera](https://github.com/Acidanthera)
|
||||
@@ -37,6 +46,9 @@ To get aid with the patcher, we recommend joining the [OpenCore Patcher Paradise
|
||||
* Main co-author
|
||||
* [Ausdauersportler](https://github.com/Ausdauersportler)
|
||||
* iMacs Metal GPUs Upgrade Patch set and documentation
|
||||
* Great amounts of help debugging and code suggestions
|
||||
* [vit9696](https://github.com/vit9696)
|
||||
* Endless amount of help troubleshooting, determining fixes and writing patches
|
||||
* [ASentientBot](https://github.com/ASentientBot)
|
||||
* Legacy Acceleration Patch set and documentation
|
||||
* [cdf](https://github.com/cdf)
|
||||
@@ -44,13 +56,14 @@ To get aid with the patcher, we recommend joining the [OpenCore Patcher Paradise
|
||||
* [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)
|
||||
* [dosdude1](https://github.com/dosdude1)
|
||||
* Main author of GUI
|
||||
* Development of previous patchers, laying out much of what needs to be patched
|
||||
* [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
|
||||
* for macOS and many of the kexts, frameworks and other binaries we reimplemented into newer OSes
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -1,13 +1,9 @@
|
||||
# Handle misc CLI menu options
|
||||
# Copyright (C) 2020-2021, Dhinak G, Mykola Grymalyuk
|
||||
from __future__ import print_function
|
||||
|
||||
import subprocess
|
||||
import sys
|
||||
import time
|
||||
import platform
|
||||
|
||||
from Resources import Build, ModelArray, Constants, SysPatch, Utilities
|
||||
from Resources import Constants, Utilities
|
||||
|
||||
|
||||
class MenuOptions:
|
||||
@@ -15,63 +11,52 @@ class MenuOptions:
|
||||
self.model = model
|
||||
self.constants: Constants.Constants = versions
|
||||
|
||||
def change_os(self):
|
||||
Utilities.cls()
|
||||
Utilities.header(["Select Patcher's Target OS"])
|
||||
print(f"""
|
||||
Minimum Target:\t{self.constants.min_os_support}
|
||||
Maximum Target:\t{self.constants.max_os_support}
|
||||
Current target:\t{self.constants.os_support}
|
||||
""")
|
||||
temp_os_support = float(input("Please enter OS target: "))
|
||||
if (self.constants.max_os_support < temp_os_support) or (temp_os_support < self.constants.min_os_support):
|
||||
print("Unsupported entry")
|
||||
else:
|
||||
self.constants.os_support = temp_os_support
|
||||
if temp_os_support == 11.0:
|
||||
ModelArray.SupportedSMBIOS = ModelArray.SupportedSMBIOS11
|
||||
elif temp_os_support == 12.0:
|
||||
ModelArray.SupportedSMBIOS = ModelArray.SupportedSMBIOS12
|
||||
|
||||
def change_verbose(self):
|
||||
Utilities.cls()
|
||||
Utilities.header(["Set Verbose mode"])
|
||||
change_menu = input("Enable Verbose mode(y/n): ")
|
||||
change_menu = input("Enable Verbose mode(y/n/q): ")
|
||||
if change_menu in {"y", "Y", "yes", "Yes"}:
|
||||
self.constants.verbose_debug = True
|
||||
elif change_menu in {"n", "N", "no", "No"}:
|
||||
self.constants.verbose_debug = False
|
||||
elif change_menu in {"q", "Q", "Quit", "quit"}:
|
||||
print("Returning to previous menu")
|
||||
else:
|
||||
print("Invalid option")
|
||||
self.change_verbose()
|
||||
|
||||
def change_oc(self):
|
||||
Utilities.cls()
|
||||
Utilities.header(["Set OpenCore DEBUG mode"])
|
||||
change_menu = input("Enable OpenCore DEBUG mode(y/n): ")
|
||||
change_menu = input("Enable OpenCore DEBUG mode(y/n/q): ")
|
||||
if change_menu in {"y", "Y", "yes", "Yes"}:
|
||||
self.constants.opencore_debug = True
|
||||
self.constants.opencore_build = "DEBUG"
|
||||
elif change_menu in {"n", "N", "no", "No"}:
|
||||
self.constants.opencore_debug = False
|
||||
self.constants.opencore_build = "RELEASE"
|
||||
elif change_menu in {"q", "Q", "Quit", "quit"}:
|
||||
print("Returning to previous menu")
|
||||
else:
|
||||
print("Invalid option")
|
||||
self.change_oc()
|
||||
|
||||
def change_kext(self):
|
||||
Utilities.cls()
|
||||
Utilities.header(["Set Kext DEBUG mode"])
|
||||
change_menu = input("Enable Kext DEBUG mode(y/n): ")
|
||||
change_menu = input("Enable Kext DEBUG mode(y/n/q): ")
|
||||
if change_menu in {"y", "Y", "yes", "Yes"}:
|
||||
self.constants.kext_debug = True
|
||||
elif change_menu in {"n", "N", "no", "No"}:
|
||||
self.constants.kext_debug = False
|
||||
elif change_menu in {"q", "Q", "Quit", "quit"}:
|
||||
print("Returning to previous menu")
|
||||
else:
|
||||
print("Invalid option")
|
||||
self.change_kext()
|
||||
|
||||
def change_metal(self):
|
||||
Utilities.cls()
|
||||
Utilities.header(["Assume Metal GPU Always in iMac"])
|
||||
print("""This is for iMacs that have upgraded Metal GPUs, otherwise
|
||||
print(
|
||||
"""This is for iMacs that have upgraded Metal GPUs, otherwise
|
||||
Patcher assumes based on stock configuration (ie. iMac10,x-12,x)
|
||||
|
||||
Valid Options:
|
||||
@@ -79,10 +64,12 @@ Valid Options:
|
||||
1. None(stock GPU)
|
||||
2. Nvidia GPU
|
||||
3. AMD GPU
|
||||
Q. Return to previous menu
|
||||
|
||||
Note: Patcher will detect whether hardware has been upgraded regardless, this
|
||||
option is for those patching on a different machine or OCLP cannot detect.
|
||||
""")
|
||||
"""
|
||||
)
|
||||
change_menu = input("Set GPU Patch type(ie. 1): ")
|
||||
if change_menu == "1":
|
||||
self.constants.metal_build = False
|
||||
@@ -93,29 +80,16 @@ option is for those patching on a different machine or OCLP cannot detect.
|
||||
elif change_menu == "3":
|
||||
self.constants.metal_build = True
|
||||
self.constants.imac_vendor = "AMD"
|
||||
elif change_menu in {"q", "Q", "Quit", "quit"}:
|
||||
print("Returning to previous menu")
|
||||
else:
|
||||
print("Invalid option")
|
||||
|
||||
def change_wifi(self):
|
||||
Utilities.cls()
|
||||
Utilities.header(["Assume Upgraded Wifi Always"])
|
||||
print("""This is for Macs with upgraded wifi cards(ie. BCM94360/2)
|
||||
|
||||
Note: Patcher will detect whether hardware has been upgraded regardless, this
|
||||
option is for those patching on a different machine or cannot detect.
|
||||
""")
|
||||
change_menu = input("Enable Upgraded Wifi build algorithm?(y/n): ")
|
||||
if change_menu in {"y", "Y", "yes", "Yes"}:
|
||||
self.constants.wifi_build = True
|
||||
elif change_menu in {"n", "N", "no", "No"}:
|
||||
self.constants.wifi_build = False
|
||||
else:
|
||||
print("Invalid option")
|
||||
self.change_metal()
|
||||
|
||||
def change_serial(self):
|
||||
Utilities.cls()
|
||||
Utilities.header(["Set SMBIOS Mode"])
|
||||
print("""This section is for setting how OpenCore generates the SMBIOS
|
||||
Utilities.header(["Set SMBIOS Spoof Level"])
|
||||
print(
|
||||
"""This section is for setting how OpenCore generates the SMBIOS
|
||||
Recommended for adanced users who want control how serials are handled
|
||||
|
||||
Valid options:
|
||||
@@ -123,113 +97,147 @@ Valid options:
|
||||
1. Minimal:\tUse original serials and minimally update SMBIOS
|
||||
2. Moderate:\tReplace entire SMBIOS but keep original serials
|
||||
3. Advanced:\tReplace entire SMBIOS and generate new serials
|
||||
Q. Return to previous menu
|
||||
|
||||
Note: For new users we recommend leaving as default(1. Minimal)
|
||||
""")
|
||||
change_menu = input("Set SMBIOS Mode(ie. 1): ")
|
||||
"""
|
||||
)
|
||||
change_menu = input("Set SMBIOS Spoof Level(ie. 1): ")
|
||||
if change_menu == "1":
|
||||
self.constants.serial_settings = "Minimal"
|
||||
elif change_menu == "2":
|
||||
self.constants.serial_settings = "Moderate"
|
||||
elif change_menu == "3":
|
||||
self.constants.serial_settings = "Advanced"
|
||||
elif change_menu in {"q", "Q", "Quit", "quit"}:
|
||||
print("Returning to previous menu")
|
||||
else:
|
||||
print("Invalid option")
|
||||
self.change_serial()
|
||||
|
||||
def change_showpicker(self):
|
||||
Utilities.cls()
|
||||
Utilities.header(["Set OpenCore Picker mode"])
|
||||
print("""By default, OpenCore will show its boot picker each time on boot up,
|
||||
print(
|
||||
"""By default, OpenCore will show its boot picker each time on boot up,
|
||||
however this can be disabled by default and be shown on command by repeatedly
|
||||
pressing the "Esc" key
|
||||
""")
|
||||
change_menu = input("Show OpenCore Picker by default(y/n): ")
|
||||
"""
|
||||
)
|
||||
change_menu = input("Show OpenCore Picker by default(y/n/q): ")
|
||||
if change_menu in {"y", "Y", "yes", "Yes"}:
|
||||
self.constants.showpicker = True
|
||||
elif change_menu in {"n", "N", "no", "No"}:
|
||||
self.constants.showpicker = False
|
||||
elif change_menu in {"q", "Q", "Quit", "quit"}:
|
||||
print("Returning to previous menu")
|
||||
else:
|
||||
print("Invalid option")
|
||||
self.change_showpicker()
|
||||
|
||||
def change_vault(self):
|
||||
Utilities.cls()
|
||||
Utilities.header(["Set OpenCore Vaulting"])
|
||||
print("""By default, this patcher will sign all your files and ensure none of the
|
||||
print(
|
||||
"""By default, this patcher will sign all your files and ensure none of the
|
||||
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 security reasons, OpenShell will be disabled when Vault is set.
|
||||
|
||||
""")
|
||||
change_menu = input("Enable Vault(y/n): ")
|
||||
"""
|
||||
)
|
||||
change_menu = input("Enable Vault(y/n/q): ")
|
||||
if change_menu in {"y", "Y", "yes", "Yes"}:
|
||||
self.constants.vault = True
|
||||
elif change_menu in {"n", "N", "no", "No"}:
|
||||
self.constants.vault = False
|
||||
elif change_menu in {"q", "Q", "Quit", "quit"}:
|
||||
print("Returning to previous menu")
|
||||
else:
|
||||
print("Invalid option")
|
||||
self.change_vault()
|
||||
|
||||
def change_sip(self):
|
||||
Utilities.cls()
|
||||
Utilities.header(["Set SIP and SecureBootModel"])
|
||||
print("""SIP and SecureBootModel are used to ensure proper OTA functionality,
|
||||
however to patch the root volume both of these must be disabled.
|
||||
Utilities.header(["Set System Integrity protection"])
|
||||
print(
|
||||
"""SIP is used to ensure proper secuirty measures are set,
|
||||
however to patch the root volume this must be disabled.
|
||||
Only disable is absolutely necessary. SIP value = 0xFEF
|
||||
|
||||
Note: for minor changes, SIP can be adjusted in recovery like normal.
|
||||
Additionally, when disabling SIP via the patcher amfi_get_out_of_my_way=1
|
||||
will be added to boot-args.
|
||||
|
||||
Valid options:
|
||||
|
||||
1. Enable Both
|
||||
2. Disable SIP only
|
||||
3. Disable SecureBootModel Only
|
||||
4. Disable Both
|
||||
1. Enable SIP
|
||||
2. Disable SIP
|
||||
Q. Return to previous menu
|
||||
|
||||
""")
|
||||
change_menu = input("Set SIP and SecureBootModel(ie. 1): ")
|
||||
"""
|
||||
)
|
||||
change_menu = input("Set SIP: ")
|
||||
if change_menu == "1":
|
||||
self.constants.sip_status = True
|
||||
self.constants.secure_status = True
|
||||
elif change_menu == "2":
|
||||
self.constants.sip_status = False
|
||||
self.constants.secure_status = True
|
||||
elif change_menu == "3":
|
||||
self.constants.sip_status = True
|
||||
self.constants.secure_status = False
|
||||
elif change_menu == "4":
|
||||
self.constants.sip_status = False
|
||||
self.constants.secure_status = False
|
||||
elif change_menu in {"q", "Q", "Quit", "quit"}:
|
||||
print("Returning to previous menu")
|
||||
else:
|
||||
print("Invalid option")
|
||||
self.change_sip()
|
||||
|
||||
def change_imac_nvidia(self):
|
||||
def change_sbm(self):
|
||||
Utilities.cls()
|
||||
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.
|
||||
""")
|
||||
change_menu = input("Assume iMac Nvidia patches(y/n): ")
|
||||
if change_menu in {"y", "Y", "yes", "Yes"}:
|
||||
self.constants.imac_nvidia_build = True
|
||||
elif change_menu in {"n", "N", "no", "No"}:
|
||||
self.constants.imac_nvidia_build = False
|
||||
Utilities.header(["Set SecureBootModel"])
|
||||
print(
|
||||
"""SecureBootModel is used to ensure best firmware security,
|
||||
however to patch the root volume this must be disabled.
|
||||
Only disable is absolutely necessary. SIP value = 0xFEF
|
||||
|
||||
Valid options:
|
||||
|
||||
1. Enable SecureBootModel
|
||||
2. Disable SecureBootModel
|
||||
Q. Return to previous menu
|
||||
|
||||
"""
|
||||
)
|
||||
change_menu = input("Set SecureBootModel: ")
|
||||
if change_menu == "1":
|
||||
self.constants.secure_status = True
|
||||
elif change_menu == "2":
|
||||
self.constants.secure_status = False
|
||||
elif change_menu in {"q", "Q", "Quit", "quit"}:
|
||||
print("Returning to previous menu")
|
||||
else:
|
||||
print("Invalid option")
|
||||
self.change_sbm()
|
||||
|
||||
def set_amfi(self):
|
||||
Utilities.cls()
|
||||
Utilities.header(["Set AMFI"])
|
||||
print(
|
||||
"""Required for Root Patching non-Metal GPUs
|
||||
in macOS Big Sur. Without this, will receive kernel panic once
|
||||
Patcher finishes installing legacy acceleration patches.
|
||||
"""
|
||||
)
|
||||
change_menu = input("Disable AMFI(y/n/q): ")
|
||||
if change_menu in {"y", "Y", "yes", "Yes"}:
|
||||
self.constants.amfi_status = False
|
||||
elif change_menu in {"n", "N", "no", "No"}:
|
||||
self.constants.amfi_status = True
|
||||
elif change_menu in {"q", "Q", "Quit", "quit"}:
|
||||
print("Returning to previous menu")
|
||||
else:
|
||||
self.set_amfi()
|
||||
|
||||
def bootstrap_setting(self):
|
||||
Utilities.cls()
|
||||
Utilities.header(["Set Bootstrap method"])
|
||||
print("""Sets OpenCore's bootstrap method, currently the patcher supports the
|
||||
print(
|
||||
"""Sets OpenCore's bootstrap method, currently the patcher supports the
|
||||
following options.
|
||||
|
||||
Valid options:
|
||||
|
||||
1. System/Library/CoreServices/boot.efi (default)
|
||||
2. EFI/BOOT/BOOTx64.efi
|
||||
3. Exit
|
||||
Q. Return to previous menu
|
||||
|
||||
Note: S*/L*/C*/boot.efi method is only installed to the EFI partition only
|
||||
and not to macOS itself.
|
||||
@@ -237,20 +245,23 @@ and not to macOS itself.
|
||||
Recommended to set to BOOTx64.efi in situations where your Mac cannot
|
||||
see the EFI Boot entry in the boot picker.
|
||||
|
||||
""")
|
||||
"""
|
||||
)
|
||||
change_menu = input("Set Bootstrap method: ")
|
||||
if change_menu == "1":
|
||||
self.constants.boot_efi = False
|
||||
elif change_menu == "2":
|
||||
self.constants.boot_efi = True
|
||||
elif change_menu in {"q", "Q", "Quit", "quit"}:
|
||||
print("Returning to previous menu")
|
||||
else:
|
||||
print("Invalid option")
|
||||
|
||||
self.bootstrap_setting()
|
||||
|
||||
def drm_setting(self):
|
||||
Utilities.cls()
|
||||
Utilities.header(["Set DRM preferences"])
|
||||
print("""Sets OpenCore's DRM preferences for iMac13,x and iMac14,x.
|
||||
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.
|
||||
|
||||
@@ -260,59 +271,53 @@ 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): ")
|
||||
"""
|
||||
)
|
||||
change_menu = input("Enable Nvidia's Software DRM rendering(y/n/q): ")
|
||||
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
|
||||
elif change_menu in {"q", "Q", "Quit", "quit"}:
|
||||
print("Returning to previous menu")
|
||||
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")
|
||||
self.drm_setting()
|
||||
|
||||
def allow_native_models(self):
|
||||
Utilities.cls()
|
||||
Utilities.header(["Allow OpenCore on native Models"])
|
||||
print("""Allows natively supported Macs to use OpenCore. Recommended
|
||||
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): ")
|
||||
"""
|
||||
)
|
||||
change_menu = input("Allow OpenCore on all Models(y/n/q): ")
|
||||
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"
|
||||
elif change_menu in {"q", "Q", "Quit", "quit"}:
|
||||
print("Returning to previous menu")
|
||||
else:
|
||||
print("Invalid option")
|
||||
self.allow_native_models()
|
||||
|
||||
def custom_cpu(self):
|
||||
Utilities.cls()
|
||||
Utilities.header(["Set custom CPU Model Name"])
|
||||
print("""Change reported CPU Model name in About This Mac
|
||||
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)
|
||||
""")
|
||||
Q. Return to previous menu
|
||||
"""
|
||||
)
|
||||
if self.constants.custom_cpu_model_value == "":
|
||||
if self.constants.custom_cpu_model == 0:
|
||||
print("Currently using original name")
|
||||
@@ -330,56 +335,299 @@ Custom names will report as follows:
|
||||
elif change_menu == "3":
|
||||
self.constants.custom_cpu_model = 1
|
||||
self.constants.custom_cpu_model_value = input("Enter new CPU Name: ")
|
||||
elif change_menu in {"q", "Q", "Quit", "quit"}:
|
||||
print("Returning to previous menu")
|
||||
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")
|
||||
self.custom_cpu()
|
||||
|
||||
def disable_cpufriend(self):
|
||||
Utilities.cls()
|
||||
Utilities.header(["Disable CPU Friend?"])
|
||||
print("""Only recommended for advanced users
|
||||
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":
|
||||
"""
|
||||
)
|
||||
change_menu = input("Disable CPU Friend?(y/n/q): ")
|
||||
if change_menu in {"y", "Y", "yes", "Yes"}:
|
||||
self.constants.disallow_cpufriend = True
|
||||
elif change_menu == "n":
|
||||
elif change_menu in {"n", "N", "no", "No"}:
|
||||
self.constants.disallow_cpufriend = False
|
||||
elif change_menu in {"q", "Q", "Quit", "quit"}:
|
||||
print("Returning to previous menu")
|
||||
else:
|
||||
print("Invalid option")
|
||||
self.disable_cpufriend()
|
||||
|
||||
def set_smbios(self):
|
||||
Utilities.cls()
|
||||
Utilities.header(["Set SMBIOS Spoof Model"])
|
||||
print(
|
||||
"""Change model OpenCore spoofs Mac too
|
||||
|
||||
Valid options:
|
||||
1. Default set by OpenCore (Default)
|
||||
2. User Override
|
||||
3. Disable all spoofing (unsupported configuration)
|
||||
Q. Return to previous menu
|
||||
"""
|
||||
)
|
||||
|
||||
change_menu = input("Set SMBIOS Spoof Model: ")
|
||||
if change_menu == "1":
|
||||
print("Setting SMBIOS spoof to default mode")
|
||||
self.constants.override_smbios = "Default"
|
||||
elif change_menu == "2":
|
||||
custom_smbios = input("Set new SMBIOS mode: ")
|
||||
try:
|
||||
test = self.constants.board_id[custom_smbios]
|
||||
self.constants.override_smbios = custom_smbios
|
||||
except KeyError:
|
||||
print("Unsupported SMBIOS, defaulting to Default setting")
|
||||
self.constants.override_smbios = "Default"
|
||||
elif change_menu == "3":
|
||||
print("Disabling SMBIOS spoof")
|
||||
self.constants.override_smbios = self.model
|
||||
elif change_menu in {"q", "Q", "Quit", "quit"}:
|
||||
print("Returning to previous menu")
|
||||
else:
|
||||
self.set_smbios()
|
||||
|
||||
def allow_firewire(self):
|
||||
Utilities.cls()
|
||||
Utilities.header(["Allow FireWire Boot Support"])
|
||||
print(
|
||||
"""
|
||||
In macOS Catalina and newer, Apple restricted
|
||||
usage of FireWire devices to boot macOS for
|
||||
security concerns relating to DMA access.
|
||||
|
||||
If you are comfortable lowering the security,
|
||||
you can re-enable FireWire support for Catalina
|
||||
and newer.
|
||||
|
||||
Note: MacBook5,x-7,1 don't support FireWire boot
|
||||
"""
|
||||
)
|
||||
|
||||
change_menu = input("Enable FireWire Boot support?(y/n/q): ")
|
||||
if change_menu in {"y", "Y", "yes", "Yes"}:
|
||||
self.constants.firewire_boot = True
|
||||
elif change_menu in {"n", "N", "no", "No"}:
|
||||
self.constants.firewire_boot = False
|
||||
elif change_menu in {"q", "Q", "Quit", "quit"}:
|
||||
print("Returning to previous menu")
|
||||
else:
|
||||
self.allow_firewire()
|
||||
|
||||
def allow_nvme(self):
|
||||
Utilities.cls()
|
||||
Utilities.header(["Allow NVMe UEFI Support"])
|
||||
print(
|
||||
"""
|
||||
For machines not natively supporting NVMe,
|
||||
this option allows you to see and boot NVMe
|
||||
drive in OpenCore's picker
|
||||
|
||||
Not required if your machine natively supports NVMe
|
||||
|
||||
Note: You must have OpenCore on a bootable volume
|
||||
first, ie. USB or SATA drive. Once loaded,
|
||||
OpenCore will enable NVMe support in it's picker
|
||||
"""
|
||||
)
|
||||
|
||||
change_menu = input("Enable NVMe Boot support?(y/n/q): ")
|
||||
if change_menu in {"y", "Y", "yes", "Yes"}:
|
||||
self.constants.nvme_boot = True
|
||||
elif change_menu in {"n", "N", "no", "No"}:
|
||||
self.constants.nvme_boot = False
|
||||
elif change_menu in {"q", "Q", "Quit", "quit"}:
|
||||
print("Returning to previous menu")
|
||||
else:
|
||||
self.allow_nvme()
|
||||
|
||||
def allow_wowl(self):
|
||||
Utilities.cls()
|
||||
Utilities.header(["Allow Wake on WLAN"])
|
||||
print(
|
||||
"""
|
||||
Due to an unfortunate bug in macOS Big Sur+, Wake on WLAN is
|
||||
disabled by default for BCM943224, BCM94331 and BCM94360/2 chipsets.
|
||||
|
||||
This is due to Wake on WLAN creating network instability and in other cases
|
||||
halving network speeds. This issue is not replicable across machines however
|
||||
be prepared if enabling.
|
||||
"""
|
||||
)
|
||||
|
||||
change_menu = input("Allow Wake on WLAN?(y/n/q): ")
|
||||
if change_menu in {"y", "Y", "yes", "Yes"}:
|
||||
self.constants.enable_wake_on_wlan = True
|
||||
elif change_menu in {"n", "N", "no", "No"}:
|
||||
self.constants.enable_wake_on_wlan = False
|
||||
elif change_menu in {"q", "Q", "Quit", "quit"}:
|
||||
print("Returning to previous menu")
|
||||
else:
|
||||
self.allow_wowl()
|
||||
|
||||
def allow_ivy(self):
|
||||
Utilities.cls()
|
||||
Utilities.header(["Allow Ivy iMac iGPU"])
|
||||
print(
|
||||
"""
|
||||
For iMac13,x systems with a Nvidia dGPU, the iGPU is disabled by default to
|
||||
allow Delta Updates, FileVault, SIP and such on macOS Monterey. However due to
|
||||
this, DRM and QuickSync support may be broken.
|
||||
|
||||
Users can choose to override this option but be aware SIP must be
|
||||
disabled to run root patches to fix DRM and QuickSync.
|
||||
|
||||
Note: This does not apply for Big Sur, the iGPU can be renabled without
|
||||
consequence
|
||||
Note 2: This setting only affects iMac13,x with dGPUs
|
||||
"""
|
||||
)
|
||||
|
||||
change_menu = input("Allow Ivy iMac iGPU?(y/n/q): ")
|
||||
if change_menu in {"y", "Y", "yes", "Yes"}:
|
||||
self.constants.allow_ivy_igpu = True
|
||||
elif change_menu in {"n", "N", "no", "No"}:
|
||||
self.constants.allow_ivy_igpu = False
|
||||
elif change_menu in {"q", "Q", "Quit", "quit"}:
|
||||
print("Returning to previous menu")
|
||||
else:
|
||||
self.allow_ivy()
|
||||
|
||||
def latebloom_settings(self):
|
||||
Utilities.cls()
|
||||
Utilities.header(["Set latebloom properties"])
|
||||
print(
|
||||
f"""
|
||||
Set latebloom properties, useful for debugging boot stalls on
|
||||
pre-Sandy Bridge Macs.
|
||||
|
||||
Valid options:
|
||||
|
||||
1. Set delay (currently: {self.constants.latebloom_delay}ms)
|
||||
2. Set range (currently: {self.constants.latebloom_range}ms)
|
||||
3. Set debug (currently: {bool(self.constants.latebloom_debug)})
|
||||
Q. Return to previous menu
|
||||
"""
|
||||
)
|
||||
|
||||
change_menu = input("Select latebloom property(1/2/3): ")
|
||||
if change_menu == "1":
|
||||
try:
|
||||
self.constants.latebloom_delay = int(input("Set delay: "))
|
||||
except ValueError:
|
||||
input("Invalid value, press [ENTER] to continue")
|
||||
self.latebloom_settings()
|
||||
elif change_menu == "2":
|
||||
try:
|
||||
self.constants.latebloom_range = int(input("Set range: "))
|
||||
except ValueError:
|
||||
input("Invalid value, press [ENTER] to continue")
|
||||
self.latebloom_settings()
|
||||
elif change_menu == "3":
|
||||
try:
|
||||
print("Currently supports either 0(False) or 1(True)")
|
||||
latebloom_debug = int(input("Set debug(0/1): "))
|
||||
if latebloom_debug not in [0, 1]:
|
||||
input("Invalid value, press [ENTER] to continue")
|
||||
else:
|
||||
self.constants.latebloom_debug = latebloom_debug
|
||||
except ValueError:
|
||||
input("Invalid value, press [ENTER] to continue")
|
||||
self.latebloom_settings()
|
||||
elif change_menu in {"q", "Q", "Quit", "quit"}:
|
||||
print("Returning to previous menu")
|
||||
else:
|
||||
self.latebloom_settings()
|
||||
|
||||
def allow_moj_cat_patch(self):
|
||||
Utilities.cls()
|
||||
Utilities.header(["Allow Root Patching on Mojave/Catalina"])
|
||||
print(
|
||||
"""
|
||||
This is an experimental option that allows the usage of legacy acceleration
|
||||
patches in Mojave and Catalina.
|
||||
|
||||
The main goal of this is to allow developers to better test patch sets as well
|
||||
as allow acceleration on TeraScale 2 machines. Not all features may be available
|
||||
(ie. GPU switching may not work, etc)
|
||||
|
||||
Note: for the average user, we recommend using dosdude1's legacy patcher:
|
||||
|
||||
- http://dosdude1.com/software.html
|
||||
"""
|
||||
)
|
||||
|
||||
change_menu = input("Allow Root Patching on Mojave/Catalina?(y/n/q): ")
|
||||
if change_menu in {"y", "Y", "yes", "Yes"}:
|
||||
self.constants.moj_cat_accel = True
|
||||
elif change_menu in {"n", "N", "no", "No"}:
|
||||
self.constants.moj_cat_accel = False
|
||||
elif change_menu in {"q", "Q", "Quit", "quit"}:
|
||||
print("Returning to previous menu")
|
||||
else:
|
||||
self.allow_moj_cat_patch()
|
||||
|
||||
def disable_thunderbolt(self):
|
||||
Utilities.cls()
|
||||
Utilities.header(["Disable Thunderbolt on 2013-14 MacBook Pros"])
|
||||
print(
|
||||
"""
|
||||
Some 2013-14 MacBook Pro's have issues with the built-in thunderbolt,
|
||||
resulting in kernel panics and random shutdowns.
|
||||
|
||||
To alliviate, you can disable the thunderbolt controller on MacBookPro11,x
|
||||
machines with this option.
|
||||
|
||||
Note: This option only works on MacBookPro11,x, file an issue if you know of
|
||||
other devices that benefit from this fix.
|
||||
"""
|
||||
)
|
||||
|
||||
change_menu = input("Disable Thunderbolt?(y/n/q): ")
|
||||
if change_menu in {"y", "Y", "yes", "Yes"}:
|
||||
self.constants.disable_thunderbolt = True
|
||||
elif change_menu in {"n", "N", "no", "No"}:
|
||||
self.constants.disable_thunderbolt = False
|
||||
elif change_menu in {"q", "Q", "Quit", "quit"}:
|
||||
print("Returning to previous menu")
|
||||
else:
|
||||
self.disable_thunderbolt()
|
||||
|
||||
def terascale_2_accel(self):
|
||||
Utilities.cls()
|
||||
Utilities.header(["Set TeraScale 2 Acceleration"])
|
||||
print(
|
||||
"""
|
||||
By default this patcher will install TeraScale 2 acceleration, however
|
||||
for some laptops this may be undesired due to how degraded their dGPU
|
||||
is.
|
||||
|
||||
Disabling TeraScale 2 acceleration will instead install basic framebuffer
|
||||
support allowing for basic brightness control and let the HD3000 iGPU
|
||||
handle acceleration tasks.
|
||||
"""
|
||||
)
|
||||
|
||||
change_menu = input("Allow TeraScale 2 Acceleration?(y/n/q): ")
|
||||
if change_menu in {"y", "Y", "yes", "Yes"}:
|
||||
self.constants.allow_ts2_accel = True
|
||||
elif change_menu in {"n", "N", "no", "No"}:
|
||||
self.constants.allow_ts2_accel = False
|
||||
elif change_menu in {"q", "Q", "Quit", "quit"}:
|
||||
print("Returning to previous menu")
|
||||
else:
|
||||
self.terascale_2_accel()
|
||||
|
||||
def dump_hardware(self):
|
||||
Utilities.cls()
|
||||
Utilities.header(["Dumping detected hardware"])
|
||||
print("")
|
||||
print(self.constants.computer)
|
||||
input("\nPress [ENTER] to exit: ")
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -1,96 +0,0 @@
|
||||
# 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 "", "", "", ""
|
||||
File diff suppressed because it is too large
Load Diff
343
Resources/ModelExample.py
Normal file
343
Resources/ModelExample.py
Normal file
@@ -0,0 +1,343 @@
|
||||
# Example Hardware probe of multiple models
|
||||
# To be used when running validation tests
|
||||
from Resources import device_probe
|
||||
|
||||
class MacBook:
|
||||
|
||||
MacBook71 = device_probe.Computer(
|
||||
real_model="MacBook7,1",
|
||||
real_board_id="Mac-F22C89C8",
|
||||
reported_model="MacBook7,1",
|
||||
reported_board_id="Mac-F22C89C8",
|
||||
gpus=[
|
||||
device_probe.NVIDIA(vendor_id=4318, device_id=2208, class_code=196608, name="IGPU", model="NVIDIA GeForce 320M", pci_path="PciRoot(0x0)/Pci(0x2,0x0)"),
|
||||
],
|
||||
igpu=device_probe.NVIDIA(vendor_id=4318, device_id=2208, class_code=196608, name="IGPU", model="NVIDIA GeForce 320M", pci_path="PciRoot(0x0)/Pci(0x2,0x0)"),
|
||||
dgpu=None,
|
||||
storage=[
|
||||
device_probe.SATAController(vendor_id=4318, device_id=3464, class_code=67073, name="SATA", model=None, pci_path="PciRoot(0x0)/Pci(0xa,0x0)"),
|
||||
],
|
||||
wifi=device_probe.Broadcom(vendor_id=5348, device_id=17235, class_code=163840, name="ARPT", model=None, pci_path="PciRoot(0x0)/Pci(0x15,0x0)/Pci(0x0,0x0)"),
|
||||
cpu=device_probe.CPU(
|
||||
name="Intel(R) Core(TM)2 Duo CPU P8600 @ 2.40GHz",
|
||||
flags=["FPU", "VME", "DE", "PSE", "TSC", "MSR", "PAE", "MCE", "CX8", "APIC", "SEP", "MTRR", "PGE", "MCA", "CMOV", "PAT", "PSE36", "CLFSH", "DS", "ACPI", "MMX", "FXSR", "SSE", "SSE2", "SS", "HTT", "TM", "PBE", "SSE3", "DTES64", "MON", "DSCPL", "VMX", "SMX", "EST", "TM2", "SSSE3", "CX16", "TPR", "PDCM", "SSE4.1"],
|
||||
),
|
||||
oclp_version=None,
|
||||
opencore_version=None,
|
||||
)
|
||||
|
||||
class MacBookPro:
|
||||
|
||||
MacBookPro92_Stock = device_probe.Computer(
|
||||
real_model="MacBookPro9,2",
|
||||
real_board_id="Mac-6F01561E16C75D06",
|
||||
reported_model="MacBookPro9,2",
|
||||
reported_board_id="Mac-6F01561E16C75D06",
|
||||
gpus=[
|
||||
device_probe.Intel(vendor_id=32902, device_id=358, class_code=196608, name="IGPU", model="Intel HD Graphics 4000", pci_path="PciRoot(0x0)/Pci(0x2,0x0)")
|
||||
],
|
||||
igpu=device_probe.Intel(vendor_id=32902, device_id=358, class_code=196608, name="IGPU", model="Intel HD Graphics 4000", pci_path="PciRoot(0x0)/Pci(0x2,0x0)"),
|
||||
dgpu=None,
|
||||
storage=[device_probe.SATAController(vendor_id=32902, device_id=7683, class_code=67073, name="SATA", model=None, pci_path="PciRoot(0x0)/Pci(0x1f,0x2)")],
|
||||
wifi=device_probe.Broadcom(vendor_id=5348, device_id=17201, class_code=163840, name="ARPT", model=None, pci_path="PciRoot(0x0)/Pci(0x1c,0x1)/Pci(0x0,0x0)"),
|
||||
cpu=device_probe.CPU(
|
||||
name='Intel(R) Core(TM) i5-3210M CPU @ 2.50GHz',
|
||||
flags=['FPU', 'VME', 'DE', 'PSE', 'TSC', 'MSR', 'PAE', 'MCE', 'CX8', 'APIC', 'SEP', 'MTRR', 'PGE', 'MCA', 'CMOV', 'PAT', 'PSE36', 'CLFSH', 'DS', 'ACPI', 'MMX', 'FXSR', 'SSE', 'SSE2', 'SS', 'HTT', 'TM', 'PBE', 'SSE3', 'PCLMULQDQ', 'DTES64', 'MON', 'DSCPL', 'VMX', 'EST', 'TM2', 'SSSE3', 'CX16', 'TPR', 'PDCM', 'SSE4.1', 'SSE4.2', 'x2APIC', 'POPCNT', 'AES', 'PCID', 'XSAVE', 'OSXSAVE', 'TSCTMR', 'AVX1.0', 'RDRAND', 'F16C']
|
||||
),
|
||||
oclp_version=None,
|
||||
opencore_version=None,
|
||||
)
|
||||
|
||||
MacBookPro171_Stock = device_probe.Computer(
|
||||
# Run under Rosetta
|
||||
real_model="MacBookPro17,1",
|
||||
real_board_id="J293",
|
||||
reported_model="MacBookPro17,1",
|
||||
reported_board_id="J293",
|
||||
gpus=[device_probe.AMD(vendor_id=4098, device_id=26640, class_code=196608, name="display", model="Unknown Unknown", pci_path="")],
|
||||
igpu=None,
|
||||
dgpu=None,
|
||||
storage=[],
|
||||
wifi=device_probe.Broadcom(vendor_id=5348, device_id=17445, class_code=163840, name="wlan", model=None, pci_path=""),
|
||||
cpu=device_probe.CPU(
|
||||
name="Apple M1",
|
||||
flags=["FPU", "VME", "DE", "PSE", "TSC", "MSR", "PAE", "MCE", "CX8", "APIC", "SEP", "MTRR", "PGE", "MCA", "CMOV", "PAT", "PSE36", "CLFSH", "DS", "ACPI", "MMX", "FXSR", "SSE", "SSE2", "SS", "HTT", "TM", "PBE", "SSE3", "PCLMULQDQ", "DTSE64", "MON", "DSCPL", "VMX", "EST", "TM2", "SSSE3", "CX16", "TPR", "PDCM", "SSE4.1", "SSE4.2", "AES", "SEGLIM64"],
|
||||
),
|
||||
oclp_version=None,
|
||||
opencore_version=None,
|
||||
)
|
||||
|
||||
class Macmini:
|
||||
|
||||
Macmini81_Stock = device_probe.Computer(
|
||||
real_model="Macmini8,1",
|
||||
real_board_id="Mac-7BA5B2DFE22DDD8C",
|
||||
reported_model="Macmini8,1",
|
||||
reported_board_id="Mac-7BA5B2DFE22DDD8C",
|
||||
gpus=[device_probe.Intel(vendor_id=32902, device_id=16027, class_code=196608, name="IGPU", model="Intel UHD Graphics 630", pci_path="PciRoot(0x0)/Pci(0x2,0x0)")],
|
||||
igpu=device_probe.Intel(vendor_id=32902, device_id=16027, class_code=196608, name="IGPU", model="Intel UHD Graphics 630", pci_path="PciRoot(0x0)/Pci(0x2,0x0)"),
|
||||
dgpu=None,
|
||||
storage=[],
|
||||
wifi=device_probe.Broadcom(vendor_id=5348, device_id=17508, class_code=163840, name="ARPT", model=None, pci_path="PciRoot(0x0)/Pci(0x1c,0x0)/Pci(0x0,0x0)"),
|
||||
cpu=device_probe.CPU(
|
||||
name="Intel(R) Core(TM) i7-8700B CPU @ 3.20GHz",
|
||||
flags=["FPU", "VME", "DE", "PSE", "TSC", "MSR", "PAE", "MCE", "CX8", "APIC", "SEP", "MTRR", "PGE", "MCA", "CMOV", "PAT", "PSE36", "CLFSH", "DS", "ACPI", "MMX", "FXSR", "SSE", "SSE2", "SS", "HTT", "TM", "PBE", "SSE3", "PCLMULQDQ", "DTES64", "MON", "DSCPL", "VMX", "SMX", "EST", "TM2", "SSSE3", "FMA", "CX16", "TPR", "PDCM", "SSE4.1", "SSE4.2", "x2APIC", "MOVBE", "POPCNT", "AES", "PCID", "XSAVE", "OSXSAVE", "SEGLIM64", "TSCTMR", "AVX1.0", "RDRAND", "F16C"]
|
||||
),
|
||||
oclp_version=None,
|
||||
opencore_version=None
|
||||
)
|
||||
|
||||
Macmini91_Stock = device_probe.Computer(
|
||||
# Run under Rosetta
|
||||
real_model="Macmini9,1",
|
||||
real_board_id="J274",
|
||||
reported_model="Macmini9,1",
|
||||
reported_board_id="J274",
|
||||
gpus=[
|
||||
device_probe.AMD(vendor_id=4098, device_id=26640, class_code=196608, name="display", model="Unknown Unknown", pci_path="", )
|
||||
],
|
||||
igpu=None,
|
||||
dgpu=None,
|
||||
storage=[],
|
||||
wifi=device_probe.Broadcom(vendor_id=5348, device_id=17445, class_code=163840, name="wlan", model=None, pci_path=""),
|
||||
cpu=device_probe.CPU(
|
||||
name="Apple M1",
|
||||
flags=["FPU", "VME", "DE", "PSE", "TSC", "MSR", "PAE", "MCE", "CX8", "APIC", "SEP", "MTRR", "PGE", "MCA", "CMOV", "PAT", "PSE36", "CLFSH", "DS", "ACPI", "MMX", "FXSR", "SSE", "SSE2", "SS", "HTT", "TM", "PBE", "SSE3", "PCLMULQDQ", "DTSE64", "MON", "DSCPL", "VMX", "EST", "TM2", "SSSE3", "CX16", "TPR", "PDCM", "SSE4.1", "SSE4.2", "AES", "SEGLIM64"]
|
||||
),
|
||||
oclp_version=None,
|
||||
opencore_version=None
|
||||
)
|
||||
|
||||
class iMac:
|
||||
|
||||
iMac81_Stock = device_probe.Computer(
|
||||
# Stock Model
|
||||
real_model="iMac8,1",
|
||||
real_board_id="Mac-F226BEC8",
|
||||
reported_model="iMac8,1",
|
||||
reported_board_id="Mac-F226BEC8",
|
||||
gpus=[
|
||||
device_probe.AMD(vendor_id=4098, device_id=38088, class_code=196608, name="GFX0", model="ATI Radeon HD 2400", pci_path="PciRoot(0x0)/Pci(0x1,0x0)/Pci(0x0,0x0)")
|
||||
],
|
||||
igpu=None,
|
||||
dgpu=device_probe.AMD(vendor_id=4098, device_id=38088, class_code=196608, name="GFX0", model="ATI Radeon HD 2400", pci_path="PciRoot(0x0)/Pci(0x1,0x0)/Pci(0x0,0x0)"),
|
||||
storage=[
|
||||
device_probe.SATAController(vendor_id=32902, device_id=10281, class_code=67073, name="SATA", model=None, pci_path="PciRoot(0x0)/Pci(0x1f,0x2)")
|
||||
],
|
||||
wifi=device_probe.Broadcom(vendor_id=5348, device_id=17192, class_code=163840, name="ARPT", model=None, pci_path="PciRoot(0x0)/Pci(0x1c,0x4)/Pci(0x0,0x0)"),
|
||||
cpu=device_probe.CPU(
|
||||
name="Intel(R) Core(TM)2 Duo CPU E8135 @ 2.40GHz",
|
||||
flags=["FPU", "VME", "DE", "PSE", "TSC", "MSR", "PAE", "MCE", "CX8", "APIC", "SEP", "MTRR", "PGE", "MCA", "CMOV", "PAT", "PSE36", "CLFSH", "DS", "ACPI", "MMX", "FXSR", "SSE", "SSE2", "SS", "HTT", "TM", "PBE", "SSE3", "DTES64", "MON", "DSCPL", "VMX", "EST", "TM2", "SSSE3", "CX16", "TPR", "PDCM", "SSE4.1"]
|
||||
),
|
||||
oclp_version=None,
|
||||
opencore_version=None,
|
||||
)
|
||||
|
||||
iMac112_Stock = device_probe.Computer(
|
||||
# Stock Model
|
||||
real_model="iMac11,2",
|
||||
real_board_id="Mac-F2238AC8",
|
||||
reported_model="iMac11,2",
|
||||
reported_board_id="Mac-F2238AC8",
|
||||
gpus=[
|
||||
device_probe.AMD(vendor_id=4098, device_id=38024, class_code=196608, name="GFX0", model="ATI Radeon HD 4670", pci_path="PciRoot(0x0)/Pci(0x1,0x0)/Pci(0x0,0x0)")
|
||||
],
|
||||
igpu=None,
|
||||
dgpu=device_probe.AMD(vendor_id=4098, device_id=38024, class_code=196608, name="GFX0", model="ATI Radeon HD 4670", pci_path="PciRoot(0x0)/Pci(0x1,0x0)/Pci(0x0,0x0)"),
|
||||
storage=[
|
||||
device_probe.SATAController(vendor_id=32902, device_id=15138, class_code=67073, name="SATA", model=None, pci_path="PciRoot(0x0)/Pci(0x1f,0x2)")
|
||||
],
|
||||
wifi=device_probe.Atheros(vendor_id=5772, device_id=42, class_code=163840, name="ARPT", model=None, pci_path="PciRoot(0x0)/Pci(0x1c,0x1)/Pci(0x0,0x0)"),
|
||||
cpu=device_probe.CPU(
|
||||
name="Intel(R) Core(TM) i3 CPU 540 @ 3.07GHz",
|
||||
flags=["FPU", "VME", "DE", "PSE", "TSC", "MSR", "PAE", "MCE", "CX8", "APIC", "SEP", "MTRR", "PGE", "MCA", "CMOV", "PAT", "PSE36", "CLFSH", "DS", "ACPI", "MMX", "FXSR", "SSE", "SSE2", "SS", "HTT", "TM", "PBE", "SSE3", "DTES64", "MON", "DSCPL", "VMX", "EST", "TM2", "SSSE3", "CX16", "TPR", "PDCM", "SSE4.1", "SSE4.2", "POPCNT", "PCID"]
|
||||
),
|
||||
oclp_version=None,
|
||||
opencore_version=None,
|
||||
)
|
||||
|
||||
iMac122_Upgraded = device_probe.Computer(
|
||||
real_model="iMac12,2",
|
||||
real_board_id="Mac-942B59F58194171B",
|
||||
reported_model="iMac12,2",
|
||||
reported_board_id="Mac-942B59F58194171B",
|
||||
gpus=[
|
||||
device_probe.Intel(vendor_id=32902, device_id=258, class_code=196608, name="HD Graphics 3000", model=None, pci_path="PciRoot(0x0)/Pci(0x2,0x0)"),
|
||||
device_probe.AMD(vendor_id=4098, device_id=26600, class_code=196608, name="GFX0", model="Radeon Pro WX4130", pci_path="PciRoot(0x0)/Pci(0x1,0x0)/Pci(0x0,0x0)"),
|
||||
],
|
||||
igpu=device_probe.Intel(vendor_id=32902, device_id=258, class_code=196608, name="HD Graphics 3000", model=None, pci_path="PciRoot(0x0)/Pci(0x2,0x0)"),
|
||||
dgpu=device_probe.AMD(vendor_id=4098, device_id=26600, class_code=196608, name="GFX0", model="Radeon Pro WX4130", pci_path="PciRoot(0x0)/Pci(0x1,0x0)/Pci(0x0,0x0)"),
|
||||
storage=[
|
||||
device_probe.SATAController(vendor_id=32902, device_id=7170, class_code=67073, name="SATA", model=None, pci_path="PciRoot(0x0)/Pci(0x1f,0x2)")
|
||||
],
|
||||
wifi=device_probe.Broadcom(vendor_id=5348, device_id=17338, class_code=163840, name="ARPT", model=None, pci_path="PciRoot(0x0)/Pci(0x1c,0x1)/Pci(0x0,0x0)"),
|
||||
cpu=device_probe.CPU(
|
||||
name="Intel(R) Core(TM) i7-2600 CPU @ 3.40GHz",
|
||||
flags=["FPU", "VME", "DE", "PSE", "TSC", "MSR", "PAE", "MCE", "CX8", "APIC", "SEP", "MTRR", "PGE", "MCA", "CMOV", "PAT", "PSE36", "CLFSH", "DS", "ACPI", "MMX", "FXSR", "SSE", "SSE2", "SS", "HTT", "TM", "PBE", "SSE3", "PCLMULQDQ", "DTES64", "MON", "DSCPL", "VMX", "SMX", "EST", "TM2", "SSSE3", "CX16", "TPR", "PDCM", "SSE4.1", "SSE4.2", "xAPIC", "POPCNT", "AES", "PCID", "XSAVE", "OSXSAVE", "TSCTMR", "AVX1.0"]
|
||||
),
|
||||
oclp_version=None,
|
||||
opencore_version=None,
|
||||
)
|
||||
|
||||
class MacPro:
|
||||
|
||||
MacPro31_Stock = device_probe.Computer(
|
||||
# Stock Model, stock TS1 GPU and no Wifi card
|
||||
real_model="MacPro3,1",
|
||||
real_board_id="Mac-F42C88C8",
|
||||
reported_model="MacPro3,1",
|
||||
reported_board_id="Mac-F42C88C8",
|
||||
gpus=[
|
||||
device_probe.AMD(vendor_id=4098, device_id=38272, class_code=196608, name="GFX0", model="ATI Radeon HD 2600", pci_path="PciRoot(0x0)/Pci(0x5,0x0)/Pci(0x0,0x0)")
|
||||
],
|
||||
igpu=None,
|
||||
dgpu=device_probe.AMD(vendor_id=4098, device_id=38272, class_code=196608, name="GFX0", model="ATI Radeon HD 2600", pci_path="PciRoot(0x0)/Pci(0x5,0x0)/Pci(0x0,0x0)"),
|
||||
storage=[
|
||||
device_probe.SATAController(vendor_id=32902, device_id=9857, class_code=67073, name="SATA", model=None, pci_path="PciRoot(0x0)/Pci(0x1f,0x2)")
|
||||
],
|
||||
wifi=None,
|
||||
cpu=device_probe.CPU(
|
||||
name="Intel(R) Xeon(R) CPU X5482 @ 3.20GHz",
|
||||
flags=["FPU", "VME", "DE", "PSE", "TSC", "MSR", "PAE", "MCE", "CX8", "APIC", "SEP", "MTRR", "PGE", "MCA", "CMOV", "PAT", "PSE36", "CLFSH", "DS", "ACPI", "MMX", "FXSR", "SSE", "SSE2", "SS", "HTT", "TM", "PBE", "SSE3", "DTES64", "MON", "DSCPL", "VMX", "EST", "TM2", "SSSE3", "CX16", "TPR", "PDCM", "SSE4.1"],
|
||||
),
|
||||
oclp_version=None,
|
||||
opencore_version=None,
|
||||
)
|
||||
|
||||
MacPro31_Upgrade = device_probe.Computer(
|
||||
# Upgraded Model, TS2 GPU and El-Capitan era Wifi card
|
||||
real_model="MacPro3,1",
|
||||
real_board_id="Mac-F42C88C8",
|
||||
reported_model="MacPro3,1",
|
||||
reported_board_id="Mac-F42C88C8",
|
||||
gpus=[
|
||||
device_probe.AMD(vendor_id=4098, device_id=26808, class_code=196608, name="GFX0", model="ATI Radeon HD 5770", pci_path="PciRoot(0x0)/Pci(0x5,0x0)/Pci(0x0,0x0)")
|
||||
],
|
||||
igpu=None,
|
||||
dgpu=device_probe.AMD(vendor_id=4098, device_id=26808, class_code=196608, name="GFX0", model="ATI Radeon HD 5770", pci_path="PciRoot(0x0)/Pci(0x5,0x0)/Pci(0x0,0x0)"),
|
||||
storage=[
|
||||
device_probe.SATAController(vendor_id=32902, device_id=9857, class_code=67073, name="SATA", model=None, pci_path="PciRoot(0x0)/Pci(0x1f,0x2)")
|
||||
],
|
||||
wifi=device_probe.Broadcom(
|
||||
vendor_id=5348, device_id=17192, class_code=163840, name="ARPT", model=None, pci_path="PciRoot(0x0)/Pci(0x1c,0x3)/Pci(0x0,0x0)"
|
||||
),
|
||||
cpu=device_probe.CPU(
|
||||
name="Intel(R) Xeon(R) CPU X5482 @ 3.20GHz",
|
||||
flags=["FPU", "VME", "DE", "PSE", "TSC", "MSR", "PAE", "MCE", "CX8", "APIC", "SEP", "MTRR", "PGE", "MCA", "CMOV", "PAT", "PSE36", "CLFSH", "DS", "ACPI", "MMX", "FXSR", "SSE", "SSE2", "SS", "HTT", "TM", "PBE", "SSE3", "DTES64", "MON", "DSCPL", "VMX", "EST", "TM2", "SSSE3", "CX16", "TPR", "PDCM", "SSE4.1"],
|
||||
),
|
||||
oclp_version=None,
|
||||
opencore_version=None,
|
||||
)
|
||||
|
||||
MacPro31_Modern_AMD = device_probe.Computer(
|
||||
# Upgraded Model, Polaris GPU and BCM94360CD
|
||||
real_model="MacPro3,1",
|
||||
real_board_id="Mac-F42C88C8",
|
||||
reported_model="MacPro3,1",
|
||||
reported_board_id="Mac-F42C88C8",
|
||||
gpus=[
|
||||
device_probe.AMD(vendor_id=4098, device_id=26591, class_code=196608, name="GFX0", model="Radeon RX 470/570", pci_path="PciRoot(0x0)/Pci(0x5,0x0)/Pci(0x0,0x0)")
|
||||
],
|
||||
igpu=None,
|
||||
dgpu=device_probe.AMD(vendor_id=4098, device_id=26591, class_code=196608, name="GFX0", model="Radeon RX 470/570", pci_path="PciRoot(0x0)/Pci(0x5,0x0)/Pci(0x0,0x0)"),
|
||||
storage=[
|
||||
device_probe.SATAController(vendor_id=32902, device_id=9857, class_code=67073, name="SATA", model=None, pci_path="PciRoot(0x0)/Pci(0x1f,0x2)")
|
||||
],
|
||||
wifi=device_probe.Broadcom(
|
||||
vendor_id=5348, device_id=17312, class_code=163840, name="ARPT", model=None, pci_path="PciRoot(0x0)/Pci(0x1c,0x3)/Pci(0x0,0x0)"
|
||||
),
|
||||
cpu=device_probe.CPU(
|
||||
name="Intel(R) Xeon(R) CPU X5482 @ 3.20GHz",
|
||||
flags=["FPU", "VME", "DE", "PSE", "TSC", "MSR", "PAE", "MCE", "CX8", "APIC", "SEP", "MTRR", "PGE", "MCA", "CMOV", "PAT", "PSE36", "CLFSH", "DS", "ACPI", "MMX", "FXSR", "SSE", "SSE2", "SS", "HTT", "TM", "PBE", "SSE3", "DTES64", "MON", "DSCPL", "VMX", "EST", "TM2", "SSSE3", "CX16", "TPR", "PDCM", "SSE4.1"],
|
||||
),
|
||||
oclp_version=None,
|
||||
opencore_version=None,
|
||||
)
|
||||
|
||||
MacPro31_Modern_Kepler = device_probe.Computer(
|
||||
# Upgraded Model, Kepler GPU and BCM94360CD
|
||||
real_model="MacPro3,1",
|
||||
real_board_id="Mac-F42C88C8",
|
||||
reported_model="MacPro3,1",
|
||||
reported_board_id="Mac-F42C88C8",
|
||||
gpus=[device_probe.NVIDIA(vendor_id=4318, device_id=4737, class_code=196608, name="GFX0", model="NVIDIA GeForce GT 710", pci_path="PciRoot(0x0)/Pci(0x5,0x0)/Pci(0x0,0x0)")],
|
||||
igpu=None,
|
||||
dgpu=device_probe.NVIDIA(vendor_id=4318, device_id=4737, class_code=196608, name="GFX0", model="NVIDIA GeForce GT 710", pci_path="PciRoot(0x0)/Pci(0x5,0x0)/Pci(0x0,0x0)"),
|
||||
storage=[
|
||||
device_probe.SATAController(vendor_id=32902, device_id=9857, class_code=67073, name="SATA", model=None, pci_path="PciRoot(0x0)/Pci(0x1f,0x2)")
|
||||
],
|
||||
wifi=device_probe.Broadcom(
|
||||
vendor_id=5348, device_id=17312, class_code=163840, name="ARPT", model=None, pci_path="PciRoot(0x0)/Pci(0x1c,0x3)/Pci(0x0,0x0)"
|
||||
),
|
||||
cpu=device_probe.CPU(
|
||||
name="Intel(R) Xeon(R) CPU X5482 @ 3.20GHz",
|
||||
flags=["FPU", "VME", "DE", "PSE", "TSC", "MSR", "PAE", "MCE", "CX8", "APIC", "SEP", "MTRR", "PGE", "MCA", "CMOV", "PAT", "PSE36", "CLFSH", "DS", "ACPI", "MMX", "FXSR", "SSE", "SSE2", "SS", "HTT", "TM", "PBE", "SSE3", "DTES64", "MON", "DSCPL", "VMX", "EST", "TM2", "SSSE3", "CX16", "TPR", "PDCM", "SSE4.1"],
|
||||
),
|
||||
oclp_version=None,
|
||||
opencore_version=None,
|
||||
)
|
||||
|
||||
MacPro41_Upgrade = device_probe.Computer(
|
||||
# Upgraded model with AMD HD7950, Atheros PCIe card
|
||||
real_model="MacPro4,1",
|
||||
real_board_id="Mac-F221BEC8",
|
||||
reported_model="MacPro4,1",
|
||||
reported_board_id="Mac-F221BEC8",
|
||||
gpus=[device_probe.AMD(vendor_id=4098, device_id=26522, class_code=196608, name="PXS1", model="AMD Radeon HD 7950", pci_path="PciRoot(0x0)/Pci(0x3,0x0)/Pci(0x0,0x0)")],
|
||||
igpu=None,
|
||||
dgpu=None,
|
||||
storage=[device_probe.SATAController(vendor_id=32902, device_id=14882, class_code=67073, name="SATA", model=None, pci_path="PciRoot(0x0)/Pci(0x1f,0x2)")],
|
||||
wifi=device_probe.Atheros(vendor_id=5772, device_id=48, class_code=163840, name="PXS4", model=None, pci_path="PciRoot(0x0)/Pci(0x1,0x0)/Pci(0x0,0x0)/Pci(0x4,0x0)/Pci(0x0,0x0)"),
|
||||
cpu=device_probe.CPU(
|
||||
name="Intel(R) Xeon(R) CPU W3520 @ 2.67GHz",
|
||||
flags=["FPU", "VME", "DE", "PSE", "TSC", "MSR", "PAE", "MCE", "CX8", "APIC", "SEP", "MTRR", "PGE", "MCA", "CMOV", "PAT", "PSE36", "CLFSH", "DS", "ACPI", "MMX", "FXSR", "SSE", "SSE2", "SS", "HTT", "TM", "PBE", "SSE3", "DTES64", "MON", "DSCPL", "VMX", "EST", "TM2", "SSSE3", "CX16", "TPR", "PDCM", "SSE4.1", "SSE4.2", "POPCNT"]
|
||||
),
|
||||
oclp_version=None,
|
||||
opencore_version=None
|
||||
)
|
||||
|
||||
MacPro41_Modern_AMD = device_probe.Computer(
|
||||
# Upgraded model with AMD RX470, BCM94360CD, Intel 660p
|
||||
# Booted through OpenCore
|
||||
real_model="MacPro4,1",
|
||||
real_board_id="Mac-F221BEC8",
|
||||
reported_model="MacPro4,1",
|
||||
reported_board_id="Mac-27AD2F918AE68F61",
|
||||
gpus=[device_probe.AMD(vendor_id=4098, device_id=26591, class_code=196608, name="GFX0", model="Radeon RX 470/570", pci_path="PciRoot(0x0)/Pci(0x3,0x0)/Pci(0x0,0x0)")],
|
||||
igpu=None,
|
||||
dgpu=device_probe.AMD(vendor_id=4098, device_id=26591, class_code=196608, name="GFX0", model="Radeon RX 470/570", pci_path="PciRoot(0x0)/Pci(0x3,0x0)/Pci(0x0,0x0)"),
|
||||
storage=[
|
||||
device_probe.SATAController(vendor_id=32902, device_id=14882, class_code=67073, name="SATA", model=None, pci_path="PciRoot(0x0)/Pci(0x1f,0x2)"),
|
||||
device_probe.NVMeController(vendor_id=32902, device_id=61864, class_code=67586, name="PXS3", model=None, pci_path="PciRoot(0x0)/Pci(0x1,0x0)/Pci(0x0,0x0)/Pci(0x2,0x0)/Pci(0x0,0x0)", aspm=2)
|
||||
],
|
||||
wifi=device_probe.Broadcom(vendor_id=5348, device_id=17312, class_code=163840, name="ARPT", model=None, pci_path="PciRoot(0x0)/Pci(0x1,0x0)/Pci(0x0,0x0)/Pci(0x4,0x0)/Pci(0x0,0x0)"),
|
||||
cpu=device_probe.CPU(
|
||||
name="Intel(R) Xeon(R) CPU W3520 @ 2.67GHz",
|
||||
flags=["FPU", "VME", "DE", "PSE", "TSC", "MSR", "PAE", "MCE", "CX8", "APIC", "SEP", "MTRR", "PGE", "MCA", "CMOV", "PAT", "PSE36", "CLFSH", "DS", "ACPI", "MMX", "FXSR", "SSE", "SSE2", "SS", "HTT", "TM", "PBE", "SSE3", "DTES64", "MON", "DSCPL", "VMX", "EST", "TM2", "SSSE3", "CX16", "TPR", "PDCM", "SSE4.1", "SSE4.2", "POPCNT"]
|
||||
),
|
||||
oclp_version="0.2.5",
|
||||
opencore_version="REL-071-2021-07-02"
|
||||
)
|
||||
|
||||
MacPro41_51__Flashed_Modern_AMD = device_probe.Computer(
|
||||
# 4,1 flashed to 5,1, RX5700XT, BCM94360CD, WD SN750 NVMe
|
||||
real_model="MacPro5,1",
|
||||
real_board_id="Mac-F221BEC8",
|
||||
reported_model="MacPro5,1",
|
||||
reported_board_id="Mac-F221BEC8",
|
||||
gpus=[device_probe.AMD(vendor_id=4098, device_id=29471, class_code=196608, name="GFX0", model="AMD Radeon RX 5700 XT", pci_path="PciRoot(0x0)/Pci(0x3,0x0)/Pci(0x0,0x0)/Pci(0x0,0x0)/Pci(0x0,0x0)")],
|
||||
igpu=None,
|
||||
dgpu=device_probe.AMD(vendor_id=4098, device_id=29471, class_code=196608, name="GFX0", model="AMD Radeon RX 5700 XT", pci_path="PciRoot(0x0)/Pci(0x3,0x0)/Pci(0x0,0x0)/Pci(0x0,0x0)/Pci(0x0,0x0)"),
|
||||
storage=[
|
||||
device_probe.SATAController(vendor_id=32902, device_id=14882, class_code=67073, name="SATA", model=None, pci_path="PciRoot(0x0)/Pci(0x1f,0x2)"),
|
||||
device_probe.NVMeController(vendor_id=5559, device_id=20482, class_code=67586, name="PXS3", model=None, pci_path="PciRoot(0x0)/Pci(0x1,0x0)/Pci(0x0,0x0)/Pci(0x2,0x0)/Pci(0x0,0x0)", aspm=2)
|
||||
],
|
||||
|
||||
wifi=device_probe.Broadcom(vendor_id=5348, device_id=17312, class_code=163840, name="PXS4", model=None, pci_path="PciRoot(0x0)/Pci(0x1,0x0)/Pci(0x0,0x0)/Pci(0x4,0x0)/Pci(0x0,0x0)"),
|
||||
cpu=device_probe.CPU(
|
||||
name="Intel(R) Xeon(R) CPU X5670 @ 2.93GHz",
|
||||
flags=["FPU", "VME", "DE", "PSE", "TSC", "MSR", "PAE", "MCE", "CX8", "APIC", "SEP", "MTRR", "PGE", "MCA", "CMOV", "PAT", "PSE36", "CLFSH", "DS", "ACPI", "MMX", "FXSR", "SSE", "SSE2", "SS", "HTT", "TM", "PBE", "SSE3", "PCLMULQDQ", "DTES64", "MON", "DSCPL", "VMX", "SMX", "EST", "TM2", "SSSE3", "CX16", "TPR", "PDCM", "SSE4.1", "SSE4.2", "POPCNT", "AES", "PCID"]
|
||||
),
|
||||
oclp_version="0.2.5",
|
||||
opencore_version="REL-071-2021-07-02"
|
||||
)
|
||||
File diff suppressed because it is too large
Load Diff
110
Resources/SMBIOSData.py
Normal file
110
Resources/SMBIOSData.py
Normal file
@@ -0,0 +1,110 @@
|
||||
FirmwareFeatures = {
|
||||
"iMac7,1": "0xC0001407",
|
||||
"iMac8,1": "0xC0001403",
|
||||
"iMac9,1": "0xC0001403",
|
||||
"iMac10,1": "0xE00DE137",
|
||||
"iMac11,1": "0xE00DE137",
|
||||
"iMac11,2": "0xC00C9423",
|
||||
"iMac11,3": "0xE00DE137",
|
||||
"iMac12,1": "0xE00DE137",
|
||||
"iMac12,2": "0xE00DE137",
|
||||
"iMac13,1": "0xE00DE137",
|
||||
"iMac13,2": "0xE00DE137",
|
||||
"iMac13,3": "0xE00DE137",
|
||||
"iMac14,1": "0xFB0FF577",
|
||||
"iMac14,2": "0xE00FE137",
|
||||
"iMac14,3": "0xE00FE137",
|
||||
"iMac14,4": "0xF00FE137",
|
||||
"iMac15,1": "0xF80FE137",
|
||||
"iMac16,1": "0xFC0FE137",
|
||||
"iMac16,2": "0xFC0FE137",
|
||||
"iMac17,1": "0xFC0FE137",
|
||||
"iMac18,1": "0xFD0FF576",
|
||||
"iMac18,2": "0xFD0FF576",
|
||||
"iMac18,3": "0xFD0FF576",
|
||||
"iMac19,1": "0xFD8FF576",
|
||||
"iMac19,2": "0xFD8FF576",
|
||||
"iMac20,1": "0xFD8FF576",
|
||||
"iMac20,2": "0xFD8FF576",
|
||||
"iMacPro1,1": "0xFD8FF53E",
|
||||
"MacBook3,1": "0xC0001407",
|
||||
"MacBook4,1": "0xC0001403",
|
||||
"MacBook5,1": "0xC0001403",
|
||||
"MacBook5,2": "0xC0001403",
|
||||
"MacBook6,1": "0xFC0FE13F",
|
||||
"MacBook7,1": "0xFC0FE13F",
|
||||
"MacBook8,1": "0xFC0FE13F",
|
||||
"MacBook9,1": "0xFC0FE13F",
|
||||
"MacBook10,1": "0xFC0FE13F",
|
||||
"MacBookAir1,1": "0xC0001403",
|
||||
"MacBookAir2,1": "0xC0001403",
|
||||
"MacBookAir3,1": "0xD00DE137",
|
||||
"MacBookAir3,2": "0xD00DE137",
|
||||
"MacBookAir4,1": "0xD00DE137",
|
||||
"MacBookAir4,2": "0xD00DE137",
|
||||
"MacBookAir5,1": "0xE00DE137",
|
||||
"MacBookAir5,2": "0xE00DE137",
|
||||
"MacBookAir6,1": "0xE00FE137",
|
||||
"MacBookAir6,2": "0xE00FE137",
|
||||
"MacBookAir7,1": "0xFF0FF576",
|
||||
"MacBookAir7,2": "0xFF0FF576",
|
||||
"MacBookAir8,1": "0xFD8FF42E",
|
||||
"MacBookAir8,2": "0xFD8FF42E",
|
||||
"MacBookAir9,1": "0xFFAFF06E",
|
||||
"MacBookPro3,1": "0xC0001407",
|
||||
"MacBookPro4,1": "0xC0001403",
|
||||
"MacBookPro5,1": "0xC0001403",
|
||||
"MacBookPro5,2": "0xC0001403",
|
||||
"MacBookPro5,3": "0xC0001403",
|
||||
"MacBookPro5,4": "0xC0001403",
|
||||
"MacBookPro5,5": "0xC0001403",
|
||||
"MacBookPro6,1": "0xC00DE137",
|
||||
"MacBookPro6,2": "0xC00DE137",
|
||||
"MacBookPro7,1": "0xC00DE137",
|
||||
"MacBookPro8,1": "0xC00DE137",
|
||||
"MacBookPro8,2": "0xC00DE137",
|
||||
"MacBookPro8,3": "0xC00DE137",
|
||||
"MacBookPro9,1": "0xC00DE137",
|
||||
"MacBookPro9,2": "0xC10DF577",
|
||||
"MacBookPro10,1": "0xE00DE137",
|
||||
"MacBookPro10,2": "0xE00DE137",
|
||||
"MacBookPro11,1": "0xEB0FF577",
|
||||
"MacBookPro11,2": "0xEB0FF577",
|
||||
"MacBookPro11,3": "0xEB0FF577",
|
||||
"MacBookPro11,4": "0xEB0FF577",
|
||||
"MacBookPro11,5": "0xEB0FF577",
|
||||
"MacBookPro12,1": "0xFD0FF576",
|
||||
"MacBookPro13,1": "0xFC0FE137",
|
||||
"MacBookPro13,2": "0xFC0FE137",
|
||||
"MacBookPro13,3": "0xFC0FE137",
|
||||
"MacBookPro14,1": "0xFF0FF57E",
|
||||
"MacBookPro14,2": "0xFF0FF57E",
|
||||
"MacBookPro14,3": "0xFF0FF57E",
|
||||
"MacBookPro15,1": "0xFD8FF426",
|
||||
"MacBookPro15,2": "0xFD8FF426",
|
||||
"MacBookPro15,3": "0xFD8FF426",
|
||||
"MacBookPro15,4": "0xFD8FF426",
|
||||
"MacBookPro16,1": "0xFDAFF066",
|
||||
"MacBookPro16,2": "0xFFAFF06E",
|
||||
"MacBookPro16,3": "0xFDAFF066",
|
||||
"MacBookPro16,4": "0xFDAFF066",
|
||||
"Macmini3,1": "0xC0001403",
|
||||
"Macmini4,1": "0xC00C9423",
|
||||
"Macmini5,1": "0xD00DE137",
|
||||
"Macmini5,2": "0xD00DE137",
|
||||
"Macmini5,3": "0xD00DE137",
|
||||
"Macmini6,1": "0xE00DE137",
|
||||
"Macmini6,2": "0xE00DE137",
|
||||
"Macmini7,1": "0xE00DE137",
|
||||
"Macmini8,1": "0xFD8FF466",
|
||||
"MacPro1,1": "0x80000015",
|
||||
"MacPro2,1": "0xC0000015",
|
||||
"MacPro3,1": "0xC0001403",
|
||||
"MacPro4,1": "0xE001F537",
|
||||
"MacPro5,1": "0xE80FE137",
|
||||
"MacPro6,1": "0xE90FF576",
|
||||
"MacPro7,1": "0xFDAFF066",
|
||||
"Xserve2,1": "0xC0001403",
|
||||
"Xserve3,1": "0xE001F537",
|
||||
"Dortania1,1": "0xFDAFF066",
|
||||
}
|
||||
File diff suppressed because it is too large
Load Diff
261
Resources/SysPatchArray.py
Normal file
261
Resources/SysPatchArray.py
Normal file
@@ -0,0 +1,261 @@
|
||||
# Lists Root patches used by SysPatch.py
|
||||
# Copyright (C) 2020-2021, Dhinak G, Mykola Grymalyuk
|
||||
DeleteNvidiaAccel11 = [
|
||||
"AMDRadeonX4000.kext",
|
||||
"AMDRadeonX4000HWServices.kext",
|
||||
"AMDRadeonX5000.kext",
|
||||
"AMDRadeonX5000HWServices.kext",
|
||||
"AMDRadeonX6000.kext",
|
||||
"AMDRadeonX6000Framebuffer.kext",
|
||||
"AMDRadeonX6000HWServices.kext",
|
||||
"AppleIntelBDWGraphics.kext",
|
||||
"AppleIntelBDWGraphicsFramebuffer.kext",
|
||||
"AppleIntelCFLGraphicsFramebuffer.kext",
|
||||
"AppleIntelHD4000Graphics.kext",
|
||||
"AppleIntelHD5000Graphics.kext",
|
||||
"AppleIntelICLGraphics.kext",
|
||||
"AppleIntelICLLPGraphicsFramebuffer.kext",
|
||||
"AppleIntelKBLGraphics.kext",
|
||||
"AppleIntelKBLGraphicsFramebuffer.kext",
|
||||
"AppleIntelSKLGraphics.kext",
|
||||
"AppleIntelSKLGraphicsFramebuffer.kext",
|
||||
"AppleIntelFramebufferAzul.kext",
|
||||
"AppleIntelFramebufferCapri.kext",
|
||||
"AppleParavirtGPU.kext",
|
||||
"GeForce.kext",
|
||||
"IOAcceleratorFamily2.kext",
|
||||
"IOGPUFamily.kext",
|
||||
]
|
||||
|
||||
DeleteAMDAccel11 = [
|
||||
"AMDRadeonX4000.kext",
|
||||
"AMDRadeonX4000HWServices.kext",
|
||||
"AMDRadeonX5000.kext",
|
||||
"AMDRadeonX5000HWServices.kext",
|
||||
"AMDRadeonX6000.kext",
|
||||
"AMDRadeonX6000Framebuffer.kext",
|
||||
"AMDRadeonX6000HWServices.kext",
|
||||
"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",
|
||||
"AppleIntelHD4000Graphics.kext",
|
||||
"AppleIntelHD5000Graphics.kext",
|
||||
"AppleIntelICLGraphics.kext",
|
||||
"AppleIntelICLLPGraphicsFramebuffer.kext",
|
||||
"AppleIntelKBLGraphics.kext",
|
||||
"AppleIntelKBLGraphicsFramebuffer.kext",
|
||||
"AppleIntelSKLGraphics.kext",
|
||||
"AppleIntelSKLGraphicsFramebuffer.kext",
|
||||
"AppleIntelFramebufferAzul.kext",
|
||||
"AppleIntelFramebufferCapri.kext",
|
||||
"AppleParavirtGPU.kext",
|
||||
"GeForce.kext",
|
||||
"IOGPUFamily.kext",
|
||||
]
|
||||
|
||||
DeleteAMDAccel11TS2 = [
|
||||
"AppleCameraInterface.kext",
|
||||
]
|
||||
|
||||
AddNvidiaAccel11 = [
|
||||
"GeForceGA.bundle",
|
||||
"GeForceTesla.kext",
|
||||
"GeForceTeslaGLDriver.bundle",
|
||||
"GeForceTeslaVADriver.bundle",
|
||||
"NVDANV50HalTesla.kext",
|
||||
"NVDAResmanTesla.kext",
|
||||
"IOSurface.kext",
|
||||
]
|
||||
|
||||
AddNvidiaBrightness = [
|
||||
"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",
|
||||
]
|
||||
|
||||
AddAMDAccel11 = [
|
||||
"AMD2400Controller.kext",
|
||||
"AMD2600Controller.kext",
|
||||
"AMD3800Controller.kext",
|
||||
"AMD4600Controller.kext",
|
||||
"AMD4800Controller.kext",
|
||||
"AMD5000Controller.kext",
|
||||
"AMD6000Controller.kext",
|
||||
"AMDFramebuffer.kext",
|
||||
"AMDLegacyFramebuffer.kext",
|
||||
"AMDLegacySupport.kext",
|
||||
"AMDRadeonVADriver.bundle",
|
||||
"AMDRadeonVADriver2.bundle",
|
||||
"AMDRadeonX3000.kext",
|
||||
"AMDRadeonX3000GLDriver.bundle",
|
||||
"AMDShared.bundle",
|
||||
"AMDSupport.kext",
|
||||
"ATIRadeonX2000.kext",
|
||||
"ATIRadeonX2000GA.plugin",
|
||||
"ATIRadeonX2000GLDriver.bundle",
|
||||
"ATIRadeonX2000VADriver.bundle",
|
||||
]
|
||||
|
||||
AddAMDBrightness = [
|
||||
"AMD2400Controller.kext",
|
||||
"AMD2600Controller.kext",
|
||||
"AMD3800Controller.kext",
|
||||
"AMD4600Controller.kext",
|
||||
"AMD4800Controller.kext",
|
||||
"AMD5000Controller.kext",
|
||||
"AMD6000Controller.kext",
|
||||
"AMDLegacyFramebuffer.kext",
|
||||
"AMDLegacySupport.kext",
|
||||
"AMDRadeonVADriver.bundle",
|
||||
"AMDRadeonVADriver2.bundle",
|
||||
# "AMDRadeonX3000.kext",
|
||||
# "AMDRadeonX3000GLDriver.bundle",
|
||||
"AMDShared.bundle",
|
||||
"ATIRadeonX2000.kext",
|
||||
"ATIRadeonX2000GA.plugin",
|
||||
"ATIRadeonX2000GLDriver.bundle",
|
||||
"ATIRadeonX2000VADriver.bundle",
|
||||
]
|
||||
|
||||
AddAMDAccel11TS2 = [
|
||||
"IOSurface.kext",
|
||||
"IOAcceleratorFamily2.kext",
|
||||
]
|
||||
|
||||
AddIntelGen1Accel = [
|
||||
"AppleIntelHDGraphics.kext",
|
||||
"AppleIntelHDGraphicsFB.kext",
|
||||
"AppleIntelHDGraphicsGA.plugin",
|
||||
"AppleIntelHDGraphicsGLDriver.bundle",
|
||||
"AppleIntelHDGraphicsVADriver.bundle",
|
||||
]
|
||||
|
||||
AddIntelGen2Accel = [
|
||||
"AppleIntelHD3000Graphics.kext",
|
||||
"AppleIntelHD3000GraphicsGA.plugin",
|
||||
"AppleIntelHD3000GraphicsGLDriver.bundle",
|
||||
"AppleIntelHD3000GraphicsVADriver.bundle",
|
||||
"AppleIntelSNBGraphicsFB.kext",
|
||||
"AppleIntelSNBVA.bundle",
|
||||
]
|
||||
|
||||
AddIntelGen3Accel = [
|
||||
"AppleIntelFramebufferCapri.kext",
|
||||
"AppleIntelHD4000Graphics.kext",
|
||||
"AppleIntelHD4000GraphicsGLDriver.bundle",
|
||||
"AppleIntelHD4000GraphicsMTLDriver.bundle",
|
||||
"AppleIntelHD4000GraphicsVADriver.bundle",
|
||||
"AppleIntelIVBVA.bundle",
|
||||
"AppleIntelGraphicsShared.bundle",
|
||||
]
|
||||
|
||||
AddGeneralAccel = ["IOAcceleratorFamily2.kext", "IOSurface.kext"]
|
||||
|
||||
DeleteBrightness = ["AppleGraphicsControl.kext/Contents/PlugIns/AGDCBacklightControl.kext"]
|
||||
|
||||
AddBrightness = [
|
||||
"AppleBacklight.kext",
|
||||
"AppleBacklightExpert.kext",
|
||||
]
|
||||
|
||||
AddVolumeControl = [
|
||||
"AppleHDA.kext",
|
||||
"IOAudioFamily.kext",
|
||||
]
|
||||
|
||||
DeleteVolumeControl = [
|
||||
"AppleVirtIO.kext",
|
||||
"AppleVirtualGraphics.kext",
|
||||
"AppleVirtualPlatform.kext",
|
||||
"ApplePVPanic.kext",
|
||||
"AppleVirtIOStorage.kext",
|
||||
]
|
||||
|
||||
AddNvidiaAccelLegacy = [
|
||||
# "GeForceGA.bundle",
|
||||
"GeForceTesla.kext",
|
||||
"GeForceTeslaGLDriver.bundle",
|
||||
"GeForceTeslaVADriver.bundle",
|
||||
"NVDANV50HalTesla.kext",
|
||||
"NVDAResmanTesla.kext",
|
||||
]
|
||||
|
||||
AddAMDAccelLegacy = [
|
||||
"AMD2400Controller.kext",
|
||||
"AMD2600Controller.kext",
|
||||
"AMD3800Controller.kext",
|
||||
"AMD4600Controller.kext",
|
||||
"AMD4800Controller.kext",
|
||||
"AMD5000Controller.kext",
|
||||
"AMD6000Controller.kext",
|
||||
"AMDFramebuffer.kext",
|
||||
"AMDLegacyFramebuffer.kext",
|
||||
"AMDLegacySupport.kext",
|
||||
"AMDRadeonVADriver.bundle",
|
||||
"AMDRadeonVADriver2.bundle",
|
||||
"AMDRadeonX3000.kext",
|
||||
"AMDRadeonX3000GLDriver.bundle",
|
||||
"AMDRadeonX4000HWServices.kext",
|
||||
"AMDRadeonX4000.kext",
|
||||
"AMDRadeonX4000GLDriver.bundle",
|
||||
"AMDShared.bundle",
|
||||
"AMDSupport.kext",
|
||||
"ATIRadeonX2000.kext",
|
||||
"ATIRadeonX2000GA.plugin",
|
||||
"ATIRadeonX2000GLDriver.bundle",
|
||||
"ATIRadeonX2000VADriver.bundle",
|
||||
]
|
||||
|
||||
AddGeneralAccelCatalina = [
|
||||
"AppleGraphicsControl.kext",
|
||||
"AppleGraphicsPowerManagement.kext",
|
||||
"AppleMCCSControl.kext",
|
||||
"IOGraphicsFamily.kext",
|
||||
"IONDRVSupport.kext",
|
||||
"IOSurface.kext",
|
||||
]
|
||||
|
||||
AddGeneralAccelMojave = [
|
||||
"IONDRVSupport.kext",
|
||||
"AppleGraphicsControl.kext",
|
||||
"AppleGraphicsPowerManagement.kext",
|
||||
"AppleMCCSControl.kext",
|
||||
"IOAccelerator2D.plugin",
|
||||
"IOAcceleratorFamily2.kext",
|
||||
"IOGraphicsFamily.kext",
|
||||
]
|
||||
|
||||
BackupLocations = [
|
||||
"System/Library/Extensions",
|
||||
"System/Library/Frameworks/CoreDisplay.framework",
|
||||
"System/Library/Frameworks/IOSurface.framework",
|
||||
"System/Library/Frameworks/OpenGL.framework",
|
||||
"System/Library/Frameworks/WebKit.framework",
|
||||
"System/Library/LaunchDaemons",
|
||||
"System/Library/PrivateFrameworks/DisplayServices.framework",
|
||||
"System/Library/PrivateFrameworks/GPUSupport.framework",
|
||||
"System/Library/PrivateFrameworks/SkyLight.framework",
|
||||
"System/Library/PrivateFrameworks/IOAccelerator.framework",
|
||||
"System/Library/PrivateFrameworks/AppleGVA.framework",
|
||||
"System/Library/PrivateFrameworks/AppleGVACore.framework",
|
||||
]
|
||||
@@ -1,8 +1,56 @@
|
||||
# Copyright (C) 2020-2021, Dhinak G
|
||||
from __future__ import print_function
|
||||
|
||||
import hashlib
|
||||
import math
|
||||
import os
|
||||
import math as m
|
||||
import plistlib
|
||||
import subprocess
|
||||
from pathlib import Path
|
||||
import re
|
||||
import os
|
||||
import binascii
|
||||
|
||||
try:
|
||||
import requests
|
||||
except ImportError:
|
||||
subprocess.run(["pip3", "install", "requests"], stdout=subprocess.PIPE)
|
||||
try:
|
||||
import requests
|
||||
except ImportError:
|
||||
raise Exception("Missing requests library!\nPlease run the following before starting OCLP:\npip3 install requests")
|
||||
|
||||
from Resources import Constants, ioreg, device_probe
|
||||
|
||||
|
||||
def hexswap(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 string_to_hex(input_string):
|
||||
if not (len(input_string) % 2) == 0:
|
||||
input_string = "0" + input_string
|
||||
input_string = hexswap(input_string)
|
||||
input_string = binascii.unhexlify(input_string)
|
||||
return input_string
|
||||
|
||||
|
||||
def process_status(process_result):
|
||||
if process_result.returncode != 0:
|
||||
print(f"Process failed with exit code {process_result.returncode}")
|
||||
print(f"Please file an issue on our Github")
|
||||
raise Exception(f"Process result: \n{process_result.stdout.decode()}")
|
||||
|
||||
|
||||
def human_fmt(num):
|
||||
for unit in ["B", "KB", "MB", "GB", "TB", "PB"]:
|
||||
if abs(num) < 1000.0:
|
||||
return "%3.1f %s" % (num, unit)
|
||||
num /= 1000.0
|
||||
return "%.1f %s" % (num, "EB")
|
||||
|
||||
|
||||
def header(lines):
|
||||
@@ -10,13 +58,273 @@ def header(lines):
|
||||
total_length = len(max(lines, key=len)) + 4
|
||||
print("#" * (total_length))
|
||||
for line in lines:
|
||||
left_side = m.floor(((total_length - 2 - len(line.strip())) / 2))
|
||||
left_side = math.floor(((total_length - 2 - len(line.strip())) / 2))
|
||||
print("#" + " " * left_side + line.strip() + " " * (total_length - len("#" + " " * left_side + line.strip()) - 1) + "#")
|
||||
print("#" * total_length)
|
||||
|
||||
|
||||
RECOVERY_STATUS = None
|
||||
|
||||
|
||||
def check_recovery():
|
||||
global RECOVERY_STATUS # pylint: disable=global-statement # We need to cache the result
|
||||
|
||||
if RECOVERY_STATUS is None:
|
||||
RECOVERY_STATUS = Path("/System/Library/BaseSystem").exists()
|
||||
|
||||
return RECOVERY_STATUS
|
||||
|
||||
|
||||
def get_disk_path():
|
||||
root_partition_info = plistlib.loads(subprocess.run("diskutil info -plist /".split(), stdout=subprocess.PIPE).stdout.decode().strip().encode())
|
||||
root_mount_path = root_partition_info["DeviceIdentifier"]
|
||||
root_mount_path = root_mount_path[:-2] if root_mount_path.count("s") > 1 else root_mount_path
|
||||
return root_mount_path
|
||||
|
||||
|
||||
def check_seal():
|
||||
# 'Snapshot Sealed' property is only listed on booted snapshots
|
||||
sealed = subprocess.run(["diskutil", "apfs", "list"], stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
|
||||
if "Snapshot Sealed: Yes" in sealed.stdout.decode():
|
||||
return True
|
||||
else:
|
||||
return False
|
||||
|
||||
|
||||
def latebloom_detection(model):
|
||||
if model in ["MacPro4,1", "MacPro5,1", "iMac7,1", "iMac8,1"]:
|
||||
# These machines are more likely to experience boot hangs, increase delays to accomodate
|
||||
lb_delay = "250"
|
||||
else:
|
||||
lb_delay = "100"
|
||||
lb_range = "1"
|
||||
lb_debug = "1"
|
||||
boot_args = get_nvram("boot-args", decode=False)
|
||||
# boot_args = "latebloom=200 lb_range=40 lb_debug=0 keepsyms=1 debug=0x100 -lilubetaall"
|
||||
if boot_args:
|
||||
# TODO: This crashes if latebloom=xxx is the very first entry in boot-args
|
||||
if "latebloom=" in boot_args:
|
||||
lb_delay = re.search(r"(?:[, ])latebloom=(\d+)", boot_args)
|
||||
lb_delay = lb_delay[1]
|
||||
if "lb_range=" in boot_args:
|
||||
lb_range = re.search(r"(?:[, ])lb_range=(\d+)", boot_args)
|
||||
lb_range = lb_range[1]
|
||||
if "lb_debug=" in boot_args:
|
||||
lb_debug = re.search(r"(?:[, ])lb_debug=(\d+)", boot_args)
|
||||
lb_debug = lb_debug[1]
|
||||
return int(lb_delay), int(lb_range), int(lb_debug)
|
||||
|
||||
|
||||
def csr_decode(csr_active_config, os_sip):
|
||||
if csr_active_config is None:
|
||||
csr_active_config = b"\x00\x00\x00\x00"
|
||||
sip_int = int.from_bytes(csr_active_config, byteorder="little")
|
||||
i = 0
|
||||
for current_sip_bit in Constants.Constants.csr_values:
|
||||
if sip_int & (1 << i):
|
||||
Constants.Constants.csr_values[current_sip_bit] = True
|
||||
i = i + 1
|
||||
|
||||
# Can be adjusted to whatever OS needs patching
|
||||
sip_needs_change = all(Constants.Constants.csr_values[i] for i in os_sip)
|
||||
if sip_needs_change is True:
|
||||
return False
|
||||
else:
|
||||
return True
|
||||
|
||||
|
||||
def friendly_hex(integer: int):
|
||||
return "{:02X}".format(integer)
|
||||
|
||||
|
||||
def amfi_status():
|
||||
amfi_1 = "amfi_get_out_of_my_way=0x1"
|
||||
amfi_2 = "amfi_get_out_of_my_way=1"
|
||||
|
||||
if get_nvram("OCLP-Settings", "4D1FDA02-38C7-4A6A-9CC6-4BCCA8B30102", decode=False):
|
||||
if "-allow_amfi" in get_nvram("OCLP-Settings", "4D1FDA02-38C7-4A6A-9CC6-4BCCA8B30102", decode=True):
|
||||
return False
|
||||
else:
|
||||
return True
|
||||
elif get_nvram("boot-args", decode=False):
|
||||
if amfi_1 in get_nvram("boot-args", decode=False) or amfi_2 in get_nvram("boot-args", decode=False):
|
||||
return False
|
||||
else:
|
||||
return True
|
||||
|
||||
|
||||
def check_oclp_boot():
|
||||
if get_nvram("OCLP-Version", "4D1FDA02-38C7-4A6A-9CC6-4BCCA8B30102", decode=True):
|
||||
return True
|
||||
else:
|
||||
return False
|
||||
|
||||
|
||||
def check_monterey_wifi():
|
||||
IO80211ElCap = "com.apple.iokit.IO80211ElCap"
|
||||
CoreCaptureElCap = "com.apple.driver.corecaptureElCap"
|
||||
loaded_kexts: str = subprocess.run("kextcache".split(), stdout=subprocess.PIPE, stderr=subprocess.STDOUT).stdout.decode()
|
||||
if IO80211ElCap in loaded_kexts and CoreCaptureElCap in loaded_kexts:
|
||||
return True
|
||||
else:
|
||||
return False
|
||||
|
||||
|
||||
def check_metal_support(device_probe, computer):
|
||||
dgpu = computer.dgpu
|
||||
igpu = computer.igpu
|
||||
if (
|
||||
(dgpu and dgpu.arch in [device_probe.NVIDIA.Archs.Tesla, device_probe.NVIDIA.Archs.Fermi, device_probe.AMD.Archs.TeraScale_1, device_probe.AMD.Archs.TeraScale_2])
|
||||
or (igpu and igpu.arch in [device_probe.Intel.Archs.Iron_Lake, device_probe.Intel.Archs.Sandy_Bridge])
|
||||
or isinstance(igpu, device_probe.NVIDIA)
|
||||
):
|
||||
return False
|
||||
else:
|
||||
return True
|
||||
|
||||
|
||||
def check_filevault_skip():
|
||||
# Check whether we can skip FileVault check with Root Patching
|
||||
if get_nvram("OCLP-Settings", "4D1FDA02-38C7-4A6A-9CC6-4BCCA8B30102", decode=False) and "-allow_fv" in get_nvram("OCLP-Settings", "4D1FDA02-38C7-4A6A-9CC6-4BCCA8B30102", decode=True):
|
||||
return True
|
||||
else:
|
||||
return False
|
||||
|
||||
|
||||
def patching_status(os_sip, os):
|
||||
# Detection for Root Patching
|
||||
sip_enabled = True # System Integrity Protection
|
||||
sbm_enabled = True # Secure Boot Status (SecureBootModel)
|
||||
amfi_enabled = True # Apple Mobile File Integrity
|
||||
fv_enabled = True # FileVault
|
||||
dosdude_patched = True
|
||||
|
||||
gen6_kext = "/System/Library/Extension/AppleIntelHDGraphics.kext"
|
||||
gen7_kext = "/System/Library/Extension/AppleIntelHD3000Graphics.kext"
|
||||
|
||||
if os > Constants.Constants().catalina:
|
||||
amfi_enabled = amfi_status()
|
||||
else:
|
||||
# Catalina and older supports individually disabling Library Validation
|
||||
amfi_enabled = False
|
||||
|
||||
if get_nvram("HardwareModel", "94B73556-2197-4702-82A8-3E1337DAFBFB", decode=False) not in Constants.Constants.sbm_values:
|
||||
sbm_enabled = False
|
||||
|
||||
if get_nvram("csr-active-config", decode=False) and csr_decode(get_nvram("csr-active-config", decode=False), os_sip) is False:
|
||||
sip_enabled = False
|
||||
|
||||
if os > Constants.Constants().catalina and not check_filevault_skip():
|
||||
# Assume non-OCLP Macs do not have our APFS seal patch
|
||||
fv_status: str = subprocess.run("fdesetup status".split(), stdout=subprocess.PIPE, stderr=subprocess.STDOUT).stdout.decode()
|
||||
if "FileVault is Off" in fv_status:
|
||||
fv_enabled = False
|
||||
else:
|
||||
fv_enabled = False
|
||||
|
||||
if not (Path(gen6_kext).exists() and Path(gen7_kext).exists()):
|
||||
dosdude_patched = False
|
||||
|
||||
return sip_enabled, sbm_enabled, amfi_enabled, fv_enabled, dosdude_patched
|
||||
|
||||
|
||||
clear = True
|
||||
|
||||
|
||||
def disable_cls():
|
||||
global clear
|
||||
clear = False
|
||||
|
||||
|
||||
def cls():
|
||||
os.system('cls' if os.name == 'nt' else 'clear')
|
||||
global clear
|
||||
if not clear:
|
||||
return
|
||||
if not check_recovery():
|
||||
os.system("cls" if os.name == "nt" else "clear")
|
||||
else:
|
||||
print("\u001Bc")
|
||||
|
||||
|
||||
def get_nvram(variable: str, uuid: str = None, *, decode: bool = False):
|
||||
# TODO: Properly fix for El Capitan, which does not print the XML representation even though we say to
|
||||
|
||||
if uuid is not None:
|
||||
uuid += ":"
|
||||
else:
|
||||
uuid = ""
|
||||
|
||||
nvram = ioreg.IORegistryEntryFromPath(ioreg.kIOMasterPortDefault, "IODeviceTree:/options".encode())
|
||||
|
||||
value = ioreg.IORegistryEntryCreateCFProperty(nvram, f"{uuid}{variable}", ioreg.kCFAllocatorDefault, ioreg.kNilOptions)
|
||||
|
||||
ioreg.IOObjectRelease(nvram)
|
||||
|
||||
if not value:
|
||||
return None
|
||||
|
||||
value = ioreg.corefoundation_to_native(value)
|
||||
|
||||
if decode and isinstance(value, bytes):
|
||||
value = value.strip(b"\0").decode()
|
||||
return value
|
||||
|
||||
|
||||
def get_rom(variable: str, *, decode: bool = False):
|
||||
# TODO: Properly fix for El Capitan, which does not print the XML representation even though we say to
|
||||
|
||||
rom = ioreg.IORegistryEntryFromPath(ioreg.kIOMasterPortDefault, "IODeviceTree:/rom".encode())
|
||||
|
||||
value = ioreg.IORegistryEntryCreateCFProperty(rom, variable, ioreg.kCFAllocatorDefault, ioreg.kNilOptions)
|
||||
|
||||
ioreg.IOObjectRelease(rom)
|
||||
|
||||
if not value:
|
||||
return None
|
||||
|
||||
value = ioreg.corefoundation_to_native(value)
|
||||
|
||||
if decode and isinstance(value, bytes):
|
||||
value = value.strip(b"\0").decode()
|
||||
return value
|
||||
|
||||
|
||||
def download_file(link, location):
|
||||
print("- Attempting download from following link:")
|
||||
print(link)
|
||||
if Path(location).exists():
|
||||
print("- Removing old file")
|
||||
Path(location).unlink()
|
||||
response = requests.get(link, stream=True)
|
||||
with location.open("wb") as file:
|
||||
count = 0
|
||||
for chunk in response.iter_content(1024 * 1024 * 4):
|
||||
file.write(chunk)
|
||||
count += len(chunk)
|
||||
cls()
|
||||
print("- Downloading package")
|
||||
print(f"- {count / 1024 / 1024}MB Downloaded")
|
||||
checksum = hashlib.sha256()
|
||||
with location.open("rb") as file:
|
||||
chunk = file.read(1024 * 1024 * 16)
|
||||
while chunk:
|
||||
checksum.update(chunk)
|
||||
chunk = file.read(1024 * 1024 * 16)
|
||||
return checksum
|
||||
|
||||
|
||||
def enable_apfs(fw_feature):
|
||||
fw_feature |= 2 ** 19 # Enable FW_FEATURE_SUPPORTS_APFS
|
||||
return fw_feature
|
||||
|
||||
def enable_apfs_extended(fw_feature):
|
||||
fw_feature |= 2 ** 20 # Enable FW_FEATURE_SUPPORTS_APFS_EXTRA
|
||||
return fw_feature
|
||||
|
||||
def enable_large_basesystem(fw_feature):
|
||||
fw_feature |= 2 ** 35 # Enable FW_FEATURE_SUPPORTS_LARGE_BASESYSTEM
|
||||
return fw_feature
|
||||
|
||||
|
||||
# def menu(title, prompt, menu_options, add_quit=True, auto_number=False, in_between=[], top_level=False):
|
||||
# return_option = ["Q", "Quit", None] if top_level else ["B", "Back", None]
|
||||
@@ -46,7 +354,7 @@ def cls():
|
||||
# menu_options[keys.index(selected.upper())][2]() if menu_options[keys.index(selected.upper())][2] else None
|
||||
|
||||
|
||||
class TUIMenu():
|
||||
class TUIMenu:
|
||||
def __init__(self, title, prompt, options=None, return_number_instead_of_direct_call=False, add_quit=True, auto_number=False, in_between=None, top_level=False, loop=False):
|
||||
self.title = title
|
||||
self.prompt = prompt
|
||||
@@ -65,8 +373,7 @@ class TUIMenu():
|
||||
def start(self):
|
||||
return_option = ["Q", "Quit"] if self.top_level else ["B", "Back"]
|
||||
if self.add_quit and not self.added_quit:
|
||||
self.add_menu_option(
|
||||
return_option[1], function=None, key=return_option[0])
|
||||
self.add_menu_option(return_option[1], function=None, key=return_option[0])
|
||||
self.added_quit = True
|
||||
|
||||
while True:
|
||||
@@ -105,7 +412,7 @@ class TUIMenu():
|
||||
return
|
||||
|
||||
|
||||
class TUIOnlyPrint():
|
||||
class TUIOnlyPrint:
|
||||
def __init__(self, title, prompt, in_between=None):
|
||||
self.title = title
|
||||
self.prompt = prompt
|
||||
|
||||
452
Resources/device_probe.py
Normal file
452
Resources/device_probe.py
Normal file
@@ -0,0 +1,452 @@
|
||||
# Hardware probing
|
||||
# Copyright (C) 2020-2021, Dhinak G, Mykola Grymalyuk
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
import binascii
|
||||
import enum
|
||||
import itertools
|
||||
import subprocess
|
||||
from dataclasses import dataclass, field
|
||||
from typing import Any, ClassVar, Optional, Type, Union
|
||||
|
||||
from Resources import PCIIDArray, Utilities, ioreg
|
||||
|
||||
|
||||
@dataclass
|
||||
class CPU:
|
||||
name: str
|
||||
flags: list[str]
|
||||
|
||||
|
||||
@dataclass
|
||||
class PCIDevice:
|
||||
VENDOR_ID: ClassVar[int] # Default vendor id, for subclasses.
|
||||
|
||||
vendor_id: int # The vendor ID of this PCI device
|
||||
device_id: int # The device ID of this PCI device
|
||||
class_code: int # The class code of this PCI device
|
||||
|
||||
# ioregistryentry: Optional[ioreg.IORegistryEntry] = None
|
||||
name: Optional[str] = None # Name of IORegistryEntry
|
||||
model: Optional[str] = None # model property
|
||||
acpi_path: Optional[str] = None
|
||||
pci_path: Optional[str] = None
|
||||
|
||||
# def __getstate__(self):
|
||||
# state = self.__dict__.copy()
|
||||
# state.pop("ioregistryentry")
|
||||
# return state
|
||||
|
||||
@classmethod
|
||||
def from_ioregistry(cls, entry: ioreg.io_registry_entry_t, anti_spoof=False):
|
||||
properties: dict = ioreg.corefoundation_to_native(ioreg.IORegistryEntryCreateCFProperties(entry, None, ioreg.kCFAllocatorDefault, ioreg.kNilOptions)[1]) # type: ignore
|
||||
if anti_spoof and "IOName" in properties:
|
||||
vendor_id, device_id = (int(i, 16) for i in properties["IOName"][3:].split(","))
|
||||
else:
|
||||
vendor_id, device_id = [int.from_bytes(properties[i][:4], byteorder="little") for i in ["vendor-id", "device-id"]]
|
||||
|
||||
device = cls(vendor_id, device_id, int.from_bytes(properties["class-code"][:6], byteorder="little"), name=ioreg.io_name_t_to_str(ioreg.IORegistryEntryGetName(entry, None)[1]))
|
||||
if "model" in properties:
|
||||
device.model = properties["model"].strip(b"\0").decode()
|
||||
if "acpi_path" in properties:
|
||||
device.acpi_path = properties["acpi-path"].strip(b"\0").decode()
|
||||
device.populate_pci_path(entry)
|
||||
return device
|
||||
|
||||
# @staticmethod
|
||||
# def vendor_detect_old(device):
|
||||
# for i in [NVIDIA, AMD]:
|
||||
# if i.detect(device):
|
||||
# return i
|
||||
# return None
|
||||
|
||||
def vendor_detect(self, *, inherits: ClassVar[Any] = None, classes: list = None):
|
||||
for i in classes or itertools.chain.from_iterable([subclass.__subclasses__() for subclass in PCIDevice.__subclasses__()]):
|
||||
if issubclass(i, inherits or object) and i.detect(self):
|
||||
return i
|
||||
return None
|
||||
|
||||
@classmethod
|
||||
def detect(cls, device):
|
||||
return device.vendor_id == cls.VENDOR_ID and ((device.class_code == cls.CLASS_CODE) if getattr(cls, "CLASS_CODE", None) else True) # type: ignore # pylint: disable=no-member
|
||||
|
||||
# def acpi_path(self):
|
||||
# # Eventually
|
||||
# raise NotImplementedError
|
||||
|
||||
def populate_pci_path(self, original_entry: ioreg.io_registry_entry_t):
|
||||
# Based off gfxutil logic, seems to work.
|
||||
paths = []
|
||||
entry = original_entry
|
||||
while entry:
|
||||
if ioreg.IOObjectConformsTo(entry, "IOPCIDevice".encode()):
|
||||
location = [hex(int(i, 16)) for i in ioreg.io_name_t_to_str(ioreg.IORegistryEntryGetLocationInPlane(entry, "IOService".encode(), None)[1]).split(",") + ["0"]]
|
||||
paths.append(f"Pci({location[0]},{location[1]})")
|
||||
elif ioreg.IOObjectConformsTo(entry, "IOACPIPlatformDevice".encode()):
|
||||
paths.append(f"PciRoot({hex(int(ioreg.corefoundation_to_native(ioreg.IORegistryEntryCreateCFProperty(entry, '_UID', ioreg.kCFAllocatorDefault, ioreg.kNilOptions)) or 0))})") # type: ignore
|
||||
break
|
||||
elif ioreg.IOObjectConformsTo(entry, "IOPCIBridge".encode()):
|
||||
pass
|
||||
else:
|
||||
# There's something in between that's not PCI! Abort
|
||||
paths = []
|
||||
break
|
||||
parent = ioreg.IORegistryEntryGetParentEntry(entry, "IOService".encode(), None)[1]
|
||||
if entry != original_entry:
|
||||
ioreg.IOObjectRelease(entry)
|
||||
entry = parent
|
||||
self.pci_path = "/".join(reversed(paths))
|
||||
|
||||
|
||||
@dataclass
|
||||
class GPU(PCIDevice):
|
||||
arch: enum.Enum = field(init=False) # The architecture, see subclasses.
|
||||
|
||||
def __post_init__(self):
|
||||
self.detect_arch()
|
||||
|
||||
def detect_arch(self):
|
||||
raise NotImplementedError
|
||||
|
||||
|
||||
@dataclass
|
||||
class WirelessCard(PCIDevice):
|
||||
CLASS_CODE: ClassVar[int] = 0x028000 # 00800200 hexswapped
|
||||
country_code: str = field(init=False)
|
||||
chipset: enum.Enum = field(init=False)
|
||||
|
||||
def __post_init__(self):
|
||||
self.detect_chipset()
|
||||
|
||||
@classmethod
|
||||
def from_ioregistry(cls, entry: ioreg.io_registry_entry_t, anti_spoof=True):
|
||||
device = super().from_ioregistry(entry, anti_spoof=anti_spoof)
|
||||
|
||||
matching_dict = {
|
||||
"IOParentMatch": ioreg.corefoundation_to_native(ioreg.IORegistryEntryIDMatching(ioreg.IORegistryEntryGetRegistryEntryID(entry, None)[1])),
|
||||
"IOProviderClass": "IO80211Interface",
|
||||
}
|
||||
|
||||
interface = next(ioreg.ioiterator_to_list(ioreg.IOServiceGetMatchingServices(ioreg.kIOMasterPortDefault, matching_dict, None)[1]), None)
|
||||
if interface:
|
||||
device.country_code = ioreg.corefoundation_to_native(ioreg.IORegistryEntryCreateCFProperty(interface, "IO80211CountryCode", ioreg.kCFAllocatorDefault, ioreg.kNilOptions)) # type: ignore # If not present, will be None anyways
|
||||
else:
|
||||
device.country_code = None # type: ignore
|
||||
|
||||
return device
|
||||
|
||||
def detect_chipset(self):
|
||||
raise NotImplementedError
|
||||
|
||||
|
||||
@dataclass
|
||||
class NVMeController(PCIDevice):
|
||||
CLASS_CODE: ClassVar[int] = 0x010802
|
||||
|
||||
aspm: Optional[int] = None
|
||||
# parent_aspm: Optional[int] = None
|
||||
|
||||
|
||||
@dataclass
|
||||
class SATAController(PCIDevice):
|
||||
CLASS_CODE: ClassVar[int] = 0x010601
|
||||
|
||||
|
||||
@dataclass
|
||||
class NVIDIA(GPU):
|
||||
VENDOR_ID: ClassVar[int] = 0x10DE
|
||||
|
||||
class Archs(enum.Enum):
|
||||
# pylint: disable=invalid-name
|
||||
Fermi = "Fermi"
|
||||
Tesla = "Tesla"
|
||||
Kepler = "Kepler"
|
||||
Unknown = "Unknown"
|
||||
|
||||
arch: Archs = field(init=False)
|
||||
|
||||
def detect_arch(self):
|
||||
# G80/G80GL
|
||||
if self.device_id in PCIIDArray.nvidia_ids.tesla_ids:
|
||||
self.arch = NVIDIA.Archs.Tesla
|
||||
elif self.device_id in PCIIDArray.nvidia_ids.fermi_ids:
|
||||
self.arch = NVIDIA.Archs.Fermi
|
||||
elif self.device_id in PCIIDArray.nvidia_ids.kepler_ids:
|
||||
self.arch = NVIDIA.Archs.Kepler
|
||||
else:
|
||||
self.arch = NVIDIA.Archs.Unknown
|
||||
|
||||
|
||||
@dataclass
|
||||
class AMD(GPU):
|
||||
VENDOR_ID: ClassVar[int] = 0x1002
|
||||
|
||||
class Archs(enum.Enum):
|
||||
# pylint: disable=invalid-name
|
||||
Legacy_GCN = "Legacy GCN"
|
||||
TeraScale_1 = "TeraScale 1"
|
||||
TeraScale_2 = "TeraScale 2"
|
||||
Polaris = "Polaris"
|
||||
Vega = "Vega"
|
||||
Navi = "Navi"
|
||||
Unknown = "Unknown"
|
||||
|
||||
arch: Archs = field(init=False)
|
||||
|
||||
def detect_arch(self):
|
||||
if self.device_id in PCIIDArray.amd_ids.legacy_gcn_ids:
|
||||
self.arch = AMD.Archs.Legacy_GCN
|
||||
elif self.device_id in PCIIDArray.amd_ids.terascale_1_ids:
|
||||
self.arch = AMD.Archs.TeraScale_1
|
||||
elif self.device_id in PCIIDArray.amd_ids.terascale_2_ids:
|
||||
self.arch = AMD.Archs.TeraScale_2
|
||||
elif self.device_id in PCIIDArray.amd_ids.polaris_ids:
|
||||
self.arch = AMD.Archs.Polaris
|
||||
elif self.device_id in PCIIDArray.amd_ids.vega_ids:
|
||||
self.arch = AMD.Archs.Vega
|
||||
elif self.device_id in PCIIDArray.amd_ids.navi_ids:
|
||||
self.arch = AMD.Archs.Navi
|
||||
else:
|
||||
self.arch = AMD.Archs.Unknown
|
||||
|
||||
|
||||
@dataclass
|
||||
class Intel(GPU):
|
||||
VENDOR_ID: ClassVar[int] = 0x8086
|
||||
|
||||
class Archs(enum.Enum):
|
||||
# pylint: disable=invalid-name
|
||||
Iron_Lake = "Iron Lake"
|
||||
Sandy_Bridge = "Sandy Bridge"
|
||||
Ivy_Bridge = "Ivy Bridge"
|
||||
Haswell = "Haswell"
|
||||
Broadwell = "Broadwell"
|
||||
Skylake = "Skylake"
|
||||
Kaby_Lake = "Kaby Lake"
|
||||
Coffee_Lake = "Coffee Lake"
|
||||
Ice_Lake = "Ice Lake"
|
||||
Unknown = "Unknown"
|
||||
|
||||
arch: Archs = field(init=False)
|
||||
|
||||
def detect_arch(self):
|
||||
if self.device_id in PCIIDArray.intel_ids.iron_ids:
|
||||
self.arch = Intel.Archs.Iron_Lake
|
||||
elif self.device_id in PCIIDArray.intel_ids.sandy_ids:
|
||||
self.arch = Intel.Archs.Sandy_Bridge
|
||||
elif self.device_id in PCIIDArray.intel_ids.ivy_ids:
|
||||
self.arch = Intel.Archs.Ivy_Bridge
|
||||
elif self.device_id in PCIIDArray.intel_ids.haswell_ids:
|
||||
self.arch = Intel.Archs.Haswell
|
||||
elif self.device_id in PCIIDArray.intel_ids.broadwell_ids:
|
||||
self.arch = Intel.Archs.Broadwell
|
||||
elif self.device_id in PCIIDArray.intel_ids.skylake_ids:
|
||||
self.arch = Intel.Archs.Skylake
|
||||
elif self.device_id in PCIIDArray.intel_ids.kaby_lake_ids:
|
||||
self.arch = Intel.Archs.Kaby_Lake
|
||||
elif self.device_id in PCIIDArray.intel_ids.coffee_lake_ids:
|
||||
self.arch = Intel.Archs.Coffee_Lake
|
||||
elif self.device_id in PCIIDArray.intel_ids.ice_lake_ids:
|
||||
self.arch = Intel.Archs.Ice_Lake
|
||||
else:
|
||||
self.arch = Intel.Archs.Unknown
|
||||
|
||||
|
||||
@dataclass
|
||||
class Broadcom(WirelessCard):
|
||||
VENDOR_ID: ClassVar[int] = 0x14E4
|
||||
|
||||
class Chipsets(enum.Enum):
|
||||
# pylint: disable=invalid-name
|
||||
AirportBrcmNIC = "AirportBrcmNIC supported"
|
||||
AirPortBrcm4360 = "AirPortBrcm4360 supported"
|
||||
AirPortBrcm4331 = "AirPortBrcm4331 supported"
|
||||
AirPortBrcm43224 = "AppleAirPortBrcm43224 supported"
|
||||
Unknown = "Unknown"
|
||||
|
||||
chipset: Chipsets = field(init=False)
|
||||
|
||||
def detect_chipset(self):
|
||||
if self.device_id in PCIIDArray.broadcom_ids.AirPortBrcmNIC:
|
||||
self.chipset = Broadcom.Chipsets.AirportBrcmNIC
|
||||
elif self.device_id in PCIIDArray.broadcom_ids.AirPortBrcm4360:
|
||||
self.chipset = Broadcom.Chipsets.AirPortBrcm4360
|
||||
elif self.device_id in PCIIDArray.broadcom_ids.AirPortBrcm4331:
|
||||
self.chipset = Broadcom.Chipsets.AirPortBrcm4331
|
||||
elif self.device_id in PCIIDArray.broadcom_ids.AppleAirPortBrcm43224:
|
||||
self.chipset = Broadcom.Chipsets.AirPortBrcm43224
|
||||
else:
|
||||
self.chipset = Broadcom.Chipsets.Unknown
|
||||
|
||||
|
||||
@dataclass
|
||||
class Atheros(WirelessCard):
|
||||
VENDOR_ID: ClassVar[int] = 0x168C
|
||||
|
||||
class Chipsets(enum.Enum):
|
||||
# pylint: disable=invalid-name
|
||||
# Well there's only one model but
|
||||
AirPortAtheros40 = "AirPortAtheros40 supported"
|
||||
Unknown = "Unknown"
|
||||
|
||||
chipset: Chipsets = field(init=False)
|
||||
|
||||
def detect_chipset(self):
|
||||
if self.device_id in PCIIDArray.atheros_ids.AtherosWifi:
|
||||
self.chipset = Atheros.Chipsets.AirPortAtheros40
|
||||
else:
|
||||
self.chipset = Atheros.Chipsets.Unknown
|
||||
|
||||
|
||||
@dataclass
|
||||
class Computer:
|
||||
real_model: Optional[str] = None
|
||||
real_board_id: Optional[str] = None
|
||||
reported_model: Optional[str] = None
|
||||
reported_board_id: Optional[str] = None
|
||||
gpus: list[GPU] = field(default_factory=list)
|
||||
igpu: Optional[GPU] = None # Shortcut for IGPU
|
||||
dgpu: Optional[GPU] = None # Shortcut for GFX0
|
||||
storage: list[PCIDevice] = field(default_factory=list)
|
||||
wifi: Optional[WirelessCard] = None
|
||||
cpu: Optional[CPU] = None
|
||||
oclp_version: Optional[str] = None
|
||||
opencore_version: Optional[str] = None
|
||||
bluetooth_chipset: Optional[str] = None
|
||||
|
||||
@staticmethod
|
||||
def probe():
|
||||
computer = Computer()
|
||||
computer.gpu_probe()
|
||||
computer.dgpu_probe()
|
||||
computer.igpu_probe()
|
||||
computer.wifi_probe()
|
||||
computer.storage_probe()
|
||||
computer.smbios_probe()
|
||||
computer.cpu_probe()
|
||||
computer.bluetooth_probe()
|
||||
return computer
|
||||
|
||||
def gpu_probe(self):
|
||||
# Chain together two iterators: one for class code 00000300, the other for class code 00800300
|
||||
devices = ioreg.ioiterator_to_list(
|
||||
ioreg.IOServiceGetMatchingServices(
|
||||
ioreg.kIOMasterPortDefault, {"IOProviderClass": "IOPCIDevice", "IOPropertyMatch": [{"class-code": binascii.a2b_hex("00000300")}, {"class-code": binascii.a2b_hex("00800300")}]}, None
|
||||
)[1]
|
||||
)
|
||||
|
||||
for device in devices:
|
||||
vendor: Type[GPU] = PCIDevice.from_ioregistry(device).vendor_detect(inherits=GPU) # type: ignore
|
||||
if vendor:
|
||||
self.gpus.append(vendor.from_ioregistry(device)) # type: ignore
|
||||
ioreg.IOObjectRelease(device)
|
||||
|
||||
def dgpu_probe(self):
|
||||
device = next(ioreg.ioiterator_to_list(ioreg.IOServiceGetMatchingServices(ioreg.kIOMasterPortDefault, ioreg.IOServiceNameMatching("GFX0".encode()), None)[1]), None)
|
||||
if not device:
|
||||
# No devices
|
||||
return
|
||||
|
||||
vendor: Type[GPU] = PCIDevice.from_ioregistry(device).vendor_detect(inherits=GPU) # type: ignore
|
||||
if vendor:
|
||||
self.dgpu = vendor.from_ioregistry(device) # type: ignore
|
||||
ioreg.IOObjectRelease(device)
|
||||
|
||||
def igpu_probe(self):
|
||||
device = next(ioreg.ioiterator_to_list(ioreg.IOServiceGetMatchingServices(ioreg.kIOMasterPortDefault, ioreg.IOServiceNameMatching("IGPU".encode()), None)[1]), None)
|
||||
if not device:
|
||||
# No devices
|
||||
return
|
||||
|
||||
vendor: Type[GPU] = PCIDevice.from_ioregistry(device).vendor_detect(inherits=GPU) # type: ignore
|
||||
if vendor:
|
||||
self.igpu = vendor.from_ioregistry(device) # type: ignore
|
||||
ioreg.IOObjectRelease(device)
|
||||
|
||||
def wifi_probe(self):
|
||||
# result = subprocess.run("ioreg -r -c IOPCIDevice -a -d2".split(), stdout=subprocess.PIPE).stdout.strip()
|
||||
devices = ioreg.ioiterator_to_list(
|
||||
ioreg.IOServiceGetMatchingServices(
|
||||
ioreg.kIOMasterPortDefault,
|
||||
{"IOProviderClass": "IOPCIDevice", "IOPropertyMatch": {"class-code": binascii.a2b_hex(Utilities.hexswap(hex(WirelessCard.CLASS_CODE)[2:].zfill(8)))}},
|
||||
None,
|
||||
)[1]
|
||||
)
|
||||
|
||||
for device in devices:
|
||||
vendor: Type[WirelessCard] = PCIDevice.from_ioregistry(device, anti_spoof=True).vendor_detect(inherits=WirelessCard) # type: ignore
|
||||
if vendor:
|
||||
self.wifi = vendor.from_ioregistry(device, anti_spoof=True) # type: ignore
|
||||
break
|
||||
ioreg.IOObjectRelease(device)
|
||||
|
||||
def storage_probe(self):
|
||||
sata_controllers = ioreg.ioiterator_to_list(
|
||||
ioreg.IOServiceGetMatchingServices(
|
||||
ioreg.kIOMasterPortDefault,
|
||||
{"IOProviderClass": "IOPCIDevice", "IOPropertyMatch": [{"class-code": binascii.a2b_hex(Utilities.hexswap(hex(SATAController.CLASS_CODE)[2:].zfill(8)))}]},
|
||||
None,
|
||||
)[1]
|
||||
)
|
||||
nvme_controllers = ioreg.ioiterator_to_list(
|
||||
ioreg.IOServiceGetMatchingServices(
|
||||
ioreg.kIOMasterPortDefault, {"IOProviderClass": "IONVMeController", "IOParentMatch": {"IOProviderClass": "IOPCIDevice"}, "IOPropertyMatch": {"IOClass": "IONVMeController"}}, None
|
||||
)[1]
|
||||
)
|
||||
for device in sata_controllers:
|
||||
self.storage.append(SATAController.from_ioregistry(device))
|
||||
ioreg.IOObjectRelease(device)
|
||||
for device in nvme_controllers:
|
||||
parent = ioreg.IORegistryEntryGetParentEntry(device, "IOService".encode(), None)[1]
|
||||
ioreg.IOObjectRelease(device)
|
||||
|
||||
aspm: Union[int, bytes] = ioreg.corefoundation_to_native(ioreg.IORegistryEntryCreateCFProperty(parent, "pci-aspm-default", ioreg.kCFAllocatorDefault, ioreg.kNilOptions)) or 0 # type: ignore
|
||||
if isinstance(aspm, bytes):
|
||||
aspm = int.from_bytes(aspm, byteorder="little")
|
||||
|
||||
controller = NVMeController.from_ioregistry(parent)
|
||||
controller.aspm = aspm
|
||||
|
||||
if controller.vendor_id != 0x106B:
|
||||
self.storage.append(controller)
|
||||
|
||||
ioreg.IOObjectRelease(parent)
|
||||
|
||||
def smbios_probe(self):
|
||||
# Reported model
|
||||
entry = next(ioreg.ioiterator_to_list(ioreg.IOServiceGetMatchingServices(ioreg.kIOMasterPortDefault, ioreg.IOServiceMatching("IOPlatformExpertDevice".encode()), None)[1]))
|
||||
self.reported_model = ioreg.corefoundation_to_native(ioreg.IORegistryEntryCreateCFProperty(entry, "model", ioreg.kCFAllocatorDefault, ioreg.kNilOptions)).strip(b"\0").decode() # type: ignore
|
||||
translated = subprocess.run("sysctl -in sysctl.proc_translated".split(), stdout=subprocess.PIPE).stdout.decode()
|
||||
if translated:
|
||||
board = "target-type"
|
||||
else:
|
||||
board = "board-id"
|
||||
self.reported_board_id = ioreg.corefoundation_to_native(ioreg.IORegistryEntryCreateCFProperty(entry, board, ioreg.kCFAllocatorDefault, ioreg.kNilOptions)).strip(b"\0").decode() # type: ignore
|
||||
ioreg.IOObjectRelease(entry)
|
||||
|
||||
# Real model
|
||||
# TODO: We previously had logic for OC users using iMacPro1,1 with incorrect ExposeSensitiveData. Add logic?
|
||||
self.real_model = Utilities.get_nvram("oem-product", "4D1FDA02-38C7-4A6A-9CC6-4BCCA8B30102", decode=True) or self.reported_model
|
||||
self.real_board_id = Utilities.get_nvram("oem-board", "4D1FDA02-38C7-4A6A-9CC6-4BCCA8B30102", decode=True) or self.reported_board_id
|
||||
|
||||
# OCLP version
|
||||
self.oclp_version = Utilities.get_nvram("OCLP-Version", "4D1FDA02-38C7-4A6A-9CC6-4BCCA8B30102", decode=True)
|
||||
self.opencore_version = Utilities.get_nvram("opencore-version", "4D1FDA02-38C7-4A6A-9CC6-4BCCA8B30102", decode=True)
|
||||
|
||||
def cpu_probe(self):
|
||||
self.cpu = CPU(
|
||||
subprocess.run("sysctl machdep.cpu.brand_string".split(), stdout=subprocess.PIPE).stdout.decode().partition(": ")[2].strip(),
|
||||
subprocess.run("sysctl machdep.cpu.features".split(), stdout=subprocess.PIPE).stdout.decode().partition(": ")[2].strip().split(" "),
|
||||
)
|
||||
|
||||
def bluetooth_probe(self):
|
||||
usb_data: str = subprocess.run("system_profiler SPUSBDataType".split(), stdout=subprocess.PIPE, stderr=subprocess.STDOUT).stdout.decode()
|
||||
if "BRCM2070 Hub" in usb_data:
|
||||
self.bluetooth_chipset = "BRCM2070 Hub"
|
||||
elif "BRCM2046 Hub" in usb_data:
|
||||
self.bluetooth_chipset = "BRCM2046 Hub"
|
||||
elif "BRCM20702 Hub" in usb_data:
|
||||
self.bluetooth_chipset = "BRCM20702 Hub"
|
||||
elif "Bluetooth":
|
||||
self.bluetooth_chipset = "Generic"
|
||||
253
Resources/ioreg.py
Normal file
253
Resources/ioreg.py
Normal file
@@ -0,0 +1,253 @@
|
||||
# Handle misc CLI menu options
|
||||
# Copyright (C) 2020-2021, Dhinak G
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
from typing import NewType, Union
|
||||
import subprocess
|
||||
|
||||
try:
|
||||
import objc
|
||||
except ImportError:
|
||||
subprocess.run(["pip3", "install", "pyobjc"], stdout=subprocess.PIPE)
|
||||
try:
|
||||
import objc
|
||||
except ImportError:
|
||||
raise Exception("Missing PyObjc library!\nPlease run the following before starting OCLP:\npip3 install pyobjc")
|
||||
|
||||
from CoreFoundation import CFRelease, kCFAllocatorDefault # type: ignore # pylint: disable=no-name-in-module
|
||||
from Foundation import NSBundle # type: ignore # pylint: disable=no-name-in-module
|
||||
from PyObjCTools import Conversion
|
||||
|
||||
IOKit_bundle = NSBundle.bundleWithIdentifier_("com.apple.framework.IOKit")
|
||||
|
||||
# pylint: disable=invalid-name
|
||||
io_name_t_ref_out = b"[128c]" # io_name_t is char[128]
|
||||
const_io_name_t_ref_in = b"r*"
|
||||
CFStringRef = b"^{__CFString=}"
|
||||
CFDictionaryRef = b"^{__CFDictionary=}"
|
||||
CFAllocatorRef = b"^{__CFAllocator=}"
|
||||
# pylint: enable=invalid-name
|
||||
|
||||
# https://developer.apple.com/library/archive/documentation/Cocoa/Conceptual/ObjCRuntimeGuide/Articles/ocrtTypeEncodings.html
|
||||
functions = [
|
||||
("IORegistryEntryCreateCFProperties", b"IIo^@" + CFAllocatorRef + b"I"),
|
||||
("IOServiceMatching", CFDictionaryRef + b"r*"),
|
||||
("IOServiceGetMatchingServices", b"II" + CFDictionaryRef + b"o^I"),
|
||||
("IOIteratorNext", b"II"),
|
||||
("IORegistryEntryGetParentEntry", b"IIr*o^I"),
|
||||
("IOObjectRelease", b"II"),
|
||||
("IORegistryEntryGetName", b"IIo" + io_name_t_ref_out),
|
||||
("IOObjectGetClass", b"IIo" + io_name_t_ref_out),
|
||||
("IOObjectCopyClass", CFStringRef + b"I"),
|
||||
("IOObjectCopySuperclassForClass", CFStringRef + CFStringRef),
|
||||
("IORegistryEntryGetChildIterator", b"IIr*o^I"),
|
||||
("IORegistryCreateIterator", b"IIr*Io^I"),
|
||||
("IORegistryEntryCreateIterator", b"IIr*Io^I"),
|
||||
("IORegistryIteratorEnterEntry", b"II"),
|
||||
("IORegistryIteratorExitEntry", b"II"),
|
||||
("IORegistryEntryCreateCFProperty", b"@I" + CFStringRef + CFAllocatorRef + b"I"),
|
||||
("IORegistryEntryGetPath", b"IIr*oI"),
|
||||
("IORegistryEntryCopyPath", CFStringRef + b"Ir*"),
|
||||
("IOObjectConformsTo", b"II" + const_io_name_t_ref_in),
|
||||
("IORegistryEntryGetLocationInPlane", b"II" + const_io_name_t_ref_in + b"o" + io_name_t_ref_out),
|
||||
("IOServiceNameMatching", CFDictionaryRef + b"r*"),
|
||||
("IORegistryEntryGetRegistryEntryID", b"IIo^Q"),
|
||||
("IORegistryEntryIDMatching", CFDictionaryRef + b"Q"),
|
||||
("IORegistryEntryFromPath", b"II" + const_io_name_t_ref_in),
|
||||
]
|
||||
|
||||
variables = [("kIOMasterPortDefault", b"I")]
|
||||
|
||||
# pylint: disable=invalid-name
|
||||
pointer = type(None)
|
||||
|
||||
kern_return_t = NewType("kern_return_t", int)
|
||||
boolean_t = int
|
||||
|
||||
io_object_t = NewType("io_object_t", object)
|
||||
io_name_t = bytes
|
||||
io_string_t = bytes
|
||||
|
||||
# io_registry_entry_t = NewType("io_registry_entry_t", io_object_t)
|
||||
io_registry_entry_t = io_object_t
|
||||
io_iterator_t = NewType("io_iterator_t", io_object_t)
|
||||
|
||||
CFTypeRef = Union[int, float, bytes, dict, list]
|
||||
|
||||
IOOptionBits = int
|
||||
mach_port_t = int
|
||||
CFAllocatorType = type(kCFAllocatorDefault)
|
||||
|
||||
NULL = 0
|
||||
|
||||
kIOMasterPortDefault: mach_port_t
|
||||
kNilOptions: IOOptionBits = NULL
|
||||
|
||||
# IOKitLib.h
|
||||
kIORegistryIterateRecursively = 1
|
||||
kIORegistryIterateParents = 2
|
||||
|
||||
# pylint: enable=invalid-name
|
||||
|
||||
|
||||
# kern_return_t IORegistryEntryCreateCFProperties(io_registry_entry_t entry, CFMutableDictionaryRef * properties, CFAllocatorRef allocator, IOOptionBits options);
|
||||
def IORegistryEntryCreateCFProperties(entry: io_registry_entry_t, properties: pointer, allocator: CFAllocatorType, options: IOOptionBits) -> tuple[kern_return_t, dict]: # pylint: disable=invalid-name
|
||||
raise NotImplementedError
|
||||
|
||||
|
||||
# CFMutableDictionaryRef IOServiceMatching(const char * name);
|
||||
def IOServiceMatching(name: bytes) -> dict: # pylint: disable=invalid-name
|
||||
raise NotImplementedError
|
||||
|
||||
|
||||
# kern_return_t IOServiceGetMatchingServices(mach_port_t masterPort, CFDictionaryRef matching CF_RELEASES_ARGUMENT, io_iterator_t * existing);
|
||||
def IOServiceGetMatchingServices(masterPort: mach_port_t, matching: dict, existing: pointer) -> tuple[kern_return_t, io_iterator_t]: # pylint: disable=invalid-name
|
||||
raise NotImplementedError
|
||||
|
||||
|
||||
# io_object_t IOIteratorNext(io_iterator_t iterator);
|
||||
def IOIteratorNext(iterator: io_iterator_t) -> io_object_t: # pylint: disable=invalid-name
|
||||
raise NotImplementedError
|
||||
|
||||
|
||||
# kern_return_t IORegistryEntryGetParentEntry(io_registry_entry_t entry, const io_name_t plane, io_registry_entry_t * parent);
|
||||
def IORegistryEntryGetParentEntry(entry: io_registry_entry_t, plane: io_name_t, parent: pointer) -> tuple[kern_return_t, io_registry_entry_t]: # pylint: disable=invalid-name
|
||||
raise NotImplementedError
|
||||
|
||||
|
||||
# kern_return_t IOObjectRelease(io_object_t object);
|
||||
def IOObjectRelease(object: io_object_t) -> kern_return_t: # pylint: disable=invalid-name
|
||||
raise NotImplementedError
|
||||
|
||||
|
||||
# kern_return_t IORegistryEntryGetName(io_registry_entry_t entry, io_name_t name);
|
||||
def IORegistryEntryGetName(entry: io_registry_entry_t, name: pointer) -> tuple[kern_return_t, bytes]: # pylint: disable=invalid-name
|
||||
raise NotImplementedError
|
||||
|
||||
|
||||
# kern_return_t IOObjectGetClass(io_object_t object, io_name_t className);
|
||||
def IOObjectGetClass(object: io_object_t, className: pointer) -> tuple[kern_return_t, bytes]: # pylint: disable=invalid-name
|
||||
raise NotImplementedError
|
||||
|
||||
|
||||
# CFStringRef IOObjectCopyClass(io_object_t object);
|
||||
def IOObjectCopyClass(object: io_object_t) -> str: # pylint: disable=invalid-name
|
||||
raise NotImplementedError
|
||||
|
||||
|
||||
# CFStringRef IOObjectCopySuperclassForClass(CFStringRef classname)
|
||||
def IOObjectCopySuperclassForClass(classname: str) -> str: # pylint: disable=invalid-name
|
||||
raise NotImplementedError
|
||||
|
||||
|
||||
# kern_return_t IORegistryEntryGetChildIterator(io_registry_entry_t entry, const io_name_t plane, io_iterator_t * iterator);
|
||||
def IORegistryEntryGetChildIterator(entry: io_registry_entry_t, plane: io_name_t, iterator: pointer) -> tuple[kern_return_t, io_iterator_t]: # pylint: disable=invalid-name
|
||||
raise NotImplementedError
|
||||
|
||||
|
||||
# kern_return_t IORegistryCreateIterator(mach_port_t masterPort, const io_name_t plane, IOOptionBits options, io_iterator_t * iterator)
|
||||
def IORegistryCreateIterator(masterPort: mach_port_t, plane: io_name_t, options: IOOptionBits, iterator: pointer) -> tuple[kern_return_t, io_iterator_t]: # pylint: disable=invalid-name
|
||||
raise NotImplementedError
|
||||
|
||||
|
||||
# kern_return_t IORegistryEntryCreateIterator(io_registry_entry_t entry, const io_name_t plane, IOOptionBits options, io_iterator_t * iterator)
|
||||
def IORegistryEntryCreateIterator(entry: io_registry_entry_t, plane: io_name_t, options: IOOptionBits, iterator: pointer) -> tuple[kern_return_t, io_iterator_t]: # pylint: disable=invalid-name
|
||||
raise NotImplementedError
|
||||
|
||||
|
||||
# kern_return_t IORegistryIteratorEnterEntry(io_iterator_t iterator)
|
||||
def IORegistryIteratorEnterEntry(iterator: io_iterator_t) -> kern_return_t: # pylint: disable=invalid-name
|
||||
raise NotImplementedError
|
||||
|
||||
|
||||
# kern_return_t IORegistryIteratorExitEntry(io_iterator_t iterator)
|
||||
def IORegistryIteratorExitEntry(iterator: io_iterator_t) -> kern_return_t: # pylint: disable=invalid-name
|
||||
raise NotImplementedError
|
||||
|
||||
|
||||
# CFTypeRef IORegistryEntryCreateCFProperty(io_registry_entry_t entry, CFStringRef key, CFAllocatorRef allocator, IOOptionBits options);
|
||||
def IORegistryEntryCreateCFProperty(entry: io_registry_entry_t, key: str, allocator: CFAllocatorType, options: IOOptionBits) -> CFTypeRef: # pylint: disable=invalid-name
|
||||
raise NotImplementedError
|
||||
|
||||
|
||||
# kern_return_t IORegistryEntryGetPath(io_registry_entry_t entry, const io_name_t plane, io_string_t path);
|
||||
def IORegistryEntryGetPath(entry: io_registry_entry_t, plane: io_name_t, path: pointer) -> tuple[kern_return_t, io_string_t]: # pylint: disable=invalid-name
|
||||
raise NotImplementedError
|
||||
|
||||
|
||||
# CFStringRef IORegistryEntryCopyPath(io_registry_entry_t entry, const io_name_t plane)
|
||||
def IORegistryEntryCopyPath(entry: io_registry_entry_t, plane: bytes) -> str: # pylint: disable=invalid-name
|
||||
raise NotImplementedError
|
||||
|
||||
|
||||
# boolean_t IOObjectConformsTo(io_object_t object, const io_name_t className)
|
||||
def IOObjectConformsTo(object: io_object_t, className: bytes) -> boolean_t: # pylint: disable=invalid-name
|
||||
raise NotImplementedError
|
||||
|
||||
|
||||
# kern_return_t IORegistryEntryGetLocationInPlane(io_registry_entry_t entry, const io_name_t plane, io_name_t location)
|
||||
def IORegistryEntryGetLocationInPlane(entry: io_registry_entry_t, plane: io_name_t, location: pointer) -> tuple[kern_return_t, bytes]: # pylint: disable=invalid-name
|
||||
raise NotImplementedError
|
||||
|
||||
|
||||
# CFMutableDictionaryRef IOServiceNameMatching(const char * name);
|
||||
def IOServiceNameMatching(name: bytes) -> dict: # pylint: disable=invalid-name
|
||||
raise NotImplementedError
|
||||
|
||||
|
||||
# kern_return_t IORegistryEntryGetRegistryEntryID(io_registry_entry_t entry, uint64_t * entryID)
|
||||
def IORegistryEntryGetRegistryEntryID(entry: io_registry_entry_t, entryID: pointer) -> tuple[kern_return_t, int]: # pylint: disable=invalid-name
|
||||
raise NotImplementedError
|
||||
|
||||
|
||||
# CFMutableDictionaryRef IORegistryEntryIDMatching(uint64_t entryID);
|
||||
def IORegistryEntryIDMatching(entryID: int) -> dict: # pylint: disable=invalid-name
|
||||
raise NotImplementedError
|
||||
|
||||
|
||||
# io_registry_entry_t IORegistryEntryFromPath(mach_port_t mainPort, const io_string_t path)
|
||||
def IORegistryEntryFromPath(mainPort: mach_port_t, path: io_string_t) -> io_registry_entry_t: # pylint: disable=invalid-name
|
||||
raise NotImplementedError
|
||||
|
||||
|
||||
objc.loadBundleFunctions(IOKit_bundle, globals(), functions) # type: ignore # pylint: disable=no-member
|
||||
objc.loadBundleVariables(IOKit_bundle, globals(), variables) # type: ignore # pylint: disable=no-member
|
||||
|
||||
|
||||
def ioiterator_to_list(iterator: io_iterator_t):
|
||||
# items = []
|
||||
item = IOIteratorNext(iterator) # noqa: F821
|
||||
while item:
|
||||
# items.append(next)
|
||||
yield item
|
||||
item = IOIteratorNext(iterator) # noqa: F821
|
||||
IOObjectRelease(iterator) # noqa: F821
|
||||
# return items
|
||||
|
||||
|
||||
def corefoundation_to_native(collection):
|
||||
if collection is None: # nullptr
|
||||
return None
|
||||
native = Conversion.pythonCollectionFromPropertyList(collection)
|
||||
CFRelease(collection)
|
||||
return native
|
||||
|
||||
|
||||
def native_to_corefoundation(native):
|
||||
return Conversion.propertyListFromPythonCollection(native)
|
||||
|
||||
|
||||
def io_name_t_to_str(name):
|
||||
return name.partition(b"\0")[0].decode()
|
||||
|
||||
|
||||
def get_class_inheritance(io_object):
|
||||
classes = []
|
||||
cls = IOObjectCopyClass(io_object)
|
||||
while cls:
|
||||
# yield cls
|
||||
classes.append(cls)
|
||||
CFRelease(cls)
|
||||
cls = IOObjectCopySuperclassForClass(cls)
|
||||
return classes
|
||||
@@ -1,303 +0,0 @@
|
||||
[
|
||||
{
|
||||
"models": [
|
||||
"MacBook5,1",
|
||||
"MacBook5,2"
|
||||
],
|
||||
"patches": [
|
||||
"WifiBCM94322",
|
||||
"LegacyAudio",
|
||||
"MissingSSE42",
|
||||
"EthernetNvidia",
|
||||
"LegacyGPU"
|
||||
]
|
||||
},
|
||||
{
|
||||
"models": [
|
||||
"MacBook6,1",
|
||||
"MacBook7,1"
|
||||
],
|
||||
"patches": [
|
||||
"WifiBCM943224",
|
||||
"LegacyAudio",
|
||||
"MissingSSE42",
|
||||
"EthernetNvidia",
|
||||
"LegacyGPU"
|
||||
]
|
||||
},
|
||||
{
|
||||
"models": [
|
||||
"MacBookAir2,1",
|
||||
"MacBookAir3,1",
|
||||
"MacBookAir3,2"
|
||||
],
|
||||
"patches": [
|
||||
"WifiBCM94322",
|
||||
"LegacyAudio",
|
||||
"MissingSSE42",
|
||||
"LegacyGPU"
|
||||
]
|
||||
},
|
||||
{
|
||||
"models": [
|
||||
"MacBookAir4,1",
|
||||
"MacBookAir4,2"
|
||||
],
|
||||
"patches": [
|
||||
"WifiBCM94322",
|
||||
"LegacyAudio",
|
||||
"LegacyGPU"
|
||||
]
|
||||
},
|
||||
{
|
||||
"models": [
|
||||
"MacBookAir5,1",
|
||||
"MacBookAir5,2"
|
||||
],
|
||||
"patches": [
|
||||
"WifiBCM94322"
|
||||
]
|
||||
},
|
||||
{
|
||||
"models": [
|
||||
"MacBookPro3,1"
|
||||
],
|
||||
"patches": [
|
||||
"WifiAtheros",
|
||||
"EthernetMarvell",
|
||||
"LegacyAudio",
|
||||
"MissingSSE42",
|
||||
"LegacyGPU"
|
||||
]
|
||||
},
|
||||
{
|
||||
"models": [
|
||||
"MacBookPro4,1"
|
||||
],
|
||||
"patches": [
|
||||
"WifiBCM94328",
|
||||
"EthernetMarvell",
|
||||
"LegacyAudio",
|
||||
"MissingSSE42",
|
||||
"LegacyGPU"
|
||||
]
|
||||
},
|
||||
{
|
||||
"models": [
|
||||
"MacBookPro5,1",
|
||||
"MacBookPro5,2",
|
||||
"MacBookPro5,3",
|
||||
"MacBookPro5,4",
|
||||
"MacBookPro5,5"
|
||||
],
|
||||
"patches": [
|
||||
"WifiBCM94322",
|
||||
"EthernetNvidia",
|
||||
"LegacyAudio",
|
||||
"MissingSSE42",
|
||||
"LegacyGPU"
|
||||
]
|
||||
},
|
||||
{
|
||||
"models": [
|
||||
"MacBookPro6,1",
|
||||
"MacBookPro6,2"
|
||||
],
|
||||
"patches": [
|
||||
"WifiBCM943224",
|
||||
"EthernetBroadcom",
|
||||
"LegacyAudio",
|
||||
"LegacyGPU",
|
||||
"PCIBridge"
|
||||
]
|
||||
},
|
||||
{
|
||||
"models": [
|
||||
"MacBookPro7,1"
|
||||
],
|
||||
"patches": [
|
||||
"WifiBCM94322",
|
||||
"EthernetNvidia",
|
||||
"LegacyAudio",
|
||||
"MissingSSE42",
|
||||
"LegacyGPU"
|
||||
]
|
||||
},
|
||||
{
|
||||
"models": [
|
||||
"MacBookPro8,1",
|
||||
"MacBookPro8,2",
|
||||
"MacBookPro8,3"
|
||||
],
|
||||
"patches": [
|
||||
"WifiBCM94331",
|
||||
"EthernetBroadcom",
|
||||
"LegacyAudio",
|
||||
"LegacyGPU"
|
||||
]
|
||||
},
|
||||
{
|
||||
"models": [
|
||||
"MacBookPro9,1",
|
||||
"MacBookPro9,2",
|
||||
"MacBookPro10,1",
|
||||
"MacBookPro10,2"
|
||||
],
|
||||
"patches": [
|
||||
"WifiBCM94331"
|
||||
]
|
||||
},
|
||||
{
|
||||
"models": [
|
||||
"MacMini3,1",
|
||||
"MacMini4,1"
|
||||
],
|
||||
"patches": [
|
||||
"WifiBCM943224",
|
||||
"EthernetNvidia",
|
||||
"LegacyAudio",
|
||||
"MissingSSE42",
|
||||
"LegacyGPU"
|
||||
]
|
||||
},
|
||||
{
|
||||
"models": [
|
||||
"Macmini5,1",
|
||||
"Macmini5,2",
|
||||
"Macmini5,3"
|
||||
],
|
||||
"patches": [
|
||||
"WifiBCM94331",
|
||||
"EthernetBroadcom",
|
||||
"LegacyAudio",
|
||||
"LegacyGPU"
|
||||
]
|
||||
},
|
||||
{
|
||||
"models": [
|
||||
"MacMini6,1",
|
||||
"MacMini6,2"
|
||||
],
|
||||
"patches": [
|
||||
"WifiBCM94331"
|
||||
]
|
||||
},
|
||||
{
|
||||
"models": [
|
||||
"iMac7,1",
|
||||
"iMac8,1"
|
||||
],
|
||||
"patches": [
|
||||
"WifiBCM94328",
|
||||
"EthernetNvidia",
|
||||
"LegacyAudio",
|
||||
"MissingSSE42",
|
||||
"LegacyGPU"
|
||||
]
|
||||
},
|
||||
{
|
||||
"models": [
|
||||
"iMac9,1"
|
||||
],
|
||||
"patches": [
|
||||
"WifiBCM94322",
|
||||
"EthernetNvidia",
|
||||
"LegacyAudio",
|
||||
"MissingSSE42",
|
||||
"LegacyGPU"
|
||||
]
|
||||
},
|
||||
{
|
||||
"models": [
|
||||
"iMac10,1"
|
||||
],
|
||||
"patches": [
|
||||
"WifiAtheros",
|
||||
"EthernetNvidia",
|
||||
"LegacyAudio",
|
||||
"MissingSSE42",
|
||||
"LegacyGPU"
|
||||
]
|
||||
},
|
||||
{
|
||||
"models": [
|
||||
"iMac11,1",
|
||||
"iMac11,2",
|
||||
"iMac11,3"
|
||||
],
|
||||
"patches": [
|
||||
"WifiAtheros",
|
||||
"EthernetBroadcom",
|
||||
"LegacyAudio",
|
||||
"LegacyGPU",
|
||||
"PCIBridge"
|
||||
]
|
||||
},
|
||||
{
|
||||
"models": [
|
||||
"iMac12,1",
|
||||
"iMac12,2"
|
||||
],
|
||||
"patches": [
|
||||
"WifiAtheros",
|
||||
"EthernetBroadcom",
|
||||
"LegacyAudio",
|
||||
"LegacyGPU"
|
||||
]
|
||||
},
|
||||
{
|
||||
"models": [
|
||||
"iMac13,1",
|
||||
"iMac13,2"
|
||||
],
|
||||
"patches": [
|
||||
"WifiBCM94331"
|
||||
]
|
||||
},
|
||||
{
|
||||
"models": [
|
||||
"iMac14,1",
|
||||
"iMac14,2",
|
||||
"iMac14,3"
|
||||
],
|
||||
"patches": []
|
||||
},
|
||||
{
|
||||
"models": [
|
||||
"MacPro3,1"
|
||||
],
|
||||
"patches": [
|
||||
"WifiAtheros",
|
||||
"LegacyAudio",
|
||||
"MissingSSE42",
|
||||
"SSEEmulator",
|
||||
"DualSocket"
|
||||
]
|
||||
},
|
||||
{
|
||||
"models": [
|
||||
"MacPro4,1"
|
||||
],
|
||||
"patches": [
|
||||
"WifiAtheros",
|
||||
"DualSocket"
|
||||
]
|
||||
},
|
||||
{
|
||||
"models": [
|
||||
"MacPro5,1"
|
||||
],
|
||||
"patches": [
|
||||
"WifiBCM94322",
|
||||
"DualSocket"
|
||||
]
|
||||
},
|
||||
{
|
||||
"models": [
|
||||
"Xserve3,1"
|
||||
],
|
||||
"patches": [
|
||||
"DualSocket"
|
||||
]
|
||||
}
|
||||
]
|
||||
14
create-offline-build.py
Normal file
14
create-offline-build.py
Normal file
@@ -0,0 +1,14 @@
|
||||
import subprocess
|
||||
from Resources import Constants
|
||||
|
||||
patcher_support_pkg_version = Constants.Constants().patcher_support_pkg_version
|
||||
binary_packages = ["10.14-Mojave", "10.15-Catalina", "11-Big-Sur", "12-Monterey"]
|
||||
|
||||
for binary_package in binary_packages:
|
||||
print(f"- Downloading {binary_package}...")
|
||||
download_cmd = f"curl -LO https://github.com/dortania/PatcherSupportPkg/releases/download/{patcher_support_pkg_version}/{binary_package}.zip"
|
||||
subprocess.run(download_cmd, shell=True)
|
||||
print("- Moving into payloads")
|
||||
move_cmd = f"mv {binary_package}.zip ./payloads/"
|
||||
subprocess.run(move_cmd, shell=True)
|
||||
print("- Download complete")
|
||||
@@ -93,6 +93,14 @@ module.exports = {
|
||||
]
|
||||
|
||||
},
|
||||
{
|
||||
title: 'macOS Monterey',
|
||||
collapsable: false,
|
||||
sidebarDepth: 1,
|
||||
children: [
|
||||
'MONTEREY-DROP',
|
||||
]
|
||||
},
|
||||
{
|
||||
title: 'Misc',
|
||||
collapsable: false,
|
||||
|
||||
@@ -7,13 +7,48 @@
|
||||
* [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)
|
||||
* [Unable to switch GPUs on 2011 15" and 17" MacBook Pros](#unable-to-switch-gpus-on-2011-15-and-17-macbook-pros)
|
||||
* [Erratic Colours on ATI TeraScale 2 GPUs (HD5000/HD6000)](#erratic-colours-on-ati-terascale-2-gpus-hd5000-hd6000)
|
||||
|
||||
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
|
||||
|
||||
For those unfamiliar with what is considered a non-Metal GPU, see below chart:
|
||||
|
||||
::: details macOS GPU Chart
|
||||
|
||||
| Graphics Vendor | Architecture | Series | Supports Metal |
|
||||
| :--- | :--- | :--- | :--- |
|
||||
| ATI | TeraScale 1 | HD2000 - HD4000 | <span style="color:red">No</span> |
|
||||
| ^^ | TeraScale 2 | HD5000 - HD6000 | ^^ |
|
||||
| AMD | GCN (and newer) | HD7000+ | <span style="color:green">Yes</span> |
|
||||
| Nvidia | Tesla | 8000GT - GT300 | <span style="color:red">No</span> |
|
||||
| ^^ | Fermi | GT400 - GT500 | ^^ |
|
||||
| ^^ | Kepler | GT600 - GT700 | <span style="color:green">Yes</span> |
|
||||
| Intel | GMA | GMA900 - GMA3000 | <span style="color:red">No</span> |
|
||||
| ^^ | Iron Lake | HD series | ^^ |
|
||||
| ^^ | Sandy Bridge | HD3000 | ^^ |
|
||||
| ^^ | Ivy Bridge (and newer) | HD4000 | <span style="color:green">Yes</span> |
|
||||
|
||||
:::
|
||||
|
||||
Additionally we currently do not have macOS Monterey acceleration patches for non-Metal Macs. We recommend users either upgrade their Macs with a Metal GPU or remain on Big Sur until further development
|
||||
|
||||
::: details Why there's no non-Metal patches for Monterey
|
||||
|
||||
With macOS Monterey, please understand our current legacy acceleration patch sets are no longer functional. As of right now, only basic framebuffer and brightness control may be achieved, however proper animations and hardware acceleration is not available.
|
||||
|
||||
This is due to numerous changes with Skylight and other macOS frameworks relying more and more on Metal functions and thus making it even more difficult to re-add legacy OpenGL support.
|
||||
|
||||
> When can we expect acceleration support
|
||||
|
||||
For the time being, please understand we cannot predict when there will be patch sets ready. Note that it took over 300 days from Big Sur's unveiling to achieve public acceleration for non-Metal GPUs. And with TeraScale 2 acceleration, this took almost 3 years to achieve public acceleration.
|
||||
|
||||
So please be patient as developers are hard at work, however please expect no acceleration support in Monterey until next year at the minimum if not even later.
|
||||
|
||||
:::
|
||||
|
||||
## 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.
|
||||
@@ -30,8 +65,35 @@ Currently Zoom relies partially on Metal and so needs a small binary patch. Dosd
|
||||
|
||||
## Unable to grant special permissions to apps (ie. Camera Access to Zoom)
|
||||
|
||||
With version 0.2.5, this issue should be full resolved
|
||||
|
||||
::: details 0.2.4 and older Work-Around
|
||||
|
||||
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.
|
||||
|
||||
Example usage with Discord and microphone permissions:
|
||||
|
||||
```sh
|
||||
# Open Terminal and run the following commands
|
||||
cd ~/Downloads/
|
||||
chmod +x tccplus
|
||||
./tccplus add Microphone com.hnc.Discord
|
||||
```
|
||||
|
||||
For those who may experience issues with `tccplus`, you can manually patch `com.apple.TCC` to add permissions:
|
||||
|
||||
```sh
|
||||
# get app id (Zoom.us used in example):
|
||||
$ osascript -e 'id of app "zoom.us"'
|
||||
# output: us.zoom.xos
|
||||
|
||||
$ sudo sqlite3 ~/Library/Application\ Support/com.apple.TCC/TCC.db "INSERT or REPLACE INTO access VALUES('kTCCServiceMicrophone','us.zoom.xos',0,2,0,1,NULL,NULL,NULL,'UNUSED',NULL,0,1541440109);"
|
||||
|
||||
$ sudo sqlite3 ~/Library/Application\ Support/com.apple.TCC/TCC.db "INSERT or REPLACE INTO access VALUES('kTCCServiceCamera','us.zoom.xos',0,2,0,1,NULL,NULL,NULL,'UNUSED',NULL,0,1541440109);"
|
||||
```
|
||||
|
||||
:::
|
||||
|
||||
## 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.
|
||||
@@ -46,20 +108,31 @@ To work around this, simply press Tab to hover over and press spacebar to simula
|
||||
|
||||
## 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.
|
||||
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. Additionally logging out and logging in can resolve the issue without requiring a reboot
|
||||
|
||||
* Note, this issue should be exclusive to TeraScale 1 GPUs (ie. HD2000-4000). TeraScale 2 GPUs should not exhibit this issue
|
||||
|
||||
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
|
||||
## Unable to switch GPUs 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.
|
||||
Currently OpenCore Legacy Patcher, GPU switching between the iGPU and dGPU is broken. The simplest way to set a specific GPU is to disable the dGPU when you wish to remain on the more power efficient iGPU.
|
||||
|
||||
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
|
||||
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.
|
||||
This will disable the dGPU and allow the iGPU to function 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 in theory. However, currently the proprietary DisplayLink driver refuses to function on legacy-patched systems, either resulting in a windowserver crash loop or no output at all.
|
||||
|
||||
## Erratic Colours on ATI TeraScale 2 GPUs (HD5000/HD6000)
|
||||
|
||||
Due to an odd bug with ATI's TeraScale 2 GPUs, many users will experience erratic/strobing colours once finished installing and rebooting into the accelerated patches. The issue stems from an incorrect assumption in the GPU drivers where it will enforce the Billion Colour space on your display. To fix, simply force your Display into a lower color depth such as a Million Colours.
|
||||
|
||||
Applications that can set color depth are:
|
||||
|
||||
* [SwitchResX](https://www.madrau.com)
|
||||
* [ResXtreme](https://macdownload.informer.com/resxtreme/)
|
||||
@@ -7,18 +7,18 @@ With OpenCore Legacy Patcher we recommend users go through the below table to un
|
||||
| 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> 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> |
|
||||
| FileVault | <span style="color:#30BCD5">Fully supported on all machines</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 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> |
|
||||
| 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> |
|
||||
| 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> |
|
||||
| Non-Metal 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> |
|
||||
| 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>, 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> |
|
||||
| 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> |
|
||||
|
||||
@@ -14,7 +14,6 @@ Now that you've loaded OpenCore, now select Install macOS!:
|
||||
|
||||

|
||||
|
||||
|
||||
After plenty of verbose booting, you will reach the installer screen! From there it's just like any normal macOS install. For an example of how the boot process looks, see the following video:
|
||||
|
||||
* [OpenCore Legacy Patcher Boot Process](https://www.youtube.com/watch?v=AN3zsbQV_n4)
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
|
||||
Now that we have a macOS installer, lets now build our OpenCore configuration!
|
||||
|
||||
First Download the latest release:
|
||||
First Download the latest release:
|
||||
|
||||
* [OpenCore Legacy Patcher Releases](https://github.com/dortania/Opencore-Legacy-Patcher/releases)
|
||||
|
||||
@@ -15,7 +15,7 @@ From here you have a couple important options:
|
||||
* Build OpenCore
|
||||
* Install OpenCore to USB/internal drive
|
||||
* Change Model
|
||||
* Patcher Settings
|
||||
* Patcher Settings
|
||||
|
||||
If you're patching for a different machine than you're running, please select "Change Model" and enter the updated SMBIOS. For more advanced users, you may also tweak the patcher's build settings via "Patcher Settings"
|
||||
|
||||
@@ -31,7 +31,6 @@ Next lets run `Install OpenCore to USB/internal drive`:
|
||||
| :--- | :--- |
|
||||
|  |  |
|
||||
|
||||
* If you have issues, please ensure you install OpenCore onto a FAT32 partition to ensure your Mac is able to boot it. You will need to format your drive as GUID/GPT in Disk Utility
|
||||
* If you have issues, please ensure you install OpenCore onto a FAT32 partition to ensure your Mac is able to boot it. You will need to format your drive as GUID/GPT in Disk Utility
|
||||
|
||||
|
||||
# Once finished, head to [Booting OpenCore and macOS](./BOOT.md)
|
||||
# Once finished, head to [Booting OpenCore and macOS](./BOOT.md)
|
||||
|
||||
@@ -8,9 +8,9 @@ With OpenCore Legacy Patcher, we include an extra binary called [OCLP-CLI](https
|
||||
* **--model xxxx**: override default model detection
|
||||
* ex. **--model iMac11,2**
|
||||
* **--metal_gpu xxxx**: override default GPU detection (ie. Nvidia, AMD)
|
||||
* **--metal_gpu Nvidia**
|
||||
* **--metal_gpu Nvidia**
|
||||
* **--smbios_spoof xxxx**: set spoofing mode, defaults to Minimal if no arg provided (ie. Minimal, Moderate, Advanced)
|
||||
* ex. **--smbios_spoof Moderate**
|
||||
* ex. **--smbios_spoof Moderate**
|
||||
* **--verbose**: enable verbose booting
|
||||
* **--debug_oc**: enable debug OpenCore
|
||||
* **--debug_kext**: enable debug kexts
|
||||
@@ -38,4 +38,4 @@ Example usage:
|
||||
sudo ./OCLP-CLI --patch_sys_vol
|
||||
```
|
||||
|
||||
Note, root volume patching needs to be run as sudo
|
||||
Note, root volume patching needs to be run as sudo
|
||||
|
||||
@@ -12,7 +12,6 @@ The easiest way to debug yourself is via Patcher Settings. Here there are many d
|
||||
* "Enable OpenCore DEBUG"
|
||||
* "Enable Kext DEBUG"
|
||||
|
||||
|
||||
When you've enabled these 3 options, rebuild OpenCore and install to your drive. This will provide much greater debug information as well as write logs to the EFI Partition.
|
||||
|
||||
## Obtaining OpenCore logs from disk
|
||||
@@ -46,4 +45,4 @@ Now that you have proper logs, you can now [file issues with us](https://github.
|
||||
* Upload of your OpenCore log (if applicable)
|
||||
* Upload of your Kernel log (if applicable)
|
||||
|
||||
Additionally, please search whether the issue has been reported before. This avoids having duplicate issues.
|
||||
Additionally, please search whether the issue has been reported before. This avoids having duplicate issues.
|
||||
|
||||
@@ -11,13 +11,13 @@ Main sections of help we'd appreciate:
|
||||
* 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
|
||||
|
||||
* 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 require something purchased the most
|
||||
|
||||
Additionally, hardware info dumps are greatly beneficial for us to determine what patches a machine might need:
|
||||
|
||||
* [IORegistryExplorer](https://github.com/khronokernel/IORegistryClone/blob/master/ioreg-210.zip?raw=true)
|
||||
* `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
|
||||
* Note: We want IOReg dumps of hardware not running on OpenCore, instead running a clean, officially supported OS by the machine
|
||||
|
||||
If you have any legacy hardware you're willing to donate or what to buy us something, please contact us at the following email:
|
||||
|
||||
@@ -29,7 +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 |
|
||||
| MacPro3,1 | Penryn | HD5770, RX570, GT710 | Mykola | N/A |
|
||||
|
||||
@@ -6,4 +6,4 @@ OpenCore Legacy Patcher itself is actually quite a "dumb" program, and essential
|
||||
|
||||
To understand a bit more of how OpenCore is able revive older Macs in such a native-like way, we need to go over *how* OpenCore works with your Mac:
|
||||
|
||||

|
||||

|
||||
|
||||
@@ -2,12 +2,10 @@
|
||||
|
||||
For users who want to customize your setup to be more personal, OpenCore does allow for custom icons and images in the boot picker.
|
||||
|
||||
|
||||
* [Custom OpenCore icons](#custom-opencore-icons)
|
||||
* [Custom Mac Boot Picker icons](#custom-mac-boot-picker-icons)
|
||||
* [Installing updated icons](#installing-updated-icons)
|
||||
|
||||
|
||||
# Custom OpenCore icons
|
||||
|
||||
To generate custom OpenCore icons, you'll need the following:
|
||||
@@ -32,7 +30,6 @@ To generate custom OpenCore icons, you'll need the following:
|
||||
|
||||
Note, for each image we recommend having one of double the size. This ensures that icons are scaled correctly since .icns support dedicated images depending on HiDPI or not.
|
||||
|
||||
|
||||
Once you have a custom image you want to use(for example, as a background), download the [latest release of OpenCorePkg](https://github.com/acidanthera/OpenCorePkg/releases) and enter the `Utilities/icnspack/` folder:
|
||||
|
||||

|
||||
@@ -42,6 +39,7 @@ Now `cd` this folder in terminal and run the following:
|
||||
```sh
|
||||
./icnspack Background.icns <insert_x1_image> <insert_x2_image>
|
||||
```
|
||||
|
||||
Once done, you'll see your custom icon generated in `icnspack`'s folder:
|
||||
|
||||

|
||||
@@ -54,7 +52,7 @@ To generate legacy icons, you'll need the following:
|
||||
|
||||
* A machine running macOS 10.4 through 10.11
|
||||
* Icon Composer.app (Requires Apple Developer Account for official download)
|
||||
* Users without the developer account can find a mirrors here:
|
||||
* Users without the developer account can find a mirrors here:
|
||||
* [Icon Composer 10.6](https://github.com/dortania/OpenCore-Legacy-Patcher/blob/main/docs/Icon-Composer-10.6.zip)
|
||||
* [Icon Composer 10.11](https://github.com/dortania/OpenCore-Legacy-Patcher/blob/main/docs/Icon-Composer-10.11.zip)
|
||||
* PNG Image you wish to convert
|
||||
@@ -102,4 +100,4 @@ To update the Mac Boot Picker icons is actually quite simple, on the root of you
|
||||
|
||||

|
||||
|
||||
Now reboot and you'll see the new icon!
|
||||
Now reboot and you'll see the new icon!
|
||||
|
||||
@@ -12,8 +12,9 @@ This doc is centered around downloading and writing the macOS installer to a USB
|
||||
The simplest way to download macOS installs would be to use installinstallmacos:
|
||||
|
||||
```sh
|
||||
[ ! -d ~/macOS-installer/ ] && mkdir ~/macOS-installer; cd ~/macOS-installer; [ ! -f ~/macOS-installer/installinstallmacos.py ] && curl -O https://raw.githubusercontent.com/munki/macadmin-scripts/main/installinstallmacos.py; sudo python installinstallmacos.py
|
||||
[ ! -d ~/macOS-installer/ ] && mkdir ~/macOS-installer; cd ~/macOS-installer; [ ! -f ~/macOS-installer/installinstallmacos.py ] && curl -O https://raw.githubusercontent.com/munki/macadmin-scripts/main/installinstallmacos.py ; sudo python installinstallmacos.py
|
||||
```
|
||||
|
||||
* Note: On El Capitan (10.11) and older, you'll need to specify a catalog at the end of the command:
|
||||
|
||||
```
|
||||
|
||||
@@ -9,31 +9,13 @@ This patcher is made of multiple external applications from different people and
|
||||
* [AirportBrcmFixup](https://github.com/acidanthera/AirportBrcmFixup/blob/master/LICENSE.txt)
|
||||
* [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)
|
||||
* [FeatureUnlock](https://github.com/acidanthera/FeatureUnlock/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:
|
||||
|
||||
```
|
||||
Copyright (c) 2020-2021, Dhinak G
|
||||
Copyright (c) 2020-2021, Mykola Grymalyuk
|
||||
|
||||
All rights reserved.
|
||||
|
||||
Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
|
||||
|
||||
1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
|
||||
|
||||
2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
|
||||
|
||||
3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission.
|
||||
|
||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
```
|
||||
Remaining files within OpenCore Legacy Patcher are copyrighted 2020-2021 Mykola Grymalyuk & Dhinak G. For integration into other projects, please request written permission.
|
||||
|
||||
@@ -20,9 +20,12 @@ Regarding OS support, see below:
|
||||
|
||||
| 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 |
|
||||
| HostOS | macOS 10.9 - macOS 11 | Refers to OSes where running OpenCore-Patcher.app are supported | Supports 10.7+ if [Python 3.9 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. |
|
||||
|
||||
* macOS Monterey support is currently in beta and is not recommended for everyday users. The below page is meant to represent macOS Big Sur support and may not correctly reflect Monterey's support on each model
|
||||
* Recommend looking at the [macOS Monterey Support page](./MONTEREY-DROP.md) for a better idea of Monterey's current status
|
||||
|
||||
### MacBook
|
||||
|
||||
| SMBIOS | Year | Supported | Comment |
|
||||
@@ -35,6 +38,7 @@ Regarding OS support, see below:
|
||||
| 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 | ^^ | ^^ |
|
||||
| MacBook8,1 | Mid-2015 | ^^ | <span style="color:green"> Everything is supported</span> |
|
||||
|
||||
### MacBook Air
|
||||
|
||||
@@ -48,6 +52,8 @@ Regarding OS support, see below:
|
||||
| MacBookAir4,2 | ^^ | ^^ | ^^ |
|
||||
| MacBookAir5,1 | Mid-2012 |^^ | <span style="color:green"> Everything is supported</span> |
|
||||
| MacBookAir5,2 | ^^ | ^^ | ^^ |
|
||||
| MacBookAir6,1 | Mid-2013, Early 2014 | ^^ | ^^ |
|
||||
| MacBookAir6,2 | ^^ | ^^ | ^^ |
|
||||
|
||||
### MacBook Pro
|
||||
|
||||
@@ -74,6 +80,9 @@ Regarding OS support, see below:
|
||||
| MacBookPro9,2 | ^^ | ^^ | ^^ |
|
||||
| MacBookPro10,1 | Mid-2012, Early 2013 | ^^ | ^^ |
|
||||
| MacBookPro10,2 | Late 2012, Early 2013 | ^^ | ^^ |
|
||||
| MacBookPro11,1 | Late 2013, Mid-2014 | ^^ | ^^ |
|
||||
| MacBookPro11,2 | ^^ | ^^ | ^^ |
|
||||
| MacBookPro11,3 | ^^ | ^^ | ^^ |
|
||||
|
||||
### Mac mini
|
||||
|
||||
@@ -113,6 +122,8 @@ Regarding OS support, see below:
|
||||
| iMac14,1 | Late 2013 | ^^ | ^^ |
|
||||
| iMac14,2 | ^^ | ^^ | ^^ |
|
||||
| iMac14,3 | ^^ | ^^ | ^^ |
|
||||
| iMac14,4 | Mid-2014 | ^^ | ^^ |
|
||||
| iMac15,1 | Late 2014, Mid-2015 | ^^ | [Display will output to 4k instead of 5k](https://github.com/dortania/OpenCore-Legacy-Patcher/issues/359) |
|
||||
|
||||
* 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)
|
||||
|
||||
@@ -126,7 +137,6 @@ Regarding OS support, see below:
|
||||
| MacPro4,1 | Early 2009 | ^^ | <span style="color:green"> Everything is supported as long as GPU is Metal capable </span> |
|
||||
| MacPro5,1 | Mid-2010, Mid-2012 | ^^ | ^^ |
|
||||
|
||||
|
||||
### Xserve
|
||||
|
||||
| SMBIOS | Year | Supported | Comment |
|
||||
|
||||
122
docs/MONTEREY-DROP.md
Normal file
122
docs/MONTEREY-DROP.md
Normal file
@@ -0,0 +1,122 @@
|
||||
# macOS Monterey Support
|
||||
|
||||
With OpenCore Legacy Patcher v0.1.7 and newer, we've implemented beta macOS Monterey support for users. Please note that Apple has dropped a lot of hardware with this release as well as broken many of our previous patch sets. This page will be used to inform users regarding current issues and will be updated as new patch sets are developed and added to our patcher.
|
||||
|
||||
## Newly dropped hardware
|
||||
|
||||
With Monterey, Apple continues their their somewhat ruthless march of dropping Intel hardware. This release saw the removal, and thus addition into OpenCore Legacy Patcher, of the following models:
|
||||
|
||||
* iMac14,4
|
||||
* iMac15,1
|
||||
* MacBook8,1
|
||||
* MacBookAir6,1
|
||||
* MacBookAir6,2
|
||||
* MacBookPro11,1
|
||||
* MacBookPro11,2
|
||||
* MacBookPro11,3
|
||||
|
||||
All of these models now have support in OpenCore Legacy Patcher. Note iMac15,1 does have [an unfortunate firmware bug preventing resolutions above 4k](https://github.com/dortania/OpenCore-Legacy-Patcher/issues/359) with OpenCore Legacy Patcher
|
||||
|
||||
## Current Hardware Drawbacks:
|
||||
|
||||
### macOS 12.0 Beta 4 issue on 2012 to early 2013 machines
|
||||
|
||||
Currently in macOS 12.0 Beta 4, many Ivy Bridge Macs have experienced Bluetooth issues relating to their BCM20702 chipset. Currently the exact issue is unknown however is assumed to be a bug on Apple's end. Recommend downgrading to macOS 12.0 Beta 3 till resolved:
|
||||
|
||||
* [12.0 Beta 3 (21A5284e) InstallAssistant (Direct)](http://swcdn.apple.com/content/downloads/02/08/071-63739-A_G5RYVW5JHT/dfz5gp3s0jm9vl7m30oewq141zkpv8edr8/InstallAssistant.pkg)
|
||||
* [12.0 Beta 3 (21A5284e) InstallAssistant (archive.org)](https://archive.org/details/12.0-21a5284e-beta-3)
|
||||
|
||||
A temporary fix is to restart the BlueTool and bluetoothd process with each boot, note it may not work for all users:
|
||||
|
||||
```sh
|
||||
sudo killall -9 BlueTool bluetoothd
|
||||
```
|
||||
|
||||
## Previously Broken Hardware
|
||||
|
||||
::: details Wireless Support Dropped (Resolved in 0.2.5 and newer)
|
||||
|
||||
* Broadcom BCM94328, BCM94322 and Atheros Wireless Chipsets lost support
|
||||
|
||||
The following models lost Bluetooth support in macOS Monterey due to their legacy Wireless chipset:
|
||||
|
||||
* iMac12,x and older
|
||||
* Macmini3,1 and older
|
||||
* MacBook5,x and older
|
||||
* MacBookAir2,1 and older
|
||||
* MacBookPro7,1 and older
|
||||
* MacPro5,1 and older
|
||||
|
||||
Note: BCM943224, BCM94331, BCM94360 and BCM943602 are still fully support by OpenCore Legacy Patcher
|
||||
|
||||
:::
|
||||
|
||||
::: details Bluetooth Support Dropped (Resolved in 0.2.5 and newer)
|
||||
|
||||
* BRCM2046 and BRCM2070 Bluetooth Chipsets lost support
|
||||
|
||||
The following models lost Bluetooth support in macOS Monterey due to their legacy Bluetooth chipset:
|
||||
|
||||
* iMac12,x and older
|
||||
* Macmini5,1 and older
|
||||
* MacBook7,1 and older
|
||||
* MacBookAir4,1 and older
|
||||
* MacBookPro8,1 and older
|
||||
* MacPro5,1 and older
|
||||
|
||||
Note: Native BRCM20702 and BRCM20703 are still fully support by OpenCore Legacy Patcher
|
||||
|
||||
::: details Dropped Firmwares
|
||||
|
||||
Here are the firmwares macOS Monterey Dropped (previously located within IOBluetoothUSBDFU.kext):
|
||||
|
||||
* 2046_820F.dfu
|
||||
* 2046_8210.dfu
|
||||
* 2046_8213.dfu
|
||||
* 2046_8215.dfu
|
||||
* 2046_8216.dfu
|
||||
* 2046_8217.dfu
|
||||
* 2070_821A.dfu
|
||||
* 2070_821B.dfu
|
||||
* 2070_8218.dfu
|
||||
* 20702_821D.dfu
|
||||
* 20702_821F.dfu
|
||||
* 20702_828A.dfu
|
||||
* 20702_828B.dfu
|
||||
* 20702_828C.dfu
|
||||
* 20702_8281.dfu
|
||||
* 20702_8286.dfu
|
||||
|
||||
:::
|
||||
|
||||
::: details Ivy Bridge iGPU Acceleration (Resolved in 0.1.7 and newer)
|
||||
|
||||
* Intel HD4000 iGPUs lost support
|
||||
|
||||
By default these machines require root volume patches to gain graphics acceleration in Monterey. OpenCore Legacy Patcher supports readding support however SIP can no longer be enabled due to root patching:
|
||||
|
||||
* Macmini6,x
|
||||
* MacBookAir5,x
|
||||
* MacBookPro9,x
|
||||
* MacBookPro10,x
|
||||
|
||||
:::
|
||||
|
||||
::: details Non-Metal Acceleration (Resolved in 0.2.5 and newer)
|
||||
|
||||
* Non-Metal GPUs no longer have working acceleration patches:
|
||||
* Intel Ironlake and Sandy Bridge iGPUs
|
||||
* Nvidia Tesla and Fermi GPUs
|
||||
* AMD TeraScale 1 and 2 GPUs
|
||||
|
||||
The following machines cannot gain graphics acceleration at all in Monterey, only basic framebuffer and brightness control (iMac8,1/9,1 and MacBook5,2 excluded):
|
||||
|
||||
* iMac12,x and older
|
||||
* Macmini5,x and older
|
||||
* MacBook7,1 and older
|
||||
* MacBookAir4,x and older
|
||||
* MacBookPro8,x and older
|
||||
|
||||
Note: iMac10,1 through iMac12,x can be upgraded with Metal GPUs, [see here for more info](https://forums.macrumors.com/threads/2011-imac-graphics-card-upgrade.1596614/)
|
||||
|
||||
:::
|
||||
@@ -100,11 +100,12 @@ Below is a run down of the main logic OpenCore Legacy Patcher uses to gain nativ
|
||||
* Reason: Fixes DRM support on models with upgraded AMD Metal GPUs
|
||||
* Logic: Adds args to NVRAM
|
||||
* Models: Models with upgraded AMD Metal GPUs
|
||||
|
||||
### UEFI -> ProtocolOverrides
|
||||
|
||||
* GopPassThrough
|
||||
* Reason: Used for proper output on machines with UGA firmware but GOP GPU
|
||||
* Logic: Provide GOP protocol instances on top of UGA protocol instances
|
||||
* Logic: Provide GOP protocol instances on top of UGA protocol instances
|
||||
* Models: MacPro3,1, MacBook4,1 iMac7,1-8,1
|
||||
|
||||
:::
|
||||
@@ -191,7 +192,6 @@ Below is an explanation of what Kexts OpenCore Legacy Patcher will inject into m
|
||||
* Models: All models require
|
||||
:::
|
||||
|
||||
|
||||
## On-Disk Patches
|
||||
|
||||
Unfortunately certain on-disk patches are required to achieve full functionality. Below is a breakdown of patches supported
|
||||
@@ -226,13 +226,15 @@ Note, GPU Acceleration Patches are not public yet, the below section is simply d
|
||||
* GeForceGA.bundle
|
||||
* GeForceTesla.kext
|
||||
* Skip IOFree Panic - Mojave+
|
||||
* At Offset `0x5CF9A` replace following bytes with `0xEB`
|
||||
* At Offset `0x5CF9A` replace following bytes with `0xEB`
|
||||
* Avoids `addMemoryRegion/removeMemoryRegion` calls
|
||||
* At Offset `0x5527` and `0x77993`, replace following bytes with `0x909090909090`
|
||||
* GeForceTeslaGLDriver.bundle
|
||||
* GeForceTeslaVADriver.bundle
|
||||
* NVDANV50HalTesla.kext
|
||||
* NVDAResmanTesla.kext
|
||||
* 0x1ea59a - 0x1ea5b3: nop
|
||||
* Replace VSLGestalt to IOLockLock or any other known symbol of the same length.
|
||||
|
||||
* AMD/ATI Binaries
|
||||
* AMD2400Controller.kext
|
||||
@@ -271,6 +273,8 @@ Note, GPU Acceleration Patches are not public yet, the below section is simply d
|
||||
* AppleIntelHD3000GraphicsGLDriver.bundle
|
||||
* AppleIntelHD3000GraphicsVADriver.bundle
|
||||
* AppleIntelSNBGraphicsFB.kext
|
||||
* Board ID Patch
|
||||
* Replace original Board ID with updated model
|
||||
* AppleIntelSNBVA.bundle
|
||||
|
||||
### Frameworks
|
||||
|
||||
@@ -28,6 +28,14 @@ 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.
|
||||
|
||||
## Enabling SIP
|
||||
|
||||
For many users, SIP will be enabled by default on build. For Intel HD 4000 users, you may have noticed that SIP is disabled. This is to ensure full compatibility with macOS Monterey and allow seamless booting between it and older OSes. However for users who do not plan to boot Monterey, you can re-enable under Patcher Settings.
|
||||
|
||||
Note: Machines with non-Metal GPUs cannot enable SIP in Big Sur either due to patched root volume
|
||||
|
||||
Note 2: NVRAM may need to be reset to ensure SIP is correctly re-enabled
|
||||
|
||||
## 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:
|
||||
|
||||
BIN
docs/ResXtreme.zip
Normal file
BIN
docs/ResXtreme.zip
Normal file
Binary file not shown.
@@ -18,7 +18,7 @@ For those who wish to support this patcher, please see the [Supporting the Patch
|
||||
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
|
||||
* We recommend following our [guide on getting a UEFI Windows Install working](./WINDOWS.md). Legacy MBR Based installs won't show up in OpenCore
|
||||
|
||||
## How do I get started?
|
||||
|
||||
|
||||
@@ -26,7 +26,7 @@ Term | Description
|
||||
**IOKit** | Backbone of how Kernel Extentions (Kexts) probe and attach onto hardware, starts quickly after kernel initates
|
||||
**WindowServer** | Backbone of the GUI interface in macOS, one of the first userfacing userspace programs to kick-in
|
||||
**OTA** | Short for **O**ver **T**he **A**ir, refers to native OS updates via System Preferences like a supported Mac
|
||||
**DELTA** | Often used with OTA, refers to OS updates that much smaller than full installers (generally ~3GB), note Deltas require the root volume to be unmotified otherwise ~12GB updates will occur.
|
||||
**DELTA** | Often used with OTA, refers to OS updates that much smaller than full installers (generally ~3GB), note Deltas require the root volume to be unmodified otherwise ~12GB updates will occur.
|
||||
---
|
||||
Term | Description
|
||||
--- | ---
|
||||
|
||||
@@ -2,7 +2,6 @@
|
||||
|
||||
To aid users in troubleshooting, we've compiled a list of users who've reported success with OpenCore Legacy patcher as well as the version used. This should aid users in verifying whether issues with the patcher are regression-related with newer versions.
|
||||
|
||||
|
||||
### MacBook
|
||||
|
||||
| SMBIOS | Tested | Tester | Comment |
|
||||
@@ -17,12 +16,12 @@ To aid users in troubleshooting, we've compiled a list of users who've reported
|
||||
|
||||
### MacBook Air
|
||||
|
||||
| SMBIOS | Year | Supported | Comment |
|
||||
| SMBIOS | Tested | Tester | Comment |
|
||||
| :--- | :--- | :--- | :--- |
|
||||
| MacBookAir2,1 | No reports | N/A | N/A |
|
||||
| MacBookAir3,1 | ^^ | ^^ | ^^ |
|
||||
| MacBookAir3,2 | ^^ | ^^ | ^^ |
|
||||
| MacBookAir4,1 | ^^ | ^^ | ^^ |
|
||||
| MacBookAir3,2 | <span style="color:#30BCD5"> YES </span> | houser42 | - Stock model <br/>- Patcher version unknown |
|
||||
| MacBookAir4,1 | No reports | N/A | N/A |
|
||||
| MacBookAir4,2 | ^^ | ^^ | ^^ |
|
||||
| MacBookAir5,1 | <span style="color:#30BCD5"> YES </span> | Ausdauersportler | - Stock Model<br/>- Patcher version 0.0.9 |
|
||||
| ^^ | ^^ | webg3 | Stock Model |
|
||||
@@ -46,7 +45,7 @@ To aid users in troubleshooting, we've compiled a list of users who've reported
|
||||
| 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 |
|
||||
| MacBookPro8,3 | ^^ | lulujyc | - Stock model, dGPU disabled <br/>- Patcher version 0.1.4 |
|
||||
| MacBookPro9,1 | <span style="color:#30BCD5"> YES </span> | jbdamiano | - Stock model <br/>- Patcher version 0.0.19 |
|
||||
| ^^ | ^^ | dennes544 | ^^|
|
||||
| ^^ | ^^ | cgrazy | ^^ |
|
||||
@@ -106,7 +105,8 @@ To aid users in troubleshooting, we've compiled a list of users who've reported
|
||||
|
||||
| SMBIOS | Tested | Tester | Comment |
|
||||
| :--- | :--- | :--- | :--- |
|
||||
| MacPro3,1 | <span style="color:#30BCD5"> YES </span> | christiann | - Upgraded with RX 560 and BCM94322<br/>- Stock Bluetooth card removed<br/>- Patcher version 0.0.21 |
|
||||
| MacPro3,1 | <span style="color:#30BCD5"> YES </span> | MykolaG | - Upgraded with RX 470 and BCM94360CD<br/>- Stock Bluetooth card removed<br/>- Patcher version 0.1.6 |
|
||||
| ^^ | ^^ | christiann | - Upgraded with RX 560 and BCM94322<br/>- Stock Bluetooth card removed<br/>- Patcher version 0.0.21 |
|
||||
| ^^ | ^^ | gw463 | - Upgraded GTX 680<br/>- Upgraded BCM94360<br/>- Patcher version 0.0.22 |
|
||||
| ^^ | ^^ | AlexSakha67 | - Upgraded R9 280<br/>- Patcher version 0.0.20 |
|
||||
| ^^ | ^^ | nekton1 | - Upgraded GTX 680<br/>- Patcher version 0.0.20 |
|
||||
|
||||
@@ -59,7 +59,6 @@ By default, the patcher will try to hide extra boot options such as recovery fro
|
||||
|
||||
Full error: "Your Mac needs a firmware update in order to install to this Volume. Please select a Mac OS Extended (Journaled) volume instead."
|
||||
|
||||
|
||||
This error occurs when macOS determines the firmware to not have full APFS support. To resolve is quite simple, when building OpenCore head to "Patcher Settings" and enable "Moderate SMBIOS Patching" or higher. This will ensure that the firmware reported will show as supporting full APFS capabilities.
|
||||
|
||||
## No Brightness Control
|
||||
@@ -68,4 +67,4 @@ With OCLP v0.0.22, we've added support for brightness control on many models. Ho
|
||||
|
||||
To work-around, we recommend user try out the below app:
|
||||
|
||||
* [Brightness Slider](https://actproductions.net/free-apps/brightness-slider/)
|
||||
* [Brightness Slider](https://actproductions.net/free-apps/brightness-slider/)
|
||||
|
||||
@@ -3,10 +3,13 @@
|
||||
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/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)
|
||||
|
||||
Know that if you are on Big Sur when you remove the EFI folder, your Mac will no longer boot and show the prohibited symbol. Be ready to install an older version of macOS before you uninstall OpenCore.
|
||||
* 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)
|
||||
|
||||
Know that if you are on Big Sur when you remove the EFI folder, your Mac will no longer boot and show the prohibited symbol. Be ready to install an older version of macOS before you uninstall OpenCore.
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# Updating OpenCore and Co.
|
||||
# Updating OpenCore and Co
|
||||
|
||||
With OpenCore Legacy Patcher, generally there's very little reason for users to update the OpenCore installed on their machine unless you feel there's a benefit with new versions for your setup.
|
||||
|
||||
@@ -19,4 +19,4 @@ nvram 4D1FDA02-38C7-4A6A-9CC6-4BCCA8B30102:OCLP-Version
|
||||
|
||||

|
||||
|
||||
From this, we can see we're running a RELEASE version of OpenCore 0.6.8 built on March 27th, 2021 with Patcher Version 0.0.20!
|
||||
From this, we can see we're running a RELEASE version of OpenCore 0.6.8 built on March 27th, 2021 with Patcher Version 0.0.20!
|
||||
|
||||
@@ -75,7 +75,7 @@ Once done, lets reboot into OpenCore's Menu and you'll see a new Windows' entry:
|
||||
|
||||

|
||||
|
||||
From there, install Windows as normal and you'll get a new BootCamp entry in OpenCore's picker when done!
|
||||
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
|
||||
|
||||
|
||||
@@ -4,5 +4,7 @@
|
||||
<dict>
|
||||
<key>com.apple.security.cs.disable-library-validation</key>
|
||||
<true/>
|
||||
<key>com.apple.security.cs.disable-executable-page-protection</key>
|
||||
<true/>
|
||||
</dict>
|
||||
</plist>
|
||||
|
||||
10
merge_gui.py
Normal file
10
merge_gui.py
Normal file
@@ -0,0 +1,10 @@
|
||||
# Updates build version in OCLP-GUI during CI builds
|
||||
# Copyright (C) 2021 Mykola Grymalyuk
|
||||
import plistlib
|
||||
from pathlib import Path
|
||||
from Resources import Constants
|
||||
|
||||
app_path = Path.cwd() / Path ("OpenCore Patcher.app/Contents/Info.plist")
|
||||
info = plistlib.load(Path(app_path).open("rb"))
|
||||
info["CFBundleShortVersionString"] = Constants.Constants().patcher_version
|
||||
plistlib.dump(info, Path(app_path).open("wb"), sort_keys=True)
|
||||
@@ -169,6 +169,8 @@
|
||||
<false/>
|
||||
<key>ResetLogoStatus</key>
|
||||
<false/>
|
||||
<key>SyncTableIds</key>
|
||||
<false/>
|
||||
</dict>
|
||||
</dict>
|
||||
<key>Booter</key>
|
||||
@@ -232,15 +234,15 @@
|
||||
<array>
|
||||
<dict>
|
||||
<key>Arch</key>
|
||||
<string>x86_64</string>
|
||||
<string>Any</string>
|
||||
<key>Comment</key>
|
||||
<string>Patching Engine</string>
|
||||
<key>Enabled</key>
|
||||
<true/>
|
||||
<false/>
|
||||
<key>MaxKernel</key>
|
||||
<string></string>
|
||||
<key>MinKernel</key>
|
||||
<string></string>
|
||||
<string>8.0.0</string>
|
||||
<key>BundlePath</key>
|
||||
<string>Lilu.kext</string>
|
||||
<key>ExecutablePath</key>
|
||||
@@ -272,11 +274,11 @@
|
||||
<key>Comment</key>
|
||||
<string>GPU Patching</string>
|
||||
<key>Enabled</key>
|
||||
<true/>
|
||||
<false/>
|
||||
<key>MaxKernel</key>
|
||||
<string></string>
|
||||
<key>MinKernel</key>
|
||||
<string></string>
|
||||
<string>10.0.0</string>
|
||||
<key>BundlePath</key>
|
||||
<string>WhateverGreen.kext</string>
|
||||
<key>ExecutablePath</key>
|
||||
@@ -294,7 +296,7 @@
|
||||
<key>MaxKernel</key>
|
||||
<string></string>
|
||||
<key>MinKernel</key>
|
||||
<string></string>
|
||||
<string>12.0.0</string>
|
||||
<key>BundlePath</key>
|
||||
<string>RestrictEvents.kext</string>
|
||||
<key>ExecutablePath</key>
|
||||
@@ -312,7 +314,7 @@
|
||||
<key>MaxKernel</key>
|
||||
<string></string>
|
||||
<key>MinKernel</key>
|
||||
<string></string>
|
||||
<string>16.0.0</string>
|
||||
<key>BundlePath</key>
|
||||
<string>AAAMouSSE.kext</string>
|
||||
<key>ExecutablePath</key>
|
||||
@@ -348,7 +350,7 @@
|
||||
<key>MaxKernel</key>
|
||||
<string></string>
|
||||
<key>MinKernel</key>
|
||||
<string>20.0.0</string>
|
||||
<string>12.0.0</string>
|
||||
<key>BundlePath</key>
|
||||
<string>AirportBrcmFixup.kext</string>
|
||||
<key>ExecutablePath</key>
|
||||
@@ -468,7 +470,7 @@
|
||||
<key>Arch</key>
|
||||
<string>x86_64</string>
|
||||
<key>Comment</key>
|
||||
<string>Atheros Wifi Patch</string>
|
||||
<string>Monterey Atheros Wifi Patch</string>
|
||||
<key>Enabled</key>
|
||||
<false/>
|
||||
<key>MaxKernel</key>
|
||||
@@ -476,25 +478,7 @@
|
||||
<key>MinKernel</key>
|
||||
<string>18.0.0</string>
|
||||
<key>BundlePath</key>
|
||||
<string>IO80211HighSierra.kext</string>
|
||||
<key>ExecutablePath</key>
|
||||
<string>Contents/MacOS/IO80211HighSierra</string>
|
||||
<key>PlistPath</key>
|
||||
<string>Contents/Info.plist</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>Arch</key>
|
||||
<string>x86_64</string>
|
||||
<key>Comment</key>
|
||||
<string>Atheros Wifi Patch</string>
|
||||
<key>Enabled</key>
|
||||
<false/>
|
||||
<key>MaxKernel</key>
|
||||
<string></string>
|
||||
<key>MinKernel</key>
|
||||
<string>18.0.0</string>
|
||||
<key>BundlePath</key>
|
||||
<string>IO80211HighSierra.kext/Contents/PlugIns/AirPortAtheros40.kext</string>
|
||||
<string>IO80211ElCap.kext/Contents/PlugIns/AirPortAtheros40.kext</string>
|
||||
<key>ExecutablePath</key>
|
||||
<string>Contents/MacOS/AirPortAtheros40</string>
|
||||
<key>PlistPath</key>
|
||||
@@ -504,7 +488,7 @@
|
||||
<key>Arch</key>
|
||||
<string>x86_64</string>
|
||||
<key>Comment</key>
|
||||
<string>Broadcom Wifi Patch</string>
|
||||
<string>Monterey BCM94322 Wifi Patch</string>
|
||||
<key>Enabled</key>
|
||||
<false/>
|
||||
<key>MaxKernel</key>
|
||||
@@ -512,25 +496,7 @@
|
||||
<key>MinKernel</key>
|
||||
<string>19.0.0</string>
|
||||
<key>BundlePath</key>
|
||||
<string>IO80211Mojave.kext</string>
|
||||
<key>ExecutablePath</key>
|
||||
<string>Contents/MacOS/IO80211Mojave</string>
|
||||
<key>PlistPath</key>
|
||||
<string>Contents/Info.plist</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>Arch</key>
|
||||
<string>x86_64</string>
|
||||
<key>Comment</key>
|
||||
<string>Broadcom Wifi Patch</string>
|
||||
<key>Enabled</key>
|
||||
<false/>
|
||||
<key>MaxKernel</key>
|
||||
<string></string>
|
||||
<key>MinKernel</key>
|
||||
<string>19.0.0</string>
|
||||
<key>BundlePath</key>
|
||||
<string>IO80211Mojave.kext/Contents/PlugIns/AirPortBrcm4331.kext</string>
|
||||
<string>IO80211ElCap.kext/Contents/PlugIns/AirPortBrcm4331.kext</string>
|
||||
<key>ExecutablePath</key>
|
||||
<string>Contents/MacOS/AirPortBrcm4331</string>
|
||||
<key>PlistPath</key>
|
||||
@@ -582,7 +548,7 @@
|
||||
<key>MaxKernel</key>
|
||||
<string></string>
|
||||
<key>MinKernel</key>
|
||||
<string>20.0.0</string>
|
||||
<string>19.0.0</string>
|
||||
<key>BundlePath</key>
|
||||
<string>AppleIntelPIIXATA.kext</string>
|
||||
<key>ExecutablePath</key>
|
||||
@@ -590,42 +556,6 @@
|
||||
<key>PlistPath</key>
|
||||
<string>Contents/Info.plist</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>Arch</key>
|
||||
<string>x86_64</string>
|
||||
<key>Comment</key>
|
||||
<string>AppleBacklightFixup - Modded Nvidia GPUs</string>
|
||||
<key>Enabled</key>
|
||||
<false/>
|
||||
<key>MaxKernel</key>
|
||||
<string></string>
|
||||
<key>MinKernel</key>
|
||||
<string></string>
|
||||
<key>BundlePath</key>
|
||||
<string>AppleBacklightFixup.kext</string>
|
||||
<key>ExecutablePath</key>
|
||||
<string>Contents/MacOS/AppleBacklightFixup</string>
|
||||
<key>PlistPath</key>
|
||||
<string>Contents/Info.plist</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>Arch</key>
|
||||
<string>x86_64</string>
|
||||
<key>Comment</key>
|
||||
<string>NightShiftEnabler</string>
|
||||
<key>Enabled</key>
|
||||
<false/>
|
||||
<key>MaxKernel</key>
|
||||
<string></string>
|
||||
<key>MinKernel</key>
|
||||
<string></string>
|
||||
<key>BundlePath</key>
|
||||
<string>NightShiftEnabler.kext</string>
|
||||
<key>ExecutablePath</key>
|
||||
<string>Contents/MacOS/NightShiftEnabler</string>
|
||||
<key>PlistPath</key>
|
||||
<string>Contents/Info.plist</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>Arch</key>
|
||||
<string>x86_64</string>
|
||||
@@ -636,7 +566,7 @@
|
||||
<key>MaxKernel</key>
|
||||
<string></string>
|
||||
<key>MinKernel</key>
|
||||
<string></string>
|
||||
<string>15.0.0</string>
|
||||
<key>BundlePath</key>
|
||||
<string>CPUFriend.kext</string>
|
||||
<key>ExecutablePath</key>
|
||||
@@ -654,7 +584,7 @@
|
||||
<key>MaxKernel</key>
|
||||
<string></string>
|
||||
<key>MinKernel</key>
|
||||
<string></string>
|
||||
<string>15.0.0</string>
|
||||
<key>BundlePath</key>
|
||||
<string>CPUFriendDataProvider.kext</string>
|
||||
<key>ExecutablePath</key>
|
||||
@@ -680,6 +610,24 @@
|
||||
<key>PlistPath</key>
|
||||
<string>Contents/Info.plist</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>Arch</key>
|
||||
<string>x86_64</string>
|
||||
<key>Comment</key>
|
||||
<string>Bluetooth Patch for BRCM2046 and BRCM2070</string>
|
||||
<key>Enabled</key>
|
||||
<false/>
|
||||
<key>MaxKernel</key>
|
||||
<string></string>
|
||||
<key>MinKernel</key>
|
||||
<string>21.0.0</string>
|
||||
<key>BundlePath</key>
|
||||
<string>Bluetooth-Spoof.kext</string>
|
||||
<key>ExecutablePath</key>
|
||||
<string></string>
|
||||
<key>PlistPath</key>
|
||||
<string>Contents/Info.plist</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>Arch</key>
|
||||
<string>x86_64</string>
|
||||
@@ -762,7 +710,7 @@
|
||||
<key>MaxKernel</key>
|
||||
<string></string>
|
||||
<key>MinKernel</key>
|
||||
<string></string>
|
||||
<string>12.0.0</string>
|
||||
<key>BundlePath</key>
|
||||
<string>CpuTscSync.kext</string>
|
||||
<key>ExecutablePath</key>
|
||||
@@ -780,7 +728,7 @@
|
||||
<key>MaxKernel</key>
|
||||
<string></string>
|
||||
<key>MinKernel</key>
|
||||
<string></string>
|
||||
<string>14.0.0</string>
|
||||
<key>BundlePath</key>
|
||||
<string>HibernationFixup.kext</string>
|
||||
<key>ExecutablePath</key>
|
||||
@@ -798,7 +746,7 @@
|
||||
<key>MaxKernel</key>
|
||||
<string></string>
|
||||
<key>MinKernel</key>
|
||||
<string></string>
|
||||
<string>18.0.0</string>
|
||||
<key>BundlePath</key>
|
||||
<string>NVMeFix.kext</string>
|
||||
<key>ExecutablePath</key>
|
||||
@@ -810,17 +758,17 @@
|
||||
<key>Arch</key>
|
||||
<string>x86_64</string>
|
||||
<key>Comment</key>
|
||||
<string>SidecarFixup</string>
|
||||
<string>FeatureUnlock</string>
|
||||
<key>Enabled</key>
|
||||
<false/>
|
||||
<key>MaxKernel</key>
|
||||
<string></string>
|
||||
<key>MinKernel</key>
|
||||
<string>19.0.0</string>
|
||||
<string>16.0.0</string>
|
||||
<key>BundlePath</key>
|
||||
<string>SidecarFixup.kext</string>
|
||||
<string>FeatureUnlock.kext</string>
|
||||
<key>ExecutablePath</key>
|
||||
<string>Contents/MacOS/SidecarFixup</string>
|
||||
<string>Contents/MacOS/FeatureUnlock</string>
|
||||
<key>PlistPath</key>
|
||||
<string>Contents/Info.plist</string>
|
||||
</dict>
|
||||
@@ -842,6 +790,186 @@
|
||||
<key>PlistPath</key>
|
||||
<string>Contents/Info.plist</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>Arch</key>
|
||||
<string>x86_64</string>
|
||||
<key>Comment</key>
|
||||
<string>BacklightInjector</string>
|
||||
<key>Enabled</key>
|
||||
<false/>
|
||||
<key>MaxKernel</key>
|
||||
<string></string>
|
||||
<key>MinKernel</key>
|
||||
<string></string>
|
||||
<key>BundlePath</key>
|
||||
<string>BacklightInjector.kext</string>
|
||||
<key>ExecutablePath</key>
|
||||
<string></string>
|
||||
<key>PlistPath</key>
|
||||
<string>Contents/Info.plist</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>Arch</key>
|
||||
<string>x86_64</string>
|
||||
<key>BundlePath</key>
|
||||
<string>IOFireWireFamily.kext</string>
|
||||
<key>Comment</key>
|
||||
<string></string>
|
||||
<key>Enabled</key>
|
||||
<false/>
|
||||
<key>ExecutablePath</key>
|
||||
<string>Contents/MacOS/IOFireWireFamily</string>
|
||||
<key>MaxKernel</key>
|
||||
<string></string>
|
||||
<key>MinKernel</key>
|
||||
<string>19.0.0</string>
|
||||
<key>PlistPath</key>
|
||||
<string>Contents/Info.plist</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>Arch</key>
|
||||
<string>x86_64</string>
|
||||
<key>BundlePath</key>
|
||||
<string>IOFireWireFamily.kext/Contents/PlugIns/AppleFWOHCI.kext</string>
|
||||
<key>Comment</key>
|
||||
<string></string>
|
||||
<key>Enabled</key>
|
||||
<false/>
|
||||
<key>ExecutablePath</key>
|
||||
<string>Contents/MacOS/AppleFWOHCI</string>
|
||||
<key>MaxKernel</key>
|
||||
<string></string>
|
||||
<key>MinKernel</key>
|
||||
<string>19.0.0</string>
|
||||
<key>PlistPath</key>
|
||||
<string>Contents/Info.plist</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>Arch</key>
|
||||
<string>x86_64</string>
|
||||
<key>BundlePath</key>
|
||||
<string>IOFireWireSBP2.kext</string>
|
||||
<key>Comment</key>
|
||||
<string></string>
|
||||
<key>Enabled</key>
|
||||
<false/>
|
||||
<key>ExecutablePath</key>
|
||||
<string>Contents/MacOS/IOFireWireSBP2</string>
|
||||
<key>MaxKernel</key>
|
||||
<string></string>
|
||||
<key>MinKernel</key>
|
||||
<string>19.0.0</string>
|
||||
<key>PlistPath</key>
|
||||
<string>Contents/Info.plist</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>Arch</key>
|
||||
<string>x86_64</string>
|
||||
<key>BundlePath</key>
|
||||
<string>IOFireWireSerialBusProtocolTransport.kext</string>
|
||||
<key>Comment</key>
|
||||
<string></string>
|
||||
<key>Enabled</key>
|
||||
<false/>
|
||||
<key>ExecutablePath</key>
|
||||
<string>Contents/MacOS/IOFireWireSerialBusProtocolTransport</string>
|
||||
<key>MaxKernel</key>
|
||||
<string></string>
|
||||
<key>MinKernel</key>
|
||||
<string>19.0.0</string>
|
||||
<key>PlistPath</key>
|
||||
<string>Contents/Info.plist</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>Arch</key>
|
||||
<string>x86_64</string>
|
||||
<key>BundlePath</key>
|
||||
<string>DebugEnhancer.kext</string>
|
||||
<key>Comment</key>
|
||||
<string>Enhance DEBUG output in system logs</string>
|
||||
<key>Enabled</key>
|
||||
<false/>
|
||||
<key>ExecutablePath</key>
|
||||
<string>Contents/MacOS/DebugEnhancer</string>
|
||||
<key>MaxKernel</key>
|
||||
<string></string>
|
||||
<key>MinKernel</key>
|
||||
<string>12.0.0</string>
|
||||
<key>PlistPath</key>
|
||||
<string>Contents/Info.plist</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>Arch</key>
|
||||
<string>x86_64</string>
|
||||
<key>BundlePath</key>
|
||||
<string>latebloom.kext</string>
|
||||
<key>Comment</key>
|
||||
<string>Work-around PCI race condition</string>
|
||||
<key>Enabled</key>
|
||||
<false/>
|
||||
<key>ExecutablePath</key>
|
||||
<string>Contents/MacOS/latebloom</string>
|
||||
<key>MaxKernel</key>
|
||||
<string></string>
|
||||
<key>MinKernel</key>
|
||||
<string>20.4.0</string>
|
||||
<key>PlistPath</key>
|
||||
<string>Contents/Info.plist</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>Arch</key>
|
||||
<string>x86_64</string>
|
||||
<key>BundlePath</key>
|
||||
<string>AppleUSBTrackpad.kext</string>
|
||||
<key>Comment</key>
|
||||
<string>Fix legacy MacBook Trackpad</string>
|
||||
<key>Enabled</key>
|
||||
<false/>
|
||||
<key>ExecutablePath</key>
|
||||
<string>Contents/MacOS/AppleUSBTrackpad</string>
|
||||
<key>MaxKernel</key>
|
||||
<string></string>
|
||||
<key>MinKernel</key>
|
||||
<string>16.0.0</string>
|
||||
<key>PlistPath</key>
|
||||
<string>Contents/Info.plist</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>Arch</key>
|
||||
<string>x86_64</string>
|
||||
<key>BundlePath</key>
|
||||
<string>BlueToolFixup.kext</string>
|
||||
<key>Comment</key>
|
||||
<string>Fix Monterey Bluetooth</string>
|
||||
<key>Enabled</key>
|
||||
<false/>
|
||||
<key>ExecutablePath</key>
|
||||
<string>Contents/MacOS/BlueToolFixup</string>
|
||||
<key>MaxKernel</key>
|
||||
<string></string>
|
||||
<key>MinKernel</key>
|
||||
<string>21.0.0</string>
|
||||
<key>PlistPath</key>
|
||||
<string>Contents/Info.plist</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>Arch</key>
|
||||
<string>x86_64</string>
|
||||
<key>BundlePath</key>
|
||||
<string>CSLVFixup.kext</string>
|
||||
<key>Comment</key>
|
||||
<string>Fix Music.app</string>
|
||||
<key>Enabled</key>
|
||||
<false/>
|
||||
<key>ExecutablePath</key>
|
||||
<string>Contents/MacOS/CSLVFixup</string>
|
||||
<key>MaxKernel</key>
|
||||
<string>20.99.99</string>
|
||||
<key>MinKernel</key>
|
||||
<string>20.0.0</string>
|
||||
<key>PlistPath</key>
|
||||
<string>Contents/Info.plist</string>
|
||||
</dict>
|
||||
</array>
|
||||
<key>Block</key>
|
||||
<array/>
|
||||
@@ -922,6 +1050,66 @@
|
||||
<key>Skip</key>
|
||||
<integer>0</integer>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>Arch</key>
|
||||
<string>x86_64</string>
|
||||
<key>Base</key>
|
||||
<string>_apfs_filevault_allowed</string>
|
||||
<key>Comment</key>
|
||||
<string>Force FileVault on Broken Seal</string>
|
||||
<key>Count</key>
|
||||
<integer>0</integer>
|
||||
<key>Enabled</key>
|
||||
<false/>
|
||||
<key>Find</key>
|
||||
<data></data>
|
||||
<key>Identifier</key>
|
||||
<string>com.apple.filesystems.apfs</string>
|
||||
<key>Limit</key>
|
||||
<integer>0</integer>
|
||||
<key>Mask</key>
|
||||
<data></data>
|
||||
<key>MaxKernel</key>
|
||||
<string></string>
|
||||
<key>MinKernel</key>
|
||||
<string>20.4.0</string>
|
||||
<key>Replace</key>
|
||||
<data>uAEAAADD</data>
|
||||
<key>ReplaceMask</key>
|
||||
<data></data>
|
||||
<key>Skip</key>
|
||||
<integer>0</integer>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>Arch</key>
|
||||
<string>x86_64</string>
|
||||
<key>Base</key>
|
||||
<string>_cs_require_lv</string>
|
||||
<key>Comment</key>
|
||||
<string>Disable Library Validation Enforcement</string>
|
||||
<key>Count</key>
|
||||
<integer>0</integer>
|
||||
<key>Enabled</key>
|
||||
<false/>
|
||||
<key>Find</key>
|
||||
<data></data>
|
||||
<key>Identifier</key>
|
||||
<string>kernel</string>
|
||||
<key>Limit</key>
|
||||
<integer>0</integer>
|
||||
<key>Mask</key>
|
||||
<data></data>
|
||||
<key>MaxKernel</key>
|
||||
<string></string>
|
||||
<key>MinKernel</key>
|
||||
<string>20.0.0</string>
|
||||
<key>Replace</key>
|
||||
<data>uAAAAADD</data>
|
||||
<key>ReplaceMask</key>
|
||||
<data></data>
|
||||
<key>Skip</key>
|
||||
<integer>0</integer>
|
||||
</dict>
|
||||
</array>
|
||||
<key>Quirks</key>
|
||||
<dict>
|
||||
@@ -954,9 +1142,11 @@
|
||||
<key>LegacyCommpage</key>
|
||||
<false/>
|
||||
<key>PanicNoKextDump</key>
|
||||
<false/>
|
||||
<true/>
|
||||
<key>PowerTimeoutKernelPanic</key>
|
||||
<false/>
|
||||
<key>ProvideCurrentCpuInfo</key>
|
||||
<false/>
|
||||
<key>SetApfsTrimTimeout</key>
|
||||
<integer>-1</integer>
|
||||
<key>ThirdPartyDrives</key>
|
||||
@@ -966,10 +1156,12 @@
|
||||
</dict>
|
||||
<key>Scheme</key>
|
||||
<dict>
|
||||
<key>CustomKernel</key>
|
||||
<false/>
|
||||
<key>FuzzyMatch</key>
|
||||
<true/>
|
||||
<key>KernelArch</key>
|
||||
<string>x86_64</string>
|
||||
<string>Auto</string>
|
||||
<key>KernelCache</key>
|
||||
<string>Auto</string>
|
||||
</dict>
|
||||
@@ -991,13 +1183,13 @@
|
||||
<key>LauncherOption</key>
|
||||
<string>Full</string>
|
||||
<key>PickerAttributes</key>
|
||||
<integer>17</integer>
|
||||
<integer>145</integer>
|
||||
<key>PickerAudioAssist</key>
|
||||
<false/>
|
||||
<key>PickerMode</key>
|
||||
<string>External</string>
|
||||
<key>PickerVariant</key>
|
||||
<string>Modern</string>
|
||||
<string>Acidanthera\GoldenGate</string>
|
||||
<key>PollAppleHotKeys</key>
|
||||
<true/>
|
||||
<key>ShowPicker</key>
|
||||
@@ -1034,6 +1226,8 @@
|
||||
<true/>
|
||||
<key>AllowSetDefault</key>
|
||||
<true/>
|
||||
<key>AllowToggleSip</key>
|
||||
<false/>
|
||||
<key>ApECID</key>
|
||||
<integer>0</integer>
|
||||
<key>AuthRestart</key>
|
||||
@@ -1072,6 +1266,8 @@
|
||||
<string>BootKicker.efi</string>
|
||||
<key>Enabled</key>
|
||||
<true/>
|
||||
<key>Flavour</key>
|
||||
<string>Auto</string>
|
||||
<key>Path</key>
|
||||
<string>BootKicker.efi</string>
|
||||
<key>RealPath</key>
|
||||
@@ -1088,6 +1284,8 @@
|
||||
<string>OpenShell.efi</string>
|
||||
<key>Comment</key>
|
||||
<string>OpenShell.efi</string>
|
||||
<key>Flavour</key>
|
||||
<string>OpenShell:UEFIShell:Shell</string>
|
||||
<key>Enabled</key>
|
||||
<true/>
|
||||
<key>Path</key>
|
||||
@@ -1095,7 +1293,7 @@
|
||||
<key>RealPath</key>
|
||||
<false/>
|
||||
<key>TextMode</key>
|
||||
<false/>
|
||||
<true/>
|
||||
</dict>
|
||||
</array>
|
||||
</dict>
|
||||
@@ -1107,18 +1305,16 @@
|
||||
<dict>
|
||||
<key>DefaultBackgroundColor</key>
|
||||
<data>AAAAAA==</data>
|
||||
<key>UIScale</key>
|
||||
<data>AQ==</data>
|
||||
</dict>
|
||||
<key>4D1FDA02-38C7-4A6A-9CC6-4BCCA8B30102</key>
|
||||
<dict>
|
||||
<key>OCLP-Version</key>
|
||||
<string></string>
|
||||
<key>OCLP-Settings</key>
|
||||
<string></string>
|
||||
</dict>
|
||||
<key>7C436110-AB2A-4BBB-A880-FE41995C9F82</key>
|
||||
<dict>
|
||||
<key>SystemAudioVolume</key>
|
||||
<data>Rg==</data>
|
||||
<key>boot-args</key>
|
||||
<string>keepsyms=1 debug=0x100</string>
|
||||
<key>csr-active-config</key>
|
||||
@@ -1131,12 +1327,12 @@
|
||||
<dict>
|
||||
<key>4D1EDE05-38C7-4A6A-9CC6-4BCCA8B38C14</key>
|
||||
<array>
|
||||
<string>UIScale</string>
|
||||
<string>DefaultBackgroundColor</string>
|
||||
</array>
|
||||
<key>4D1FDA02-38C7-4A6A-9CC6-4BCCA8B30102</key>
|
||||
<array>
|
||||
<string>OCLP-Version</string>
|
||||
<string>OCLP-Settings</string>
|
||||
<string>revcpu</string>
|
||||
<string>revcpuname</string>
|
||||
</array>
|
||||
@@ -1195,8 +1391,8 @@
|
||||
</dict>
|
||||
<key>Generic</key>
|
||||
<dict>
|
||||
<key>AdviseWindows</key>
|
||||
<false/>
|
||||
<key>AdviseFeatures</key>
|
||||
<true/>
|
||||
<key>SystemMemoryStatus</key>
|
||||
<string>Auto</string>
|
||||
<key>MaxBIOSVersion</key>
|
||||
@@ -1216,242 +1412,6 @@
|
||||
<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>
|
||||
@@ -1550,9 +1510,9 @@
|
||||
<key>JumpstartHotPlug</key>
|
||||
<false/>
|
||||
<key>MinDate</key>
|
||||
<integer>0</integer>
|
||||
<integer>20180621</integer>
|
||||
<key>MinVersion</key>
|
||||
<integer>0</integer>
|
||||
<integer>748077008000000</integer>
|
||||
</dict>
|
||||
<key>AppleInput</key>
|
||||
<dict>
|
||||
@@ -1564,6 +1524,8 @@
|
||||
<integer>0</integer>
|
||||
<key>KeySubsequentDelay</key>
|
||||
<integer>5</integer>
|
||||
<key>GraphicsInputMirroring</key>
|
||||
<false/>
|
||||
<key>PointerSpeedDiv</key>
|
||||
<integer>1</integer>
|
||||
<key>PointerSpeedMul</key>
|
||||
@@ -1593,7 +1555,56 @@
|
||||
<key>ConnectDrivers</key>
|
||||
<true/>
|
||||
<key>Drivers</key>
|
||||
<array/>
|
||||
<array>
|
||||
<dict>
|
||||
<key>Path</key>
|
||||
<string>OpenRuntime.efi</string>
|
||||
<key>Enabled</key>
|
||||
<false/>
|
||||
<key>Arguments</key>
|
||||
<string></string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>Path</key>
|
||||
<string>OpenCanopy.efi</string>
|
||||
<key>Enabled</key>
|
||||
<false/>
|
||||
<key>Arguments</key>
|
||||
<string></string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>Path</key>
|
||||
<string>NvmExpressDxe.efi</string>
|
||||
<key>Enabled</key>
|
||||
<false/>
|
||||
<key>Arguments</key>
|
||||
<string></string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>Path</key>
|
||||
<string>ExFatDxeLegacy.efi</string>
|
||||
<key>Enabled</key>
|
||||
<false/>
|
||||
<key>Arguments</key>
|
||||
<string></string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>Path</key>
|
||||
<string>XhciDxe.efi</string>
|
||||
<key>Enabled</key>
|
||||
<false/>
|
||||
<key>Arguments</key>
|
||||
<string></string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>Path</key>
|
||||
<string>OpenLinuxBoot.efi</string>
|
||||
<key>Enabled</key>
|
||||
<false/>
|
||||
<key>Arguments</key>
|
||||
<string></string>
|
||||
</dict>
|
||||
</array>
|
||||
<key>Input</key>
|
||||
<dict>
|
||||
<key>KeyFiltering</key>
|
||||
@@ -1624,7 +1635,7 @@
|
||||
<key>ForceResolution</key>
|
||||
<false/>
|
||||
<key>GopPassThrough</key>
|
||||
<false/>
|
||||
<string>Disabled</string>
|
||||
<key>IgnoreTextInGraphics</key>
|
||||
<false/>
|
||||
<key>ProvideConsoleGop</key>
|
||||
@@ -1650,6 +1661,8 @@
|
||||
<true/>
|
||||
<key>AppleDebugLog</key>
|
||||
<true/>
|
||||
<key>AppleEg2Info</key>
|
||||
<false/>
|
||||
<key>AppleFramebufferInfo</key>
|
||||
<false/>
|
||||
<key>AppleImageConversion</key>
|
||||
@@ -1689,6 +1702,8 @@
|
||||
<false/>
|
||||
<key>ExitBootServicesDelay</key>
|
||||
<integer>0</integer>
|
||||
<key>ForceOcWriteFlash</key>
|
||||
<false/>
|
||||
<key>ForgeUefiSupport</key>
|
||||
<false/>
|
||||
<key>IgnoreInvalidFlexRatio</key>
|
||||
|
||||
BIN
payloads/Drivers/XhciDxe.efi
Normal file
BIN
payloads/Drivers/XhciDxe.efi
Normal file
Binary file not shown.
Binary file not shown.
Binary file not shown.
BIN
payloads/Kexts/Acidanthera/AirportBrcmFixup-v2.1.3.zip
Normal file
BIN
payloads/Kexts/Acidanthera/AirportBrcmFixup-v2.1.3.zip
Normal file
Binary file not shown.
Binary file not shown.
BIN
payloads/Kexts/Acidanthera/AppleALC-v1.6.3.zip
Normal file
BIN
payloads/Kexts/Acidanthera/AppleALC-v1.6.3.zip
Normal file
Binary file not shown.
BIN
payloads/Kexts/Acidanthera/BlueToolFixup-v2.6.0.zip
Normal file
BIN
payloads/Kexts/Acidanthera/BlueToolFixup-v2.6.0.zip
Normal file
Binary file not shown.
BIN
payloads/Kexts/Acidanthera/BlueToolFixup-v2.6.1.zip
Normal file
BIN
payloads/Kexts/Acidanthera/BlueToolFixup-v2.6.1.zip
Normal file
Binary file not shown.
15
payloads/Kexts/Acidanthera/BlueToolFixup.patch
Normal file
15
payloads/Kexts/Acidanthera/BlueToolFixup.patch
Normal file
@@ -0,0 +1,15 @@
|
||||
diff --git a/BrcmPatchRAM/BlueToolFixup.cpp b/BrcmPatchRAM/BlueToolFixup.cpp
|
||||
index 0fa891a..b64b780 100644
|
||||
--- a/BrcmPatchRAM/BlueToolFixup.cpp
|
||||
+++ b/BrcmPatchRAM/BlueToolFixup.cpp
|
||||
@@ -37,8 +37,10 @@ bool BlueToolFixup::start(IOService *provider) {
|
||||
}
|
||||
setProperty("VersionInfo", kextVersion);
|
||||
setName("bluetooth");
|
||||
+ /*
|
||||
uint8_t bytes[] {0x00, 0x00, 0x00, 0x00};
|
||||
setProperty("transport-encoding", bytes, sizeof(bytes));
|
||||
+ */
|
||||
registerService();
|
||||
|
||||
return true;
|
||||
Binary file not shown.
BIN
payloads/Kexts/Acidanthera/CPUFriend-v1.2.4.zip
Normal file
BIN
payloads/Kexts/Acidanthera/CPUFriend-v1.2.4.zip
Normal file
Binary file not shown.
BIN
payloads/Kexts/Acidanthera/CSLVFixup-v2.6.1.zip
Normal file
BIN
payloads/Kexts/Acidanthera/CSLVFixup-v2.6.1.zip
Normal file
Binary file not shown.
Binary file not shown.
BIN
payloads/Kexts/Acidanthera/DebugEnhancer-v1.0.4.zip
Normal file
BIN
payloads/Kexts/Acidanthera/DebugEnhancer-v1.0.4.zip
Normal file
Binary file not shown.
BIN
payloads/Kexts/Acidanthera/FeatureUnlock-v1.0.3.zip
Normal file
BIN
payloads/Kexts/Acidanthera/FeatureUnlock-v1.0.3.zip
Normal file
Binary file not shown.
Binary file not shown.
Binary file not shown.
BIN
payloads/Kexts/Acidanthera/Lilu-v1.5.6.zip
Normal file
BIN
payloads/Kexts/Acidanthera/Lilu-v1.5.6.zip
Normal file
Binary file not shown.
Binary file not shown.
BIN
payloads/Kexts/Acidanthera/NVMeFix-v1.0.9.zip
Normal file
BIN
payloads/Kexts/Acidanthera/NVMeFix-v1.0.9.zip
Normal file
Binary file not shown.
Binary file not shown.
BIN
payloads/Kexts/Acidanthera/RestrictEvents-MBP91-v1.0.3.zip
Normal file
BIN
payloads/Kexts/Acidanthera/RestrictEvents-MBP91-v1.0.3.zip
Normal file
Binary file not shown.
Binary file not shown.
BIN
payloads/Kexts/Acidanthera/RestrictEvents-v1.0.3.zip
Normal file
BIN
payloads/Kexts/Acidanthera/RestrictEvents-v1.0.3.zip
Normal file
Binary file not shown.
Binary file not shown.
BIN
payloads/Kexts/Acidanthera/SidecarFixup-v1.0.2.zip
Normal file
BIN
payloads/Kexts/Acidanthera/SidecarFixup-v1.0.2.zip
Normal file
Binary file not shown.
Binary file not shown.
BIN
payloads/Kexts/Acidanthera/WhateverGreen-v1.5.3.zip
Normal file
BIN
payloads/Kexts/Acidanthera/WhateverGreen-v1.5.3.zip
Normal file
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
BIN
payloads/Kexts/FireWire/IOFireWireFamily-v1.0.1.zip
Normal file
BIN
payloads/Kexts/FireWire/IOFireWireFamily-v1.0.1.zip
Normal file
Binary file not shown.
BIN
payloads/Kexts/FireWire/IOFireWireSBP2-v1.0.1.zip
Normal file
BIN
payloads/Kexts/FireWire/IOFireWireSBP2-v1.0.1.zip
Normal file
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
BIN
payloads/Kexts/Misc/AppleUSBTrackpad-v1.0.1.zip
Normal file
BIN
payloads/Kexts/Misc/AppleUSBTrackpad-v1.0.1.zip
Normal file
Binary file not shown.
BIN
payloads/Kexts/Misc/BacklightInjector-v1.0.0.zip
Normal file
BIN
payloads/Kexts/Misc/BacklightInjector-v1.0.0.zip
Normal file
Binary file not shown.
BIN
payloads/Kexts/Misc/Bluetooth-Spoof-v1.0.0.zip
Normal file
BIN
payloads/Kexts/Misc/Bluetooth-Spoof-v1.0.0.zip
Normal file
Binary file not shown.
Binary file not shown.
BIN
payloads/Kexts/Misc/latebloom-v0.22.zip
Normal file
BIN
payloads/Kexts/Misc/latebloom-v0.22.zip
Normal file
Binary file not shown.
@@ -113,6 +113,28 @@
|
||||
<string>none</string>
|
||||
<key>iMac14,3</key>
|
||||
<string>none</string>
|
||||
<key>iMac14,4</key>
|
||||
<string>Config2</string>
|
||||
<key>iMac15,1</key>
|
||||
<string>Config2</string>
|
||||
<key>iMac17,1</key>
|
||||
<string>Config2</string>
|
||||
<key>iMac18,2</key>
|
||||
<string>Config3</string>
|
||||
<key>iMac18,3</key>
|
||||
<string>Config3</string>
|
||||
<key>iMac19,1</key>
|
||||
<string>Config3</string>
|
||||
<key>iMac19,2</key>
|
||||
<string>Config3</string>
|
||||
<key>iMac20,1</key>
|
||||
<string>Config3</string>
|
||||
<key>iMac20,2</key>
|
||||
<string>Config3</string>
|
||||
<key>iMacPro1,1</key>
|
||||
<string>Config4</string>
|
||||
<key>MacPro6,1</key>
|
||||
<string>Config1</string>
|
||||
<key>MacBookPro9,1</key>
|
||||
<string>none</string>
|
||||
<key>MacBookPro10,1</key>
|
||||
|
||||
@@ -295,6 +295,166 @@
|
||||
<key>LogControl</key>
|
||||
<integer>0</integer>
|
||||
</dict>
|
||||
<key>MacBook8,1</key>
|
||||
<dict>
|
||||
<key>IGPU</key>
|
||||
<dict>
|
||||
<key>BoostPState</key>
|
||||
<array>
|
||||
<integer>18</integer>
|
||||
<integer>18</integer>
|
||||
<integer>18</integer>
|
||||
<integer>18</integer>
|
||||
</array>
|
||||
<key>BoostTime</key>
|
||||
<array>
|
||||
<integer>1</integer>
|
||||
<integer>1</integer>
|
||||
<integer>1</integer>
|
||||
<integer>15</integer>
|
||||
</array>
|
||||
<key>HardPlimit</key>
|
||||
<integer>1</integer>
|
||||
<key>Heuristic</key>
|
||||
<dict>
|
||||
<key>BusyDownThresholdPercent</key>
|
||||
<integer>60</integer>
|
||||
<key>BusyUpThresholdPercent</key>
|
||||
<integer>80</integer>
|
||||
<key>DownStep</key>
|
||||
<integer>1</integer>
|
||||
<key>EnableOverride</key>
|
||||
<integer>1</integer>
|
||||
<key>EnableRingTableOverride</key>
|
||||
<integer>1</integer>
|
||||
<key>EvaluateDownInterval</key>
|
||||
<integer>31250</integer>
|
||||
<key>EvaluateUpInterval</key>
|
||||
<integer>31250</integer>
|
||||
<key>GT3Floor</key>
|
||||
<integer>6</integer>
|
||||
<key>ID</key>
|
||||
<integer>2</integer>
|
||||
<key>IOBusynessSamplingInterval</key>
|
||||
<integer>1</integer>
|
||||
<key>LowPriorityPeff</key>
|
||||
<integer>11</integer>
|
||||
<key>NumOfRingTableOverride</key>
|
||||
<integer>23</integer>
|
||||
<key>NumOfRingTables</key>
|
||||
<integer>3</integer>
|
||||
<key>NumOfThresholdsForRingTables</key>
|
||||
<integer>2</integer>
|
||||
<key>RingOverrideTable0</key>
|
||||
<array>
|
||||
<integer>8</integer>
|
||||
<integer>8</integer>
|
||||
<integer>8</integer>
|
||||
<integer>8</integer>
|
||||
<integer>8</integer>
|
||||
<integer>9</integer>
|
||||
<integer>10</integer>
|
||||
<integer>10</integer>
|
||||
<integer>10</integer>
|
||||
<integer>10</integer>
|
||||
<integer>10</integer>
|
||||
<integer>10</integer>
|
||||
<integer>10</integer>
|
||||
<integer>10</integer>
|
||||
<integer>10</integer>
|
||||
<integer>10</integer>
|
||||
<integer>10</integer>
|
||||
<integer>10</integer>
|
||||
<integer>10</integer>
|
||||
<integer>10</integer>
|
||||
<integer>10</integer>
|
||||
<integer>10</integer>
|
||||
<integer>10</integer>
|
||||
</array>
|
||||
<key>RingOverrideTable1</key>
|
||||
<array>
|
||||
<integer>8</integer>
|
||||
<integer>8</integer>
|
||||
<integer>8</integer>
|
||||
<integer>9</integer>
|
||||
<integer>10</integer>
|
||||
<integer>11</integer>
|
||||
<integer>13</integer>
|
||||
<integer>14</integer>
|
||||
<integer>15</integer>
|
||||
<integer>16</integer>
|
||||
<integer>16</integer>
|
||||
<integer>16</integer>
|
||||
<integer>16</integer>
|
||||
<integer>16</integer>
|
||||
<integer>16</integer>
|
||||
<integer>16</integer>
|
||||
<integer>16</integer>
|
||||
<integer>16</integer>
|
||||
<integer>16</integer>
|
||||
<integer>16</integer>
|
||||
<integer>16</integer>
|
||||
<integer>16</integer>
|
||||
<integer>16</integer>
|
||||
</array>
|
||||
<key>RingOverrideTable2</key>
|
||||
<array>
|
||||
<integer>8</integer>
|
||||
<integer>8</integer>
|
||||
<integer>8</integer>
|
||||
<integer>9</integer>
|
||||
<integer>10</integer>
|
||||
<integer>11</integer>
|
||||
<integer>13</integer>
|
||||
<integer>14</integer>
|
||||
<integer>15</integer>
|
||||
<integer>16</integer>
|
||||
<integer>18</integer>
|
||||
<integer>19</integer>
|
||||
<integer>20</integer>
|
||||
<integer>21</integer>
|
||||
<integer>23</integer>
|
||||
<integer>24</integer>
|
||||
<integer>25</integer>
|
||||
<integer>26</integer>
|
||||
<integer>28</integer>
|
||||
<integer>29</integer>
|
||||
<integer>30</integer>
|
||||
<integer>31</integer>
|
||||
<integer>33</integer>
|
||||
</array>
|
||||
<key>StartingPstateForRingTableOverride</key>
|
||||
<integer>11</integer>
|
||||
<key>ThresholdsForRingOverrideTable0</key>
|
||||
<array>
|
||||
<integer>0</integer>
|
||||
<integer>10</integer>
|
||||
</array>
|
||||
<key>ThresholdsForRingOverrideTable1</key>
|
||||
<array>
|
||||
<integer>5</integer>
|
||||
<integer>15</integer>
|
||||
</array>
|
||||
<key>ThresholdsForRingOverrideTable2</key>
|
||||
<array>
|
||||
<integer>10</integer>
|
||||
<integer>100</integer>
|
||||
</array>
|
||||
<key>UpStep</key>
|
||||
<integer>2</integer>
|
||||
<key>sampleInterval</key>
|
||||
<integer>1000</integer>
|
||||
</dict>
|
||||
<key>NumPriorityLevels</key>
|
||||
<integer>4</integer>
|
||||
<key>PriorityLevelMask</key>
|
||||
<integer>8</integer>
|
||||
<key>ThermalSupport</key>
|
||||
<integer>1</integer>
|
||||
<key>control-id</key>
|
||||
<integer>16</integer>
|
||||
</dict>
|
||||
</dict>
|
||||
<key>MacBookAir2,1</key>
|
||||
<dict>
|
||||
<key>IGPU</key>
|
||||
@@ -2274,6 +2434,500 @@
|
||||
<integer>16</integer>
|
||||
</dict>
|
||||
</dict>
|
||||
<key>MacBookPro11,1</key>
|
||||
<dict>
|
||||
<key>IGPU</key>
|
||||
<dict>
|
||||
<key>Heuristic</key>
|
||||
<dict>
|
||||
<key>BusyDownThresholdPercent</key>
|
||||
<integer>50</integer>
|
||||
<key>BusyUpThresholdPercent</key>
|
||||
<integer>70</integer>
|
||||
<key>DownStep</key>
|
||||
<integer>1</integer>
|
||||
<key>EnableOverride</key>
|
||||
<integer>1</integer>
|
||||
<key>EnableRingTableOverride</key>
|
||||
<integer>1</integer>
|
||||
<key>EvaluateDownInterval</key>
|
||||
<integer>31250</integer>
|
||||
<key>EvaluateUpInterval</key>
|
||||
<integer>31250</integer>
|
||||
<key>GT2Floor</key>
|
||||
<integer>8</integer>
|
||||
<key>GT3Floor</key>
|
||||
<integer>11</integer>
|
||||
<key>ID</key>
|
||||
<integer>2</integer>
|
||||
<key>IOBusynessSamplingInterval</key>
|
||||
<integer>1</integer>
|
||||
<key>NumOfRingTableOverride</key>
|
||||
<integer>23</integer>
|
||||
<key>NumOfRingTables</key>
|
||||
<integer>3</integer>
|
||||
<key>NumOfThresholdsForRingTables</key>
|
||||
<integer>2</integer>
|
||||
<key>RingOverrideTable0</key>
|
||||
<array>
|
||||
<integer>8</integer>
|
||||
<integer>8</integer>
|
||||
<integer>8</integer>
|
||||
<integer>8</integer>
|
||||
<integer>8</integer>
|
||||
<integer>9</integer>
|
||||
<integer>10</integer>
|
||||
<integer>10</integer>
|
||||
<integer>10</integer>
|
||||
<integer>10</integer>
|
||||
<integer>10</integer>
|
||||
<integer>10</integer>
|
||||
<integer>10</integer>
|
||||
<integer>10</integer>
|
||||
<integer>10</integer>
|
||||
<integer>10</integer>
|
||||
<integer>10</integer>
|
||||
<integer>10</integer>
|
||||
<integer>10</integer>
|
||||
<integer>10</integer>
|
||||
<integer>10</integer>
|
||||
<integer>10</integer>
|
||||
<integer>10</integer>
|
||||
</array>
|
||||
<key>RingOverrideTable1</key>
|
||||
<array>
|
||||
<integer>8</integer>
|
||||
<integer>8</integer>
|
||||
<integer>8</integer>
|
||||
<integer>9</integer>
|
||||
<integer>10</integer>
|
||||
<integer>11</integer>
|
||||
<integer>13</integer>
|
||||
<integer>14</integer>
|
||||
<integer>15</integer>
|
||||
<integer>16</integer>
|
||||
<integer>16</integer>
|
||||
<integer>16</integer>
|
||||
<integer>16</integer>
|
||||
<integer>16</integer>
|
||||
<integer>16</integer>
|
||||
<integer>16</integer>
|
||||
<integer>16</integer>
|
||||
<integer>16</integer>
|
||||
<integer>16</integer>
|
||||
<integer>16</integer>
|
||||
<integer>16</integer>
|
||||
<integer>16</integer>
|
||||
<integer>16</integer>
|
||||
</array>
|
||||
<key>RingOverrideTable2</key>
|
||||
<array>
|
||||
<integer>8</integer>
|
||||
<integer>8</integer>
|
||||
<integer>8</integer>
|
||||
<integer>9</integer>
|
||||
<integer>10</integer>
|
||||
<integer>11</integer>
|
||||
<integer>13</integer>
|
||||
<integer>14</integer>
|
||||
<integer>15</integer>
|
||||
<integer>16</integer>
|
||||
<integer>18</integer>
|
||||
<integer>19</integer>
|
||||
<integer>20</integer>
|
||||
<integer>21</integer>
|
||||
<integer>23</integer>
|
||||
<integer>24</integer>
|
||||
<integer>25</integer>
|
||||
<integer>26</integer>
|
||||
<integer>28</integer>
|
||||
<integer>29</integer>
|
||||
<integer>30</integer>
|
||||
<integer>31</integer>
|
||||
<integer>33</integer>
|
||||
</array>
|
||||
<key>StartingPstateForRingTableOverride</key>
|
||||
<integer>11</integer>
|
||||
<key>ThresholdsForRingOverrideTable0</key>
|
||||
<array>
|
||||
<integer>0</integer>
|
||||
<integer>10</integer>
|
||||
</array>
|
||||
<key>ThresholdsForRingOverrideTable1</key>
|
||||
<array>
|
||||
<integer>5</integer>
|
||||
<integer>15</integer>
|
||||
</array>
|
||||
<key>ThresholdsForRingOverrideTable2</key>
|
||||
<array>
|
||||
<integer>10</integer>
|
||||
<integer>100</integer>
|
||||
</array>
|
||||
<key>UpStep</key>
|
||||
<integer>1</integer>
|
||||
</dict>
|
||||
<key>SliceControl</key>
|
||||
<integer>1</integer>
|
||||
<key>control-id</key>
|
||||
<integer>16</integer>
|
||||
</dict>
|
||||
</dict>
|
||||
<key>MacBookPro11,2</key>
|
||||
<dict>
|
||||
<key>IGPU</key>
|
||||
<dict>
|
||||
<key>Heuristic</key>
|
||||
<dict>
|
||||
<key>BusyDownThresholdPercent</key>
|
||||
<integer>50</integer>
|
||||
<key>BusyUpThresholdPercent</key>
|
||||
<integer>70</integer>
|
||||
<key>DownStep</key>
|
||||
<integer>1</integer>
|
||||
<key>EnableOverride</key>
|
||||
<integer>1</integer>
|
||||
<key>EnableRingTableOverride</key>
|
||||
<integer>1</integer>
|
||||
<key>EvaluateDownInterval</key>
|
||||
<integer>31250</integer>
|
||||
<key>EvaluateUpInterval</key>
|
||||
<integer>31250</integer>
|
||||
<key>GT2Floor</key>
|
||||
<integer>12</integer>
|
||||
<key>GT3Floor</key>
|
||||
<integer>15</integer>
|
||||
<key>ID</key>
|
||||
<integer>2</integer>
|
||||
<key>IOBusynessSamplingInterval</key>
|
||||
<integer>1</integer>
|
||||
<key>NumOfRingTableOverride</key>
|
||||
<integer>23</integer>
|
||||
<key>NumOfRingTables</key>
|
||||
<integer>3</integer>
|
||||
<key>NumOfThresholdsForRingTables</key>
|
||||
<integer>2</integer>
|
||||
<key>RingOverrideTable0</key>
|
||||
<array>
|
||||
<integer>8</integer>
|
||||
<integer>8</integer>
|
||||
<integer>8</integer>
|
||||
<integer>8</integer>
|
||||
<integer>8</integer>
|
||||
<integer>9</integer>
|
||||
<integer>10</integer>
|
||||
<integer>10</integer>
|
||||
<integer>10</integer>
|
||||
<integer>10</integer>
|
||||
<integer>10</integer>
|
||||
<integer>10</integer>
|
||||
<integer>10</integer>
|
||||
<integer>10</integer>
|
||||
<integer>10</integer>
|
||||
<integer>10</integer>
|
||||
<integer>10</integer>
|
||||
<integer>10</integer>
|
||||
<integer>10</integer>
|
||||
<integer>10</integer>
|
||||
<integer>10</integer>
|
||||
<integer>10</integer>
|
||||
<integer>10</integer>
|
||||
</array>
|
||||
<key>RingOverrideTable1</key>
|
||||
<array>
|
||||
<integer>8</integer>
|
||||
<integer>8</integer>
|
||||
<integer>8</integer>
|
||||
<integer>9</integer>
|
||||
<integer>10</integer>
|
||||
<integer>11</integer>
|
||||
<integer>13</integer>
|
||||
<integer>14</integer>
|
||||
<integer>15</integer>
|
||||
<integer>16</integer>
|
||||
<integer>16</integer>
|
||||
<integer>16</integer>
|
||||
<integer>16</integer>
|
||||
<integer>16</integer>
|
||||
<integer>16</integer>
|
||||
<integer>16</integer>
|
||||
<integer>16</integer>
|
||||
<integer>16</integer>
|
||||
<integer>16</integer>
|
||||
<integer>29</integer>
|
||||
<integer>30</integer>
|
||||
<integer>31</integer>
|
||||
<integer>33</integer>
|
||||
</array>
|
||||
<key>RingOverrideTable2</key>
|
||||
<array>
|
||||
<integer>8</integer>
|
||||
<integer>8</integer>
|
||||
<integer>8</integer>
|
||||
<integer>9</integer>
|
||||
<integer>10</integer>
|
||||
<integer>11</integer>
|
||||
<integer>13</integer>
|
||||
<integer>14</integer>
|
||||
<integer>15</integer>
|
||||
<integer>16</integer>
|
||||
<integer>18</integer>
|
||||
<integer>19</integer>
|
||||
<integer>20</integer>
|
||||
<integer>21</integer>
|
||||
<integer>23</integer>
|
||||
<integer>24</integer>
|
||||
<integer>25</integer>
|
||||
<integer>26</integer>
|
||||
<integer>28</integer>
|
||||
<integer>29</integer>
|
||||
<integer>30</integer>
|
||||
<integer>31</integer>
|
||||
<integer>33</integer>
|
||||
</array>
|
||||
<key>StartingPstateForRingTableOverride</key>
|
||||
<integer>11</integer>
|
||||
<key>ThresholdsForRingOverrideTable0</key>
|
||||
<array>
|
||||
<integer>0</integer>
|
||||
<integer>10</integer>
|
||||
</array>
|
||||
<key>ThresholdsForRingOverrideTable1</key>
|
||||
<array>
|
||||
<integer>5</integer>
|
||||
<integer>15</integer>
|
||||
</array>
|
||||
<key>ThresholdsForRingOverrideTable2</key>
|
||||
<array>
|
||||
<integer>10</integer>
|
||||
<integer>100</integer>
|
||||
</array>
|
||||
<key>UpStep</key>
|
||||
<integer>1</integer>
|
||||
</dict>
|
||||
<key>SliceControl</key>
|
||||
<integer>1</integer>
|
||||
<key>control-id</key>
|
||||
<integer>16</integer>
|
||||
</dict>
|
||||
</dict>
|
||||
<key>MacBookPro11,3</key>
|
||||
<dict>
|
||||
<key>GFX0</key>
|
||||
<dict>
|
||||
<key>BoostPState</key>
|
||||
<array>
|
||||
<integer>6</integer>
|
||||
<integer>14</integer>
|
||||
<integer>14</integer>
|
||||
<integer>6</integer>
|
||||
</array>
|
||||
<key>BoostTime</key>
|
||||
<array>
|
||||
<integer>1</integer>
|
||||
<integer>1</integer>
|
||||
<integer>1</integer>
|
||||
<integer>1</integer>
|
||||
</array>
|
||||
<key>Heuristic</key>
|
||||
<dict>
|
||||
<key>ID</key>
|
||||
<integer>4</integer>
|
||||
<key>MinP0P1</key>
|
||||
<integer>10</integer>
|
||||
<key>MinP5</key>
|
||||
<integer>14</integer>
|
||||
<key>MinP8</key>
|
||||
<integer>15</integer>
|
||||
<key>MinVP0</key>
|
||||
<integer>10</integer>
|
||||
<key>MinVP1</key>
|
||||
<integer>21</integer>
|
||||
<key>MinVP5</key>
|
||||
<integer>28</integer>
|
||||
<key>MinVP8</key>
|
||||
<integer>29</integer>
|
||||
<key>NumOfPstates</key>
|
||||
<integer>16</integer>
|
||||
<key>NumOfVPstates</key>
|
||||
<integer>31</integer>
|
||||
<key>P0Table</key>
|
||||
<array>
|
||||
<integer>0</integer>
|
||||
<integer>1</integer>
|
||||
<integer>2</integer>
|
||||
<integer>3</integer>
|
||||
<integer>4</integer>
|
||||
<integer>5</integer>
|
||||
<integer>6</integer>
|
||||
<integer>7</integer>
|
||||
<integer>8</integer>
|
||||
<integer>9</integer>
|
||||
<integer>10</integer>
|
||||
<integer>25</integer>
|
||||
<integer>26</integer>
|
||||
<integer>27</integer>
|
||||
<integer>28</integer>
|
||||
<integer>29</integer>
|
||||
</array>
|
||||
<key>P1Table</key>
|
||||
<array>
|
||||
<integer>11</integer>
|
||||
<integer>12</integer>
|
||||
<integer>13</integer>
|
||||
<integer>14</integer>
|
||||
<integer>15</integer>
|
||||
<integer>16</integer>
|
||||
<integer>17</integer>
|
||||
<integer>18</integer>
|
||||
<integer>19</integer>
|
||||
<integer>20</integer>
|
||||
<integer>21</integer>
|
||||
<integer>25</integer>
|
||||
<integer>26</integer>
|
||||
<integer>27</integer>
|
||||
<integer>28</integer>
|
||||
<integer>29</integer>
|
||||
</array>
|
||||
</dict>
|
||||
<key>control-id</key>
|
||||
<integer>17</integer>
|
||||
</dict>
|
||||
<key>IGPU</key>
|
||||
<dict>
|
||||
<key>Heuristic</key>
|
||||
<dict>
|
||||
<key>BusyDownThresholdPercent</key>
|
||||
<integer>50</integer>
|
||||
<key>BusyUpThresholdPercent</key>
|
||||
<integer>70</integer>
|
||||
<key>DownStep</key>
|
||||
<integer>1</integer>
|
||||
<key>EnableOverride</key>
|
||||
<integer>1</integer>
|
||||
<key>EnableRingTableOverride</key>
|
||||
<integer>1</integer>
|
||||
<key>EvaluateDownInterval</key>
|
||||
<integer>31250</integer>
|
||||
<key>EvaluateUpInterval</key>
|
||||
<integer>31250</integer>
|
||||
<key>GT2Floor</key>
|
||||
<integer>12</integer>
|
||||
<key>GT3Floor</key>
|
||||
<integer>15</integer>
|
||||
<key>ID</key>
|
||||
<integer>2</integer>
|
||||
<key>IOBusynessSamplingInterval</key>
|
||||
<integer>1</integer>
|
||||
<key>NumOfRingTableOverride</key>
|
||||
<integer>23</integer>
|
||||
<key>NumOfRingTables</key>
|
||||
<integer>3</integer>
|
||||
<key>NumOfThresholdsForRingTables</key>
|
||||
<integer>2</integer>
|
||||
<key>RingOverrideTable0</key>
|
||||
<array>
|
||||
<integer>8</integer>
|
||||
<integer>8</integer>
|
||||
<integer>8</integer>
|
||||
<integer>8</integer>
|
||||
<integer>8</integer>
|
||||
<integer>9</integer>
|
||||
<integer>10</integer>
|
||||
<integer>10</integer>
|
||||
<integer>10</integer>
|
||||
<integer>10</integer>
|
||||
<integer>10</integer>
|
||||
<integer>10</integer>
|
||||
<integer>10</integer>
|
||||
<integer>10</integer>
|
||||
<integer>10</integer>
|
||||
<integer>10</integer>
|
||||
<integer>10</integer>
|
||||
<integer>10</integer>
|
||||
<integer>10</integer>
|
||||
<integer>10</integer>
|
||||
<integer>10</integer>
|
||||
<integer>10</integer>
|
||||
<integer>10</integer>
|
||||
</array>
|
||||
<key>RingOverrideTable1</key>
|
||||
<array>
|
||||
<integer>8</integer>
|
||||
<integer>8</integer>
|
||||
<integer>8</integer>
|
||||
<integer>9</integer>
|
||||
<integer>10</integer>
|
||||
<integer>11</integer>
|
||||
<integer>13</integer>
|
||||
<integer>14</integer>
|
||||
<integer>15</integer>
|
||||
<integer>16</integer>
|
||||
<integer>16</integer>
|
||||
<integer>16</integer>
|
||||
<integer>16</integer>
|
||||
<integer>16</integer>
|
||||
<integer>16</integer>
|
||||
<integer>16</integer>
|
||||
<integer>16</integer>
|
||||
<integer>16</integer>
|
||||
<integer>16</integer>
|
||||
<integer>29</integer>
|
||||
<integer>30</integer>
|
||||
<integer>31</integer>
|
||||
<integer>33</integer>
|
||||
</array>
|
||||
<key>RingOverrideTable2</key>
|
||||
<array>
|
||||
<integer>8</integer>
|
||||
<integer>8</integer>
|
||||
<integer>8</integer>
|
||||
<integer>9</integer>
|
||||
<integer>10</integer>
|
||||
<integer>11</integer>
|
||||
<integer>13</integer>
|
||||
<integer>14</integer>
|
||||
<integer>15</integer>
|
||||
<integer>16</integer>
|
||||
<integer>18</integer>
|
||||
<integer>19</integer>
|
||||
<integer>20</integer>
|
||||
<integer>21</integer>
|
||||
<integer>23</integer>
|
||||
<integer>24</integer>
|
||||
<integer>25</integer>
|
||||
<integer>26</integer>
|
||||
<integer>28</integer>
|
||||
<integer>29</integer>
|
||||
<integer>30</integer>
|
||||
<integer>31</integer>
|
||||
<integer>33</integer>
|
||||
</array>
|
||||
<key>StartingPstateForRingTableOverride</key>
|
||||
<integer>11</integer>
|
||||
<key>ThresholdsForRingOverrideTable0</key>
|
||||
<array>
|
||||
<integer>0</integer>
|
||||
<integer>10</integer>
|
||||
</array>
|
||||
<key>ThresholdsForRingOverrideTable1</key>
|
||||
<array>
|
||||
<integer>5</integer>
|
||||
<integer>15</integer>
|
||||
</array>
|
||||
<key>ThresholdsForRingOverrideTable2</key>
|
||||
<array>
|
||||
<integer>10</integer>
|
||||
<integer>100</integer>
|
||||
</array>
|
||||
<key>UpStep</key>
|
||||
<integer>1</integer>
|
||||
</dict>
|
||||
<key>SliceControl</key>
|
||||
<integer>1</integer>
|
||||
<key>control-id</key>
|
||||
<integer>16</integer>
|
||||
</dict>
|
||||
</dict>
|
||||
<key>MacPro4,1</key>
|
||||
<dict>
|
||||
<key>Vendor10deDevice05e2</key>
|
||||
@@ -4249,6 +4903,175 @@
|
||||
<integer>16</integer>
|
||||
</dict>
|
||||
</dict>
|
||||
<key>iMac14,4</key>
|
||||
<dict>
|
||||
<key>IGPU</key>
|
||||
<dict>
|
||||
<key>Heuristic</key>
|
||||
<dict>
|
||||
<key>BusyDownThresholdPercent</key>
|
||||
<integer>50</integer>
|
||||
<key>BusyUpThresholdPercent</key>
|
||||
<integer>70</integer>
|
||||
<key>DownStep</key>
|
||||
<integer>1</integer>
|
||||
<key>EnableOverride</key>
|
||||
<integer>1</integer>
|
||||
<key>EnableRingTableOverride</key>
|
||||
<integer>1</integer>
|
||||
<key>EvaluateDownInterval</key>
|
||||
<integer>31250</integer>
|
||||
<key>EvaluateUpInterval</key>
|
||||
<integer>31250</integer>
|
||||
<key>GT2Floor</key>
|
||||
<integer>12</integer>
|
||||
<key>GT3Floor</key>
|
||||
<integer>15</integer>
|
||||
<key>ID</key>
|
||||
<integer>2</integer>
|
||||
<key>IOBusynessSamplingInterval</key>
|
||||
<integer>1</integer>
|
||||
<key>NumOfRingTableOverride</key>
|
||||
<integer>23</integer>
|
||||
<key>NumOfRingTables</key>
|
||||
<integer>3</integer>
|
||||
<key>NumOfThresholdsForRingTables</key>
|
||||
<integer>2</integer>
|
||||
<key>RingOverrideTable0</key>
|
||||
<array>
|
||||
<integer>8</integer>
|
||||
<integer>8</integer>
|
||||
<integer>8</integer>
|
||||
<integer>8</integer>
|
||||
<integer>8</integer>
|
||||
<integer>9</integer>
|
||||
<integer>10</integer>
|
||||
<integer>10</integer>
|
||||
<integer>10</integer>
|
||||
<integer>10</integer>
|
||||
<integer>10</integer>
|
||||
<integer>10</integer>
|
||||
<integer>10</integer>
|
||||
<integer>10</integer>
|
||||
<integer>10</integer>
|
||||
<integer>10</integer>
|
||||
<integer>10</integer>
|
||||
<integer>10</integer>
|
||||
<integer>10</integer>
|
||||
<integer>10</integer>
|
||||
<integer>10</integer>
|
||||
<integer>10</integer>
|
||||
<integer>10</integer>
|
||||
</array>
|
||||
<key>RingOverrideTable1</key>
|
||||
<array>
|
||||
<integer>8</integer>
|
||||
<integer>8</integer>
|
||||
<integer>8</integer>
|
||||
<integer>9</integer>
|
||||
<integer>10</integer>
|
||||
<integer>11</integer>
|
||||
<integer>13</integer>
|
||||
<integer>14</integer>
|
||||
<integer>15</integer>
|
||||
<integer>16</integer>
|
||||
<integer>16</integer>
|
||||
<integer>16</integer>
|
||||
<integer>16</integer>
|
||||
<integer>16</integer>
|
||||
<integer>16</integer>
|
||||
<integer>16</integer>
|
||||
<integer>16</integer>
|
||||
<integer>16</integer>
|
||||
<integer>16</integer>
|
||||
<integer>16</integer>
|
||||
<integer>16</integer>
|
||||
<integer>16</integer>
|
||||
<integer>16</integer>
|
||||
</array>
|
||||
<key>RingOverrideTable2</key>
|
||||
<array>
|
||||
<integer>8</integer>
|
||||
<integer>8</integer>
|
||||
<integer>8</integer>
|
||||
<integer>9</integer>
|
||||
<integer>10</integer>
|
||||
<integer>11</integer>
|
||||
<integer>13</integer>
|
||||
<integer>14</integer>
|
||||
<integer>15</integer>
|
||||
<integer>16</integer>
|
||||
<integer>18</integer>
|
||||
<integer>19</integer>
|
||||
<integer>20</integer>
|
||||
<integer>21</integer>
|
||||
<integer>23</integer>
|
||||
<integer>24</integer>
|
||||
<integer>25</integer>
|
||||
<integer>26</integer>
|
||||
<integer>28</integer>
|
||||
<integer>29</integer>
|
||||
<integer>30</integer>
|
||||
<integer>31</integer>
|
||||
<integer>33</integer>
|
||||
</array>
|
||||
<key>StartingPstateForRingTableOverride</key>
|
||||
<integer>11</integer>
|
||||
<key>ThresholdsForRingOverrideTable0</key>
|
||||
<array>
|
||||
<integer>0</integer>
|
||||
<integer>10</integer>
|
||||
</array>
|
||||
<key>ThresholdsForRingOverrideTable1</key>
|
||||
<array>
|
||||
<integer>5</integer>
|
||||
<integer>15</integer>
|
||||
</array>
|
||||
<key>ThresholdsForRingOverrideTable2</key>
|
||||
<array>
|
||||
<integer>10</integer>
|
||||
<integer>100</integer>
|
||||
</array>
|
||||
<key>UpStep</key>
|
||||
<integer>1</integer>
|
||||
</dict>
|
||||
<key>SliceControl</key>
|
||||
<integer>1</integer>
|
||||
<key>control-id</key>
|
||||
<integer>16</integer>
|
||||
</dict>
|
||||
</dict>
|
||||
<key>iMac15,1</key>
|
||||
<dict>
|
||||
<key>GFX0</key>
|
||||
<dict>
|
||||
<key>AGDCEnabled</key>
|
||||
<integer>1</integer>
|
||||
<key>Heuristic</key>
|
||||
<dict>
|
||||
<key>ID</key>
|
||||
<integer>-1</integer>
|
||||
</dict>
|
||||
<key>control-id</key>
|
||||
<integer>17</integer>
|
||||
<key>max-power-state</key>
|
||||
<integer>15</integer>
|
||||
<key>min-power-state</key>
|
||||
<integer>0</integer>
|
||||
</dict>
|
||||
<key>IGPU</key>
|
||||
<dict>
|
||||
<key>Heuristic</key>
|
||||
<dict>
|
||||
<key>EnableOverride</key>
|
||||
<integer>0</integer>
|
||||
<key>ID</key>
|
||||
<integer>2</integer>
|
||||
</dict>
|
||||
<key>control-id</key>
|
||||
<integer>16</integer>
|
||||
</dict>
|
||||
</dict>
|
||||
</dict>
|
||||
</dict>
|
||||
</dict>
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user