1 IMPLEMENTATION [libuart]:
4 #include "io_regblock.h"
6 //------------------------------------------------------------------------
7 IMPLEMENTATION [libuart && serial && io]:
9 #include "io_regblock_port.h"
15 Static_object<L4::Io_register_block_port> io;
16 Static_object<L4::Io_register_block_mmio> mem;
20 setup_uart_io_port(Regs *regs, Address base, int irq)
22 regs->io.construct(base);
23 return Kernel_uart::uart()->startup(regs->io.get(), irq,
24 Koptions::o()->uart.base_baud);
29 //------------------------------------------------------------------------
30 IMPLEMENTATION [libuart && serial && !io]:
36 Static_object<L4::Io_register_block_mmio> mem;
40 setup_uart_io_port(Regs *, Address, int)
42 panic ("cannot use IO-Port based uart\n");
47 //------------------------------------------------------------------------
48 IMPLEMENTATION [libuart && serial]:
52 Kernel_uart::init_for_mode(Init_mode init_mode)
54 if (Koptions::o()->uart.access_type == Koptions::Uart_type_ioport)
55 return init_mode == Init_before_mmu;
57 return init_mode == Init_after_mmu;
61 bool Kernel_uart::startup(unsigned, int irq)
65 if (Koptions::o()->opt(Koptions::F_uart_base))
67 Address base = Koptions::o()->uart.base_address;
68 switch (Koptions::o()->uart.access_type)
70 case Koptions::Uart_type_ioport:
71 return setup_uart_io_port(®s, base, irq);
73 case Koptions::Uart_type_mmio:
74 regs.mem.construct(Kmem::mmio_remap(base),
75 Koptions::o()->uart.reg_shift);
76 return uart()->startup(regs.mem.get(), irq,
77 Koptions::o()->uart.base_baud);