NOVA User-Level Environment  Version testbox/changed-memory-timing-317-g320d8b5
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
BasicHpet Class Reference

#include <hpet.h>

Inheritance diagram for BasicHpet:
HostHpet PerCpuTimerService

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.

Member Enumeration Documentation

anonymous enum
Enumerator:
ENABLE_CNF 
LEG_RT_CNF 
LEG_RT_CAP 
BIT64_CAP 
FSB_INT_DEL_CAP 
FSB_INT_EN_CNF 
MODE32_CNF 
PER_INT_CAP 
TYPE_CNF 
INT_ENB_CNF 
INT_TYPE_CNF 

Member Function Documentation

static bool BasicHpet::check_hpet_present ( void *  address,
unsigned  timer,
unsigned  irq 
)
inlinestatic

Check whether some address points to an hpet.

static unsigned long BasicHpet::get_hpet_address ( DBus< MessageAcpi > &  bus_acpi)
inlinestatic

Get the HPET address from the ACPI table.

Returns 0 on failure.

static uint16 BasicHpet::get_hpet_rid ( DBus< MessageAcpi > &  bus_acpi,
unsigned  block,
unsigned  comparator 
)
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.


The documentation for this class was generated from the following file: