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.sherr...@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@rtems.org > http://lists.rtems.org/mailman/listinfo/devel _______________________________________________ devel mailing list devel@rtems.org http://lists.rtems.org/mailman/listinfo/devel