]> rtime.felk.cvut.cz Git - l4.git/blob - kernel/fiasco/src/kern/config.cpp
update
[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 1
31
32 class Config
33 {
34 public:
35
36   static const char *const kernel_warn_config_string;
37   enum User_memory_access_type
38   {
39     No_access_user_mem = 0,
40     Access_user_mem_direct,
41     Must_access_user_mem_direct
42   };
43
44   enum {
45     SERIAL_ESC_IRQ      = 2,
46     SERIAL_ESC_NOIRQ    = 1,
47     SERIAL_NO_ESC       = 0,
48   };
49
50   static void init();
51   static void init_arch();
52
53   // global kernel configuration
54   enum
55   {
56     Kernel_version_id = 0x87004444 | (FIASCO_KERNEL_SUBVERSION << 16), // "DD....."
57     // kernel (idle) thread prio
58     Kernel_prio = 0,
59     // default prio
60     Default_prio = 1,
61
62     Warn_level = CONFIG_WARN_LEVEL,
63
64     Kip_syscalls = 1,
65
66     One_shot_min_interval_us =   200,
67     One_shot_max_interval_us = 10000,
68
69
70 #ifdef CONFIG_FINE_GRAINED_CPUTIME
71     Fine_grained_cputime = true,
72 #else
73     Fine_grained_cputime = false,
74 #endif
75
76 #ifdef CONFIG_STACK_DEPTH
77     Stack_depth = true,
78 #else
79     Stack_depth = false,
80 #endif
81 #ifdef CONFIG_NO_FRAME_PTR
82     Have_frame_ptr = 0,
83 #else
84     Have_frame_ptr = 1,
85 #endif
86     Mapdb_ram_only = 0,
87 #ifdef CONFIG_DEBUG_KERNEL_PAGE_FAULTS
88     Log_kernel_page_faults = 1,
89 #else
90     Log_kernel_page_faults = 0,
91 #endif
92 #ifdef CONFIG_JDB
93     Jdb = 1,
94 #else
95     Jdb = 0,
96 #endif
97 #ifdef CONFIG_JDB_LOGGING
98     Jdb_logging = 1,
99 #else
100     Jdb_logging = 0,
101 #endif
102 #ifdef CONFIG_JDB_ACCOUNTING
103     Jdb_accounting = 1,
104 #else
105     Jdb_accounting = 0,
106 #endif
107 #ifdef CONFIG_MP
108     Max_num_cpus = CONFIG_MP_MAX_CPUS,
109 #else
110     Max_num_cpus = 1,
111 #endif
112   };
113
114   static bool getchar_does_hlt_works_ok;
115   static bool esc_hack;
116   static unsigned tbuf_entries;
117   static unsigned num_ap_cpus asm("config_num_ap_cpus");
118 };
119
120 #define GREETING_COLOR_ANSI_TITLE  "\033[1;32m"
121 #define GREETING_COLOR_ANSI_INFO   "\033[0;32m"
122
123 INTERFACE[ia32,ux]:
124 #define ARCH_NAME "ia32"
125 #define TARGET_NAME CONFIG_IA32_TARGET
126
127 INTERFACE[arm]:
128 #define ARCH_NAME "arm"
129
130 INTERFACE[amd64]:
131 #define ARCH_NAME "amd64"
132 #define TARGET_NAME CONFIG_IA32_TARGET
133
134 INTERFACE[ppc32]:
135 #define ARCH_NAME "ppc32"
136
137 INTERFACE[sparc]:
138 #define ARCH_NAME "sparc"
139 #define TARGET_NAME ""
140
141 INTERFACE:
142 #define CONFIG_KERNEL_VERSION_STRING \
143   GREETING_COLOR_ANSI_TITLE "Welcome to Fiasco.OC (" CONFIG_XARCH ")!\\n"            \
144   GREETING_COLOR_ANSI_INFO "L4/Fiasco.OC " ARCH_NAME " "                \
145                            "microkernel (C) 1998-2012 TU Dresden\\n"           \
146                            "Rev: " CODE_VERSION " compiled with gcc " COMPILER \
147                             " for " TARGET_NAME "    [" CONFIG_LABEL "]\\n"    \
148                            "Build: #" BUILD_NR " " BUILD_DATE "\\n"            \
149   GREETING_COLOR_ANSI_OFF
150
151
152 //---------------------------------------------------------------------------
153 INTERFACE [ux]:
154
155 EXTENSION class Config
156 {
157 public:
158   // 32MB RAM => 2.5MB kmem, 128MB RAM => 16MB kmem, >=512MB RAM => 64MB kmem
159   static const unsigned kernel_mem_per_cent = 8;
160   enum
161   {
162     kernel_mem_max      = 64 << 20
163   };
164 };
165
166 //---------------------------------------------------------------------------
167 INTERFACE [!ux]:
168
169 EXTENSION class Config
170 {
171 public:
172   // 32MB RAM => 2.5MB kmem, 128MB RAM => 16MB kmem, >=512MB RAM => 60MB kmem
173   static const unsigned kernel_mem_per_cent = 8;
174   enum
175   {
176     kernel_mem_max      = 60 << 20
177   };
178 };
179
180 //---------------------------------------------------------------------------
181 INTERFACE [serial]:
182
183 EXTENSION class Config
184 {
185 public:
186   static int  serial_esc;
187 };
188
189 //---------------------------------------------------------------------------
190 INTERFACE [!serial]:
191
192 EXTENSION class Config
193 {
194 public:
195   static const int serial_esc = 0;
196 };
197
198 //---------------------------------------------------------------------------
199 IMPLEMENTATION:
200
201 #include <cstring>
202 #include <cstdlib>
203 #include "feature.h"
204 #include "initcalls.h"
205 #include "koptions.h"
206 #include "panic.h"
207
208 KIP_KERNEL_ABI_VERSION(STRINGIFY(FIASCO_KERNEL_SUBVERSION));
209
210 // class variables
211 bool Config::esc_hack = false;
212 #ifdef CONFIG_SERIAL
213 int  Config::serial_esc = Config::SERIAL_NO_ESC;
214 #endif
215
216 unsigned Config::tbuf_entries = 0x20000 / sizeof(Mword); //1024;
217 bool Config::getchar_does_hlt_works_ok = false;
218 unsigned Config::num_ap_cpus;
219
220 #ifdef CONFIG_FINE_GRAINED_CPUTIME
221 KIP_KERNEL_FEATURE("fi_gr_cputime");
222 #endif
223
224 //-----------------------------------------------------------------------------
225 IMPLEMENTATION:
226
227 IMPLEMENT FIASCO_INIT
228 void Config::init()
229 {
230   init_arch();
231
232   if (Koptions::o()->opt(Koptions::F_esc))
233     esc_hack = true;
234
235 #ifdef CONFIG_SERIAL
236   if (    Koptions::o()->opt(Koptions::F_serial_esc)
237       && !Koptions::o()->opt(Koptions::F_noserial)
238 # ifdef CONFIG_KDB
239       &&  Koptions::o()->opt(Koptions::F_nokdb)
240 # endif
241       && !Koptions::o()->opt(Koptions::F_nojdb))
242     {
243       serial_esc = SERIAL_ESC_IRQ;
244     }
245 #endif
246 }
247