stos/amd64: isa: Add legacy i8254 driver

Signed-off-by: Chloe M. <chloe@mensia.org>
This commit is contained in:
Chloe M.
2026-06-27 05:18:33 -05:00
parent ef72c9d6d5
commit 354cf87a16
2 changed files with 78 additions and 0 deletions
+42
View File
@@ -0,0 +1,42 @@
/*
* Copyright (c) 2026, Chloe M.
* Provided under the BSD-3 clause.
*
* Description: i8254 timer driver
* Author: Chloe M.
*/
#include <machine/i8254.h>
#include <machine/pio.h>
USHORT
MdPitGetCount(VOID)
{
UCHAR Low, High;
MdOutb(I8254_COMMAND, 0x00);
Low = MdInb(0x40);
High = MdInb(0x40);
return (High << 8) | Low;
}
VOID
MdPitSetCount(USHORT Value)
{
MdOutb(I8254_COMMAND, 0x34);
MdOutb(0x40, Value & 0xFF);
MdOutb(0x40, (Value >> 8) & 0xFF);
}
VOID
MdPitSetFrequency(UQUAD Frequency)
{
UQUAD Divisor;
Divisor = I8254_DIVIDEND / Frequency;
if ((I8254_DIVIDEND % Frequency) > (Frequency / 2)) {
++Divisor;
}
MdPitSetCount(Divisor);
}