diff --git a/repos/base-hw/src/core/kernel/main.cc b/repos/base-hw/src/core/kernel/main.cc index ed753cf56a..855d6dbb7c 100644 --- a/repos/base-hw/src/core/kernel/main.cc +++ b/repos/base-hw/src/core/kernel/main.cc @@ -42,6 +42,9 @@ class Kernel::Main friend void main_handle_kernel_entry(); friend void main_initialize_and_handle_kernel_entry(); friend time_t main_read_idle_thread_execution_time(unsigned cpu_idx); + friend void main_print_char(char c); + + enum { SERIAL_BAUD_RATE = 115200 }; static Main *_instance; @@ -52,6 +55,9 @@ class Kernel::Main Genode::Core_platform_pd _core_platform_pd { _addr_space_id_alloc }; Genode::Constructible<Core_main_thread> _core_main_thread { }; Board::Global_interrupt_controller _global_irq_ctrl { }; + Board::Serial _serial { Genode::Platform::mmio_to_virt(Board::UART_BASE), + Board::UART_CLOCK, + SERIAL_BAUD_RATE }; void _handle_kernel_entry(); @@ -196,6 +202,12 @@ Genode::Platform_pd &Kernel::Main::core_platform_pd() } +void Kernel::main_print_char(char c) +{ + Main::_instance->_serial.put_char(c); +} + + Kernel::time_t Kernel::main_read_idle_thread_execution_time(unsigned cpu_idx) { return Main::_instance->_cpu_pool.cpu(cpu_idx).idle_thread().execution_time(); diff --git a/repos/base-hw/src/core/kernel/main.h b/repos/base-hw/src/core/kernel/main.h index b7046174d6..fe5a8d3367 100644 --- a/repos/base-hw/src/core/kernel/main.h +++ b/repos/base-hw/src/core/kernel/main.h @@ -19,11 +19,15 @@ namespace Kernel { + void main_print_char(char const c); + void main_handle_kernel_entry(); void main_initialize_and_handle_kernel_entry(); time_t main_read_idle_thread_execution_time(unsigned cpu_idx); + + void main_print_char(char c); } #endif /* _KERNEL__MAIN_H_ */ diff --git a/repos/base-hw/src/core/kernel_log.cc b/repos/base-hw/src/core/kernel_log.cc index cbeba18755..ba8a59c91e 100644 --- a/repos/base-hw/src/core/kernel_log.cc +++ b/repos/base-hw/src/core/kernel_log.cc @@ -13,26 +13,19 @@ */ /* base-hw Core includes */ -#include <board.h> -#include <platform.h> +#include <kernel/main.h> #include <kernel/log.h> void Kernel::log(char const c) { - using namespace Board; - enum { ASCII_LINE_FEED = 10, ASCII_CARRIAGE_RETURN = 13, - BAUD_RATE = 115200 }; - static Serial serial { Genode::Platform::mmio_to_virt(UART_BASE), - UART_CLOCK, BAUD_RATE }; - if (c == ASCII_LINE_FEED) - serial.put_char(ASCII_CARRIAGE_RETURN); + main_print_char(ASCII_CARRIAGE_RETURN); - serial.put_char(c); + main_print_char(c); }