NOVA User-Level Environment
Version testbox/changed-memory-timing-317-g320d8b5
|
#include <hpet.h>
Classes | |
struct | HostHpetRegister |
struct | HostHpetTimer |
Public Types | |
enum | { ENABLE_CNF = (1U << 0), LEG_RT_CNF = (1U << 1), LEG_RT_CAP = (1U << 15), BIT64_CAP = (1U << 13), FSB_INT_DEL_CAP = (1U << 15), FSB_INT_EN_CNF = (1U << 14), MODE32_CNF = (1U << 8), PER_INT_CAP = (1U << 4), TYPE_CNF = (1U << 3), INT_ENB_CNF = (1U << 2), INT_TYPE_CNF = (1U << 1) } |
Static Public Member Functions | |
static unsigned long | get_hpet_address (DBus< MessageAcpi > &bus_acpi) |
Get the HPET address from the ACPI table. | |
static uint16 | get_hpet_rid (DBus< MessageAcpi > &bus_acpi, unsigned block, unsigned comparator) |
Try to find out HPET routing ID. | |
static bool | check_hpet_present (void *address, unsigned timer, unsigned irq) |
Check whether some address points to an hpet. |
anonymous enum |
|
inlinestatic |
Check whether some address points to an hpet.
|
inlinestatic |
Get the HPET address from the ACPI table.
Returns 0 on failure.
|
inlinestatic |
Try to find out HPET routing ID.
Returns 0 on failure.
HPET routing IDs are stored in the DMAR table and we need them for interrupt remapping to work. This method is complicated by weird BIOSes that give each comparator its own RID. Our heuristic is to check, whether we see multiple device scope entries per ID. If this is the case, we assume that each comparator has a different RID.