diff options
author | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2018-04-19 06:28:01 +0200 |
---|---|---|
committer | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2018-04-20 13:08:32 +0200 |
commit | d7d66d7d4523b904c8ccc6aea3709dc0d5aa5bdc (patch) | |
tree | caa54b4229e86a68c84ab5961af34e087dce5302 /bsps/i386/pc386/console/printk_support.c | |
parent | bsps/powerpc: Move shared btimer support (diff) | |
download | rtems-d7d66d7d4523b904c8ccc6aea3709dc0d5aa5bdc.tar.bz2 |
bsps: Move console drivers to bsps
This patch is a part of the BSP source reorganization.
Update #3285.
Diffstat (limited to 'bsps/i386/pc386/console/printk_support.c')
-rw-r--r-- | bsps/i386/pc386/console/printk_support.c | 84 |
1 files changed, 84 insertions, 0 deletions
diff --git a/bsps/i386/pc386/console/printk_support.c b/bsps/i386/pc386/console/printk_support.c new file mode 100644 index 0000000000..d7bc329868 --- /dev/null +++ b/bsps/i386/pc386/console/printk_support.c @@ -0,0 +1,84 @@ +/* + * @file + * + * @ingroup Console + * + * @brief printk support routines + * + * This file contains the required printk support. + */ + +/* + * COPYRIGHT (c) 1989-2012. + * On-Line Applications Research Corporation (OAR). + * + * The license and distribution terms for this file may be + * found in the file LICENSE in this distribution or at + * http://www.rtems.org/license/LICENSE. + */ + +#include <rtems.h> +#include <rtems/bspIo.h> +#if BSP_ENABLE_VGA + #include <rtems/keyboard.h> +#endif +#include <bsp.h> +#include <libchip/serial.h> +#include <libchip/ns16550.h> +#include "../../shared/dev/serial/legacy-console.h" + +rtems_device_minor_number BSPPrintkPort = 0; + +void BSP_outch(char ch); +int BSP_inch(void); + +void BSP_outch(char ch) +{ + #if BSP_ENABLE_VGA + bool isVga = BSPPrintkPort == BSP_CONSOLE_VGA; + #else + bool isVga = false; + #endif + + if ( !isVga ) { + console_tbl *port = Console_Port_Tbl[BSPPrintkPort]; + if (port->pDeviceFns && port->pDeviceFns->deviceWritePolled) { + port->pDeviceFns->deviceWritePolled( BSPPrintkPort, ch ); + } + return; + } + + #if BSP_ENABLE_VGA + _IBMPC_outch( ch ); + #endif +} + +int BSP_inch(void) +{ + #if BSP_ENABLE_VGA + bool isVga = BSPPrintkPort == BSP_CONSOLE_VGA; + #else + bool isVga = false; + #endif + + int result = -1; + + if ( !isVga ) { + console_tbl *port = Console_Port_Tbl[BSPPrintkPort]; + if (port->pDeviceFns && port->pDeviceFns->deviceRead) { + do { + result = port->pDeviceFns->deviceRead( BSPPrintkPort ); + } while (result == -1); + return result; + } + } + + #if BSP_ENABLE_VGA + result = BSP_wait_polled_input(); + #endif + + return result; +} + +BSP_output_char_function_type BSP_output_char = BSP_outch; +BSP_polling_getchar_function_type BSP_poll_char = BSP_inch; |