diff options
Diffstat (limited to 'bsps/mips/malta/console/conscfg.c')
-rw-r--r-- | bsps/mips/malta/console/conscfg.c | 158 |
1 files changed, 158 insertions, 0 deletions
diff --git a/bsps/mips/malta/console/conscfg.c b/bsps/mips/malta/console/conscfg.c new file mode 100644 index 0000000000..8d84c9321c --- /dev/null +++ b/bsps/mips/malta/console/conscfg.c @@ -0,0 +1,158 @@ +/** + * @file + * + * This file contains the libchip configuration information + * to instantiate the libchip driver for the serial ports. + */ + +/* + * 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 <unistd.h> /* write */ + +#include <bsp.h> +#include <libchip/serial.h> +#include <libchip/ns16550.h> +#include <rtems/pci.h> +#include <bsp/irq.h> + +#if 1 +#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 CLOCK_RATE 368640 +#define CLOCK_RATE (115200 * 16) + +#define COM_IO_BASE_ADDRESS (0xa0000000UL | 0x18000000UL) + +static uint8_t com_get_register(uintptr_t addr, uint8_t i); +static void com_set_register(uintptr_t addr, uint8_t i, uint8_t val); +static uint8_t tty2_get_register(uintptr_t addr, uint8_t i); +static void tty2_set_register(uintptr_t addr, uint8_t i, uint8_t val); + + +uint8_t com_get_register(uintptr_t addr, uint8_t i) +{ + uint8_t val; + volatile uint8_t *ptr; + ptr = (volatile uint8_t *) COM_IO_BASE_ADDRESS; + ptr += addr; + ptr += i; + val = *ptr; + + return val; +} + +void com_set_register(uintptr_t addr, uint8_t i, uint8_t val) +{ + volatile uint8_t *ptr; + + ptr = (volatile uint8_t *) COM_IO_BASE_ADDRESS; + ptr += addr; + ptr += i; + *ptr = val; +} + +uint8_t tty2_get_register(uintptr_t addr, uint8_t i) +{ + uint8_t val; + volatile uint8_t *ptr; + + ptr = (volatile uint8_t *) COM_IO_BASE_ADDRESS; + ptr += addr; + ptr += (i * 8); + val = *ptr; + + return val; +} + +void tty2_set_register(uintptr_t addr, uint8_t i, uint8_t val) +{ + volatile uint8_t *ptr; + + ptr = (volatile uint8_t *) COM_IO_BASE_ADDRESS; + ptr += addr; + ptr += (i * 8); + *ptr = val; +} + +console_tbl Console_Configuration_Ports[] = { + { + "/dev/tty0", /* sDeviceName */ + SERIAL_NS16550, /* deviceType */ + COM_CONSOLE_FUNCTIONS, /* pDeviceFns */ + NULL, /* deviceProbe, assume it is there */ + 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 */ + MALTA_IRQ_TTY0 /* ulIntVector -- base for port */ + }, + { + "/dev/tty1", /* sDeviceName */ + SERIAL_NS16550, /* deviceType */ + COM_CONSOLE_FUNCTIONS, /* pDeviceFns */ + NULL, /* deviceProbe, assume it is there */ + 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 */ + MALTA_IRQ_TTY1 /* ulIntVector -- base for port */ + }, + { + "/dev/tty2", /* sDeviceName */ + SERIAL_NS16550, /* deviceType */ + COM_CONSOLE_FUNCTIONS, /* pDeviceFns */ + NULL, /* deviceProbe, assume it is there */ + NULL, /* pDeviceFlow */ + 16, /* ulMargin */ + 8, /* ulHysteresis */ + (void *) 9600, /* Baud Rate */ /* pDeviceParams */ + 0, /* IGNORED */ /* ulCtrlPort1 */ + 0, /* IGNORED */ /* ulCtrlPort2 */ + 0, /* IGNORED */ /* ulDataPort */ + tty2_get_register, /* getRegister */ + tty2_set_register, /* setRegister */ + NULL,/* unused */ /* getData */ + NULL,/* unused */ /* setData */ + CLOCK_RATE, /* ulClock */ + MALTA_CPU_INT2 /* ulIntVector -- base for port */ + }, +}; + +/* + * Define a variable that contains the number of statically configured + * console devices. + */ +unsigned long Console_Configuration_Count = \ + (sizeof(Console_Configuration_Ports)/sizeof(console_tbl)); |