TIMER selection via tunable

看板DFBSD_submit作者時間21年前 (2005/04/03 02:01), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串1/4 (看更多)
--45Z9DzgjV8m4Oswq Content-Type: text/plain; charset=us-ascii Content-Disposition: inline Hi all, the attached patch implements the timer selection as tunable and removes the TIMER_USE_1 option. I intend to commit this tomorrow. Joerg --45Z9DzgjV8m4Oswq Content-Type: text/plain; charset=us-ascii Content-Disposition: attachment; filename="timer.diff" Index: conf/options.i386 =================================================================== RCS file: /home/joerg/wd/repository/dragonflybsd/src/sys/conf/options.i386,v retrieving revision 1.10 diff -u -r1.10 options.i386 --- conf/options.i386 28 Mar 2005 14:42:44 -0000 1.10 +++ conf/options.i386 28 Mar 2005 22:22:40 -0000 @@ -39,7 +39,6 @@ CLK_USE_I8254_CALIBRATION opt_clock.h CLK_USE_TSC_CALIBRATION opt_clock.h TIMER_FREQ opt_clock.h -TIMER_USE_1 opt_clock.h KERN_TIMESTAMP opt_global.h NO_F00F_HACK opt_cpu.h Index: i386/isa/clock.c =================================================================== RCS file: /home/joerg/wd/repository/dragonflybsd/src/sys/i386/isa/clock.c,v retrieving revision 1.21 diff -u -r1.21 clock.c --- i386/isa/clock.c 27 Mar 2005 19:25:07 -0000 1.21 +++ i386/isa/clock.c 29 Mar 2005 00:04:42 -0000 @@ -116,13 +116,10 @@ #define TIMER_FREQ 1193182 #endif -#ifdef TIMER_USE_1 -#define TIMER_SELX TIMER_SEL1 -#define TIMER_CNTRX TIMER_CNTR1 -#else -#define TIMER_SELX TIMER_SEL2 -#define TIMER_CNTRX TIMER_CNTR2 -#endif +int i8254_walltimer; +TUNABLE_INT("hw.i8254.walltimer", &i8254_walltimer); +static uint8_t i8254_walltimer_sel; +static uint16_t i8254_walltimer_cntr; int adjkerntz; /* local offset from GMT in seconds */ int disable_rtc_set; /* disable resettodr() if != 0 */ @@ -203,7 +200,6 @@ int acquire_timer2(int mode) { -#ifdef TIMER_USE_1 if (timer2_state != RELEASED) return (-1); timer2_state = ACQUIRED; @@ -215,10 +211,6 @@ */ outb(TIMER_MODE, TIMER_SEL2 | (mode & 0x3f)); return (0); -#else - /* Timer2 is being used for time count operation */ - return(-1); -#endif } int @@ -300,9 +292,9 @@ sysclock_t ret; clock_lock(); - outb(TIMER_MODE, TIMER_SELX | TIMER_LATCH); - count = (__uint8_t)inb(TIMER_CNTRX); /* get countdown */ - count |= ((__uint8_t)inb(TIMER_CNTRX) << 8); + outb(TIMER_MODE, i8254_walltimer_sel | TIMER_LATCH); + count = (__uint8_t)inb(i8254_walltimer_cntr); /* get countdown */ + count |= ((__uint8_t)inb(i8254_walltimer_cntr) << 8); count = -count; /* -> countup */ if (count < cputimer_last) /* rollover */ cputimer_base += 0x00010000; @@ -584,18 +576,25 @@ i8254_restore(void) { timer0_state = ACQUIRED; -#ifdef TIMER_USE_1 - timer1_state = ACQUIRED; -#else - timer2_state = ACQUIRED; -#endif + if (i8254_walltimer != 1 && i8254_walltimer != 2) + i8254_walltimer = 2; + + if (i8254_walltimer == 1) { + i8254_walltimer_sel = TIMER_SEL1; + i8254_walltimer_cntr = TIMER_CNTR1; + timer1_state = ACQUIRED; + } else { + i8254_walltimer_sel = TIMER_SEL2; + i8254_walltimer_cntr = TIMER_CNTR2; + timer2_state = ACQUIRED; + } clock_lock(); outb(TIMER_MODE, TIMER_SEL0 | TIMER_SWSTROBE | TIMER_16BIT); outb(TIMER_CNTR0, 2); /* lsb */ outb(TIMER_CNTR0, 0); /* msb */ - outb(TIMER_MODE, TIMER_SELX | TIMER_RATEGEN | TIMER_16BIT); - outb(TIMER_CNTRX, 0); /* lsb */ - outb(TIMER_CNTRX, 0); /* msb */ + outb(TIMER_MODE, i8254_walltimer_sel | TIMER_RATEGEN | TIMER_16BIT); + outb(i8254_walltimer_cntr, 0); /* lsb */ + outb(i8254_walltimer_cntr, 0); /* msb */ outb(IO_PPI, inb(IO_PPI) | 1); /* bit 0: enable gate, bit 1: spkr */ clock_unlock(); } @@ -1118,7 +1117,10 @@ } SYSCTL_NODE(_hw, OID_AUTO, i8254, CTLFLAG_RW, 0, "I8254"); -SYSCTL_UINT(_hw_i8254, OID_AUTO, freq, CTLFLAG_RD, &cputimer_freq, 0, ""); +SYSCTL_UINT(_hw_i8254, OID_AUTO, freq, CTLFLAG_RD, &cputimer_freq, 0, + "frequency"); SYSCTL_PROC(_hw_i8254, OID_AUTO, timestamp, CTLTYPE_STRING|CTLFLAG_RD, 0, 0, hw_i8254_timestamp, "A", ""); +SYSCTL_INT(_hw_i8254, OID_AUTO, walltimer, CTLFLAG_RD, &i8254_walltimer, 0, + "timer used for the wall time; either 1 or 2"); --45Z9DzgjV8m4Oswq--
文章代碼(AID): #12Jjtn00 (DFBSD_submit)
文章代碼(AID): #12Jjtn00 (DFBSD_submit)