diff options
Diffstat (limited to 'bsps/i386/pc386/console/conscfg.c')
-rw-r--r-- | bsps/i386/pc386/console/conscfg.c | 198 |
1 files changed, 198 insertions, 0 deletions
diff --git a/bsps/i386/pc386/console/conscfg.c b/bsps/i386/pc386/console/conscfg.c new file mode 100644 index 0000000000..a4ae88626f --- /dev/null +++ b/bsps/i386/pc386/console/conscfg.c @@ -0,0 +1,198 @@ +/** + * @file + * + * This file contains the libchip configuration information + * to instantiate the libchip driver for the VGA console + * and serial ports on a PC. + */ + +/* + * COPYRIGHT (c) 1989-2014, 2016. + * 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 <bsp.h> +#include <bsp/bspimpl.h> +#include <libchip/serial.h> +#include <libchip/ns16550.h> +#if BSP_ENABLE_VGA +#include <rtems/vgacons.h> +#endif +#include <bsp/irq.h> +#include "../../shared/dev/serial/legacy-console.h" + +#if BSP_ENABLE_VGA +#define VGA_CONSOLE_FUNCTIONS &vgacons_fns +#endif + +#if BSP_ENABLE_COM1_COM4 + #if 0 + #define COM_CONSOLE_FUNCTIONS &ns16550_fns_polled + #else + #define COM_CONSOLE_FUNCTIONS &ns16550_fns + #endif + + /* + * Base IO for UART + */ + #define COM1_BASE_IO 0x3F8 + #define COM2_BASE_IO 0x3E8 + #define COM3_BASE_IO 0x2F8 + #define COM4_BASE_IO 0x2E8 + + #define CLOCK_RATE (115200 * 16) + + static uint8_t com_get_register(uint32_t addr, uint8_t i) + { + register uint8_t val; + + inport_byte( (addr + i), val ); + return val; + } + + static void com_set_register(uint32_t addr, uint8_t i, uint8_t val) + { + outport_byte( (addr + i), val ); + } +#endif + +/* + * Default to the PC VGA console if present and configured. + */ +console_tbl Console_Configuration_Ports[] = { +#if BSP_ENABLE_VGA + /* + * If present the VGA console must always be minor 0. + * See console_control. + */ + { + "/dev/vgacons", /* sDeviceName */ + VGA_CONSOLE, /* deviceType */ + VGA_CONSOLE_FUNCTIONS, /* pDeviceFns */ + vgacons_probe, /* deviceProbe */ + NULL, /* pDeviceFlow */ + 16, /* ulMargin */ + 8, /* ulHysteresis */ + (void *) NULL, /* NULL */ /* pDeviceParams */ + 0x00000000, /* ulCtrlPort1 */ + 0x00000000, /* ulCtrlPort2 */ + 0x00000000, /* ulDataPort */ + NULL, /* getRegister */ + NULL, /* setRegister */ + NULL,/* unused */ /* getData */ + NULL,/* unused */ /* setData */ + 0x0, /* ulClock */ + 0x0 /* ulIntVector -- base for port */ + }, +#endif +}; + +unsigned long Console_Configuration_Count = + (sizeof(Console_Configuration_Ports)/sizeof(console_tbl)); + +static console_tbl Legacy_Ports[] = { +#if BSP_ENABLE_COM1_COM4 + { + "/dev/com1", /* sDeviceName */ + SERIAL_NS16550, /* deviceType */ + COM_CONSOLE_FUNCTIONS, /* pDeviceFns */ + NULL, /* deviceProbe */ + NULL, /* pDeviceFlow */ + 16, /* ulMargin */ + 8, /* ulHysteresis */ + (void *) 9600, /* Baud Rate */ /* pDeviceParams */ + COM1_BASE_IO, /* ulCtrlPort1 */ + 0x00000000, /* ulCtrlPort2 */ + COM1_BASE_IO, /* ulDataPort */ + com_get_register, /* getRegister */ + com_set_register, /* setRegister */ + NULL,/* unused */ /* getData */ + NULL,/* unused */ /* setData */ + CLOCK_RATE, /* ulClock */ + BSP_UART_COM1_IRQ /* ulIntVector -- base for port */ + }, + { + "/dev/com2", /* sDeviceName */ + SERIAL_NS16550, /* deviceType */ + COM_CONSOLE_FUNCTIONS, /* pDeviceFns */ + NULL, /* deviceProbe */ + NULL, /* pDeviceFlow */ + 16, /* ulMargin */ + 8, /* ulHysteresis */ + (void *) 9600, /* Baud Rate */ /* pDeviceParams */ + COM2_BASE_IO, /* ulCtrlPort1 */ + 0x00000000, /* ulCtrlPort2 */ + COM2_BASE_IO, /* ulDataPort */ + com_get_register, /* getRegister */ + com_set_register, /* setRegister */ + NULL,/* unused */ /* getData */ + NULL,/* unused */ /* setData */ + CLOCK_RATE, /* ulClock */ + BSP_UART_COM2_IRQ /* ulIntVector -- base for port */ + }, + { + "/dev/com3", /* sDeviceName */ + SERIAL_NS16550, /* deviceType */ + COM_CONSOLE_FUNCTIONS, /* pDeviceFns */ + NULL, /* deviceProbe */ + NULL, /* pDeviceFlow */ + 16, /* ulMargin */ + 8, /* ulHysteresis */ + (void *) 9600, /* Baud Rate */ /* pDeviceParams */ + COM3_BASE_IO, /* ulCtrlPort1 */ + 0x00000000, /* ulCtrlPort2 */ + COM3_BASE_IO, /* ulDataPort */ + com_get_register, /* getRegister */ + com_set_register, /* setRegister */ + NULL,/* unused */ /* getData */ + NULL,/* unused */ /* setData */ + CLOCK_RATE, /* ulClock */ + BSP_UART_COM3_IRQ /* ulIntVector -- base for port */ + }, + { + "/dev/com4", /* sDeviceName */ + SERIAL_NS16550, /* deviceType */ + COM_CONSOLE_FUNCTIONS, /* pDeviceFns */ + NULL, /* deviceProbe */ + NULL, /* pDeviceFlow */ + 16, /* ulMargin */ + 8, /* ulHysteresis */ + (void *) 9600, /* Baud Rate */ /* pDeviceParams */ + COM4_BASE_IO, /* ulCtrlPort1 */ + 0x00000000, /* ulCtrlPort2 */ + COM4_BASE_IO, /* ulDataPort */ + com_get_register, /* getRegister */ + com_set_register, /* setRegister */ + NULL,/* unused */ /* getData */ + NULL,/* unused */ /* setData */ + CLOCK_RATE, /* ulClock */ + BSP_UART_COM4_IRQ /* ulIntVector -- base for port */ + }, +#endif +}; + +#define Legacy_Port_Count \ + (sizeof(Legacy_Ports)/sizeof(console_tbl)) + +void legacy_uart_probe(void) +{ +#if BSP_ENABLE_COM1_COM4 + const char *opt; + /* + * Check the command line to see if com1-com4 are disabled. + */ + opt = bsp_cmdline_arg("--disable-com1-com4"); + if ( opt ) { + printk( "COM1-COM4: disabled\n" ); + } else { + if (Legacy_Port_Count) { + printk("Legacy UART Ports: COM1-COM4\n"); + console_register_devices( Legacy_Ports, Legacy_Port_Count ); + } + } +#endif +} |