27 #ifndef _AMD64_CLOCK_H 28 #define _AMD64_CLOCK_H 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