freebsd-dev/sys/i386/isa
Bruce Evans b73057227b Optimized RTC accesses by avoiding null writes to the index register
and by only delaying when an RTC register is written to.  The delay
after writing to the data register is now not just a workaround.

This reduces the number of ISA accesses in the usual case from 4 to
1.  The usual case is 2 rtcin()'s for each RTC interrupt.  The index
register is almost always RTC_INTR for this.  The 3 extra ISA accesses
were 1 for writing the index and 2 for delays.  Some delays are needed
in theory, but in practice they now just slow down slow accesses some
more since almost eveyone including us does them wrong so modern systems
enforce sufficient delays in hardware.  I used to have the delays ifdefed
out, but with the index register optimization the delays are rarely
executed so the old magic ones can be kept or even implemented non-
magically without significant cost.

Optimizing RTC interrupt handling is more interesting than it used to
be because RTC interrupts are currently needed to fix the more efficient
apic timer interrupts on some systems.  apic_timer_hz is normally 2000
so the RTC interrupt rate needs to be 2048 to keep the apic timer
firing on such systems.  Without these changes, each RTC interrupt
normally took 10 ISA accesses (2 PIC accesses and 2 sets of 4 RTC
accesses).  Each ISA access takes 1-1.5uS so 10 of then at 2048 Hz
takes 2-3% of a CPU.  Now 4 of them take 0.8-1.2% of a CPU.
2006-12-03 03:49:28 +00:00
..
atpic_vector.s Fix 'interrupt interrupt' -> 'interrupt' in the comment. 2006-09-20 12:23:33 +00:00
atpic.c Change the x86 interrupt code to suspend/resume interrupt controllers 2006-10-10 23:23:12 +00:00
ccbque.h /* -> /*- for copyright notices, minor format tweaks as necessary 2005-01-06 22:18:23 +00:00
clock.c Optimized RTC accesses by avoiding null writes to the index register 2006-12-03 03:49:28 +00:00
elcr.c Tweak the ELCR support slightly. Explicitly probe the ELCR during boot 2005-01-18 20:24:47 +00:00
elink.c /* -> /*- for copyright notices, minor format tweaks as necessary 2005-01-06 22:18:23 +00:00
elink.h /* -> /*- for copyright notices, minor format tweaks as necessary 2005-01-06 22:18:23 +00:00
icu.h Change the i386 code to pass the interrupt vector as a separate argument 2005-12-05 22:39:09 +00:00
isa_dma.c - Move bus dependent defines to {isa,cbus}_dmareg.h. 2005-05-14 10:14:56 +00:00
isa.c __RMAN_RESOURCE_VISIBLE not necessary. 2005-09-25 20:21:48 +00:00
isa.h - Move bus dependent defines to {isa,cbus}_dmareg.h. 2005-05-14 10:14:56 +00:00
nmi.c Remove advertising clause from University of California Regent's 2004-04-07 20:46:16 +00:00
npx.c Use the method described in IA-32 Intel Architecture Software Developer's 2006-05-30 23:44:21 +00:00
pmtimer.c First part of a little cleanup in the calendar/timezone/RTC handling. 2006-10-02 12:59:59 +00:00
prof_machdep.c Removed some SMP ifdefs so that using the TSC as a cputime clock is 2006-10-29 09:48:44 +00:00
spic.c Since DELAY() was moved, most <machine/clock.h> #includes have been 2006-05-16 14:37:58 +00:00
spicreg.h /* -> /*- for copyright notices, minor format tweaks as necessary 2005-01-06 22:18:23 +00:00
vesa.c Fix -Wundef warnings found when compiling i386 LINT, GENERIC and 2005-12-05 11:58:35 +00:00