Jump to content

Clover "patches"


VMonHeros
 Share

3 posts in this topic

Recommended Posts

Bonjour à tous. J'ai posé déjà cette question en anglais sans grand succès (bon, juste avant la première bêta de Sierra, ceci explique peut être cela).

 

 

J'essaie de comprendre comment Clover patche le DSDT (et le SSDTs) grâce aux définitions de la section "patches" du fichier config.plist. J'essaie d'utiliser la méthode "hot patches" de Rehabman (donc avec la création de nouveaux fichiers externes SSDT et le renommage de certaines méthodes, variables dans le DSDT pour accéder aux méthodes , variables "modifiées" dans les nouveaux SSDT. Cette méthode est intéressante car elle survit aux upgrades de BIOS, mais aussi car je la trouve très lisible (avec les SSDTs externes qui contiennent nos modifications).

 

Voici les deux "points" qui posent problème. C'est un extract d'un fichier config.plist de Rehabman (quelques "patches").

 

  • Quelques patchs DSDT tels que "rename GFX0 to IGPU" peuvent être remplacé par ce binary patch

<key>Comment</key>

<string>change GFX0 to IGPU</string>

<key>Find</key>

<data>R0ZYMA==</data>

<key>Replace</key>

<data>SUdQVQ==</data>

 

Celui-ci est facile à suivre (pas vraiment de problème) . C'est un simple rechercher/remplacer sur tout le DSDT (et SSDTs) de GFX0 (R0ZYMA==) en IGPU (SUdQVQ==), les valeurs à rechercher/remplacer étant codées en Base64.

 

  • Des méthodes existantes comme GPRW peuvent être remplacées. Tout d'abord, la méthode initiale est renommée en XPRW. Ensuite, dans un petit SSDT "externe" nous déclarerons la nouvelle méthode  "GPRW" de remplacement.

<key>Comment</key>

<string>change Method(GPRW,2,N) to XPRW</string>

<key>Find</key>

<data>R1BSVwI=</data>

<key>Replace</key>

<data>WFBSVwI=</data>

​C'est là que ça coince... Comme peut-on être sûr que l'on ne modifie bien que le "GPRW" de la déclaration de la méthode en "XPRW", et non sa future invocation dans le DSDT qui elle doit bien rester à GPRW (et donc invoquer le nouveau GPRW définit dans le nouvel SSDT). Base64 R1BSVwI= c'est "simplement" GPRW (je ne vois pas de Méthode) avec les outils de décodage Base64 que j'utilise (outils web). Donc comment marche ce rechercher/remplacer... Je sèche là.

 

​C'est vraiment puissant comme moyen de modification, mais les explications de Slice sont un peu juste pour moi... J'ai du rater quelque chose...

 

Merci d'avance pour vos lumières !!!

 

Link to comment
Share on other sites

Merci pour ta réponse, mais le "problème" n'est pas là.

 

Dans les logs, on voit bien Clover patcher le DSDT et les SSDTs (enfin, les OEM, pas ceux que l'on "ajoute" nous même sous ACPI\Patched)... C'est déjà une subtilité car Clover patche bien un DSDT dans ACPI\Patched du moment bien sur qu'on lui demande de lire un DSDT modifié.

 

Mon problème, c'est que tu as plusieurs fois la chaine de caractère GPRW dans le DSDT et les SSDTs. Une fois dans sa définition, Method (GPRW etc...), et plusieurs fois en tant "qu'utilisation", invoquée comme par exemple GPRW (0x6D, 0x03). Le patch Clover du plist ne change que le GPRW de la définition (Method), et pas les autres (c'est bien ce qu'il faut pour que l'appel GPRW puisse se faire sur la nouvelle méthode GPRW déclaré dans le nouveau SSDT => bonne idée que Clover ne patche pas les SSDT sous ACPI\Patched sinon on aurait un problème)...

 

Exemple de mon DSDT 

 

Method (GPRW, 2, NotSerialized)

        {
            PRWP [Zero] = Arg0
            Local0 = (SS1 << One)
            Local0 |= (SS2 << 0x02)
            Local0 |= (SS3 << 0x03)
            Local0 |= (SS4 << 0x04)
            If ((One << Arg1) & Local0)
            {
                PRWP [One] = Arg1
            }
            Else
            {
                Local0 >>= One
                FindSetLeftBit (Local0, PRWP [One])
            }
 
            Return (PRWP)
        }
 
Method (_PRW, 0, NotSerialized)  // _PRW: Power Resources for Wake
            {
                Return (GPRW (0x6D, 0x03))
            }

 

 

Je ne vois pas pourquoi seulement le GPRW de "method" est touché !!!! Pourquoi dans le premier exemple donné, on fait un search/replace sur une chaine de caractère sur tous le DSDT & SSDTs, et qu'est ce qui fait que dans l'exemple 2, on ne le fait que lorsque c'est avec "Method"... Surtout que quand je décode la chaine Base64 "R1BSVwI=" , ça ne me donne que "GPRW".

 

J'édite mes Plist avec Property List Editor (lien donné par Slice sur le forum) qui a l'avantage d'être gratuit ;), pas de Clover Configurator ici.

Link to comment
Share on other sites

 Share

×
×
  • Create New...