Suite a son apparition, peu avant l’update 10.5.6, le patching du DSDT est rapidement devenue une alternative au device property strings ( Les GFX-Strings: méthodes et applications ) introduient par PC EFI. En effet le DSDT a l’avantage de pouvoir regroupé des «fix» et l’injection des périphériques dans le registre. Grâce a certaine modification du DSDT certaine machine sont maintenant capable de faire tourné OSX convenablement sans avoir a recourir à des solutions boiteuses et voir même dans certain cas au flashage du BIOS.
Petit rappel des faits :
L'énorme avantage que procure le DSDT est de pouvoir charger l’extension du noyeau AppleIntelCPUPowerManagement.kext longtemps redoutée par tous les Mhack users. En effet jusqu’alors on ne pouvait charger ce kext sans voir sa machine planter. Cette grande avancée dans le monde d’ OSx86 est appelée l’ HPET fix. Dans la pratique l’HPET fix permet de faire les mise à jour système sans avoir a trop ce soucier du fait que le système redémarrera ou pas.
Même si cela reste à l’heure actuelle très expérimental, il en découle aujourd’hui la possibilité de pouvoir utiliser le speedstep «vanilla» comme sur un vrai Mac.
Les outils du DSDT :
Il en existe plusieurs, avec une interface graphique ou non. Les plus utiles sont :
- iasl : pour extraire, compiler et decompiler votre DSDT.
- iaslme : une version graphique de iasl pour compiler et decompiler simplement.
- DSDT Patcher : un script pour extraire et appliqué les pacths rudimentaire pour OS X.
- DSDTPatcherGUI : une version graphique DSDT Patcher.
- ACPI Patcher : un magnifique programme écrit par notre compatriote KOALALA ( ACPI [DSDT] Patcher de KOALALA )
La méthode DTGP :
C’est sur cette petite partie de code incluse dans le DSDT des machines Apple que repose l’injection des périphérique PC dans le registre d’OSX. Cette méthode utilisée sporadiquement par Apple permet d’injecter les données dans le registre (IOReg) à des adresses bien précises. Voici la portion de code qu’il faut coller dans votre DSDT sous le «Scope (_SB)» :
Method (DTGP, 5, NotSerialized)
{
If (LEqual (Arg0, Buffer (0x10)
{
/* 0000 */ 0xC6, 0xB7, 0xB5, 0xA0, 0x18, 0x13, 0x1C, 0x44,
/* 0008 */ 0xB0, 0xC9, 0xFE, 0x69, 0x5E, 0xAF, 0x94, 0x9B
}))
{
If (LEqual (Arg1, One))
{
If (LEqual (Arg2, Zero))
{
Store (Buffer (One)
{
0x03
}, Arg4)
Return (One)
}
If (LEqual (Arg2, One))
{
Return (One)
}
}
}
}
Une fois ce morceau de code placé au bon endroit dans votre fichier DSDT.dsl vous allez pouvoir injecter tous un tas d’informations en mémoire. Pour ce faire il faudra identifier vos périphériques dans le registre grâce à IORegistryEplorer. Le nom des «DEVICE» est susceptible de changer d’un fabriquant d’ordinateur à l’autre, je prendrai ici en exemple le DEVICE (GFX0) qui correspond à la carte graphique du MSi Wind. Une fois votre «DEVICE» identifié vous allez pouvoir coller une nouvelle portion de code dans votre fichier DSDT. Cette portion de code invoque celle que l’on a inséré précédemment : la «METHOD (DTGP)»
Device (GFX0)
{
Name (_ADR, 0x00020000) // code orignal de MSi Wind
Method (_DSM, 4, NotSerialized) // debut de l’injection dans IOReg
{
Store (Package (0x0C)
{
"AAPL,slot-name",
Buffer (0x09)
{
"Built in"
},
"AAPL,HasPanel",
Buffer (0x04)
{
0x01, 0x00, 0x00, 0x00
},
"device_type",
Buffer (0x08)
{
"Display"
},
"model",
Buffer (0x34)
{
"Intel 945GME Express Integrated Graphics Controller"
},
"name",
Buffer (0x1A)
{
"VGA compatible controller"
},
"built-in",
Buffer (One)
{
0x01
}
}, Local0)
DTGP (Arg0, Arg1, Arg2, Arg3, RefOf (Local0))
Return (Local0)
} // fin de l’injection dans IOReg
Method (_DOS, 1, NotSerialized) // suite du code original du MSi Wind
Grâce à cet échantillon de code on peut remplacer Natit.kext ou un GFX string pour une Intel GMA 950. Le but ici n’est pas d’expliquer en détail les informations à injecter pour faire fonctionner votre carte graphique via le DSDT. Grâce au superbe programme de Koalala «ACPI Pacther» vous pourrez dans la plus part des cas injecter votre carte graphique automatiquement. En outre sachez qu’en dérivant les informations contenues dans la plist de votre injecteur favoris, ou celle de votre GFX String vous serez capable d'écrire vous même votre code DSDT.
Voici une liste des informations rudimentaire à savoir pour éditer votre DSDT :
- Store (Package (0x0C) : définit le nombre d’entrées qui seront injectées, une clé et sa valeur. Le tout doit être converti en hexadécimal. Ici 0x0C = 12
- Buffer (0x09) : définit le nombre de caractères dans la valeur. losqu’il s’agit de text il faut ajouté 1. ex : Built in = 8 + 1 = 9 en hexadécimal 0x09.
- Lorsque la valeur s'exprime en chiffre ( 0x01, 0x00, 0x00, 0x00 ) là on défini chaque groupe 0x00 par 1. Donc 0x01, 0x00, 0x00, 0x00 = Buffer (0x04)
- Les accolades définissent le début { et la fin } d’un champs, tandis que les virgules indiquent une clé ou une valeur a suivre.
- Pour convertir les valeurs décimales en hexadécimales vous pouvez utiliser la calculette d’OS X en mode programmeur.
L’injection de vos périphériques PCI :
Pour lister vos cartes et périphériques PCI intégrés dans les informations système il suffit d’utiliser les clé suivantes :
"AAPL,slot-name", : Nom et numéro du slot (ex: Built in ou PCI Slot 1)
"model", : Nom du modèle de votre équipement (ex: Intel GMA 950)
"name", : Nom commun du matériel (ex: VGA compatible controller)
"device_type", : Nom système de votre carte (ex: ethernet, display, AirPort)
Une autre méthode pour injecter les ports PCI de votre carte mère existe. Elle est egalement utilisée par Apple dans le DSDT des Mac Pro et des iMac :
Name (_SUN, 0x01) : doit etre inseré sous la ligne Name (_ADR, 0xXXX)
Cette technique vient en remplacement de "AAPL,slot-name" et en complement des entrées "model" "name" et "device_type", cependant elle n'est pas compatible avec toutes les cartes mères. Mais rassurez vous il n'y a aucun risque à l'essayer.
Voici un exemple de son utilisation dans la table DSDT de l'ACPI dans Mac Pro 4,1. Ici elle sert a déclarer le slot PCI numero trois dans les informations système.
Device (PXS3)
{
Name (_ADR, 0xFFFF)
Name (_SUN, 0x03)
}
Voiçi un appercu du resultat de l'injection des device PCI du MSi Wind dans IOReg :
Fichiers joints et ressources liées a l'utilisation du DSDT sous OS X:
Exemple de DSDT modifié pour le MSi Wind U100
Topic sur l'injection des device ID via le DSDT
IaslMe de cVaD pour compiler et decompiler facilement votre DSDT
Quelque DSDT et IOReg de vrai Mac à prendre en exemple
DSDTPatcher GUI : une interface graphique pour extraire facilement votre table DSDT
| Patcher l'extension AppleHDA (de A Ã Z) | GFX strings pour les GTX 260/280 |
|---|



Commentaires
Merci!
pour le moment je le laisse en configuration auto via DSDT_Patcher :(
j'espère percer mes lacunes sur ce fichier, car ça m'a l'air asser intéressant...
La fonction première reste bien sur de régler des problèmes lié a la gestion d'énergie (ACPI) mais on peut également profité de ce fichier pour injecter des données dans le registre.
On peut aussi ce documenter sur la question ici :
www.acpi.info/
A+
Petite astuce :
On peut laisser le soin au compileur (iasl) de calculer les "packages" et les "buffer" comme ceci :
Citer :
maximum - minimum + 1 = lenght
a calculer avec la calculatrice de OS X en mode programmeur (pour le hex)