]> rtime.felk.cvut.cz Git - l4.git/blob - kernel/fiasco/src/kern/config.cpp
Inital import
[l4.git] / kernel / fiasco / src / kern / config.cpp
1 /*
2  * Global kernel configuration
3  */
4
5 INTERFACE:
6
7 #include <globalconfig.h>
8 #include "config_tcbsize.h"
9 #include "l4_types.h"
10
11 // special magic to allow old compilers to inline constants
12
13 #define STRINGIFY_(x) #x
14 #define STRINGIFY(x) STRINGIFY_(x)
15
16 #if defined(__GNUC__)
17 # if defined(__GNUC_PATCHLEVEL__)
18 #  define COMPILER STRINGIFY(__GNUC__) "." STRINGIFY(__GNUC_MINOR__) "." STRINGIFY(__GNUC_PATCHLEVEL__)
19 # else
20 #  define COMPILER STRINGIFY(__GNUC__) "." STRINGIFY(__GNUC_MINOR__)
21 # endif
22 # define GCC_VERSION (__GNUC__ * 100 + __GNUC_MINOR__)
23 #else
24 # define COMPILER "Non-GCC"
25 # define GCC_VERSION 0
26 #endif
27
28 #define GREETING_COLOR_ANSI_OFF    "\033[0m"
29
30 #define FIASCO_KERNEL_SUBVERSION 0
31
32 class Config
33 {
34 public:
35
36   static const char *const kernel_warn_config_string;
37
38   enum {
39     SERIAL_ESC_IRQ      = 2,
40     SERIAL_ESC_NOIRQ    = 1,
41     SERIAL_NO_ESC       = 0,
42   };
43
44   static void init();
45   static void init_arch();
46
47   // global kernel configuration
48   static const unsigned kernel_version_id
49      = 0x87004444 | (FIASCO_KERNEL_SUBVERSION << 16); // "DD....."
50
51   static const Mword thread_block_size = THREAD_BLOCK_SIZE;
52
53   static const bool conservative = false;
54
55 #ifdef CONFIG_FINE_GRAINED_CPUTIME
56   static const bool fine_grained_cputime = true;
57 #else
58   static const bool fine_grained_cputime = false;
59 #endif
60
61   static bool irq_ack_in_kernel;
62   static bool esc_hack;
63
64   static unsigned tbuf_entries;
65
66 #ifdef CONFIG_PROFILE
67   static bool profiling;
68 #else
69   static const bool profiling = false;
70 #endif
71 #ifdef CONFIG_STACK_DEPTH
72   static const bool stack_depth = true;
73 #else
74   static const bool stack_depth = false;
75 #endif
76   static const int profiling_rate = 100;
77   static const int profile_irq = 0;
78
79   // kernel (idle) task definitions
80   static const unsigned kernel_prio = 0;
81   static const unsigned kernel_mcp = 255;
82
83   // sigma0 task definitions
84   static const unsigned sigma0_prio = 0x10;
85   static const unsigned sigma0_mcp = 0;
86
87   // root (boot) task definitions
88   static const unsigned boot_prio = 0x10;
89   static const unsigned boot_mcp = 255;
90
91   static const int warn_level = CONFIG_WARN_LEVEL;
92
93   static const unsigned kernel_taskno = 0;
94   static const unsigned sigma0_taskno = 2;
95   static const unsigned boot_taskno = 4;
96
97   enum {
98     Kip_syscalls = 1,
99 #ifdef CONFIG_ASSEMBLER_IPC_SHORTCUT
100     Assembler_ipc_shortcut = 1,
101 #else
102     Assembler_ipc_shortcut = 0,
103 #endif
104 #ifdef CONFIG_NO_FRAME_PTR
105     Have_frame_ptr = 0,
106 #else
107     Have_frame_ptr = 1,
108 #endif
109     Mapdb_ram_only = 0,
110 #ifdef CONFIG_DEBUG_KERNEL_PAGE_FAULTS
111     Log_kernel_page_faults = 1,
112 #else
113     Log_kernel_page_faults = 0,
114 #endif
115
116 #ifdef CONFIG_JDB
117     Jdb = 1,
118 #else
119     Jdb = 0,
120 #endif
121 #ifdef CONFIG_JDB_LOGGING
122     Jdb_logging = 1,
123 #else
124     Jdb_logging = 0,
125 #endif
126 #ifdef CONFIG_JDB_ACCOUNTING
127     Jdb_accounting = 1,
128 #else
129     Jdb_accounting = 0,
130 #endif
131 #ifdef CONFIG_MP
132     Max_num_cpus = CONFIG_MP_MAX_CPUS,
133 #else
134     Max_num_cpus = 1,
135 #endif
136   };
137 };
138
139 #define GREETING_COLOR_ANSI_TITLE  "\033[1;32m"
140 #define GREETING_COLOR_ANSI_INFO   "\033[0;32m"
141
142 INTERFACE[ia32,ux]:
143 #define ARCH_NAME "ia32"
144 #define TARGET_NAME CONFIG_IA32_TARGET
145
146 INTERFACE[arm]:
147 #define ARCH_NAME "arm"
148
149 INTERFACE[amd64]:
150 #define ARCH_NAME "amd64"
151 #define TARGET_NAME CONFIG_IA32_TARGET
152
153 INTERFACE[ppc32]:
154 #define ARCH_NAME "ppc32"
155
156 INTERFACE:
157 #define CONFIG_KERNEL_VERSION_STRING \
158   GREETING_COLOR_ANSI_TITLE "Welcome to Fiasco.OC ("CONFIG_XARCH")!\\n"            \
159   GREETING_COLOR_ANSI_INFO "L4/Fiasco.OC " ARCH_NAME " "                \
160                            "microkernel (C) 1998-2010 TU Dresden\\n"           \
161                            "Rev: " CODE_VERSION " compiled with gcc " COMPILER \
162                             " for " TARGET_NAME "    [" CONFIG_LABEL "]\\n"    \
163                            "Build: #" BUILD_NR " " BUILD_DATE "\\n"            \
164   GREETING_COLOR_ANSI_OFF
165
166
167 //---------------------------------------------------------------------------
168 INTERFACE [ux]:
169
170 EXTENSION class Config
171 {
172 public:
173   // 32MB RAM => 2.5MB kmem, 128MB RAM => 16MB kmem, >=512MB RAM => 64MB kmem
174   static const unsigned kernel_mem_per_cent = 8;
175   enum
176   {
177     kernel_mem_max      = 64 << 20
178   };
179 };
180
181 //---------------------------------------------------------------------------
182 INTERFACE [!ux]:
183
184 EXTENSION class Config
185 {
186 public:
187   // 32MB RAM => 2.5MB kmem, 128MB RAM => 16MB kmem, >=512MB RAM => 60MB kmem
188   static const unsigned kernel_mem_per_cent = 8;
189   enum
190   {
191     kernel_mem_max      = 60 << 20
192   };
193 };
194
195 //---------------------------------------------------------------------------
196 INTERFACE [serial]:
197
198 EXTENSION class Config
199 {
200 public:
201   static int  serial_esc;
202 };
203
204 //---------------------------------------------------------------------------
205 INTERFACE [!serial]:
206
207 EXTENSION class Config
208 {
209 public:
210   static const int serial_esc = 0;
211 };
212
213 //---------------------------------------------------------------------------
214 IMPLEMENTATION:
215
216 #include <cstring>
217 #include <cstdlib>
218 #include "cmdline.h"
219 #include "feature.h"
220 #include "initcalls.h"
221 #include "panic.h"
222
223 KIP_KERNEL_ABI_VERSION(STRINGIFY(FIASCO_KERNEL_SUBVERSION));
224
225 // class variables
226 bool Config::esc_hack = false;
227 #ifdef CONFIG_SERIAL
228 int  Config::serial_esc = Config::SERIAL_NO_ESC;
229 #endif
230 bool Config::irq_ack_in_kernel = false;
231
232 #ifdef CONFIG_PROFILE
233 bool Config::profiling = false;
234 #endif
235
236 unsigned Config::tbuf_entries = 0x20000 / sizeof(Mword); //1024;
237
238 //-----------------------------------------------------------------------------
239 IMPLEMENTATION [!arm && !ppc32]:
240
241 IMPLEMENT FIASCO_INIT
242 void Config::init()
243 {
244   char const *cmdline = Cmdline::cmdline();
245
246   init_arch();
247
248   if (strstr(cmdline, " -esc"))
249     esc_hack = true;
250
251 #ifdef CONFIG_PROFILE
252   if (strstr(cmdline, " -profile"))
253     profiling = true;
254 #endif
255
256   if (strstr(cmdline, " -always_irqack"))
257     irq_ack_in_kernel = true;
258
259 #ifdef CONFIG_SERIAL
260   if (    strstr(cmdline, " -serial_esc")
261       && !strstr(cmdline, " -noserial")
262 # ifdef CONFIG_KDB
263       &&  strstr(cmdline, " -nokdb")
264 # endif
265       && !strstr(cmdline, " -nojdb"))
266     {
267       serial_esc = SERIAL_ESC_IRQ;
268     }
269 #endif
270 }
271
272
273 //----------------------------------------------------------------------------
274 IMPLEMENTATION[rotext]:
275
276 PUBLIC static
277 bool
278 Config::rotext()
279 { return strstr(Cmdline::cmdline()," -rotext"); }
280
281 //----------------------------------------------------------------------------
282 IMPLEMENTATION[!rotext]:
283
284 PUBLIC static inline
285 bool
286 Config::rotext()
287 { return false; }
288