Strona Główna Unixy.pl
Internetowe forum na temat systemów GNU/Linux Unix

FAQFAQ  SzukajSzukaj  UżytkownicyUżytkownicy  GrupyGrupy  StatystykiStatystyki
RejestracjaRejestracja  ZalogujZaloguj  DownloadDownload
 Ogłoszenie 
Strona korzysta z plików cookies w celu realizacji usług (logowanie do konta itp.). Możesz określić warunki przechowywania lub dostępu do plików cookies w Twojej przeglądarce.

Poprzedni temat «» Następny temat
Przykład edycji tablicy DSDT
Autor Wiadomość
Maciek_Rutecki 
Administrator

JID: bc547@jabber.gda.pl
Pomógł: 39 razy
Dołączył: 07 Cze 2005
Posty: 2959
Wysłany: 2006-11-28, 22:22   Przykład edycji tablicy DSDT

Może komuś się przyda potrzebujemy kompilator IASL, opis samej kompilacji na stronie:

http://forums.gentoo.org/viewtopic.php?t=122145

tutaj jedynie opiszę błędy, które napotkałem (i które są częste w HP/Compaq).

Po pierwszym przejściu iasl -tc dsdt.dsl otrzymałem:

Kod:
Intel ACPI Component Architecture
ASL Optimizing Compiler version 20060912 [Oct  2 2006]
Copyright (C) 2000 - 2006 Intel Corporation
Supports ACPI Specification Revision 3.0a

dsdt.dsl  3519:                                         And (Local1, 0xFFFF)
Warning  1104 -        Result is not used, operator has no effect ^

dsdt.dsl  4728:                     Method (_DSM, 4, NotSerialized)
Warning  1086 -                                ^ Not all control paths return a value (_DSM)

dsdt.dsl  4728:                     Method (_DSM, 4, NotSerialized)
Warning  1079 -                                ^ Reserved method must return a value (_DSM)

dsdt.dsl  5396:                     If (LEqual (C226, 0xFFFFFFFD))
Warning  1098 -     Statement is unreachable ^

dsdt.dsl  7207:             Method (_WED, 1, NotSerialized)
Warning  1086 -                        ^ Not all control paths return a value (_WED)

dsdt.dsl  7207:             Method (_WED, 1, NotSerialized)
Warning  1079 -                        ^ Reserved method must return a value (_WED)

dsdt.dsl  8825:             Method (WMBA, 3, NotSerialized)
Warning  1086 -                        ^ Not all control paths return a value (WMBA)

dsdt.dsl 12897:                 CreateByteField (C1DE, \_SB.C002.C003._Y0B._LEN, C08E)
Error    4062 -                                         Object does not exist ^  (\_SB.C002.C003._Y0B._LEN)

ASL Input:  dsdt.dsl - 13315 lines, 490048 bytes, 6146 keywords
Compilation complete. 1 Errors, 7 Warnings, 0 Remarks, 2067 Optimizations


Zajmijmy się pierwszym błędem:

Kod:
dsdt.dsl 12897:                 CreateByteField (C1DE, \_SB.C002.C003._Y0B._LEN, C08E)
Error    4062 -                                         Object does not exist ^  (\_SB.C002.C003._Y0B._LEN)


Idziemy do tej linii:
Kod:

Method (_CRS, 0, NotSerialized)
        {
            If (LEqual (\_SB.C002.C003.C1F7._STA (), 0x0F))
            {
                CreateByteField (C1DE, \_SB.C002.C003._Y0B._LEN, C08E)
                Store (0x60, C08E)
            }

            Return (^^C1B8.C1DD ())
        }


CreateByteField ma nieprawidłowy argument - jest za krótki, idziemy do sekcji "Device" gdzie znajduje się dana metoda, na samej górze mamy:

Kod:
    Device (\_SB.C002.C003.C32A)


Czyli brakuje "C32A"

Poprawiamy:
Kod:
Method (_CRS, 0, NotSerialized)
        {
            If (LEqual (\_SB.C002.C003.C1F7._STA (), 0x0F))
            {
                CreateByteField (C1DE, \_SB.C002.C003.C32A._Y0B._LEN, C08E)
                Store (0x60, C08E)
            }

            Return (^^C1B8.C1DD ())
        }


I błąd z głowy.

Zajmijmy się ostrzeżeniami:

Kod:
dsdt.dsl  3519:                                         And (Local1, 0xFFFF)
Warning  1104 -        Result is not used, operator has no effect ^


To jest przykład na to, że w HP pracuje Pani Krystyna z gazowni jako programistka, bo tego nawet nie idzie winy zwalić na kompilator Microsoftu. Idziemy do tej linijki:

