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