X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?p=pintos-anon;a=blobdiff_plain;f=src%2Fdevices%2Ftimer.c;h=befaaaed5a9a1ac0cd25ab76f8afd96fe6865127;hp=70234a808844e425d8309f6cd04c09ce11ad230e;hb=3b458804e1d0a460fb1c90f06f495b9f7a972424;hpb=cc5c971c3cc498d528a2f74f4dc2f8e27a690311 diff --git a/src/devices/timer.c b/src/devices/timer.c index 70234a8..befaaae 100644 --- a/src/devices/timer.c +++ b/src/devices/timer.c @@ -3,8 +3,8 @@ #include #include #include +#include "devices/pit.h" #include "threads/interrupt.h" -#include "threads/io.h" #include "threads/synch.h" #include "threads/thread.h" @@ -30,20 +30,12 @@ static void busy_wait (int64_t loops); static void real_time_sleep (int64_t num, int32_t denom); static void real_time_delay (int64_t num, int32_t denom); -/* Sets up the 8254 Programmable Interval Timer (PIT) to - interrupt PIT_FREQ times per second, and registers the - corresponding interrupt. */ +/* Sets up the timer to interrupt TIMER_FREQ times per second, + and registers the corresponding interrupt. */ void timer_init (void) { - /* 8254 input frequency divided by TIMER_FREQ, rounded to - nearest. */ - uint16_t count = (1193180 + TIMER_FREQ / 2) / TIMER_FREQ; - - outb (0x43, 0x34); /* CW: counter 0, LSB then MSB, mode 2, binary. */ - outb (0x40, count & 0xff); - outb (0x40, count >> 8); - + pit_configure_channel (0, 2, TIMER_FREQ); intr_register_ext (0x20, timer_interrupt, "8254 Timer"); } @@ -81,7 +73,6 @@ timer_ticks (void) enum intr_level old_level = intr_disable (); int64_t t = ticks; intr_set_level (old_level); - barrier (); return t; }