Jump to content
oswaldini

[Część 5] Dopisywanie grafiki do DSDT

Recommended Posts

Dopisywanie grafiki do DSDT

v1.0 - Pierwsza publikacja

v1.1 - Dodany opis dla kilku kart graficznych

 

SPIS TEMATÓW O MODYFIKACJI DSDT:

 

[Cześć 1] Wydobycie DSDT z naszego sprzętu

[Cześć 2] Podstawowe modyfikacje DSDT

[Cześć 3] Sekcja audio w DSDT

[Cześć 4] Modyfikacja sekcji USB

[Cześć 5] Dopisywanie grafiki do DSDT

[Cześć 6] Fixy dla notebooków/netbooków oraz PC

[Cześć 7] Kosmeytka DSDT + Uciszanie kompilatora

[Cześć 8] Sprawdzenie działania Power Managmentu (SpeedStep)

 

 

 

:arrow: 1. Lokalizacja portu karty graficznej

 

Zanim dopiszemy kartę graficzną do DSDT musimy wiedzieć gdzie to zrobić. W tym celu uruchamiamy IORegistryExplorer i wyszukujemy "display". Jak widać na screenie moja karta graficzna (7900GS 256MB) podpięta jest pod P0P2. To sobie gdzieś zapisujemy lub zapamiętujemy.

 

zrzutekranu20100325godz.png

Screen zrobiony już po dopisaniu karty graficznej do DSDT dlatego widnieje GFX0, nie ma to jednak żadnego znaczenia bo port się nie zmienia

 

:arrow: 2. NVCAP

 

Musimy znać NVCAP swojej karty graficznej ponieważ będziemy go wprowadzać do modyfikacji. Musimy wyciągnąć i zapisać na dysku bios z karty graficznej, polecam pod Windowsem program Nibitor. Nie będę się na ten temat rozpisywać. Można znaleźć na ten temat sporo informacji, zresztą program jest bardzo prosty w obsłudze. Jak już wydobędziemy bios zaopatrujemy się w program NVCAP Maker.

http://www.mediafire.com/?dw2hwjmvejm

Uruchamiamy NVCAP Maker, pojawi sie okno w którym wskazujemy lokalizacje biosu naszej karty graficznej. Program "wypluje" nam wygenerowany NVCAP. Dla mojej 7900GS to:

 

04000000000003000c0000000000000700000000

 

dzielimy go na 16/16/8 znaków

 

0400000000000300

0c00000000000007

00000000

 

a potem dodajemy "0x, " na każde dwa znaki:

 

0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00,

0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07,

0x00, 0x00, 0x00, 0x00

 

Może troszkę śmiesznie opisane ale mam nadzieję, ze wszystko jest zrozumiałe :)

 

:arrow: 3. Modyfikacja DSDT

 

Lokalizujemy w DSDT nasz port z pkt 1. czyli dla mojej 7900GS to P0P2, szukamy: Device (P0P2)

 

Sekcja oryginalna:

            Device (P0P2) 
           { 
               Name (_ADR, 0x00010000) 
               Method (_PRW, 0, NotSerialized) 
               { 
                   Return (GPRW (0x09, 0x04)) 
               } 

               Method (_PRT, 0, NotSerialized) 
               { 
                   If (PICM) 
                   { 
                       Return (AR02) 
                   } 

                   Return (PR02) 
               } 
           }

Dodajemy:

 
               Device (GFX) 
               { 
                   Name (_ADR, Zero) 
                   Name (_SUN, One) 
                   Method (_DSM, 4, NotSerialized) 
                   { 
                       Store (Package (0x16) 
                           { 
                               "@0,compatible", 
                               Buffer (0x0B) 
                               { 
                                   "NVDA,NVMac" 
                               }, 

                               "@0,device_type", 
                               Buffer (0x08) 
                               { 
                                   "display" 
                               }, 

                               "@0,name", 
                               Buffer (0x0F) 
                               { 
                                   "NVDA,Display-A" 
                               }, 

                               "@1,compatible", 
                               Buffer (0x0B) 
                               { 
                                   "NVDA,NVMac" 
                               }, 

                               "@1,device_type", 
                               Buffer (0x08) 
                               { 
                                   "display" 
                               }, 

                               "@1,name", 
                               Buffer (0x0F) 
                               { 
                                   "NVDA,Display-B" 
                               }, 

                               "NVCAP", 
                               Buffer (0x18) 
                               { 
                                   /* 0000 */    0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 
                                   /* 0008 */    0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 
                                   /* 0010 */    0x00, 0x00, 0x00, 0x00
                               }, 

                               "VRAM,totalsize", 
                               Buffer (0x04) 
                               { 
                                   0x00, 0x00, 0x00, 0x10
                               }, 

                               "device_type", 
                               Buffer (0x0C) 
                               { 
                                   "NVDA,Parent" 
                               }, 

                               "model", 
                               Buffer () 
                               { 
                                   "NVIDIA GeForce 7900GS" 
                               }, 

                               "rom-revision", 
                               Buffer () 
                               { 
                                   "nVidia GeForce 7900 GS OpenGL Engine" 
                               } 
                           }, Local0) 
                       DTGP (Arg0, Arg1, Arg2, Arg3, RefOf (Local0)) 
                       Return (Local0) 
                   } 
               } 

