Author: mcayland Date: Fri Oct 25 12:38:24 2013 New Revision: 1232 URL: http://tracker.coreboot.org/trac/openbios/changeset/1232
Log: ppc: enable basic PReP serial console
This patch follows on from the previous patchsets and provides a basic PReP serial console when launched under QEMU with -nographic. This is done by including the PC serial driver as part of the PPC binary build and setting up a prep_console_ops structure for use when PReP architecture is detected.
Signed-off-by: Mark Cave-Ayland mark.cave-ayland@ilande.co.uk CC: Andreas Färber afaerber@suse.de CC: Hervé Poussineau hpoussin@reactos.org
Modified: trunk/openbios-devel/arch/ppc/qemu/console.c trunk/openbios-devel/arch/ppc/qemu/init.c trunk/openbios-devel/arch/ppc/qemu/main.c trunk/openbios-devel/config/examples/ppc_config.xml
Modified: trunk/openbios-devel/arch/ppc/qemu/console.c ============================================================================== --- trunk/openbios-devel/arch/ppc/qemu/console.c Fri Oct 25 12:38:14 2013 (r1231) +++ trunk/openbios-devel/arch/ppc/qemu/console.c Fri Oct 25 12:38:24 2013 (r1232) @@ -53,4 +53,36 @@ .getchar = mac_getchar };
+static int prep_putchar(int c) +{ +#ifdef CONFIG_DEBUG_CONSOLE_SERIAL + uart_putchar(c & 0xff); +#endif + return c; +} + +static int prep_availchar(void) +{ +#ifdef CONFIG_DEBUG_CONSOLE_SERIAL + if (uart_charav(CONFIG_SERIAL_PORT)) + return 1; +#endif + return 0; +} + +static int prep_getchar(void) +{ +#ifdef CONFIG_DEBUG_CONSOLE_SERIAL + if (uart_charav(CONFIG_SERIAL_PORT)) + return (uart_getchar(CONFIG_SERIAL_PORT)); +#endif + return 0; +} + +struct _console_ops prep_console_ops = { + .putchar = prep_putchar, + .availchar = prep_availchar, + .getchar = prep_getchar +}; + #endif // CONFIG_DEBUG_CONSOLE
Modified: trunk/openbios-devel/arch/ppc/qemu/init.c ============================================================================== --- trunk/openbios-devel/arch/ppc/qemu/init.c Fri Oct 25 12:38:14 2013 (r1231) +++ trunk/openbios-devel/arch/ppc/qemu/init.c Fri Oct 25 12:38:24 2013 (r1232) @@ -163,7 +163,7 @@ }; unsigned long isa_io_base;
-extern struct _console_ops mac_console_ops; +extern struct _console_ops mac_console_ops, prep_console_ops;
void entry(void) @@ -188,7 +188,11 @@ isa_io_base = arch->io_base;
#ifdef CONFIG_DEBUG_CONSOLE - init_console(mac_console_ops); + if (is_apple()) { + init_console(mac_console_ops); + } else { + init_console(prep_console_ops); + } #endif
if (temp != 1) { @@ -658,6 +662,11 @@
ofmem_t *ofmem = ofmem_arch_get_private();
+ if (!is_apple()) { + /* Initialise PReP serial port */ + ob_pc_serial_init("", "serial", arch->io_base, 0x3f8ULL, 0); + } + openbios_init(); modules_init(); setup_timers(); @@ -823,12 +832,17 @@ #endif
if (fw_cfg_read_i16(FW_CFG_NOGRAPHIC)) { - if (CONFIG_SERIAL_PORT) { - stdin_path = "scca"; - stdout_path = "scca"; + if (is_apple()) { + if (CONFIG_SERIAL_PORT) { + stdin_path = "scca"; + stdout_path = "scca"; + } else { + stdin_path = "sccb"; + stdout_path = "sccb"; + } } else { - stdin_path = "sccb"; - stdout_path = "sccb"; + stdin_path = "/serial"; + stdout_path = "/serial"; }
/* Some bootloaders force the output to the screen device, so
Modified: trunk/openbios-devel/arch/ppc/qemu/main.c ============================================================================== --- trunk/openbios-devel/arch/ppc/qemu/main.c Fri Oct 25 12:38:14 2013 (r1231) +++ trunk/openbios-devel/arch/ppc/qemu/main.c Fri Oct 25 12:38:24 2013 (r1232) @@ -22,6 +22,7 @@ #include "libc/diskio.h" #include "libc/vsprintf.h" #include "kernel.h" +#include "drivers/drivers.h" #include "libopenbios/ofmem.h" #define NO_QEMU_PROTOS #include "arch/common/fw_cfg.h" @@ -78,5 +79,7 @@ check_preloaded_kernel(); }
- update_nvram(); + if (is_apple()) { + update_nvram(); + } }
Modified: trunk/openbios-devel/config/examples/ppc_config.xml ============================================================================== --- trunk/openbios-devel/config/examples/ppc_config.xml Fri Oct 25 12:38:14 2013 (r1231) +++ trunk/openbios-devel/config/examples/ppc_config.xml Fri Oct 25 12:38:24 2013 (r1232) @@ -8,6 +8,7 @@ <option name="CONFIG_DEBUG_INTERPRETER" type="boolean" value="false"/> <option name="CONFIG_DEBUG_CONSOLE" type="boolean" value="true"/> <option name="CONFIG_DEBUG_CONSOLE_SERIAL" type="boolean" value="true"/> + <option name="CONFIG_DRIVER_PC_SERIAL" type="boolean" value="true"/> <option name="CONFIG_SERIAL_PORT" type="integer" value="0"/> <option name="CONFIG_SERIAL_SPEED" type="integer" value="115200"/> <option name="CONFIG_DEBUG_CONSOLE_VGA" type="boolean" value="true"/>