11.3. 风扇设备
ACPI 1.0 定义了一个简单的风扇设备,假定该设备在 D0 状态时处于运行中。热区引用风扇设备,认为其主要负责该区域内的冷却。请注意,对于任一热区都可以存在多个风扇设备。它们可能是实际不同的风扇,也可能用于实现一个具有多种速度的风扇(例如,通过同时打开两个“风扇”,该风扇将以全速运行)。
ACPI 4.0 定义了附加的风扇设备接口对象,使 OSPM 能够执行更健壮的主动冷却热控制。这些对象总结如下(参见下面的表 11.1)。OSPM 要求必须在风扇设备下定义下表中列出的所有对象,才能启用高级主动冷却控制。缺少其中任何一个对象都会导致 OSPM 执行 ACPI 1.0 风格的简单风扇控制。
风扇设备的即插即用 ID 为 PNP0C0B。
表 11.1 风扇专用对象
| 对象 | 描述 |
|---|---|
| _FIF | 返回风扇设备信息。 |
| _FPS | 返回受支持的风扇性能状态列表。 |
| _FSL | 设置风扇设备速度级别(性能状态)的控制方法。 |
| _FST | 返回风扇设备的当前状态信息。 |
虽然风扇设备及其关联对象是可选的,但如果平台实现了风扇设备,则上表中列出的所有对象都是必需的,并且必须提供。
11.3.1. 风扇对象
11.3.1.1. _FIF (风扇信息)
可选的 _FIF 对象向 OSPM 提供风扇设备能力信息。
参数:
无
返回值:
一个 Package,包含下表所述的风扇设备参数
_FIF 求值返回如下格式的一个包:
Package (){
Revision, // Integer
FineGrainControl, // Integer Boolean
StepSize // Integer DWORD
LowSpeedNotificationSupport // Integer Boolean
}
表 11.2 FIF 包详细信息
| 字段 | 格式 | 描述 |
|---|---|---|
| Revision | Integer | 当前修订版本为:0 |
| Fine Grain Control | Integer (Boolean) | 此字段中的非零值表示 OSPM 可以使用 0-100 范围内的 Level 参数值来评估风扇设备的 _FSL 对象,该值表示最大速度的百分比。此字段中的零值表示 OSPM 只能使用 _FPS 对象包列表中的包内 Control 字段值作为 Level 参数值来评估风扇设备的 _FSL 对象。 |
| Step Size | Integer (DWORD) | 当 OSPM 执行细粒度风扇速度控制时,建议使用的最小步长,以百分点表示。如果 Fine Grain Control 字段非零且此字段的值介于 1 到 9 之间,OSPM 可以使用此字段的值。 |
| Low Speed Notification Support | Integer (Boolean) | 此字段中的非零值表示如果检测到风扇低速(异常)运行,平台将向风扇设备发出 Notify (0x80)。 |
如果风扇设备支持细粒度控制,OSPM 可以使用任何小于或等于 _FPS 对象包列表中、与已超出的主动冷却跳变点对应的包中所指定的 Control 字段值的 Level 参数值来评估风扇设备的 _FSL 对象。此能力为 OSPM 提供了一百个风扇速度设置,从而实现细粒度风扇速度控制。平台使用 Step Size 字段帮助 OSPM 通过细粒度风扇速度控制优化其风扇级别选择策略。平台使用 Step Size 字段帮助 OSPM 通过指示适用于该风扇的风扇速度级别值的推荐增量来优化其风扇级别选择策略,在 1% 增量并非最佳时尤为如此。如果 OSPM 使用 Step Size 字段值对 Level 进行增量选择时其总和未达到 100%,则 OSPM 可以选择适当的结束 Level 增量以达到 100%。在降低 Level 时,OSPM 应首先使用相同的剩余步长值。
11.3.1.2. _FPS (风扇性能状态)
可选的 _FPS 对象求值结果为一个可变长度的包,其中包含一个包列表,这些包描述风扇设备的性能状态。当温度读数高于热区中由 _ACx 对象定义的主动冷却跳变点,或者高于热区内设备的原生活动冷却跳变点时,如果该风扇设备存在于相应的 _ALx 设备列表中,或者在主动冷却关系表 (_ART) 中存在该风扇与该跳变点的条目,则 OSPM 热控制会从 _FPS 对象描述的风扇性能状态列表中启用适当的对应风扇性能状态。
OSPM 假定风扇性能状态列表中相邻条目之间的声学影响值和功耗值具有线性关系。请注意,声学影响的测量单位(分贝)本质上是非线性的。因此,平台应根据需要填充 _FPS 条目,以使 OSPM 能够获得最佳结果。
参数:
无
返回值:
一个可变长度的 Package,包含一个 Revision ID 和一个 Package 列表,这些 Package 按下表所述描述风扇设备的性能状态。
返回值信息
Package {
Revision, // Integer - Current revision is: 0
FanPState[0], // Package
....
FanPState[n] // Package
}
每个 FanPState 子包都包含下面描述的元素:
Package () // Fan P-State
{
Control, // Integer DWORD
TripPoint, // Integer DWORD
Speed, // Integer DWORD
NoiseLevel, // Integer DWORD
Power // Integer DWORD
}
表 11.3 FPS FanPstate 包详细信息
| 字段 | 格式 | 说明 |
|---|---|---|
| Control | Integer (DWORD) | 指示用于通过 _FSL 对象将风扇速度设置到特定级别的值。如果风扇设备如 _FIF 对象所指示的那样支持细粒度控制,则该值为最大速度级别的百分比 (0-100)。如果风扇设备不支持细粒度控制,则该字段是一个不透明值,OSPM 只需在对 _FSL 对象求值时使用它,以将级别设置为该性能状态。 |
| TripPoint | Integer (DWORD) | 0-9:与该性能状态对应的主动散热临界点编号。如果定义了 _ART 对象,OSPM 可选择性地使用 _ART 对象和 _FPS 对象提供的信息来选择备用风扇性能状态。在 _FPS 中,每个唯一的临界点编号只允许有一个条目。0x0A- 0xFFFFFFFE:保留 0x0FFFFFFFF:表示该性能状态不对应特定的主动散热临界点。 |
| Speed | Integer (DWORD) | 指示该性能状态下风扇的转速,单位为每分钟转数。 |
| NoiseLevel | Integer (DWORD) | 该可选字段指示风扇在该性能状态下发出的可听噪声。该值以分贝的十分之一表示噪声。例如,如果风扇在该性能状态下发出的噪声为 28.3dB,则该字段的值为 283。值 0xFFFFFFFF 表示该字段未填充。 |
| Power | Integer (DWORD) | 该可选字段指示风扇在该性能状态下的功耗(以毫瓦为单位)。例如,如果风扇在该性能状态下消耗 .5W,则该字段的值为 500。值 0xFFFFFFFF 表示该字段未填充。 |
11.3.1.3. _FSL (风扇设置级别)
可选的 _FSL 对象是一个控制方法,OSPM 对其求值以将风扇设备的速度(性能状态)设置为特定级别
参数:(1)
Arg0 - 级别 (Integer):向平台传达要设置的风扇速度级别。
返回值:
无
参数信息
Arg0:级别。如果风扇支持细粒度控制,则级别是平台要使风扇达到的最大级别百分比 (0-100)。如果风扇不支持细粒度控制,则级别是 _FPS 对象包列表中某个包的 Control 字段值。级别值为零会使平台关闭风扇。
11.3.1.4. _FST (风扇状态)
可选的 _FST 对象为风扇设备提供状态信息。
参数:
无
返回值:
一个 Package,包含如下表所述的风扇设备状态信息
_FST 求值返回一个具有以下格式的包:
Package (){
Revision, // Integer
Control, // Integer DWORD
Speed // Integer DWORD
}
表 11.4 FST 包详细信息
| 字段 | 格式 | 说明 |
|---|---|---|
| Revision | Integer | 当前修订版本为:0 |
| Control | Integer (DWORD) | 用于操作风扇的当前控制值。如果风扇未运行,Control 将为零。如果风扇正在运行,Control 是在对 _FSL 对象求值时传入的级别参数。 |
| Speed | Integer (DWORD) | 风扇当前旋转的转速,单位为每分钟转数。值 0xFFFFFFFF 表示风扇不支持速度报告。 |