W powyższym kodzie modyfikujemy sekcje:

"NVCAP" na nasz z pkt 2

"VRAM,totalsize" ostanie dwie cyfry: 0x40 = 1024mb, 0x20= 512mb, 0x10= 256mb

"model" wpisujemy nazwę naszej karty graficznej

"rom-revision" wpisujemy wersje biosu lub co chcemy :)

 

Zmodyfikowana sekcja:

            Device (P0P2) 
           { 
               Name (_ADR, 0x00010000) 
               Device (GFX) 
               { 
                   Name (_ADR, Zero) 
                   Name (_SUN, One) 
                   Method (_DSM, 4, NotSerialized) 
                   { 
                       Store (Package (0x16) 
                           { 
                               "@0,compatible", 
                               Buffer (0x0B) 
                               { 
                                   "NVDA,NVMac" 
                               }, 

                               "@0,device_type", 
                               Buffer (0x08) 
                               { 
                                   "display" 
                               }, 

                               "@0,name", 
                               Buffer (0x0F) 
                               { 
                                   "NVDA,Display-A" 
                               }, 

                               "@1,compatible", 
                               Buffer (0x0B) 
                               { 
                                   "NVDA,NVMac" 
                               }, 

                               "@1,device_type", 
                               Buffer (0x08) 
                               { 
                                   "display" 
                               }, 

                               "@1,name", 
                               Buffer (0x0F) 
                               { 
                                   "NVDA,Display-B" 
                               }, 

                               "NVCAP", 
                               Buffer (0x18) 
                               { 
                                   /* 0000 */    0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 
                                   /* 0008 */    0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 
                                   /* 0010 */    0x00, 0x00, 0x00, 0x00
                               }, 

                               "VRAM,totalsize", 
                               Buffer (0x04) 
                               { 
                                   0x00, 0x00, 0x00, 0x10
                               }, 

                               "device_type", 
                               Buffer (0x0C) 
                               { 
                                   "NVDA,Parent" 
                               }, 

                               "model", 
                               Buffer (0x16) 
                               { 
                                   "NVIDIA GeForce 7900GS" 
                               }, 

                               "rom-revision", 
                               Buffer (0x25) 
                               { 
                                   "nVidia GeForce 7900 GS OpenGL Engine" 
                               } 
                           }, Local0) 
                       DTGP (Arg0, Arg1, Arg2, Arg3, RefOf (Local0)) 
                       Return (Local0) 
                   } 
               } 

               Method (_PRW, 0, NotSerialized) 
               { 
                   Return (GPRW (0x09, 0x04)) 
               } 

               Method (_PRT, 0, NotSerialized) 
               { 
                   If (PICM) 
                   { 
                       Return (AR02) 
                   } 

                   Return (PR02) 
               } 
           }

 

Efekt końcowy:

 

zrzutekranu20100325godzd.pngzrzutekranu20100325godz.png

 

 

:arrow: 4. Modyfikacja dla kilku kart graficznych

 

Proces jest dokładnie ten sam. Lokalizujemy w IORegi wszystkie karty graficzne i zapisujemy sobie ich porty. Pod te porty dodajemy sekcje modyfikującą jak wyżej z tym wyjątkiem że dodajemy numer karty graficznej w nazwie: Device (GFX). Czyli np dla dwóch kart graficznych będą występować dwie sekcje GFX1 oraz GFX2 naturalnie w odpowiednich portach.

 

