]> rtime.felk.cvut.cz Git - l4.git/blob - kernel/fiasco/src/kern/uart_console.cpp
c0379e70230d29a28454ecc6c5265eb932a34eb8
[l4.git] / kernel / fiasco / src / kern / uart_console.cpp
1 IMPLEMENTATION:
2
3 #include <cstdio>
4 #include <cstring>
5
6 #include "cmdline.h"
7 #include "config.h"
8 #include "filter_console.h"
9 #include "kernel_console.h"
10 #include "kernel_uart.h"
11 #include "static_init.h"
12 #include "irq.h"
13
14 STATIC_INITIALIZER_P(uart_console_init_stage1, UART_INIT_PRIO);
15 STATIC_INITIALIZER  (uart_console_init_stage2);
16
17 static void uart_console_init_stage1()
18 {
19   if (strstr (Cmdline::cmdline(), " -noserial")) // do not use serial uart
20     return;
21
22   static Filter_console fcon(Kernel_uart::uart());
23
24   Kconsole::console()->register_console(&fcon, 0);
25 }
26
27 static void uart_console_init_stage2()
28 {
29   if ((Kernel_uart::uart()->failed()))
30     return;
31
32   int irq = -1;
33   if (Config::serial_esc == Config::SERIAL_ESC_IRQ
34       && (irq = Kernel_uart::uart()->irq()) == -1)
35     {
36       puts("SERIAL ESC: not supported");
37       Config::serial_esc = Config::SERIAL_ESC_NOIRQ;
38     }
39
40   switch (Config::serial_esc)
41     {
42     case Config::SERIAL_ESC_NOIRQ:
43       puts("SERIAL ESC: No IRQ for specified uart port.");
44       puts("Using serial hack in slow timer handler.");
45       break;
46
47     case Config::SERIAL_ESC_IRQ:
48       Kernel_uart::enable_rcv_irq();
49       printf("SERIAL ESC: allocated IRQ %d for serial uart\n", irq);
50       puts("Not using serial hack in slow timer handler.");
51       break;
52     }
53 }