#include <arch/linker.h>
#include <machine/io.h>
#include <plat/machine/pit.h>
#define PIT_MODE 0x43
#define PIT_CH0 0x40
#define PIT_HZ 1193182
BOOT_CODE void
pit_init(void)
{
uint16_t divisor = (PIT_HZ * PIT_WRAPAROUND_MS) / 1000;
out8(PIT_MODE, 0x34);
out8(PIT_CH0, divisor & 0xff);
out8(PIT_CH0, divisor >> 8);
}
BOOT_CODE void
pit_wait_wraparound(void)
{
uint16_t count;
uint16_t count_old;
out8(PIT_MODE, 0x00);
count = in8(PIT_CH0);
count |= (in8(PIT_CH0) << 8);
count_old = count;
while (count <= count_old) {
count_old = count;
out8(PIT_MODE, 0x00);
count = in8(PIT_CH0);
count |= (in8(PIT_CH0) << 8);
}
}