summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--kernel/drivers/pit.c11
-rw-r--r--kernel/include/comus/drivers/pit.h2
2 files changed, 7 insertions, 6 deletions
diff --git a/kernel/drivers/pit.c b/kernel/drivers/pit.c
index a8fe179..1a05f03 100644
--- a/kernel/drivers/pit.c
+++ b/kernel/drivers/pit.c
@@ -6,7 +6,7 @@
#define CHAN_2 0x42
#define CMD 0x43
-uint64_t ticks = 0;
+volatile uint64_t ticks = 0;
uint16_t pit_read_divider(void)
{
@@ -21,8 +21,9 @@ uint16_t pit_read_divider(void)
void pit_set_divider(uint16_t count)
{
- cli();
- outb(CHAN_0, count & 0xFF); // low byte
- outb(CHAN_0, (count & 0xFF00) >> 8); // high byte
- sti();
+ // FIXME: broken on -O0
+ // cli();
+ // outb(CHAN_0, count & 0xFF); // low byte
+ // outb(CHAN_0, (count & 0xFF00) >> 8); // high byte
+ // sti();
}
diff --git a/kernel/include/comus/drivers/pit.h b/kernel/include/comus/drivers/pit.h
index a7a111d..77f0a14 100644
--- a/kernel/include/comus/drivers/pit.h
+++ b/kernel/include/comus/drivers/pit.h
@@ -13,7 +13,7 @@
// how many time the pit has ticked
// not accurate time, good for spinning though
-extern uint64_t ticks;
+extern volatile uint64_t ticks;
uint16_t pit_read_divider(void);
void pit_set_divider(uint16_t count);