Skip to content

Commit 1d76060

Browse files
committed
kernel: Refactor default stdout to be per-platform
1 parent 6c03b09 commit 1d76060

8 files changed

Lines changed: 19 additions & 30 deletions

File tree

api/kernel/os.hpp

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -138,11 +138,15 @@ class OS {
138138
*/
139139
static void add_stdout(print_func func);
140140
/**
141-
* Add "default" serial port output
141+
* Add stdout handler that calls OS::default_stdout
142142
**/
143-
static void add_stdout_default_serial();
143+
static void add_default_stdout();
144144

145-
static void add_stdout_solo5();
145+
/**
146+
* The default output method preferred by each platform
147+
* Directly writes the string to its output mechanism
148+
**/
149+
static void default_stdout(const char*, size_t);
146150

147151
/** Memory page helpers */
148152
static constexpr uint32_t page_size() noexcept {

src/drivers/silent.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,6 @@ void default_stdout_handlers()
2525
[] (const char* str, size_t len)
2626
{
2727
if (OS::is_booted() || OS::is_panicking())
28-
kprintf("%.*s", len, str);
28+
OS::default_stdout(str, len);
2929
});
3030
}

src/kernel/os.cpp

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,6 @@ std::string OS::cmdline{Service::binary_name()};
6565
// stdout redirection
6666
using Print_vec = fixedvector<OS::print_func, 8>;
6767
static Print_vec os_print_handlers(Fixedvector_Init::UNINIT);
68-
extern void default_stdout_handlers();
6968

7069
// Plugins
7170
OS::Plugin_vec OS::plugins_(Fixedvector_Init::UNINIT);
@@ -102,17 +101,17 @@ void OS::add_stdout(OS::print_func func)
102101
{
103102
os_print_handlers.add(func);
104103
}
105-
void OS::add_stdout_default_serial()
104+
void OS::add_default_stdout()
106105
{
107106
add_stdout(
108107
[] (const char* str, const size_t len) {
109-
kprintf("%.*s", static_cast<int>(len), str);
108+
OS::default_stdout(str, len);
110109
});
111110
}
112111
__attribute__ ((weak))
113112
void default_stdout_handlers()
114113
{
115-
OS::add_stdout_default_serial();
114+
OS::add_default_stdout();
116115
}
117116
size_t OS::print(const char* str, const size_t len)
118117
{

src/platform/x86_nano/platform.cpp

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -16,11 +16,6 @@ void __arch_poweroff()
1616
__builtin_unreachable();
1717
}
1818

19-
void default_stdout_handlers()
20-
{
21-
OS::add_stdout_default_serial();
22-
}
23-
2419
void __platform_init(){
2520
// FIXME: set up minimal CPU exception handlers
2621
// TODO: set up minimal CPU exception handlers

src/platform/x86_pc/os.cpp

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -226,5 +226,3 @@ void OS::event_loop()
226226
extern void __arch_poweroff();
227227
__arch_poweroff();
228228
}
229-
230-

src/platform/x86_solo5/kernel_start.cpp

Lines changed: 4 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -9,18 +9,12 @@ extern "C" {
99
#include <solo5.h>
1010
}
1111

12-
extern void solo5_stdout_handlers();
13-
extern void __platform_init();
12+
extern void __platform_init();
13+
extern void default_stdout_handlers();
1414

1515
char cmdline[256];
1616
uintptr_t mem_size;
1717

18-
__attribute__ ((weak))
19-
void solo5_stdout_handlers()
20-
{
21-
OS::add_stdout_solo5();
22-
}
23-
2418
extern "C" {
2519
void __init_sanity_checks();
2620
void kernel_sanity_checks();
@@ -38,7 +32,7 @@ extern "C" {
3832
void (*current_eoi_mechanism)();
3933
void (*current_intr_handler)();
4034
void (*cpu_sampling_irq_handler)();
41-
35+
4236

4337
void kernel_start()
4438
{
@@ -68,7 +62,7 @@ extern "C" {
6862
_init_syscalls();
6963

7064
//Initialize stdout handlers
71-
solo5_stdout_handlers();
65+
default_stdout_handlers();
7266

7367
// Call global ctors
7468
__libc_init_array();

src/platform/x86_solo5/os.cpp

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -70,12 +70,9 @@ int64_t OS::micros_since_boot() noexcept {
7070
return uptime() / 1000;
7171
}
7272

73-
void OS::add_stdout_solo5()
73+
void OS::default_stdout(const char* str, const size_t len)
7474
{
75-
add_stdout(
76-
[] (const char* str, const size_t len) {
77-
solo5_console_write(str, len);
78-
});
75+
solo5_console_write(str, len);
7976
}
8077

8178
void OS::start(char* _cmdline, uintptr_t mem_size)

test/lest_util/os_mock.cpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -75,6 +75,8 @@ Timers::id_t Timers::periodic(duration_t, duration_t, handler_t) {
7575
#include <kernel/os.hpp>
7676
void OS::start(unsigned, unsigned) {
7777
}
78+
void OS::default_stdout(const char*, size_t) {
79+
}
7880
void OS::event_loop() {
7981
}
8082
void OS::block() {

0 commit comments

Comments
 (0)