112 loge(
"hpet",
"HPET not in system memory address space is not yet implemented");
119 uint64_t period =
hpet->capabilities.counter_clk_period;
121 if(period < 1000000) {
122 loge(
"hpet",
"hpet timer periods below 1ns are not yet implemented");
128 logd(
"hpet",
"configuring HPET at %d:%x (%x): vendor %x, rev %d, #comparators %d, ns multiplier %d",
133 hpet->configuration.enable_cnf = 1;
138 logi(
"hpet",
"HPET initialized, we now know the time");
static const uint8_t acpi_address_space_memory
static uint16_t ticks_to_ns_multiplier
void init_hpet(struct acpi_table_header *header)
struct acpi_table_header header
uint64_t counter_clk_period
static struct hpet_mmio * hpet
uint8_t hardware_revision
struct acpi_address base_address
void sc_handle_clock_read(uint64_t *nanoseconds)
static uint64_t initialization_ticks
uint8_t legacy_replacement_irq_cap
uint16_t main_counter_minimum_clock_tick
struct acpi_table_header header
#define ALLOCATOR_REGION_SLAB_4K
#define logd(component, fmt,...)
#define logi(component, fmt,...)
#define loge(component, fmt,...)
void vm_context_map(struct vm_table *pml4, ptr_t virtual, ptr_t physical, uint8_t pat)
ptr_t vm_context_find_free(struct vm_table *context, region_t region, size_t num)
struct vm_table * VM_KERNEL_CONTEXT