From 35e48efc224f087c53cc5b73c462988897b0e89c Mon Sep 17 00:00:00 2001 From: jhb Date: Wed, 9 Mar 2005 15:33:58 +0000 Subject: - Remove the BURN_BRIDGES marked support for hooking into the ISA timer 0 interrupt. - Remove the timer_func variable as it now has a static value of hardclock() and is only used in one place. Axe borrowed from: phk --- sys/pc98/cbus/clock.c | 146 +------------------------------------------------- sys/pc98/cbus/pcrtc.c | 146 +------------------------------------------------- 2 files changed, 4 insertions(+), 288 deletions(-) (limited to 'sys/pc98/cbus') diff --git a/sys/pc98/cbus/clock.c b/sys/pc98/cbus/clock.c index e3c4e8a..40b33b4 100644 --- a/sys/pc98/cbus/clock.c +++ b/sys/pc98/cbus/clock.c @@ -97,23 +97,6 @@ #define TIMER_DIV(x) ((timer_freq + (x) / 2) / (x)) -#ifndef BURN_BRIDGES -/* - * Time in timer cycles that it takes for microtime() to disable interrupts - * and latch the count. microtime() currently uses "cli; outb ..." so it - * normally takes less than 2 timer cycles. Add a few for cache misses. - * Add a few more to allow for latency in bogus calls to microtime() with - * interrupts already disabled. - */ -#define TIMER0_LATCH_COUNT 20 - -/* - * Maximum frequency that we are willing to allow for timer0. Must be - * low enough to guarantee that the timer interrupt handler returns - * before the next timer interrupt. - */ -#define TIMER0_MAX_FREQ 20000 -#endif int adjkerntz; /* local offset from GMT in seconds */ int clkintr_pending; @@ -137,18 +120,6 @@ static u_int32_t i8254_offset; static int i8254_ticked; static int using_lapic_timer; static struct intsrc *i8254_intsrc; -#ifndef BURN_BRIDGES -/* - * XXX new_function and timer_func should not handle clockframes, but - * timer_func currently needs to hold hardclock to handle the - * timer0_state == 0 case. We should use inthand_add()/inthand_remove() - * to switch between clkintr() and a slightly different timerintr(). - */ -static void (*new_function)(struct clockframe *frame); -static u_int new_rate; -static u_int timer0_prescaler_count; -static u_char timer0_state; -#endif /* Values for timerX_state: */ #define RELEASED 0 @@ -158,7 +129,6 @@ static u_char timer0_state; static u_char timer1_state; static u_char timer2_state; -static void (*timer_func)(struct clockframe *frame) = hardclock; static void rtc_serialcombit(int); static void rtc_serialcom(int); static int rtc_inb(void); @@ -191,97 +161,10 @@ clkintr(struct clockframe *frame) clkintr_pending = 0; mtx_unlock_spin(&clock_lock); } - if (timer_func != hardclock || !using_lapic_timer) - timer_func(frame); -#ifndef BURN_BRIDGES - switch (timer0_state) { - - case RELEASED: - break; - - case ACQUIRED: - if (using_lapic_timer) - break; - if ((timer0_prescaler_count += timer0_max_count) - >= hardclock_max_count) { - timer0_prescaler_count -= hardclock_max_count; - hardclock(frame); - } - break; - - case ACQUIRE_PENDING: - mtx_lock_spin(&clock_lock); - i8254_offset = i8254_get_timecount(NULL); - i8254_lastcount = 0; - timer0_max_count = TIMER_DIV(new_rate); - outb(TIMER_MODE, TIMER_SEL0 | TIMER_RATEGEN | TIMER_16BIT); - outb(TIMER_CNTR0, timer0_max_count & 0xff); - outb(TIMER_CNTR0, timer0_max_count >> 8); - mtx_unlock_spin(&clock_lock); - timer_func = new_function; - timer0_state = ACQUIRED; - break; - - case RELEASE_PENDING: - if ((timer0_prescaler_count += timer0_max_count) - >= hardclock_max_count) { - mtx_lock_spin(&clock_lock); - i8254_offset = i8254_get_timecount(NULL); - i8254_lastcount = 0; - timer0_max_count = hardclock_max_count; - outb(TIMER_MODE, - TIMER_SEL0 | TIMER_RATEGEN | TIMER_16BIT); - outb(TIMER_CNTR0, timer0_max_count & 0xff); - outb(TIMER_CNTR0, timer0_max_count >> 8); - mtx_unlock_spin(&clock_lock); - timer0_prescaler_count = 0; - timer_func = hardclock; - timer0_state = RELEASED; - if (!using_lapic_timer) - hardclock(frame); - } - break; - } -#endif + if (!using_lapic_timer) + hardclock(frame); } -#ifndef BURN_BRIDGES -/* - * The acquire and release functions must be called at ipl >= splclock(). - */ -int -acquire_timer0(int rate, void (*function)(struct clockframe *frame)) -{ - static int old_rate; - - if (rate <= 0 || rate > TIMER0_MAX_FREQ) - return (-1); - switch (timer0_state) { - - case RELEASED: - timer0_state = ACQUIRE_PENDING; - break; - - case RELEASE_PENDING: - if (rate != old_rate) - return (-1); - /* - * The timer has been released recently, but is being - * re-acquired before the release completed. In this - * case, we simply reclaim it as if it had not been - * released at all. - */ - timer0_state = ACQUIRED; - break; - - default: - return (-1); /* busy */ - } - new_function = function; - old_rate = new_rate = rate; - return (0); -} -#endif int acquire_timer1(int mode) @@ -323,27 +206,6 @@ acquire_timer2(int mode) return (0); } -#ifndef BURN_BRIDGES -int -release_timer0() -{ - switch (timer0_state) { - - case ACQUIRED: - timer0_state = RELEASE_PENDING; - break; - - case ACQUIRE_PENDING: - /* Nothing happened yet, release quickly. */ - timer0_state = RELEASED; - break; - - default: - return (-1); - } - return (0); -} -#endif int release_timer1() @@ -929,10 +791,6 @@ sysctl_machdep_i8254_freq(SYSCTL_HANDLER_ARGS) freq = timer_freq; error = sysctl_handle_int(oidp, &freq, sizeof(freq), req); if (error == 0 && req->newptr != NULL) { -#ifndef BURN_BRIDGES - if (timer0_state != RELEASED) - return (EBUSY); /* too much trouble to handle */ -#endif set_timer_freq(freq, hz); i8254_timecounter.tc_frequency = freq; } diff --git a/sys/pc98/cbus/pcrtc.c b/sys/pc98/cbus/pcrtc.c index e3c4e8a..40b33b4 100644 --- a/sys/pc98/cbus/pcrtc.c +++ b/sys/pc98/cbus/pcrtc.c @@ -97,23 +97,6 @@ #define TIMER_DIV(x) ((timer_freq + (x) / 2) / (x)) -#ifndef BURN_BRIDGES -/* - * Time in timer cycles that it takes for microtime() to disable interrupts - * and latch the count. microtime() currently uses "cli; outb ..." so it - * normally takes less than 2 timer cycles. Add a few for cache misses. - * Add a few more to allow for latency in bogus calls to microtime() with - * interrupts already disabled. - */ -#define TIMER0_LATCH_COUNT 20 - -/* - * Maximum frequency that we are willing to allow for timer0. Must be - * low enough to guarantee that the timer interrupt handler returns - * before the next timer interrupt. - */ -#define TIMER0_MAX_FREQ 20000 -#endif int adjkerntz; /* local offset from GMT in seconds */ int clkintr_pending; @@ -137,18 +120,6 @@ static u_int32_t i8254_offset; static int i8254_ticked; static int using_lapic_timer; static struct intsrc *i8254_intsrc; -#ifndef BURN_BRIDGES -/* - * XXX new_function and timer_func should not handle clockframes, but - * timer_func currently needs to hold hardclock to handle the - * timer0_state == 0 case. We should use inthand_add()/inthand_remove() - * to switch between clkintr() and a slightly different timerintr(). - */ -static void (*new_function)(struct clockframe *frame); -static u_int new_rate; -static u_int timer0_prescaler_count; -static u_char timer0_state; -#endif /* Values for timerX_state: */ #define RELEASED 0 @@ -158,7 +129,6 @@ static u_char timer0_state; static u_char timer1_state; static u_char timer2_state; -static void (*timer_func)(struct clockframe *frame) = hardclock; static void rtc_serialcombit(int); static void rtc_serialcom(int); static int rtc_inb(void); @@ -191,97 +161,10 @@ clkintr(struct clockframe *frame) clkintr_pending = 0; mtx_unlock_spin(&clock_lock); } - if (timer_func != hardclock || !using_lapic_timer) - timer_func(frame); -#ifndef BURN_BRIDGES - switch (timer0_state) { - - case RELEASED: - break; - - case ACQUIRED: - if (using_lapic_timer) - break; - if ((timer0_prescaler_count += timer0_max_count) - >= hardclock_max_count) { - timer0_prescaler_count -= hardclock_max_count; - hardclock(frame); - } - break; - - case ACQUIRE_PENDING: - mtx_lock_spin(&clock_lock); - i8254_offset = i8254_get_timecount(NULL); - i8254_lastcount = 0; - timer0_max_count = TIMER_DIV(new_rate); - outb(TIMER_MODE, TIMER_SEL0 | TIMER_RATEGEN | TIMER_16BIT); - outb(TIMER_CNTR0, timer0_max_count & 0xff); - outb(TIMER_CNTR0, timer0_max_count >> 8); - mtx_unlock_spin(&clock_lock); - timer_func = new_function; - timer0_state = ACQUIRED; - break; - - case RELEASE_PENDING: - if ((timer0_prescaler_count += timer0_max_count) - >= hardclock_max_count) { - mtx_lock_spin(&clock_lock); - i8254_offset = i8254_get_timecount(NULL); - i8254_lastcount = 0; - timer0_max_count = hardclock_max_count; - outb(TIMER_MODE, - TIMER_SEL0 | TIMER_RATEGEN | TIMER_16BIT); - outb(TIMER_CNTR0, timer0_max_count & 0xff); - outb(TIMER_CNTR0, timer0_max_count >> 8); - mtx_unlock_spin(&clock_lock); - timer0_prescaler_count = 0; - timer_func = hardclock; - timer0_state = RELEASED; - if (!using_lapic_timer) - hardclock(frame); - } - break; - } -#endif + if (!using_lapic_timer) + hardclock(frame); } -#ifndef BURN_BRIDGES -/* - * The acquire and release functions must be called at ipl >= splclock(). - */ -int -acquire_timer0(int rate, void (*function)(struct clockframe *frame)) -{ - static int old_rate; - - if (rate <= 0 || rate > TIMER0_MAX_FREQ) - return (-1); - switch (timer0_state) { - - case RELEASED: - timer0_state = ACQUIRE_PENDING; - break; - - case RELEASE_PENDING: - if (rate != old_rate) - return (-1); - /* - * The timer has been released recently, but is being - * re-acquired before the release completed. In this - * case, we simply reclaim it as if it had not been - * released at all. - */ - timer0_state = ACQUIRED; - break; - - default: - return (-1); /* busy */ - } - new_function = function; - old_rate = new_rate = rate; - return (0); -} -#endif int acquire_timer1(int mode) @@ -323,27 +206,6 @@ acquire_timer2(int mode) return (0); } -#ifndef BURN_BRIDGES -int -release_timer0() -{ - switch (timer0_state) { - - case ACQUIRED: - timer0_state = RELEASE_PENDING; - break; - - case ACQUIRE_PENDING: - /* Nothing happened yet, release quickly. */ - timer0_state = RELEASED; - break; - - default: - return (-1); - } - return (0); -} -#endif int release_timer1() @@ -929,10 +791,6 @@ sysctl_machdep_i8254_freq(SYSCTL_HANDLER_ARGS) freq = timer_freq; error = sysctl_handle_int(oidp, &freq, sizeof(freq), req); if (error == 0 && req->newptr != NULL) { -#ifndef BURN_BRIDGES - if (timer0_state != RELEASED) - return (EBUSY); /* too much trouble to handle */ -#endif set_timer_freq(freq, hz); i8254_timecounter.tc_frequency = freq; } -- cgit v1.1