]> rtime.felk.cvut.cz Git - l4.git/blob - kernel/fiasco/src/kern/ia32/config-ia32.cpp
Some minor fixes.
[l4.git] / kernel / fiasco / src / kern / ia32 / config-ia32.cpp
1 /* IA32/AMD64 specific */
2 INTERFACE[ia32,amd64]:
3
4 #include "idt_init.h"
5
6 EXTENSION class Config
7 {
8 public:
9
10   enum
11   {
12     // can access user memory directly
13     Access_user_mem = Access_user_mem_direct,
14
15     /// Timer vector used with APIC timer or IOAPIC
16     Apic_timer_vector = APIC_IRQ_BASE + 0,
17   };
18
19   static unsigned scheduler_irq_vector;
20
21   enum Scheduler_config
22   {
23     SCHED_PIT = 0,
24     SCHED_RTC,
25     SCHED_APIC,
26     SCHED_HPET,
27
28 #ifdef CONFIG_SCHED_PIT
29     Scheduler_mode        = SCHED_PIT,
30     Scheduler_granularity = 1000U,
31     Default_time_slice    = 10 * Scheduler_granularity,
32 #endif
33
34 #ifdef CONFIG_ONE_SHOT
35     Scheduler_one_shot = true,
36 #else
37     Scheduler_one_shot = false,
38 #endif
39
40 #ifdef CONFIG_SCHED_RTC
41     Scheduler_mode = SCHED_RTC,
42 #  ifdef CONFIG_SLOW_RTC
43     Scheduler_granularity = 15625U,
44 #  else
45     Scheduler_granularity = 976U,
46 #  endif
47     Default_time_slice = 10 * Scheduler_granularity,
48 #endif
49
50 #ifdef CONFIG_SCHED_APIC
51     Scheduler_mode = SCHED_APIC,
52 #  ifdef CONFIG_ONE_SHOT
53     Scheduler_granularity = 1U,
54     Default_time_slice = 10000 * Scheduler_granularity,
55 #  else
56     Scheduler_granularity = 1000U,
57     Default_time_slice = 10 * Scheduler_granularity,
58 #  endif
59 #endif
60
61 #ifdef CONFIG_SCHED_HPET
62     Scheduler_mode = SCHED_HPET,
63     Scheduler_granularity = 1000U,
64     Default_time_slice = 10 * Scheduler_granularity,
65 #endif
66   };
67
68   enum
69   {
70     Pic_prio_modify = true,
71 #ifdef CONFIG_SYNC_TSC
72     Kip_timer_uses_rdtsc = true,
73 #else
74     Kip_timer_uses_rdtsc = false,
75 #endif
76   };
77
78   static bool apic;
79
80 #ifdef CONFIG_WATCHDOG
81   static bool watchdog;
82 #else
83   static const bool watchdog = false;
84 #endif
85
86 //  static const bool hlt_works_ok = false;
87   static bool hlt_works_ok;
88
89   // the default uart to use for serial console
90   static const unsigned default_console_uart = 1;
91   static const unsigned default_console_uart_baudrate = 115200;
92
93   static char const char_micro;
94
95   static bool found_vmware;
96
97   enum {
98     Is_ux = 0,
99   };
100 };
101
102 IMPLEMENTATION[ia32,amd64]:
103
104 #include <cstring>
105
106 bool Config::hlt_works_ok = true;
107
108 bool Config::found_vmware = false;
109 char const Config::char_micro = '\265';
110 bool Config::apic = false;
111 unsigned Config::scheduler_irq_vector;
112
113 #ifdef CONFIG_WATCHDOG
114 bool Config::watchdog = false;
115 #endif
116
117 const char *const Config::kernel_warn_config_string =
118 #ifdef CONFIG_SCHED_RTC
119   "  CONFIG_SCHED_RTC is on\n"
120 #endif
121 #ifndef CONFIG_INLINE
122   "  CONFIG_INLINE is off\n"
123 #endif
124 #ifndef CONFIG_NDEBUG
125   "  CONFIG_NDEBUG is off\n"
126 #endif
127 #ifndef CONFIG_NO_FRAME_PTR
128   "  CONFIG_NO_FRAME_PTR is off\n"
129 #endif
130 #ifdef CONFIG_LIST_ALLOC_SANITY
131   "  CONFIG_LIST_ALLOC_SANITY is on\n"
132 #endif
133 #ifdef CONFIG_BEFORE_IRET_SANITY
134   "  CONFIG_BEFORE_IRET_SANITY is on\n"
135 #endif
136 #ifdef CONFIG_FINE_GRAINED_CPUTIME
137   "  CONFIG_FINE_GRAINED_CPUTIME is on\n"
138 #endif
139 #ifdef CONFIG_JDB_ACCOUNTING
140   "  CONFIG_JDB_ACCOUNTING is on\n"
141 #endif
142   "";
143
144 IMPLEMENT FIASCO_INIT
145 void
146 Config::init_arch()
147 {
148 #ifdef CONFIG_WATCHDOG
149   if (Koptions::o()->opt(Koptions::F_watchdog))
150     {
151       watchdog = true;
152       apic = true;
153     }
154 #endif
155
156   if (Koptions::o()->opt(Koptions::F_nohlt))
157     hlt_works_ok = false;
158
159   if (Koptions::o()->opt(Koptions::F_apic))
160     apic = true;
161
162   if (Scheduler_mode == SCHED_APIC)
163     apic = true;
164 }
165