Che*_*eso 6 windows acpi asl dsdt
我使用这个.NET程序来执行Windows注册表的二进制转储HKLM/Hardware/ACPI/DSDT.
然后,运行Microsoft的ASL编译器,我可以得到这个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)
}
}
....
Run Code Online (Sandbox Code Playgroud)
我只了解点点滴滴.该TZ是指专门为热区(我认为)范围.
通过阅读ACPI规范,我看到_HOT和_CRT是与温度阈值相关的OSPM对象.
如果支持,_HOT对象声明OSPM可以选择将系统转换到S4休眠状态的临界温度; _CRT对象声明OSPM必须执行关键关闭的临界温度.
因此,我认为DSDT的剪辑与操作笔记本电脑的风扇速度有关,这取决于感热区0中的感应温度.基于此我猜测FSTL上面是Fan-Set-Level或类似的东西,和FMAX,FMIN分别是Fan-Max-Speed和-Min-Speed.我认为C2K 是转换为开尔文的功能.除此之外,我只是猜测基于猜测.
编辑:进一步审查时,_PSL是被动列表(根据ACPI规范),它返回被动温度控制设备列表.在风扇被认为是"主动"温度控制的情况下,"被动"温度控制的一个例子是在CPU上转动电压或速度.所以我不确定这部分是否会控制风扇.它可以专门用于被动温度控制.
我要做的是修改用于各种温度的笔记本电脑风扇速度.在某些DSDT中,临时和风扇速度之间的映射是在一个简洁的小表中,修改映射只是改变一些数字的问题.在这个ASL文件中似乎没有这样的表,所以我认为必须有一些程序逻辑在进行映射.
任何人都可以帮我解密一下吗?
我真正想做的是让风扇在HP G60-244dx笔记本电脑上放松.即使CPU处于空闲状态,它也会运行得太大,而且......如果它像我以前的HP nc8430笔记本电脑那样,风扇速度设置得不必要地高.可以降低风扇速度,同时保持CPU温度不变.
我想为了修改风扇速度我需要修补DSDT,这就是为什么我要解读上面的内容.
非常感谢.
可能相关:
在Linux中设置ACPI字段
在我的 HP dm1-3100ev 上尝试相同的过程时遇到了这个问题。没有直接的风扇速度设置,必须通过代码计算。最接近的发现是 FMIN 和 FMAX 设置,分别设置为 20 和 56(这些看起来不像最小和最大风扇速度的温度限制吗?)但更改这些设置不起作用(也许 HP Coolsense 会覆盖这些设置) )。
如果我找到任何东西,我会告诉你的!
编辑:我错了,FMIN 和 FMAX 指定最小和最大风扇速度:分别为 2000 和 5600。不幸的是,改变这些仍然不起作用。
| 归档时间: |
|
| 查看次数: |
3416 次 |
| 最近记录: |