# 11.3. Fan Device¶

ACPI 1.0 defined a simple fan device that is assumed to be in operation when it is in the D0 state. Thermal zones reference fan device(s) as being responsible primarily for cooling within that zone. Notice that multiple fan devices can be present for any one thermal zone. They might be actual different fans, or they might be used to implement one fan of multiple speeds (for example, by turning both “fans” on the one fan will run full speed).

ACPI 4.0 defines additional fan device interface objects enabling OSPM to perform more robust active cooling thermal control. These objects are summarized (see Table 11.1 below). OSPM requires that all of the objects listed in the table below be defined under a fan device to enable advanced active cooling control. The absence of any of these objects causes OSPM to perform ACPI 1.0 style simple fan control .

The Plug and Play ID of a fan device is PNP0C0B.

Table 11.1 Fan Specific Objects

Object

Description

_FIF

Returns fan device information.

_FPS

Returns a list of supported fan performance states.

_FSL

Control method that sets the fan device’s speed level (performance state).

_FST

Returns current status information for a fan device.

While the Fan Device and its associated objects are optional, if the Fan Device is implemented by the platform, all objects listed in the table above are required and must be provided.

## 11.3.1. Fan Objects¶

### 11.3.1.1. _FIF (Fan Information)¶

The optional _FIF object provides OSPM with fan device capability information.

Arguments:

None

Return Value:

A Package containing the fan device parameters as described in the table below

_FIF evaluation returns a package of the following format:

Package (){
Revision,                           // Integer
FineGrainControl,                   // Integer Boolean
StepSize                            // Integer DWORD
}

Table 11.2 FIF Package Details

Field

Format

Description

Revision

Integer

Current revision is: 0

Fine Grain Control

Integer (Boolean)

A non zero value in this field indicates OSPM may evaluate the fan device’s _FSL object with a Level argument value in the range of 0-100, which represents a percentage of maximum speed. A zero value in this field indicates that OSPM may evaluate the fan device’s _FSL object with a Level argument value that is a Control field value from a package in the _FPS object’s package list only.

Step Size

Integer (DWORD)

The recommended minimum step size in percentage points to be used when OSPM performs fine-grained fan speed control. OSPM may utilize the value of this field if the FineGrainControl field is non-zero the value in this field is between 1 and 9.

Integer (Boolean)

A non zero value in this field indicates that the platform will issue a Notify (0x80) to the fan device if a low (errant) fan speed is detected.

If a fan device supports fine-grained control, OSPM may evaluate a fan device’s _FSL object with any Level argument value that is less than or equal to the Control field value specified in the package of the _FPS object’s package list that corresponds to the active cooling trip point that has been exceeded. This capability provides OSPM access to one hundred fan speed settings thus enabling fine-grained fan speed control. The platform uses the StepSize field to help OSPM optimize its fan level selection policy by fine-grained fan speed control. The platform uses the StepSize field to help OSPM optimize its fan level selection policy by indicating recommended increments in the fan speed level value that are appropriate for the fan when one percent increments are not optimal. In the event OSPM’s incremental selections of Level using the StepSize field value do not sum to 100%, OSPM may select an appropriate ending Level increment to reach 100%. OSPM should use the same residual step value first when reducing Level.

### 11.3.1.2. _FPS (Fan Performance States)¶

The optional _FPS object evaluates to a variable-length package containing a list of packages that describe the fan device’s performance states. A temperature reading above an active cooling trip point defined by an _ACx object in a thermal zone or above a native active cooling trip point of a device within the thermal zone causes OSPM thermal control to engage the appropriate corresponding fan performance state from the list of fan performance states described by the _FPS object if the fan device is present in the corresponding _ALx device list or if an entry exists for the fan and trip point in the active cooling relationship table (_ART).

OSPM assumes a linear relationship for the acoustic impact and power consumption values between successive entries in the fan performance state list. Notice that the acoustic impact measurement unit (Decibels) is inherently non-linear. As such, the platform should populate _FPS entries as necessary to enable OSPM to achieve optimal results.

Arguments:

None

Return Value:

A variable-length Package containing a Revision ID and a list of Packages that describe the fan device’s performance states as described in the table below.

Return Value Information

Package {
Revision,             // Integer - Current revision is: 0
FanPState[0],         // Package
....
FanPState[n]          // Package
}


Each FanPState sub-Package contains the elements described below:

Package ()                // Fan P-State
{
Control,              // Integer DWORD
TripPoint,            // Integer DWORD
Speed,                // Integer DWORD
NoiseLevel,           // Integer DWORD
Power                 // Integer DWORD
}

Table 11.3 FPS FanPstate Package Details

Field

Format

Description

Control

Integer (DWORD)

Indicates the value to be used to set the fan speed to a specific level using the _FSL object. If the fan device supports fine-grained control as indicated by the _FIF object, this value is a percentage (0-100) of maximum speed level. If the fan device does not support fine-grained control, this field is an opaque value that OSPM must simply use in its evaluation of the _FSL object to set the level to this performance state.

TripPoint

Integer (DWORD)

0-9: The active cooling trip point number that corresponds to this performance state. If the _ART object is defined, OSPM may optionally use information provided by the _ART object and _FPS objects to select alternative fan performance states. Only one entry per unique trip point number is allowed in the _FPS. 0x0A- 0xFFFFFFFE: Reserved 0x0FFFFFFFF: Indicates that this performance state does not correspond with a specific active cooling trip point.

Speed

Integer (DWORD)

Indicates the speed of the fan in revolutions per minute in this performance state.

NoiseLevel

Integer (DWORD)

This optional field indicates the audible noise emitted by the fan in this performance state. The value represents the noise in 10ths of decibels. For example, if the fan emits noise at 28.3dB in this performance state, the value of this field would be 283. A value of 0xFFFFFFFF indicates that this field is not populated.

Power

Integer (DWORD)

This optional field indicates the power consumption (in milliwatts) of the fan in this performance state. For example, if the fan consumes .5W in this performance state, the value of this field would be 500. A value of 0xFFFFFFFF indicates that this field is not populated.

### 11.3.1.3. _FSL (Fan Set Level)¶

The optional _FSL object is a control method that OSPM evaluates to set a fan device’s speed (performance state) to a specific level

Arguments:(1)

Arg0 - Level (Integer): conveys to the platform the fan speed level to be set.

Return Value:

None

Argument Information

Arg0: Level. If the fan supports fine-grained control, Level is a percentage of maximum level (0-100) that the platform is to engage the fan. If the fan does not support fine-grained control, Level is a Control field value from a package in the _FPS object’s package list. A Level value of zero causes the platform to turn off the fan.

### 11.3.1.4. _FST (Fan Status)¶

The optional _FST object provides status information for the fan device.

Arguments:

None

Return Value:

A Package containing fan device status information as described in the table below

_FST evaluation returns a package of the following format:

Package (){
Revision,             // Integer
Control,              // Integer DWORD
Speed                 // Integer DWORD
}

Table 11.4 FST Package Details

Field

Format

Description

Revision

Integer

Current revision is: 0

Control

Integer (DWORD)

The current control value used to operate the Fan. If the fan is not operating Control will be zero. If the fan is operating, Control is the Level argument passed in the evaluation of the _FSL object.

Speed

Integer (DWORD)

The current fan speed in revolutions per minute at which the fan is rotating. A value of 0xFFFFFFFF indicates that the fan does not support speed reporting.