From 7562b69ed5b8acf35e08e69490f9b512db1650f6 Mon Sep 17 00:00:00 2001 From: Pierre Pronchery Date: Thu, 5 Apr 2018 03:24:14 +0200 Subject: [PATCH] Let the console be located by name --- src/drivers/console.c | 20 ++++++++++++++++---- src/drivers/console.h | 2 +- src/kernel/main.c | 11 +++++++---- src/loader/main.c | 11 +++++++---- tools/console.c | 17 ++++++++++++++--- tools/main.c | 3 ++- 6 files changed, 47 insertions(+), 17 deletions(-) diff --git a/src/drivers/console.c b/src/drivers/console.c index 22badfe..8fec1a3 100644 --- a/src/drivers/console.c +++ b/src/drivers/console.c @@ -19,17 +19,29 @@ static ukConsole * _console = NULL; # include "console/vga.c" /* console_init */ -ukConsole * console_init(ukBus * bus) +ukConsole * console_init(ukBus * bus, char const * name) { - if((_console = _vga_console_init(bus)) == NULL) + ukConsole * console; + + if(strcmp(name, "vga") == 0) + console = _vga_console_init(bus); + else + { + errno = ENODEV; return NULL; - return _console; + } + if(_console == NULL) + _console = console; + return console; } #else # warning Unsupported platform: missing console /* console_init */ -ukConsole * console_init(ukBus * bus) +ukConsole * console_init(ukBus * bus, char const * name) { + (void) bus; + (void) name; + errno = ENODEV; return NULL; } diff --git a/src/drivers/console.h b/src/drivers/console.h index 3f2d2c1..ae3f0c1 100644 --- a/src/drivers/console.h +++ b/src/drivers/console.h @@ -28,7 +28,7 @@ struct _ukConsole /* prototypes */ -ukConsole * console_init(ukBus * bus); +ukConsole * console_init(ukBus * bus, char const * name); /* accessors */ ukConsole * console_get_default(void); diff --git a/src/kernel/main.c b/src/kernel/main.c index ce72283..fba494b 100644 --- a/src/kernel/main.c +++ b/src/kernel/main.c @@ -8,8 +8,11 @@ #include "drivers/bus.h" #include "drivers/console.h" -#ifndef MAIN_BUS -# define MAIN_BUS "ioport" +#ifndef KERNEL_BUS +# define KERNEL_BUS "ioport" +#endif +#ifndef KERNEL_CONSOLE +# define KERNEL_CONSOLE "vga" #endif @@ -21,8 +24,8 @@ int main(void) ukBus * bus; const char msg[] = "Starting DeforaOS...\n"; - bus = bus_init(MAIN_BUS); - console_init(bus); + bus = bus_init(KERNEL_BUS); + console_init(bus, KERNEL_CONSOLE); puts(msg); return 0; } diff --git a/src/loader/main.c b/src/loader/main.c index 80ab4d8..b22b7d4 100644 --- a/src/loader/main.c +++ b/src/loader/main.c @@ -11,8 +11,11 @@ #include "../drivers/bus.h" #include "../drivers/console.h" -#ifndef MAIN_BUS -# define MAIN_BUS "ioport" +#ifndef LOADER_BUS +# define LOADER_BUS "ioport" +#endif +#ifndef LOADER_CONSOLE +# define LOADER_CONSOLE "vga" #endif @@ -31,8 +34,8 @@ int main(ukMultibootInfo * mi) const char msg_newline[] = "\n"; ukMultibootMod * mod; - bus = bus_init(MAIN_BUS); - console_init(bus); + bus = bus_init(LOADER_BUS); + console_init(bus, LOADER_CONSOLE); puts(msg_starting); if(mi->loader_name != NULL) { diff --git a/tools/console.c b/tools/console.c index 45e361c..5f49867 100644 --- a/tools/console.c +++ b/tools/console.c @@ -4,6 +4,8 @@ +#include +#include #include "drivers/console.h" #include "drivers/console/stdio.c" @@ -16,11 +18,20 @@ static ukConsole * _console = NULL; /* functions */ /* console_init */ -ukConsole * console_init(ukBus * bus) +ukConsole * console_init(ukBus * bus, char const * name) { - if((_console = _stdio_console_init(bus)) == NULL) + ukConsole * console = NULL; + + if(strcmp(name, "stdio") == 0) + console = _stdio_console_init(bus); + else + { + errno = ENODEV; return NULL; - return _console; + } + if(_console == NULL) + _console = console; + return console; } diff --git a/tools/main.c b/tools/main.c index d5e32ad..7eea2af 100644 --- a/tools/main.c +++ b/tools/main.c @@ -4,5 +4,6 @@ -#define MAIN_BUS "tty" +#define KERNEL_BUS "tty" +#define KERNEL_CONSOLE "stdio" #include "../src/kernel/main.c"