| /* Copyright (c) 2009 The Regents of the University of California |
| * David (Yu) Zhu <yuzhu@cs.berkeley.edu> |
| * Barret Rhoden <brho@cs.berkeley.edu> |
| * |
| * See LICENSE for details. */ |
| |
| #pragma once |
| |
| // PIT (Programmable Interval Timer) |
| #define TIMER_REG_CNTR0 0 /* timer counter 0 port */ |
| #define TIMER_REG_CNTR1 1 /* timer counter 1 port */ |
| #define TIMER_REG_CNTR2 2 /* timer counter 2 port */ |
| #define TIMER_REG_MODE 3 /* timer mode port */ |
| #define TIMER_SEL0 0x00 /* select counter 0 */ |
| #define TIMER_SEL1 0x40 /* select counter 1 */ |
| #define TIMER_SEL2 0x80 /* select counter 2 */ |
| #define TIMER_INTTC 0x00 /* mode 0, intr on terminal cnt */ |
| #define TIMER_ONESHOT 0x02 /* mode 1, one shot */ |
| #define TIMER_RATEGEN 0x04 /* mode 2, rate generator */ |
| #define TIMER_SQWAVE 0x06 /* mode 3, square wave */ |
| #define TIMER_SWSTROBE 0x08 /* mode 4, s/w triggered strobe */ |
| #define TIMER_HWSTROBE 0x0a /* mode 5, h/w triggered strobe */ |
| #define TIMER_LATCH 0x00 /* latch counter for reading */ |
| #define TIMER_LSB 0x10 /* r/w counter LSB */ |
| #define TIMER_MSB 0x20 /* r/w counter MSB */ |
| #define TIMER_16BIT 0x30 /* r/w counter 16 bits, LSB first */ |
| #define TIMER_BCD 0x01 /* count in BCD */ |
| |
| #define PIT_FREQ 1193182 |
| |
| #define IO_TIMER1 0x40 /* 8253 Timer #1 */ |
| #define TIMER_CNTR0 (IO_TIMER1 + TIMER_REG_CNTR0) |
| #define TIMER_CNTR1 (IO_TIMER1 + TIMER_REG_CNTR1) |
| #define TIMER_CNTR2 (IO_TIMER1 + TIMER_REG_CNTR2) |
| #define TIMER_MODE (IO_TIMER1 + TIMER_REG_MODE) |
| |
| // PIT related |
| void pit_set_timer(uint32_t freq, uint32_t mode); |
| void timer_init(void); |
| void udelay_pit(uint64_t usec); |
| // TODO: right now timer defaults to TSC |
| uint64_t gettimer(void); |
| uint64_t getfreq(void); |