Skip to content

HPET

include/acpi/hpet.h View source View on GitHub
union hpet_timer_general_capabilities (2 fields) source
§ uint64_t raw
§ struct
§ uint64_t rev_id : 7

Revision ID

§ uint64_t num_timers : 5

Number of timers

§ uint64_t counter_size : 1

0 = 32 bits wide, 1 = 64 bits wide

§ uint64_t reserved : 1
§ uint64_t leg_rt_cap : 1

Legacy replacement route capable

§ uint64_t vendor_id : 16
§ uint64_t counter_clock_period : 32
union hpet_timer_config (2 fields) source
§ uint64_t raw
§ struct
§ uint64_t reserved0 : 1
§ uint64_t interrupt_type : 1

0 = edge, 1 = level

§ uint64_t interrupt_enable : 1

1 = interrupt enabled

§ uint64_t type : 1

0 = one-shot, 1 = periodic

§ uint64_t periodic_capable : 1

read-only

§ uint64_t size_capable : 1

read-only, 1 = 64-bit capable

§ uint64_t value_set : 1
§ uint64_t reserved1 : 1
§ uint64_t timer_32bit : 1
§ uint64_t ioapic_route : 5
§ uint64_t fsb_int_enable : 1
§ uint64_t fsb_int_delivery : 1
§ uint64_t reserved2 : 16
§ uint64_t route_cap : 32
void hpet_init(void)
source
uint64_t hpet_timestamp_ns(void)
source
void hpet_program_oneshot(uint64_t future_ms)
source
uint64_t hpet_timestamp_ms(void)
source
uint64_t hpet_timestamp_us(void)
source
void hpet_disable(void)
source
void hpet_enable(void)
source
void hpet_clear_interrupt_status(void)
source
void hpet_setup_timer(
    uint8_t timer_index,
    irq_t irq_line,
    bool periodic,
    bool edge_triggered
)
source
void hpet_write64(uint64_t offset, uint64_t value)
source
uint64_t hpet_read64(uint64_t offset)
source
void hpet_setup_periodic_interrupt_us(uint64_t microseconds_period)
source
extern uint64_t cc_mem_io *hpet_base
source
extern uint64_t hpet_timer_count
source
extern uint64_t hpet_fs_per_tick
source
#define HPET_GEN_CAP_ID_OFFSET 0x0
source
#define HPET_GEN_CONF_OFFSET 0x10
source
#define HPET_GEN_INT_STAT_OFFSET 0x20
source
#define HPET_IRQ_BASE 2
source
#define HPET_MAIN_COUNTER_OFFSET 0xF0
source
#define HPET_TIMER_CONF_OFFSET(num)
source
Expansion
#define HPET_TIMER_CONF_OFFSET(num) (0x100 + (num * 0x20))
#define HPET_TIMER_COMPARATOR_OFFSET(num)
source
Expansion
#define HPET_TIMER_COMPARATOR_OFFSET(num) (HPET_TIMER_CONF_OFFSET(num) + 0x8)
#define HPET_CURRENT (smp_id_raw() % hpet_timer_count)
source
TODO

We need to start using the HPET and figure out a caller contract

#define HPET_IRQ_LINE 2
source