[PATCH 2/8] Move Mongoose-V specific devices into BSP.
Joel Sherrill
joel.sherrill at oarcorp.com
Thu Oct 9 18:39:53 UTC 2014
Putting the duart in libcpu was very optimistic and presumptuous.
It has never been used again on another SoC and is BSP specific.
---
c/src/lib/libbsp/mips/genmongoosev/Makefile.am | 7 +-
c/src/lib/libbsp/mips/genmongoosev/README | 54 +-
.../libbsp/mips/genmongoosev/console/README.mguart | 100 +++
.../lib/libbsp/mips/genmongoosev/console/conscfg.c | 2 +-
.../lib/libbsp/mips/genmongoosev/console/mg5uart.c | 917 +++++++++++++++++++++
.../lib/libbsp/mips/genmongoosev/console/mg5uart.h | 98 +++
.../libbsp/mips/genmongoosev/console/mg5uart_reg.c | 58 ++
c/src/lib/libbsp/mips/genmongoosev/include/bsp.h | 2 +-
.../libbsp/mips/genmongoosev/include/mongoose-v.h | 306 +++++++
.../lib/libbsp/mips/genmongoosev/irq/vectorisrs.c | 2 +-
c/src/lib/libbsp/mips/genmongoosev/preinstall.am | 20 +
.../libbsp/mips/genmongoosev/startup/bspstart.c | 2 +-
.../libbsp/mips/genmongoosev/startup/gdb-support.c | 2 +-
c/src/lib/libcpu/mips/Makefile.am | 21 -
.../lib/libcpu/mips/mongoosev/duart/README.mguart | 101 ---
c/src/lib/libcpu/mips/mongoosev/duart/mg5uart.c | 917 ---------------------
c/src/lib/libcpu/mips/mongoosev/duart/mg5uart.h | 98 ---
.../lib/libcpu/mips/mongoosev/duart/mg5uart_reg.c | 58 --
.../lib/libcpu/mips/mongoosev/include/mongoose-v.h | 306 -------
c/src/lib/libcpu/mips/preinstall.am | 14 -
20 files changed, 1562 insertions(+), 1523 deletions(-)
create mode 100644 c/src/lib/libbsp/mips/genmongoosev/console/README.mguart
create mode 100644 c/src/lib/libbsp/mips/genmongoosev/console/mg5uart.c
create mode 100644 c/src/lib/libbsp/mips/genmongoosev/console/mg5uart.h
create mode 100644 c/src/lib/libbsp/mips/genmongoosev/console/mg5uart_reg.c
create mode 100644 c/src/lib/libbsp/mips/genmongoosev/include/mongoose-v.h
delete mode 100644 c/src/lib/libcpu/mips/mongoosev/duart/README.mguart
delete mode 100644 c/src/lib/libcpu/mips/mongoosev/duart/mg5uart.c
delete mode 100644 c/src/lib/libcpu/mips/mongoosev/duart/mg5uart.h
delete mode 100644 c/src/lib/libcpu/mips/mongoosev/duart/mg5uart_reg.c
delete mode 100644 c/src/lib/libcpu/mips/mongoosev/include/mongoose-v.h
diff --git a/c/src/lib/libbsp/mips/genmongoosev/Makefile.am b/c/src/lib/libbsp/mips/genmongoosev/Makefile.am
index fe21df4..a99fd56 100644
--- a/c/src/lib/libbsp/mips/genmongoosev/Makefile.am
+++ b/c/src/lib/libbsp/mips/genmongoosev/Makefile.am
@@ -16,6 +16,11 @@ include_bsp_HEADERS += include/irq.h
nodist_include_HEADERS = include/bspopts.h
nodist_include_bsp_HEADERS = ../../shared/include/bootcard.h
+nodist_include_bsp_HEADERS += include/lr33000.h
+nodist_include_bsp_HEADERS += include/lr333x0.h
+nodist_include_bsp_HEADERS += include/mongoose-v.h
+nodist_include_bsp_HEADERS += include/r3000.h
+nodist_include_bsp_HEADERS += console/mg5uart.h
DISTCLEANFILES = include/bspopts.h
noinst_PROGRAMS =
@@ -47,6 +52,7 @@ libbsp_a_SOURCES += clock/clockdrv.c
libbsp_a_SOURCES += ../../shared/clockdrv_shell.h
# console
libbsp_a_SOURCES += console/conscfg.c
+libbsp_a_SOURCES += console/mg5uart.c
libbsp_a_SOURCES += ../../shared/console.c
libbsp_a_SOURCES += ../../shared/console_select.c
libbsp_a_SOURCES += ../../shared/console_control.c
@@ -75,7 +81,6 @@ gdbstub_rel_LDFLAGS = $(RTEMS_RELLDFLAGS)
libbsp_a_LIBADD = ../../../libcpu/@RTEMS_CPU@/shared/cache.rel
libbsp_a_LIBADD += ../../../libcpu/@RTEMS_CPU@/shared/interrupts.rel
-libbsp_a_LIBADD += ../../../libcpu/@RTEMS_CPU@/mongoosev/duart.rel
include $(srcdir)/preinstall.am
include $(top_srcdir)/../../../../automake/local.am
diff --git a/c/src/lib/libbsp/mips/genmongoosev/README b/c/src/lib/libbsp/mips/genmongoosev/README
index 97db696..87f57a9 100644
--- a/c/src/lib/libbsp/mips/genmongoosev/README
+++ b/c/src/lib/libbsp/mips/genmongoosev/README
@@ -1,6 +1,56 @@
BSP supporting the on-CPU capabilities of the Synova Mongoose-V.
-This BSP assumes that basic HW initialization is performed by
-PMON.
+The Synova Mongoose-V is a radiation hardened derivative of the
+LSI 33K with on-CPU peripherals.
+
+This BSP assumes that basic HW initialization is performed by PMON.
+
+Status
+======
+Per-task floating point enable/disable is supported for both immediate
+and deferred FPU context swaps.
+
+Interrupt Levels are adapted reasonably well to the MIPS interrupt
+model. Bit 0 of the int level is a global enable/disable, corresponding
+to bit 0 of the processor's SR register. Bits 1 thru 6 are configured
+as masks for the Int0 thru Int5 interrupts. The 2 software interrupt
+bits are always enabled by default. Each task maintains its own
+Interrupt Level setting, reconfiguring the SR register's interrupt bits
+whenever scheduled in. The software ints, though not addressable via
+the various Interrupt Level functions, are maintained on a per-task
+basis, so if software manipulates them directly, things should behave as
+expected. At the time of these udpates, the Interrupt Level was only 8
+bits, and completely supporting the global enable, software ints and the
+hardware ints would require 9 bits. When more than 8 bits are
+available, there is no reason the software interrupts could not be added
+to the Interrupt Level.
+
+While supporting the Int0 thru Int5 bits in this way doesn't seem
+wonderfully useful, it does increase the level of compliance with the
+RTEMS spec.
+
+Interrupt Level 0 corresponds to interrupts globally enabled, software
+ints enabled and Int0 thru Int5 enabled. If values other than 0 are
+supplied, they should be formulated to impose the desired bitmask.
+Interrupt priority is not a strong concept on this bsp, it is provided
+only by the order in which interrupts are checked.
+
+If during the vectoring of an interrupt, others arrive, they will all be
+processed in accordance with their ordering in SR & the peripheral
+register. For example, if while we're vectoring Int4, Int3 and Int5 are
+asserted, Int3 will be serviced before Int5. The peripheral interrupts
+are individually vectored as a consequence of Int5 being asserted,
+however Int5 is not itself vectored. Within the set of peripheral
+interrupts, bit 0 is vectored first, 31 is last.
+
+Interrupts are not nested for MIPS1 or MIPS3 processors, but are
+processed serially as possible. On an unloaded 50 task RTEMS program,
+runnning on a 12mhz MIPS1 processor, worst-case latencies of 100us were
+observed, the average being down at 60us or below.
+
+
+These features are principally a consequence of fixes and tweaks to the
+MIPS1 and MIPS3 processor support, and should be equally effective on
+both levels of MIPS processors for any of their bsp's.
Address Map
===========
diff --git a/c/src/lib/libbsp/mips/genmongoosev/console/README.mguart b/c/src/lib/libbsp/mips/genmongoosev/console/README.mguart
new file mode 100644
index 0000000..7c6a290
--- /dev/null
+++ b/c/src/lib/libbsp/mips/genmongoosev/console/README.mguart
@@ -0,0 +1,100 @@
+Configuration Table Use
+=======================
+
+sDeviceName
+
+ The name of this device.
+
+deviceType
+
+ This field must be SERIAL_MG5UART.
+
+pDeviceFns
+
+ The device interface control table. This may be:
+ + mg5uart_fns for interrupt driven IO
+ + mg5uart_fns_polled for polled IO
+
+deviceProbe
+
+ This is the address of the routine which probes to see if the device
+ is present.
+
+pDeviceFlow
+
+ This field is ignored as hardware flow control is not currently supported.
+
+ulMargin
+
+ This is currently unused.
+
+ulHysteresis
+
+ This is currently unused.
+
+pDeviceParams
+
+ This is set to the default settings.
+
+ulCtrlPort1
+
+ This field is the address of the command register shared by both ports.
+
+ulCtrlPort2
+
+ This field is the address of the port being used.
+
+ulDataPort
+
+ This field is set to MG5UART_PORTA or MG5UART_PORTB.
+
+getRegister
+setRegister
+
+ These do NOT follow standard conventions and are ignored.
+ The register address routines are hard-coded as this is
+ an on-CPU part and assumed to provide a 32-bit wide interface.
+
+getData
+
+ This is address of the RX buffer register.
+
+setData
+
+ This is address of the TX buffer register.
+
+ulClock
+
+ baudRate Clock
+
+ulIntVector
+
+ This is the interrupt vector number associated with this chip.
+
+Example:
+
+#if (CONSOLE_USE_INTERRUPTS)
+#define MG5UART_FUNCTIONS &mg5uart_fns
+#else
+#define MG5UART_FUNCTIONS &mg5uart_fns_polled
+#endif
+
+{
+ "/dev/com0", /* sDeviceName */
+ SERIAL_MG5UART, /* deviceType */
+ MG5UART_FUNCTIONS, /* pDeviceFns */
+ NULL, /* deviceProbe, assume it is there */
+ NULL, /* pDeviceFlow */
+ 16, /* ulMargin */
+ 8, /* ulHysteresis */
+ (void *) NULL, /* NULL */ /* pDeviceParams */
+ MONGOOSEV_PERIPHERAL_COMMAND_REGISTER, /* ulCtrlPort1 */
+ MONGOOSEV_UART0_BASE, /* ulCtrlPort2 */
+ MG5UART_UART0, /* ulDataPort */
+ mg5uart_get_register, /* getRegister */
+ mg5uart_set_register, /* setRegister */
+ NULL, /* unused */ /* getData */
+ NULL, /* unused */ /* setData */
+ 12000000, /* ulClock */
+ MONGOOSEV_IRQ_UART0_RX_FRAME_ERROR /* ulIntVector -- base for port */
+}
diff --git a/c/src/lib/libbsp/mips/genmongoosev/console/conscfg.c b/c/src/lib/libbsp/mips/genmongoosev/console/conscfg.c
index 61ac56e..87df736 100644
--- a/c/src/lib/libbsp/mips/genmongoosev/console/conscfg.c
+++ b/c/src/lib/libbsp/mips/genmongoosev/console/conscfg.c
@@ -21,7 +21,7 @@
#include <bsp/irq.h>
#include <libchip/serial.h>
-#include <libchip/mg5uart.h>
+#include <bsp/mg5uart.h>
/* #define CONSOLE_USE_INTERRUPTS */
diff --git a/c/src/lib/libbsp/mips/genmongoosev/console/mg5uart.c b/c/src/lib/libbsp/mips/genmongoosev/console/mg5uart.c
new file mode 100644
index 0000000..8c4177a
--- /dev/null
+++ b/c/src/lib/libbsp/mips/genmongoosev/console/mg5uart.c
@@ -0,0 +1,917 @@
+/**
+ * @file
+ *
+ * This file contains the termios TTY driver for the UART found
+ * on the Synova Mongoose-V.
+ */
+
+/*
+ * 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/libio.h>
+#include <rtems/score/sysstate.h>
+#include <stdlib.h>
+
+#include <libchip/serial.h>
+#include <libchip/sersupp.h>
+#include <bsp/mg5uart.h>
+#include <bsp/mongoose-v.h>
+
+#include <bsp/irq.h>
+#include <bsp.h>
+
+/*
+ * Indices of registers
+ */
+
+/*
+ * Per chip context control
+ */
+
+typedef struct _mg5uart_context
+{
+ int mate;
+} mg5uart_context;
+
+/*
+ * Define MG5UART_STATIC to nothing while debugging so the entry points
+ * will show up in the symbol table.
+ */
+
+#define MG5UART_STATIC
+
+/* #define MG5UART_STATIC static */
+
+
+
+#define MG5UART_SETREG( _base, _register, _value ) \
+ MONGOOSEV_WRITE_REGISTER( _base, _register, _value )
+
+#define MG5UART_GETREG( _base, _register ) \
+ MONGOOSEV_READ_REGISTER( _base, _register )
+
+
+/*
+ * Console Device Driver Support Functions
+ */
+
+MG5UART_STATIC int mg5uart_baud_rate(
+ int minor,
+ uint32_t baud,
+ uint32_t *code
+);
+
+MG5UART_STATIC void mg5uart_enable_interrupts(
+ int minor,
+ int mask
+);
+
+/*
+ * mg5uart_isr_XXX
+ *
+ * This is the single interrupt entry point which parcels interrupts
+ * out to the handlers for specific sources and makes sure that the
+ * shared handler gets the right arguments.
+ *
+ * NOTE: Yes .. this is ugly but it provides 5 interrupt source
+ * wrappers which are nearly functionally identical.
+ */
+
+
+extern void mips_default_isr(int vector);
+
+#define __ISR(_TYPE, _OFFSET) \
+ MG5UART_STATIC void mg5uart_process_isr_ ## _TYPE ( \
+ int minor \
+ ); \
+ \
+ MG5UART_STATIC rtems_isr mg5uart_isr_ ## _TYPE ( \
+ void *arg \
+ ) \
+ { \
+ rtems_vector_number vector = (rtems_vector_number) arg; \
+ int minor; \
+ \
+ for(minor=0 ; minor<Console_Port_Count ; minor++) { \
+ if( Console_Port_Tbl[minor]->deviceType == SERIAL_MG5UART && \
+ vector == Console_Port_Tbl[minor]->ulIntVector + _OFFSET ) { \
+ mg5uart_process_isr_ ## _TYPE (minor); \
+ return; \
+ } \
+ } \
+ mips_default_isr( vector ); \
+ }
+
+__ISR(rx_frame_error, MG5UART_IRQ_RX_FRAME_ERROR)
+__ISR(rx_overrun_error, MG5UART_IRQ_RX_OVERRUN_ERROR)
+__ISR(tx_empty, MG5UART_IRQ_TX_EMPTY)
+__ISR(tx_ready, MG5UART_IRQ_TX_READY)
+__ISR(rx_ready, MG5UART_IRQ_RX_READY)
+
+/*
+ * mg5uart_set_attributes
+ *
+ * This function sets the UART channel to reflect the requested termios
+ * port settings.
+ */
+
+MG5UART_STATIC int mg5uart_set_attributes(
+ int minor,
+ const struct termios *t
+)
+{
+ uint32_t pMG5UART_port;
+ uint32_t pMG5UART;
+ uint32_t cmd, cmdSave;
+ uint32_t baudcmd;
+ uint32_t shift;
+ rtems_interrupt_level Irql;
+
+ pMG5UART = Console_Port_Tbl[minor]->ulCtrlPort1;
+ pMG5UART_port = Console_Port_Tbl[minor]->ulCtrlPort2;
+
+ /*
+ * Set the baud rate
+ */
+
+ if (mg5uart_baud_rate( minor, t->c_cflag, &baudcmd ) == -1)
+ return -1;
+
+ /*
+ * Base settings
+ */
+
+ /*
+ * Base settings
+ */
+
+ cmd = MONGOOSEV_UART_CMD_RX_ENABLE | MONGOOSEV_UART_CMD_TX_ENABLE;
+
+ /*
+ * Parity
+ */
+
+ if (t->c_cflag & PARENB) {
+ cmd |= MONGOOSEV_UART_CMD_PARITY_ENABLE;
+ if (t->c_cflag & PARODD)
+ cmd |= MONGOOSEV_UART_CMD_PARITY_ODD;
+ else
+ cmd |= MONGOOSEV_UART_CMD_PARITY_EVEN;
+ } else {
+ cmd |= MONGOOSEV_UART_CMD_PARITY_DISABLE;
+ }
+
+ /*
+ * Character Size
+ */
+
+ if (t->c_cflag & CSIZE) {
+ switch (t->c_cflag & CSIZE) {
+ case CS5:
+ case CS6:
+ case CS7:
+ return -1;
+ break;
+ case CS8:
+ /* Mongoose-V only supports CS8 */
+ break;
+
+ }
+ } /* else default to CS8 */
+
+ /*
+ * Stop Bits
+ */
+
+#if 0
+ if (t->c_cflag & CSTOPB) {
+ /* 2 stop bits not supported by Mongoose-V uart */
+ return -1;
+ }
+#endif
+
+ /*
+ * XXX what about CTS/RTS
+ */
+
+ /* XXX */
+
+ /*
+ * Now write the registers
+ */
+
+ if ( Console_Port_Tbl[minor]->ulDataPort == MG5UART_UART0 )
+ shift = MONGOOSEV_UART0_CMD_SHIFT;
+ else
+ shift = MONGOOSEV_UART1_CMD_SHIFT;
+
+
+
+ rtems_interrupt_disable(Irql);
+
+ cmdSave = MG5UART_GETREG( pMG5UART, MG5UART_COMMAND_REGISTER );
+
+ MG5UART_SETREG( pMG5UART,
+ MG5UART_COMMAND_REGISTER,
+ (cmdSave & ~(MONGOOSEV_UART_ALL_STATUS_BITS << shift)) | (cmd << shift) );
+
+ MG5UART_SETREG( pMG5UART_port, MG5UART_BAUD_RATE, baudcmd );
+
+ rtems_interrupt_enable(Irql);
+ return 0;
+}
+
+/*
+ * mg5uart_initialize_context
+ *
+ * This function sets the default values of the per port context structure.
+ */
+
+MG5UART_STATIC void mg5uart_initialize_context(
+ int minor,
+ mg5uart_context *pmg5uartContext
+)
+{
+ int port;
+ unsigned int pMG5UART;
+ unsigned int pMG5UART_port;
+
+ pMG5UART = Console_Port_Tbl[minor]->ulCtrlPort1;
+ pMG5UART_port = Console_Port_Tbl[minor]->ulCtrlPort2;
+
+ pmg5uartContext->mate = -1;
+
+ for (port=0 ; port<Console_Port_Count ; port++ ) {
+ if ( Console_Port_Tbl[port]->ulCtrlPort1 == pMG5UART &&
+ Console_Port_Tbl[port]->ulCtrlPort2 != pMG5UART_port ) {
+ pmg5uartContext->mate = port;
+ break;
+ }
+ }
+
+}
+
+/*
+ * mg5uart_init
+ *
+ * This function initializes the DUART to a quiecsent state.
+ */
+
+MG5UART_STATIC void mg5uart_init(int minor)
+{
+ uint32_t pMG5UART_port;
+ uint32_t pMG5UART;
+ uint32_t cmdSave;
+ uint32_t shift;
+
+ mg5uart_context *pmg5uartContext;
+
+ pmg5uartContext = (mg5uart_context *) malloc(sizeof(mg5uart_context));
+
+ Console_Port_Data[minor].pDeviceContext = (void *)pmg5uartContext;
+
+ mg5uart_initialize_context( minor, pmg5uartContext );
+
+ pMG5UART = Console_Port_Tbl[minor]->ulCtrlPort1;
+ pMG5UART_port = Console_Port_Tbl[minor]->ulCtrlPort2;
+
+ if ( Console_Port_Tbl[minor]->ulDataPort == MG5UART_UART0 )
+ shift = MONGOOSEV_UART0_CMD_SHIFT;
+ else
+ shift = MONGOOSEV_UART1_CMD_SHIFT;
+
+ /*
+ * Disable the uart and leave this port disabled.
+ */
+
+ cmdSave = MG5UART_GETREG(pMG5UART, MG5UART_COMMAND_REGISTER) & ~(MONGOOSEV_UART_ALL_STATUS_BITS << shift);
+
+ MG5UART_SETREG( pMG5UART, MG5UART_COMMAND_REGISTER, cmdSave );
+
+ /*
+ * Disable interrupts on RX and TX for this port
+ */
+ mg5uart_enable_interrupts( minor, MG5UART_DISABLE_ALL );
+}
+
+/*
+ * mg5uart_open
+ *
+ * This function opens a port for communication.
+ *
+ * Default state is 9600 baud, 8 bits, No parity, and 1 stop bit.
+ */
+
+MG5UART_STATIC int mg5uart_open(
+ int major,
+ int minor,
+ void *arg
+)
+{
+ uint32_t pMG5UART;
+ uint32_t pMG5UART_port;
+ uint32_t vector;
+ uint32_t cmd, cmdSave;
+ uint32_t baudcmd;
+ uint32_t shift;
+
+ rtems_interrupt_level Irql;
+
+ pMG5UART = Console_Port_Tbl[minor]->ulCtrlPort1;
+ pMG5UART_port = Console_Port_Tbl[minor]->ulCtrlPort2;
+ vector = Console_Port_Tbl[minor]->ulIntVector;
+
+ if ( Console_Port_Tbl[minor]->ulDataPort == MG5UART_UART0 )
+ shift = MONGOOSEV_UART0_CMD_SHIFT;
+ else
+ shift = MONGOOSEV_UART1_CMD_SHIFT;
+
+
+ /* XXX default baud rate could be from configuration table */
+
+ (void) mg5uart_baud_rate( minor, B19200, &baudcmd );
+
+ /*
+ * Set the DUART channel to a default useable state
+ * B19200, 8Nx since there is no stop bit control.
+ */
+
+ cmd = MONGOOSEV_UART_CMD_TX_ENABLE | MONGOOSEV_UART_CMD_RX_ENABLE;
+
+ rtems_interrupt_disable(Irql);
+
+ cmdSave = MG5UART_GETREG( pMG5UART, MG5UART_COMMAND_REGISTER );
+
+ MG5UART_SETREG( pMG5UART_port, MG5UART_BAUD_RATE, baudcmd );
+
+ MG5UART_SETREG( pMG5UART,
+ MG5UART_COMMAND_REGISTER,
+ cmd = (cmdSave & ~(MONGOOSEV_UART_ALL_STATUS_BITS << shift)) | (cmd << shift) );
+
+ rtems_interrupt_enable(Irql);
+
+ return RTEMS_SUCCESSFUL;
+}
+
+/*
+ * mg5uart_close
+ *
+ * This function shuts down the requested port.
+ */
+
+MG5UART_STATIC int mg5uart_close(
+ int major,
+ int minor,
+ void *arg
+)
+{
+ uint32_t pMG5UART;
+ uint32_t pMG5UART_port;
+ uint32_t cmd, cmdSave;
+ uint32_t shift;
+ rtems_interrupt_level Irql;
+
+ pMG5UART = Console_Port_Tbl[minor]->ulCtrlPort1;
+ pMG5UART_port = Console_Port_Tbl[minor]->ulCtrlPort2;
+
+ /*
+ * Disable interrupts from this channel and then disable it totally.
+ */
+
+ /* XXX interrupts */
+
+ cmd = MONGOOSEV_UART_CMD_TX_DISABLE | MONGOOSEV_UART_CMD_RX_DISABLE;
+
+ if ( Console_Port_Tbl[minor]->ulDataPort == MG5UART_UART0 )
+ shift = MONGOOSEV_UART0_CMD_SHIFT;
+ else
+ shift = MONGOOSEV_UART1_CMD_SHIFT;
+
+
+ rtems_interrupt_disable(Irql);
+ cmdSave = MG5UART_GETREG( pMG5UART, MG5UART_COMMAND_REGISTER );
+
+ MG5UART_SETREG( pMG5UART,
+ MG5UART_COMMAND_REGISTER,
+ (cmdSave & ~(MONGOOSEV_UART_ALL_STATUS_BITS << shift)) | (cmd << shift) );
+ rtems_interrupt_enable(Irql);
+
+ return(RTEMS_SUCCESSFUL);
+}
+
+
+
+
+/*
+ * mg5uart_write_polled
+ *
+ * This routine polls out the requested character.
+ */
+
+MG5UART_STATIC void mg5uart_write_polled(
+ int minor,
+ char c
+)
+{
+ uint32_t pMG5UART;
+ uint32_t pMG5UART_port;
+ uint32_t status;
+ int shift;
+ int timeout;
+
+ pMG5UART = Console_Port_Tbl[minor]->ulCtrlPort1;
+ pMG5UART_port = Console_Port_Tbl[minor]->ulCtrlPort2;
+
+ if ( Console_Port_Tbl[minor]->ulDataPort == MG5UART_UART0 )
+ shift = MONGOOSEV_UART0_IRQ_SHIFT;
+ else
+ shift = MONGOOSEV_UART1_IRQ_SHIFT;
+
+ /*
+ * wait for transmitter holding register to be empty
+ */
+ timeout = 2000;
+
+ while( --timeout )
+ {
+ status = MG5UART_GETREG(pMG5UART, MG5UART_STATUS_REGISTER) >> shift;
+
+ /*
+ if ( (status & (MONGOOSEV_UART_TX_READY | MONGOOSEV_UART_TX_EMPTY)) ==
+ (MONGOOSEV_UART_TX_READY | MONGOOSEV_UART_TX_EMPTY) )
+ break;
+ */
+
+ if( (status & (MONGOOSEV_UART_TX_READY | MONGOOSEV_UART_TX_EMPTY)) )
+ break;
+
+ /*
+ * Yield while we wait
+ */
+
+#if 0
+ if(_System_state_Is_up(_System_state_Get()))
+ {
+ rtems_task_wake_after(RTEMS_YIELD_PROCESSOR);
+ }
+#endif
+ }
+
+ /*
+ * transmit character
+ */
+
+ MG5UART_SETREG(pMG5UART_port, MG5UART_TX_BUFFER, c);
+}
+
+MG5UART_STATIC void mg5uart_process_isr_rx_error(
+ int minor,
+ uint32_t mask
+)
+{
+ uint32_t pMG5UART;
+ int shift;
+
+ pMG5UART = Console_Port_Tbl[minor]->ulCtrlPort1;
+
+ if ( Console_Port_Tbl[minor]->ulDataPort == MG5UART_UART0 )
+ shift = MONGOOSEV_UART0_IRQ_SHIFT;
+ else
+ shift = MONGOOSEV_UART1_IRQ_SHIFT;
+
+ /* now clear the error */
+
+ MG5UART_SETREG(
+ pMG5UART,
+ MG5UART_STATUS_REGISTER,
+ mask << shift );
+}
+
+
+MG5UART_STATIC void mg5uart_process_isr_rx_frame_error(
+ int minor
+)
+{
+ mg5uart_process_isr_rx_error( minor, MONGOOSEV_UART_RX_FRAME_ERROR );
+}
+
+MG5UART_STATIC void mg5uart_process_isr_rx_overrun_error(
+ int minor
+)
+{
+ mg5uart_process_isr_rx_error( minor, MONGOOSEV_UART_RX_OVERRUN_ERROR );
+}
+
+
+
+
+
+
+
+
+MG5UART_STATIC void mg5uart_process_tx_isr(
+ int minor,
+ uint32_t source
+)
+{
+ uint32_t pMG5UART;
+ int shift;
+
+ pMG5UART = Console_Port_Tbl[minor]->ulCtrlPort1;
+
+ mg5uart_enable_interrupts(minor, MG5UART_ENABLE_ALL_EXCEPT_TX);
+
+ if ( Console_Port_Tbl[minor]->ulDataPort == MG5UART_UART0 )
+ shift = MONGOOSEV_UART0_IRQ_SHIFT;
+ else
+ shift = MONGOOSEV_UART1_IRQ_SHIFT;
+
+ MG5UART_SETREG(
+ pMG5UART,
+ MG5UART_STATUS_REGISTER,
+ source << shift );
+
+ if( rtems_termios_dequeue_characters( Console_Port_Data[minor].termios_data, 1) )
+ {
+ mg5uart_enable_interrupts(minor, MG5UART_ENABLE_ALL);
+ return;
+ }
+
+ /*
+ * There are no more characters to transmit. The tx interrupts are be cleared
+ * by writing data to the uart, so just disable the tx interrupt sources.
+ */
+
+ Console_Port_Data[minor].bActive = FALSE;
+
+ /* mg5uart_enable_interrupts(minor, MG5UART_ENABLE_ALL_EXCEPT_TX); */
+}
+
+
+
+MG5UART_STATIC void mg5uart_process_isr_tx_empty(
+ int minor
+)
+{
+ /* mg5uart_process_tx_isr( minor, MONGOOSEV_UART_TX_EMPTY ); */
+}
+
+MG5UART_STATIC void mg5uart_process_isr_tx_ready(
+ int minor
+)
+{
+ mg5uart_process_tx_isr( minor, MONGOOSEV_UART_TX_READY );
+}
+
+
+
+
+
+MG5UART_STATIC void mg5uart_process_isr_rx_ready(
+ int minor
+)
+{
+ uint32_t pMG5UART_port;
+ char c;
+
+ pMG5UART_port = Console_Port_Tbl[minor]->ulCtrlPort2;
+
+ /* reading the RX buffer automatically resets the interrupt flag */
+
+ c = (char) MG5UART_GETREG(pMG5UART_port, MG5UART_RX_BUFFER);
+
+ rtems_termios_enqueue_raw_characters(
+ Console_Port_Data[minor].termios_data,
+ &c, 1 );
+}
+
+static rtems_irq_connect_data mg5uart_rx_frame_error_cd = { \
+ 0, /* filled in at initialization */
+ mg5uart_isr_rx_frame_error, /* filled in at initialization */
+ NULL, /* (void *) minor */
+ NULL,
+ NULL,
+ NULL
+};
+
+static rtems_irq_connect_data mg5uart_rx_overrun_error_cd = { \
+ 0, /* filled in at initialization */
+ mg5uart_isr_rx_overrun_error, /* filled in at initialization */
+ NULL, /* (void *) minor */
+ NULL,
+ NULL,
+ NULL
+};
+
+static rtems_irq_connect_data mg5uart_tx_empty_cd = { \
+ 0, /* filled in at initialization */
+ mg5uart_isr_tx_empty, /* filled in at initialization */
+ NULL, /* (void *) minor */
+ NULL,
+ NULL,
+ NULL
+};
+
+static rtems_irq_connect_data mg5uart_tx_ready_cd = { \
+ 0, /* filled in at initialization */
+ mg5uart_isr_tx_ready, /* filled in at initialization */
+ NULL, /* (void *) minor */
+ NULL,
+ NULL,
+ NULL
+};
+
+static rtems_irq_connect_data mg5uart_rx_ready_cd = { \
+ 0, /* filled in at initialization */
+ mg5uart_isr_rx_ready, /* filled in at initialization */
+ NULL, /* (void *) minor */
+ NULL,
+ NULL,
+ NULL
+};
+
+
+/*
+ * mg5uart_initialize_interrupts
+ *
+ * This routine initializes the console's receive and transmit
+ * ring buffers and loads the appropriate vectors to handle the interrupts.
+ */
+
+MG5UART_STATIC void mg5uart_initialize_interrupts(int minor)
+{
+ unsigned long v;
+ mg5uart_init(minor);
+
+ Console_Port_Data[minor].bActive = FALSE;
+ v = Console_Port_Tbl[minor]->ulIntVector;
+
+ mg5uart_rx_frame_error_cd.name = v + MG5UART_IRQ_RX_FRAME_ERROR;
+ mg5uart_rx_overrun_error_cd.name = v + MG5UART_IRQ_RX_OVERRUN_ERROR;
+ mg5uart_tx_empty_cd.name = v + MG5UART_IRQ_TX_EMPTY;
+ mg5uart_tx_ready_cd.name = v + MG5UART_IRQ_TX_READY;
+ mg5uart_rx_ready_cd.name = v + MG5UART_IRQ_RX_READY;
+
+ mg5uart_rx_frame_error_cd.handle = (void *)mg5uart_rx_frame_error_cd.name;
+ mg5uart_rx_overrun_error_cd.handle = (void *)mg5uart_rx_overrun_error_cd.name;
+ mg5uart_tx_empty_cd.handle = (void *)mg5uart_tx_empty_cd.name;
+ mg5uart_tx_ready_cd.handle = (void *)mg5uart_tx_ready_cd.name;
+ mg5uart_rx_ready_cd.handle = (void *)mg5uart_rx_ready_cd.name;
+
+
+ BSP_install_rtems_irq_handler( &mg5uart_rx_frame_error_cd );
+ BSP_install_rtems_irq_handler( &mg5uart_rx_overrun_error_cd );
+ BSP_install_rtems_irq_handler( &mg5uart_tx_empty_cd );
+ BSP_install_rtems_irq_handler( &mg5uart_tx_ready_cd );
+ BSP_install_rtems_irq_handler( &mg5uart_rx_ready_cd );
+
+ mg5uart_enable_interrupts(minor, MG5UART_ENABLE_ALL_EXCEPT_TX);
+}
+
+/*
+ * mg5uart_write_support_int
+ *
+ * Console Termios output entry point when using interrupt driven output.
+ */
+
+MG5UART_STATIC int mg5uart_write_support_int(
+ int minor,
+ const char *buf,
+ size_t len
+)
+{
+ uint32_t pMG5UART_port;
+
+ pMG5UART_port = Console_Port_Tbl[minor]->ulCtrlPort2;
+
+ /*
+ * We are using interrupt driven output and termios only sends us
+ * one character at a time.
+ */
+
+ if ( !len )
+ return 0;
+
+ /*
+ * Put the character out and enable interrupts if necessary.
+ */
+
+ MG5UART_SETREG(pMG5UART_port, MG5UART_TX_BUFFER, *buf);
+
+ if( Console_Port_Data[minor].bActive == FALSE )
+ {
+ Console_Port_Data[minor].bActive = TRUE;
+ mg5uart_enable_interrupts(minor, MG5UART_ENABLE_ALL);
+ }
+
+ return 1;
+}
+
+
+
+
+/*
+ * mg5uart_write_support_polled
+ *
+ * Console Termios output entry point when using polled output.
+ *
+ */
+
+MG5UART_STATIC ssize_t mg5uart_write_support_polled(
+ int minor,
+ const char *buf,
+ size_t len
+)
+{
+ int nwrite = 0;
+
+ /*
+ * poll each byte in the string out of the port.
+ */
+ while (nwrite < len)
+ {
+ mg5uart_write_polled(minor, *buf++);
+ nwrite++;
+ }
+
+ /*
+ * return the number of bytes written.
+ */
+ return nwrite;
+}
+
+/*
+ * mg5uart_inbyte_nonblocking_polled
+ *
+ * Console Termios polling input entry point.
+ */
+
+MG5UART_STATIC int mg5uart_inbyte_nonblocking_polled(
+ int minor
+)
+{
+ uint32_t pMG5UART;
+ uint32_t pMG5UART_port;
+ uint32_t status;
+ uint32_t tmp,shift;
+
+ pMG5UART = Console_Port_Tbl[minor]->ulCtrlPort1;
+ pMG5UART_port = Console_Port_Tbl[minor]->ulCtrlPort2;
+
+ if ( Console_Port_Tbl[minor]->ulDataPort == MG5UART_UART0 )
+ shift = MONGOOSEV_UART0_IRQ_SHIFT;
+ else
+ shift = MONGOOSEV_UART1_IRQ_SHIFT;
+
+ /* reset overrrun or framing errors */
+ status = MG5UART_GETREG(pMG5UART, MG5UART_STATUS_REGISTER) >> shift;
+
+ if( (tmp = (status & 0x3)) )
+ {
+ MG5UART_SETREG(pMG5UART, MG5UART_STATUS_REGISTER, (tmp << shift) );
+ status = MG5UART_GETREG(pMG5UART, MG5UART_STATUS_REGISTER) >> shift;
+ }
+
+ if ( status & MONGOOSEV_UART_RX_READY )
+ {
+ return (int) MG5UART_GETREG(pMG5UART_port, MG5UART_RX_BUFFER);
+ }
+ else
+ {
+ return -1;
+ }
+}
+
+/*
+ * mg5uart_baud_rate
+ */
+
+MG5UART_STATIC int mg5uart_baud_rate(
+ int minor,
+ uint32_t baud,
+ uint32_t *code
+)
+{
+ uint32_t clock;
+ uint32_t tmp_code;
+ uint32_t baud_requested;
+
+ baud_requested = baud & CBAUD;
+ if (!baud_requested)
+ baud_requested = B9600; /* default to 9600 baud */
+
+ baud_requested = rtems_termios_baud_to_number( baud_requested );
+
+ clock = (uint32_t) Console_Port_Tbl[minor]->ulClock;
+ if (!clock)
+ rtems_fatal_error_occurred(RTEMS_INVALID_NUMBER);
+
+ /*
+ * Formula is Code = round(ClockFrequency / Baud - 1).
+ *
+ * Since this is integer math, we will divide by twice the baud and
+ * check the remaining odd bit.
+ */
+
+ tmp_code = (clock / baud_requested) - 1;
+
+ /*
+ * From section 12.7, "Keep C>100 for best receiver operation."
+ * That is 100 cycles which is not a lot of instructions. It is
+ * reasonable to think that the Mongoose-V could not keep
+ * up with C < 100.
+ */
+
+ if ( tmp_code < 100 )
+ return RTEMS_INVALID_NUMBER;
+
+ /*
+ * upper word is receiver baud and lower word is transmitter baud
+ */
+
+ *code = (tmp_code << 16) | tmp_code;
+
+ return 0;
+}
+
+
+
+
+/*
+ * mg5uart_enable_interrupts
+ *
+ * This function enables specific interrupt sources on the DUART.
+ */
+
+MG5UART_STATIC void mg5uart_enable_interrupts(
+ int minor,
+ int mask
+)
+{
+ uint32_t pMG5UART;
+ uint32_t maskSave;
+ uint32_t shift;
+ rtems_interrupt_level Irql;
+
+ pMG5UART = Console_Port_Tbl[minor]->ulCtrlPort1;
+
+ /*
+ * Enable interrupts on RX and TX -- not break
+ */
+
+ if ( Console_Port_Tbl[minor]->ulDataPort == MG5UART_UART0 )
+ shift = MONGOOSEV_UART0_IRQ_SHIFT;
+ else
+ shift = MONGOOSEV_UART1_IRQ_SHIFT;
+
+
+ rtems_interrupt_disable(Irql);
+
+ maskSave = MG5UART_GETREG( pMG5UART, MG5UART_INTERRUPT_MASK_REGISTER );
+
+ MG5UART_SETREG(
+ pMG5UART,
+ MG5UART_INTERRUPT_MASK_REGISTER,
+ (maskSave & ~(MONGOOSEV_UART_ALL_STATUS_BITS << shift)) | (mask << shift) );
+
+ rtems_interrupt_enable(Irql);
+}
+
+
+
+/*
+ * Flow control is only supported when using interrupts
+ */
+
+const console_fns mg5uart_fns =
+{
+ libchip_serial_default_probe, /* deviceProbe */
+ mg5uart_open, /* deviceFirstOpen */
+ NULL, /* deviceLastClose */
+ NULL, /* deviceRead */
+ mg5uart_write_support_int, /* deviceWrite */
+ mg5uart_initialize_interrupts, /* deviceInitialize */
+ mg5uart_write_polled, /* deviceWritePolled */
+ mg5uart_set_attributes, /* deviceSetAttributes */
+ TRUE /* deviceOutputUsesInterrupts */
+};
+
+const console_fns mg5uart_fns_polled =
+{
+ libchip_serial_default_probe, /* deviceProbe */
+ mg5uart_open, /* deviceFirstOpen */
+ mg5uart_close, /* deviceLastClose */
+ mg5uart_inbyte_nonblocking_polled, /* deviceRead */
+ mg5uart_write_support_polled, /* deviceWrite */
+ mg5uart_init, /* deviceInitialize */
+ mg5uart_write_polled, /* deviceWritePolled */
+ mg5uart_set_attributes, /* deviceSetAttributes */
+ FALSE, /* deviceOutputUsesInterrupts */
+};
diff --git a/c/src/lib/libbsp/mips/genmongoosev/console/mg5uart.h b/c/src/lib/libbsp/mips/genmongoosev/console/mg5uart.h
new file mode 100644
index 0000000..fa7bed6
--- /dev/null
+++ b/c/src/lib/libbsp/mips/genmongoosev/console/mg5uart.h
@@ -0,0 +1,98 @@
+/*
+ *
+ * COPYRIGHT (c) 1989-1999.
+ * 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.
+ */
+
+#ifndef _MG5UART_H_
+#define _MG5UART_H_
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*
+ * This is the ASCII for "MG5U" which should be unique enough to
+ * distinguish this type of serial device from others.
+ */
+
+#define SERIAL_MG5UART 0x474D5535
+
+#define MG5UART_UART0 0
+#define MG5UART_UART1 1
+
+/*
+ * These are just used in the interface between this driver and
+ * the read/write register routines when accessing the first
+ * control port. They are indices of registers from the bases.
+ */
+
+/* shared registers from peripheral base (i.e. from ulCtrlPort1) */
+/*
+#define MG5UART_COMMAND_REGISTER 0
+#define MG5UART_STATUS_REGISTER 1
+#define MG5UART_INTERRUPT_CAUSE_REGISTER 2
+#define MG5UART_INTERRUPT_MASK_REGISTER 3
+*/
+
+#define MG5UART_COMMAND_REGISTER 0
+#define MG5UART_STATUS_REGISTER 0x04
+#define MG5UART_INTERRUPT_CAUSE_REGISTER 0x08
+#define MG5UART_INTERRUPT_MASK_REGISTER 0x0C
+
+/* port specific registers from uart base (i.e. from ulCtrlPort2) */
+#define MG5UART_RX_BUFFER 0
+#define MG5UART_TX_BUFFER 4
+#define MG5UART_BAUD_RATE 8
+
+/*
+ * Interrupt mask values
+ */
+
+#define MG5UART_ENABLE_ALL_EXCEPT_TX MONGOOSEV_UART_ALL_RX_STATUS_BITS
+
+/* all rx ints on, but only tx ready. no need to also int on tx empty */
+#define MG5UART_ENABLE_ALL (MONGOOSEV_UART_ALL_STATUS_BITS & ~MONGOOSEV_UART_TX_EMPTY)
+
+#define MG5UART_DISABLE_ALL 0x0000
+
+/*
+ * Assume vectors are sequential.
+ */
+
+#define MG5UART_IRQ_RX_FRAME_ERROR 0
+#define MG5UART_IRQ_RX_OVERRUN_ERROR 1
+#define MG5UART_IRQ_TX_EMPTY 2
+#define MG5UART_IRQ_TX_READY 3
+#define MG5UART_IRQ_RX_READY 4
+/*
+ * Driver function table
+ */
+
+extern const console_fns mg5uart_fns;
+extern const console_fns mg5uart_fns_polled;
+
+/*
+ * Default register access routines
+ */
+
+uint32_t mg5uart_get_register( /* registers are on 32-bit boundaries */
+ uint32_t ulCtrlPort, /* and accessed as word */
+ uint32_t ucRegNum
+);
+
+void mg5uart_set_register(
+ uint32_t ulCtrlPort,
+ uint32_t ucRegNum,
+ uint32_t ucData
+);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _MG5UART_H_ */
diff --git a/c/src/lib/libbsp/mips/genmongoosev/console/mg5uart_reg.c b/c/src/lib/libbsp/mips/genmongoosev/console/mg5uart_reg.c
new file mode 100644
index 0000000..134695f
--- /dev/null
+++ b/c/src/lib/libbsp/mips/genmongoosev/console/mg5uart_reg.c
@@ -0,0 +1,58 @@
+/*
+ * This file contains a typical set of register access routines which may be
+ * used with the mg5uart chip if accesses to the chip are as follows:
+ *
+ * + registers are accessed as uint32_t 's
+ * + registers are only u32-aligned (no address gaps)
+ *
+ * COPYRIGHT (c) 1989-2001.
+ * 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>
+
+#ifndef _MG5UART_MULTIPLIER
+#define _MG5UART_MULTIPLIER 1
+#define _MG5UART_NAME(_X) _X
+#define _MG5UART_TYPE uint32_t
+#endif
+
+#define CALCULATE_REGISTER_ADDRESS( _base, _reg ) \
+ (_MG5UART_TYPE *)((_base) + ((_reg) * _MG5UART_MULTIPLIER ))
+
+/*
+ * MG5UART Get Register Routine
+ */
+
+uint8_t _MG5UART_NAME(mg5uart_get_register)(
+ uint32_t ulCtrlPort,
+ uint8_t ucRegNum
+)
+{
+ _MG5UART_TYPE *port;
+
+ port = CALCULATE_REGISTER_ADDRESS( ulCtrlPort, ucRegNum );
+
+ return *port;
+}
+
+/*
+ * MG5UART Set Register Routine
+ */
+
+void _MG5UART_NAME(mg5uart_set_register)(
+ uint32_t ulCtrlPort,
+ uint8_t ucRegNum,
+ uint8_t ucData
+)
+{
+ _MG5UART_TYPE *port;
+
+ port = CALCULATE_REGISTER_ADDRESS( ulCtrlPort, ucRegNum );
+
+ *port = ucData;
+}
diff --git a/c/src/lib/libbsp/mips/genmongoosev/include/bsp.h b/c/src/lib/libbsp/mips/genmongoosev/include/bsp.h
index da4c198..5146b7f 100644
--- a/c/src/lib/libbsp/mips/genmongoosev/include/bsp.h
+++ b/c/src/lib/libbsp/mips/genmongoosev/include/bsp.h
@@ -28,7 +28,7 @@ extern "C" {
#include <rtems/iosupp.h>
#include <rtems/console.h>
#include <rtems/clockdrv.h>
-#include <libcpu/mongoose-v.h>
+#include <bsp/mongoose-v.h>
#define BSP_FEATURE_IRQ_EXTENSION
#define BSP_SHARED_HANDLER_SUPPORT 1
diff --git a/c/src/lib/libbsp/mips/genmongoosev/include/mongoose-v.h b/c/src/lib/libbsp/mips/genmongoosev/include/mongoose-v.h
new file mode 100644
index 0000000..e69d25a
--- /dev/null
+++ b/c/src/lib/libbsp/mips/genmongoosev/include/mongoose-v.h
@@ -0,0 +1,306 @@
+/**
+ * @file
+ *
+ * MIPS Mongoose-V specific information
+ */
+
+/*
+ * 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.
+ */
+
+#ifndef __MONGOOSEV_h
+#define __MONGOOSEV_h
+
+/*
+ * Macros to assist in accessing memory mapped Mongoose registers
+ */
+
+
+#define MONGOOSEV_READ( _base ) \
+ ( *((volatile uint32_t*)(_base)) )
+
+#define MONGOOSEV_WRITE( _base, _value ) \
+ ( *((volatile uint32_t*)(_base)) = (_value) )
+
+#define MONGOOSEV_READ_REGISTER( _base, _register ) \
+ ( *((volatile uint32_t*)((_base) + (_register))) )
+
+#define MONGOOSEV_WRITE_REGISTER( _base, _register, _value ) \
+ ( *((volatile uint32_t*)((_base) + (_register))) = (_value) )
+
+
+
+
+
+/*
+ * Macros to read/write the Mongoose FPU control register.
+ */
+
+
+
+
+/*
+ * BIU and DRAM Registers
+ */
+
+#define MONGOOSEV_BIU_CACHE_CONFIGURATION_REGISTER 0xFFFE0130
+#define MONGOOSEV_DRAM_CONFIGURATION_REGISTER 0xFFFE0120
+#define MONGOOSEV_REFRESH_TIMER_INITIAL_COUNTER_REGISTER 0xFFFE0010
+#define MONGOOSEV_WAIT_STATE_CONFIGURATION_REGISTER_BASE 0xFFFE0100
+
+/*
+ * Peripheral Function Addresses
+ *
+ * NOTE: Status and Interrupt Cause use the same bits
+ */
+
+#define MONGOOSEV_PERIPHERAL_COMMAND_REGISTER 0xFFFE0180
+#define MONGOOSEV_PERIPHERAL_STATUS_REGISTER 0xFFFE0184
+#define MONGOOSEV_PERIPHERAL_FUNCTION_INTERRUPT_CAUSE_REGISTER 0xFFFE0188
+#define MONGOOSEV_PERIPHERAL_FUNCTION_INTERRUPT_MASK_REGISTER 0xFFFE018C
+
+#define MONGOOSEV_WATCHDOG 0xBE000000
+
+/* UART Bits in Peripheral Command Register Bits (TX/RX tied together here) */
+#define MONGOOSEV_UART_CMD_RESET_BOTH_PORTS 0x0001
+#define MONGOOSEV_UART_CMD_LOOPBACK_CTSN 0x0002
+#define MONGOOSEV_UART_CMD_LOOPBACK_RXTX 0x0004
+
+#define MONGOOSEV_UART_CMD_RX_ENABLE 0x001
+#define MONGOOSEV_UART_CMD_RX_DISABLE 0x000
+#define MONGOOSEV_UART_CMD_TX_ENABLE 0x002
+#define MONGOOSEV_UART_CMD_TX_DISABLE 0x000
+#define MONGOOSEV_UART_CMD_TX_READY 0x004
+#define MONGOOSEV_UART_CMD_PARITY_ENABLE 0x008
+#define MONGOOSEV_UART_CMD_PARITY_DISABLE 0x000
+#define MONGOOSEV_UART_CMD_PARITY_EVEN 0x010
+#define MONGOOSEV_UART_CMD_PARITY_ODD 0x000
+
+#define MONGOOSEV_UART0_CMD_SHIFT 5
+#define MONGOOSEV_UART1_CMD_SHIFT 11
+
+#define MONGOOSEV_UART_CMD_TX_ENABLE_0 \
+ (MONGOOSEV_UART_CMD_TX_ENABLE << MONGOOSEV_UART0_CMD_SHIFT)
+#define MONGOOSEV_UART_CMD_RX_ENABLE_0 \
+ (MONGOOSEV_UART_CMD_RX_ENABLE << MONGOOSEV_UART0_CMD_SHIFT)
+#define MONGOOSEV_UART_CMD_TX_READY_0 \
+ (MONGOOSEV_UART_CMD_TX_READY << MONGOOSEV_UART0_CMD_SHIFT)
+#define MONGOOSEV_UART_CMD_PARITY_ENABLE_0 \
+ (MONGOOSEV_UART_CMD_PARITY_ENABLE << MONGOOSEV_UART0_CMD_SHIFT)
+#define MONGOOSEV_UART_CMD_PARITY_DISABLE_0 \
+ (MONGOOSEV_UART_CMD_PARITY_DISABLE << MONGOOSEV_UART0_CMD_SHIFT)
+#define MONGOOSEV_UART_CMD_PARITY_EVEN_0 \
+ (MONGOOSEV_UART_CMD_PARITY_EVEN << MONGOOSEV_UART0_CMD_SHIFT)
+#define MONGOOSEV_UART_CMD_PARITY_ODD_0 \
+ (MONGOOSEV_UART_CMD_PARITY_ODD << MONGOOSEV_UART0_CMD_SHIFT)
+
+#define MONGOOSEV_UART_CMD_TX_ENABLE_1 \
+ (MONGOOSEV_UART_CMD_TX_ENABLE << MONGOOSEV_UART1_CMD_SHIFT)
+#define MONGOOSEV_UART_CMD_RX_ENABLE_1 \
+ (MONGOOSEV_UART_CMD_RX_ENABLE << MONGOOSEV_UART1_CMD_SHIFT)
+#define MONGOOSEV_UART_CMD_TX_READY_1 \
+ (MONGOOSEV_UART_CMD_TX_READY << MONGOOSEV_UART1_CMD_SHIFT)
+#define MONGOOSEV_UART_CMD_PARITY_ENABLE_1 \
+ (MONGOOSEV_UART_CMD_PARITY_ENABLE << MONGOOSEV_UART1_CMD_SHIFT)
+#define MONGOOSEV_UART_CMD_PARITY_DISABLE_1 \
+ (MONGOOSEV_UART_CMD_PARITY_DISABLE << MONGOOSEV_UART1_CMD_SHIFT)
+#define MONGOOSEV_UART_CMD_PARITY_EVEN_1 \
+ (MONGOOSEV_UART_CMD_PARITY_EVEN << MONGOOSEV_UART1_CMD_SHIFT)
+#define MONGOOSEV_UART_CMD_PARITY_ODD_1 \
+ (MONGOOSEV_UART_CMD_PARITY_ODD << MONGOOSEV_UART1_CMD_SHIFT)
+
+/* UART Bits in Peripheral Status and Interrupt Cause Register */
+#define MONGOOSEV_UART_RX_FRAME_ERROR 0x0001
+#define MONGOOSEV_UART_RX_OVERRUN_ERROR 0x0002
+#define MONGOOSEV_UART_TX_EMPTY 0x0004
+#define MONGOOSEV_UART_TX_READY 0x0008
+#define MONGOOSEV_UART_RX_READY 0x0010
+
+#define MONGOOSEV_UART_ALL_RX_STATUS_BITS 0x0013
+#define MONGOOSEV_UART_ALL_STATUS_BITS 0x001F
+
+/*
+ * The Peripheral Interrupt Status, Cause, and Mask registers have the
+ * same bit assignments although some revisions of the document have
+ * the Cause and Status registers incorrect.
+ */
+
+#define MONGOOSEV_UART0_IRQ_SHIFT 11
+#define MONGOOSEV_UART1_IRQ_SHIFT 17
+
+#define MONGOOSEV_UART_FRAME_ERROR_0 \
+ (MONGOOSEV_UART_FRAME_ERROR << MONGOOSEV_UART0_IRQ_SHIFT)
+#define MONGOOSEV_UART_RX_OVERRUN_ERROR_0 \
+ (MONGOOSEV_UART_RX_OVERRUN_ERROR << MONGOOSEV_UART0_IRQ_SHIFT)
+#define MONGOOSEV_UART_TX_EMPTY_0 \
+ (MONGOOSEV_UART_TX_EMPTY << MONGOOSEV_UART0_IRQ_SHIFT)
+#define MONGOOSEV_UART_TX_READY_0 \
+ (MONGOOSEV_UART_TX_READY << MONGOOSEV_UART0_IRQ_SHIFT)
+#define MONGOOSEV_UART_RX_READY_0 \
+ (MONGOOSEV_UART_RX_READY << MONGOOSEV_UART0_IRQ_SHIFT)
+
+#define MONGOOSEV_UART_FRAME_ERROR_1 \
+ (MONGOOSEV_UART_FRAME_ERROR << MONGOOSEV_UART1_IRQ_SHIFT)
+#define MONGOOSEV_UART_RX_OVERRUN_ERROR_1 \
+ (MONGOOSEV_UART_RX_OVERRUN_ERROR << MONGOOSEV_UART1_IRQ_SHIFT)
+#define MONGOOSEV_UART_TX_EMPTY_1 \
+ (MONGOOSEV_UART_TX_EMPTY << MONGOOSEV_UART1_IRQ_SHIFT)
+#define MONGOOSEV_UART_TX_READY_1 \
+ (MONGOOSEV_UART_TX_READY << MONGOOSEV_UART1_IRQ_SHIFT)
+#define MONGOOSEV_UART_RX_READY_1 \
+ (MONGOOSEV_UART_RX_READY << MONGOOSEV_UART1_IRQ_SHIFT)
+
+/*
+ * Bits in the Peripheral Interrupt Mask Register
+ */
+
+/*
+** Interrupt Status/Cause/Mask register bits - from 31 to 0
+*/
+#define MONGOOSEV_EDAC_SERR_BIT 0x80000000
+#define MONGOOSEV_EDAC_MERR_BIT 0x40000000
+/* 29 - 24 reserved */
+#define MONGOOSEV_MAVN_WRITE_ACCESS 0x00800000
+#define MONGOOSEV_MAVN_READ_ACCESS 0x00400000
+#define MONGOOSEV_UART_1_RX_READY 0x00200000
+#define MONGOOSEV_UART_1_TX_READY 0x00100000
+#define MONGOOSEV_UART_1_TX_EMPTY 0x00080000
+#define MONGOOSEV_UART_1_RX_OVERRUN 0x00040000
+#define MONGOOSEV_UART_1_FRAME_ERROR 0x00020000
+#define MONGOOSEV_RESERVED_16 0x00010000
+#define MONGOOSEV_UART_0_RX_READY 0x00008000
+#define MONGOOSEV_UART_0_TX_READY 0x00004000
+#define MONGOOSEV_UART_0_TX_EMPTY 0x00002000
+#define MONGOOSEV_UART_0_RX_OVERRUN 0x00001000
+#define MONGOOSEV_UART_0_FRAME_ERROR 0x00000800
+#define MONGOOSEV_RESERVED_10 0x00000400
+#define MONGOOSEV_EXTERN_INT_9 0x00000200
+#define MONGOOSEV_EXTERN_INT_8 0x00000100
+#define MONGOOSEV_EXTERN_INT_7 0x00000080
+#define MONGOOSEV_EXTERN_INT_6 0x00000040
+#define MONGOOSEV_EXTERN_INT_5 0x00000020
+#define MONGOOSEV_EXTERN_INT_4 0x00000010
+#define MONGOOSEV_EXTERN_INT_3 0x00000008
+#define MONGOOSEV_EXTERN_INT_2 0x00000004
+#define MONGOOSEV_EXTERN_INT_1 0x00000002
+#define MONGOOSEV_EXTERN_INT_0 0x00000001
+
+
+/*
+** Peripheral Command bits (non-uart, those are defined above)
+*/
+#define MONGOOSEV_COMMAND_ENABLE_EDAC MONGOOSEV_EDAC_SERR_BIT
+#define MONGOOSEV_COMMAND_OVERRIDE_EDAC MONGOOSEV_EDAC_MERR_BIT
+
+
+
+/*
+ * EDAC Registers
+ */
+
+#define MONGOOSEV_EDAC_ERROR_ADDRESS_REGISTER 0xFFFE0190
+#define MONGOOSEV_EDAC_PARITY_TEST_MODE_REGISTER 0xFFFE0194
+
+/*
+ * MAVN Registers
+ */
+
+#define MONGOOSEV_MAVN_TEST_REGISTER 0xFFFE01B4
+#define MONGOOSEV_MAVN_ACCESS_PRIVILEGE_REGISTER 0xFFFE01B8
+#define MONGOOSEV_MAVN_ACCESS_VIOLATION_REGISTER 0xFFFE01BC
+#define MONGOOSEV_MAVN_RANGE_0_REGISTER 0xFFFE01C0
+#define MONGOOSEV_MAVN_RANGE_1_REGISTER 0xFFFE01C4
+#define MONGOOSEV_MAVN_RANGE_2_REGISTER 0xFFFE01C8
+#define MONGOOSEV_MAVN_RANGE_3_REGISTER 0xFFFE01CC
+#define MONGOOSEV_MAVN_RANGE_4_REGISTER 0xFFFE01D0
+#define MONGOOSEV_MAVN_RANGE_5_REGISTER 0xFFFE01D4
+#define MONGOOSEV_MAVN_RANGE_6_REGISTER 0xFFFE01D8
+#define MONGOOSEV_MAVN_RANGE_7_REGISTER 0xFFFE01DC
+
+/*
+ * Timer Base Addresses, Offsets, and Values
+ */
+
+#define MONGOOSEV_TIMER1_BASE 0xFFFE0000
+#define MONGOOSEV_TIMER2_BASE 0xFFFE0008
+
+#define MONGOOSEV_TIMER_INITIAL_COUNTER_REGISTER 0
+#define MONGOOSEV_TIMER_CONTROL_REGISTER 4
+
+/* Timer Control Register Constants */
+#define MONGOOSEV_TIMER_CONTROL_COUNTER_ENABLE 0x04
+#define MONGOOSEV_TIMER_CONTROL_INTERRUPT_ENABLE 0x02
+#define MONGOOSEV_TIMER_CONTROL_TIMEOUT 0x01
+
+/*
+ * UART Base Addresses and Offsets
+ *
+ * Many bits in the peripheral command register are UART related
+ * and the bits are defined there.
+ */
+
+#define MONGOOSEV_UART0_BASE 0xFFFE01E8
+#define MONGOOSEV_UART1_BASE 0xFFFE01F4
+
+#define MONGOOSEV_RX_BUFFER 0
+#define MONGOOSEV_TX_BUFFER 4
+#define MONGOOSEV_BAUD_RATE 8
+
+
+/*
+ * Status Register Bits
+ */
+
+#define SR_CUMASK 0xf0000000 /* coproc usable bits */
+#define SR_CU3 0x80000000 /* Coprocessor 3 usable */
+#define SR_CU2 0x40000000 /* Coprocessor 2 usable */
+#define SR_CU1 0x20000000 /* Coprocessor 1 usable */
+#define SR_CU0 0x10000000 /* Coprocessor 0 usable */
+#define SR_BEV 0x00400000 /* use boot exception vectors */
+#define SR_TS 0x00200000 /* TLB shutdown */
+#define SR_PE 0x00100000 /* cache parity error */
+#define SR_CM 0x00080000 /* cache miss */
+#define SR_PZ 0x00040000 /* cache parity zero */
+#define SR_SWC 0x00020000 /* swap cache */
+#define SR_ISC 0x00010000 /* Isolate data cache */
+#define SR_IMASK 0x0000ff00 /* Interrupt mask */
+#define SR_IMASK8 0x00000000 /* mask level 8 */
+#define SR_IMASK7 0x00008000 /* mask level 7 */
+#define SR_IMASK6 0x0000c000 /* mask level 6 */
+#define SR_IMASK5 0x0000e000 /* mask level 5 */
+#define SR_IMASK4 0x0000f000 /* mask level 4 */
+#define SR_IMASK3 0x0000f800 /* mask level 3 */
+#define SR_IMASK2 0x0000fc00 /* mask level 2 */
+#define SR_IMASK1 0x0000fe00 /* mask level 1 */
+#define SR_IMASK0 0x0000ff00 /* mask level 0 */
+
+#define SR_IBIT8 0x00008000 /* bit level 8 */
+#define SR_IBIT7 0x00004000 /* bit level 7 */
+#define SR_IBIT6 0x00002000 /* bit level 6 */
+#define SR_IBIT5 0x00001000 /* bit level 5 */
+#define SR_IBIT4 0x00000800 /* bit level 4 */
+#define SR_IBIT3 0x00000400 /* bit level 3 */
+#define SR_IBIT2 0x00000200 /* bit level 2 */
+#define SR_IBIT1 0x00000100 /* bit level 1 */
+
+#define SR_KUO 0x00000020 /* old kernel/user, 0 => k, 1 => u */
+#define SR_IEO 0x00000010 /* old interrupt enable, 1 => enable */
+#define SR_KUP 0x00000008 /* prev kernel/user, 0 => k, 1 => u */
+#define SR_IEP 0x00000004 /* prev interrupt enable, 1 => enable */
+#define SR_KUC 0x00000002 /* cur kernel/user, 0 => k, 1 => u */
+#define SR_IEC 0x00000001 /* cur interrupt enable, 1 => enable */
+#define SR_KUMSK (SR_KUO|SR_IEO|SR_KUP|SR_IEP|SR_KUC|SR_IEC)
+
+#define SR_IMASKSHIFT 8
+
+
+
+#define MONGOOSEV_IC_SIZE 0x1000 /* instruction cache = 4Kbytes */
+#define MONGOOSEV_DC_SIZE 0x800 /* data cache 2Kbytes */
+
+#endif
diff --git a/c/src/lib/libbsp/mips/genmongoosev/irq/vectorisrs.c b/c/src/lib/libbsp/mips/genmongoosev/irq/vectorisrs.c
index 8a23643..b7210f7 100644
--- a/c/src/lib/libbsp/mips/genmongoosev/irq/vectorisrs.c
+++ b/c/src/lib/libbsp/mips/genmongoosev/irq/vectorisrs.c
@@ -15,7 +15,7 @@
#include <rtems.h>
#include <stdlib.h>
-#include <libcpu/mongoose-v.h>
+#include <bsp/mongoose-v.h>
#include <rtems/mips/iregdef.h>
#include <rtems/mips/idtcpu.h>
diff --git a/c/src/lib/libbsp/mips/genmongoosev/preinstall.am b/c/src/lib/libbsp/mips/genmongoosev/preinstall.am
index f11c87a..e5988a4 100644
--- a/c/src/lib/libbsp/mips/genmongoosev/preinstall.am
+++ b/c/src/lib/libbsp/mips/genmongoosev/preinstall.am
@@ -69,6 +69,26 @@ $(PROJECT_INCLUDE)/bsp/bootcard.h: ../../shared/include/bootcard.h $(PROJECT_INC
$(INSTALL_DATA) $< $(PROJECT_INCLUDE)/bsp/bootcard.h
PREINSTALL_FILES += $(PROJECT_INCLUDE)/bsp/bootcard.h
+$(PROJECT_INCLUDE)/bsp/lr33000.h: include/lr33000.h $(PROJECT_INCLUDE)/bsp/$(dirstamp)
+ $(INSTALL_DATA) $< $(PROJECT_INCLUDE)/bsp/lr33000.h
+PREINSTALL_FILES += $(PROJECT_INCLUDE)/bsp/lr33000.h
+
+$(PROJECT_INCLUDE)/bsp/lr333x0.h: include/lr333x0.h $(PROJECT_INCLUDE)/bsp/$(dirstamp)
+ $(INSTALL_DATA) $< $(PROJECT_INCLUDE)/bsp/lr333x0.h
+PREINSTALL_FILES += $(PROJECT_INCLUDE)/bsp/lr333x0.h
+
+$(PROJECT_INCLUDE)/bsp/mongoose-v.h: include/mongoose-v.h $(PROJECT_INCLUDE)/bsp/$(dirstamp)
+ $(INSTALL_DATA) $< $(PROJECT_INCLUDE)/bsp/mongoose-v.h
+PREINSTALL_FILES += $(PROJECT_INCLUDE)/bsp/mongoose-v.h
+
+$(PROJECT_INCLUDE)/bsp/r3000.h: include/r3000.h $(PROJECT_INCLUDE)/bsp/$(dirstamp)
+ $(INSTALL_DATA) $< $(PROJECT_INCLUDE)/bsp/r3000.h
+PREINSTALL_FILES += $(PROJECT_INCLUDE)/bsp/r3000.h
+
+$(PROJECT_INCLUDE)/bsp/mg5uart.h: console/mg5uart.h $(PROJECT_INCLUDE)/bsp/$(dirstamp)
+ $(INSTALL_DATA) $< $(PROJECT_INCLUDE)/bsp/mg5uart.h
+PREINSTALL_FILES += $(PROJECT_INCLUDE)/bsp/mg5uart.h
+
$(PROJECT_INCLUDE)/coverhd.h: ../../shared/include/coverhd.h $(PROJECT_INCLUDE)/$(dirstamp)
$(INSTALL_DATA) $< $(PROJECT_INCLUDE)/coverhd.h
PREINSTALL_FILES += $(PROJECT_INCLUDE)/coverhd.h
diff --git a/c/src/lib/libbsp/mips/genmongoosev/startup/bspstart.c b/c/src/lib/libbsp/mips/genmongoosev/startup/bspstart.c
index 744dd69..a8dd2cb 100644
--- a/c/src/lib/libbsp/mips/genmongoosev/startup/bspstart.c
+++ b/c/src/lib/libbsp/mips/genmongoosev/startup/bspstart.c
@@ -23,7 +23,7 @@
#include <string.h>
#include <bsp.h>
-#include <libcpu/mongoose-v.h>
+#include <bsp/mongoose-v.h>
#include <libcpu/isr_entries.h>
#include <bsp/irq-generic.h>
diff --git a/c/src/lib/libbsp/mips/genmongoosev/startup/gdb-support.c b/c/src/lib/libbsp/mips/genmongoosev/startup/gdb-support.c
index 5f6ec0d..481774e 100644
--- a/c/src/lib/libbsp/mips/genmongoosev/startup/gdb-support.c
+++ b/c/src/lib/libbsp/mips/genmongoosev/startup/gdb-support.c
@@ -11,7 +11,7 @@
#include <rtems.h>
#include <rtems/bspIo.h>
-#include <libcpu/mongoose-v.h>
+#include <bsp/mongoose-v.h>
#include "gdb_if.h"
#include <rtems/libio.h>
diff --git a/c/src/lib/libcpu/mips/Makefile.am b/c/src/lib/libcpu/mips/Makefile.am
index 6dc6258..e4dd7ca 100644
--- a/c/src/lib/libcpu/mips/Makefile.am
+++ b/c/src/lib/libcpu/mips/Makefile.am
@@ -31,10 +31,6 @@ if tx49
interrupts_CPPFLAGS = -DTX49
endif
-if mongoosev
-interrupts_CPPFLAGS = -DMONGOOSEV
-endif
-
noinst_PROGRAMS += shared/interrupts.rel
shared_interrupts_rel_SOURCES = shared/interrupts/installisrentries.c \
shared/interrupts/isr_entries.S shared/interrupts/isr_entries.h
@@ -42,23 +38,6 @@ shared_interrupts_rel_CPPFLAGS = $(AM_CPPFLAGS) $(interrupts_CPPFLAGS)
shared_interrupts_rel_LDFLAGS = $(RTEMS_RELLDFLAGS)
include_libcpu_HEADERS += shared/interrupts/isr_entries.h
-EXTRA_DIST += mongoosev/README
-EXTRA_DIST += mongoosev/duart/README.mguart
-if mongoosev
-include_libcpu_HEADERS += mongoosev/include/mongoose-v.h
-
-## mongoosev/duart
-include_libchipdir = $(includedir)/libchip
-include_libchip_HEADERS = mongoosev/duart/mg5uart.h
-
-noinst_PROGRAMS += mongoosev/duart.rel
-mongoosev_duart_rel_SOURCES = mongoosev/duart/mg5uart.c \
- mongoosev/duart/mg5uart.h mongoosev/duart/mg5uart_reg.c
-mongoosev_duart_rel_CPPFLAGS = $(AM_CPPFLAGS)
-mongoosev_duart_rel_LDFLAGS = $(RTEMS_RELLDFLAGS)
-
-endif
-
if tx39
include_libcpu_HEADERS += tx39/include/tx3904.h
endif
diff --git a/c/src/lib/libcpu/mips/mongoosev/duart/README.mguart b/c/src/lib/libcpu/mips/mongoosev/duart/README.mguart
deleted file mode 100644
index 8073ab7..0000000
--- a/c/src/lib/libcpu/mips/mongoosev/duart/README.mguart
+++ /dev/null
@@ -1,101 +0,0 @@
-Configuration Table Use
-=======================
-
-sDeviceName
-
- The name of this device.
-
-deviceType
-
- This field must be SERIAL_MG5UART.
-
-pDeviceFns
-
- The device interface control table. This may be:
- + mg5uart_fns for interrupt driven IO
- + mg5uart_fns_polled for polled IO
-
-deviceProbe
-
- This is the address of the routine which probes to see if the device
- is present.
-
-pDeviceFlow
-
- This field is ignored as hardware flow control is not currently supported.
-
-ulMargin
-
- This is currently unused.
-
-ulHysteresis
-
- This is currently unused.
-
-pDeviceParams
-
- This is set to the default settings.
-
-ulCtrlPort1
-
- This field is the address of the command register shared by both ports.
-
-ulCtrlPort2
-
- This field is the address of the port being used.
-
-ulDataPort
-
- This field is set to MG5UART_PORTA or MG5UART_PORTB.
-
-getRegister
-setRegister
-
- These do NOT follow standard conventions and are ignored.
- The register address routines are hard-coded as this is
- an on-CPU part and assumed to provide a 32-bit wide interface.
-
-getData
-
- This is address of the RX buffer register.
-
-setData
-
- This is address of the TX buffer register.
-
-ulClock
-
- baudRate Clock
-
-ulIntVector
-
- This is the interrupt vector number associated with this chip.
-
-Example:
-
-#if (CONSOLE_USE_INTERRUPTS)
-#define MG5UART_FUNCTIONS &mg5uart_fns
-#else
-#define MG5UART_FUNCTIONS &mg5uart_fns_polled
-#endif
-
-{
- "/dev/com0", /* sDeviceName */
- SERIAL_MG5UART, /* deviceType */
- MG5UART_FUNCTIONS, /* pDeviceFns */
- NULL, /* deviceProbe, assume it is there */
- NULL, /* pDeviceFlow */
- 16, /* ulMargin */
- 8, /* ulHysteresis */
- (void *) NULL, /* NULL */ /* pDeviceParams */
- MONGOOSEV_PERIPHERAL_COMMAND_REGISTER, /* ulCtrlPort1 */
- MONGOOSEV_UART0_BASE, /* ulCtrlPort2 */
- MG5UART_UART0, /* ulDataPort */
- mg5uart_get_register, /* getRegister */
- mg5uart_set_register, /* setRegister */
- NULL, /* unused */ /* getData */
- NULL, /* unused */ /* setData */
- 12000000, /* ulClock */
- MONGOOSEV_IRQ_UART0_RX_FRAME_ERROR /* ulIntVector -- base for port */
-}
-
diff --git a/c/src/lib/libcpu/mips/mongoosev/duart/mg5uart.c b/c/src/lib/libcpu/mips/mongoosev/duart/mg5uart.c
deleted file mode 100644
index 50f6586..0000000
--- a/c/src/lib/libcpu/mips/mongoosev/duart/mg5uart.c
+++ /dev/null
@@ -1,917 +0,0 @@
-/**
- * @file
- *
- * This file contains the termios TTY driver for the UART found
- * on the Synova Mongoose-V.
- */
-
-/*
- * 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/libio.h>
-#include <rtems/score/sysstate.h>
-#include <stdlib.h>
-
-#include <libchip/serial.h>
-#include <libchip/mg5uart.h>
-#include <libchip/sersupp.h>
-#include <libcpu/mongoose-v.h>
-
-#include <bsp/irq.h>
-#include <bsp.h>
-
-/*
- * Indices of registers
- */
-
-/*
- * Per chip context control
- */
-
-typedef struct _mg5uart_context
-{
- int mate;
-} mg5uart_context;
-
-/*
- * Define MG5UART_STATIC to nothing while debugging so the entry points
- * will show up in the symbol table.
- */
-
-#define MG5UART_STATIC
-
-/* #define MG5UART_STATIC static */
-
-
-
-#define MG5UART_SETREG( _base, _register, _value ) \
- MONGOOSEV_WRITE_REGISTER( _base, _register, _value )
-
-#define MG5UART_GETREG( _base, _register ) \
- MONGOOSEV_READ_REGISTER( _base, _register )
-
-
-/*
- * Console Device Driver Support Functions
- */
-
-MG5UART_STATIC int mg5uart_baud_rate(
- int minor,
- uint32_t baud,
- uint32_t *code
-);
-
-MG5UART_STATIC void mg5uart_enable_interrupts(
- int minor,
- int mask
-);
-
-/*
- * mg5uart_isr_XXX
- *
- * This is the single interrupt entry point which parcels interrupts
- * out to the handlers for specific sources and makes sure that the
- * shared handler gets the right arguments.
- *
- * NOTE: Yes .. this is ugly but it provides 5 interrupt source
- * wrappers which are nearly functionally identical.
- */
-
-
-extern void mips_default_isr(int vector);
-
-#define __ISR(_TYPE, _OFFSET) \
- MG5UART_STATIC void mg5uart_process_isr_ ## _TYPE ( \
- int minor \
- ); \
- \
- MG5UART_STATIC rtems_isr mg5uart_isr_ ## _TYPE ( \
- void *arg \
- ) \
- { \
- rtems_vector_number vector = (rtems_vector_number) arg; \
- int minor; \
- \
- for(minor=0 ; minor<Console_Port_Count ; minor++) { \
- if( Console_Port_Tbl[minor]->deviceType == SERIAL_MG5UART && \
- vector == Console_Port_Tbl[minor]->ulIntVector + _OFFSET ) { \
- mg5uart_process_isr_ ## _TYPE (minor); \
- return; \
- } \
- } \
- mips_default_isr( vector ); \
- }
-
-__ISR(rx_frame_error, MG5UART_IRQ_RX_FRAME_ERROR)
-__ISR(rx_overrun_error, MG5UART_IRQ_RX_OVERRUN_ERROR)
-__ISR(tx_empty, MG5UART_IRQ_TX_EMPTY)
-__ISR(tx_ready, MG5UART_IRQ_TX_READY)
-__ISR(rx_ready, MG5UART_IRQ_RX_READY)
-
-/*
- * mg5uart_set_attributes
- *
- * This function sets the UART channel to reflect the requested termios
- * port settings.
- */
-
-MG5UART_STATIC int mg5uart_set_attributes(
- int minor,
- const struct termios *t
-)
-{
- uint32_t pMG5UART_port;
- uint32_t pMG5UART;
- uint32_t cmd, cmdSave;
- uint32_t baudcmd;
- uint32_t shift;
- rtems_interrupt_level Irql;
-
- pMG5UART = Console_Port_Tbl[minor]->ulCtrlPort1;
- pMG5UART_port = Console_Port_Tbl[minor]->ulCtrlPort2;
-
- /*
- * Set the baud rate
- */
-
- if (mg5uart_baud_rate( minor, t->c_cflag, &baudcmd ) == -1)
- return -1;
-
- /*
- * Base settings
- */
-
- /*
- * Base settings
- */
-
- cmd = MONGOOSEV_UART_CMD_RX_ENABLE | MONGOOSEV_UART_CMD_TX_ENABLE;
-
- /*
- * Parity
- */
-
- if (t->c_cflag & PARENB) {
- cmd |= MONGOOSEV_UART_CMD_PARITY_ENABLE;
- if (t->c_cflag & PARODD)
- cmd |= MONGOOSEV_UART_CMD_PARITY_ODD;
- else
- cmd |= MONGOOSEV_UART_CMD_PARITY_EVEN;
- } else {
- cmd |= MONGOOSEV_UART_CMD_PARITY_DISABLE;
- }
-
- /*
- * Character Size
- */
-
- if (t->c_cflag & CSIZE) {
- switch (t->c_cflag & CSIZE) {
- case CS5:
- case CS6:
- case CS7:
- return -1;
- break;
- case CS8:
- /* Mongoose-V only supports CS8 */
- break;
-
- }
- } /* else default to CS8 */
-
- /*
- * Stop Bits
- */
-
-#if 0
- if (t->c_cflag & CSTOPB) {
- /* 2 stop bits not supported by Mongoose-V uart */
- return -1;
- }
-#endif
-
- /*
- * XXX what about CTS/RTS
- */
-
- /* XXX */
-
- /*
- * Now write the registers
- */
-
- if ( Console_Port_Tbl[minor]->ulDataPort == MG5UART_UART0 )
- shift = MONGOOSEV_UART0_CMD_SHIFT;
- else
- shift = MONGOOSEV_UART1_CMD_SHIFT;
-
-
-
- rtems_interrupt_disable(Irql);
-
- cmdSave = MG5UART_GETREG( pMG5UART, MG5UART_COMMAND_REGISTER );
-
- MG5UART_SETREG( pMG5UART,
- MG5UART_COMMAND_REGISTER,
- (cmdSave & ~(MONGOOSEV_UART_ALL_STATUS_BITS << shift)) | (cmd << shift) );
-
- MG5UART_SETREG( pMG5UART_port, MG5UART_BAUD_RATE, baudcmd );
-
- rtems_interrupt_enable(Irql);
- return 0;
-}
-
-/*
- * mg5uart_initialize_context
- *
- * This function sets the default values of the per port context structure.
- */
-
-MG5UART_STATIC void mg5uart_initialize_context(
- int minor,
- mg5uart_context *pmg5uartContext
-)
-{
- int port;
- unsigned int pMG5UART;
- unsigned int pMG5UART_port;
-
- pMG5UART = Console_Port_Tbl[minor]->ulCtrlPort1;
- pMG5UART_port = Console_Port_Tbl[minor]->ulCtrlPort2;
-
- pmg5uartContext->mate = -1;
-
- for (port=0 ; port<Console_Port_Count ; port++ ) {
- if ( Console_Port_Tbl[port]->ulCtrlPort1 == pMG5UART &&
- Console_Port_Tbl[port]->ulCtrlPort2 != pMG5UART_port ) {
- pmg5uartContext->mate = port;
- break;
- }
- }
-
-}
-
-/*
- * mg5uart_init
- *
- * This function initializes the DUART to a quiecsent state.
- */
-
-MG5UART_STATIC void mg5uart_init(int minor)
-{
- uint32_t pMG5UART_port;
- uint32_t pMG5UART;
- uint32_t cmdSave;
- uint32_t shift;
-
- mg5uart_context *pmg5uartContext;
-
- pmg5uartContext = (mg5uart_context *) malloc(sizeof(mg5uart_context));
-
- Console_Port_Data[minor].pDeviceContext = (void *)pmg5uartContext;
-
- mg5uart_initialize_context( minor, pmg5uartContext );
-
- pMG5UART = Console_Port_Tbl[minor]->ulCtrlPort1;
- pMG5UART_port = Console_Port_Tbl[minor]->ulCtrlPort2;
-
- if ( Console_Port_Tbl[minor]->ulDataPort == MG5UART_UART0 )
- shift = MONGOOSEV_UART0_CMD_SHIFT;
- else
- shift = MONGOOSEV_UART1_CMD_SHIFT;
-
- /*
- * Disable the uart and leave this port disabled.
- */
-
- cmdSave = MG5UART_GETREG(pMG5UART, MG5UART_COMMAND_REGISTER) & ~(MONGOOSEV_UART_ALL_STATUS_BITS << shift);
-
- MG5UART_SETREG( pMG5UART, MG5UART_COMMAND_REGISTER, cmdSave );
-
- /*
- * Disable interrupts on RX and TX for this port
- */
- mg5uart_enable_interrupts( minor, MG5UART_DISABLE_ALL );
-}
-
-/*
- * mg5uart_open
- *
- * This function opens a port for communication.
- *
- * Default state is 9600 baud, 8 bits, No parity, and 1 stop bit.
- */
-
-MG5UART_STATIC int mg5uart_open(
- int major,
- int minor,
- void *arg
-)
-{
- uint32_t pMG5UART;
- uint32_t pMG5UART_port;
- uint32_t vector;
- uint32_t cmd, cmdSave;
- uint32_t baudcmd;
- uint32_t shift;
-
- rtems_interrupt_level Irql;
-
- pMG5UART = Console_Port_Tbl[minor]->ulCtrlPort1;
- pMG5UART_port = Console_Port_Tbl[minor]->ulCtrlPort2;
- vector = Console_Port_Tbl[minor]->ulIntVector;
-
- if ( Console_Port_Tbl[minor]->ulDataPort == MG5UART_UART0 )
- shift = MONGOOSEV_UART0_CMD_SHIFT;
- else
- shift = MONGOOSEV_UART1_CMD_SHIFT;
-
-
- /* XXX default baud rate could be from configuration table */
-
- (void) mg5uart_baud_rate( minor, B19200, &baudcmd );
-
- /*
- * Set the DUART channel to a default useable state
- * B19200, 8Nx since there is no stop bit control.
- */
-
- cmd = MONGOOSEV_UART_CMD_TX_ENABLE | MONGOOSEV_UART_CMD_RX_ENABLE;
-
- rtems_interrupt_disable(Irql);
-
- cmdSave = MG5UART_GETREG( pMG5UART, MG5UART_COMMAND_REGISTER );
-
- MG5UART_SETREG( pMG5UART_port, MG5UART_BAUD_RATE, baudcmd );
-
- MG5UART_SETREG( pMG5UART,
- MG5UART_COMMAND_REGISTER,
- cmd = (cmdSave & ~(MONGOOSEV_UART_ALL_STATUS_BITS << shift)) | (cmd << shift) );
-
- rtems_interrupt_enable(Irql);
-
- return RTEMS_SUCCESSFUL;
-}
-
-/*
- * mg5uart_close
- *
- * This function shuts down the requested port.
- */
-
-MG5UART_STATIC int mg5uart_close(
- int major,
- int minor,
- void *arg
-)
-{
- uint32_t pMG5UART;
- uint32_t pMG5UART_port;
- uint32_t cmd, cmdSave;
- uint32_t shift;
- rtems_interrupt_level Irql;
-
- pMG5UART = Console_Port_Tbl[minor]->ulCtrlPort1;
- pMG5UART_port = Console_Port_Tbl[minor]->ulCtrlPort2;
-
- /*
- * Disable interrupts from this channel and then disable it totally.
- */
-
- /* XXX interrupts */
-
- cmd = MONGOOSEV_UART_CMD_TX_DISABLE | MONGOOSEV_UART_CMD_RX_DISABLE;
-
- if ( Console_Port_Tbl[minor]->ulDataPort == MG5UART_UART0 )
- shift = MONGOOSEV_UART0_CMD_SHIFT;
- else
- shift = MONGOOSEV_UART1_CMD_SHIFT;
-
-
- rtems_interrupt_disable(Irql);
- cmdSave = MG5UART_GETREG( pMG5UART, MG5UART_COMMAND_REGISTER );
-
- MG5UART_SETREG( pMG5UART,
- MG5UART_COMMAND_REGISTER,
- (cmdSave & ~(MONGOOSEV_UART_ALL_STATUS_BITS << shift)) | (cmd << shift) );
- rtems_interrupt_enable(Irql);
-
- return(RTEMS_SUCCESSFUL);
-}
-
-
-
-
-/*
- * mg5uart_write_polled
- *
- * This routine polls out the requested character.
- */
-
-MG5UART_STATIC void mg5uart_write_polled(
- int minor,
- char c
-)
-{
- uint32_t pMG5UART;
- uint32_t pMG5UART_port;
- uint32_t status;
- int shift;
- int timeout;
-
- pMG5UART = Console_Port_Tbl[minor]->ulCtrlPort1;
- pMG5UART_port = Console_Port_Tbl[minor]->ulCtrlPort2;
-
- if ( Console_Port_Tbl[minor]->ulDataPort == MG5UART_UART0 )
- shift = MONGOOSEV_UART0_IRQ_SHIFT;
- else
- shift = MONGOOSEV_UART1_IRQ_SHIFT;
-
- /*
- * wait for transmitter holding register to be empty
- */
- timeout = 2000;
-
- while( --timeout )
- {
- status = MG5UART_GETREG(pMG5UART, MG5UART_STATUS_REGISTER) >> shift;
-
- /*
- if ( (status & (MONGOOSEV_UART_TX_READY | MONGOOSEV_UART_TX_EMPTY)) ==
- (MONGOOSEV_UART_TX_READY | MONGOOSEV_UART_TX_EMPTY) )
- break;
- */
-
- if( (status & (MONGOOSEV_UART_TX_READY | MONGOOSEV_UART_TX_EMPTY)) )
- break;
-
- /*
- * Yield while we wait
- */
-
-#if 0
- if(_System_state_Is_up(_System_state_Get()))
- {
- rtems_task_wake_after(RTEMS_YIELD_PROCESSOR);
- }
-#endif
- }
-
- /*
- * transmit character
- */
-
- MG5UART_SETREG(pMG5UART_port, MG5UART_TX_BUFFER, c);
-}
-
-MG5UART_STATIC void mg5uart_process_isr_rx_error(
- int minor,
- uint32_t mask
-)
-{
- uint32_t pMG5UART;
- int shift;
-
- pMG5UART = Console_Port_Tbl[minor]->ulCtrlPort1;
-
- if ( Console_Port_Tbl[minor]->ulDataPort == MG5UART_UART0 )
- shift = MONGOOSEV_UART0_IRQ_SHIFT;
- else
- shift = MONGOOSEV_UART1_IRQ_SHIFT;
-
- /* now clear the error */
-
- MG5UART_SETREG(
- pMG5UART,
- MG5UART_STATUS_REGISTER,
- mask << shift );
-}
-
-
-MG5UART_STATIC void mg5uart_process_isr_rx_frame_error(
- int minor
-)
-{
- mg5uart_process_isr_rx_error( minor, MONGOOSEV_UART_RX_FRAME_ERROR );
-}
-
-MG5UART_STATIC void mg5uart_process_isr_rx_overrun_error(
- int minor
-)
-{
- mg5uart_process_isr_rx_error( minor, MONGOOSEV_UART_RX_OVERRUN_ERROR );
-}
-
-
-
-
-
-
-
-
-MG5UART_STATIC void mg5uart_process_tx_isr(
- int minor,
- uint32_t source
-)
-{
- uint32_t pMG5UART;
- int shift;
-
- pMG5UART = Console_Port_Tbl[minor]->ulCtrlPort1;
-
- mg5uart_enable_interrupts(minor, MG5UART_ENABLE_ALL_EXCEPT_TX);
-
- if ( Console_Port_Tbl[minor]->ulDataPort == MG5UART_UART0 )
- shift = MONGOOSEV_UART0_IRQ_SHIFT;
- else
- shift = MONGOOSEV_UART1_IRQ_SHIFT;
-
- MG5UART_SETREG(
- pMG5UART,
- MG5UART_STATUS_REGISTER,
- source << shift );
-
- if( rtems_termios_dequeue_characters( Console_Port_Data[minor].termios_data, 1) )
- {
- mg5uart_enable_interrupts(minor, MG5UART_ENABLE_ALL);
- return;
- }
-
- /*
- * There are no more characters to transmit. The tx interrupts are be cleared
- * by writing data to the uart, so just disable the tx interrupt sources.
- */
-
- Console_Port_Data[minor].bActive = FALSE;
-
- /* mg5uart_enable_interrupts(minor, MG5UART_ENABLE_ALL_EXCEPT_TX); */
-}
-
-
-
-MG5UART_STATIC void mg5uart_process_isr_tx_empty(
- int minor
-)
-{
- /* mg5uart_process_tx_isr( minor, MONGOOSEV_UART_TX_EMPTY ); */
-}
-
-MG5UART_STATIC void mg5uart_process_isr_tx_ready(
- int minor
-)
-{
- mg5uart_process_tx_isr( minor, MONGOOSEV_UART_TX_READY );
-}
-
-
-
-
-
-MG5UART_STATIC void mg5uart_process_isr_rx_ready(
- int minor
-)
-{
- uint32_t pMG5UART_port;
- char c;
-
- pMG5UART_port = Console_Port_Tbl[minor]->ulCtrlPort2;
-
- /* reading the RX buffer automatically resets the interrupt flag */
-
- c = (char) MG5UART_GETREG(pMG5UART_port, MG5UART_RX_BUFFER);
-
- rtems_termios_enqueue_raw_characters(
- Console_Port_Data[minor].termios_data,
- &c, 1 );
-}
-
-static rtems_irq_connect_data mg5uart_rx_frame_error_cd = { \
- 0, /* filled in at initialization */
- mg5uart_isr_rx_frame_error, /* filled in at initialization */
- NULL, /* (void *) minor */
- NULL,
- NULL,
- NULL
-};
-
-static rtems_irq_connect_data mg5uart_rx_overrun_error_cd = { \
- 0, /* filled in at initialization */
- mg5uart_isr_rx_overrun_error, /* filled in at initialization */
- NULL, /* (void *) minor */
- NULL,
- NULL,
- NULL
-};
-
-static rtems_irq_connect_data mg5uart_tx_empty_cd = { \
- 0, /* filled in at initialization */
- mg5uart_isr_tx_empty, /* filled in at initialization */
- NULL, /* (void *) minor */
- NULL,
- NULL,
- NULL
-};
-
-static rtems_irq_connect_data mg5uart_tx_ready_cd = { \
- 0, /* filled in at initialization */
- mg5uart_isr_tx_ready, /* filled in at initialization */
- NULL, /* (void *) minor */
- NULL,
- NULL,
- NULL
-};
-
-static rtems_irq_connect_data mg5uart_rx_ready_cd = { \
- 0, /* filled in at initialization */
- mg5uart_isr_rx_ready, /* filled in at initialization */
- NULL, /* (void *) minor */
- NULL,
- NULL,
- NULL
-};
-
-
-/*
- * mg5uart_initialize_interrupts
- *
- * This routine initializes the console's receive and transmit
- * ring buffers and loads the appropriate vectors to handle the interrupts.
- */
-
-MG5UART_STATIC void mg5uart_initialize_interrupts(int minor)
-{
- unsigned long v;
- mg5uart_init(minor);
-
- Console_Port_Data[minor].bActive = FALSE;
- v = Console_Port_Tbl[minor]->ulIntVector;
-
- mg5uart_rx_frame_error_cd.name = v + MG5UART_IRQ_RX_FRAME_ERROR;
- mg5uart_rx_overrun_error_cd.name = v + MG5UART_IRQ_RX_OVERRUN_ERROR;
- mg5uart_tx_empty_cd.name = v + MG5UART_IRQ_TX_EMPTY;
- mg5uart_tx_ready_cd.name = v + MG5UART_IRQ_TX_READY;
- mg5uart_rx_ready_cd.name = v + MG5UART_IRQ_RX_READY;
-
- mg5uart_rx_frame_error_cd.handle = (void *)mg5uart_rx_frame_error_cd.name;
- mg5uart_rx_overrun_error_cd.handle = (void *)mg5uart_rx_overrun_error_cd.name;
- mg5uart_tx_empty_cd.handle = (void *)mg5uart_tx_empty_cd.name;
- mg5uart_tx_ready_cd.handle = (void *)mg5uart_tx_ready_cd.name;
- mg5uart_rx_ready_cd.handle = (void *)mg5uart_rx_ready_cd.name;
-
-
- BSP_install_rtems_irq_handler( &mg5uart_rx_frame_error_cd );
- BSP_install_rtems_irq_handler( &mg5uart_rx_overrun_error_cd );
- BSP_install_rtems_irq_handler( &mg5uart_tx_empty_cd );
- BSP_install_rtems_irq_handler( &mg5uart_tx_ready_cd );
- BSP_install_rtems_irq_handler( &mg5uart_rx_ready_cd );
-
- mg5uart_enable_interrupts(minor, MG5UART_ENABLE_ALL_EXCEPT_TX);
-}
-
-/*
- * mg5uart_write_support_int
- *
- * Console Termios output entry point when using interrupt driven output.
- */
-
-MG5UART_STATIC int mg5uart_write_support_int(
- int minor,
- const char *buf,
- size_t len
-)
-{
- uint32_t pMG5UART_port;
-
- pMG5UART_port = Console_Port_Tbl[minor]->ulCtrlPort2;
-
- /*
- * We are using interrupt driven output and termios only sends us
- * one character at a time.
- */
-
- if ( !len )
- return 0;
-
- /*
- * Put the character out and enable interrupts if necessary.
- */
-
- MG5UART_SETREG(pMG5UART_port, MG5UART_TX_BUFFER, *buf);
-
- if( Console_Port_Data[minor].bActive == FALSE )
- {
- Console_Port_Data[minor].bActive = TRUE;
- mg5uart_enable_interrupts(minor, MG5UART_ENABLE_ALL);
- }
-
- return 1;
-}
-
-
-
-
-/*
- * mg5uart_write_support_polled
- *
- * Console Termios output entry point when using polled output.
- *
- */
-
-MG5UART_STATIC ssize_t mg5uart_write_support_polled(
- int minor,
- const char *buf,
- size_t len
-)
-{
- int nwrite = 0;
-
- /*
- * poll each byte in the string out of the port.
- */
- while (nwrite < len)
- {
- mg5uart_write_polled(minor, *buf++);
- nwrite++;
- }
-
- /*
- * return the number of bytes written.
- */
- return nwrite;
-}
-
-/*
- * mg5uart_inbyte_nonblocking_polled
- *
- * Console Termios polling input entry point.
- */
-
-MG5UART_STATIC int mg5uart_inbyte_nonblocking_polled(
- int minor
-)
-{
- uint32_t pMG5UART;
- uint32_t pMG5UART_port;
- uint32_t status;
- uint32_t tmp,shift;
-
- pMG5UART = Console_Port_Tbl[minor]->ulCtrlPort1;
- pMG5UART_port = Console_Port_Tbl[minor]->ulCtrlPort2;
-
- if ( Console_Port_Tbl[minor]->ulDataPort == MG5UART_UART0 )
- shift = MONGOOSEV_UART0_IRQ_SHIFT;
- else
- shift = MONGOOSEV_UART1_IRQ_SHIFT;
-
- /* reset overrrun or framing errors */
- status = MG5UART_GETREG(pMG5UART, MG5UART_STATUS_REGISTER) >> shift;
-
- if( (tmp = (status & 0x3)) )
- {
- MG5UART_SETREG(pMG5UART, MG5UART_STATUS_REGISTER, (tmp << shift) );
- status = MG5UART_GETREG(pMG5UART, MG5UART_STATUS_REGISTER) >> shift;
- }
-
- if ( status & MONGOOSEV_UART_RX_READY )
- {
- return (int) MG5UART_GETREG(pMG5UART_port, MG5UART_RX_BUFFER);
- }
- else
- {
- return -1;
- }
-}
-
-/*
- * mg5uart_baud_rate
- */
-
-MG5UART_STATIC int mg5uart_baud_rate(
- int minor,
- uint32_t baud,
- uint32_t *code
-)
-{
- uint32_t clock;
- uint32_t tmp_code;
- uint32_t baud_requested;
-
- baud_requested = baud & CBAUD;
- if (!baud_requested)
- baud_requested = B9600; /* default to 9600 baud */
-
- baud_requested = rtems_termios_baud_to_number( baud_requested );
-
- clock = (uint32_t) Console_Port_Tbl[minor]->ulClock;
- if (!clock)
- rtems_fatal_error_occurred(RTEMS_INVALID_NUMBER);
-
- /*
- * Formula is Code = round(ClockFrequency / Baud - 1).
- *
- * Since this is integer math, we will divide by twice the baud and
- * check the remaining odd bit.
- */
-
- tmp_code = (clock / baud_requested) - 1;
-
- /*
- * From section 12.7, "Keep C>100 for best receiver operation."
- * That is 100 cycles which is not a lot of instructions. It is
- * reasonable to think that the Mongoose-V could not keep
- * up with C < 100.
- */
-
- if ( tmp_code < 100 )
- return RTEMS_INVALID_NUMBER;
-
- /*
- * upper word is receiver baud and lower word is transmitter baud
- */
-
- *code = (tmp_code << 16) | tmp_code;
-
- return 0;
-}
-
-
-
-
-/*
- * mg5uart_enable_interrupts
- *
- * This function enables specific interrupt sources on the DUART.
- */
-
-MG5UART_STATIC void mg5uart_enable_interrupts(
- int minor,
- int mask
-)
-{
- uint32_t pMG5UART;
- uint32_t maskSave;
- uint32_t shift;
- rtems_interrupt_level Irql;
-
- pMG5UART = Console_Port_Tbl[minor]->ulCtrlPort1;
-
- /*
- * Enable interrupts on RX and TX -- not break
- */
-
- if ( Console_Port_Tbl[minor]->ulDataPort == MG5UART_UART0 )
- shift = MONGOOSEV_UART0_IRQ_SHIFT;
- else
- shift = MONGOOSEV_UART1_IRQ_SHIFT;
-
-
- rtems_interrupt_disable(Irql);
-
- maskSave = MG5UART_GETREG( pMG5UART, MG5UART_INTERRUPT_MASK_REGISTER );
-
- MG5UART_SETREG(
- pMG5UART,
- MG5UART_INTERRUPT_MASK_REGISTER,
- (maskSave & ~(MONGOOSEV_UART_ALL_STATUS_BITS << shift)) | (mask << shift) );
-
- rtems_interrupt_enable(Irql);
-}
-
-
-
-/*
- * Flow control is only supported when using interrupts
- */
-
-const console_fns mg5uart_fns =
-{
- libchip_serial_default_probe, /* deviceProbe */
- mg5uart_open, /* deviceFirstOpen */
- NULL, /* deviceLastClose */
- NULL, /* deviceRead */
- mg5uart_write_support_int, /* deviceWrite */
- mg5uart_initialize_interrupts, /* deviceInitialize */
- mg5uart_write_polled, /* deviceWritePolled */
- mg5uart_set_attributes, /* deviceSetAttributes */
- TRUE /* deviceOutputUsesInterrupts */
-};
-
-const console_fns mg5uart_fns_polled =
-{
- libchip_serial_default_probe, /* deviceProbe */
- mg5uart_open, /* deviceFirstOpen */
- mg5uart_close, /* deviceLastClose */
- mg5uart_inbyte_nonblocking_polled, /* deviceRead */
- mg5uart_write_support_polled, /* deviceWrite */
- mg5uart_init, /* deviceInitialize */
- mg5uart_write_polled, /* deviceWritePolled */
- mg5uart_set_attributes, /* deviceSetAttributes */
- FALSE, /* deviceOutputUsesInterrupts */
-};
diff --git a/c/src/lib/libcpu/mips/mongoosev/duart/mg5uart.h b/c/src/lib/libcpu/mips/mongoosev/duart/mg5uart.h
deleted file mode 100644
index fa7bed6..0000000
--- a/c/src/lib/libcpu/mips/mongoosev/duart/mg5uart.h
+++ /dev/null
@@ -1,98 +0,0 @@
-/*
- *
- * COPYRIGHT (c) 1989-1999.
- * 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.
- */
-
-#ifndef _MG5UART_H_
-#define _MG5UART_H_
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/*
- * This is the ASCII for "MG5U" which should be unique enough to
- * distinguish this type of serial device from others.
- */
-
-#define SERIAL_MG5UART 0x474D5535
-
-#define MG5UART_UART0 0
-#define MG5UART_UART1 1
-
-/*
- * These are just used in the interface between this driver and
- * the read/write register routines when accessing the first
- * control port. They are indices of registers from the bases.
- */
-
-/* shared registers from peripheral base (i.e. from ulCtrlPort1) */
-/*
-#define MG5UART_COMMAND_REGISTER 0
-#define MG5UART_STATUS_REGISTER 1
-#define MG5UART_INTERRUPT_CAUSE_REGISTER 2
-#define MG5UART_INTERRUPT_MASK_REGISTER 3
-*/
-
-#define MG5UART_COMMAND_REGISTER 0
-#define MG5UART_STATUS_REGISTER 0x04
-#define MG5UART_INTERRUPT_CAUSE_REGISTER 0x08
-#define MG5UART_INTERRUPT_MASK_REGISTER 0x0C
-
-/* port specific registers from uart base (i.e. from ulCtrlPort2) */
-#define MG5UART_RX_BUFFER 0
-#define MG5UART_TX_BUFFER 4
-#define MG5UART_BAUD_RATE 8
-
-/*
- * Interrupt mask values
- */
-
-#define MG5UART_ENABLE_ALL_EXCEPT_TX MONGOOSEV_UART_ALL_RX_STATUS_BITS
-
-/* all rx ints on, but only tx ready. no need to also int on tx empty */
-#define MG5UART_ENABLE_ALL (MONGOOSEV_UART_ALL_STATUS_BITS & ~MONGOOSEV_UART_TX_EMPTY)
-
-#define MG5UART_DISABLE_ALL 0x0000
-
-/*
- * Assume vectors are sequential.
- */
-
-#define MG5UART_IRQ_RX_FRAME_ERROR 0
-#define MG5UART_IRQ_RX_OVERRUN_ERROR 1
-#define MG5UART_IRQ_TX_EMPTY 2
-#define MG5UART_IRQ_TX_READY 3
-#define MG5UART_IRQ_RX_READY 4
-/*
- * Driver function table
- */
-
-extern const console_fns mg5uart_fns;
-extern const console_fns mg5uart_fns_polled;
-
-/*
- * Default register access routines
- */
-
-uint32_t mg5uart_get_register( /* registers are on 32-bit boundaries */
- uint32_t ulCtrlPort, /* and accessed as word */
- uint32_t ucRegNum
-);
-
-void mg5uart_set_register(
- uint32_t ulCtrlPort,
- uint32_t ucRegNum,
- uint32_t ucData
-);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* _MG5UART_H_ */
diff --git a/c/src/lib/libcpu/mips/mongoosev/duart/mg5uart_reg.c b/c/src/lib/libcpu/mips/mongoosev/duart/mg5uart_reg.c
deleted file mode 100644
index 134695f..0000000
--- a/c/src/lib/libcpu/mips/mongoosev/duart/mg5uart_reg.c
+++ /dev/null
@@ -1,58 +0,0 @@
-/*
- * This file contains a typical set of register access routines which may be
- * used with the mg5uart chip if accesses to the chip are as follows:
- *
- * + registers are accessed as uint32_t 's
- * + registers are only u32-aligned (no address gaps)
- *
- * COPYRIGHT (c) 1989-2001.
- * 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>
-
-#ifndef _MG5UART_MULTIPLIER
-#define _MG5UART_MULTIPLIER 1
-#define _MG5UART_NAME(_X) _X
-#define _MG5UART_TYPE uint32_t
-#endif
-
-#define CALCULATE_REGISTER_ADDRESS( _base, _reg ) \
- (_MG5UART_TYPE *)((_base) + ((_reg) * _MG5UART_MULTIPLIER ))
-
-/*
- * MG5UART Get Register Routine
- */
-
-uint8_t _MG5UART_NAME(mg5uart_get_register)(
- uint32_t ulCtrlPort,
- uint8_t ucRegNum
-)
-{
- _MG5UART_TYPE *port;
-
- port = CALCULATE_REGISTER_ADDRESS( ulCtrlPort, ucRegNum );
-
- return *port;
-}
-
-/*
- * MG5UART Set Register Routine
- */
-
-void _MG5UART_NAME(mg5uart_set_register)(
- uint32_t ulCtrlPort,
- uint8_t ucRegNum,
- uint8_t ucData
-)
-{
- _MG5UART_TYPE *port;
-
- port = CALCULATE_REGISTER_ADDRESS( ulCtrlPort, ucRegNum );
-
- *port = ucData;
-}
diff --git a/c/src/lib/libcpu/mips/mongoosev/include/mongoose-v.h b/c/src/lib/libcpu/mips/mongoosev/include/mongoose-v.h
deleted file mode 100644
index b8ded3d..0000000
--- a/c/src/lib/libcpu/mips/mongoosev/include/mongoose-v.h
+++ /dev/null
@@ -1,306 +0,0 @@
-/**
- * @file
- *
- * MIPS Mongoose-V specific information
- */
-
-/*
- * 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.
- */
-
-#ifndef __MONGOOSEV_h
-#define __MONGOOSEV_h
-
-/*
- * Macros to assist in accessing memory mapped Mongoose registers
- */
-
-
-#define MONGOOSEV_READ( _base ) \
- ( *((volatile uint32_t*)(_base)) )
-
-#define MONGOOSEV_WRITE( _base, _value ) \
- ( *((volatile uint32_t*)(_base)) = (_value) )
-
-#define MONGOOSEV_READ_REGISTER( _base, _register ) \
- ( *((volatile uint32_t*)((_base) + (_register))) )
-
-#define MONGOOSEV_WRITE_REGISTER( _base, _register, _value ) \
- ( *((volatile uint32_t*)((_base) + (_register))) = (_value) )
-
-
-
-
-
-/*
- * Macros to read/write the Mongoose FPU control register.
- */
-
-
-
-
-/*
- * BIU and DRAM Registers
- */
-
-#define MONGOOSEV_BIU_CACHE_CONFIGURATION_REGISTER 0xFFFE0130
-#define MONGOOSEV_DRAM_CONFIGURATION_REGISTER 0xFFFE0120
-#define MONGOOSEV_REFRESH_TIMER_INITIAL_COUNTER_REGISTER 0xFFFE0010
-#define MONGOOSEV_WAIT_STATE_CONFIGURATION_REGISTER_BASE 0xFFFE0100
-
-/*
- * Peripheral Function Addresses
- *
- * NOTE: Status and Interrupt Cause use the same bits
- */
-
-#define MONGOOSEV_PERIPHERAL_COMMAND_REGISTER 0xFFFE0180
-#define MONGOOSEV_PERIPHERAL_STATUS_REGISTER 0xFFFE0184
-#define MONGOOSEV_PERIPHERAL_FUNCTION_INTERRUPT_CAUSE_REGISTER 0xFFFE0188
-#define MONGOOSEV_PERIPHERAL_FUNCTION_INTERRUPT_MASK_REGISTER 0xFFFE018C
-
-#define MONGOOSEV_WATCHDOG 0xBE000000
-
-/* UART Bits in Peripheral Command Register Bits (TX/RX tied together here) */
-#define MONGOOSEV_UART_CMD_RESET_BOTH_PORTS 0x0001
-#define MONGOOSEV_UART_CMD_LOOPBACK_CTSN 0x0002
-#define MONGOOSEV_UART_CMD_LOOPBACK_RXTX 0x0004
-
-#define MONGOOSEV_UART_CMD_RX_ENABLE 0x001
-#define MONGOOSEV_UART_CMD_RX_DISABLE 0x000
-#define MONGOOSEV_UART_CMD_TX_ENABLE 0x002
-#define MONGOOSEV_UART_CMD_TX_DISABLE 0x000
-#define MONGOOSEV_UART_CMD_TX_READY 0x004
-#define MONGOOSEV_UART_CMD_PARITY_ENABLE 0x008
-#define MONGOOSEV_UART_CMD_PARITY_DISABLE 0x000
-#define MONGOOSEV_UART_CMD_PARITY_EVEN 0x010
-#define MONGOOSEV_UART_CMD_PARITY_ODD 0x000
-
-#define MONGOOSEV_UART0_CMD_SHIFT 5
-#define MONGOOSEV_UART1_CMD_SHIFT 11
-
-#define MONGOOSEV_UART_CMD_TX_ENABLE_0 \
- (MONGOOSEV_UART_CMD_TX_ENABLE << MONGOOSEV_UART0_CMD_SHIFT)
-#define MONGOOSEV_UART_CMD_RX_ENABLE_0 \
- (MONGOOSEV_UART_CMD_RX_ENABLE << MONGOOSEV_UART0_CMD_SHIFT)
-#define MONGOOSEV_UART_CMD_TX_READY_0 \
- (MONGOOSEV_UART_CMD_TX_READY << MONGOOSEV_UART0_CMD_SHIFT)
-#define MONGOOSEV_UART_CMD_PARITY_ENABLE_0 \
- (MONGOOSEV_UART_CMD_PARITY_ENABLE << MONGOOSEV_UART0_CMD_SHIFT)
-#define MONGOOSEV_UART_CMD_PARITY_DISABLE_0 \
- (MONGOOSEV_UART_CMD_PARITY_DISABLE << MONGOOSEV_UART0_CMD_SHIFT)
-#define MONGOOSEV_UART_CMD_PARITY_EVEN_0 \
- (MONGOOSEV_UART_CMD_PARITY_EVEN << MONGOOSEV_UART0_CMD_SHIFT)
-#define MONGOOSEV_UART_CMD_PARITY_ODD_0 \
- (MONGOOSEV_UART_CMD_PARITY_ODD << MONGOOSEV_UART0_CMD_SHIFT)
-
-#define MONGOOSEV_UART_CMD_TX_ENABLE_1 \
- (MONGOOSEV_UART_CMD_TX_ENABLE << MONGOOSEV_UART1_CMD_SHIFT)
-#define MONGOOSEV_UART_CMD_RX_ENABLE_1 \
- (MONGOOSEV_UART_CMD_RX_ENABLE << MONGOOSEV_UART1_CMD_SHIFT)
-#define MONGOOSEV_UART_CMD_TX_READY_1 \
- (MONGOOSEV_UART_CMD_TX_READY << MONGOOSEV_UART1_CMD_SHIFT)
-#define MONGOOSEV_UART_CMD_PARITY_ENABLE_1 \
- (MONGOOSEV_UART_CMD_PARITY_ENABLE << MONGOOSEV_UART1_CMD_SHIFT)
-#define MONGOOSEV_UART_CMD_PARITY_DISABLE_1 \
- (MONGOOSEV_UART_CMD_PARITY_DISABLE << MONGOOSEV_UART1_CMD_SHIFT)
-#define MONGOOSEV_UART_CMD_PARITY_EVEN_1 \
- (MONGOOSEV_UART_CMD_PARITY_EVEN << MONGOOSEV_UART1_CMD_SHIFT)
-#define MONGOOSEV_UART_CMD_PARITY_ODD_1 \
- (MONGOOSEV_UART_CMD_PARITY_ODD << MONGOOSEV_UART1_CMD_SHIFT)
-
-/* UART Bits in Peripheral Status and Interrupt Cause Register */
-#define MONGOOSEV_UART_RX_FRAME_ERROR 0x0001
-#define MONGOOSEV_UART_RX_OVERRUN_ERROR 0x0002
-#define MONGOOSEV_UART_TX_EMPTY 0x0004
-#define MONGOOSEV_UART_TX_READY 0x0008
-#define MONGOOSEV_UART_RX_READY 0x0010
-
-#define MONGOOSEV_UART_ALL_RX_STATUS_BITS 0x0013
-#define MONGOOSEV_UART_ALL_STATUS_BITS 0x001F
-
-/*
- * The Peripheral Interrupt Status, Cause, and Mask registers have the
- * same bit assignments although some revisions of the document have
- * the Cause and Status registers incorrect.
- */
-
-#define MONGOOSEV_UART0_IRQ_SHIFT 11
-#define MONGOOSEV_UART1_IRQ_SHIFT 17
-
-#define MONGOOSEV_UART_FRAME_ERROR_0 \
- (MONGOOSEV_UART_FRAME_ERROR << MONGOOSEV_UART0_IRQ_SHIFT)
-#define MONGOOSEV_UART_RX_OVERRUN_ERROR_0 \
- (MONGOOSEV_UART_RX_OVERRUN_ERROR << MONGOOSEV_UART0_IRQ_SHIFT)
-#define MONGOOSEV_UART_TX_EMPTY_0 \
- (MONGOOSEV_UART_TX_EMPTY << MONGOOSEV_UART0_IRQ_SHIFT)
-#define MONGOOSEV_UART_TX_READY_0 \
- (MONGOOSEV_UART_TX_READY << MONGOOSEV_UART0_IRQ_SHIFT)
-#define MONGOOSEV_UART_RX_READY_0 \
- (MONGOOSEV_UART_RX_READY << MONGOOSEV_UART0_IRQ_SHIFT)
-
-#define MONGOOSEV_UART_FRAME_ERROR_1 \
- (MONGOOSEV_UART_FRAME_ERROR << MONGOOSEV_UART1_IRQ_SHIFT)
-#define MONGOOSEV_UART_RX_OVERRUN_ERROR_1 \
- (MONGOOSEV_UART_RX_OVERRUN_ERROR << MONGOOSEV_UART1_IRQ_SHIFT)
-#define MONGOOSEV_UART_TX_EMPTY_1 \
- (MONGOOSEV_UART_TX_EMPTY << MONGOOSEV_UART1_IRQ_SHIFT)
-#define MONGOOSEV_UART_TX_READY_1 \
- (MONGOOSEV_UART_TX_READY << MONGOOSEV_UART1_IRQ_SHIFT)
-#define MONGOOSEV_UART_RX_READY_1 \
- (MONGOOSEV_UART_RX_READY << MONGOOSEV_UART1_IRQ_SHIFT)
-
-/*
- * Bits in the Peripheral Interrupt Mask Register
- */
-
-/*
-** Interrupt Status/Cause/Mask register bits - from 31 to 0
-*/
-#define MONGOOSEV_EDAC_SERR_BIT 0x80000000
-#define MONGOOSEV_EDAC_MERR_BIT 0x40000000
-/* 29 - 24 reserved */
-#define MONGOOSEV_MAVN_WRITE_ACCESS 0x00800000
-#define MONGOOSEV_MAVN_READ_ACCESS 0x00400000
-#define MONGOOSEV_UART_1_RX_READY 0x00200000
-#define MONGOOSEV_UART_1_TX_READY 0x00100000
-#define MONGOOSEV_UART_1_TX_EMPTY 0x00080000
-#define MONGOOSEV_UART_1_RX_OVERRUN 0x00040000
-#define MONGOOSEV_UART_1_FRAME_ERROR 0x00020000
-#define MONGOOSEV_RESERVED_16 0x00010000
-#define MONGOOSEV_UART_0_RX_READY 0x00008000
-#define MONGOOSEV_UART_0_TX_READY 0x00004000
-#define MONGOOSEV_UART_0_TX_EMPTY 0x00002000
-#define MONGOOSEV_UART_0_RX_OVERRUN 0x00001000
-#define MONGOOSEV_UART_0_FRAME_ERROR 0x00000800
-#define MONGOOSEV_RESERVED_10 0x00000400
-#define MONGOOSEV_EXTERN_INT_9 0x00000200
-#define MONGOOSEV_EXTERN_INT_8 0x00000100
-#define MONGOOSEV_EXTERN_INT_7 0x00000080
-#define MONGOOSEV_EXTERN_INT_6 0x00000040
-#define MONGOOSEV_EXTERN_INT_5 0x00000020
-#define MONGOOSEV_EXTERN_INT_4 0x00000010
-#define MONGOOSEV_EXTERN_INT_3 0x00000008
-#define MONGOOSEV_EXTERN_INT_2 0x00000004
-#define MONGOOSEV_EXTERN_INT_1 0x00000002
-#define MONGOOSEV_EXTERN_INT_0 0x00000001
-
-
-/*
-** Peripheral Command bits (non-uart, those are defined above)
-*/
-#define MONGOOSEV_COMMAND_ENABLE_EDAC MONGOOSEV_EDAC_SERR_BIT
-#define MONGOOSEV_COMMAND_OVERRIDE_EDAC MONGOOSEV_EDAC_MERR_BIT
-
-
-
-/*
- * EDAC Registers
- */
-
-#define MONGOOSEV_EDAC_ERROR_ADDRESS_REGISTER 0xFFFE0190
-#define MONGOOSEV_EDAC_PARITY_TEST_MODE_REGISTER 0xFFFE0194
-
-/*
- * MAVN Registers
- */
-
-#define MONGOOSEV_MAVN_TEST_REGISTER 0xFFFE01B4
-#define MONGOOSEV_MAVN_ACCESS_PRIVILEGE_REGISTER 0xFFFE01B8
-#define MONGOOSEV_MAVN_ACCESS_VIOLATION_REGISTER 0xFFFE01BC
-#define MONGOOSEV_MAVN_RANGE_0_REGISTER 0xFFFE01C0
-#define MONGOOSEV_MAVN_RANGE_1_REGISTER 0xFFFE01C4
-#define MONGOOSEV_MAVN_RANGE_2_REGISTER 0xFFFE01C8
-#define MONGOOSEV_MAVN_RANGE_3_REGISTER 0xFFFE01CC
-#define MONGOOSEV_MAVN_RANGE_4_REGISTER 0xFFFE01D0
-#define MONGOOSEV_MAVN_RANGE_5_REGISTER 0xFFFE01D4
-#define MONGOOSEV_MAVN_RANGE_6_REGISTER 0xFFFE01D8
-#define MONGOOSEV_MAVN_RANGE_7_REGISTER 0xFFFE01DC
-
-/*
- * Timer Base Addresses, Offsets, and Values
- */
-
-#define MONGOOSEV_TIMER1_BASE 0xFFFE0000
-#define MONGOOSEV_TIMER2_BASE 0xFFFE0008
-
-#define MONGOOSEV_TIMER_INITIAL_COUNTER_REGISTER 0
-#define MONGOOSEV_TIMER_CONTROL_REGISTER 4
-
-/* Timer Control Register Constants */
-#define MONGOOSEV_TIMER_CONTROL_COUNTER_ENABLE 0x04
-#define MONGOOSEV_TIMER_CONTROL_INTERRUPT_ENABLE 0x02
-#define MONGOOSEV_TIMER_CONTROL_TIMEOUT 0x01
-
-/*
- * UART Base Addresses and Offsets
- *
- * Many bits in the peripheral command register are UART related
- * and the bits are defined there.
- */
-
-#define MONGOOSEV_UART0_BASE 0xFFFE01E8
-#define MONGOOSEV_UART1_BASE 0xFFFE01F4
-
-#define MONGOOSEV_RX_BUFFER 0
-#define MONGOOSEV_TX_BUFFER 4
-#define MONGOOSEV_BAUD_RATE 8
-
-
-/*
- * Status Register Bits
- */
-
-#define SR_CUMASK 0xf0000000 /* coproc usable bits */
-#define SR_CU3 0x80000000 /* Coprocessor 3 usable */
-#define SR_CU2 0x40000000 /* Coprocessor 2 usable */
-#define SR_CU1 0x20000000 /* Coprocessor 1 usable */
-#define SR_CU0 0x10000000 /* Coprocessor 0 usable */
-#define SR_BEV 0x00400000 /* use boot exception vectors */
-#define SR_TS 0x00200000 /* TLB shutdown */
-#define SR_PE 0x00100000 /* cache parity error */
-#define SR_CM 0x00080000 /* cache miss */
-#define SR_PZ 0x00040000 /* cache parity zero */
-#define SR_SWC 0x00020000 /* swap cache */
-#define SR_ISC 0x00010000 /* Isolate data cache */
-#define SR_IMASK 0x0000ff00 /* Interrupt mask */
-#define SR_IMASK8 0x00000000 /* mask level 8 */
-#define SR_IMASK7 0x00008000 /* mask level 7 */
-#define SR_IMASK6 0x0000c000 /* mask level 6 */
-#define SR_IMASK5 0x0000e000 /* mask level 5 */
-#define SR_IMASK4 0x0000f000 /* mask level 4 */
-#define SR_IMASK3 0x0000f800 /* mask level 3 */
-#define SR_IMASK2 0x0000fc00 /* mask level 2 */
-#define SR_IMASK1 0x0000fe00 /* mask level 1 */
-#define SR_IMASK0 0x0000ff00 /* mask level 0 */
-
-#define SR_IBIT8 0x00008000 /* bit level 8 */
-#define SR_IBIT7 0x00004000 /* bit level 7 */
-#define SR_IBIT6 0x00002000 /* bit level 6 */
-#define SR_IBIT5 0x00001000 /* bit level 5 */
-#define SR_IBIT4 0x00000800 /* bit level 4 */
-#define SR_IBIT3 0x00000400 /* bit level 3 */
-#define SR_IBIT2 0x00000200 /* bit level 2 */
-#define SR_IBIT1 0x00000100 /* bit level 1 */
-
-#define SR_KUO 0x00000020 /* old kernel/user, 0 => k, 1 => u */
-#define SR_IEO 0x00000010 /* old interrupt enable, 1 => enable */
-#define SR_KUP 0x00000008 /* prev kernel/user, 0 => k, 1 => u */
-#define SR_IEP 0x00000004 /* prev interrupt enable, 1 => enable */
-#define SR_KUC 0x00000002 /* cur kernel/user, 0 => k, 1 => u */
-#define SR_IEC 0x00000001 /* cur interrupt enable, 1 => enable */
-#define SR_KUMSK (SR_KUO|SR_IEO|SR_KUP|SR_IEP|SR_KUC|SR_IEC)
-
-#define SR_IMASKSHIFT 8
-
-
-
-#define MONGOOSEV_IC_SIZE 0x1000 /* instruction cache = 4Kbytes */
-#define MONGOOSEV_DC_SIZE 0x800 /* data cache 2Kbytes */
-
-#endif
diff --git a/c/src/lib/libcpu/mips/preinstall.am b/c/src/lib/libcpu/mips/preinstall.am
index 4a83d60..85aec82 100644
--- a/c/src/lib/libcpu/mips/preinstall.am
+++ b/c/src/lib/libcpu/mips/preinstall.am
@@ -26,20 +26,6 @@ $(PROJECT_INCLUDE)/libcpu/isr_entries.h: shared/interrupts/isr_entries.h $(PROJE
$(INSTALL_DATA) $< $(PROJECT_INCLUDE)/libcpu/isr_entries.h
PREINSTALL_FILES += $(PROJECT_INCLUDE)/libcpu/isr_entries.h
-if mongoosev
-$(PROJECT_INCLUDE)/libcpu/mongoose-v.h: mongoosev/include/mongoose-v.h $(PROJECT_INCLUDE)/libcpu/$(dirstamp)
- $(INSTALL_DATA) $< $(PROJECT_INCLUDE)/libcpu/mongoose-v.h
-PREINSTALL_FILES += $(PROJECT_INCLUDE)/libcpu/mongoose-v.h
-
-$(PROJECT_INCLUDE)/libchip/$(dirstamp):
- @$(MKDIR_P) $(PROJECT_INCLUDE)/libchip
- @: > $(PROJECT_INCLUDE)/libchip/$(dirstamp)
-PREINSTALL_DIRS += $(PROJECT_INCLUDE)/libchip/$(dirstamp)
-
-$(PROJECT_INCLUDE)/libchip/mg5uart.h: mongoosev/duart/mg5uart.h $(PROJECT_INCLUDE)/libchip/$(dirstamp)
- $(INSTALL_DATA) $< $(PROJECT_INCLUDE)/libchip/mg5uart.h
-PREINSTALL_FILES += $(PROJECT_INCLUDE)/libchip/mg5uart.h
-endif
if tx39
$(PROJECT_INCLUDE)/libcpu/tx3904.h: tx39/include/tx3904.h $(PROJECT_INCLUDE)/libcpu/$(dirstamp)
$(INSTALL_DATA) $< $(PROJECT_INCLUDE)/libcpu/tx3904.h
--
1.9.3
More information about the devel
mailing list