37 extern volatile uint32_t *amd64_apic_base;
38 bool has_apic_support(
void);
39 void apic_initialize(
void);
40 void apic_timer_install_handler(
void);
41 uint32_t apic_timer_calibrate(
void);
42 void apic_timer_initialize(uint64_t desired_freq_hz);
43 void amd64_clock_driver_initialize(
void);
47#define APIC_TIMER_NUM_CALIBRATIONS 5
49#define APIC_TIMER_DIVIDE_VALUE 16
51#define APIC_TIMER_SELECT_DIVIDER 3
53#define PIT_FREQUENCY 1193180
59#define PIT_CALIBRATE_DIVIDER 20
60#define PIT_CALIBRATE_TICKS (PIT_FREQUENCY/PIT_CALIBRATE_DIVIDER)
65 PIT_CALIBRATE_TICKS <= 0xffff,
70#define PIT_PORT_CHAN0 0x40
71#define PIT_PORT_CHAN1 0x41
72#define PIT_PORT_CHAN2 0x42
77#define PIT_PORT_CHAN2_GATE 0x61
78#define PIT_CHAN2_TIMER_BIT 1
79#define PIT_CHAN2_SPEAKER_BIT 2
81#define PIT_PORT_MCR 0x43
84#define PIT_SELECT_CHAN0 0b00000000
85#define PIT_SELECT_CHAN1 0b01000000
86#define PIT_SELECT_CHAN2 0b10000000
91#define PIT_SELECT_ACCESS_LOHI 0b00110000
92#define PIT_SELECT_ONE_SHOT_MODE 0b00000010
93#define PIT_SELECT_BINARY_MODE 0