For those who are interested in learning more about how to create custom SSDTs to patch your System ACPI, you may be looking at the SSDTs I included in the OC EFI attached to
Post #1 and you're wondering why they're different from the Dortania pre-built SSDTs and why they are sometimes different from other OC SSDT ACPI patches.
- Dortania SSDTs are created to support multiple motherboards which have different ACPI Device names ( e.g. the HP EliteDesk 800 G4 Mini DSDT uses Device (PRxx) to reference CPUs while other motherboard DSDTs may use Device (CPUx) or Device (CPxx) ). Inspection of the extracted HP EliteDesk 800 G4 ACPI (including DSDT.aml and other extracted SSDTs) reveals that the G4 Mini ACPI refers to the CPUs as Device (PRxx) in Scope _SB_. No other CPU device references / scopes are needed in the SSDT-PLUG for the G4 Mini (which is why I have removed them). Since my SSDTs are specific to the EliteDesk 800 G4 Mini, they may not work in other systems. To properly patch a different system's ACPI, you should extract and inspect the System ACPI to determine the necessary patches.
- Some posted ACPI patches include definition of Method (DTGP). This is a method found in the ACPI of real Macs. Unless your ACPI Method (_DSM) patches use Method (DTGP), defining this method is unnecessary. My _DSM patches do not use DTGP and thus my SSDTs do not require definition of DTGP. You'll find other posted ACPI patches that define Method (DTGP) but never use it. This isn't "wrong" - it's just unnecessary.
- Some posted ACPI patches have an extensive list of unnecessary "External" declarations, including External declarations of the very devices / objects that they define. External declarations of objects are only necessary when you need to tell the iASL compiler that undefined objects are defined elsewhere in the System ACPI. If the object is being defined for the first time in an SSDT, specifying an External declaration of this object in the SSDT is incorrect. For example, the declaration of "External (MCHC, DeviceObj) in the very SSDT that defines Device (MCHC) is incorrect (MCHC is not defined anywhere else in the System ACPI). For this reason, the External declarations in the SSDTs in the OC EFI attached to Post #1 are minimal.
- Why do some SSDTs included code that is conditional on _OSI("Darwin") and some do not? _OSI("Darwin") is an ACPI call that returns TRUE when a system is running macOS. If you are multi-booting macOS and any other OS and your boot loader injects your patched ACPI for every booted OS, then your ACPI patches should include _OSI("Darwin") conditions so that your macOS-specific patches are only injected when running macOS. I dual-boot macOS and Windows, but I press F9 at startup on the rare instances when I want to boot Windows, so OC boot loader does not inject my ACPI patches when I run Windows. If you are using OC to boot macOS and other OSes, you will need to inspect and in some cases modify my posted ACPI patches (custom SSDTs) to make sure that every macOS-specific ACPI patch is conditional on _OSI("Darwin").
If you actually took the time to read this post, then you might be interested in testing your new knowledge. Find the unnecessary External declaration in my SSDTs posted in the OC EFI attached to Post #1. If you find the mistake, give this post a Thumbs Up.