5 EXTENSION class Timer_tick
8 static Static_object<Timer_tick> _glbl_timer;
16 Static_object<Timer_tick> Timer_tick::_glbl_timer;
19 Timer_tick::setup(Cpu_number cpu)
21 if (cpu == Cpu_number::boot_cpu())
23 _glbl_timer.construct(Sys_cpu);
24 if (!allocate_irq(_glbl_timer, Timer::irq()))
25 panic("Could not allocate scheduling IRQ %d\n", Timer::irq());
27 printf("Timer is at IRQ %d\n", Timer::irq());
29 _glbl_timer->chip()->set_mode(_glbl_timer->pin(), Timer::irq_mode());
35 Timer_tick::enable(Cpu_number)
37 _glbl_timer->chip()->unmask(_glbl_timer->pin());
42 Timer_tick::disable(Cpu_number cpu)
44 if (cpu == Cpu_number::boot_cpu())
45 _glbl_timer->chip()->mask(_glbl_timer->pin());
53 PUBLIC inline NEEDS["timer.h", "ipi.h"]
59 Ipi::bcast(Ipi::Timer, Cpu_number::boot_cpu());
62 // ------------------------------------------------------------------------
63 IMPLEMENTATION [debug]:
67 Timer_tick::boot_cpu_timer_tick()
68 { return _glbl_timer; }