Guide: OSI-Checks auslagern in eigene Methode

  • Ich bin bei der Recherche zu Thunderbolt patching für Laptops auf eine Repo gestoßen, in dem der Autor der Config vor Allem durch seine Skills im Bereich ACPI beeindruckt: https://github.com/benbender/x1c6-hackintosh


    Bei der Ansicht seiner ACPI tables bin ich dann auf das gestoßen: SSDT-UTLS.


    In die Tabelle hat der Autor u.a. den OSI-Check für macOS als Methode ausgelagert. Ich habe mir daraus mal eine Tabelle SSDT-OSDW gebastelt:



    Somit muss der eigentliche macOS-Check nicht mehr in jeder einzelnen Methode erneut in jede SSDT eingebaut werden, sondern kann zentral über OSDW() erfolgen. Das reduziert Redundanz und potenzielle Fehlerquellen (Stichwort: DRY).


    Statt also wiederholt Konstrukte wie:


    Code
    1. If (_OSI ("Darwin")) { ... }


    zu verwenden, kann in anderen SSDTs oder Methoden einfach auf OSDW() zurückgegriffen werden, z. B.:


    Code
    1. If (OSDW()) { ... }


    Das Konzept ähnelt funktionaler Abstraktion aus der Softwareentwicklung: Eine häufig benötigte Logik wird einmal sauber gekapselt und anschließend überall wiederverwendet. Der Ansatz ist sehr elegant, da sich Plattform-spezifische Abfragen klar von der eigentlichen Patch-Logik trennen lassen. Gerade, wenn man viele und teils komplexe ACPI-Patches (z. B. für Thunderbolt, USB, Power Management oder Geräte-Disablement) iverwendet.


    Ich habe dass dann mal auf 2 Systemen ausprobiert und die ACPI Tables angpapasst. Hier ein Beispiel für SSDT-EC, vorher:


    nachher:



    Funktional ändert sich dabei nichts, aber die zentrale OSDW()-Methode sorgt anscheinend für konsistente, einheitliche ACPI-Aufrufe, was bei den beiden getesteten Systemen dazu führt, dass der Shutdown schneller abläuft und sich die Systeme insgesamt „snappier“ anfühlen. Aber testet es selbst. Vorher EFI Backup anlegen nicht vergessen ;)


    Wichtig: die SSDT-OSDW muss vor allen anderen Tables geladen werden, die die Metthode aufrufen. In RL quasi: SSDT-DMAR (falls custom), dann SSDT-OSDW, dann der Rest.

  • Gut abgeschaut. Ist so in der originalen SSDT zu Thunderbolt von Apple drin. Dort wird auf die externe OSDW Methode verwiesen, die in der originalen DSDT des Macs steckt. Dort wiederum wird nicht direkt OSI abgefragt, sondern die Werte von PINI/INI und deren OSI Abfrage übergeben. Hatte ich vor vielen Jahren auch schonmal ähnlich, in meiner DSDT zum QUO-Board. Letztendlich haben wir da alle von Apple abgeschrieben, ich würde da nicht ne Urheberschaft anmelden wollen. Zum Beispiel ruft Apple ebenfalls über ne _DSM Methode die externe DTGP Methode auf, die ebenfalls in der DSDT steckt. Die hatte auch mal irgendwann ein ehemaliger User dieses Forums kopiert und dann in eine SSDT gepackt und als seins ausgegeben. Also im Header mit seinem Namen, nur die DTGP Methode von Apple drin. Dort mit Schreibfehler DTPG statt DTGP. Lag so auch ewig bei Acidanthera rum …

    Mac Studio 2025 Apple M3-Ultra • 256GB RAM • CPU 32Core (24 Leistung, 8 Effizienz) • GPU 80Core Metal4 • BMD UltraStudio 4K Extreme 3

    ASUS WS X299 SAGE/10G i9-10980XE • DDR4 64GB • SSD 970 PRO 1TB • Thunderbolt3 Titan Ridge • 2x AMD Radeon VII • BMD DeckLink 4K Extreme 12G

    ASUS PRIME X299-DELUXE i9-9940X • DDR4 64GB • SSD 960 PRO 1TB • Thunderbolt3 Titan Ridge • 2x AMD Radeon RX Vega 64 • BMD Intensity Pro 4K


    Ordnung ist die primitivste Form von Chaos. (Hans-Jürgen Quadbeck-Seeger)

  • ST3R30

    Changed the title of the thread from “OSI-Checks auslagern in eigene Methode” to “Guide: OSI-Checks auslagern in eigene Methode”.