2010-11-30 11 views
6

que utilizan this .NET program hacer una copia binaria del registro de Windows en HKLM/Hardware/ACPI/DSDT.¿Me ayudan a descifrar este código de Idioma de origen de ACPI?

A continuación, se ejecuta de Microsoft ASL Compiler de eso, puedo conseguir este ACPI Fuente Idioma:

Scope(\_TZ_) 
{ 
    Name(TBSE, 0xaac) 
    Name(CRT0, 0x0) 
    Name(PSV0, 0x0) 
    ThermalZone(TZS0) 
    { 
     Method(_TMP, 0x0, NotSerialized) 
     { 
      If(\ECON) 
      { 
       Store(\_SB_.PCI0.LPC0.EC0_.THS0, Local0) 
       Store(\_SB_.PCI0.LPC0.EC0_.KCSS, Local1) 
       Store(\_SB_.PCI0.LPC0.EC0_.KOSD, Local2) 
      } 
      Else 
      { 
       Store(RBEC(0x92), Local0) 
       And(Local0, 0x1, Local1) 
       And(Local0, 0x8, Local2) 
       Store(RBEC(0xa8), Local0) 
      } 
      If(Local1) 
      { 
       Add(PSV0, 0x1, Local0) 
      } 
      If(Local2) 
      { 
       If(LNot(LGreater(Local0, CRT0))) 
       { 
        Add(CRT0, 0x2, Local0) 
       } 
      } 
      Return(C2K_(Local0)) 
     } 
     Method(_HOT, 0x0, NotSerialized) 
     { 
      If(LEqual(OSYS, 0x7d6)) 
      { 
       If(\ECON) 
       { 
        Store(0x20, \_SB_.PCI0.LPC0.EC0_.TIID) 
        Store(\_SB_.PCI0.LPC0.EC0_.TSC0, Local0) 
       } 
       Else 
       { 
        WBEC(0x1, 0x20) 
        Store(RBEC(0xd1), Local0) 
       } 
       If(LOr(LNot(LLess(Local0, 0x80)), LLess(Local0, 0x1e))) 
       { 
        Store(0x78, Local0) 
       } 
       Store(Local0, CRT0) 
       Return(C2K_(Local0)) 
      } 
      Else 
      { 
       Return(C2K_(0x78)) 
      } 
     } 
     Method(_CRT, 0x0, NotSerialized) 
     { 
      If(LNot(LEqual(OSYS, 0x7d6))) 
      { 
       If(\ECON) 
       { 
        Store(0x20, \_SB_.PCI0.LPC0.EC0_.TIID) 
        Store(\_SB_.PCI0.LPC0.EC0_.TSC0, Local0) 
       } 
       Else 
       { 
        WBEC(0x1, 0x20) 
        Store(RBEC(0xd1), Local0) 
       } 
       If(LOr(LNot(LLess(Local0, 0x80)), LLess(Local0, 0x1e))) 
       { 
        Store(0x78, Local0) 
       } 
       Store(Local0, CRT0) 
       Return(C2K_(Local0)) 
      } 
      Else 
      { 
       Return(C2K_(0x78)) 
      } 
     } 
     Name(_PSL, Package(0x1) 
     { 
      \_PR_.CPU0 
     }) 
     Method(_PSV, 0x0, NotSerialized) 
     { 
      If(\ECON) 
      { 
       Store(0x20, \_SB_.PCI0.LPC0.EC0_.TIID) 
       Store(\_SB_.PCI0.LPC0.EC0_.TSP0, Local0) 
      } 
      Else 
      { 
       WBEC(0x1, 0x20) 
       Store(RBEC(0xd0), Local0) 
      } 
      If(LOr(LNot(LLess(Local0, 0x80)), LLess(Local0, 0x1e))) 
      { 
       Store(0x5a, Local0) 
      } 
      Store(Local0, PSV0) 
      Return(C2K_(Local0)) 
     } 
     Name(_TC1, 0x4) 
     Name(_TC2, 0x3) 
     Name(_TSP, 0x96) 
     Method(FMAX, 0x0, NotSerialized) 
     { 
      If(\ECON) 
      { 
       Store(0x40, \_SB_.PCI0.LPC0.EC0_.TIID) 
       Store(\_SB_.PCI0.LPC0.EC0_.TSP3, Local0) 
      } 
      Else 
      { 
       WBEC(0x1, 0x40) 
       Store(RBEC(0xd6), Local0) 
      } 
      Return(FSTL(Local0)) 
     } 
     Method(FMIN, 0x0, NotSerialized) 
     { 
      If(\ECON) 
      { 
       Store(0x40, \_SB_.PCI0.LPC0.EC0_.TIID) 
       Store(\_SB_.PCI0.LPC0.EC0_.TSP0, Local0) 
      } 
      Else 
      { 
       WBEC(0x1, 0x40) 
       Store(RBEC(0xd0), Local0) 
      } 
      Return(FSTL(Local0)) 
     } 
     Method(FRSP, 0x0, NotSerialized) 
     { 
      If(\ECON) 
      { 
       Store(\_SB_.PCI0.LPC0.EC0_.FSR1, Local0) 
      } 
      Else 
      { 
       Store(RBEC(0x95), Local0) 
      } 
      Return(FSTL(Local0)) 
     } 
     Method(FSSP, 0x1, NotSerialized) 
     { 
      If(LEqual(Arg0, 0x0)) 
      { 
       If(\ECON) 
       { 
        Store(0x1, \_SB_.PCI0.LPC0.EC0_.FSHC) 
        Sleep(0x64) 
        Store(0xff, \_SB_.PCI0.LPC0.EC0_.FSW1) 
       } 
       Else 
       { 
        Store(RBEC(0x93), Local0) 
        Or(Local0, 0x10, Local0) 
        WBEC(0x93, Local0) 
        Sleep(0x64) 
        WBEC(0x94, 0xff) 
       } 
      } 
      Else 
      { 
       If(\ECON) 
       { 
        Store(0x0, \_SB_.PCI0.LPC0.EC0_.FSHC) 
       } 
       Else 
       { 
        WBEC(0x93, 0x0) 
       } 
      } 
     } 
     Method(FSTL, 0x1, NotSerialized) 
     { 
      If(LOr(LEqual(Arg0, 0x0), LEqual(Arg0, 0xff))) 
      { 
       Store(Zero, Local1) 
      } 
      Else 
      { 
       Divide(0x78000, Arg0, Local0, Local1) 
      } 
      Return(Local1) 
     } 
    } 
    .... 

que sólo entienden partes y piezas. El TZ se refiere a un ámbito dedicado a zonas térmicas (pienso).

Al leer el ACPI Spec, veo que _HOT y _CRT son objetos OSPM relacionados con los umbrales de temperatura.

El objeto _HOT declara la temperatura crítica a la que OSPM puede elegir para la transición el sistema en el estado de sueño S4, si es compatible; El objeto _CRT declara la temperatura crítica a la que OSPM debe realizar un cierre crítico.

Así que estoy pensando que tijeretazo del DSDT tiene algo que ver con la manipulación de la velocidad del ventilador portátil en función de la temperatura detectada en la zona térmica 0. Con base en esa supongo que FSTL en lo anterior es fan -Set-Nivel o algo similar, y FMAX y FMIN son Fan-Max velocidad y -Min velocidad, respectivamente. Creo que C2K es una función de conversión a Kelvin. Más allá de eso, solo estoy adivinando en base a conjeturas.

Editar: Tras un examen más, _PSL es Lista pasiva (de acuerdo con la ACPI Spec), que devuelve una lista de dispositivos de control de temperatura pasivo. Cuando los ventiladores se consideran control de temperatura "activo", un ejemplo de control de temperatura "pasiva" sería reducir el voltaje o la velocidad de una CPU. Así que no estoy seguro de que esta sección controle el ventilador en absoluto. Podría estar dedicado únicamente al control de temperatura pasiva.


Lo que estoy tratando de hacer es modificar la velocidad del ventilador portátil que se utiliza para diversas temperaturas. En algunos DSDT, la correlación entre la temperatura y la velocidad del ventilador se encuentra en una pequeña mesa ordenada, y modificación de la asignación es sólo una cuestión de cambiar algunos números. No parece que haya una tabla como esa en este archivo ASL, por lo que creo que debe haber alguna lógica de programa que realice la asignación.

¿Alguien puede ayudar a descifrar por mí?


Lo que realmente estoy tratando de hacer es conseguir el ventilador para relajarse en un ordenador portátil HP G60-244dx. Funciona demasiado fuerte incluso cuando la CPU está inactiva, y ... si es como mi computadora portátil HP nc8430 anterior, la velocidad del ventilador se establece innecesariamente alta. Es posible reducir la velocidad del ventilador, pero mantener la temperatura de la CPU igual.

creo con el fin de modificar la velocidad del ventilador que necesito para parchear el DSDT, y es por eso que quiero descifrar el anterior.

Muchas gracias.


posiblemente relacionados:
Setting an ACPI field in Linux

+0

¿No sería más fácil dejar que [SpeedFan] (http://www.almico.com/speedfan.php) lo haga por usted? – kichik

+0

sí, lo haría! si SpeedFan realmente funcionó para este tipo de PC. Lo ejecuté y me dice las temperaturas, pero no me deja cambiar nada. – Cheeso

Respuesta

0

encontramos con este al intentar el mismo proceso en mi dm1-3100ev HP. No hay una configuración de velocidad del ventilador directa, debe calcularse en el código. El hallazgo más cercano es algo así como las configuraciones FMIN y FMAX, establecidas en 20 y 56, respectivamente (¿no parecen estos límites de temperatura para las velocidades de ventilador mínimas y máximas?) Sin embargo, cambiarlas no funcionó (tal vez HP Coolsense está anulando las cosas)

¡Te avisaré si consigo encontrar algo!

Editar: Estaba equivocado, FMIN y FMAX especifican las velocidades mínima y máxima del ventilador: 2000 y 5600, respectivamente. Lamentablemente, cambiarlos todavía no funciona.

Cuestiones relacionadas