refactor: one more step towards arch-agnostic design
[lunaix-os.git] / lunaix-os / arch / i386 / arch.c
1 #include <hal/apic_timer.h>
2 #include <hal/rtc/mc146818a.h>
3
4 #include <hal/hwrtc.h>
5 #include <hal/hwtimer.h>
6
7 #include <lunaix/isrm.h>
8 #include <lunaix/spike.h>
9
10 #include <sys/i386_intr.h>
11 #include <sys/interrupts.h>
12
13 void
14 exception_init()
15 {
16     exception_install_handler();
17     isrm_init();
18     intr_routine_init();
19 }
20
21 extern void
22 syscall_hndlr(const isr_param* param);
23
24 void
25 arch_preinit()
26 {
27     exception_init();
28
29     isrm_bindiv(LUNAIX_SYS_CALL, syscall_hndlr);
30 }
31
32 struct hwtimer_context*
33 hwtimer_choose()
34 {
35     struct hwtimer_context* timer;
36
37     timer = apic_hwtimer_context();
38     if (timer->supported(timer)) {
39         return timer;
40     }
41
42     // TODO select alternatives...
43
44     panick("no timer to use.");
45 }
46
47 struct hwrtc*
48 hwrtc_choose()
49 {
50     struct hwrtc* rtc = mc146818a_rtc_context();
51
52     return rtc;
53 }