ACPI_THERMAL(4)

πŸ“¦ version 15.1, in freebsd 14.5, freebsd 15.1, nixpkgs unstable

πŸ’… acpi_thermal β€” like, the ACPI thermal management subsystem, bestie

okay so this is acpi_thermal(4) from the Kernel Interfaces Manual (section 4, for the record) and honestly? she's the one keeping your laptop from literally melting. let's get into it ✨


🌸 NAME 🌸

acpi_thermal β€” the ACPI thermal management subsystem. yes queen, temperature cop of the kernel πŸ”₯


πŸŽ€ SYNOPSIS πŸŽ€

device acpi

that's it. that's the whole vibe. one line, iconic.


πŸ¦‹ DESCRIPTION πŸ¦‹

so the acpi_thermal driver is the whole thermal-management situation of the ACPI module. she comes with a sysctl(8) interface and a devd(8) notification interface β€” double threat, no cap. the sysctls export the properties of every ACPI thermal zone object πŸ’–

heads up: a system can have multiple thermal zones. like, each CPU and the enclosure could all be their own separate thermal zones, each one with its own setpoints and its own cooling devices. main character energy per zone, honestly. thermal zones get numbered sequentially in the order they show up in the AML πŸ“‹

and yeah β€” the acpi_thermal driver also activates the active cooling system according to each thermal zone's setpoints. she's proactive like that 🫢


✨ SYSCTL VARIABLES ✨

  • hw.acpi.thermal.min_runtime β€” how many seconds to keep active cooling going once it's started. a new active cooling level won't get picked until this interval expires. respect the cooldown period πŸ’…
  • hw.acpi.thermal.polling_rate β€” seconds between polling the current temperature. basically how often she checks in on you πŸ‘€
  • hw.acpi.thermal.user_override β€” if you set this to 1, you're allowed to override various setpoints (the ones listed below). the original values for these settings come from the BIOS, so lowkey changing them could cause system overheating and possible damage. default is 0 (no override).
bestie please be careful with this one 😭 the BIOS gave you those numbers for a reason.
  • hw.acpi.thermal.tz%d.active β€” current active cooling system state. if this is non-negative, the appropriate _AC%d object is running. set this value to the desired active cooling level to force the corresponding fan object to the appropriate level. manual fan control, we love to see it 🌬️
  • hw.acpi.thermal.tz%d.passive_cooling β€” if set to 1, passive cooling is enabled. that's cooling without fans, using cpufreq(4) as the mechanism for controlling CPU speed. default is enabled for tz0 where it is available. silent but deadly 🧚
  • hw.acpi.thermal.tz%d.thermal_flags β€” current thermal zone status. these are bit-masked values πŸ”’
  • hw.acpi.thermal.tz%d.temperature β€” current temperature for this zone. the number we're all here for 🌑️
  • hw.acpi.thermal.tz%d._PSV β€” temperature to start passive cooling by throttling down the CPU, etc. this value can be overridden by the user.
  • hw.acpi.thermal.tz%d._CR3 β€” temperature to start critical suspend to RAM (S3). this value can be overridden by the user.
  • hw.acpi.thermal.tz%d._HOT β€” temperature to start critical suspend to disk (S4). this value can be overridden by the user.
  • hw.acpi.thermal.tz%d._CRT β€” temperature to start critical shutdown (S5). this value can be overridden by the user. scary one, ngl πŸ’€
  • hw.acpi.thermal.tz%d._ACx β€” temperatures at which to switch to the corresponding active cooling level. the lower the _ACx value, the higher the cooling power. so small number = big chill, iykyk ❄️

all temperatures are printed in Celsius 🌈 values can be set in Celsius (by providing a trailing "C") or Kelvin (by leaving off any trailing letter). and when you're setting a value by sysctl(8), do not specify a trailing decimal β€” so like 90C instead of 90.0C, bestie. the decimal is not invited to the party πŸ™ˆ


πŸ”” NOTIFIES πŸ””

notifies get passed to userland via devd(8). check /etc/devd.conf and devd.conf(5) for examples. the acpi_thermal driver sends events with these attributes:

  • system β€” ACPI
  • subsystem β€” Thermal
  • type β€” the fully qualified thermal zone object path as in the ASL
  • notify β€” an integer designating the event:
    • 0x80 β€” current temperature has changed.
    • 0x81 β€” one or more trip points (_ACx, _PSV) have changed.
    • 0x82 β€” one or more device lists (_ALx, _PSL, _TZD) have changed.
    • 0xcc β€” non-standard notify that the system will shutdown if the temperature stays above _CRT or _HOT for one more poll cycle.
0xcc is genuinely the "girl put the laptop on a hard surface Right Now" notification 😭

πŸ‘€ SEE ALSO πŸ‘€

acpi(4), cpufreq(4), acpidump(8)

go read them, they're all slaying in their own lanes πŸ’œ


πŸ‘‘ AUTHORS πŸ‘‘

Michael Smith

and this manual page was written by Takanori Watanabe.


mwah πŸ’‹ that's the whole page! this cutie came to you from the Debian crew, dated November 21, 2022 β€” ACPI_THERMAL(4), periodt. stay cool out there bestie, and i mean that literally πŸŒΈπŸ’–

πŸ“¦ where this page comes from