Skip to content

Commit

Permalink
C++: refactor console_t -> Console
Browse files Browse the repository at this point in the history
  • Loading branch information
moodyhunter committed Feb 11, 2025
1 parent 7891438 commit 295d678
Show file tree
Hide file tree
Showing 26 changed files with 513 additions and 531 deletions.
12 changes: 12 additions & 0 deletions kernel/arch/generic/boot/limine/limine.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -66,8 +66,20 @@ static void ap_entry(struct limine_smp_info *info)
platform_ap_entry(info->extra_argument);
}

static void invoke_constructors(void)
{
typedef void (*init_function_t)(void);
extern const init_function_t __init_array_start[], __init_array_end;

for (const init_function_t *func = __init_array_start; func != &__init_array_end; func++)
{
(*func)();
}
}

extern "C" void limine_entry(void)
{
invoke_constructors();
if (hhdm.response->offset)
platform_info->direct_map_base = hhdm.response->offset; // early-populate direct_map_base

Expand Down
1 change: 0 additions & 1 deletion kernel/arch/riscv64/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -10,5 +10,4 @@ add_kernel_source(
cpu/interrupt.S
cpu/context_switch.S
devices/sbi_console.cpp
devices/uart_driver.cpp
)
36 changes: 18 additions & 18 deletions kernel/arch/riscv64/devices/sbi_console.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -10,14 +10,14 @@

static standard_color_t sbi_console_bg = Black, sbi_console_fg = White;

static size_t sbi_console_write(console_t *con, const char *data, size_t size)
static size_t sbi_console_write(Console *con, const char *data, size_t size)
{
MOS_UNUSED(con);
MOS_UNUSED(size);
return sbi_putstring(data);
}

static bool sbi_console_set_color(console_t *con, standard_color_t fg, standard_color_t bg)
static bool sbi_console_set_color(Console *con, standard_color_t fg, standard_color_t bg)
{
MOS_UNUSED(con);
sbi_console_fg = fg;
Expand All @@ -29,32 +29,32 @@ static bool sbi_console_set_color(console_t *con, standard_color_t fg, standard_
return true;
}

static bool sbi_console_get_color(console_t *con, standard_color_t *fg, standard_color_t *bg)
static bool sbi_console_get_color(Console *con, standard_color_t *fg, standard_color_t *bg)
{
MOS_UNUSED(con);
*fg = sbi_console_fg;
*bg = sbi_console_bg;
return true;
}

static bool sbi_console_clear(console_t *console)
static bool sbi_console_clear(Console *console)
{
MOS_UNUSED(console);
sbi_putstring("\033[2J");
return true;
}

static console_ops_t sbi_console_ops = {
.write = sbi_console_write,
.get_color = sbi_console_get_color,
.set_color = sbi_console_set_color,
.clear = sbi_console_clear,
};

console_t sbi_console = {
.ops = &sbi_console_ops,
.name = "sbi-console",
.caps = CONSOLE_CAP_COLOR | CONSOLE_CAP_CLEAR,
.default_fg = White,
.default_bg = Black,
};
// static console_ops_t sbi_console_ops = {
// .write = sbi_console_write,
// .get_color = sbi_console_get_color,
// .set_color = sbi_console_set_color,
// .clear = sbi_console_clear,
// };

// Console sbi_console = {
// .ops = &sbi_console_ops,
// .name = "sbi-console",
// .caps = CONSOLE_CAP_COLOR | CONSOLE_CAP_CLEAR,
// .default_fg = White,
// .default_bg = Black,
// };
38 changes: 0 additions & 38 deletions kernel/arch/riscv64/devices/uart_driver.cpp

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -4,4 +4,4 @@

#include "mos/device/console.hpp"

extern console_t sbi_console;
// extern Console sbi_console;

This file was deleted.

71 changes: 45 additions & 26 deletions kernel/arch/riscv64/riscv64_platform.cpp
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
// SPDX-License-Identifier: GPL-3.0-or-later

// #include "mos/device/console.hpp"
#include "mos/device/serial.hpp"
#include "mos/device/serial_console.hpp"
#include "mos/interrupt/interrupt.hpp"
#include "mos/mm/mm.hpp"
Expand All @@ -9,39 +10,57 @@
#include "mos/platform/platform.hpp"
#include "mos/riscv64/cpu/cpu.hpp"
#include "mos/riscv64/cpu/plic.hpp"
#include "mos/riscv64/devices/uart_driver.hpp"

static u8 uart_buf[MOS_PAGE_SIZE] __aligned(MOS_PAGE_SIZE) = { 0 };
static Buffer<MOS_PAGE_SIZE> uart_buf;

static bool riscv64_uart_setup(console_t *con)
class RiscV64UartDevice : public ISerialDevice
{
serial_console_t *const serial_con = container_of(con, serial_console_t, con);
serial_con->device.driver_data = (void *) pa_va(0x10000000);
serial_console_setup(con);
return true;
}
public:
RiscV64UartDevice(void *mmio) : mmio(static_cast<volatile u8 *>(mmio))
{
baudrate_divisor = BAUD_RATE_115200;
char_length = CHAR_LENGTH_8;
stop_bits = STOP_BITS_1;
parity = PARITY_NONE;
}

static console_ops_t uart_console_ops = {
.extra_setup = riscv64_uart_setup,
};
public:
u8 read_byte() override
{
return mmio[0];
}

int write_byte(u8 data) override
{
mmio[0] = data;
return 0;
}

u8 read_register(serial_register_t reg) override
{
return mmio[reg];
}

void write_register(serial_register_t reg, u8 data) override
{
mmio[reg] = data;
}

static serial_console_t uart_console = {
.con = { .ops = &uart_console_ops,
.name = "riscv_uart1",
.caps = CONSOLE_CAP_READ | CONSOLE_CAP_EXTRA_SETUP,
.read = { .buf = uart_buf, .size = MOS_PAGE_SIZE },
.default_fg = LightBlue,
.default_bg = Black },
.device = { .driver = &riscv64_uart_driver,
.driver_data = NULL,
.baudrate_divisor = BAUD_RATE_115200,
.char_length = CHAR_LENGTH_8,
.stop_bits = STOP_BITS_1,
.parity = PARITY_NONE },
bool get_data_ready() override
{
return true;
}

private:
volatile u8 *mmio;
};

static RiscV64UartDevice uart_serial_device{ (void *) pa_va(0x10000000) };

SerialConsole uart_console{ "riscv_uart1", CONSOLE_CAP_READ, &uart_buf, &uart_serial_device, LightBlue, Black };

static mos_platform_info_t riscv64_platform_info = {
.boot_console = &uart_console.con,
.boot_console = &uart_console,
};
mos_platform_info_t *const platform_info = &riscv64_platform_info;

Expand Down Expand Up @@ -81,5 +100,5 @@ void platform_startup_late()
{
#define UART0_IRQ 10
plic_enable_irq(UART0_IRQ);
interrupt_handler_register(UART0_IRQ, serial_console_irq_handler, &uart_console.con);
interrupt_handler_register(UART0_IRQ, serial_console_irq_handler, &uart_console);
}
2 changes: 1 addition & 1 deletion kernel/arch/riscv64/riscv64_platform_api.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
#include "mos/tasks/signal.hpp"
#include "mos/tasks/task_types.hpp"

#include <mos/platform_syscall.hpp>
#include <mos/platform_syscall.h>
#include <mos_stdlib.hpp>

// Platform Context Switching APIs
Expand Down
1 change: 0 additions & 1 deletion kernel/arch/x86_64/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,6 @@ add_kernel_source(
acpi/madt.cpp
cpu/ap_entry.cpp
cpu/cpu.cpp
devices/serial_driver.cpp
devices/rtc.cpp
descriptors/descriptors.cpp
interrupt/lapic.cpp
Expand Down
37 changes: 0 additions & 37 deletions kernel/arch/x86_64/devices/serial_driver.cpp

This file was deleted.

This file was deleted.

Loading

0 comments on commit 295d678

Please sign in to comment.