Skocz do zawartości

[Część 4] Modyfikacja sekcji USB


Rekomendowane odpowiedzi

Modyfikacja sekcji USB

v1.0 - Pierwsza publikacja

 

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)

 

Modyfikacja ta nie zawsze jest potrzebna. Przydaje się gdy nie działa opcja sleep kiedy mamy chipset który nie występuje natywnie w komputerach Apple. Przykłąd przedstawia płytę z ICH9 i maskowaniem USB na chipie ICH10. Do działania tej metody wymagane jest posiadanie Method DTGP - opis w "[Cześć 2] Podstawowe modyfikacje DSDT"

 

:arrow: 1. Zlokalizowanie sekcji USB w DSDT

 

USB (UHCI) możemy zaleźć w DSDT np.: pod nazwami USB0...USB5, UHC1...UHC6 lub inne a USB 2.0 (EHCI) pod nazwami EHCI, EHC1..EHC2, EUSB, USBE. Układ w komputerach Apple na chipsecie ICH10 to "3x3" tzn w IORegistryExplorer sa na portach USB: 0x001D0000 - 0x001D0002 oraz 0x001A0000 - 0x001A0002 (1D,0 - 1D,2 ; 1A,0 - 1A,2). EHCI (USB 2.0) jest na portach 0x001D0007 oraz 0x001A0007 (1D,7 ; 1A,7). Poniżej tabela przedstawiająca porty i ID dla ICH9®

 

UHCI 1: 1D 2934 
UHCI 2: 1D, 1 2935 
UHCI 3: 1D, 2 2936 
UHCI 4: 1A 2937 
UHCI 5: 1A, 1 2938 
UHCI 6: 1A, 2 2939
EHCI 1: 1D, 7 293A 
EHCI 2: 1A, 7 293C

Poniżej tabela portów i ID dla ICH10® które wykorzystamy do podszywania się pod ten chipset:

UHCI 1: 1D 3A34 
UHCI 2: 1D, 1 3A35 
UHCI 3: 1D, 2 3A36 
UHCI 4: 1A 3A37 
UHCI 5: 1A, 1 3A38 
UHCI 6: 1A, 2 3A39
EHCI 1: 1D, 7 3A3A 
EHCI 2: 1A, 7 3A3C

 

:arrow: 2. Modyfikacja sekcji USB w DSDT

 

Przykład dla jednej sekcji USB, reszta analogicznie z wstawieniem odpowiedniego ID

 

Oryginalna sekcja UHC1

            Device (UHC1) 
           { 
               Name (_ADR, 0x001D0000) 
               OperationRegion (U1CS, PCI_Config, 0xC4, 0x04) 
               Field (U1CS, DWordAcc, NoLock, Preserve) 
               { 
                   U1EN,   2
               } 

               Method (_PSW, 1, NotSerialized) 
               { 
                   If (Arg0) 
                   { 
                       Store (0x03, U1EN) 
                   } 
                   Else
                   { 
                       Store (Zero, U1EN) 
                   } 
               } 

               Method (_S3D, 0, NotSerialized) 
               { 
                   Return (0x02) 
               } 

               Method (_S4D, 0, NotSerialized) 
               { 
                   Return (0x02) 
               } 

               Name (_PRW, Package (0x02) 
               { 
                   0x03, 
                   0x03
               }) 
           }

