summaryrefslogtreecommitdiffstats
path: root/bsps/i386/pc386/console/conscfg.c
diff options
context:
space:
mode:
Diffstat (limited to 'bsps/i386/pc386/console/conscfg.c')
-rw-r--r--bsps/i386/pc386/console/conscfg.c198
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
+}