^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1) ===========================================
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2) High Precision Event Timer Driver for Linux
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3) ===========================================
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5) The High Precision Event Timer (HPET) hardware follows a specification
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6) by Intel and Microsoft, revision 1.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 7)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 8) Each HPET has one fixed-rate counter (at 10+ MHz, hence "High Precision")
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 9) and up to 32 comparators. Normally three or more comparators are provided,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10) each of which can generate oneshot interrupts and at least one of which has
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11) additional hardware to support periodic interrupts. The comparators are
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 12) also called "timers", which can be misleading since usually timers are
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 13) independent of each other ... these share a counter, complicating resets.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 14)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 15) HPET devices can support two interrupt routing modes. In one mode, the
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 16) comparators are additional interrupt sources with no particular system
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 17) role. Many x86 BIOS writers don't route HPET interrupts at all, which
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 18) prevents use of that mode. They support the other "legacy replacement"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 19) mode where the first two comparators block interrupts from 8254 timers
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 20) and from the RTC.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 21)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 22) The driver supports detection of HPET driver allocation and initialization
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 23) of the HPET before the driver module_init routine is called. This enables
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 24) platform code which uses timer 0 or 1 as the main timer to intercept HPET
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 25) initialization. An example of this initialization can be found in
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 26) arch/x86/kernel/hpet.c.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 27)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 28) The driver provides a userspace API which resembles the API found in the
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 29) RTC driver framework. An example user space program is provided in
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 30) file:samples/timers/hpet_example.c