Wstawiamy przed Name (_PRW, Package (0x02) sekcje z odpowienim ID:

                Method (_DSM, 4, NotSerialized) 
               { 
                   Store (Package (0x02) 
                       { 
                           "device-id", 
                           Buffer (0x04) 
                           { 
                               0x34, 0x3A, 0x00, 0x00
                           } 
                       }, Local0) 
                   DTGP (Arg0, Arg1, Arg2, Arg3, RefOf (Local0)) 
                   Return (Local0) 
               }

Zmodyfikowana:

            Device (UHC1) 
           { 
               Name (_ADR, 0x001D0000) 
               OperationRegion (U1CS, PCI_Config, 0xC4, 0x04) 
               Field (U1CS, DWordAcc, NoLock, Preserve) 
               { 
                   U1EN,   2
               } 

               Method (_PSW, 1, NotSerialized) 
               { 
                   If (Arg0) 
                   { 
                       Store (0x03, U1EN) 
                   } 
                   Else
                   { 
                       Store (Zero, U1EN) 
                   } 
               } 

               Method (_S3D, 0, NotSerialized) 
               { 
                   Return (0x02) 
               } 

               Method (_S4D, 0, NotSerialized) 
               { 
                   Return (0x02) 
               } 

               Method (_DSM, 4, NotSerialized) 
               { 
                   Store (Package (0x02) 
                       { 
                           "device-id", 
                           Buffer (0x04) 
                           { 
                               0x34, 0x3A, 0x00, 0x00
                           } 
                       }, Local0) 
                   DTGP (Arg0, Arg1, Arg2, Arg3, RefOf (Local0)) 
                   Return (Local0) 
               } 

               Name (_PRW, Package (0x02) 
               { 
                   0x03, 
                   0x03
               }) 
           }

 

Przykład dla jednej sekcji EHCI, reszta analogicznie z wstawieniem odpowiedniego ID

 

Oryginalna sekcja EHC1

            Device (EHC1) 
           { 
               Name (_ADR, 0x001D0007) 
               OperationRegion (UFCS, PCI_Config, 0x54, 0x04) 
               Field (UFCS, DWordAcc, NoLock, Preserve) 
               { 
                       ,   15, 
                   PMES,   1
               } 

               Device (HUB2) 
               { 
                   Name (_ADR, Zero) 
                   Device (PRT1) 
                   { 
                       Name (_ADR, One) 
                   } 

                   Device (PRT2) 
                   { 
                       Name (_ADR, 0x02) 
                   } 

                   Device (PRT3) 
                   { 
                       Name (_ADR, 0x03) 
                   } 

                   Device (PRT4) 
                   { 
                       Name (_ADR, 0x04) 
                   } 
               } 

               Method (_S3D, 0, NotSerialized) 
               { 
                   Return (0x03) 
               } 

               Method (_S4D, 0, NotSerialized) 
               { 
                   Return (0x03) 
               } 
           }

Wstawiamy przed Method (_S3D, 0, NotSerialized) z odpowiednim ID

                Method (_DSM, 4, NotSerialized) 
               { 
                   Store (Package (0x0F) 
                       { 
                           "device-id", 
                           Buffer (0x04) 
                           { 
                               0x3A, 0x3A, 0x00, 0x00
                           }, 

                           "AAPL,clock-id", 
                           Buffer (One) 
                           { 
                               0x0A
                           }, 

                           "built-in", 
                           Buffer (One) 
                           { 
                               0x00
                           }, 

                           "device_type", 
                           Buffer (0x05) 
                           { 
                               "EHCI" 
                           }, 

                           "AAPL,current-available", 
                           0x04B0, 
                           "AAPL,current-extra", 
                           0x02BC, 
                           "AAPL,current-in-sleep", 
                           0x03E8, 
                           Buffer (One) 
                           { 
                               0x00
                           } 
                       }, Local0) 
                   DTGP (Arg0, Arg1, Arg2, Arg3, RefOf (Local0)) 
                   Return (Local0) 
               }

Zmodyfikowana:

            Device (EHC1) 
           { 
               Name (_ADR, 0x001D0007) 
               OperationRegion (UFCS, PCI_Config, 0x54, 0x04) 
               Field (UFCS, DWordAcc, NoLock, Preserve) 
               { 
                       ,   15, 
                   PMES,   1
               } 

               Device (HUB2) 
               { 
                   Name (_ADR, Zero) 
                   Device (PRT1) 
                   { 
                       Name (_ADR, One) 
                   } 

                   Device (PRT2) 
                   { 
                       Name (_ADR, 0x02) 
                   } 

                   Device (PRT3) 
                   { 
                       Name (_ADR, 0x03) 
                   } 

                   Device (PRT4) 
                   { 
                       Name (_ADR, 0x04) 
                   } 
               } 

               Method (_DSM, 4, NotSerialized) 
               { 
                   Store (Package (0x0F) 
                       { 
                           "device-id", 
                           Buffer (0x04) 
                           { 
                               0x3A, 0x3A, 0x00, 0x00
                           }, 

                           "AAPL,clock-id", 
                           Buffer (One) 
                           { 
                               0x0A
                           }, 

                           "built-in", 
                           Buffer (One) 
                           { 
                               0x00
                           }, 

                           "device_type", 
                           Buffer (0x05) 
                           { 
                               "EHCI" 
                           }, 

                           "AAPL,current-available", 
                           0x04B0, 
                           "AAPL,current-extra", 
                           0x02BC, 
                           "AAPL,current-in-sleep", 
                           0x03E8, 
                           Buffer (One) 
                           { 
                               0x00
                           } 
                       }, Local0) 
                   DTGP (Arg0, Arg1, Arg2, Arg3, RefOf (Local0)) 
                   Return (Local0) 
               } 

               Method (_S3D, 0, NotSerialized) 
               { 
                   Return (0x03) 
               } 

               Method (_S4D, 0, NotSerialized) 
               { 
                   Return (0x03) 
               } 
           }

:arrow: 3. Usuwanie zbędnych sekcji USB w DSDT

 

Usuwamy sekcje z portem 1D,3 lub 1A,3. Często oznaczane jako USBR. Przed tą modyfikacją radzę włączyć IORegistryExplorer, zlokalizować sekcje USB i kolejno wsadzać np Pendrive'a do każdego USB w celu upewnienia się czy komputer nie korzysta z tego portu ! Przykład:

 

Lokalizujemy i usuwamy całą sekcję USBR:

            Device (USBR) 
           { 
               Name (_ADR, 0x001D0003) 
               OperationRegion (U1CS, PCI_Config, 0xC4, 0x04) 
               Field (U1CS, DWordAcc, NoLock, Preserve) 
               { 
                   U1EN,   2
               } 

               Method (_PSW, 1, NotSerialized) 
               { 
                   If (Arg0) 
                   { 
                       Store (0x03, U1EN) 
                   } 
                   Else
                   { 
                       Store (0x00, U1EN) 
                   } 
               } 

               Method (_S3D, 0, NotSerialized) 
               { 
                   Return (0x02) 
               } 

               Method (_S4D, 0, NotSerialized) 
               { 
                   Return (0x02) 
               } 

               Name (_PRW, Package (0x02) 
               { 
                   0x20, 
                   0x03
               }) 
           }

Po usunięciu tej sekcji musimy usunąć wszystkie inne informacje o USBR, dlatego wyszukujemy je za pomocą wyszukiwarki w DSDT. Znajdujemy:

        Method (_L20, 0, NotSerialized) 
       { 
           Notify (\_SB.PCI0.USBR, 0x02) 
           Notify (\_SB.PCI0.USB5, 0x02) 
       }

Usuwamy:

            Notify (\_SB.PCI0.USBR, 0x02)

Zmodyfikowany:

        Method (_L20, 0, NotSerialized) 
       { 
           Notify (\_SB.PCI0.USB5, 0x02) 
       }

 

Po zakończeniu edycji kompilujemy DSDT. Zapraszam do tematu o kosmetyce, znajduje się tam opis upodobniania nazewnictwa urządzeń jak w komputerach Apple. Można ładnie sobie poprawić sekcje USB i pozbyć sie errorów w logu.

 

Inne DevID dla USB można znaleźć w drugim temacie ze źródła

 

Źródła informacji:

http://www.insanelymac.com/forum/index.php?s=e43445d1606da1521cedff3970c715de&showtopic=168014
http://hamac.pl/topics25/intel-ichx-mcp79-i-spolka-vt1054.htm

Odnośnik do komentarza
Udostępnij na innych stronach

  • 6 miesięcy temu...

W moim lapku jest ICH9, Wiec jak w Twoim tutku maskuje na ICH10 korzystajac z podanych przez ciebie ID.

Ale troche rzeczy odstaje od tego co jest tutaj zaprezentowane.

Dlatego tez pytanie, jak postepowac w sytuacji, gdy mamy sekcje nie nazwane UHCX, tylko USBX, i jeszcze na dodatek numeracja zaczyna sie od 0 (USB0), a nie jak w przytoczonym przykladzie UHC1? Co gorsza, USB2 nie posiada _PRW, wiec nie wiem czy mam tam wstawic PRW z powiedzmy, 0x05 , 0x03 (bo tak by logicznie nakazywala numeracja, jak mamy w USB0 0x03, 0x03 a w USB1 0x04, 0x03, choc w USB3 jest juz o wiele wieksza wartosc).

Pozatym, sekcje EHCI sa bardzo ubogie, kompletnie nieporownywalne do tego co Ty tutaj pokazujesz, wiec troche nie moge odniesc tychze fix'ow do mojego DSDT.

Tutaj jest wycinek mojego DSDT, wyciagniete z windy 7 -

http://pastebin.com/S66wNAsG

Prosilbym o podpowiedz co w takim razie tutaj zrobic.

 

EDIT: Cholera, nie wiem czemu, podpis nie chce mi sie tutaj pojawic, a mam tam opisane co mam za lapka :(. Wiec w takim razie, mam tak: Laptop: Samsung q210 | C2D P7350 | ALC262 | IHC9 PM45 | Nvidia GeForce 9200M GS | Yukon 88E8055 | AirPort

Odnośnik do komentarza
Udostępnij na innych stronach

Masz jedno z typowych DSDT, nazewnictwo moze sie roznic i nie gra ono zadnej roli. Sekcje modyfikowana mozesz wstawić przed:

                Name (UPRW, Package (0x02)

Sekcje ktore sa do zmodyfikowania to sekcje o ID:

Name (_ADR, 0x001D0000) np: USB0(1) 
Name (_ADR, 0x001D0001) np: USB1(2) 
Name (_ADR, 0x001D0002) np: USB2(3) 
Name (_ADR, 0x001D0007) np: EHC1
Name (_ADR, 0x001A0000) np: USB3(4) 
Name (_ADR, 0x001A0001) np: USB4(5) 
Name (_ADR, 0x001A0002) np: USB5(6) 
Name (_ADR, 0x001A0007) np: EHC2

Odnośnik do komentarza
Udostępnij na innych stronach

To jeszcze pytanie pozwole sobie zadac, zeby nie bylo niejasnosci:

 

1: Troche pozwole sobie powtorzyc poprzednie pytanie: Jak nie mam UPWR w jednym USB, jak tez i jak mam totalnie puste sekcje EHCI, to nadal sie stosuje te fixy w tych sekcjach, czy sie je pomija? Bo jak widac po zamieszczonym przezemnie wycinku z dsdt, w EHCI nie mam _S3D, ani tez szczerze mowiac czegokolwiek innego. (A moze powinienem przekopiowac te sekcje tak jak sa pokazane w Twoim tutorialu)?

 

Sam bym przeprowadzil testy co jak dziala, ale niestety ostatnio cierpie na chroniczny brak czasu ktory mi mocno doskwiera :(

Odnośnik do komentarza
Udostępnij na innych stronach

Sam bym przeprowadzil testy co jak dziala, ale niestety ostatnio cierpie na chroniczny brak czasu ktory mi mocno doskwiera :(

I uważasz, że ktoś za Ciebie poświęci swój czas i wykona Ci modyfikacje bo ma czas w nadmiarze... Trochę własnego wysiłku i wkładu...

 

Przyjrzyj się powyższym przykładom, i "znajdź różnice" przed i po... tak naprawdę wstawiasz TYLKO metody _DSM z zawartością...

Odnośnik do komentarza
Udostępnij na innych stronach

  • 1 rok później...

Również mam z tym problem, mianowicie dla UHC 1 i 2 nie mam sekcji _PRW, ani UPRW. Co mam zrobić w takim wypadku? Poniżej zamieszczam część kodu.

 

device (UHC0) 
           { 
               Name (_ADR, 0x001D0000) 
               Device (HUB0) 
               { 
                   Name (_ADR, Zero) 
                   Device (PRT1) 
                   { 
                       Name (_ADR, One) 
                   } 
                   Device (PRT2) 
                   { 
                       Name (_ADR, 0x02) 
                   } 
               } 
               Method (_DSM, 4, NotSerialized) 
                { 
                    Store (Package (0x02) 
                        { 
                            "3A34", 
                            Buffer (0x04) 
                            { 
                                0x34, 0x3A, 0x00, 0x00 
                            } 
                        }, Local0) 
                    DTGP (Arg0, Arg1, Arg2, Arg3, RefOf (Local0)) 
                    Return (Local0) 
                } 
               Name (_PRW, Package (0x02) 
               { 
                   0x03, 
                   0x03
               }) 
               OperationRegion (USBR, PCI_Config, 0xC4, One) 
               Field (USBR, AnyAcc, NoLock, Preserve) 
               { 
                   URES,   8
               } 
               Method (_PSW, 1, NotSerialized) 
               { 
                   If (Arg0) 
                   { 
                       Store (One, URES) 
                   } 
                   Else
                   { 
                       Store (Zero, URES) 
                   } 
               } 
               Method (_S3D, 0, NotSerialized) 
               { 
                   Return (0x02) 
               } 
               Method (_S4D, 0, NotSerialized) 
               { 
                   Return (0x02) 
               } 
           } 
           Device (UHC1) 
           { 
               Name (_ADR, 0x001D0001) 
               Device (HUB1) 
               { 
                   Name (_ADR, Zero) 
                   Device (PRT1) 
                   { 
                       Name (_ADR, One) 
                   } 
                   Device (PRT2) 
                   { 
                       Name (_ADR, 0x02) 
                   } 
               } 
           } 
           Device (UHC2) 
           { 
               Name (_ADR, 0x001D0002) 
               Device (HUB2) 
               { 
                   Name (_ADR, Zero) 
                   Device (PRT1) 
                   { 
                       Name (_ADR, One) 
                   } 
                   Device (PRT2) 
                   { 
                       Name (_ADR, 0x02) 
                   } 
               } 
           } 
           Device (UHCR) 
           { 
               Name (_ADR, 0x001D0003) 
               Device (HUBR) 
               { 
                   Name (_ADR, Zero) 
                   Device (PRT1) 
                   { 
                       Name (_ADR, One) 
                   } 
                   Device (PRT2) 
                   { 
                       Name (_ADR, 0x02) 
                   } 
               } 
           }

 

UHC0 już zmodyfikowałem.

Odnośnik do komentarza
Udostępnij na innych stronach

Również mam z tym problem, mianowicie dla UHC 1 i 2 nie mam sekcji _PRW, ani UPRW. Co mam zrobić w takim wypadku? Poniżej zamieszczam część kodu.

Nie ma znaczenia, tak naprawdę chodzi o dodanie sekcji DSM do gałęzi urządzenia... Wstaw kod po:

Name (_ADR, ..........) 

Odnośnik do komentarza
Udostępnij na innych stronach

  • 6 miesięcy temu...

Panowie czytam ten wątek po raz 20 i nie bardzo mogę zrozumieć OCB...

Chipset jaki posiadam w laptopie to ICH-8M i nie mam pojęcia jak ogarnąć Device -id tzn wiem gdzie wstawić ale nie mam pojęcia w jakiej konfiguracji..

 

Nie wiem czy dobrze to rozumiem ale u Osawldiniego dev-id wyglada ta 0x3A, 0x3A, 0x00, 0x00 w takim razie jak ma wygladać u mnie bo tego nie mogę zrozumieć. Uprzedzając pytania byłem w watku podanym na samym dole tutka ale nadal dla mnie to czarna magia.... Mam ogromne przeczucie , że u mnie nie działa sleep przez to usb. reszta działa pieknie... tylko ten sleep

Odnośnik do komentarza
Udostępnij na innych stronach

Dołącz do dyskusji

Możesz dodać zawartość już teraz a zarejestrować się później. Jeśli posiadasz już konto, zaloguj się aby dodać zawartość za jego pomocą.

Gość
Dodaj odpowiedź do tematu...

×   Wklejono zawartość z formatowaniem.   Usuń formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Odnośnik został automatycznie osadzony.   Przywróć wyświetlanie jako odnośnik

×   Przywrócono poprzednią zawartość.   Wyczyść edytor

×   Nie możesz bezpośrednio wkleić grafiki. Dodaj lub załącz grafiki z adresu URL.

Ładowanie
 Udostępnij

×
×
  • Dodaj nową pozycję...

Powiadomienie o plikach cookie

Korzystanie z tej witryny, wymaga zakceptowanie naszych warunków Warunki użytkowania.