38 uint64_t ns_per_tick = min_tick / 1000000;
44 if ((
cap & (1U << irq)) == 0) {
50 (
uint64_t) ((1 << 1) | (1 << 2) | (irq << 9) | (1 << 3)));
73 LOG2_INFO(
"HPET",
"num timers %d", num_timers);
89 for (
volatile uint64_t i = 0; i < ns * 10; i++)
90 __asm__
volatile(
"pause");
uintptr_t acpi_map_phys_page(uintptr_t phys_addr, size_t len)
madt_record_table_entry_t table[]
boolean_t vxHPETIsAvailable()
static volatile uintptr_t hpet_address
void vxHPETInitialize(uintptr_t addr)
void vxHPETSleep(uint64_t ns)
void hpet_level_timer_setup(uint32_t n, uint64_t tick_count, int irq)
uint64_t vxHPETGetMainCount()
uint64_t vxHPETMinTickNs(void)
static uint64_t min_tick_ns
static void hpet_write(uint32_t reg, uint64_t value)
static uint64_t hpet_read(uint32_t reg)
#define HPET_TIMER_COMPARATOR(N)
#define HPET_GENERAL_CONFIG
#define HPET_GENERAL_CAP_ID
#define HPET_TIMER_CONFIG(N)
static uint64_t mmio_inll(uintptr_t addr)
static void mmio_outll(uintptr_t addr, uint64_t value)
#define LOG2_ERROR(mod, fmt,...)
#define LOG2_INFO(mod, fmt,...)
int strncmp(const char *s1, const char *s2, size_t n)
void memcopy(void *dest, void *src, size_t size)