J'ai utilisé this .NET program pour faire un vidage binaire du registre de Windows au HKLM/Hardware/ACPI/DSDT
.Aidez-moi à déchiffrer ce code de langue source ACPI?
Ensuite, en cours d'exécution ASL Compiler Microsoft à ce sujet, je peux obtenir ce Source Langue ACPI:
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)
}
}
....
Je comprends que des morceaux. Le TZ fait référence à un scope dédié aux zones thermiques (je pense). A la lecture du ACPI Spec, je vois que _HOT et _CRT sont des objets OSPM relatifs aux seuils de température.
L'objet _HOT déclare la température critique à laquelle MPCP peut choisir de passer le système dans l'état de sommeil S4, si elle est soutenue; L'objet _CRT déclare la température critique à laquelle OSPM doit effectuer un arrêt critique.
Je suis en pensant que snip du DSDT a quelque chose à voir avec la manipulation de la vitesse du ventilateur d'ordinateur portable en fonction de la température détectée dans la zone thermique 0. Sur cette base, je suppose que FSTL
dans ce qui précède est Fan -Set-Level ou quelque chose de similaire, et FMAX
et FMIN
sont Fan-Max-Speed et -Min-Speed, respectivement. Je pense que C2K
est une fonction de conversion en Kelvin. Au-delà, je ne fais que deviner sur la base de suppositions.
Éditer: après un examen plus approfondi, _PSL
est la liste passive (selon les spécifications ACPI), qui renvoie une liste de dispositifs de contrôle de température passive. Lorsque les ventilateurs sont considérés comme étant des régulateurs de température "actifs", un exemple de contrôle de température "passif" consisterait à faire baisser la tension ou la vitesse d'un processeur. Donc, je ne suis pas sûr que cette section contrôle le ventilateur du tout. Il pourrait être dédié uniquement au contrôle passif de la température. Ce que j'essaye de faire est de modifier la vitesse de ventilateur d'ordinateur portable qui est utilisée pour différentes températures. Dans certains DSDT, le mappage entre temp et vitesse du ventilateur est dans une petite table soignée, et la modification du mappage est juste une question de changement de quelques nombres. Il ne semble pas qu'il y ait une telle table dans ce fichier ASL, donc je pense qu'il doit y avoir une logique de programme qui fait le mapping.
Quelqu'un peut-il aider à le déchiffrer pour moi?
Ce que j'essaie vraiment de faire, c'est de détendre le ventilateur sur un ordinateur portable HP G60-244dx. Il fonctionne trop fort même lorsque le processeur est inactif, et ... s'il ressemble à mon précédent ordinateur portable HP nc8430, la vitesse du ventilateur est trop élevée. Il est possible d'abaisser la vitesse du ventilateur tout en conservant la même température.
Je pense que pour modifier la vitesse du ventilateur, j'ai besoin de patcher le DSDT, et c'est pourquoi je veux déchiffrer ce qui précède.
Merci beaucoup.
peut-être lié:
Setting an ACPI field in Linux
Ne serait-il pas plus simple de laisser faire [SpeedFan] (http://www.almico.com/speedfan.php) pour vous? – kichik
oui ce serait! si SpeedFan fonctionnait réellement pour ce type de PC. Je l'ai couru et ça me dit le temps, mais ne me laisse pas changer quoi que ce soit. – Cheeso