diff options
author | Ian Moffett <ian@osmora.org> | 2025-09-15 01:50:08 -0400 |
---|---|---|
committer | Ian Moffett <ian@osmora.org> | 2025-09-15 01:50:08 -0400 |
commit | 51727d06791a071f1b5d69f6a91345da9776b081 (patch) | |
tree | 8ba879f4ed49352cda38dafb51a7e99226a145bf | |
parent | 93e112d3d419ed2cb63cd3d3fa049d0a797aa3e1 (diff) |
kern: io: Implement initial console logic
Signed-off-by: Ian Moffett <ian@osmora.org>
-rw-r--r-- | src/sys/include/io/cons/cons.h | 54 | ||||
-rw-r--r-- | src/sys/io/cons/cons.c | 96 | ||||
-rw-r--r-- | src/sys/os/Makefile | 1 | ||||
-rw-r--r-- | src/sys/os/os_init.c | 4 |
4 files changed, 155 insertions, 0 deletions
diff --git a/src/sys/include/io/cons/cons.h b/src/sys/include/io/cons/cons.h new file mode 100644 index 0000000..3f95cc0 --- /dev/null +++ b/src/sys/include/io/cons/cons.h @@ -0,0 +1,54 @@ +/* + * Copyright (c) 2025 Ian Marco Moffett and L5 engineers + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of the project nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + */ + +#ifndef _CONS_CONS_H_ +#define _CONS_CONS_H_ 1 + +#include <sys/types.h> +#include <sys/bootvars.h> + +struct cons_scr { + struct bootvar_fb fbvars; + uint32_t scr_bg; + uint32_t scr_fg; +}; + +/* + * Represents the root screen used during + * early boot of the system. + */ +extern struct cons_scr g_root_scr; + +/* + * Initialize the console to a basic working + * state. + */ +int cons_init(void); + +#endif /* !_CONS_CONS_H_ */ diff --git a/src/sys/io/cons/cons.c b/src/sys/io/cons/cons.c new file mode 100644 index 0000000..044f5ad --- /dev/null +++ b/src/sys/io/cons/cons.c @@ -0,0 +1,96 @@ +/* + * Copyright (c) 2025 Ian Marco Moffett and L5 engineers + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of the project nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + */ + +#include <sys/types.h> +#include <sys/errno.h> +#include <sys/syslog.h> +#include <io/cons/cons.h> +#include <stdbool.h> +#include <string.h> + +#define DEFAULT_BG 0x000000 +#define DEFAULT_FG 0xB57614 + +struct cons_scr g_root_scr; + +/* + * Fill a screen with a desired background + * color + * + * @bg: Background color to fill screen + */ +static void +fill_screen(struct cons_scr *scr, uint32_t bg) +{ + struct bootvar_fb *fbvars; + size_t len; + + if (scr == NULL) { + return; + } + + fbvars = &scr->fbvars; + len = fbvars->width * fbvars->pitch; + memset(fbvars->io, bg, len); +} + +/* + * Initialize the console + */ +int +cons_init(void) +{ + static bool is_init = false; + struct bootvars bv; + int error; + + /* Only init once */ + if (!is_init) { + is_init = true; + } else { + return -EPERM; + } + + /* + * Attempt to acquire the bootvars so we + * can get the framebuffer + */ + error = bootvars_read(&bv, 0); + if (error < 0) { + printf("cons_init: could not read bootvars\n"); + is_init = false; + return error; + } + + memcpy(&g_root_scr.fbvars, &bv.fbvars, sizeof(bv.fbvars)); + g_root_scr.scr_bg = DEFAULT_BG; + g_root_scr.scr_fg = DEFAULT_FG; + fill_screen(&g_root_scr, g_root_scr.scr_bg); + return 0; +} diff --git a/src/sys/os/Makefile b/src/sys/os/Makefile index f5d1530..c5de3ed 100644 --- a/src/sys/os/Makefile +++ b/src/sys/os/Makefile @@ -8,6 +8,7 @@ CFLAGS = -I../include/ -I../include/lib/ -I../target/header/ $(MI_CFLAGS) -O0 CFILES = $(shell find . -name "*.c") CFILES += $(shell find ../vm -name "*.c") CFILES += $(shell find ../lib -name "*.c") +CFILES += $(shell find ../io -name "*.c") DEPS = $(CFILES:.c=.d) OBJECTS = $(CFILES:%.c=%.o) diff --git a/src/sys/os/os_init.c b/src/sys/os/os_init.c index bf4257d..66e8aca 100644 --- a/src/sys/os/os_init.c +++ b/src/sys/os/os_init.c @@ -2,6 +2,7 @@ #include <sys/panic.h> #include <sys/syslog.h> #include <sys/cpuvar.h> +#include <io/cons/cons.h> #include <vm/vm.h> struct pcore g_bsp; @@ -14,7 +15,10 @@ main(void) { cpu_conf(&g_bsp); printf("booting l5 lunos v0.0.1...\n"); + vm_init(); + cons_init(); + panic("end of kernel reached\n"); for (;;); } |