Compare commits
56 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
a604325c5d | ||
|
|
c74706127d | ||
|
|
bea1e92a3b | ||
|
|
e0af3206cf | ||
|
|
7fc5de8e27 | ||
|
|
504fb3a617 | ||
|
|
b3ac3a6843 | ||
|
|
e25b23f7a3 | ||
|
|
cdcbf30f63 | ||
|
|
c66f3cd0ca | ||
|
|
df958a2b1c | ||
|
|
f7f890d37e | ||
|
|
1027e37a03 | ||
|
|
42892e503f | ||
|
|
ca9a0eba34 | ||
|
|
12007041ab | ||
|
|
05fd9489ae | ||
|
|
5b6da1f4e7 | ||
|
|
0a8e599877 | ||
|
|
67c88acedf | ||
|
|
3b4bb78fa2 | ||
|
|
c03b8d2231 | ||
|
|
32985b7fdd | ||
|
|
d1323a4268 | ||
|
|
16f7e24231 | ||
|
|
c822e1f2c5 | ||
|
|
e064d9a37a | ||
|
|
ddac821dfb | ||
|
|
b7a1fa302e | ||
|
|
19027fbac7 | ||
|
|
b930544128 | ||
|
|
a15261073b | ||
|
|
cd1729f74d | ||
|
|
af3abe6aa1 | ||
|
|
2ca02f5802 | ||
|
|
3e742ffaf8 | ||
|
|
79390c897d | ||
|
|
3ffe8c5142 | ||
|
|
18f9e05792 | ||
|
|
9f96fa43ec | ||
|
|
f0f9f0b56d | ||
|
|
33eef9b87f | ||
|
|
f042ddfe75 | ||
|
|
53cb55e375 | ||
|
|
d3aea7510f | ||
|
|
a8683e4e27 | ||
|
|
7bb4aea2c0 | ||
|
|
30375b869b | ||
|
|
5c207e0a2b | ||
|
|
92324ede72 | ||
|
|
158dac6ab4 | ||
|
|
dfc4a7b2fc | ||
|
|
9408cd3ea5 | ||
|
|
8f5ac32bb5 | ||
|
|
2d98a827ec | ||
|
|
1dc76600e7 |
13
.github/ISSUE_TEMPLATE/bug_report.yml
vendored
@@ -122,6 +122,17 @@ body:
|
||||
- 'false'
|
||||
validations:
|
||||
required: true
|
||||
- type: dropdown
|
||||
id: used-forums
|
||||
attributes:
|
||||
label: Have you already verified this is a patcher bug and not a macOS bug on our discord servers?
|
||||
description: If no, please do not use issues for this. We'd appreciate it if users check discuss with others before filing. Issues are for valid patcher issues only, not for personal troubleshooting scessions.
|
||||
multiple: true
|
||||
options:
|
||||
- 'true'
|
||||
- 'false'
|
||||
validations:
|
||||
required: true
|
||||
- type: dropdown
|
||||
id: 3rd-party-application
|
||||
attributes:
|
||||
@@ -172,4 +183,4 @@ body:
|
||||
- type: textarea
|
||||
id: extra-info
|
||||
attributes:
|
||||
label: Any Additional Information
|
||||
label: What steps have you taken to troubleshoot this?
|
||||
|
||||
6
.github/workflows/build-app-offline.yml
vendored
@@ -23,18 +23,18 @@ jobs:
|
||||
- run: 'codesign -s "Developer ID Application: Mykola Grymalyuk (S74BDJXQMD)" -v --force --deep --timestamp --entitlements ./payloads/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
|
||||
- run: mv ./OpenCore-Patcher-TUI.app.zip ./OpenCore-Patcher-TUI-Offline.app.zip
|
||||
- name: Upload App to Artifacts
|
||||
uses: actions/upload-artifact@v2
|
||||
with:
|
||||
name: OpenCore-Patcher-TUI.app (Offline)
|
||||
path: OpenCore-Patcher-TUI.app.zip
|
||||
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 }}
|
||||
asset_name: OpenCore-Patcher-TUI.app (Offline)
|
||||
file: OpenCore-Patcher-TUI.app.zip
|
||||
file: OpenCore-Patcher-TUI-Offline.app.zip
|
||||
tag: ${{ github.ref }}
|
||||
file_glob: true
|
||||
|
||||
@@ -22,19 +22,19 @@ jobs:
|
||||
- run: 'codesign -s "Developer ID Application: Mykola Grymalyuk (S74BDJXQMD)" -v --force --deep --timestamp --entitlements ./payloads/entitlements.plist -o runtime "dist/OpenCore-Patcher.app"'
|
||||
- run: cd dist; zip -r ../OpenCore-Patcher-wxPython.app.zip OpenCore-Patcher.app
|
||||
- run: ./../sign-wxpython.sh
|
||||
- run: mv ./OpenCore-Patcher-wxPython.app.zip ./OpenCore-Patcher-GUI-Offline.app.zip
|
||||
- name: Upload App to Artifacts
|
||||
uses: actions/upload-artifact@v2
|
||||
with:
|
||||
name: OpenCore-Patcher.app (GUI Offline)
|
||||
path: OpenCore-Patcher-wxPython.app.zip
|
||||
path: OpenCore-Patcher-GUI-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-wxPython.app.zip
|
||||
file: OpenCore-Patcher-GUI-Offline.app.zip
|
||||
tag: ${{ github.ref }}
|
||||
file_glob: true
|
||||
asset_name: OpenCore-Patcher.app (GUI Offline)
|
||||
- name: Validate OpenCore
|
||||
run: ./dist/OpenCore-Patcher.app/Contents/MacOS/OpenCore-Patcher --validate
|
||||
8
.github/workflows/build-app-wxpython.yml
vendored
@@ -21,17 +21,17 @@ jobs:
|
||||
- run: 'codesign -s "Developer ID Application: Mykola Grymalyuk (S74BDJXQMD)" -v --force --deep --timestamp --entitlements ./payloads/entitlements.plist -o runtime "dist/OpenCore-Patcher.app"'
|
||||
- run: cd dist; zip -r ../OpenCore-Patcher-wxPython.app.zip OpenCore-Patcher.app
|
||||
- run: ./../sign-wxpython.sh
|
||||
- run: mv ./OpenCore-Patcher-wxPython.app.zip ./OpenCore-Patcher-GUI.app.zip
|
||||
- name: Upload App to Artifacts
|
||||
uses: actions/upload-artifact@v2
|
||||
with:
|
||||
name: OpenCore-Patcher.app (GUI)
|
||||
path: OpenCore-Patcher-wxPython.app.zip
|
||||
path: OpenCore-Patcher-GUI.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-wxPython.app.zip
|
||||
file: OpenCore-Patcher-GUI.app.zip
|
||||
tag: ${{ github.ref }}
|
||||
file_glob: true
|
||||
asset_name: OpenCore-Patcher.app (GUI)
|
||||
file_glob: true
|
||||
1
.gitignore
vendored
@@ -22,3 +22,4 @@ __pycache__/
|
||||
/docs/node_modules/
|
||||
/payloads/List.txt
|
||||
/payloads/Installer.sh
|
||||
/payloads/Info.plist
|
||||
|
||||
34
CHANGELOG.md
@@ -1,11 +1,43 @@
|
||||
# OpenCore Legacy Patcher changelog
|
||||
|
||||
## 0.4.2
|
||||
- Resolve app crashing on some 3rd party SAS/SATA controllers
|
||||
- Add Beta identifier to macOS Installer menu
|
||||
- Resolve showing unsupported installers in Creation menu
|
||||
- Resolve Macmini4,1 HDEF pathing
|
||||
- Increment Binaries:
|
||||
- FeatureUnlock 1.0.6 - rolling (d296645)
|
||||
- PatcherSupportPkg 0.3.1
|
||||
- Resolve SIP and SecureBootModel not disabling by default on some non-Metal Mac Pros
|
||||
- Add Content Caching support configurability
|
||||
- Limit SurPlus patchset to 20.4.0 - 21.1.0
|
||||
- No longer required for macOS 12.1 and newer
|
||||
- Add Universal Control support for Monterey native Macs
|
||||
- Applicable for Haswell/Broadwell
|
||||
- Requires macOS 12.3 or newer
|
||||
- Fix Power Management Support in macOS 12.3 Beta 1
|
||||
- Applicable for Sandy Bridge and older
|
||||
- Enforces ACPI_SMC_PlatformPlugin matching
|
||||
- Add NVMe Enhanced Power Management configuration
|
||||
- Disables NVMe adjustments on Skylake and newer Macs by default
|
||||
- Resolve Catalyst Scrolling on non-Metal GPUs
|
||||
- Add new TUI icon to differentiate between GUI
|
||||
- Resolve Color Strobing on AMD TeraScale 2 GPUs
|
||||
- Drops reliance on ResXtreme and SwitchResX
|
||||
|
||||
## 0.4.1
|
||||
- Add XHCI Boot Support to pre-UEFI 2.0 Macs
|
||||
- Applicable to pre-Ivy Macs with upgraded USB 3.0 controllers, allows USB 3.0 boot
|
||||
- Credit to Jazzzny for testing, [DearthnVader for original research](https://forums.macrumors.com/threads/bootable-xhci-pci-e-for-the-3-1-experimental.2217479/)
|
||||
- Drivers stripped from MacPro6,1 firmware
|
||||
- Resolve OCLP-Helper dyld crash
|
||||
|
||||
## 0.4.0
|
||||
- Resolves Install USB Creation using incorrect installer
|
||||
- Resolves `installer` failing to extract InstallAssistant in older OSes
|
||||
- Resolves certain Samsung NVMe drives appearing as external on Mac Pros
|
||||
- Add FeatureUnlock configurability
|
||||
- Add NVRAM WriteFlash configurability for degarded/fragile systems
|
||||
- Add NVRAM WriteFlash configurability for degraded/fragile systems
|
||||
- Add `ThirdPartyDrives` quirk configurability
|
||||
- Resolve Skylight dylib injection issue
|
||||
- Increment Binaries:
|
||||
|
||||
@@ -46,10 +46,11 @@ app = BUNDLE(exe,
|
||||
bundle_identifier="com.dortania.opencore-legacy-patcher-wxpython",
|
||||
info_plist={
|
||||
"CFBundleShortVersionString": constants.Constants().patcher_version,
|
||||
"NSHumanReadableCopyright": "Copyright 2020-2022 Dortania",
|
||||
"NSHumanReadableCopyright": constants.Constants().copyright_date,
|
||||
"LSMinimumSystemVersion": "10.10.0",
|
||||
"NSRequiresAquaSystemAppearance": False,
|
||||
"NSHighResolutionCapable": True,
|
||||
"Build Date": time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()),
|
||||
"BuildMachineOSBuild": subprocess.run("sw_vers -buildVersion".split(), stdout=subprocess.PIPE, stderr=subprocess.STDOUT).stdout.decode().strip(),
|
||||
"NSPrincipalClass": "NSApplication",
|
||||
})
|
||||
|
||||
@@ -35,10 +35,10 @@ exe = EXE(pyz,
|
||||
console=True )
|
||||
app = BUNDLE(exe,
|
||||
name='OpenCore-Patcher.app',
|
||||
icon="payloads/OC-Patcher.icns",
|
||||
bundle_identifier=None,
|
||||
icon="payloads/OC-Patcher-TUI.icns",
|
||||
bundle_identifier="com.dortania.opencore-legacy-patcher-tui",
|
||||
info_plist={
|
||||
"CFBundleShortVersionString": constants.Constants().patcher_version,
|
||||
"CFBundleExecutable": "MacOS/Launcher",
|
||||
"NSHumanReadableCopyright": "Copyright 2020-2022 Dortania"
|
||||
"NSHumanReadableCopyright": constants.Constants().copyright_date,
|
||||
})
|
||||
@@ -28,9 +28,9 @@ To run the project from source, see here: [Build and run from source](./SOURCE.m
|
||||
|
||||
## Support
|
||||
|
||||
To get aid with the patcher, we recommend joining the [OpenCore Patcher Paradise Discord Server](https://discord.gg/rqdPgH8xSN). We're actively there and is the quickest way to receive help. For bigger issues such as patcher crashing on build and such, we recommend opening an issue right here on GitHub
|
||||
To get aid with the patcher, we recommend joining the [OpenCore Patcher Paradise Discord Server](https://discord.gg/rqdPgH8xSN). We're actively there and is the quickest way to receive help.
|
||||
|
||||
* Please review [How to debug with OpenCore](https://dortania.github.io/OpenCore-Legacy-Patcher/DEBUG.html) before opening issues
|
||||
* Please review our docs on [how to debug with OpenCore](https://dortania.github.io/OpenCore-Legacy-Patcher/DEBUG.html) to gather important information to help others with troubleshooting.
|
||||
|
||||
## Credits
|
||||
|
||||
|
||||
@@ -48,6 +48,59 @@ class MacBookPro:
|
||||
opencore_version=None,
|
||||
)
|
||||
|
||||
MacBookPro111_Stock = device_probe.Computer(
|
||||
real_model='MacBookPro11,1',
|
||||
real_board_id='Mac-189A3D4F975D5FFC',
|
||||
reported_model='MacBookPro11,1',
|
||||
reported_board_id='Mac-189A3D4F975D5FFC',
|
||||
gpus=[
|
||||
device_probe.Intel(vendor_id=32902, device_id=2606, class_code=196608, name='IGPU', model='Intel Iris', acpi_path='IOACPIPlane:/_SB/PCI0@0/IGPU@20000', pci_path='PciRoot(0x0)/Pci(0x2,0x0)')
|
||||
],
|
||||
igpu=device_probe.Intel(vendor_id=32902, device_id=2606, class_code=196608, name='IGPU', model='Intel Iris', acpi_path='IOACPIPlane:/_SB/PCI0@0/IGPU@20000', pci_path='PciRoot(0x0)/Pci(0x2,0x0)'),
|
||||
dgpu=None,
|
||||
storage=[
|
||||
device_probe.SATAController(vendor_id=6987, device_id=37251, class_code=67073, name='SSD0', model=None, acpi_path='IOACPIPlane:/_SB/PCI0@0/RP06@1c0005/SSD0@0', pci_path='PciRoot(0x0)/Pci(0x1c,0x5)/Pci(0x0,0x0)')
|
||||
],
|
||||
usb_controllers=[
|
||||
device_probe.XHCIController(vendor_id=32902, device_id=39985, class_code=787248, name='XHC1', model=None, acpi_path='IOACPIPlane:/_SB/PCI0@0/XHC1@140000', pci_path='PciRoot(0x0)/Pci(0x14,0x0)')
|
||||
],
|
||||
wifi=device_probe.Broadcom(vendor_id=5348, device_id=17312, class_code=163840, name='ARPT', model=None, acpi_path='IOACPIPlane:/_SB/PCI0@0/RP03@1c0002/ARPT@0', pci_path='PciRoot(0x0)/Pci(0x1c,0x2)/Pci(0x0,0x0)'),
|
||||
cpu=device_probe.CPU(
|
||||
name='Intel(R) Core(TM) i5-4258U CPU @ 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', 'PCLMULQDQ', 'DTES64', 'MON', 'DSCPL', 'VMX', '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='0.4.2',
|
||||
opencore_version='DBG-077-2022-01-10',
|
||||
bluetooth_chipset='BRCM20702 Hub',
|
||||
third_party_sata_ssd=False
|
||||
)
|
||||
|
||||
MacBookPro141_SSD_Upgrade = device_probe.Computer(
|
||||
real_model='MacBookPro14,1',
|
||||
real_board_id='Mac-B4831CEBD52A0C4C',
|
||||
reported_model='MacBookPro14,1',
|
||||
reported_board_id='Mac-B4831CEBD52A0C4C',
|
||||
gpus=[
|
||||
device_probe.Intel(vendor_id=32902, device_id=22822, class_code=196608, name='IGPU', model='Intel Iris Plus Graphics 640', acpi_path='IOACPIPlane:/_SB/PCI0@0/IGPU@20000', pci_path='PciRoot(0x0)/Pci(0x2,0x0)')
|
||||
],
|
||||
igpu=device_probe.Intel(vendor_id=32902, device_id=22822, class_code=196608, name='IGPU', model='Intel Iris Plus Graphics 640', acpi_path='IOACPIPlane:/_SB/PCI0@0/IGPU@20000', pci_path='PciRoot(0x0)/Pci(0x2,0x0)'),
|
||||
dgpu=None,
|
||||
storage=[
|
||||
device_probe.NVMeController(vendor_id=6535, device_id=20499, class_code=67586, name='SSD0', model=None, acpi_path='IOACPIPlane:/_SB/PCI0@0/RP01@1c0000/SSD0@0', pci_path='PciRoot(0x0)/Pci(0x1c,0x0)/Pci(0x0,0x0)', aspm=2)
|
||||
],
|
||||
usb_controllers=[
|
||||
device_probe.XHCIController(vendor_id=32902, device_id=40239, class_code=787248, name='XHC1', model=None, acpi_path='IOACPIPlane:/_SB/PCI0@0/XHC1@140000', pci_path='PciRoot(0x0)/Pci(0x14,0x0)'),
|
||||
device_probe.XHCIController(vendor_id=32902, device_id=5588, class_code=787248, name='XHC2', model=None, acpi_path='IOACPIPlane:/_SB/PCI0@0/RP05@1c0004/UPSB@0/DSB2@20000/XHC2@0', pci_path='PciRoot(0x0)/Pci(0x1c,0x4)/Pci(0x0,0x0)/Pci(0x2,0x0)/Pci(0x0,0x0)')
|
||||
],
|
||||
wifi=device_probe.Broadcom(vendor_id=5348, device_id=17315, class_code=163840, name='ARPT', model=None, acpi_path='IOACPIPlane:/_SB/PCI0@0/RP09@1d0000/ARPT@0', pci_path='PciRoot(0x0)/Pci(0x1d,0x0)/Pci(0x0,0x0)'),
|
||||
cpu=device_probe.CPU(
|
||||
name='Intel(R) Core(TM) i5-7360U CPU @ 2.30GHz',
|
||||
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='0.4.1',
|
||||
opencore_version=None,
|
||||
bluetooth_chipset=None,
|
||||
third_party_sata_ssd=False)
|
||||
|
||||
MacBookPro171_Stock = device_probe.Computer(
|
||||
# Run under Rosetta
|
||||
real_model="MacBookPro17,1",
|
||||
@@ -179,10 +232,39 @@ class iMac:
|
||||
opencore_version=None,
|
||||
)
|
||||
|
||||
iMac122_Upgraded_Nvidia = 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=229376, name='IGPU', model=None, acpi_path='IOACPIPlane:/_SB/PCI0@0/IGPU@20000', pci_path='PciRoot(0x0)/Pci(0x2,0x0)'),
|
||||
device_probe.NVIDIA(vendor_id=4318, device_id=4092, class_code=196608, name='GFX0', model='Quadro K1000M by Nick[D]vB', acpi_path='IOACPIPlane:/_SB/PCI0@0/P0P2@10000/GFX0@0', pci_path='PciRoot(0x0)/Pci(0x1,0x0)/Pci(0x0,0x0)')],
|
||||
igpu=device_probe.Intel(vendor_id=32902, device_id=258, class_code=229376, name='IGPU', model=None, acpi_path='IOACPIPlane:/_SB/PCI0@0/IGPU@20000', pci_path='PciRoot(0x0)/Pci(0x2,0x0)'),
|
||||
dgpu=device_probe.NVIDIA(vendor_id=4318, device_id=4092, class_code=196608, name='GFX0', model='Quadro K1000M by Nick[D]vB', acpi_path='IOACPIPlane:/_SB/PCI0@0/P0P2@10000/GFX0@0', 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, acpi_path='IOACPIPlane:/_SB/PCI0@0/SATA@1f0002', pci_path='PciRoot(0x0)/Pci(0x1f,0x2)')
|
||||
],
|
||||
usb_controllers=[
|
||||
device_probe.EHCIController(vendor_id=32902, device_id=7213, class_code=787232, name='EHC2', model=None, acpi_path='IOACPIPlane:/_SB/PCI0@0/EHC2@1a0007', pci_path='PciRoot(0x0)/Pci(0x1a,0x7)'),
|
||||
device_probe.EHCIController(vendor_id=32902, device_id=7206, class_code=787232, name='EHC1', model=None, acpi_path='IOACPIPlane:/_SB/PCI0@0/EHC1@1d0007', pci_path='PciRoot(0x0)/Pci(0x1d,0x7)')
|
||||
],
|
||||
wifi=device_probe.Broadcom(vendor_id=5348, device_id=17201, class_code=163840, name='ARPT', model=None, acpi_path='IOACPIPlane:/_SB/PCI0@0/RP02@1c0001/ARPT@0', 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', 'x2APIC', 'POPCNT', 'AES', 'PCID', 'XSAVE', 'OSXSAVE', 'TSCTMR', 'AVX1.0']
|
||||
),
|
||||
oclp_version='0.3.3',
|
||||
opencore_version=None,
|
||||
bluetooth_chipset='BRCM2046 Hub',
|
||||
third_party_sata_ssd=True
|
||||
)
|
||||
|
||||
iMac151_Stock = device_probe.Computer(
|
||||
real_model='iMac15,1',
|
||||
real_board_id='Mac-42FD25EABCABB274',
|
||||
reported_model='iMac15,1', reported_board_id='Mac-42FD25EABCABB274',
|
||||
reported_model='iMac15,1',
|
||||
reported_board_id='Mac-42FD25EABCABB274',
|
||||
gpus=[
|
||||
device_probe.Intel(vendor_id=32902, device_id=1042, class_code=196608, name='IGPU', model='Intel Iris Pro', acpi_path=None, pci_path='PciRoot(0x0)/Pci(0x2,0x0)'),
|
||||
device_probe.AMD(vendor_id=4098, device_id=26640, class_code=196608, name='GFX0', model='AMD Radeon R9 M290X', acpi_path=None, pci_path='PciRoot(0x0)/Pci(0x1,0x0)/Pci(0x0,0x0)')
|
||||
@@ -204,6 +286,33 @@ class iMac:
|
||||
third_party_sata_ssd=False
|
||||
)
|
||||
|
||||
iMac201_Stock = device_probe.Computer(
|
||||
real_model='iMac20,1',
|
||||
real_board_id='Mac-CFF7D910A743CAAF',
|
||||
reported_model='iMac20,1',
|
||||
reported_board_id='Mac-CFF7D910A743CAAF',
|
||||
gpus=[
|
||||
device_probe.Intel(vendor_id=32902, device_id=39880, class_code=196608, name='IGPU', model='Intel HD Graphics CFL', acpi_path='IOACPIPlane:/_SB/PCI0@0/IGPU@20000', pci_path='PciRoot(0x0)/Pci(0x2,0x0)'),
|
||||
device_probe.AMD(vendor_id=4098, device_id=29504, class_code=196608, name='GFX0', model='AMD Radeon Pro 5300', acpi_path='IOACPIPlane:/_SB/PCI0@0/PEG0@10000/EGP0@0/EGP1@0/GFX0@0', pci_path='PciRoot(0x0)/Pci(0x1,0x0)/Pci(0x0,0x0)/Pci(0x0,0x0)/Pci(0x0,0x0)')
|
||||
],
|
||||
igpu=device_probe.Intel(vendor_id=32902, device_id=39880, class_code=196608, name='IGPU', model='Intel HD Graphics CFL', acpi_path='IOACPIPlane:/_SB/PCI0@0/IGPU@20000', pci_path='PciRoot(0x0)/Pci(0x2,0x0)'),
|
||||
dgpu=device_probe.AMD(vendor_id=4098, device_id=29504, class_code=196608, name='GFX0', model='AMD Radeon Pro 5300', acpi_path='IOACPIPlane:/_SB/PCI0@0/PEG0@10000/EGP0@0/EGP1@0/GFX0@0', pci_path='PciRoot(0x0)/Pci(0x1,0x0)/Pci(0x0,0x0)/Pci(0x0,0x0)/Pci(0x0,0x0)'),
|
||||
storage=[],
|
||||
usb_controllers=[
|
||||
device_probe.XHCIController(vendor_id=32902, device_id=1773, class_code=787248, name='XHC1', model=None, acpi_path='IOACPIPlane:/_SB/PCI0@0/XHC1@140000', pci_path='PciRoot(0x0)/Pci(0x14,0x0)'),
|
||||
device_probe.XHCIController(vendor_id=32902, device_id=5612, class_code=787248, name='XHC2', model=None, acpi_path='IOACPIPlane:/_SB/PCI0@0/RP05@1c0004/UPSB@0/DSB2@20000/XHC2@0', pci_path='PciRoot(0x0)/Pci(0x1c,0x4)/Pci(0x0,0x0)/Pci(0x2,0x0)/Pci(0x0,0x0)')
|
||||
],
|
||||
wifi=device_probe.Broadcom(vendor_id=5348, device_id=17508, class_code=163840, name='ARPT', model=None, acpi_path='IOACPIPlane:/_SB/PCI0@0/RP01@1c0000/ARPT@0', pci_path='PciRoot(0x0)/Pci(0x1c,0x0)/Pci(0x0,0x0)'),
|
||||
cpu=device_probe.CPU(
|
||||
name='Intel(R) Core(TM) i5-10500 CPU @ 3.10GHz',
|
||||
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,
|
||||
bluetooth_chipset=None,
|
||||
third_party_sata_ssd=False
|
||||
)
|
||||
|
||||
class MacPro:
|
||||
|
||||
MacPro31_Stock = device_probe.Computer(
|
||||
|
||||
@@ -1546,6 +1546,7 @@ smbios_dictionary = {
|
||||
"Wireless Model": device_probe.Broadcom.Chipsets.AirPortBrcm4360,
|
||||
"Bluetooth Model": bluetooth_data.bluetooth_data.BRCM2070,
|
||||
"Ethernet Chipset": "Broadcom",
|
||||
"nForce Chipset": True,
|
||||
"Stock GPUs": [
|
||||
device_probe.NVIDIA.Archs.Tesla
|
||||
],
|
||||
@@ -2807,6 +2808,7 @@ smbios_dictionary = {
|
||||
# VMware Virtual Machine
|
||||
"Board ID": "440BX Desktop Reference Platform",
|
||||
"FirmwareFeatures": None,
|
||||
"SecureBootModel": "x86legacy",
|
||||
"CPU Generation": cpu_data.cpu_data.penryn.value,
|
||||
"Max OS Supported": os_data.os_data.max_os,
|
||||
"Wireless Model": None,
|
||||
@@ -2818,6 +2820,7 @@ smbios_dictionary = {
|
||||
# Parallels Virtual Machine
|
||||
"Board ID": "Parallels Virtual Platform",
|
||||
"FirmwareFeatures": None,
|
||||
"SecureBootModel": "x86legacy",
|
||||
"CPU Generation": cpu_data.cpu_data.penryn.value,
|
||||
"Max OS Supported": os_data.os_data.max_os,
|
||||
"Wireless Model": None,
|
||||
@@ -2849,4 +2852,126 @@ smbios_dictionary = {
|
||||
"Stock GPUs": [],
|
||||
"Stock Storage": [],
|
||||
},
|
||||
}
|
||||
"APPL_GPU_Test_Board": {
|
||||
# AppleInternal GPU Test Board
|
||||
# System is used for testing Intel iGPUs
|
||||
# Model has been configured with the following:
|
||||
# - Broadwell iGPU (HD Graphics 5300)
|
||||
# - Skylake iGPU (HD Graphics 5xx)
|
||||
# - Kaby Lake iGPU (HD Graphics 6xx)
|
||||
# - Ice Lake iGPU (G4/G7)
|
||||
"Board ID": "Mac-50619A408DB004DA",
|
||||
"FirmwareFeatures": None,
|
||||
"SecureBootModel": None,
|
||||
"CPU Generation": None,
|
||||
"Max OS Supported": os_data.os_data.max_os,
|
||||
"Wireless Model": None,
|
||||
"Bluetooth Model": bluetooth_data.bluetooth_data.NonApplicable,
|
||||
"Stock GPUs": [],
|
||||
"Stock Storage": [],
|
||||
},
|
||||
"APPL_UNKNOWN_MODEL_1": {
|
||||
# Laptop model
|
||||
# No mentions in SLE outside X86PlatformPlugin
|
||||
"Board ID": "Mac-112B0A653D3AAB9C",
|
||||
"FirmwareFeatures": None,
|
||||
"SecureBootModel": None,
|
||||
"CPU Generation": None,
|
||||
"Max OS Supported": os_data.os_data.max_os,
|
||||
"Wireless Model": None,
|
||||
"Bluetooth Model": bluetooth_data.bluetooth_data.NonApplicable,
|
||||
"Stock GPUs": [],
|
||||
"Stock Storage": [],
|
||||
},
|
||||
"APPL_UNKNOWN_MODEL_2": {
|
||||
# Laptop model
|
||||
# Only mentioned in ApplePlatformEnabler and X86PlatformPlugin
|
||||
"Board ID": "Mac-4BFBC784B845591E",
|
||||
"FirmwareFeatures": None,
|
||||
"SecureBootModel": None,
|
||||
"CPU Generation": None,
|
||||
"Max OS Supported": os_data.os_data.max_os,
|
||||
"Wireless Model": None,
|
||||
"Bluetooth Model": bluetooth_data.bluetooth_data.NonApplicable,
|
||||
"Stock GPUs": [],
|
||||
"Stock Storage": [],
|
||||
},
|
||||
"APPL_UNKNOWN_MODEL_3": {
|
||||
# Laptop model, 15"/17" with dGPU and GMUX
|
||||
# Only mentioned in AppleGraphicsPowerManagement, AppleMuxControl2, AGDCBacklightControl, ApplePlatformEnabler and X86PlatformPlugin
|
||||
"Board ID": "Mac-564FBA6031E5946A",
|
||||
"FirmwareFeatures": None,
|
||||
"SecureBootModel": None,
|
||||
"CPU Generation": None,
|
||||
"Max OS Supported": os_data.os_data.max_os,
|
||||
"Wireless Model": None,
|
||||
"Bluetooth Model": bluetooth_data.bluetooth_data.NonApplicable,
|
||||
"Stock GPUs": [],
|
||||
"Stock Storage": [],
|
||||
},
|
||||
"APPL_UNKNOWN_MODEL_4": {
|
||||
# Laptop model, iGPU only
|
||||
# Only mentioned in AppleGraphicsPowerManagement, ApplePlatformEnabler and X86PlatformPlugin
|
||||
"Board ID": "Mac-6FEBD60817C77D8A",
|
||||
"FirmwareFeatures": None,
|
||||
"SecureBootModel": None,
|
||||
"CPU Generation": None,
|
||||
"Max OS Supported": os_data.os_data.max_os,
|
||||
"Wireless Model": None,
|
||||
"Bluetooth Model": bluetooth_data.bluetooth_data.NonApplicable,
|
||||
"Stock GPUs": [],
|
||||
"Stock Storage": [],
|
||||
},
|
||||
"APPL_UNKNOWN_MODEL_5": {
|
||||
# Laptop model, iGPU only, Iris Plus Graphics G7
|
||||
# Only mentioned in AppleGraphicsPowerManagement, ApplePlatformEnabler and X86PlatformPlugin
|
||||
"Board ID": "Mac-747B1AEFF11738BE",
|
||||
"FirmwareFeatures": None,
|
||||
"SecureBootModel": None,
|
||||
"CPU Generation": None,
|
||||
"Max OS Supported": os_data.os_data.max_os,
|
||||
"Wireless Model": None,
|
||||
"Bluetooth Model": bluetooth_data.bluetooth_data.NonApplicable,
|
||||
"Stock GPUs": [],
|
||||
"Stock Storage": [],
|
||||
},
|
||||
"APPL_UNKNOWN_MODEL_6": {
|
||||
# Laptop model, iGPU only
|
||||
# Only mentioned in AppleGraphicsPowerManagement, ApplePlatformEnabler and X86PlatformPlugin
|
||||
"Board ID": "Mac-87DCB00F4AD77EEA",
|
||||
"FirmwareFeatures": None,
|
||||
"SecureBootModel": None,
|
||||
"CPU Generation": None,
|
||||
"Max OS Supported": os_data.os_data.max_os,
|
||||
"Wireless Model": None,
|
||||
"Bluetooth Model": bluetooth_data.bluetooth_data.NonApplicable,
|
||||
"Stock GPUs": [],
|
||||
"Stock Storage": [],
|
||||
},
|
||||
"APPL_UNKNOWN_MODEL_7": {
|
||||
# Laptop model
|
||||
# Only mentioned in X86PlatformPlugin, AppleGVA
|
||||
"Board ID": "Mac-90BE64C3CB5A9AEB",
|
||||
"FirmwareFeatures": None,
|
||||
"SecureBootModel": None,
|
||||
"CPU Generation": None,
|
||||
"Max OS Supported": os_data.os_data.max_os,
|
||||
"Wireless Model": None,
|
||||
"Bluetooth Model": bluetooth_data.bluetooth_data.NonApplicable,
|
||||
"Stock GPUs": [],
|
||||
"Stock Storage": [],
|
||||
},
|
||||
"APPL_UNKNOWN_MODEL_7": {
|
||||
# Laptop model, iGPU only
|
||||
# Only mentioned in AppleGraphicsPowerManagement and X86PlatformPlugin
|
||||
"Board ID": "Mac-9394BDF4BF862EE7",
|
||||
"FirmwareFeatures": None,
|
||||
"SecureBootModel": None,
|
||||
"CPU Generation": None,
|
||||
"Max OS Supported": os_data.os_data.max_os,
|
||||
"Wireless Model": None,
|
||||
"Bluetooth Model": bluetooth_data.bluetooth_data.NonApplicable,
|
||||
"Stock GPUs": [],
|
||||
"Stock Storage": [],
|
||||
},
|
||||
}
|
||||
@@ -1,5 +1,6 @@
|
||||
# Working Around Legacy Acceleration Issues
|
||||
|
||||
* [Broken Background Blurs](#broken-background-blurs)
|
||||
* [Downloading older non-Metal Apps](#downloading-older-non-metal-apps)
|
||||
* [Unable to run Zoom](#unable-to-run-zoom)
|
||||
* [Unable to grant special permissions to apps (ie. Camera Access to Zoom)](#unable-to-grant-special-permissions-to-apps-ie-camera-access-to-zoom)
|
||||
@@ -35,6 +36,13 @@ For those unfamiliar with what is considered a non-Metal GPU, see below chart:
|
||||
|
||||
:::
|
||||
|
||||
## Broken Background Blurs
|
||||
|
||||
By default with the non-Metal acceleration patches, many background blur menus may act distorted when moving a cursor over it. With 0.4.1 and newer, users can enable a new Beta Blur feature to try and resolve the issue:
|
||||
|
||||

|
||||
|
||||
Do note that enabling beta blurs can be more demanding on slower hardware
|
||||
## 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.
|
||||
@@ -116,6 +124,10 @@ This will disable the dGPU and allow the iGPU to function in Big Sur. Note that
|
||||
|
||||
## Erratic Colours on ATI TeraScale 2 GPUs (HD5000/HD6000)
|
||||
|
||||
Resolved with OpenCore Legacy Patcher v0.4.2
|
||||
|
||||
::: details Legacy Fix (prior to 0.4.2)
|
||||
|
||||
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:
|
||||
@@ -123,6 +135,8 @@ Applications that can set color depth are:
|
||||
* [SwitchResX](https://www.madrau.com)
|
||||
* [ResXtreme](https://macdownload.informer.com/resxtreme/)
|
||||
|
||||
:::
|
||||
|
||||
## Unable to allow Safari Extensions
|
||||
|
||||
Due to an bug on the legacy acceleration patches, users won't be able to enable Safari Extensions
|
||||
|
||||
@@ -1,8 +1,6 @@
|
||||
# How to debug with OpenCore
|
||||
|
||||
For those who've hit an odd bug and unsure if it's user error or patcher, the below will tell you how to get more verbose debug information as well as logs to help [file issues with us](https://github.com/dortania/OpenCore-Legacy-Patcher/issues)
|
||||
|
||||
* For users who are less experienced, we recommend asking on the [OpenCore Patcher Paradise Discord Server](https://discord.gg/rqdPgH8xSN) for help.
|
||||
For those who've hit an odd bug and unsure if it's user error or patcher, we recommend asking on the [OpenCore Patcher Paradise Discord Server](https://discord.gg/rqdPgH8xSN) for help.
|
||||
|
||||
## Debugging yourself
|
||||
|
||||
|
||||
@@ -14,12 +14,38 @@ Below is a run down of the main logic OpenCore Legacy Patcher uses to gain nativ
|
||||
|
||||
::: details Configuration Explanation
|
||||
|
||||
### ACPI -> Add
|
||||
|
||||
* SSDT-CPBG
|
||||
* Reason: Resolves Kernel Panic on Arrendale Macs in early Big Sur builds
|
||||
* Logic: Disable dummy CPBG device in ACPI
|
||||
* Models: MacBookPro6,x and iMac11,x
|
||||
* SSDT-PCI
|
||||
* Reason: Patch Windows Audio support for Sandy and Ivy Bridge
|
||||
* Logic: Removes PCI0's 32-bit Allocation Limitation
|
||||
* Models: All Sandy and Ivy Bridge Macs, excluding MacPro6,1
|
||||
* SSDT-DGPU
|
||||
* Reason: Allows for software based deMUX disabling dGPUs in 2011 MacBook Pros
|
||||
* Logic: Sends power down request to dGPU via ACPI
|
||||
* Models: MacBookPro8,2 and MacBookPro8,3 with dead dGPUs
|
||||
|
||||
### ACPI -> Patch
|
||||
|
||||
* EHCx and XHC1 Patches
|
||||
* `EHCx` and `XHC1` Patches
|
||||
* Reason: Required for proper USB operation
|
||||
* Logic: Avoids USB maps of newer models attaching and breaking USB port functionality
|
||||
* Models: All models require when spoofing with Moderate or Advanced SMBIOS
|
||||
* `BUF0` to `BUF1` Patch
|
||||
* Reason: To be paired with SSDT-PCI
|
||||
* `_INI` to `XINI` Patch
|
||||
* Reason: To be paired with SSDT-DGPU
|
||||
|
||||
### Booter -> Patch
|
||||
|
||||
* Reroute `HW_BID` to `OC_BID`
|
||||
* Reason: Allows macOS installers to be used on unsupported models
|
||||
* Logic: Reroutes Board ID macOS checks to custom variable
|
||||
* Models: All systems using VMM spoofing
|
||||
|
||||
### Booter -> Quirks
|
||||
|
||||
@@ -30,14 +56,6 @@ Below is a run down of the main logic OpenCore Legacy Patcher uses to gain nativ
|
||||
|
||||
### DeviceProperties -> Add
|
||||
|
||||
* `PciRoot(0x0)/Pci(0x15,0x0)/Pci(0x0,0x0)`
|
||||
* `PciRoot(0x0)/Pci(0x1C,0x4)/Pci(0x0,0x0)`
|
||||
* `PciRoot(0x0)/Pci(0x1C,0x3)/Pci(0x0,0x0)`
|
||||
* `PciRoot(0x0)/Pci(0x1C,0x5)/Pci(0x0,0x0)`
|
||||
* `PciRoot(0x0)/Pci(0x1C,0x1)/Pci(0x0,0x0)`
|
||||
* Reason: Required to ensure Wifi works with full, native support
|
||||
* Logic: Tricks AirPortBrcmNIC.kext into thinking our device is a BCM94360 (`14e4,43ba`)
|
||||
* Models: Machines with BCM943224 and BCM94331 chipsets
|
||||
* `PciRoot(0x0)/Pci(0x3,0x0)/Pci(0x0,0x0)`
|
||||
* `PciRoot(0x0)/Pci(0x1,0x0)/Pci(0x0,0x0)`
|
||||
* Reason: Required to ensure Brightness Control works on upgraded iMacs
|
||||
@@ -58,6 +76,23 @@ Below is a run down of the main logic OpenCore Legacy Patcher uses to gain nativ
|
||||
* Reason: Required for HID peripheral support in macOS on older hardware
|
||||
* Logic: Tricks IOHIDFamily into thinking it's always booting recovery
|
||||
* Models: Penryn CPUs (Core2 series)
|
||||
* Force FileVault on Broken Seal Patch
|
||||
* Reason: Allow FileVault on root patched Macs
|
||||
* Logic: Forces APFS.kext to always return true on FileVault support
|
||||
* Models: Any model needing root patches
|
||||
* Disable Library Validation Enforcement Patch
|
||||
* Reason: non-Metal Root Volume Patches do not pass library validation tests
|
||||
* Logic: Forces Library Validation function to always return not required
|
||||
* Models: Non-Metal GPUs
|
||||
* SurPlus Patch
|
||||
* Reason: macOS 11.3-12.0.1 require systems to have RDRAND support in the CPU for stable boot
|
||||
* Logic: Forces RDRAND code to return predetermined value
|
||||
* Models: All pre-Ivy Bridge Macs
|
||||
* Reroute `kern.hv_vmm_present` Patch
|
||||
* Reason: Allows macOS to be installed and updated on unsupported hardware
|
||||
* Logic: Forces userspace to see system as Virtual Machine
|
||||
* Models: Any model using VMM spoofing
|
||||
|
||||
|
||||
### Kernel -> Quirks
|
||||
|
||||
@@ -73,9 +108,9 @@ Below is a run down of the main logic OpenCore Legacy Patcher uses to gain nativ
|
||||
### Misc -> Security
|
||||
|
||||
* SecureBootModel
|
||||
* Reason: Required to ensure seamless OS updates with Big Sur
|
||||
* Logic: Sets iMacPro1,1's Secure Enclave Identifier (j137)
|
||||
* Models: All models require
|
||||
* Reason: Required to allow native OS updates on T2 model spoofs
|
||||
* Logic: Sets T2's Secure Enclave Identifier
|
||||
* Models: All models required that spoof T2 model with minimal or higher
|
||||
|
||||
### NVRAM -> Add
|
||||
|
||||
@@ -123,13 +158,13 @@ Below is an explanation of what Kexts OpenCore Legacy Patcher will inject into m
|
||||
* Models: All models require
|
||||
* WhateverGreen
|
||||
* Reason: Patches GPU Frameworks and kext to ensure proper support
|
||||
* Models: All models require
|
||||
* Models: All models require when spoofing or have non-stock GPU
|
||||
* CPUFriend
|
||||
* Reason: Patches IOx86PlatformPlugin to restore previous CPU profiles
|
||||
* Models: 2012 and newer models
|
||||
* Models: All models using minimal or higher spoofing
|
||||
* AirportBrcmFixup
|
||||
* Reason: Patches IO80211 and co to fix networking support for unsupported cards
|
||||
* Models: BCM943224 and BCM94331
|
||||
* Reason: Patches IO80211 and co to fix networking support for unsupported cards, and fix bugs on native ones as well (ie. random degraded network performance)
|
||||
* Models: BCM943224, BCM94331, BCM94360 and BCM943602
|
||||
* RestrictEvents
|
||||
* Reason: Disables memory errors on MacPro7,1
|
||||
* Models: Mac Pros and Xserves
|
||||
@@ -151,7 +186,7 @@ Below is an explanation of what Kexts OpenCore Legacy Patcher will inject into m
|
||||
|
||||
* USBMap
|
||||
* Reason: Inject old USB map profiles to fix USB
|
||||
* Models: All models require
|
||||
* Models: All models require when spoofing moderate or higher, as well as pre-2012 models
|
||||
|
||||
### SSE
|
||||
|
||||
@@ -189,14 +224,14 @@ Below is an explanation of what Kexts OpenCore Legacy Patcher will inject into m
|
||||
* Models: 2011 and older, MacBookPro9,x included
|
||||
* SMC-Spoof
|
||||
* Reason: Spoofs SMC version to 9.9999
|
||||
* Models: All models require
|
||||
* Models: All models require when spoofing minimal or higher
|
||||
:::
|
||||
|
||||
## On-Disk Patches
|
||||
|
||||
Unfortunately certain on-disk patches are required to achieve full functionality. Below is a breakdown of patches supported
|
||||
|
||||
::: details Audio Patches
|
||||
::: details Audio Patches (11.0+)
|
||||
|
||||
### Extensions
|
||||
|
||||
@@ -206,7 +241,68 @@ Unfortunately certain on-disk patches are required to achieve full functionality
|
||||
|
||||
:::
|
||||
|
||||
::: details Acceleration Patches
|
||||
::: details Legacy Wireless Patches (12.0+)
|
||||
|
||||
Applicable for BCM94328, BCM94322 and Atheros Wifi cards
|
||||
|
||||
### CoreServices
|
||||
|
||||
* WiFiAgent.app
|
||||
|
||||
### /usr/libexec
|
||||
|
||||
* airportd
|
||||
|
||||
:::
|
||||
|
||||
::: details Nvidia Kepler Graphics Acceleration Patches (12.0+)
|
||||
|
||||
### Extensions
|
||||
|
||||
* GeForce.kext
|
||||
* GeForceAIRPlugin.bundle
|
||||
* GeForceGLDriver.bundle
|
||||
* GeForceMTLDriver.bundle
|
||||
* GeForceVADriver.bundle
|
||||
* NVDAGF100Hal.kext
|
||||
* NVDAGK100Hal.kext
|
||||
* NVDAResman.kext
|
||||
* NVDAStartup.kext
|
||||
|
||||
### Frameworks
|
||||
|
||||
* OpenCL (libCLVMNVPTXPlugin.dylib, NVPTX.dylib)
|
||||
* Reason: Re-add Kepler hardware acceleration support
|
||||
|
||||
:::
|
||||
|
||||
|
||||
::: details Intel Ivy Bridge Graphics Acceleration Patches (12.0+)
|
||||
|
||||
### Extensions
|
||||
|
||||
* AppleIntelIVBVA.bundle
|
||||
* AppleIntelFramebufferCapri.kext
|
||||
* AppleIntelGraphicsShared.bundle
|
||||
* AppleIntelHD4000Graphics.kext
|
||||
* AppleIntelHD4000GraphicsGLDriver.bundle
|
||||
* AppleIntelHD4000GraphicsMTLDriver.bundle
|
||||
* AppleIntelHD4000GraphicsVADriver.bundle
|
||||
|
||||
### PrivateFrameworks
|
||||
|
||||
* AppleGVA/AppleGVACore
|
||||
* Reason: Enable DRM support
|
||||
|
||||
### Frameworks
|
||||
|
||||
* OpenCL (libCLVMIGILPlugin.dylib)
|
||||
* Reason: Re-add Ivy Bridge hardware acceleration support
|
||||
* WebKit (com.apple.WebProcess.sb)
|
||||
* Reason: Re-add Ivy Bridge Safari rendering support
|
||||
:::
|
||||
|
||||
::: details non-Metal Graphics Acceleration Patches (11.0+)
|
||||
|
||||
### Extensions
|
||||
|
||||
@@ -290,10 +386,4 @@ Unfortunately certain on-disk patches are required to achieve full functionality
|
||||
* SkyLight.framework
|
||||
* Logic: Copied from Mojave, heavy modifications/shims
|
||||
|
||||
### LaunchDaemons
|
||||
|
||||
* HiddHack.plist
|
||||
* Reason: Fixes unresponsive input when patching Skylight
|
||||
* Logic: Forces `hidd` to register events, as Skylight handles them by default in Big Sur
|
||||
|
||||
:::
|
||||
|
||||
@@ -20,7 +20,9 @@ And voila! No more USB drive required
|
||||
|
||||
To do this, run the OpenCore Patcher and head to Patcher Settings:
|
||||
|
||||

|
||||
| GUI Settings | TUI Settings
|
||||
| :--- | :--- |
|
||||
| |  |
|
||||
|
||||
Here you can change different patcher settings, however the main interest is:
|
||||
|
||||
@@ -30,11 +32,19 @@ Once you've toggled them both off, build your OpenCore EFI once again and instal
|
||||
|
||||
## 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.
|
||||
For many users, SIP will be enabled by default on build. For Intel HD 4000 users, you may have noticed that SIP is partially 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
|
||||
| SIP Enabled | SIP Lowered (Root Patching) | SIP Disabled |
|
||||
| :--- | :--- | :--- |
|
||||
|  |  |  |
|
||||
|
||||
::: warning
|
||||
|
||||
If you're unsure whether you should enable SIP, leave as-is. Systems where you have already ran the Post Install Root Patching cannot enable SIP without potentially breaking the current install.
|
||||
|
||||
:::
|
||||
|
||||
## Applying Post Install Volume Patches
|
||||
|
||||
@@ -42,6 +52,20 @@ For users with unsupported GPUs/wifi cards, you'll need to run the Post Install
|
||||
|
||||
* Hint: Try running the root volume patch option, the Patcher will determine and install patches only when required. So there is no harm in applying them
|
||||
|
||||
|
||||
| Listing Patches | Patching Finished |
|
||||
| :--- | :--- |
|
||||
|  |  |
|
||||
|
||||
|
||||
::: warning
|
||||
|
||||
Root Patching requires a network connection by default to grab associated resources. If your system is having difficulties with wifi or ethernet, grab the Offline variants of the patcher on Github next to the regular apps:
|
||||
|
||||
* [OpenCore Legacy Patcher releases](https://github.com/dortania/OpenCore-Legacy-Patcher/releases/latest)
|
||||
|
||||
:::
|
||||
|
||||
::: details Unsupported GPUs in macOS Big Sur
|
||||
|
||||
* Nvidia:
|
||||
@@ -76,13 +100,3 @@ For users with unsupported GPUs/wifi cards, you'll need to run the Post Install
|
||||
* Atheros
|
||||
|
||||
:::
|
||||
|
||||
To apply the Post-Install Volume patches, select option #3 as shown below:
|
||||
|
||||

|
||||
|
||||
And go ahead to option #1 and let the OCLP patcher apply the needed legacy video patches.
|
||||
|
||||

|
||||
|
||||
Reboot your system and check out the now working graphics acceleration on your legacy system. This is still Beta software.
|
||||
|
||||
@@ -19,10 +19,10 @@ To aid users in troubleshooting, we've compiled a list of users who've reported
|
||||
| SMBIOS | Tested | Tester | Comment |
|
||||
| :--- | :--- | :--- | :--- |
|
||||
| MacBookAir2,1 | No reports | N/A | N/A |
|
||||
| MacBookAir3,1 | ^^ | ^^ | ^^ |
|
||||
| MacBookAir3,1 | <span style="color:#30BCD5"> YES </span> | uvesten | - Stock Model<br/>- Patcher version 0.3.3 |
|
||||
| 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 | ^^ | ^^ | ^^ |
|
||||
| MacBookAir4,2 | <span style="color:#30BCD5"> YES </span> | bdwilson1907 | - Stock Model <br/>- Patcher version 0.3.1 <br/>- Intermittent keyboard backlight|
|
||||
| MacBookAir5,1 | <span style="color:#30BCD5"> YES </span> | Ausdauersportler | - Stock Model<br/>- Patcher version 0.0.9 |
|
||||
| ^^ | ^^ | webg3 | Stock Model |
|
||||
| MacBookAir5,2 | ^^ | Bab-droid | - Stock Model<br/>- Patcher version 0.0.19 |
|
||||
@@ -42,7 +42,9 @@ To aid users in troubleshooting, we've compiled a list of users who've reported
|
||||
| MacBookPro6,1 | ^^ | ^^ | ^^ |
|
||||
| MacBookPro6,2 | <span style="color:#30BCD5"> YES </span> | Jakeluke | - Stock model, dGPU broken <br/>- Patcher version unknown |
|
||||
| MacBookPro7,1 | ^^ | fussel132 | - Stock model <br/>-Patcher version v0.1.2 |
|
||||
| ^^ | ^^ | casey1234 | - SSD Upgrade <br/>- Patcher version 0.3.3 |
|
||||
| MacBookPro8,1 | ^^ | AvaQueen | - Stock model <br/>- Patcher version 0.0.19 |
|
||||
| MacBookPro8,1 | yes | charly-black | - Upgraded BCM94331PCIEBT4CAX <br/>- Patcher version 0.3.1 |
|
||||
| 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 | ^^ | lulujyc | - Stock model, dGPU disabled <br/>- Patcher version 0.1.4 |
|
||||
@@ -56,9 +58,11 @@ To aid users in troubleshooting, we've compiled a list of users who've reported
|
||||
| ^^ | ^^ | woefi | - BCM94331CAX upgrade<br/>- Patcher version 0.0.13 |
|
||||
| ^^ | ^^ | whgmkeller | - Stock model<br/>- Patcher version 0.0.11 |
|
||||
| ^^ | ^^ | vinaypundith | - Patcher version 0.0.7 |
|
||||
| ^^ | ^^ | casey1234 | - RAM and SSD Upgrade <br/>- Patcher version 0.3.3 |
|
||||
| MacBookPro10,1 | ^^ | traviswparker | - Stock model <br/>- Patcher version 0.0.14 |
|
||||
| ^^ | ^^ | il-rollino | - Upgraded BCM94360CSAX <br/>- Patcher version 0.0.21 |
|
||||
| MacBookPro10,2 | ^^ | akidone | - Upgraded BCM94360CSAX <br/>- Patcher version 0.3.0 |
|
||||
| MacBookPro11,2 | ^^ | casey1234 | - Stock model<br/>- Patcher version 0.3.3 |
|
||||
|
||||
### Mac mini
|
||||
|
||||
@@ -67,7 +71,7 @@ To aid users in troubleshooting, we've compiled a list of users who've reported
|
||||
| Macmini3,1 | No reports | N/A | N/A |
|
||||
| Macmini4,1 | ^^ | ^^ | ^^ |
|
||||
| Macmini5,1 | ^^ | ^^ | ^^ |
|
||||
| Macmini5,2 | ^^ | ^^ | ^^ |
|
||||
| Macmini5,2 | yes | charly-black | Dual Core 2.7GHz with AMD HD6630M | Patcher Version 0.3.1
|
||||
| Macmini5,3 | ^^ | ^^ | ^^ |
|
||||
| Macmini6,1 | <span style="color:#30BCD5"> YES </span> | cicofz | - Stock model <br/>- Patcher version 0.0.21 |
|
||||
| ^^ | ^^ | Stig124 | - Stock model <br/>- Patcher version 0.0.19 |
|
||||
@@ -100,6 +104,7 @@ To aid users in troubleshooting, we've compiled a list of users who've reported
|
||||
| iMac14,2 | ^^ | OKonnel | - Stock Model<br/>- Patcher version 0.0.22 |
|
||||
| ^^ | ^^ | mibaxx | - Stock Model<br/>- Patcher version 0.0.21 |
|
||||
| iMac14,3 | No reports | N/A | N/A |
|
||||
| iMac15,1 | YES | JakubMazur | - Upgraded RAM<br/>- Upgraded Graphics (AMD Radeon R9 M295X 4 GB)<br/>- Upgraded CPU (4 GHz Quad-Core Intel Core i7)<br/>- Patcher version 0.4.1 |
|
||||
|
||||
### Mac Pro
|
||||
|
||||
|
||||
@@ -11,8 +11,12 @@ Here are some common errors users may experience while using this patcher:
|
||||
* [Stuck on "Your Mac needs a firmware update"](#stuck-on-your-mac-needs-a-firmware-update)
|
||||
* [No Brightness Control](#no-brightness-control)
|
||||
* [Cannot connect Wi-Fi on Monterey with legacy cards](#cannot-connect-Wi-Fi-on-Monterey-with-legacy-cards)
|
||||
* [No Graphics Acceleration on Intel Ivy Bridge and Nvidia Kepler GPUs](#no-graphics-acceleration-on-intel-ivy-bridge-and-nvidia-kepler-gpus)
|
||||
* [No Graphics Acceleration](#no-graphics-acceleration)
|
||||
* [Black Screen on MacBookPro11,3 in macOS Monterey](#black-screen-on-macbookpro113-in-macos-monterey)
|
||||
* [No DisplayPort Output on Mac Pros with Nvidia Kepler](#no-displayport-output-on-mac-pros-with-nvidia-kepler)
|
||||
* [Volume Hash Mismatch Error in macOS Monterey](#volume-hash-mismatch-error-in-macos-monterey)
|
||||
* [Cannot Disable SIP in recoveryOS](#cannot-disable-sip-in-recoveryos)
|
||||
|
||||
|
||||
## Stuck on `This version of Mac OS X is not supported on this platform`
|
||||
|
||||
@@ -78,9 +82,12 @@ With OCLP v0.2.5, we've added support for legacy Wi-Fi on Monterey. However some
|
||||
|
||||
To work-around, we recommend users to manually connect using the "other" option on the Wi-Fi menu bar or manually adding the network on the "Network" preference pane.
|
||||
|
||||
## No Graphics Acceleration on Intel Ivy Bridge and Nvidia Kepler GPUs
|
||||
## No Graphics Acceleration
|
||||
|
||||
With macOS Monterey, Apple removed Graphics Drivers for both Intel Ivy Bride and Nvidia Kepler. To re-enable acceleration, simply run the Post Install Root Volume patches.
|
||||
|
||||
In macOS, each release generally means GPU drivers are dropped from the OS. With macOS Big Sur, currently all non-Metal GPUs require additional patches to gain acceleration. In addition, macOS Monterey removed Graphics Drivers for both Intel Ivy Bridge and Nvidia Kepler.
|
||||
|
||||
To re-enable acceleration, simply run the Post Install Root Volume patches.
|
||||
|
||||
Once rebooted, acceleration will be re-enabled as well as brightness control for laptops.
|
||||
|
||||
@@ -88,4 +95,32 @@ Once rebooted, acceleration will be re-enabled as well as brightness control for
|
||||
|
||||
Due to Apple dropping Nvidia Kepler support in macOS Monterey, [MacBookPro11,3's GMUX has difficulties switching back to the iGPU to display macOS correctly.](https://github.com/dortania/OpenCore-Legacy-Patcher/issues/522) To work-around this issue, boot the MacBookPro11,3 in Safe Mode and once macOS is installed, run OCLP's Post Install Root Patches to enable GPU Acceleration for the Nvidia dGPU.
|
||||
|
||||
* Safe Mode can be started by holding Shift+Enter when selecting macOS Monterey in OCLP's Boot Menu.
|
||||
* Safe Mode can be started by holding Shift+Enter when selecting macOS Monterey in OCLP's Boot Menu.
|
||||
|
||||
## No DisplayPort Output on Mac Pros with Nvidia Kepler
|
||||
|
||||
If you're having troubles with DisplayPort output on Mac Pros, try enabling Minimal Spoofing in Settings -> SMBIOS Settings and rebuild/install OpenCore. This will trick macOS drivers into thinking you have a newer MacPro7,1 and play nicer.
|
||||
|
||||

|
||||
|
||||
## Volume Hash Mismatch Error in macOS Monterey
|
||||
|
||||
A semi-common popup some users face is the "Volume Hash Mismatch" error:
|
||||
|
||||

|
||||
|
||||
What this error signifies is that the OS detects the boot volume's hash does not match to what the OS detects, this error is generally cosmetic and can be ignored. However if your system starts to crash spontaneously shortly after, you'll want to reinstall macOS fresh without importing any data at first.
|
||||
|
||||
* Note that this bug affects native Macs as well and is not due to issues with unsupported Macs: [OSX Daily: “Volume Hash Mismatch” Error in MacOS Monterey](https://osxdaily.com/2021/11/10/volume-hash-mismatch-error-in-macos-monterey/)
|
||||
|
||||
Additionally it can help to disable FeatureUnlock in Settings -> Misc Settings as this tool can be strenuous on systems with weaker memory stability.
|
||||
|
||||
## Cannot Disable SIP in recoveryOS
|
||||
|
||||
With OCLP, the patcher will always overwrite the current SIP value on boot to ensure that users don't brick an installation after NVRAM reset. However for users wanting to disable SIP entirely, this can be done easily.
|
||||
|
||||
Head into the GUI, Patcher Settings and toggle the bits you need disabled from SIP:
|
||||
|
||||
| SIP Enabled | SIP Lowered (Root Patching) | SIP Disabled |
|
||||
| :--- | :--- | :--- |
|
||||
|  |  |  |
|
||||
|
||||
104
gui/gui_main.py
@@ -315,7 +315,7 @@ class wx_python_gui:
|
||||
|
||||
|
||||
# Copyright Label
|
||||
self.copyright = wx.StaticText(self.frame, label="Copyright © 2020-2022 Dortania")
|
||||
self.copyright = wx.StaticText(self.frame, label=self.constants.copyright_date)
|
||||
self.copyright.SetFont(wx.Font(8, wx.FONTFAMILY_DEFAULT, wx.FONTSTYLE_NORMAL, wx.FONTWEIGHT_NORMAL))
|
||||
self.copyright.SetPosition(
|
||||
wx.Point(
|
||||
@@ -677,6 +677,7 @@ class wx_python_gui:
|
||||
self.subheader.Centre(wx.HORIZONTAL)
|
||||
|
||||
patches = sys_patch_detect.detect_root_patch(self.computer.real_model, self.constants).detect_patch_set()
|
||||
self.patches = patches
|
||||
if not any(not patch.startswith("Settings") and not patch.startswith("Validation") and patches[patch] is True for patch in patches):
|
||||
print("- No applicable patches available")
|
||||
patches = []
|
||||
@@ -873,7 +874,7 @@ class wx_python_gui:
|
||||
sys.stderr = menu_redirect.RedirectText(self.text_box, True)
|
||||
wx.GetApp().Yield()
|
||||
self.frame.Show()
|
||||
sys_patch.PatchSysVolume(self.constants.custom_model or self.constants.computer.real_model, self.constants).start_patch()
|
||||
sys_patch.PatchSysVolume(self.constants.custom_model or self.constants.computer.real_model, self.constants, self.patches).start_patch()
|
||||
sys.stdout = self.stock_stdout
|
||||
sys.stderr = self.stock_stderr
|
||||
|
||||
@@ -946,7 +947,7 @@ class wx_python_gui:
|
||||
sys.stdout = menu_redirect.RedirectText(self.text_box, True)
|
||||
sys.stderr = menu_redirect.RedirectText(self.text_box, True)
|
||||
wx.GetApp().Yield()
|
||||
sys_patch.PatchSysVolume(self.constants.custom_model or self.constants.computer.real_model, self.constants).start_unpatch()
|
||||
sys_patch.PatchSysVolume(self.constants.custom_model or self.constants.computer.real_model, self.constants, self.patches).start_unpatch()
|
||||
sys.stdout = self.stock_stdout
|
||||
sys.stderr = self.stock_stderr
|
||||
|
||||
@@ -1036,7 +1037,7 @@ class wx_python_gui:
|
||||
self.frame.Show()
|
||||
|
||||
# Download installer catalog
|
||||
avalible_installers = installer.list_downloadable_macOS_installers(self.constants.payload_path, "PublicSeed")
|
||||
available_installers = installer.list_downloadable_macOS_installers(self.constants.payload_path, "PublicSeed")
|
||||
|
||||
self.frame.DestroyChildren()
|
||||
sys.stdout = self.stock_stdout
|
||||
@@ -1060,13 +1061,17 @@ class wx_python_gui:
|
||||
|
||||
# Sort Installers by 'Version'
|
||||
# By default Apple adds new builds to the end of the list, so we need to sort them by version
|
||||
avalible_installers = {k: v for k, v in sorted(avalible_installers.items(), key=lambda x: x[1]['Version'])}
|
||||
available_installers = {k: v for k, v in sorted(available_installers.items(), key=lambda x: x[1]['Version'])}
|
||||
|
||||
i = -20
|
||||
if avalible_installers:
|
||||
for app in avalible_installers:
|
||||
print(f"macOS {avalible_installers[app]['Version']} ({avalible_installers[app]['Build']} - {utilities.human_fmt(avalible_installers[app]['Size'])} - {avalible_installers[app]['Source']})")
|
||||
self.install_selection = wx.Button(self.frame, label=f"macOS {avalible_installers[app]['Version']} ({avalible_installers[app]['Build']} - {utilities.human_fmt(avalible_installers[app]['Size'])})", size=(250, 30))
|
||||
if available_installers:
|
||||
for app in available_installers:
|
||||
print(f"macOS {available_installers[app]['Version']} ({available_installers[app]['Build']} - {utilities.human_fmt(available_installers[app]['Size'])} - {available_installers[app]['Source']}) - {available_installers[app]['Variant']}")
|
||||
if available_installers[app]['Variant'] in ["DeveloperSeed" , "PublicSeed"]:
|
||||
extra = " Beta"
|
||||
else:
|
||||
extra = ""
|
||||
self.install_selection = wx.Button(self.frame, label=f"macOS {available_installers[app]['Version']}{extra} ({available_installers[app]['Build']} - {utilities.human_fmt(available_installers[app]['Size'])})", size=(280, 30))
|
||||
i = i + 25
|
||||
self.install_selection.SetPosition(
|
||||
wx.Point(
|
||||
@@ -1074,7 +1079,7 @@ class wx_python_gui:
|
||||
self.subheader.GetPosition().y + self.subheader.GetSize().height + i
|
||||
)
|
||||
)
|
||||
self.install_selection.Bind(wx.EVT_BUTTON, lambda event, temp=app: self.download_macos_click(f"macOS {avalible_installers[temp]['Version']} ({avalible_installers[temp]['Build']})", avalible_installers[temp]['Link']))
|
||||
self.install_selection.Bind(wx.EVT_BUTTON, lambda event, temp=app: self.download_macos_click(f"macOS {available_installers[temp]['Version']} ({available_installers[temp]['Build']})", available_installers[temp]['Link']))
|
||||
self.install_selection.Centre(wx.HORIZONTAL)
|
||||
else:
|
||||
self.install_selection = wx.StaticText(self.frame, label="No installers available")
|
||||
@@ -1139,7 +1144,7 @@ class wx_python_gui:
|
||||
sys.stdout = self.stock_stdout
|
||||
self.download_label.SetLabel(f"Finished Downloading {installer_name}")
|
||||
self.download_label.Centre(wx.HORIZONTAL)
|
||||
|
||||
wx.App.Get().Yield()
|
||||
# Update Label:
|
||||
sys.stdout=menu_redirect.RedirectLabelAll(self.download_label)
|
||||
sys.stderr=menu_redirect.RedirectLabelAll(self.download_label)
|
||||
@@ -1178,12 +1183,12 @@ class wx_python_gui:
|
||||
self.subheader.Centre(wx.HORIZONTAL)
|
||||
|
||||
i = -7
|
||||
avalible_installers = installer.list_local_macOS_installers()
|
||||
if avalible_installers:
|
||||
available_installers = installer.list_local_macOS_installers()
|
||||
if available_installers:
|
||||
print("Installer found")
|
||||
for app in avalible_installers:
|
||||
print(f"{avalible_installers[app]['Short Name']}: {avalible_installers[app]['Version']} ({avalible_installers[app]['Build']})")
|
||||
self.install_selection = wx.Button(self.frame, label=f"{avalible_installers[app]['Short Name']}: {avalible_installers[app]['Version']} ({avalible_installers[app]['Build']})", size=(300, 30))
|
||||
for app in available_installers:
|
||||
print(f"{available_installers[app]['Short Name']}: {available_installers[app]['Version']} ({available_installers[app]['Build']})")
|
||||
self.install_selection = wx.Button(self.frame, label=f"{available_installers[app]['Short Name']}: {available_installers[app]['Version']} ({available_installers[app]['Build']})", size=(300, 30))
|
||||
i = i + 25
|
||||
self.install_selection.SetPosition(
|
||||
wx.Point(
|
||||
@@ -1191,7 +1196,7 @@ class wx_python_gui:
|
||||
self.header.GetPosition().y + self.header.GetSize().height + i
|
||||
)
|
||||
)
|
||||
self.install_selection.Bind(wx.EVT_BUTTON, lambda event, temp=app: self.format_usb_menu(avalible_installers[temp]['Path']))
|
||||
self.install_selection.Bind(wx.EVT_BUTTON, lambda event, temp=app: self.format_usb_menu(available_installers[temp]['Short Name'], available_installers[temp]['Path']))
|
||||
self.install_selection.Centre(wx.HORIZONTAL)
|
||||
else:
|
||||
print("No installers found")
|
||||
@@ -1202,7 +1207,7 @@ class wx_python_gui:
|
||||
# Set Position below header
|
||||
wx.Point(
|
||||
self.header.GetPosition().x,
|
||||
self.header.GetPosition().y + self.header.GetSize().height + 10
|
||||
self.header.GetPosition().y + self.header.GetSize().height + 15
|
||||
)
|
||||
)
|
||||
self.install_selection.Centre(wx.HORIZONTAL)
|
||||
@@ -1219,7 +1224,7 @@ class wx_python_gui:
|
||||
|
||||
self.frame.SetSize(-1, self.return_to_main_menu.GetPosition().y + self.return_to_main_menu.GetSize().height + 40)
|
||||
|
||||
def format_usb_menu(self, installer_path):
|
||||
def format_usb_menu(self, installer_name, installer_path):
|
||||
self.frame.DestroyChildren()
|
||||
print(installer_path)
|
||||
|
||||
@@ -1264,7 +1269,7 @@ class wx_python_gui:
|
||||
self.usb_selection_label.GetPosition().y + self.usb_selection_label.GetSize().height + i
|
||||
)
|
||||
)
|
||||
self.usb_selection.Bind(wx.EVT_BUTTON, lambda event, temp=disk: self.format_usb_progress(availible_disks[temp]['identifier'], installer_path))
|
||||
self.usb_selection.Bind(wx.EVT_BUTTON, lambda event, temp=disk: self.format_usb_progress(availible_disks[temp]['identifier'], installer_name, installer_path))
|
||||
self.usb_selection.Centre(wx.HORIZONTAL)
|
||||
else:
|
||||
print("No disks found")
|
||||
@@ -1292,11 +1297,11 @@ class wx_python_gui:
|
||||
|
||||
self.frame.SetSize(-1, self.return_to_main_menu.GetPosition().y + self.return_to_main_menu.GetSize().height + 40)
|
||||
|
||||
def format_usb_progress(self, disk, installer_path):
|
||||
def format_usb_progress(self, disk, installer_name, installer_path):
|
||||
self.frame.DestroyChildren()
|
||||
self.frame.SetSize(500, -1)
|
||||
# Header
|
||||
self.header = wx.StaticText(self.frame, label="Creating macOS Installer")
|
||||
self.header = wx.StaticText(self.frame, label=f"Creating Installer: {installer_name}")
|
||||
self.header.SetFont(wx.Font(18, wx.FONTFAMILY_DEFAULT, wx.FONTSTYLE_NORMAL, wx.FONTWEIGHT_BOLD))
|
||||
self.header.Centre(wx.HORIZONTAL)
|
||||
|
||||
@@ -1734,7 +1739,7 @@ class wx_python_gui:
|
||||
self.set_terascale_accel_checkbox.SetPosition(wx.Point(
|
||||
self.disable_thunderbolt_checkbox.GetPosition().x,
|
||||
self.disable_thunderbolt_checkbox.GetPosition().y + self.disable_thunderbolt_checkbox.GetSize().height))
|
||||
self.set_terascale_accel_checkbox.SetToolTip(wx.ToolTip("This option will determine whether TeraScale 2 acceleration is avalible during Root Volume patching.\nOnly applicable if your system has a AMD TeraScale 2 GPU (ie. MacBookPro8,2/3)"))
|
||||
self.set_terascale_accel_checkbox.SetToolTip(wx.ToolTip("This option will determine whether TeraScale 2 acceleration is available during Root Volume patching.\nOnly applicable if your system has a AMD TeraScale 2 GPU (ie. MacBookPro8,2/3)"))
|
||||
if self.computer.real_model not in ["MacBookPro8,2", "MacBookPro8,3"]:
|
||||
self.set_terascale_accel_checkbox.Disable()
|
||||
|
||||
@@ -1867,6 +1872,22 @@ class wx_python_gui:
|
||||
print("NVMe Disabled")
|
||||
self.constants.nvme_boot = False
|
||||
|
||||
def nvme_power_management_click(self, event=None):
|
||||
if self.nvme_power_management_checkbox.GetValue():
|
||||
print("NVMe Power Management Enabled")
|
||||
self.constants.allow_nvme_fixing = True
|
||||
else:
|
||||
print("NVMe Power Management Disabled")
|
||||
self.constants.allow_nvme_fixing = False
|
||||
|
||||
def xhci_click(self, event=None):
|
||||
if self.xhci_boot_checkbox.GetValue():
|
||||
print("XHCI Enabled")
|
||||
self.constants.xhci_boot = True
|
||||
else:
|
||||
print("XHCI Disabled")
|
||||
self.constants.xhci_boot = False
|
||||
|
||||
def wake_on_wlan_click(self, event=None):
|
||||
if self.wake_on_wlan_checkbox.GetValue():
|
||||
print("Wake on WLAN Enabled")
|
||||
@@ -1875,6 +1896,14 @@ class wx_python_gui:
|
||||
print("Wake on WLAN Disabled")
|
||||
self.constants.enable_wake_on_wlan = False
|
||||
|
||||
def content_caching_click(self, event=None):
|
||||
if self.content_caching_checkbox.GetValue():
|
||||
print("Content Caching Enabled")
|
||||
self.constants.set_content_caching = True
|
||||
else:
|
||||
print("Content Caching Disabled")
|
||||
self.constants.set_content_caching = False
|
||||
|
||||
def disable_tb_click(self, event=None):
|
||||
if self.disable_thunderbolt_checkbox.GetValue():
|
||||
print("Disable Thunderbolt Enabled")
|
||||
@@ -2346,27 +2375,48 @@ OpenCore Legacy Patcher by default knows the most ideal
|
||||
self.firewire_boot_checkbox.SetToolTip(wx.ToolTip("Enable FireWire Boot support in macOS 10.15 and newer.\nMainly applicable for Macs with FireWire or Thunderbolt to FireWire adapters"))
|
||||
if generate_smbios.check_firewire(self.computer.real_model) is False and not self.constants.custom_model:
|
||||
self.firewire_boot_checkbox.Disable()
|
||||
|
||||
# XHCI Boot
|
||||
self.xhci_boot_checkbox = wx.CheckBox(self.frame, label="XHCI Boot")
|
||||
self.xhci_boot_checkbox.SetValue(self.constants.xhci_boot)
|
||||
self.xhci_boot_checkbox.Bind(wx.EVT_CHECKBOX, self.xhci_click)
|
||||
self.xhci_boot_checkbox.SetPosition(wx.Point(self.firewire_boot_checkbox.GetPosition().x, self.firewire_boot_checkbox.GetPosition().y + self.firewire_boot_checkbox.GetSize().height))
|
||||
self.xhci_boot_checkbox.SetToolTip(wx.ToolTip("Enables XHCI/USB3.o support in UEFI for non-native systems (ie. pre-Ivy Bridge)\nRequires OpenCore to be stored on a natively bootable volume however"))
|
||||
|
||||
# NVMe Boot
|
||||
self.nvme_boot_checkbox = wx.CheckBox(self.frame, label="NVMe Boot")
|
||||
self.nvme_boot_checkbox.SetValue(self.constants.nvme_boot)
|
||||
self.nvme_boot_checkbox.Bind(wx.EVT_CHECKBOX, self.nvme_click)
|
||||
self.nvme_boot_checkbox.SetPosition(wx.Point(self.firewire_boot_checkbox.GetPosition().x, self.firewire_boot_checkbox.GetPosition().y + self.firewire_boot_checkbox.GetSize().height))
|
||||
self.nvme_boot_checkbox.SetPosition(wx.Point(self.xhci_boot_checkbox.GetPosition().x, self.xhci_boot_checkbox.GetPosition().y + self.xhci_boot_checkbox.GetSize().height))
|
||||
self.nvme_boot_checkbox.SetToolTip(wx.ToolTip("Enables NVMe support in UEFI for non-native systems (ie. MacPro3,1)\nRequires OpenCore to be stored on a natively bootable volume however"))
|
||||
|
||||
# NVMe Power Management
|
||||
self.nvme_power_management_checkbox = wx.CheckBox(self.frame, label="NVMe Power Management")
|
||||
self.nvme_power_management_checkbox.SetValue(self.constants.allow_nvme_fixing)
|
||||
self.nvme_power_management_checkbox.Bind(wx.EVT_CHECKBOX, self.nvme_power_management_click)
|
||||
self.nvme_power_management_checkbox.SetPosition(wx.Point(self.nvme_boot_checkbox.GetPosition().x, self.nvme_boot_checkbox.GetPosition().y + self.nvme_boot_checkbox.GetSize().height))
|
||||
self.nvme_power_management_checkbox.SetToolTip(wx.ToolTip("For machines with upgraded NVMe drives, this option allows for better power management support within macOS.\nNote that some NVMe drives don't support macOS's power management settings, and can result in boot issues. Disable this option if you experience IONVMeFamily kernel panics. Mainly applicable for Skylake and newer Macs."))
|
||||
|
||||
# Wake on WLAN
|
||||
self.wake_on_wlan_checkbox = wx.CheckBox(self.frame, label="Wake on WLAN")
|
||||
self.wake_on_wlan_checkbox.SetValue(self.constants.enable_wake_on_wlan)
|
||||
self.wake_on_wlan_checkbox.Bind(wx.EVT_CHECKBOX, self.wake_on_wlan_click)
|
||||
self.wake_on_wlan_checkbox.SetPosition(wx.Point(self.nvme_boot_checkbox.GetPosition().x, self.nvme_boot_checkbox.GetPosition().y + self.nvme_boot_checkbox.GetSize().height))
|
||||
self.wake_on_wlan_checkbox.SetPosition(wx.Point(self.nvme_power_management_checkbox.GetPosition().x, self.nvme_power_management_checkbox.GetPosition().y + self.nvme_power_management_checkbox.GetSize().height))
|
||||
self.wake_on_wlan_checkbox.SetToolTip(wx.ToolTip("Enables Wake on WLAN for Broadcom Wifi.\nBy default, Wake on WLAN is disabled to work around Apple's wake from sleep bug causing heavily degraded networking performance.\nNote: This option is only applicable for BCM943224, BCM94331, BCM94360 and BCM943602 chipsets"))
|
||||
|
||||
# Content Caching
|
||||
self.content_caching_checkbox = wx.CheckBox(self.frame, label="Content Caching")
|
||||
self.content_caching_checkbox.SetValue(self.constants.set_content_caching)
|
||||
self.content_caching_checkbox.Bind(wx.EVT_CHECKBOX, self.content_caching_click)
|
||||
self.content_caching_checkbox.SetPosition(wx.Point(self.wake_on_wlan_checkbox.GetPosition().x, self.wake_on_wlan_checkbox.GetPosition().y + self.wake_on_wlan_checkbox.GetSize().height))
|
||||
self.content_caching_checkbox.SetToolTip(wx.ToolTip("Enables content caching support in macOS"))
|
||||
|
||||
# Button: return to main menu
|
||||
self.return_to_main_menu_button = wx.Button(self.frame, label="Return to Settings")
|
||||
self.return_to_main_menu_button.Bind(wx.EVT_BUTTON, self.settings_menu)
|
||||
self.return_to_main_menu_button.SetPosition(wx.Point(
|
||||
self.wake_on_wlan_checkbox.GetPosition().x,
|
||||
self.wake_on_wlan_checkbox.GetPosition().y + self.wake_on_wlan_checkbox.GetSize().height + 10))
|
||||
self.content_caching_checkbox.GetPosition().x,
|
||||
self.content_caching_checkbox.GetPosition().y + self.content_caching_checkbox.GetSize().height + 10))
|
||||
self.return_to_main_menu_button.Center(wx.HORIZONTAL)
|
||||
|
||||
# set frame size below return to main menu button
|
||||
|
||||
BIN
images/Hash-Mismatch.png
Normal file
|
After Width: | Height: | Size: 20 KiB |
BIN
images/OCLP-GUI-Root-Patch.png
Normal file
|
After Width: | Height: | Size: 275 KiB |
BIN
images/OCLP-GUI-Root-Patching-Finished.png
Normal file
|
After Width: | Height: | Size: 72 KiB |
BIN
images/OCLP-GUI-Root-Patching-List.png
Normal file
|
After Width: | Height: | Size: 40 KiB |
BIN
images/OCLP-GUI-SMBIOS-Minimal.png
Normal file
|
After Width: | Height: | Size: 252 KiB |
BIN
images/OCLP-GUI-Settings-Beta-Blur.png
Normal file
|
After Width: | Height: | Size: 424 KiB |
BIN
images/OCLP-GUI-Settings-SIP-Disabled.png
Normal file
|
After Width: | Height: | Size: 923 KiB |
BIN
images/OCLP-GUI-Settings-SIP-Enabled.png
Normal file
|
After Width: | Height: | Size: 916 KiB |
BIN
images/OCLP-GUI-Settings-SIP-Root-Patch.png
Normal file
|
After Width: | Height: | Size: 893 KiB |
BIN
images/OCLP-GUI-Settings-ShowPicker.png
Normal file
|
After Width: | Height: | Size: 495 KiB |
|
Before Width: | Height: | Size: 311 KiB After Width: | Height: | Size: 569 KiB |
@@ -1149,6 +1149,24 @@
|
||||
<key>PlistPath</key>
|
||||
<string>Contents/Info.plist</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>Arch</key>
|
||||
<string>x86_64</string>
|
||||
<key>Comment</key>
|
||||
<string>ACPI_SMC_PlatformPlugin Override</string>
|
||||
<key>Enabled</key>
|
||||
<false/>
|
||||
<key>MaxKernel</key>
|
||||
<string></string>
|
||||
<key>MinKernel</key>
|
||||
<string>21.4.0</string>
|
||||
<key>BundlePath</key>
|
||||
<string>ASPP-Override.kext</string>
|
||||
<key>ExecutablePath</key>
|
||||
<string></string>
|
||||
<key>PlistPath</key>
|
||||
<string>Contents/Info.plist</string>
|
||||
</dict>
|
||||
</array>
|
||||
<key>Block</key>
|
||||
<array/>
|
||||
@@ -1309,7 +1327,7 @@
|
||||
<key>Mask</key>
|
||||
<data></data>
|
||||
<key>MaxKernel</key>
|
||||
<string>21.99.99</string>
|
||||
<string>21.1.0</string>
|
||||
<key>MinKernel</key>
|
||||
<string>20.4.0</string>
|
||||
<key>Replace</key>
|
||||
@@ -1339,7 +1357,7 @@
|
||||
<key>Mask</key>
|
||||
<data></data>
|
||||
<key>MaxKernel</key>
|
||||
<string>21.99.99</string>
|
||||
<string>21.1.0</string>
|
||||
<key>MinKernel</key>
|
||||
<string>20.4.0</string>
|
||||
<key>Replace</key>
|
||||
@@ -1946,6 +1964,16 @@
|
||||
<key>Arguments</key>
|
||||
<string></string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>Comment</key>
|
||||
<string></string>
|
||||
<key>Path</key>
|
||||
<string>UsbBusDxe.efi</string>
|
||||
<key>Enabled</key>
|
||||
<false/>
|
||||
<key>Arguments</key>
|
||||
<string></string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>Comment</key>
|
||||
<string></string>
|
||||
|
||||
BIN
payloads/Drivers/UsbBusDxe.efi
Normal file
BIN
payloads/Kexts/Misc/ASPP-Override-v1.0.0.zip
Normal file
BIN
payloads/OC-Patcher-TUI.icns
Normal file
@@ -101,7 +101,7 @@ If you plan to create the USB for another machine, please select the "Change Mod
|
||||
print("- Set Mojave/Catalina root patch configuration")
|
||||
settings.moj_cat_accel = True
|
||||
print("- Set System Volume patching")
|
||||
sys_patch.PatchSysVolume(settings.custom_model or settings.computer.real_model, settings).start_patch()
|
||||
sys_patch.PatchSysVolume(settings.custom_model or settings.computer.real_model, settings, None).start_patch()
|
||||
elif self.args.unpatch_sys_vol:
|
||||
print("- Set System Volume unpatching")
|
||||
sys_patch.PatchSysVolume(settings.custom_model or settings.computer.real_model, settings).start_unpatch()
|
||||
sys_patch.PatchSysVolume(settings.custom_model or settings.computer.real_model, settings, None).start_unpatch()
|
||||
|
||||
@@ -177,6 +177,15 @@ class BuildOpenCore:
|
||||
print(f"- Adding additional FeatureUnlock args: {self.constants.fu_arguments}")
|
||||
self.config["NVRAM"]["Add"]["7C436110-AB2A-4BBB-A880-FE41995C9F82"]["boot-args"] += self.constants.fu_arguments
|
||||
|
||||
if smbios_data.smbios_dictionary[self.model]["CPU Generation"] <= cpu_data.cpu_data.sandy_bridge.value:
|
||||
# With macOS 12.3 Beta 1, Apple dropped the 'plugin-type' check within X86PlatformPlugin
|
||||
# Because of this, X86PP will match onto the CPU instead of ACPI_SMC_PlatformPlugin
|
||||
# This causes power management to break on pre-Ivy Bridge CPUs as they don't have correct
|
||||
# power management tables provided.
|
||||
# This patch will simply increase ASPP's 'IOProbeScore' to outmatch X86PP
|
||||
print("- Fixing ACPI SMC Power Management support")
|
||||
self.enable_kext("ASPP-Override.kext", self.constants.aspp_override_version, self.constants.aspp_override_path)
|
||||
|
||||
if self.model in ["MacBookPro6,1", "MacBookPro6,2", "MacBookPro9,1", "MacBookPro10,1"]:
|
||||
# Modded RestrictEvents with displaypolicyd blocked to fix dGPU switching
|
||||
self.enable_kext("RestrictEvents.kext", self.constants.restrictevents_mbp_version, self.constants.restrictevents_mbp_path)
|
||||
@@ -218,7 +227,7 @@ class BuildOpenCore:
|
||||
if not self.computer.storage:
|
||||
print("- No PCIe Storage Controllers found to fix")
|
||||
|
||||
if not self.constants.custom_model:
|
||||
if not self.constants.custom_model and self.constants.allow_nvme_fixing is True:
|
||||
nvme_devices = [i for i in self.computer.storage if isinstance(i, device_probe.NVMeController)]
|
||||
for i, controller in enumerate(nvme_devices):
|
||||
print(f"- Found 3rd Party NVMe SSD ({i + 1}): {utilities.friendly_hex(controller.vendor_id)}:{utilities.friendly_hex(controller.device_id)}")
|
||||
@@ -236,11 +245,8 @@ class BuildOpenCore:
|
||||
print("- Falling back to -nvmefaspm")
|
||||
self.config["NVRAM"]["Add"]["7C436110-AB2A-4BBB-A880-FE41995C9F82"]["boot-args"] += " -nvmefaspm"
|
||||
|
||||
if (controller.vendor_id != 0x144D and controller.device_id != 0xA804 and self.model not in ["MacBookPro13,3", "MacBookPro14,3"]):
|
||||
if (controller.vendor_id != 0x144D and controller.device_id != 0xA804):
|
||||
# Avoid injecting NVMeFix when a native Apple NVMe drive is present
|
||||
# Note on 2016-2017 MacBook Pros, 15" devices used a stock Samsung SSD with IONVMeController
|
||||
# Technically this should be patched based on NVMeFix.kext logic,
|
||||
# however Apple deemed the SSD unsupported for enhanced performance
|
||||
# https://github.com/acidanthera/NVMeFix/blob/1.0.9/NVMeFix/NVMeFix.cpp#L220-L225
|
||||
if self.get_kext_by_bundle_path("NVMeFix.kext")["Enabled"] is False:
|
||||
self.enable_kext("NVMeFix.kext", self.constants.nvmefix_version, self.constants.nvmefix_path)
|
||||
@@ -704,6 +710,8 @@ class BuildOpenCore:
|
||||
elif self.computer.bluetooth_chipset == "3rd Party Bluetooth 4.0 Hub":
|
||||
print("- Detected 3rd Party Chipset")
|
||||
self.enable_kext("BlueToolFixup.kext", self.constants.bluetool_version, self.constants.bluetool_path)
|
||||
print("- Enabling Bluetooth FeatureFlags")
|
||||
self.config["Kernel"]["Quirks"]["ExtendBTFeatureFlags"] = True
|
||||
elif smbios_data.smbios_dictionary[self.model]["Bluetooth Model"] <= bluetooth_data.bluetooth_data.BRCM20702_v1.value:
|
||||
print("- Fixing Legacy Bluetooth for macOS Monterey")
|
||||
self.enable_kext("BlueToolFixup.kext", self.constants.bluetool_version, self.constants.bluetool_path)
|
||||
@@ -761,6 +769,14 @@ class BuildOpenCore:
|
||||
except KeyError:
|
||||
pass
|
||||
|
||||
if self.constants.xhci_boot is True:
|
||||
print("- Adding USB 3.0 Controller Patch")
|
||||
print("- Adding XhciDxe.efi and UsbBusDxe.efi")
|
||||
shutil.copy(self.constants.xhci_driver_path, self.constants.drivers_path)
|
||||
shutil.copy(self.constants.usb_bus_driver_path, self.constants.drivers_path)
|
||||
self.get_efi_binary_by_path("XhciDxe.efi", "UEFI", "Drivers")["Enabled"] = True
|
||||
self.get_efi_binary_by_path("UsbBusDxe.efi", "UEFI", "Drivers")["Enabled"] = True
|
||||
|
||||
# ThirdPartDrives Check
|
||||
if self.constants.allow_3rd_party_drives is True:
|
||||
for drive in ["SATA 2.5", "SATA 3.5", "mSATA"]:
|
||||
@@ -894,7 +910,7 @@ class BuildOpenCore:
|
||||
if self.constants.nvram_write is False:
|
||||
print("- Disabling Hardware NVRAM Write")
|
||||
self.config["NVRAM"]["WriteFlash"] = False
|
||||
if self.get_item_by_kv(self.config["Kernel"]["Patch"], "Comment", "Reroute kern.hv_vmm_present patch (1)")["Enabled"] is True:
|
||||
if self.get_item_by_kv(self.config["Kernel"]["Patch"], "Comment", "Reroute kern.hv_vmm_present patch (1)")["Enabled"] is True and self.constants.set_content_caching is True:
|
||||
# Add Content Caching patch
|
||||
print("- Fixing Content Caching support")
|
||||
if self.get_kext_by_bundle_path("RestrictEvents.kext")["Enabled"] is False:
|
||||
|
||||
@@ -466,6 +466,60 @@ OpenCore will enable NVMe support in it's picker
|
||||
print("Returning to previous menu")
|
||||
else:
|
||||
self.allow_nvme()
|
||||
|
||||
def allow_nvme_pwr_mgmt(self):
|
||||
utilities.cls()
|
||||
utilities.header(["Allow NVMe Power Management Adjustments"])
|
||||
print(
|
||||
"""
|
||||
For machines with upgraded NVMe drives, this
|
||||
option allows for better power management support
|
||||
within macOS.
|
||||
|
||||
Note that some NVMe drives don't support macOS's
|
||||
power management settings, and can result in boot
|
||||
issues. Disable this option if you experience
|
||||
IONVMeFamily kernel panics. Mainly applicable for
|
||||
Skylake and newer Macs.
|
||||
"""
|
||||
)
|
||||
|
||||
change_menu = input("Enable NVMe Power Management?(y/n/q): ")
|
||||
if change_menu in {"y", "Y", "yes", "Yes"}:
|
||||
self.constants.allow_nvme_fixing = True
|
||||
elif change_menu in {"n", "N", "no", "No"}:
|
||||
self.constants.allow_nvme_fixing = False
|
||||
elif change_menu in {"q", "Q", "Quit", "quit"}:
|
||||
print("Returning to previous menu")
|
||||
else:
|
||||
self.allow_nvme()
|
||||
|
||||
def allow_xhci(self):
|
||||
utilities.cls()
|
||||
utilities.header(["Allow NVMe UEFI Support"])
|
||||
print(
|
||||
"""
|
||||
For machines not natively supporting XHCI/USB 3.o,
|
||||
this option allows you to see and boot XHCI
|
||||
drive in OpenCore's picker
|
||||
|
||||
Not required if your machine natively supports USB 3.0
|
||||
|
||||
Note: You must have OpenCore on a bootable volume
|
||||
first, ie. USB 2.0 or SATA drive. Once loaded,
|
||||
OpenCore will enable XHCI support in it's picker
|
||||
"""
|
||||
)
|
||||
|
||||
change_menu = input("Enable XHCI Boot support?(y/n/q): ")
|
||||
if change_menu in {"y", "Y", "yes", "Yes"}:
|
||||
self.constants.xhci_boot = True
|
||||
elif change_menu in {"n", "N", "no", "No"}:
|
||||
self.constants.xhci_boot = False
|
||||
elif change_menu in {"q", "Q", "Quit", "quit"}:
|
||||
print("Returning to previous menu")
|
||||
else:
|
||||
self.allow_xhci()
|
||||
|
||||
def allow_wowl(self):
|
||||
utilities.cls()
|
||||
@@ -938,6 +992,26 @@ Supported Options:
|
||||
else:
|
||||
print("Invalid input, returning to previous menu")
|
||||
self.set_nvram_write()
|
||||
|
||||
def set_cc_support(self):
|
||||
utilities.cls()
|
||||
utilities.header(["Set Content Caching Support"])
|
||||
print(
|
||||
"""
|
||||
On systems spoofing via VMM, Content Caching is disabled by
|
||||
default by Apple. This option allows you to mask VMM from
|
||||
AssetCache.
|
||||
"""
|
||||
)
|
||||
change_menu = input("Set Content Caching Support (y/n/q): ")
|
||||
if change_menu in ["y", "Y", "yes", "Yes"]:
|
||||
self.constants.set_content_caching = True
|
||||
elif change_menu in ["n", "N", "no", "No"]:
|
||||
self.constants.set_content_caching = False
|
||||
elif change_menu in ["q", "Q", "Quit", "quit"]:
|
||||
print("Returning to previous menu")
|
||||
else:
|
||||
self.set_cc_support()
|
||||
|
||||
def credits(self):
|
||||
utilities.TUIOnlyPrint(
|
||||
@@ -1004,9 +1078,9 @@ system_profiler SPHardwareDataType | grep 'Model Identifier'
|
||||
no_unpatch = True
|
||||
change_menu = input("Patch System Volume?: ")
|
||||
if no_patch is not True and change_menu == "1":
|
||||
sys_patch.PatchSysVolume(self.constants.custom_model or self.constants.computer.real_model, self.constants).start_patch()
|
||||
sys_patch.PatchSysVolume(self.constants.custom_model or self.constants.computer.real_model, self.constants, None).start_patch()
|
||||
elif no_unpatch is not True and change_menu == "2":
|
||||
sys_patch.PatchSysVolume(self.constants.custom_model or self.constants.computer.real_model, self.constants).start_unpatch()
|
||||
sys_patch.PatchSysVolume(self.constants.custom_model or self.constants.computer.real_model, self.constants, None).start_unpatch()
|
||||
else:
|
||||
print("Returning to main menu")
|
||||
|
||||
@@ -1127,8 +1201,10 @@ system_profiler SPHardwareDataType | grep 'Model Identifier'
|
||||
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}", MenuOptions(self.constants.custom_model or self.constants.computer.real_model, self.constants).allow_firewire],
|
||||
[f"Set NVMe Boot:\tCurrently {self.constants.nvme_boot}", MenuOptions(self.constants.custom_model or self.constants.computer.real_model, self.constants).allow_nvme],
|
||||
[f"Set FireWire Boot:\t\tCurrently {self.constants.firewire_boot}", MenuOptions(self.constants.custom_model or self.constants.computer.real_model, self.constants).allow_firewire],
|
||||
[f"Set XHCI Boot:\t\tCurrently {self.constants.xhci_boot}", MenuOptions(self.constants.custom_model or self.constants.computer.real_model, self.constants).allow_xhci],
|
||||
[f"Set NVMe Boot:\t\tCurrently {self.constants.nvme_boot}", MenuOptions(self.constants.custom_model or self.constants.computer.real_model, self.constants).allow_nvme],
|
||||
[f"Set NVMe Power Management:\tCurrently {self.constants.allow_nvme_fixing}", MenuOptions(self.constants.custom_model or self.constants.computer.real_model, self.constants).allow_nvme_pwr_mgmt],
|
||||
]
|
||||
|
||||
for option in options:
|
||||
@@ -1164,6 +1240,7 @@ system_profiler SPHardwareDataType | grep 'Model Identifier'
|
||||
[f"Set 3rd Party SSD Support:\tCurrently {self.constants.allow_3rd_party_drives}", MenuOptions(self.constants.custom_model or self.constants.computer.real_model, self.constants).set_3rd_party_drices],
|
||||
[f"Set FeatureUnlock: \tCurrently {self.constants.fu_status}", MenuOptions(self.constants.custom_model or self.constants.computer.real_model, self.constants).set_fu_settings],
|
||||
[f"Set NVRAM Write:\t\tCurrently {self.constants.nvram_write}", MenuOptions(self.constants.custom_model or self.constants.computer.real_model, self.constants).set_nvram_write],
|
||||
[f"Set Content Caching:\tCurrently {self.constants.set_content_caching}", MenuOptions(self.constants.custom_model or self.constants.computer.real_model, self.constants).set_cc_support],
|
||||
]
|
||||
|
||||
for option in options:
|
||||
@@ -1231,12 +1308,16 @@ B. Exit
|
||||
options = []
|
||||
title = ["Select the macOS Installer you wish to download"]
|
||||
menu = utilities.TUIMenu(title, "Please select an option: ", auto_number=True, top_level=True)
|
||||
avalible_installers = installer.list_downloadable_macOS_installers(self.constants.payload_path, "DeveloperSeed")
|
||||
if avalible_installers:
|
||||
available_installers = installer.list_downloadable_macOS_installers(self.constants.payload_path, "DeveloperSeed")
|
||||
if available_installers:
|
||||
# Add mirror of 11.2.3 for users who want it
|
||||
options.append([f"macOS {mirror_data.Install_macOS_Big_Sur_11_2_3['Version']} ({mirror_data.Install_macOS_Big_Sur_11_2_3['Build']} - {utilities.human_fmt(mirror_data.Install_macOS_Big_Sur_11_2_3['Size'])} - {mirror_data.Install_macOS_Big_Sur_11_2_3['Source']})", lambda: self.download_install_assistant(mirror_data.Install_macOS_Big_Sur_11_2_3['Link'])])
|
||||
for app in avalible_installers:
|
||||
options.append([f"macOS {avalible_installers[app]['Version']} ({avalible_installers[app]['Build']} - {utilities.human_fmt(avalible_installers[app]['Size'])} - {avalible_installers[app]['Source']})", lambda x=app: self.download_install_assistant(avalible_installers[x]['Link'])])
|
||||
for app in available_installers:
|
||||
if available_installers[app]['Variant'] in ["DeveloperSeed", "PublicSeed"]:
|
||||
variant = " Beta"
|
||||
else:
|
||||
variant = ""
|
||||
options.append([f"macOS {available_installers[app]['Version']}{variant} ({available_installers[app]['Build']} - {utilities.human_fmt(available_installers[app]['Size'])} - {available_installers[app]['Source']})", lambda x=app: self.download_install_assistant(available_installers[x]['Link'])])
|
||||
for option in options:
|
||||
menu.add_menu_option(option[0], function=option[1])
|
||||
response = menu.start()
|
||||
@@ -1247,10 +1328,10 @@ B. Exit
|
||||
options = []
|
||||
title = ["Select the macOS Installer you wish to use"]
|
||||
menu = utilities.TUIMenu(title, "Please select an option: ", auto_number=True, top_level=True)
|
||||
avalible_installers = installer.list_local_macOS_installers()
|
||||
if avalible_installers:
|
||||
for app in avalible_installers:
|
||||
options.append([f"{avalible_installers[app]['Short Name']}: {avalible_installers[app]['Version']} ({avalible_installers[app]['Build']})", lambda x=app: self.list_disks(avalible_installers[x]['Path'])])
|
||||
available_installers = installer.list_local_macOS_installers()
|
||||
if available_installers:
|
||||
for app in available_installers:
|
||||
options.append([f"{available_installers[app]['Short Name']}: {available_installers[app]['Version']} ({available_installers[app]['Build']})", lambda x=app: self.list_disks(available_installers[x]['Path'])])
|
||||
for option in options:
|
||||
menu.add_menu_option(option[0], function=option[1])
|
||||
response = menu.start()
|
||||
|
||||
@@ -14,14 +14,15 @@ from data import os_data
|
||||
class Constants:
|
||||
def __init__(self):
|
||||
# Patcher Versioning
|
||||
self.patcher_version = "0.4.0" # OpenCore-Legacy-Patcher
|
||||
self.patcher_support_pkg_version = "0.2.9" # PatcherSupportPkg
|
||||
self.patcher_version = "0.4.2" # OpenCore-Legacy-Patcher
|
||||
self.patcher_support_pkg_version = "0.3.1" # PatcherSupportPkg
|
||||
self.url_patcher_support_pkg = "https://github.com/dortania/PatcherSupportPkg/releases/download/"
|
||||
self.nightly_url_patcher_support_pkg = "https://nightly.link/dortania/PatcherSupportPkg/workflows/build/master/"
|
||||
self.discord_link = "https://discord.gg/rqdPgH8xSN"
|
||||
self.guide_link = "https://dortania.github.io/OpenCore-Legacy-Patcher/"
|
||||
self.repo_link = "https://github.com/dortania/OpenCore-Legacy-Patcher"
|
||||
self.repo_link_latest = f"{self.repo_link}/releases/tag/{self.patcher_version}"
|
||||
self.copyright_date = "Copyright © 2020-2022 Dortania"
|
||||
|
||||
# OpenCore Versioning
|
||||
# https://github.com/acidanthera/OpenCorePkg
|
||||
@@ -67,6 +68,7 @@ class Constants:
|
||||
self.smcspoof_version = "1.0.0" # SMC-Spoof
|
||||
self.mce_version = "1.0.0" # AppleMCEReporterDisabler
|
||||
self.btspoof_version = "1.0.0" # Bluetooth-Spoof
|
||||
self.aspp_override_version = "1.0.0" # ACPI_SMC_PlatformPlugin Override
|
||||
|
||||
## Syncretic
|
||||
## https://forums.macrumors.com/members/syncretic.1173816/
|
||||
@@ -155,6 +157,7 @@ class Constants:
|
||||
## Boot Volume Settings
|
||||
self.firewire_boot = False # Allow macOS FireWire Boot
|
||||
self.nvme_boot = False # Allow UEFI NVMe Boot
|
||||
self.xhci_boot = False
|
||||
|
||||
## Graphics Settings
|
||||
self.metal_build = False # Set MXM Build support
|
||||
@@ -180,6 +183,8 @@ class Constants:
|
||||
self.walkthrough = False # Enable Walkthrough
|
||||
self.disable_connectdrivers = False # Disable ConnectDrivers (hibernation)
|
||||
self.allow_3rd_party_drives = True # Allow ThridPartyDrives quirk
|
||||
self.set_content_caching = False # Set Content Caching
|
||||
self.allow_nvme_fixing = True # Allow NVMe Kernel Space Patches
|
||||
|
||||
self.legacy_accel_support = [
|
||||
os_data.os_data.mojave,
|
||||
@@ -228,6 +233,10 @@ class Constants:
|
||||
@property
|
||||
def xhci_driver_path(self):
|
||||
return self.payload_path / Path("Drivers/XhciDxe.efi")
|
||||
|
||||
@property
|
||||
def usb_bus_driver_path(self):
|
||||
return self.payload_path / Path("Drivers/UsbBusDxe.efi")
|
||||
|
||||
@property
|
||||
def diags_launcher_path(self):
|
||||
@@ -333,6 +342,10 @@ class Constants:
|
||||
@property
|
||||
def btspoof_path(self):
|
||||
return self.payload_kexts_path / Path(f"Misc/Bluetooth-Spoof-v{self.btspoof_version}.zip")
|
||||
|
||||
@property
|
||||
def aspp_override_path(self):
|
||||
return self.payload_kexts_path / Path(f"Misc/ASPP-Override-v{self.aspp_override_version}.zip")
|
||||
|
||||
@property
|
||||
def nvmefix_path(self):
|
||||
|
||||
@@ -12,8 +12,22 @@ class generate_defaults:
|
||||
settings.amfi_status = True
|
||||
|
||||
if host_is_target:
|
||||
if settings.computer.usb_controllers:
|
||||
try:
|
||||
if smbios_data.smbios_dictionary[model]["CPU Generation"] < cpu_data.cpu_data.ivy_bridge.value:
|
||||
# Pre-Ivy do not natively support XHCI boot support
|
||||
# If we detect XHCI on older model, enable
|
||||
for controller in settings.computer.usb_controllers:
|
||||
if isinstance(controller, device_probe.XHCIController):
|
||||
settings.xhci_boot = True
|
||||
break
|
||||
except KeyError:
|
||||
pass
|
||||
if utilities.check_metal_support(device_probe, settings.computer) is False:
|
||||
settings.disable_cs_lv = True
|
||||
settings.secure_status = False
|
||||
settings.sip_status = False
|
||||
settings.allow_fv_root = True
|
||||
if settings.computer.gpus:
|
||||
for gpu in settings.computer.gpus:
|
||||
if gpu.arch == device_probe.NVIDIA.Archs.Kepler:
|
||||
@@ -73,6 +87,11 @@ class generate_defaults:
|
||||
settings.secure_status = False # Modified root volume
|
||||
settings.allow_fv_root = True # Allow FileVault on broken seal
|
||||
# settings.amfi_status = True # Signed bundles, Don't need to explicitly set currently
|
||||
|
||||
if "Book" in model:
|
||||
settings.set_content_caching = False
|
||||
else:
|
||||
settings.set_content_caching = True
|
||||
|
||||
custom_cpu_model_value = utilities.get_nvram("revcpuname", "4D1FDA02-38C7-4A6A-9CC6-4BCCA8B30102", decode=True)
|
||||
if custom_cpu_model_value is not None:
|
||||
@@ -90,13 +109,24 @@ class generate_defaults:
|
||||
# Users disabling TS2 most likely have a faulty dGPU
|
||||
# users can override this in settings
|
||||
settings.allow_ts2_accel = False
|
||||
|
||||
if smbios_data.smbios_dictionary[model]["CPU Generation"] < cpu_data.cpu_data.ivy_bridge.value and model != "MacPro5,1":
|
||||
# Sidecar and AirPlay to Mac only blacklist Ivy and newer (as well as MacPro5,1)
|
||||
# Avoid extra patching without benefit
|
||||
settings.fu_arguments = " -disable_sidecar_mac"
|
||||
else:
|
||||
settings.fu_arguments = None
|
||||
try:
|
||||
if smbios_data.smbios_dictionary[model]["CPU Generation"] < cpu_data.cpu_data.ivy_bridge.value and model != "MacPro5,1":
|
||||
# Sidecar and AirPlay to Mac only blacklist Ivy and newer (as well as MacPro5,1)
|
||||
# Avoid extra patching without benefit
|
||||
settings.fu_arguments = " -disable_sidecar_mac"
|
||||
else:
|
||||
settings.fu_arguments = None
|
||||
if smbios_data.smbios_dictionary[model]["CPU Generation"] >= cpu_data.cpu_data.skylake.value:
|
||||
# On 2016-2017 MacBook Pros, 15" devices used a stock Samsung SSD with IONVMeController
|
||||
# Technically this should be patched based on NVMeFix.kext logic,
|
||||
# however Apple deemed the SSD unsupported for enhanced performance
|
||||
# In addition, some upgraded NVMe drives still have issues with enhanced power management
|
||||
# Safest to disable by default, allow user to configure afterwards
|
||||
settings.allow_nvme_fixing = False
|
||||
else:
|
||||
settings.allow_nvme_fixing = True
|
||||
except KeyError:
|
||||
pass
|
||||
|
||||
# Check if running in RecoveryOS
|
||||
settings.recovery_status = utilities.check_recovery()
|
||||
|
||||
@@ -50,7 +50,10 @@ class PCIDevice:
|
||||
|
||||
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()
|
||||
model = properties["model"]
|
||||
if type(model) is bytes:
|
||||
model = model.strip(b"\0").decode()
|
||||
device.model = model
|
||||
if "acpi-path" in properties:
|
||||
device.acpi_path = properties["acpi-path"]
|
||||
device.populate_pci_path(entry)
|
||||
@@ -73,18 +76,19 @@ class PCIDevice:
|
||||
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]})")
|
||||
# Virtual PCI devices provide a botched IOService path (us.electronic.kext.vusb)
|
||||
# We only care about physical devices, so skip them
|
||||
try:
|
||||
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]})")
|
||||
except ValueError:
|
||||
break
|
||||
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
|
||||
@@ -158,6 +162,21 @@ class SATAController(PCIDevice):
|
||||
class SASController(PCIDevice):
|
||||
CLASS_CODE: ClassVar[int] = 0x010400
|
||||
|
||||
@dataclass
|
||||
class XHCIController(PCIDevice):
|
||||
CLASS_CODE: ClassVar[int] = 0x0c0330
|
||||
|
||||
@dataclass
|
||||
class EHCIController(PCIDevice):
|
||||
CLASS_CODE: ClassVar[int] = 0x0c0320
|
||||
|
||||
@dataclass
|
||||
class OHCIController(PCIDevice):
|
||||
CLASS_CODE: ClassVar[int] = 0x0c0310
|
||||
|
||||
@dataclass
|
||||
class UHCIController(PCIDevice):
|
||||
CLASS_CODE: ClassVar[int] = 0x0c0300
|
||||
|
||||
@dataclass
|
||||
class NVIDIA(GPU):
|
||||
@@ -339,6 +358,7 @@ class Computer:
|
||||
igpu: Optional[GPU] = None # Shortcut for IGPU
|
||||
dgpu: Optional[GPU] = None # Shortcut for GFX0
|
||||
storage: list[PCIDevice] = field(default_factory=list)
|
||||
usb_controllers: list[PCIDevice] = field(default_factory=list)
|
||||
wifi: Optional[WirelessCard] = None
|
||||
cpu: Optional[CPU] = None
|
||||
oclp_version: Optional[str] = None
|
||||
@@ -354,6 +374,7 @@ class Computer:
|
||||
computer.igpu_probe()
|
||||
computer.wifi_probe()
|
||||
computer.storage_probe()
|
||||
computer.usb_controller_probe()
|
||||
computer.smbios_probe()
|
||||
computer.cpu_probe()
|
||||
computer.bluetooth_probe()
|
||||
@@ -412,6 +433,50 @@ class Computer:
|
||||
self.wifi = vendor.from_ioregistry(device, anti_spoof=True) # type: ignore
|
||||
break
|
||||
ioreg.IOObjectRelease(device)
|
||||
|
||||
def usb_controller_probe(self):
|
||||
xhci_controllers = ioreg.ioiterator_to_list(
|
||||
ioreg.IOServiceGetMatchingServices(
|
||||
ioreg.kIOMasterPortDefault,
|
||||
{"IOProviderClass": "IOPCIDevice", "IOPropertyMatch": [{"class-code": binascii.a2b_hex(utilities.hexswap(hex(XHCIController.CLASS_CODE)[2:].zfill(8)))}]},
|
||||
None,
|
||||
)[1]
|
||||
)
|
||||
ehci_controllers = ioreg.ioiterator_to_list(
|
||||
ioreg.IOServiceGetMatchingServices(
|
||||
ioreg.kIOMasterPortDefault,
|
||||
{"IOProviderClass": "IOPCIDevice", "IOPropertyMatch": [{"class-code": binascii.a2b_hex(utilities.hexswap(hex(EHCIController.CLASS_CODE)[2:].zfill(8)))}]},
|
||||
None,
|
||||
)[1]
|
||||
)
|
||||
ohci_controllers = ioreg.ioiterator_to_list(
|
||||
ioreg.IOServiceGetMatchingServices(
|
||||
ioreg.kIOMasterPortDefault,
|
||||
{"IOProviderClass": "IOPCIDevice", "IOPropertyMatch": [{"class-code": binascii.a2b_hex(utilities.hexswap(hex(OHCIController.CLASS_CODE)[2:].zfill(8)))}]},
|
||||
None,
|
||||
)[1]
|
||||
)
|
||||
|
||||
uhci_controllers = ioreg.ioiterator_to_list(
|
||||
ioreg.IOServiceGetMatchingServices(
|
||||
ioreg.kIOMasterPortDefault,
|
||||
{"IOProviderClass": "IOPCIDevice", "IOPropertyMatch": [{"class-code": binascii.a2b_hex(utilities.hexswap(hex(UHCIController.CLASS_CODE)[2:].zfill(8)))}]},
|
||||
None,
|
||||
)[1]
|
||||
)
|
||||
for device in xhci_controllers:
|
||||
self.usb_controllers.append(XHCIController.from_ioregistry(device))
|
||||
ioreg.IOObjectRelease(device)
|
||||
for device in ehci_controllers:
|
||||
self.usb_controllers.append(EHCIController.from_ioregistry(device))
|
||||
ioreg.IOObjectRelease(device)
|
||||
for device in ohci_controllers:
|
||||
self.usb_controllers.append(OHCIController.from_ioregistry(device))
|
||||
ioreg.IOObjectRelease(device)
|
||||
for device in uhci_controllers:
|
||||
self.usb_controllers.append(UHCIController.from_ioregistry(device))
|
||||
ioreg.IOObjectRelease(device)
|
||||
|
||||
|
||||
def storage_probe(self):
|
||||
sata_controllers = ioreg.ioiterator_to_list(
|
||||
|
||||
@@ -12,26 +12,54 @@ def list_local_macOS_installers():
|
||||
|
||||
for application in Path("/Applications").iterdir():
|
||||
# Verify whether application has createinstallmedia
|
||||
if (Path("/Applications") / Path(application) / Path("Contents/Resources/createinstallmedia")).exists():
|
||||
plist = plistlib.load((Path("/Applications") / Path(application) / Path("Contents/Info.plist")).open("rb"))
|
||||
try:
|
||||
# Doesn't reflect true OS build, but best to report SDK in the event multiple installers are found with same version
|
||||
app_version = plist["DTPlatformVersion"]
|
||||
clean_name = plist["CFBundleDisplayName"]
|
||||
try:
|
||||
if (Path("/Applications") / Path(application) / Path("Contents/Resources/createinstallmedia")).exists():
|
||||
plist = plistlib.load((Path("/Applications") / Path(application) / Path("Contents/Info.plist")).open("rb"))
|
||||
try:
|
||||
app_sdk = plist["DTSDKBuild"]
|
||||
# Doesn't reflect true OS build, but best to report SDK in the event multiple installers are found with same version
|
||||
app_version = plist["DTPlatformVersion"]
|
||||
clean_name = plist["CFBundleDisplayName"]
|
||||
try:
|
||||
app_sdk = plist["DTSDKBuild"]
|
||||
except KeyError:
|
||||
app_sdk = "Unknown"
|
||||
|
||||
# app_version can sometimes report GM instead of the actual version
|
||||
# This is a workaround to get the actual version
|
||||
if app_version.startswith("GM"):
|
||||
try:
|
||||
app_version = int(app_sdk[:2])
|
||||
if app_version < 20:
|
||||
app_version = f"10.{app_version - 4}"
|
||||
else:
|
||||
app_version = f"{app_version - 9}.0"
|
||||
except ValueError:
|
||||
app_version = "Unknown"
|
||||
# Check if App Version is High Sierra or newer
|
||||
can_add = False
|
||||
if app_version.startswith("10."):
|
||||
app_sub_version = app_version.split(".")[1]
|
||||
if int(app_sub_version) >= 13:
|
||||
can_add = True
|
||||
else:
|
||||
can_add = False
|
||||
else:
|
||||
can_add = True
|
||||
if can_add is True:
|
||||
application_list.update({
|
||||
application: {
|
||||
"Short Name": clean_name,
|
||||
"Version": app_version,
|
||||
"Build": app_sdk,
|
||||
"Path": application,
|
||||
}
|
||||
})
|
||||
except KeyError:
|
||||
app_sdk = "Unknown"
|
||||
application_list.update({
|
||||
application: {
|
||||
"Short Name": clean_name,
|
||||
"Version": app_version,
|
||||
"Build": app_sdk,
|
||||
"Path": application,
|
||||
}
|
||||
})
|
||||
except KeyError:
|
||||
pass
|
||||
pass
|
||||
except PermissionError:
|
||||
pass
|
||||
# Sort Applications by version
|
||||
application_list = {k: v for k, v in sorted(application_list.items(), key=lambda item: item[1]["Version"])}
|
||||
return application_list
|
||||
|
||||
def create_installer(installer_path, volume_name):
|
||||
@@ -78,7 +106,7 @@ def install_macOS_installer(download_path):
|
||||
return False
|
||||
|
||||
def list_downloadable_macOS_installers(download_path, catalog):
|
||||
avalible_apps = {}
|
||||
available_apps = {}
|
||||
if catalog == "DeveloperSeed":
|
||||
link = "https://swscan.apple.com/content/catalogs/others/index-12seed-12-10.16-10.15-10.14-10.13-10.12-10.11-10.10-10.9-mountainlion-lion-snowleopard-leopard.merged-1.sucatalog.gz"
|
||||
elif catalog == "PublicSeed":
|
||||
@@ -99,18 +127,31 @@ def list_downloadable_macOS_installers(download_path, catalog):
|
||||
catalog_plist["Products"][item]["ExtendedMetaInfo"]["InstallAssistantPackageIdentifiers"]["BuildManifest"]
|
||||
|
||||
for bm_package in catalog_plist["Products"][item]["Packages"]:
|
||||
if "BuildManifest.plist" in bm_package["URL"]:
|
||||
utilities.download_file(bm_package["URL"], (Path(download_path) / Path("BuildManifest.plist")))
|
||||
build_plist = plistlib.load((Path(download_path) / Path("BuildManifest.plist")).open("rb"))
|
||||
version = build_plist["ProductVersion"]
|
||||
build = build_plist["ProductBuildVersion"]
|
||||
if "Info.plist" in bm_package["URL"] and "InstallInfo.plist" not in bm_package["URL"]:
|
||||
utilities.download_file(bm_package["URL"], (Path(download_path) / Path("Info.plist")))
|
||||
build_plist = plistlib.load((Path(download_path) / Path("Info.plist")).open("rb"))
|
||||
version = build_plist["MobileAssetProperties"]["OSVersion"]
|
||||
build = build_plist["MobileAssetProperties"]["Build"]
|
||||
try:
|
||||
catalog_url = build_plist["MobileAssetProperties"]["BridgeVersionInfo"]["CatalogURL"]
|
||||
if "beta" in catalog_url:
|
||||
catalog_url = "PublicSeed"
|
||||
elif "customerseed" in catalog_url:
|
||||
catalog_url = "CustomerSeed"
|
||||
elif "seed" in catalog_url:
|
||||
catalog_url = "DeveloperSeed"
|
||||
else:
|
||||
catalog_url = "Unknown"
|
||||
except KeyError:
|
||||
# Assume CustomerSeed if no catalog URL is found
|
||||
catalog_url = "CustomerSeed"
|
||||
for ia_package in catalog_plist["Products"][item]["Packages"]:
|
||||
if "InstallAssistant.pkg" in ia_package["URL"]:
|
||||
download_link = ia_package["URL"]
|
||||
size = ia_package["Size"]
|
||||
integrity = ia_package["IntegrityDataURL"]
|
||||
|
||||
avalible_apps.update({
|
||||
available_apps.update({
|
||||
item: {
|
||||
"Version": version,
|
||||
"Build": build,
|
||||
@@ -118,11 +159,12 @@ def list_downloadable_macOS_installers(download_path, catalog):
|
||||
"Size": size,
|
||||
"integrity": integrity,
|
||||
"Source": "Apple Inc.",
|
||||
"Variant": catalog_url,
|
||||
}
|
||||
})
|
||||
except KeyError:
|
||||
pass
|
||||
return avalible_apps
|
||||
return available_apps
|
||||
|
||||
def format_drive(disk_id):
|
||||
# Formats a disk for macOS install
|
||||
|
||||
@@ -12,40 +12,45 @@ import zipfile
|
||||
from pathlib import Path
|
||||
import sys
|
||||
|
||||
from resources import constants, device_probe, utilities, generate_smbios, sys_patch_download
|
||||
from data import sip_data, sys_patch_data, model_array, os_data, smbios_data, cpu_data
|
||||
from resources import constants, utilities, generate_smbios, sys_patch_download, sys_patch_detect
|
||||
from data import sip_data, sys_patch_data, os_data
|
||||
|
||||
|
||||
class PatchSysVolume:
|
||||
def __init__(self, model, versions):
|
||||
def __init__(self, model, versions, hardware_details=None):
|
||||
self.model = model
|
||||
self.constants: constants.Constants() = versions
|
||||
self.computer = self.constants.computer
|
||||
self.root_mount_path = None
|
||||
self.sip_enabled = True
|
||||
self.sbm_enabled = True
|
||||
self.amfi_enabled = True
|
||||
self.fv_enabled = True
|
||||
self.dosdude_patched = True
|
||||
self.nvidia_legacy = False
|
||||
self.kepler_gpu = False
|
||||
self.amd_ts1 = False
|
||||
self.amd_ts2 = False
|
||||
self.iron_gpu = False
|
||||
self.sandy_gpu = False
|
||||
self.ivy_gpu = False
|
||||
self.brightness_legacy = False
|
||||
self.legacy_audio = False
|
||||
self.legacy_wifi = False
|
||||
self.legacy_gmux = False
|
||||
self.legacy_keyboard_backlight = False
|
||||
self.added_legacy_kexts = False
|
||||
self.amfi_must_disable = False
|
||||
self.check_board_id = False
|
||||
self.bad_board_id = False
|
||||
self.no_patch = True
|
||||
self.validate = False
|
||||
self.supports_metal = False
|
||||
self.added_legacy_kexts = False
|
||||
|
||||
# GUI will detect hardware patches betfore starting PatchSysVolume()
|
||||
# However the TUI will not, so allow for data to be passed in manually avoiding multiple calls
|
||||
if hardware_details is None:
|
||||
hardware_details = sys_patch_detect.detect_root_patch(self.computer.real_model, self.constants).detect_patch_set()
|
||||
|
||||
self.amfi_must_disable = hardware_details["Settings: Requires AMFI exemption"]
|
||||
self.check_board_id = hardware_details["Settings: Requires Board ID validation"]
|
||||
self.sip_enabled = hardware_details["Validation: SIP is enabled"]
|
||||
self.sbm_enabled = hardware_details["Validation: SBM is enabled"]
|
||||
self.amfi_enabled = hardware_details["Validation: AMFI is enabled"]
|
||||
self.fv_enabled = hardware_details["Validation: FileVault is enabled"]
|
||||
self.dosdude_patched = hardware_details["Validation: System is dosdude1 patched"]
|
||||
self.bad_board_id = hardware_details[f"Validation: Board ID is unsupported \n({self.computer.reported_board_id})"]
|
||||
|
||||
self.nvidia_legacy = hardware_details["Graphics: Nvidia Tesla"]
|
||||
self.kepler_gpu = hardware_details["Graphics: Nvidia Kepler"]
|
||||
self.amd_ts1 = hardware_details["Graphics: AMD TeraScale 1"]
|
||||
self.amd_ts2 = hardware_details["Graphics: AMD TeraScale 2"]
|
||||
self.iron_gpu = hardware_details["Graphics: Intel Ironlake"]
|
||||
self.sandy_gpu = hardware_details["Graphics: Intel Sandy Bridge"]
|
||||
self.ivy_gpu = hardware_details["Graphics: Intel Ivy Bridge"]
|
||||
self.brightness_legacy = hardware_details["Brightness: Legacy Backlight Control"]
|
||||
self.legacy_audio = hardware_details["Audio: Legacy Realtek"]
|
||||
self.legacy_wifi = hardware_details["Networking: Legacy Wireless"]
|
||||
self.legacy_gmux = hardware_details["Miscellaneous: Legacy GMUX"]
|
||||
self.legacy_keyboard_backlight = hardware_details["Miscellaneous: Legacy Keyboard Backlight"]
|
||||
|
||||
if self.constants.detected_os > os_data.os_data.catalina:
|
||||
# Big Sur and newer use APFS snapshots
|
||||
@@ -212,6 +217,9 @@ class PatchSysVolume:
|
||||
print("- Failed to revert snapshot via bless, falling back on manual restoration")
|
||||
self.manual_root_patch_revert()
|
||||
else:
|
||||
if (Path(self.mount_application_support) / Path("SkyLightPlugins")).exists():
|
||||
print("- Found SkylightPlugins folder, removing")
|
||||
utilities.process_status(utilities.elevated(["rm", "-rf", f"{self.mount_application_support}/SkyLightPlugins"], stdout=subprocess.PIPE, stderr=subprocess.STDOUT))
|
||||
print("- Unpatching complete")
|
||||
print("\nPlease reboot the machine for patches to take effect")
|
||||
else:
|
||||
@@ -266,13 +274,6 @@ class PatchSysVolume:
|
||||
utilities.process_status(utilities.elevated(["update_dyld_shared_cache", "-root", f"{self.mount_location}/"]))
|
||||
print("- Patching complete")
|
||||
print("\nPlease reboot the machine for patches to take effect")
|
||||
if self.amd_ts2 is True and self.constants.allow_ts2_accel is True:
|
||||
print(
|
||||
"""\nPlease note that with ATI TeraScale 2 GPUs, you may experience colour strobing
|
||||
on reboot. Please use SwitchResX or ResXtreme to force 1 million colours on your
|
||||
monitor to fix this. If you are epileptic, please ask for someone to aid you or
|
||||
set million colour before rebooting"""
|
||||
)
|
||||
if self.constants.gui_mode is False:
|
||||
input("\nPress [ENTER] to continue")
|
||||
|
||||
@@ -682,123 +683,8 @@ set million colour before rebooting"""
|
||||
input("\nPress enter to continue")
|
||||
return None
|
||||
|
||||
def detect_gpus(self):
|
||||
gpus = self.constants.computer.gpus
|
||||
if self.constants.moj_cat_accel is True:
|
||||
non_metal_os = os_data.os_data.high_sierra
|
||||
else:
|
||||
non_metal_os = os_data.os_data.catalina
|
||||
for i, gpu in enumerate(gpus):
|
||||
if gpu.class_code and gpu.class_code != 0xFFFFFFFF:
|
||||
print(f"- Found GPU ({i}): {utilities.friendly_hex(gpu.vendor_id)}:{utilities.friendly_hex(gpu.device_id)}")
|
||||
if gpu.arch in [device_probe.NVIDIA.Archs.Tesla, device_probe.NVIDIA.Archs.Fermi]:
|
||||
if self.constants.detected_os > non_metal_os:
|
||||
self.nvidia_legacy = True
|
||||
self.amfi_must_disable = True
|
||||
# self.legacy_keyboard_backlight = self.check_legacy_keyboard_backlight()
|
||||
elif gpu.arch == device_probe.NVIDIA.Archs.Kepler:
|
||||
if self.constants.detected_os > os_data.os_data.big_sur:
|
||||
# Kepler drivers were dropped with Beta 7
|
||||
# 12.0 Beta 5: 21.0.0 - 21A5304g
|
||||
# 12.0 Beta 6: 21.1.0 - 21A5506j
|
||||
# 12.0 Beta 7: 21.1.0 - 21A5522h
|
||||
if self.constants.detected_os == os_data.os_data.monterey and self.constants.detected_os_minor > 0:
|
||||
if "21A5506j" not in self.constants.detected_os_build:
|
||||
self.kepler_gpu = True
|
||||
self.supports_metal = True
|
||||
elif gpu.arch == device_probe.AMD.Archs.TeraScale_1:
|
||||
if self.constants.detected_os > non_metal_os:
|
||||
self.amd_ts1 = True
|
||||
self.amfi_must_disable = True
|
||||
elif gpu.arch == device_probe.AMD.Archs.TeraScale_2:
|
||||
if self.constants.detected_os > non_metal_os:
|
||||
self.amd_ts2 = True
|
||||
self.amfi_must_disable = True
|
||||
elif gpu.arch == device_probe.Intel.Archs.Iron_Lake:
|
||||
if self.constants.detected_os > non_metal_os:
|
||||
self.iron_gpu = True
|
||||
self.amfi_must_disable = True
|
||||
elif gpu.arch == device_probe.Intel.Archs.Sandy_Bridge:
|
||||
if self.constants.detected_os > non_metal_os:
|
||||
self.sandy_gpu = True
|
||||
self.amfi_must_disable = True
|
||||
self.check_board_id = True
|
||||
elif gpu.arch == device_probe.Intel.Archs.Ivy_Bridge:
|
||||
if self.constants.detected_os > os_data.os_data.big_sur:
|
||||
self.ivy_gpu = True
|
||||
self.supports_metal = True
|
||||
if self.supports_metal is True:
|
||||
# Avoid patching Metal and non-Metal GPUs if both present, prioritize Metal GPU
|
||||
# Main concerns are for iMac12,x with Sandy iGPU and Kepler dGPU
|
||||
self.nvidia_legacy = False
|
||||
self.amd_ts1 = False
|
||||
self.amd_ts2 = False
|
||||
self.iron_gpu = False
|
||||
self.sandy_gpu = False
|
||||
|
||||
def check_dgpu_status(self):
|
||||
dgpu = self.constants.computer.dgpu
|
||||
if dgpu:
|
||||
if dgpu.class_code and dgpu.class_code == 0xFFFFFFFF:
|
||||
# If dGPU is disabled via class-codes, assume demuxed
|
||||
return False
|
||||
return True
|
||||
return False
|
||||
|
||||
def detect_demux(self):
|
||||
# If GFX0 is missing, assume machine was demuxed
|
||||
# -wegnoegpu would also trigger this, so ensure arg is not present
|
||||
if not "-wegnoegpu" in (utilities.get_nvram("boot-args") or ""):
|
||||
igpu = self.constants.computer.igpu
|
||||
dgpu = self.check_dgpu_status()
|
||||
if igpu and not dgpu:
|
||||
return True
|
||||
return False
|
||||
|
||||
def check_legacy_keyboard_backlight(self):
|
||||
# With Big Sur and newer, Skylight patch set unfortunately breaks native keyboard backlight
|
||||
# Penryn Macs are able to re-enable the keyboard backlight by simply running '/usr/libexec/TouchBarServer'
|
||||
# For Arrendale and newer, this has no effect.
|
||||
if self.model.startswith("MacBookPro") or self.model.startswith("MacBookAir"):
|
||||
# non-Metal MacBooks never had keyboard backlight
|
||||
if smbios_data.smbios_dictionary[self.model]["CPU Generation"] <= cpu_data.cpu_data.penryn.value:
|
||||
if self.constants.detected_os > os_data.os_data.catalina:
|
||||
return True
|
||||
return False
|
||||
|
||||
def detect_patch_set(self):
|
||||
self.detect_gpus()
|
||||
if self.model in model_array.LegacyBrightness:
|
||||
if self.constants.detected_os > os_data.os_data.catalina:
|
||||
self.brightness_legacy = True
|
||||
|
||||
if self.model in ["iMac7,1", "iMac8,1"] or (self.model in model_array.LegacyAudio and utilities.check_kext_loaded("AppleALC", self.constants.detected_os) is False):
|
||||
# Special hack for systems with botched GOPs
|
||||
# TL;DR: No Boot Screen breaks Lilu, therefore breaking audio
|
||||
if self.constants.detected_os > os_data.os_data.catalina:
|
||||
self.legacy_audio = True
|
||||
|
||||
if (
|
||||
isinstance(self.constants.computer.wifi, device_probe.Broadcom)
|
||||
and self.constants.computer.wifi.chipset in [device_probe.Broadcom.Chipsets.AirPortBrcm4331, device_probe.Broadcom.Chipsets.AirPortBrcm43224]
|
||||
) or (isinstance(self.constants.computer.wifi, device_probe.Atheros) and self.constants.computer.wifi.chipset == device_probe.Atheros.Chipsets.AirPortAtheros40):
|
||||
if self.constants.detected_os > os_data.os_data.big_sur:
|
||||
self.legacy_wifi = True
|
||||
|
||||
# if self.model in ["MacBookPro5,1", "MacBookPro5,2", "MacBookPro5,3", "MacBookPro8,2", "MacBookPro8,3"]:
|
||||
if self.model in ["MacBookPro8,2", "MacBookPro8,3"]:
|
||||
# Sierra uses a legacy GMUX control method needed for dGPU switching on MacBookPro5,x
|
||||
# Same method is also used for demuxed machines
|
||||
# Note that MacBookPro5,x machines are extremely unstable with this patch set, so disabled until investigated further
|
||||
# Ref: https://github.com/dortania/OpenCore-Legacy-Patcher/files/7360909/KP-b10-030.txt
|
||||
if self.constants.detected_os > os_data.os_data.high_sierra:
|
||||
if self.model in ["MacBookPro8,2", "MacBookPro8,3"]:
|
||||
# Ref: https://doslabelectronics.com/Demux.html
|
||||
if self.detect_demux() is True:
|
||||
self.legacy_gmux = True
|
||||
else:
|
||||
self.legacy_gmux = True
|
||||
|
||||
utilities.cls()
|
||||
print("The following patches will be applied:")
|
||||
if self.nvidia_legacy is True:
|
||||
@@ -850,7 +736,6 @@ set million colour before rebooting"""
|
||||
sip_value = (
|
||||
"For Hackintoshes, please set csr-active-config to '030A0000' (0xA03)\nFor non-OpenCore Macs, please run 'csrutil disable' and \n'csrutil authenticated-root disable' in RecoveryOS"
|
||||
)
|
||||
self.sip_enabled, self.sbm_enabled, self.amfi_enabled, self.fv_enabled, self.dosdude_patched = utilities.patching_status(sip, self.constants.detected_os)
|
||||
if self.sip_enabled is True:
|
||||
print("\nCannot patch! Please disable System Integrity Protection (SIP).")
|
||||
print("Disable SIP in Patcher Settings and Rebuild OpenCore\n")
|
||||
@@ -928,3 +813,5 @@ set million colour before rebooting"""
|
||||
self.find_mount_root_vol(False)
|
||||
if self.constants.gui_mode is False:
|
||||
input("\nPress [ENTER] to return to the main menu")
|
||||
elif self.constants.gui_mode is False:
|
||||
input("\nPress [ENTER] to return to the main menu")
|
||||
|
||||
@@ -173,10 +173,10 @@ class detect_root_patch:
|
||||
"Validation: Patching Possible": self.verify_patch_allowed(),
|
||||
"Validation: SIP is enabled": self.sip_enabled,
|
||||
"Validation: SBM is enabled": self.sbm_enabled,
|
||||
"Validation: AMFI is enabled": self.amfi_enabled,
|
||||
"Validation: AMFI is enabled": self.amfi_enabled if self.amfi_must_disable else False,
|
||||
"Validation: FileVault is enabled": self.fv_enabled,
|
||||
"Validation: System is dosdude1 patched": self.dosdude_patched,
|
||||
"Validation: Board ID is unsupported": self.bad_board_id,
|
||||
f"Validation: Board ID is unsupported \n({self.computer.reported_board_id})": self.bad_board_id,
|
||||
}
|
||||
|
||||
return self.root_patch_dict
|
||||
|
||||
@@ -8,11 +8,13 @@ def validate(settings):
|
||||
|
||||
valid_dumps = [
|
||||
example_data.MacBookPro.MacBookPro92_Stock,
|
||||
example_data.MacBookPro.MacBookPro111_Stock,
|
||||
# example_data.MacBookPro.MacBookPro171_Stock,
|
||||
# example_data.Macmini.Macmini91_Stock,
|
||||
example_data.iMac.iMac81_Stock,
|
||||
example_data.iMac.iMac112_Stock,
|
||||
example_data.iMac.iMac122_Upgraded,
|
||||
example_data.iMac.iMac122_Upgraded_Nvidia,
|
||||
example_data.iMac.iMac151_Stock,
|
||||
example_data.MacPro.MacPro31_Stock,
|
||||
example_data.MacPro.MacPro31_Upgrade,
|
||||
@@ -23,6 +25,11 @@ def validate(settings):
|
||||
example_data.MacPro.MacPro41_51__Flashed_Modern_AMD,
|
||||
]
|
||||
|
||||
valid_dumps_native = [
|
||||
example_data.iMac.iMac201_Stock,
|
||||
example_data.MacBookPro.MacBookPro141_SSD_Upgrade,
|
||||
]
|
||||
|
||||
settings.validate = True
|
||||
|
||||
def build_prebuilt():
|
||||
|
||||