Note that there are some explanatory texts on larger screens.

plurals
  1. POHelp me decipher this ACPI Source Language code?
    primarykey
    data
    text
    <p>I used <a href="http://cheeso.members.winisp.net/srcview.aspx?dir=DSDT" rel="nofollow noreferrer">this .NET program</a> to do a binary dump of the Windows Registry at <code>HKLM/Hardware/ACPI/DSDT</code>.</p> <p>Then, running Microsoft's <a href="http://www.acpi.info/toolkit.htm" rel="nofollow noreferrer">ASL Compiler</a> on that, I can get this <em>ACPI Source Language</em>: </p> <pre><code>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) } } .... </code></pre> <p>I only understand bits and pieces. The <em>TZ</em> refers to a scope dedicated to thermal zones (I think). </p> <p>From reading the <a href="http://www.acpi.info/DOWNLOADS/ACPIspec40a.pdf" rel="nofollow noreferrer">ACPI Spec</a>, I see that _HOT and _CRT are OSPM objects relating to temperature thresholds. </p> <blockquote> <p>The _HOT object declares the critical temperature at which OSPM may choose to transition the system into the S4 sleeping state, if supported; The _CRT object declares the critical temperature at which OSPM must perform a critical shutdown.</p> </blockquote> <p>So I'm figuring that snip of the DSDT has something to do with manipulating the laptop fan speed depending on the sensed temperature in thermal zone 0. Based on that I'm guessing that <code>FSTL</code> in the above is Fan-Set-Level or something similar, and <code>FMAX</code> and <code>FMIN</code> are Fan-Max-Speed and -Min-Speed, respectively. I think <code>C2K</code> is a convert-to-Kelvin function. Beyond that I am just guessing based on guesses.</p> <p><em>Edit:</em> upon further review, <code>_PSL</code> is Passive List (according to the ACPI Spec), which returns a list of Passive Temperature control devices. Where Fans are considered "Active" temperature control, an example of "Passive" temp control would be turning the voltage or speed down on a CPU. So I'm not sure this section controls the fan at all. It could be dedicated solely to passive temp control. </p> <hr> <p>What I'm trying to do is modify the laptop fan speed that gets used for various temperatures. In some DSDT, the mapping between temp and fan speed is in a neat little table, and modifying the mapping is just a matter of changing a few numbers. It does not appear that there's a table like that in this ASL file, so I think there must be some program logic doing the mapping. </p> <p>Can anyone help decipher it for me? </p> <hr> <p>What I really am trying to do is get the fan to relax on an HP G60-244dx laptop. It runs too loud even when the CPU is idle, and ... if it is like my previous HP nc8430 laptop, the fan speed is set unnecessarily high. It's possible to lower the fan speed, yet keep the CPU temperature the same. </p> <p>I think in order to modify the fan speed I need to patch the DSDT, and that's why I want to decipher the above.</p> <p>Many thanks.</p> <hr> <p>possibly related:<br> <a href="https://stackoverflow.com/questions/2759412/setting-an-acpi-field-in-linux">Setting an ACPI field in Linux</a></p>
    singulars
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload