From 232fb58f27bd7a7988a2c54ee94f561454becf81 Mon Sep 17 00:00:00 2001 From: David du Colombier <0intro@gmail.com> Date: Thu, 22 Jun 2000 00:00:00 +0000 Subject: [PATCH] Plan 9 from Bell Labs 2000-06-22 --- pc/devarch.c | 4 ++-- pc/fns.h | 4 +++- pc/i8253.c | 19 +++++++++++++++---- 3 files changed, 20 insertions(+), 7 deletions(-) diff --git a/pc/devarch.c b/pc/devarch.c index b4fd363dfe4f60f0f444150a393fa0be8fa9f651..4b6b3168836e7967a6e8759498bbffce1ff500b3 100644 --- a/pc/devarch.c +++ b/pc/devarch.c @@ -587,10 +587,10 @@ cycletimer(uvlong *hz) { uvlong tsc; - rdmsr(0x10, (vlong*)&tsc); - m->fastclock = tsc; if(hz != nil) *hz = fasthz; + rdmsr(0x10, (vlong*)&tsc); + m->fastclock = tsc; return tsc; } diff --git a/pc/fns.h b/pc/fns.h index bc16f44acde74b8b3c0e794a3ee3043f3f112fe8..4a5c6c3445973ba7b4dca13afc00fed74b9e2cd2 100644 --- a/pc/fns.h +++ b/pc/fns.h @@ -1,5 +1,8 @@ #include "../port/portfns.h" +void loopbackintr(Ureg*); + + void aamloop(int); void addconf(char*, char*); //void addscsilink(char*, Scsiio (*)(int, ISAConf*)); @@ -59,7 +62,6 @@ void kbdinit(void); void lgdt(ushort[3]); void lidt(ushort[3]); void links(void); -void loopbackintr(void); void ltr(ulong); void mathinit(void); void meminit(ulong); diff --git a/pc/i8253.c b/pc/i8253.c index 6ae80cf3d8fda27d31e2f86f3e966aa7de829a33..3e5fdd28d99f5e59522422e8fe5d6bff88aa7382 100644 --- a/pc/i8253.c +++ b/pc/i8253.c @@ -13,19 +13,23 @@ enum T0cntr= 0x40, /* counter ports */ T1cntr= 0x41, /* ... */ T2cntr= 0x42, /* ... */ - Tmode= 0x43, /* mode port */ + Tmode= 0x43, /* mode port (control word register) */ /* commands */ Latch0= 0x00, /* latch counter 0's value */ + Load0l= 0x10, /* load counter 0's lsb */ + Load0m= 0x20, /* load counter 0's msb */ Load0= 0x30, /* load counter 0 with 2 bytes */ /* modes */ - Square= 0x36, /* periodic square wave */ - Trigger= 0x30, /* interrupt on terminal count */ + Square= 0x6, /* periodic square wave */ + Trigger= 0x0, /* interrupt on terminal count */ Freq= 1193182, /* Real clock frequency */ }; +static Lock i8253lock; + void i8253init(int aalcycles, int havecycleclock) { @@ -124,10 +128,17 @@ i8253init(int aalcycles, int havecycleclock) } } +int +i8253readcnt(void) +{ + ilock(&i8253lock); + iunlock(&i8253lock); +} + static void clockintr0(Ureg* ureg, void *v) { - loopbackintr(); + loopbackintr(ureg); clockintr(ureg, v); }