Kod:
If (Local1)
                                {
                                    If (And (C16D, 0x40))
                                    {
                                        Add (Not (Local1), 0x01, Local1)
                                        And (Local1, 0xFFFF)
                                    }
                                }


Aby coś sensownego robił trzeba zmienić tą linijkę na następującą:

Kod:
If (Local1)
                                {
                                    If (And (C16D, 0x40))
                                    {
                                        Add (Not (Local1), 0x01, Local1)
                                        And (Local1, 0xFFFF, Local1)
                                    }
                                }


Lecimy z następnymi ostrzeżeniami:

Kod:
dsdt.dsl  4728:                     Method (_DSM, 4, NotSerialized)
Warning  1086 -                                ^ Not all control paths return a value (_DSM)


Z lektury http://acpi.info/ najbezpieczniejszym rozwiązaniem jest dać na końcu danej metody takie cóś:

Kod:
Return(Package(0x02){0x00, 0x00})


Czyli:

Kod:
Else
                        {
                            Return (Buffer (0x01)
                            {
                                /* 0000 */    0x00
                            })
                        }
             Return(Package(0x02){0x00, 0x00})
                    }



I problem z głowy. Jedziemy dalej, podobny błąd podobne rozwiązanie:

Kod:
dsdt.dsl  7208:             Method (_WED, 1, NotSerialized)
Warning  1086 -                        ^ Not all control paths return a value (_WED)


Kod:
Else
                    {
                        Store (0x00, C25E)
                        Store (0x00, C25F)
                    }

                    Return (Local0)
                }
        Return(Package(0x02){0x00, 0x00})
            }


Przy okazji pozbyliśmy się ostrzeżenia:

Kod:
dsdt.dsl  7208:             Method (_WED, 1, NotSerialized)
Warning  1079 -                        ^ Reserved method must return a value (_WED)


Kolejny podobny problem:

Kod:
dsdt.dsl  8827:             Method (WMBA, 3, NotSerialized)
Warning  1086 -                        ^ Not all control paths return a value (WMBA)


Poprawka:

Kod:
If (LEqual (\_SB.C061, 0x06))
                    {
                        Store (0x01, Index (C23E, 0x00))
                        Notify (\_SB.C22F, 0xA0)
                    }

                    Return (\_SB.C061)
                }
       Return(Package(0x02){0x00, 0x00})
            }


I zostało jedno ostrzeżenie:

Kod:
dsdt.dsl  5397:                     If (LEqual (C226, 0xFFFFFFFD))
Warning  1098 -     Statement is unreachable ^


Jak zwykle powodem był geniusz pracowników HP:

Kod:
Method (_STA, 0, NotSerialized)
                {
                    Return (0x00)

                    If (LEqual (C226, 0xFFFFFFFD))
                    {
                        Store (0x00, Local0)
                        If (LGreaterEqual (\C008 (), 0x04))
                        {


Po co to "Return (0x00)" na początku to nie wiem...

Wywalamy:
Kod:
Method (_STA, 0, NotSerialized)
                {
                    //Return (0x00)

                    If (LEqual (C226, 0xFFFFFFFD))
                    {
                        Store (0x00, Local0)
                        If (LGreaterEqual (\C008 (), 0x04))
                        {


Powinniśmy otrzymać:

Kod:
Intel ACPI Component Architecture
ASL Optimizing Compiler version 20060912 [Oct  2 2006]
Copyright (C) 2000 - 2006 Intel Corporation
Supports ACPI Specification Revision 3.0a

ASL Input:  dsdt.dsl - 13319 lines, 490182 bytes, 6148 keywords
AML Output: dsdt.aml - 59143 bytes 1077 named objects 5071 executable opcodes

Compilation complete. 0 Errors, 0 Warnings, 0 Remarks, 2073 Optimizations


Poprawiona tablica DSDT jest na stronie:

http://maciek.unixy.pl/download/bios/dsdt.dsl.gz
_________________
Maciek
http://www.maciek.unixy.pl
 
     
Wyświetl posty z ostatnich:   
Odpowiedz do tematu
Nie możesz pisać nowych tematów
Nie możesz odpowiadać w tematach
Nie możesz zmieniać swoich postów
Nie możesz usuwać swoich postów
Nie możesz głosować w ankietach
Nie możesz załączać plików na tym forum
Możesz ściągać załączniki na tym forum
Dodaj temat do Ulubionych
Wersja do druku

Skocz do:  

Powered by phpBB modified by Przemo © 2003 phpBB Group