]> rtime.felk.cvut.cz Git - l4.git/blob - kernel/fiasco/src/Kconfig
update
[l4.git] / kernel / fiasco / src / Kconfig
1
2
3 mainmenu "Fiasco configuration"
4
5 config KERNELVERSION
6         string
7         option env="KERNELVERSION"
8
9 config INCLUDE_PPC32
10         bool
11         option env="INCLUDE_PPC32"
12         help
13           Use "INCLUDE_PPC32=y make config" to include ppc32 options.
14
15 menu "Target configuration"
16
17 choice
18         prompt "Architecture"
19         default IA32
20
21 config IA32
22         bool "Intel IA-32 processor family"
23
24 config AMD64
25         bool "AMD64 processor family"
26         select CONTEXT_4K
27
28 config ARM
29         bool "ARM processor family"
30         
31 config PPC32
32         bool "PowerPC 32 processor family (Caution: INCOMPLETE!)"
33         depends on EXPERIMENTAL && INCLUDE_PPC32
34         help
35           PPC32 testing version, mainly for MPC5200 (603e). Currently,
36           there is no support whatsoever.
37         select CONTEXT_4K
38         select BIG_ENDIAN
39
40 endchoice
41
42 config BIG_ENDIAN
43         bool
44
45 choice
46         prompt "Platform"
47         default PF_INTEGRATOR if ARM
48         default PF_PC         if IA32
49         default PF_PC         if AMD64
50         default PF_MP52CXX    if PPC32
51
52 config PF_PC
53         bool "PC platform"
54         depends on IA32 || AMD64
55
56 config PF_UX
57         bool "Linux Usermode Platform"
58         depends on IA32
59         select JDB
60
61 # PF_CHOICE
62         
63 endchoice
64
65 # PF_INCLUDE
66
67 config ABI_VF
68         def_bool y
69
70 config PF_ARM_MP_CAPABLE
71         bool
72         default y if ARM_MPCORE || ARM_CORTEX_A9
73
74 config CAN_ARM_CPU_SA1100
75         bool
76
77 config CAN_ARM_CPU_XSCALE
78         bool
79
80 config CAN_ARM_CPU_920T
81         bool
82
83 config CAN_ARM_CPU_926
84         bool
85
86 config CAN_ARM_CPU_1136
87         bool
88
89 config CAN_ARM_CPU_1176
90         bool
91
92 config CAN_ARM_CPU_MPCORE
93         bool
94
95 config CAN_ARM_CPU_CORTEX_A8
96         bool
97
98 config CAN_ARM_CPU_CORTEX_A9
99         bool
100
101
102 choice
103         prompt "CPU"
104         default IA32_686   if IA32
105         default ARM_926    if ARM
106         default AMD64_K8   if AMD64
107         default PPC32_603e if PPC32
108
109 config ARM_PXA
110         bool "Intel XScale"
111         depends on PF_XSCALE
112
113 config ARM_SA
114         bool "Intel StrongARM"
115         depends on PF_SA1100
116
117 config ARM_920T
118         bool "ARM 920T Processor"
119         depends on PF_S3C2410
120
121 config ARM_926
122         bool "ARM 926 Processor"
123         depends on CAN_ARM_CPU_926
124
125 config ARM_1136
126         bool "ARM 1136 CPU"
127         depends on CAN_ARM_CPU_1136
128
129 config ARM_1176
130         bool "ARM 1176 CPU"
131         depends on CAN_ARM_CPU_1176
132
133 config ARM_MPCORE
134         bool "ARM MPCore CPU"
135         depends on CAN_ARM_CPU_MPCORE
136
137 config ARM_CORTEX_A8
138         bool "ARM Cortex-A8 CPU"
139         depends on CAN_ARM_CPU_CORTEX_A8
140
141 config ARM_CORTEX_A9
142         bool "ARM Cortex-A9 CPU"
143         depends on CAN_ARM_CPU_CORTEX_A9
144
145 config IA32_486
146         bool "Intel 80486"
147         depends on IA32
148         help
149           Choose this if you have an Intel 80486 or equivalent CPU (i486).
150
151 config IA32_586
152         bool "Intel Pentium / AMD K5"
153         depends on IA32
154         help
155           Choose this if you have an Intel Pentium or compatible i586 CPU.
156
157 config IA32_686
158         bool "Intel Pentium Pro"
159         depends on IA32
160         help
161           Choose this if you have an Intel Pentium Pro or compatible i686 CPU.
162
163 config IA32_P2
164         bool "Intel Pentium II / Celeron II"
165         depends on IA32
166         help
167           Choose this if you have an Intel Pentium II or Pentium II based Celeron.
168
169 config IA32_P3
170         bool "Intel Pentium III / Celeron III"
171         depends on IA32
172         help
173           Choose this if you have an Intel Pentium III or Pentium III based Celeron.
174
175 config IA32_P4
176         bool "Intel Pentium 4 / Celeron 4"
177         depends on IA32
178         help
179           Choose this if you have an Intel Pentium 4 or Pentium 4 based Celeron.
180
181 config IA32_PM
182         bool "Intel Pentium M"
183         depends on IA32
184         help
185           Choose this if you have an Intel Pentium M.
186
187 config IA32_CORE2
188         bool "Intel Core 2"
189         depends on IA32
190         help
191           Choose this if you have an Intel Core 2.
192
193 config IA32_ATOM
194         bool "Intel Atom"
195         depends on IA32
196         help
197           Choose this if you have an Intel Atom.
198
199 config IA32_K6
200         bool "AMD K6 / K6-II / K6-III"
201         depends on IA32
202         help
203           Choose this if you have an AMD K6 CPU.
204
205 config IA32_K7
206         bool "AMD Athlon / Duron"
207         depends on IA32
208         help
209           Choose this if you have an AMD Athlon or Duron CPU.
210
211 config IA32_K8
212         bool "AMD Opteron / Athlon64"
213         depends on IA32
214         help
215           Choose this if you have an AMD Opteron or Athlon64 CPU.
216
217 config IA32_K10
218         bool "AMD Barcelona (K10)"
219         depends on IA32
220         help
221           Choose this if you have an AMD Barcelona based CPU.
222
223
224 config AMD64_K8
225         bool "AMD Opteron / Athlon64"
226         depends on AMD64
227         help
228           Choose this if you have an AMD Opteron or Athlon64 CPU.
229
230 config AMD64_CORE2
231         bool "Intel Core 2"
232         depends on AMD64
233         help
234           Choose this if you have an Intel Core 2.
235
236 config AMD64_ATOM
237         bool "Intel Atom"
238         depends on AMD64
239         help
240           Choose this if you have an Intel Atom.
241
242 config AMD64_K10
243         bool "AMD Barcelona (K10)"
244         depends on AMD64
245         help
246           Choose this if you have an AMD Barcelona based CPU.
247
248
249 config PPC32_603e
250         bool "PowerPC 603e"
251         depends on PPC32
252         help
253           Choose this if you have an PowerPC 603e CPU.
254
255 endchoice
256
257
258
259 config CPU_VIRT
260         bool "Enable CPU virtualization (SVM and VT)"
261         depends on PF_PC
262         help
263           Support virtualization extensions that comes with x86 CPUs,
264           including nested paging. This feature allows you to run a virtual
265           machine monitor (VMM) on top of Fiasco.
266
267 config ARM_ALIGNMENT_CHECK
268         bool "Enable alignment check"
269         depends on ARM
270         help
271           Enable if you want to have alignment check enabled.
272
273 config ARM_TZ
274         bool "Enable ARM TrustZone support"
275         depends on (ARM_1176 || ARM_CORTEX_A8 || ARM_CORTEX_A9) && EXPERIMENTAL
276         help
277           Support ARM TrustZone security extension.
278
279 config ARM_CA9_ENABLE_SWP
280         bool "Enable the deprecated 'swp' instruction"
281         depends on ARM_CORTEX_A9
282         help
283           Enabling this option enables the deprecated 'swp' instruction.
284           Avoid to enable it.
285
286 choice
287         prompt "Timer tick source"
288         depends on PF_PC || PF_UX
289         default SCHED_PIT
290
291 config SCHED_PIT
292         bool "Use PIT for scheduling"
293         depends on (PF_PC || PF_UX) && !MP
294         help
295           Normally, Fiasco uses the RTC at IRQ8 for scheduling. This can be
296           disadvantageous in certain circumstances, e.g. VMWare doesn't seem
297           to emulate the RTC good enough so that not enough timer interrupts
298           are produced. The PIT mode (using IRQ0) seems to work better in
299           this case.  It is generally safe to use this option, so if you are
300           unsure, say 'Y'.
301
302           Consider that the interrupt priorities change: Using RTC, IRQ8 has
303           the highest priority. Using PIT, IRQ0 has the highest priority.
304           The only case where PIT scheduling does not work is with
305           profiling. If profiling is enabled the PIT is used for generating
306           the profiling interrupts.
307
308 config SCHED_RTC
309         bool "Use RTC for scheduling"
310         depends on PF_PC && !MP
311         help
312           'Yes' is the standard for this option. If this option is set
313           Fiasco uses the RTC on IRQ 8 for scheduling.  This can be
314           disadvantageous in certain circumstances, e.g. VMWare doesn't seem
315           to emulate the RTC good enough so that not enough timer interrupts
316           are produced.  The PIT (8254) mode (say 'no' here), seems to work
317           better in this case. It is generally safe to use the PIT, so if
318           you are unsure, say 'no'.
319           Consider that the interrupt priorities change: Using RTC, IRQ8 has
320           the highest priority. Using PIT, IRQ0 has the highest priority.
321           The only case where PIT scheduling does not work is with
322           profiling. If profiling is enabled the PIT is used for generating
323           the profiling interrupts and the RTC must be used for scheduling.
324           In the case where profiling shall be used within VMWare the
325           SLOW_RTC option must be set, so that the timer resolution of
326           Fiasco is reduced to 100Hz.
327
328 config SCHED_APIC
329         bool "Use APIC timer for scheduling"
330         depends on PF_PC
331         help
332           Use the Local APIC for scheduling.
333
334 config SCHED_HPET
335         bool "Use HPET timer for scheduling (EXPERIMENTAL)"
336         depends on PF_PC && !MP && EXPERIMENTAL
337         help
338           Use the HPET timer for scheduling.
339
340 endchoice
341
342 config WORKAROUND_AMD_FPU_LEAK
343         bool "Enables workaroud for AMD FPU security leak"
344         depends on PF_PC
345         help
346           If you use Fiasco for high assurance, high security and use AMD
347           CPUs you should enable this option. In any other case it is no
348           harm to disable it.
349
350 config REGPARM3
351         bool "Compile with regparm=3"
352         default y
353         depends on IA32 && PF_PC
354         help
355           Compile Fiasco with -mregparm=3. This uses a different ABI and
356           passes the first three arguments of a function call in registers.
357
358 config FPU
359         bool "Enable FPU co-processor"
360         depends on ARM
361         help
362           Enable this if your platform has hardware floating point support.
363
364 config ARM_1176_CACHE_ALIAS_FIX
365         bool "Use cache restriction to supress aliasing issue on ARM1176"
366         depends on ARM_1176
367         help
368           The ARM1176 processor might have a memory aliasing problem when
369           using cache sizes of more than 16kB cache. Enabling this option
370           enables the workaround of reducing the cache size to 16kB.
371
372 endmenu # target
373
374 menu "Kernel options"
375
376 config MP
377         bool "Enable multi processor support"
378         depends on EXPERIMENTAL && (PF_PC || PF_UX || PF_ARM_MP_CAPABLE)
379         help
380           Enable support for machines with multiple processors.
381
382 config MP_MAX_CPUS
383         int "Maximal supported number of CPUs"
384         depends on MP
385         range 1 32 if BIT32
386         range 1 64 if BIT64
387         default 4
388         help
389           The maximum number of CPUs the kernel supports.
390
391 #config ASSEMBLER_IPC_SHORTCUT
392 #       bool "Assembler IPC shortcut"
393 #       default y
394 #       depends on (PF_PC || PF_UX) && !MP
395 #       help
396 #         Use the assembler IPC shortcut to get even better short IPC
397 #         performance in the common case.
398
399 config CONTEXT_4K
400         bool #"TCB size of 4k"
401         default y
402         help
403           Use this option to use 4K kernel stacks. Only disable this option
404           when you know what you're doing.
405
406 config IO_PROT
407         bool "Enable I/O port protection"
408         default y
409         depends on PF_PC
410         help
411           Enabling this option adds I/O port protection to the kernel. That
412           means that every thread starts running at IOPL 0 which means that
413           only the kernel has full access to all I/O ports. This includes
414           the right to set and clear the interrupt flags (that is using cli
415           and sti). Access rights to I/O ports can be mapped like memory. If
416           a task has access to the whole I/O port space, its IOPL is raised
417           to 3 allowing the task to use cli and sti.
418
419 config IO_PROT_IOPL_3
420         bool "Enable CLI/STI (IOPL 3)"
421         depends on PF_PC && IO_PROT
422         help
423           Enable IOPL 3 for tasks with access to all I/O ports, this is the
424           old behavior.
425
426 config SLOW_RTC
427         bool "Use RTC with 100 ticks per second"
428         depends on SCHED_RTC
429         help
430           This option should be enabled if you use VMWare and no PIT
431           scheduling. The timer resolution is lowered to 100 ticks per
432           second.
433
434 config ONE_SHOT
435         bool "Use scheduling timer in one-shot mode"
436         depends on SCHED_APIC && SYNC_TSC
437         help
438           More costly than periodic but more fine-granular scheduling
439           possible.  EXPERIMENTAL!
440
441 config SYNC_TSC
442         bool "Synchronize KIP time with time-stamp counter"
443         depends on PF_PC && IA32
444         help
445           Synchronize the internal kernel clock with the CPU time stamp
446           counter.
447
448 config FINE_GRAINED_CPUTIME
449         bool "Fine-grained CPU time"
450         help
451           Measure CPU time consumed by a thread from switching to the thread
452           until switching to another thread. Induces an overhead during each
453           thread switch, so only activate it for debugging.
454
455 config UX_CON
456         bool "Graphical console (requires SDL library!)"
457         depends on PF_UX
458         help
459           Fiasco-UX can supply a graphical console for the L4 program it is
460           running.  Enabling this option will build the additional program
461           but needs the SDL library including development header files
462           installed.
463
464 config UX_NET
465         bool "Network support"
466         depends on PF_UX
467         help
468           Enabling this option makes Fiasco-UX provide network support for
469           L4 programs.
470
471 choice 
472         prompt "Scheduler"
473         default FIXED_PRIO
474
475 config SCHED_FIXED_PRIO
476         bool "Fixed priority scheduler"
477         help
478           Choose this for the standard fixed priority scheduler with
479           256 priority levels.
480
481 config SCHED_WFQ
482         bool "Weighted fair queueing scheduler"
483         depends on EXPERIMENTAL
484         help
485           Choose this scheduler for a weighted fair queueing scheduler
486           running with dynamic priorities.
487
488 config SCHED_FP_WFQ
489         bool "Combined fixed priority RT and WFQ scheduler"
490         depends on EXPERIMENTAL
491         help
492           Combination of Fixed priority and weighted fair queueing
493           scheduler.
494
495 endchoice
496
497 config DISABLE_VIRT_OBJ_SPACE
498         bool "No virtually mapped array for cap tables"
499         depends on (PF_PC || ARM) &&  EXPERIMENTAL
500         default n
501
502 endmenu # kernel options
503
504 menu "Debugging"
505
506 config INLINE
507         bool "Generate inline code"
508         default y
509         help
510           Inlining specifies that it is desirable for the compiler to
511           integrate functions declared 'inline' into the calling routine.
512           This usually leads to faster code, so unless you want to debug the
513           kernel you should say 'Y' here.
514
515 config NDEBUG
516         bool "Do not compile assertions"
517         help
518           Don't insert assertions into the code. Should be enabled for
519           kernels which are used for measurements.
520
521 config PROFILE
522         bool #"Compile with profiling support"
523         depends on EXPERIMENTAL && PF_PC && IA32 && !ASSEMBLER_IPC_SHORTCUT && SCHED_RTC && !NO_FRAME_PTR
524         help
525           This option enables support for kernel profiling. This implies
526           that a special CPU lock is used, because profiling IRQ must be
527           enabled even in cases where a CPU lock is locked. So the
528           cpu_lock-pic module is used as implementation for the lock.
529           Further this option does not work with PIT scheduling
530           (CONFIG_SCHED_PIT) because the PIT is used for generating
531           profiling IRQs.
532
533 config NO_FRAME_PTR
534         bool "Compile without frame pointer"
535         default y
536         help
537           Enabling this option optimizes for speed but makes debugging more
538           difficult.
539
540 config STACK_DEPTH
541         bool "Measure stack depth of threads"
542         help
543           When this option is enabled, each thread control block is marked
544           with magic numbers while creation. The function ``show thread
545           lists'' scans the TCB for these magic numbers and shows the
546           currently used depth of each thread.
547
548 config ALLOW_RO_TEXT
549         bool "Read-Only Kernel Text and Data"
550         default false
551         depends on IA32 || AMD64
552         help
553           Enable this option to enable read-only mappings for kernel code
554           and ro data. To really map things read only '-rotext' needs to be
555           given to the kernel command line.
556           NOTE: This may significantly increase the memory footprint of the
557                 kernel. The use of '-rotext' with extendet logging results in
558                 kernel crashes.
559
560 config LIST_ALLOC_SANITY
561         bool "Sanity checks in low level allocator"
562         help
563           When this option is enabled the low level memory allocator does
564           extra sanity checks on its data structures before and after every
565           operation. This can halp detect  flaws like double frees or memory
566           corruption by other means.
567
568           These tests are very expensive so only enable them if a problem
569           with memory allocation is expected.
570
571 config BEFORE_IRET_SANITY
572         bool "Sanity checks at syscall entry/exit"
573         depends on PF_PC
574         help
575           Perform the following additional sanity checks before returning to
576           usermode:
577             - Does the thread hold any locks?
578             - Is the thread locked by any other thread?
579             - Does the thread have the right state:
580               * Thread_ready must be set.
581               * Thread_cancel and Thread_fpu_owner might be set.
582               * Any other state bit must not be set.
583           Don't use Fiasco compiled with this option for performance analysis!
584
585 config GSTABS
586         bool "Compile with gstabs+ debugging information"
587         depends on n
588         help
589           Enabling this option includes the debugging information using the
590           older gstabs+ format into the kernel image. This is necessary to
591           access line number information of the kernel from JDB.
592
593 config IRQ_SPINNER
594         bool "Display IRQ activity on VGA screen"
595         depends on PF_PC
596         help
597           Display IRQ activity on VGA screen.
598
599 config WATCHDOG
600         bool "Enable Watchdog support"
601         default y
602         depends on PF_PC
603         help
604           Enable support for watchdog using the builtin Local APIC and a
605           performance counter. The watchdog can be enabled using the
606           -watchdog command line option.
607
608 config SERIAL
609         bool "Support for debugging over serial line"
610         depends on PF_PC || ARM || PPC32
611         default y
612         help
613           This option enables support for input/output over serial interface.
614
615 menuconfig JDB
616         bool "JDB kernel debugger"
617         default y
618         help
619           The powerful Fiasco kernel debugger.
620
621 if JDB
622
623 config JDB_LOGGING
624         bool "JDB extended logging"
625         help
626           There are two classes of logging events: Basic events don't
627           consume any time if they are disabled (ipc, ipc result,
628           pagefaults, unmap). Extended logging events add an additional
629           overhead of most probably less than 10 cycles if they are
630           disabled. These events can be activated/deactivated by the 'O'
631           command in jdb.
632
633           Should be disabled for kernels which are used for measurements.
634
635 config JDB_DISASM
636         bool "JDB disassembler"
637         default n if ARM
638         default y
639         help
640           Add support for disassembly. Increases memory foot-print, only
641           enable when needed.
642
643 config JDB_GZIP
644         bool "GZIP compressed dumps"
645         default n if ARM
646         default y
647         help
648           Add supprt for gzip compressed dumps of the trace buffer.
649           Increases memory foot-print, only enabled when needed.
650
651 config JDB_ACCOUNTING
652         bool "JDB accounting"
653         depends on IA32
654         help
655           Enable accounting information about IPCs, context switches, page
656           faults, and other events. The counters are accessible from
657           userland through the tbuf status page.
658
659           Should be disabled for kernels which are used for measurements.
660
661 config JDB_MISC
662         bool "Miscellaneous JDB modules"
663         depends on PF_UX || PF_PC
664
665 endif # JDB
666
667
668 config VMEM_ALLOC_TEST
669         bool "Run test for Vmem_alloc allocator"
670         depends on ARM
671
672 config DEBUG_KERNEL_PAGE_FAULTS
673         bool "Debugging of kernel page-faults"
674         depends on ARM
675         help
676           This option enables logging of kernel page-faults (aka page faults
677           from kernel mode). The page faults are logged to the normal
678           console in the format *KP[pfa, error_code, ip].
679
680 config POWERSAVE_GETCHAR
681         bool "Save power in getchar()"
682         default y
683         depends on PF_PC
684         help
685           This option uses a processor HALT in getchar() to save power and
686           prevent some P4 processors from being overheated. This option
687           requires a working timer IRQ to wakeup getchar periodically.
688
689 choice
690         prompt "Warn levels"
691         default WARN_WARNING
692
693 config WARN_NONE
694         bool "Do not show show any kernel warning"
695
696 config WARN_WARNING
697         bool "Show messages of warning level"
698
699 config WARN_ANY
700         bool "Show all kernel warnings"
701
702 endchoice # warn levels
703
704 endmenu # debugging
705
706 menu "Compiling"
707
708 config CC
709         string "C compiler"
710         default "gcc"
711         help
712           Use this option to override the default C compiler (gcc).
713
714 config CXX
715         string "C++ compiler"
716         default "g++"
717         help
718           Use this option to override the default C++ compiler (g++).
719
720 config HOST_CC
721         string "C host compiler"
722         default "gcc"
723         help
724           Use this option to override the default C host compiler (gcc).
725
726 config HOST_CXX
727         string "C++ host compiler"
728         default "g++"
729         help
730           Use this option to override the default C++ host compiler (g++).
731
732 config VERBOSE
733         bool "Verbose build process"
734         help
735           When enabled, this config option allows you to see more details of
736           the build process.
737
738 config MAINTAINER_MODE
739         bool "Do additional checks at build time"
740         help
741           This enables the circular dependency and initcall checks.
742           Say 'Yes' here if you do kernel hacking.
743
744 config LABEL
745         string "Configuration label"
746         help
747           Text string with a name for this configuration. To be displayed in
748           the kernel boot-up.
749
750 endmenu
751
752 config EXPERIMENTAL
753         bool "Prompt for experimental features"
754         help
755           Experimental features are available when enabling this option.
756           Enabling these features might be less than fully secure and may
757           disrupt the stability of your kernel.
758
759           Use with caution!
760
761 config PERF_CNT
762         def_bool y if JDB && (IA32 || AMD64 || ARM)
763
764 config BIT32
765         def_bool y if ARM || IA32 || PPC32
766
767 config BIT64
768         def_bool y if AMD64
769
770 config ARM_V6
771         def_bool y if ARM_1136 || ARM_1176 || ARM_MPCORE
772
773 config ARM_V7
774         def_bool y if ARM_CORTEX_A8 || ARM_CORTEX_A9
775
776 config ARM_V6PLUS
777         def_bool y if ARM_V6 || ARM_V7
778
779 config WARN_LEVEL
780         int
781         default 2 if WARN_ANY
782         default 1 if WARN_WARNING
783         default 0 if WARN_NONE
784
785 config XARCH
786         string
787         default "arm" if ARM
788         default "ux" if PF_UX
789         default "amd64" if AMD64 && PF_PC
790         default "ia32" if IA32 && PF_PC
791         default "ppc32" if PPC32
792
793 config IA32_TARGET
794         string
795         default "Intel 80486" if IA32_486
796         default "Intel Pentium" if IA32_586
797         default "Intel Pentium Pro" if IA32_686
798         default "Intel Pentium II" if IA32_P2
799         default "Intel Pentium III" if IA32_P3
800         default "Intel Pentium 4" if IA32_P4
801         default "Pentium M" if IA32_PM
802         default "AMD K6" if IA32_K6
803         default "AMD Athlon" if IA32_K7
804         default "Intel Core2" if IA32_CORE2 || AMD64_CORE2
805         default "Intel Atom" if IA32_ATOM || AMD64_ATOM
806         default "AMD Opteron" if IA32_K8 || AMD64_K8 || AMD64_K10 || IA32_K10
807
808 config ABI
809         string
810         default "vf"