The thermal zone is represented as a device in FreeBSD. The FreeBSD thermal zone device driver exports thermal information using the sysctl interface. Passive cooling is not yet implemented, though CPU throttling is implemented. The device driver checks the thermal zone when a tunable polling time expires and also when thermal zone Notify AML opcode are evaluated. Notify opcodes are typically found in the general purpose interrupt handlers or in the query handler for ACPI-capable embedded controllers. ACPI routines check the thermal zone by fetching the temperature using the thermal zone _TMPmethod and comparing its value to the _ACx value. If the _ACx value is smaller than current temperature, then we change thermal mode to the largest x value. If the new thermal state value is larger than old one, we activate the device object listed in the _ALx object where x is the new state number, otherwise we deactivate them.