Wyrywkowo kod jak to powinno wyglądać.

                Device (GFX1) 
               { 
                   Name (_ADR, Zero) 
                   Name (_SUN, One) 
                   Method (_DSM, 4, NotSerialized) 
                   { 
                       Store (Package (0x16) 
                           { 
                               "@0,compatible", 
                               Buffer (0x0B) 
                               ........


               Device (GFX2) 
               { 
                   Name (_ADR, Zero) 
                   Name (_SUN, One) 
                   Method (_DSM, 4, NotSerialized) 
                   { 
                       Store (Package (0x16) 
                           { 
                               "@0,compatible", 
                               Buffer (0x0B) 
                               ..........

Share this post


Link to post
Share on other sites

Mam już prawie wszystko, tylko jaki to port?

picture2lmv.png

Co wpisać do VRAM? to Nvidia GFX285 1024 MB.

Plik DSDT wyciągnałem z kompa, ale mam też przygotowany dla mojej płyty głównej z kext.com. Gdzie dopisać tą grafikę, byle gdzie? :)

Przepraszam, dopiero zaczynam się bawić w DSDT...

Dzięki za podpowiedź

 

PS. Znalałem coś takiego w moim DSDT z kompa. Jak to by miało wyglądać dla mojej karty?

 

               Scope (\_SB.PCI0) 
               { 
                   Name (SLIC, Buffer (0x9E) 
                   { 
                       "987134512781Genuine NVIDIA Certified SLI Ready Motherboard for GIGABYTE GA EX58UD4 0101-Copyright 2008 NVIDIA Corporation All Rights Reserved-765289891023(R)" 
                   }) 
                   Device (WMI1) 
                   { 
                       Name (_HID, "pnp0c14") 
                       Name (_UID, "MXM2") 
                       Name (_WDG, Buffer (0x14) 
                       { 
                           /* 0000 */    0x3C, 0x5C, 0xCB, 0xF6, 0xAE, 0x9C, 0xBD, 0x4E, 
                           /* 0008 */    0xB5, 0x77, 0x93, 0x1E, 0xA3, 0x2A, 0x2C, 0xC0, 
                           /* 0010 */    0x4D, 0x58, 0x01, 0x02
                       }) 
                       Method (WMMX, 3, NotSerialized) 
                       { 
                           CreateDWordField (Arg2, 0x00, FUNC) 
                           If (LEqual (FUNC, 0x41494C53)) 
                           { 
                               Return (\_SB.PCI0.SLIC) 
                           } 
                           Return (0x00) 
                       } 
                   } 
               }

 

 

Tutaj jest coś takiego jak nvcap, ale zupełnie inny niż sobie wyjąłem z biosu karty. Tutaj mi wyszedł taki:

0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x00
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07
0x00, 0x00, 0x00, 0x00

 

Już nic nie kapuuuuuje, za stary jestem :)

Share this post


Link to post
Share on other sites

Mam cały czas problem, żeby wystartował sam installer. Póki co udało mi sie tylko starego kalawaya instalnąć z cpus=1. Nie daje nic GraphicsEnabler, ani Yes, ani No, tak więc pomyślałem, że dopiszę tą kartę do DSDT, to powinno być lepiej :) Sorry za offtopa trochę, ale musiałem rozjaśnić sprawę, po co mnie to DSDT ;)

Share this post


Link to post
Share on other sites

Masz bardzo dobry sprzęt pod retaila, robiłem kilka takich zestawów ! GE Ci nie działał bo w tym distro jest stary chameleon bez obsługi Twojej karty graficznej ! Ta płyta gigabyte sprawia troszkę problemów bo w 10.6.8 przestaje działać PM ale da się to naprawić przez chameleona.

 

Tutaj masz tutorial: http://hamac.pl/topics33/instalacja-mac ... vt2646.htm

Share this post


Link to post
Share on other sites

Nie. Byłem mało precyzyjny opisując to. Wpis ten musi znajdować się w sekcji PCI0. Powinien być on w linii: Name (_ADR, 0x00010000). W pierwszym poście jest to w przykładzie linia Device (P0P2) i jest tam ta wartość 0x00010000

 

Przykład poniżej:

            Device (PEGP) 
           { 
               Name (_ADR, 0x00010000) 
               Name (_PRW, Package (0x02) 
               { 
                   0x09, 
                   0x05
               }) 
               Device (GFX0) 
               { 
                   Name (_ADR, Zero) 
                   Name (_SUN, One) 
                   Method (_DSM, 4, NotSerialized) 
                   { 
                       Store (Package (0x02) 
                           { 
                               "hda-gfx", 
                               Buffer (0x0A) 
                               { 
                                   "onboard-1" 
                               } 
                           }, Local0) 
                       DTGP (Arg0, Arg1, Arg2, Arg3, RefOf (Local0)) 
                       Return (Local0) 
                   } 
               } 

               Device (HDAU) 
               { 
                   Name (_ADR, One) 
                   Method (_DSM, 4, NotSerialized) 
                   { 
                       Store (Package (0x02) 
                           { 
                               "hda-gfx", 
                               Buffer (0x0A) 
                               { 
                                   "onboard-1" 
                               } 
                           }, Local0) 
                       DTGP (Arg0, Arg1, Arg2, Arg3, RefOf (Local0)) 
                       Return (Local0) 
                   } 
               } 
           }

Share this post


Link to post
Share on other sites

W sekcji PCI0 mam tylko

 

  Device (PCI0) 
       { 
           Name (_HID, EisaId ("PNP0A03")) 
           Name (_ADR, Zero) 
           Name (_UID, One) 
           Name (_BBN, Zero) 
           Method (_S3D, 0, NotSerialized) 
           { 
               Return (0x03) 
           } 

           Method (_STA, 0, NotSerialized) 
           { 
               Return (0x0F) 
           }

 

Czyli muszę dopisać sekcję Device (PEGP) ?

Share this post


Link to post
Share on other sites

Sekcje Device (PEX*) są od 0 do 5 ale żadna nie zaczyna się

Name (_ADR, 0x00010000

jest

Name (_ADR, 0x001C0000) 
Name (_ADR, 0x001C0001)  
Name (_ADR, 0x001C0002) 
Name (_ADR, 0x001C0003) 
Name (_ADR, 0x001C0004) 
Name (_ADR, 0x001C0005)

patrze w ioreg jak szpak w pi.... i za dokładnie to nawet nie wiem czego szukać ?!

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...

×
×
  • Create New...

Important Information

By using this site, you agree to our Terms of Use.