mirror of
https://github.com/opnsense/src.git
synced 2026-02-18 18:20:26 -05:00
rather than forwarding interrupts from the clock devices around using IPIs: - Add an IDT vector that pushes a clock frame and calls lapic_handle_timer(). - Add functions to program the local APIC timer including setting the divisor, and setting up the timer to either down a periodic countdown or one-shot countdown. - Add a lapic_setup_clock() function that the BSP calls from cpu_init_clocks() to setup the local APIC timer if it is going to be used. The setup uses a one-shot countdown to calibrate the timer. We then program the timer on each CPU to fire at a frequency of hz * 3. stathz is defined as freq / 23 (hz * 3 / 23), and profhz is defined as freq / 2 (hz * 3 / 2). This gives the clocks relatively prime divisors while keeping a low LCM for the frequency of the clock interrupts. Thanks to Peter Jeremy for suggesting this approach. - Remove the hardclock and statclock forwarding code including the two associated IPIs. The bitmap IPI handler has now effectively degenerated to just IPI_AST. - When the local APIC timer is used we don't turn the RTC on at all, but we still enable interrupts on the ISA timer 0 (i8254) for timecounting purposes. |
||
|---|---|---|
| .. | ||
| atkbd_isa.c | ||
| atkbdc_isa.c | ||
| atrtc.c | ||
| isa_common.c | ||
| isa_common.h | ||
| isa_if.m | ||
| isahint.c | ||
| isareg.h | ||
| isavar.h | ||
| orm.c | ||
| pnp.c | ||
| pnpparse.c | ||
| pnpreg.h | ||
| pnpvar.h | ||
| psm.c | ||
| rtc.h | ||
| syscons_isa.c | ||
| vga_isa.c | ||