[PATCH 2/8] Move Mongoose-V specific devices into BSP.

Gedare Bloom gedare at rtems.org
Thu Oct 9 19:47:40 UTC 2014


I didn't read this, but you should consider doing some style cleanup
too (as a separate commit)

On Thu, Oct 9, 2014 at 2:39 PM, Joel Sherrill <joel.sherrill at oarcorp.com> wrote:
> 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
>
> _______________________________________________
> devel mailing list
> devel at rtems.org
> http://lists.rtems.org/mailman/listinfo/devel


More information about the devel mailing list