summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJoel Sherrill <joel.sherrill@OARcorp.com>2000-04-05 18:24:48 +0000
committerJoel Sherrill <joel.sherrill@OARcorp.com>2000-04-05 18:24:48 +0000
commitbb734ccaa87d48a19c2819debb6111e88cb7ced8 (patch)
treed3a88b867f2b5d6c41f52bc289c1453241654523
parentThis commit was manufactured by cvs2svn to create branch 'rtems-4-5-branch'. (diff)
downloadrtems-bb734ccaa87d48a19c2819debb6111e88cb7ced8.tar.bz2
Patch from Charles-Antoine Gauthier <charles.gauthier@iit.nrc.ca>
to update the mvme167 BSP and account for the fact that RAM base does not have to start at 0.
-rw-r--r--c/src/lib/libbsp/m68k/mvme167/Makefile.am8
-rw-r--r--c/src/lib/libbsp/m68k/mvme167/README108
-rw-r--r--c/src/lib/libbsp/m68k/mvme167/bsp_specs8
-rw-r--r--c/src/lib/libbsp/m68k/mvme167/configure.in4
-rw-r--r--c/src/lib/libbsp/m68k/mvme167/console/console.c122
-rw-r--r--c/src/lib/libbsp/m68k/mvme167/include/Makefile.am2
-rw-r--r--c/src/lib/libbsp/m68k/mvme167/include/bsp.h31
-rw-r--r--c/src/lib/libbsp/m68k/mvme167/network/Makefile.am6
-rw-r--r--c/src/lib/libbsp/m68k/mvme167/network/netexterns.h2
-rw-r--r--c/src/lib/libbsp/m68k/mvme167/network/uti596.h124
-rw-r--r--c/src/lib/libbsp/m68k/mvme167/startup/Makefile.am8
-rw-r--r--c/src/lib/libbsp/m68k/mvme167/startup/bspstart.c1
-rw-r--r--c/src/lib/libbsp/m68k/mvme167/startup/linkcmds227
-rw-r--r--c/src/lib/libbsp/m68k/mvme167/startup/page_table.c2
-rw-r--r--c/src/lib/libbsp/m68k/mvme167/wrapup/Makefile.am7
-rw-r--r--c/src/lib/libbsp/m68k/shared/m68kpretaskinghook.c3
-rw-r--r--make/custom/mvme167.cfg22
17 files changed, 430 insertions, 255 deletions
diff --git a/c/src/lib/libbsp/m68k/mvme167/Makefile.am b/c/src/lib/libbsp/m68k/mvme167/Makefile.am
index 73bafa0101..6b951e822b 100644
--- a/c/src/lib/libbsp/m68k/mvme167/Makefile.am
+++ b/c/src/lib/libbsp/m68k/mvme167/Makefile.am
@@ -7,7 +7,13 @@ ACLOCAL_AMFLAGS = -I $(RTEMS_TOPdir)/aclocal
# wrapup is the one that actually builds and installs the library
# from the individual .rel files built in other directories
-SUBDIRS = . include start startup clock console fatal timer wrapup
+
+if HAS_NETWORKING
+NETWORKING_DRIVER = network
+endif
+
+SUBDIRS = . include start startup clock console fatal timer \
+ $(NETWORKING_DRIVER) wrapup
include $(top_srcdir)/../../bsp.am
diff --git a/c/src/lib/libbsp/m68k/mvme167/README b/c/src/lib/libbsp/m68k/mvme167/README
index 9573e6cdeb..dc72a6fc48 100644
--- a/c/src/lib/libbsp/m68k/mvme167/README
+++ b/c/src/lib/libbsp/m68k/mvme167/README
@@ -2,18 +2,35 @@
# $Id$
#
-This is a README file for the MVME167 port of RTEMS 4.0.0.
+This is a README file for the MVME167 port of RTEMS 4.5.0.
Please send any comments, improvements, or bug reports to:
Charles-Antoine Gauthier
+charles.gauthier@nrc.ca
+or
+
+Darlene Stewart
+Darlene.Stewart@nrc.ca
+
Software Engineering Group
Institute for Information Technology
National Research Council of Canada
Ottawa, ON, K1A 0R6
Canada
-charles.gauthier@iit.nrc.ca
+
+WARNING:
+--------
+
+The network driver is currently being worked on. It is somewhat functional,
+but it does run out of buffers under certain conditions. The code is
+also undergoing a substantial reorganization. Before making any changes,
+you should check with us for the availability of updates.
+
+Note from Joel: The ttcp performance reported is very nice even if the
+driver is still early in its life. :)
+
Disclaimer
@@ -43,15 +60,15 @@ Installation
Nothing unique to the MVME167. It uses the standard build process for
m68k targets. You will need to edit linkcmds to put in the start address
of your board. We do TFTP transfers to our target. The mvme167.cfg file
-builds only the coff images, which we download to the target, skipping over
-the first 0xA8 bytes; Motorola S-records are not generated. Edit this file
-if you want S-records.
+builds only the ELF images, which we download to the target, skipping
+over the first 0x54 bytes; Motorola S-records are not generated. Edit
+this file if you want S-records.
Port Description
Console driver
-----------------
+---------------
This BSP includes an termios-capable console driver that supports all
four serial ports on the MVME167 model. The RTEMS console, /dev/console,
@@ -60,27 +77,30 @@ corresponds to channel 1 in the CD2401. This corresponds to Serial Port
do not open /dev/tty00 if you are debugging using 167Bug.
The console is initialized with whatever parameters are set up in termios
-before it calls the firtOpen driver callback, EXCEPT THAT HARDWARE HANDSHAKING
-IS TURNED OFF, i.e. CLOCAL is set in the struct termios c_cflag field. We use
-3-wire cables for I/O, and find hardware handshaking a pain. If you enable
-hardware handshaking, you must drive CTS* low on the CD2401 for output to
-occur. If the port is in the DTE configuration, you must drive the RS-232 CTS
-line to space; if the port is in the DCE configuration, you must drive the
-RS-232 RTS line to space.
-
-Limited support is provided for polled terminal I/O. This is used when running
-the timing tests. Set the CD2401_POLLED_IO manifest constant to 1 in
-rtems/c/src/lib/libbsp/m68k/mvme167/console/console.c to enable polled I/O.
-In this case, I/O is done through 167Bug, usually to the Serial Port 1/Console
+before it calls the firtOpen driver callback, EXCEPT THAT HARDWARE
+HANDSHAKING IS TURNED OFF, i.e. CLOCAL is set in the struct termios
+c_cflag field. We use 3-wire cables for I/O, and find hardware handshaking
+a pain. If you enable hardware handshaking, you must drive CTS* low on the
+CD2401 for output to occur. If the port is in the DTE configuration, you
+must drive the RS-232 CTS line to space; if the port is in the DCE
+configuration, you must drive the RS-232 RTS line to space.
+
+Limited support is provided for polled terminal I/O. This is used when
+running the timing tests. Set the CD2401_POLLED_IO manifest constant to 1
+in rtems/c/src/lib/libbsp/m68k/mvme167/console/console.c to enable polled
+I/O. In this case, I/O is done through 167Bug, usually to the Serial Port
+1/Console port. Interrupt-driven and polled I/O cannot be mixed in the
+MVME167.
+
Floating-point
The MC68040 has a built-in FPU. This FPU does not implement all the
-instruction of the MC68881/MC68882 floating-point coprocessors in hardware.
-The -m68040 compilation options instructs gcc to not generate the missing
-instructions. All of the RTEMS code is built this way. Some of the missing
-functionality must be supplied by external libraries. The required functions
-are part of libgcc.a.
+instruction of the MC68881/MC68882 floating-point coprocessors in
+hardware. The -m68040 compilation options instructs gcc to not generate
+the missing instructions. All of the RTEMS code is built this way. Some
+of the missing functionality must be supplied by external libraries. The
+required functions are part of libgcc.a.
The issue gets complicated because libc, libm and libgcc do not come as
m68040-specific variants. The default variants of these libraries are for the
@@ -127,9 +147,22 @@ mvme167.cfg that redefine which variants of libc, libm and libgcc to link
against.
-Miscellaneous
+Cache Control and Memory Mapping
+
+If Jumper J1-7 is installed, the data cache will be turned on. If Jumper
+J1-6 is installed, the instruction cache will be turned on. Removing the
+jumper causes the corresponding cache to be left disabled.
-port. Interrupt-driven and polled I/O cannot be mixed in the MVME167.
+If Jumper J1-5 is installed, the data cache will be placed in copyback
+mode. If it is removed, it will be placed in writethrough mode.
+
+Currently, block address translation is set up to map the virtual
+0x00000000--0x7FFFFFFF to the physical range 0x00000000--0x7FFFFFFF. The
+port relies on the hardware to raise exceptions when addressing
+non-existent memory. Caching is not controllable on a finer grain.
+
+
+Miscellaneous
The timer and clock drivers were patterned after the MVME162 and MVME152
ports.
@@ -137,8 +170,6 @@ ports.
At this time, we do not have an MPCI layer for the MVME167. We are planning
to write one.
-The port does not have a network driver.
-
This port supplies its own fatal_error_handler, which attempts to print some
error message through 167Bug (on the Serial Port 1/Console on the MVME712M).
@@ -153,17 +184,20 @@ tools were used:
m68k-rtems target;
- GNU binutils 2.9.1 configured for a powerpc-ibm-aix4.2.0.0 host and
m68k-rtems target;
+
It was also tested on a Pentium II-based PC running Windows NT Workstation 4.0
-and the Cygnus Cygwin32 release b20.1 environment, witht he following tools:
+and the Cygnus Cygwin32 release b20.1 environment, with the following tools:
- EGCS 1.1.1 configured for a i586-cygwin32 host and m68k-rtems target;
- GNU binutils 2.9.4 configured for a i586-cygwin32 host and m68k-rtems
target;
- - Cygnus newlib 1.8.0 with RTEMS 4.0.0 patches.
With the latter environment, be patient; builds take a very looong time...
- - Cygnus newlib 1.8.0 with RTEMS 4.0.0 patches.
+Current development is done on a Pentium III PC running RedHat Linux 6.1.
+At the time this README was composed, the latest working compiler that was
+used successfully was gcc version 2.96 20000213 (experimental). Both the C
+and C++ compilers were working. Binutils 2.9.1 are used.
Known Problems
@@ -202,6 +236,11 @@ blown. This is one case were overwritting the first or last 16 bytes of the
stack does cause problems (but hey, an exception occurred, which is better
than propagating the error).
+In the stackchk test, an access fault exception is raised after the stack is
+blown. This is one case were overwritting the first or last 16 bytes of the
+stack does cause problems (but hey, an exception occurred, which is better
+than propagating the error).
+
When using interrupt-driven I/O, psx08 produces all the expected output, but
it does not return control to 167Bug. Is this test supposed to work with
interrupt-driven console I/O?
@@ -210,6 +249,8 @@ interrupt-driven console I/O?
What's new
----------
+Support for Java is being actively worked on.
+
Thanks
------
@@ -460,10 +501,3 @@ Timing tests:
rtems_rate_monotonic_period: obtain status 13
-Network tests:
-
-The driver is currently being worked on. It is somewhat functional,
-but it does run out of buffers under certain conditions. The code is
-also undergoing a substantial reorganization. Before making any changes,
-you should check with us for the availability of updates.
-
diff --git a/c/src/lib/libbsp/m68k/mvme167/bsp_specs b/c/src/lib/libbsp/m68k/mvme167/bsp_specs
index 7ece396fb5..efee788065 100644
--- a/c/src/lib/libbsp/m68k/mvme167/bsp_specs
+++ b/c/src/lib/libbsp/m68k/mvme167/bsp_specs
@@ -7,15 +7,11 @@
*cpp:
%(old_cpp) %{qrtems: -D__embedded__} -Asystem(embedded)
-*endfile:
-%{qelf: crtend.o%s crtn.o%s}
-
*lib:
%{!qrtems: %(old_lib)} %{qrtems: --start-group \
%{!qrtems_debug: -lrtemsall} %{qrtems_debug: -lrtemsall_g} \
--lc -lgcc --end-group \
-%{!qelf: %{!qnolinkcmds: -T linkcmds%s}} %{qelf: %{!qnolinkcmd: -T
-linkcmds%s}}}
+%{qjava: -lffi -lzgcj -lgcj} %{qc++: -lstdc++} -lc -lgcc --end-group \
+%{!qnolinkcmds: -T linkcmds%s}}
*startfile:
%{!qrtems: %(old_startfile)} %{qrtems: \
diff --git a/c/src/lib/libbsp/m68k/mvme167/configure.in b/c/src/lib/libbsp/m68k/mvme167/configure.in
index 02052ba27e..3dd0750943 100644
--- a/c/src/lib/libbsp/m68k/mvme167/configure.in
+++ b/c/src/lib/libbsp/m68k/mvme167/configure.in
@@ -17,8 +17,11 @@ RTEMS_CANONICALIZE_TOOLS
RTEMS_ENV_RTEMSBSP
RTEMS_CHECK_CUSTOM_BSP(RTEMS_BSP)
RTEMS_CHECK_BSP_CACHE(RTEMS_BSP)
+RTEMS_CHECK_NETWORKING
RTEMS_CANONICAL_HOST
+AM_CONDITIONAL(HAS_NETWORKING,test "$HAS_NETWORKING" = "yes")
+
RTEMS_PROJECT_ROOT
# Explicitly list all Makefiles here
@@ -28,6 +31,7 @@ clock/Makefile
console/Makefile
fatal/Makefile
include/Makefile
+network/Makefile
start/Makefile
startup/Makefile
timer/Makefile
diff --git a/c/src/lib/libbsp/m68k/mvme167/console/console.c b/c/src/lib/libbsp/m68k/mvme167/console/console.c
index b1377aef38..4acb9fc8a1 100644
--- a/c/src/lib/libbsp/m68k/mvme167/console/console.c
+++ b/c/src/lib/libbsp/m68k/mvme167/console/console.c
@@ -2,22 +2,24 @@
* console.c
*
* This file contains the MVME167 termios console package. Only asynchronous
- * I/O is supported. Normal I/O uses DMA for output, interrupts for input.
- * Very limited support is provided for polled I/O. Polled I/O is intended
- * only for running the RTEMS test suites, and uses the 167Bug console only.
+ * I/O is supported.
*
* /dev/tty0 is channel 0, Serial Port 1/Console on the MVME712M.
* /dev/tty1 is channel 1, Serial Port 2/TTY01 on the MVME712M.
* /dev/tty2 is channel 2, Serial Port 3 on the MVME712M.
* /dev/tty3 is channel 3, Serial Port 4 on the MVME712M.
*
- * /dev/console is fixed to be /dev/tty01, Serial Port 2. 167Bug is given
- * Serial Port 1/Console. Do not open /dev/tty00.
+ * Normal I/O uses DMA for output, interrupts for input. /dev/console is
+ * fixed to be /dev/tty01, Serial Port 2. Very limited support is provided
+ * for polled I/O. Polled I/O is intended only for running the RTEMS test
+ * suites. In all cases, Serial Port 1/Console is allocated to 167Bug and
+ * is the dedicated debugger port. We configure GDB to use 167Bug for
+ * debugging. When debugging with GDB or 167Bug, do not open /dev/tty00.
*
* Modern I/O chips often contain a number of I/O devices that can operate
* almost independently of each other. Typically, in RTEMS, all devices in
* an I/O chip are handled by a single device driver, but that need not be
- * always the case. Each device driver must supply six entry points in the
+ * always the case. Each device driver must supply six entry points in the
* Device Driver Table: a device initialization function, as well as an open,
* close, read, write and a control function. RTEMS assigns a device major
* number to each device driver. This major device number is the index of the
@@ -59,7 +61,7 @@
* Worse, it requires that the sub-devices be initialized in some
* configuration, and that configuration then changed through a series of
* device driver control calls. There is no standard API in RTEMS to switch
- * a serial line to some synchronous protocol.
+ * a serial line to some synchronous protocol.
*
* A better approach is to treat each channel as a separate device, each with
* its own device device driver. The application then supplies its own device
@@ -96,7 +98,7 @@
* THIS MODULE IS NOT RE-ENTRANT! Simultaneous access to a device from
* multiple tasks is likely to cause significant problems! Concurrency
* control is implemented in the termios package.
-*
+ *
* THE INTERRUPT LEVEL IS SET TO 1 FOR ALL CHANNELS.
* If the CD2401 is to be used for high speed synchronous serial I/O, the
* interrupt priority might need to be increased.
@@ -125,13 +127,12 @@
#define M167_INIT
+#include <stdarg.h>
+#include <stdio.h>
#include <termios.h>
#include <bsp.h> /* Must be before libio.h */
#include <rtems/libio.h>
-#define CD2401_INT_LEVEL 1 /* Interrupt level for the CD2401 */
-#define CD2401_POLLED_IO 0 /* 0 for interrupt-driven, 1 for polled I/O */
-
/* Channel info */
/* static */ struct {
@@ -569,7 +570,7 @@ rtems_isr cd2401_tx_isr(
if ( status & 0x20 ) {
/* DMA done */
cd2401->ier &= 0xFC; /* Shut up the interrupts */
-
+
/* This call can result in a call to cd2401_write() */
rtems_termios_dequeue_characters (
CD2401_Channel_Info[ch].tty,
@@ -634,7 +635,7 @@ int cd2401_firstOpen(
sc = rtems_termios_ioctl (&newarg);
if (sc != RTEMS_SUCCESSFUL)
rtems_fatal_error_occurred (sc);
-
+
/*
* Turn off hardware flow control. It is a pain with 3-wire cables.
* The rtems_termios_ioctl() call below results in a call to
@@ -646,7 +647,7 @@ int cd2401_firstOpen(
sc = rtems_termios_ioctl (&newarg);
if (sc != RTEMS_SUCCESSFUL)
rtems_fatal_error_occurred (sc);
-
+
/* Mark that the channel as initialized */
CD2401_Channel_Info[minor].tty = args->iop->data1;
@@ -876,10 +877,10 @@ int cd2401_setAttributes(
else
istrip = 0; /* Leave as 8 bits */
-
+
/* Clear channel and disable rx and tx */
cd2401_chan_cmd (minor, 0x40, 1);
-
+
/* Write to the ports */
cd2401->car = minor; /* Select channel */
cd2401->cmr = 0x42; /* Interrupt Rx, DMA Tx, async mode */
@@ -1079,24 +1080,28 @@ int _167Bug_pollRead(
{
int char_not_available;
unsigned char c;
-
+
/* Check for a char in the input FIFO */
- asm volatile( "trap #15 /* Trap to 167Bug (.INSTAT) */
- .short 0x01
- move %%cc, %0 /* Get condition codes */
- andil #4, %0"
- : "=d" (char_not_available) :: "%%cc" );
-
+ asm volatile( "movew #0x1, -(%%sp) /* Code for .INSTAT */
+ movew %1, -(%%sp) /* Channel */
+ trap #15 /* Trap to 167Bug */
+ .short 0x60 /* Code for .REDIR */
+ move %%cc, %0 /* Get condition codes */
+ andil #4, %0" /* Keep the Zero bit */
+ : "=d" (char_not_available) : "d" (minor): "%%cc" );
+
if (char_not_available)
return -1;
-
+
/* Read the char and return it */
- asm volatile( "subq.l #2,%%a7 /* Space for result */
- trap #15 /* Trap to 167 Bug (.INCHR) */
- .short 0x00
- moveb (%%a7)+, %0"
- : "=d" (c) );
-
+ asm volatile( "subq.l #2,%%a7 /* Space for result */
+ movew #0x0, -(%%sp) /* Code for .INCHR */
+ movew %1, -(%%sp) /* Channel */
+ trap #15 /* Trap to 167 Bug */
+ .short 0x60 /* Code for .REDIR */
+ moveb (%%a7)+, %0" /* Pop char into c */
+ : "=d" (c) : "d" (minor) );
+
return (int)c;
}
@@ -1105,7 +1110,7 @@ int _167Bug_pollRead(
* _167Bug_pollWrite
*
* Output buffer through 167Bug. Returns only once every character has been
- * sent (polled output).
+ * sent (polled output).
*
* Input parameters:
* minor - selected channel
@@ -1127,19 +1132,56 @@ int _167Bug_pollWrite(
)
{
const char *endbuf = buf + len;
-
- asm volatile( "pea (%0)
- pea (%1)
- trap #15 /* trap to 167Bug (.OUTSTR) */
- .short 0x21"
- :: "a" (endbuf), "a" (buf) );
-
+
+ asm volatile( "pea (%0) /* endbuf */
+ pea (%1) /* buf */
+ movew #0x21, -(%%sp) /* Code for .OUTSTR */
+ movew %2, -(%%sp) /* Channel */
+ trap #15 /* Trap to 167Bug */
+ .short 0x60" /* Code for .REDIR */
+ :: "a" (endbuf), "a" (buf), "d" (minor) );
+
/* Return something */
return RTEMS_SUCCESSFUL;
}
/*
+ * Print functions: prototyped in bsp.h
+ * Debug printing on Channel 1
+ */
+
+void printk( char *fmt, ... )
+{
+ va_list ap; /* points to each unnamed argument in turn */
+ static char buf[256];
+ unsigned int level;
+
+ _CPU_ISR_Disable(level);
+
+ va_start(ap, fmt); /* make ap point to 1st unnamed arg */
+ vsprintf(buf, fmt, ap); /* send output to buffer */
+
+ BSP_output_string(buf); /* print buffer -- Channel 1 */
+
+ va_end(ap); /* clean up and re-enable interrupts */
+ _CPU_ISR_Enable(level);
+}
+
+
+void BSP_output_string( char * buf )
+{
+ int len = strlen(buf);
+ rtems_status_code sc;
+
+ /* The first argument forces a print to Port2 (ttyS1) */
+ sc = _167Bug_pollWrite(1, buf, len);
+ if (sc != RTEMS_SUCCESSFUL)
+ rtems_fatal_error_occurred (sc);
+}
+
+
+/*
***************
* BOILERPLATE *
***************
@@ -1229,7 +1271,7 @@ rtems_device_driver console_open(
NULL, /* startRemoteTx */
0 /* outputUsesInterrupts */
};
-
+
#else
static const rtems_termios_callbacks callbacks = {
@@ -1242,7 +1284,7 @@ rtems_device_driver console_open(
cd2401_startRemoteTx, /* startRemoteTx */
1 /* outputUsesInterrupts */
};
-
+
#endif
return rtems_termios_open (major, minor, arg, &callbacks);
diff --git a/c/src/lib/libbsp/m68k/mvme167/include/Makefile.am b/c/src/lib/libbsp/m68k/mvme167/include/Makefile.am
index 8aed70bc55..cec9878eb3 100644
--- a/c/src/lib/libbsp/m68k/mvme167/include/Makefile.am
+++ b/c/src/lib/libbsp/m68k/mvme167/include/Makefile.am
@@ -25,7 +25,7 @@ TMPINSTALL_FILES += $(PROJECT_INCLUDE) $(PROJECT_INCLUDE)/bsp.h \
$(PROJECT_INCLUDE)/coverhd.h $(PROJECT_INCLUDE)/page_table.h \
$(PROJECT_INCLUDE)/fatal.h
-all-local: $(TMPINSTALL_FILES)
+all: $(TMPINSTALL_FILES)
EXTRA_DIST = bsp.h coverhd.h fatal.h page_table.h
diff --git a/c/src/lib/libbsp/m68k/mvme167/include/bsp.h b/c/src/lib/libbsp/m68k/mvme167/include/bsp.h
index f449e201e3..50bea62dfb 100644
--- a/c/src/lib/libbsp/m68k/mvme167/include/bsp.h
+++ b/c/src/lib/libbsp/m68k/mvme167/include/bsp.h
@@ -33,6 +33,15 @@ extern "C" {
/*
+ * Network driver configuration
+ */
+
+struct rtems_bsdnet_ifconfig;
+extern int uti596_attach(struct rtems_bsdnet_ifconfig * pConfig );
+#define RTEMS_BSP_NETWORK_DRIVER_NAME "uti1"
+#define RTEMS_BSP_NETWORK_DRIVER_ATTACH uti596_attach
+
+/*
* This is NOT the base address of local RAM!
* This is the base local address of the VMEbus short I/O space. A local
* access to this space results in a A16 VMEbus I/O cycle. This base address
@@ -396,6 +405,28 @@ typedef volatile struct cd2401_regs_ {
void console_reserve_resources( rtems_configuration_table *configuration );
+/*
+ * Debug print functions: implemented in console.c
+ */
+void printk( char *fmt, ... );
+void BSP_output_string( char * buf );
+
+/*
+ * Representation of 82596CA LAN controller: Memory Map
+ */
+typedef volatile struct i82596_regs_ {
+ unsigned short port_lower; /* 0xFFF46000 */
+ unsigned short port_upper; /* 0xFFF46002 */
+ unsigned long chan_attn; /* 0xFFF46004 */
+} i82596_regs;
+
+/*
+ * Base address of the 82596.
+ */
+#define i82596 ((i82596_regs * const) 0xFFF46000)
+
+
+
/* BSP-wide functions */
void bsp_cleanup( void );
diff --git a/c/src/lib/libbsp/m68k/mvme167/network/Makefile.am b/c/src/lib/libbsp/m68k/mvme167/network/Makefile.am
index 601d7cd3e2..39748333b3 100644
--- a/c/src/lib/libbsp/m68k/mvme167/network/Makefile.am
+++ b/c/src/lib/libbsp/m68k/mvme167/network/Makefile.am
@@ -9,7 +9,7 @@ PGM = $(ARCH)/network.rel
C_FILES = network.c
C_O_FILES = $(C_FILES:%.c=$(ARCH)/%.o)
-H_FILES = uti596.h
+H_FILES = netexterns.h uti596.h
OBJS = $(C_O_FILES)
@@ -20,6 +20,8 @@ include $(top_srcdir)/../../../../../../automake/lib.am
# (OPTIONAL) Add local stuff here using +=
#
+AM_CPPFLAGS += -D__INSIDE_RTEMS_BSD_TCPIP_STACK__
+
$(PGM): $(OBJS)
$(make-rel)
@@ -31,6 +33,6 @@ endif
.PRECIOUS: $(PGM)
-EXTRA_DIST = network.c uti596.h
+EXTRA_DIST = network.c netexterns.h uti596.h
include $(top_srcdir)/../../../../../../automake/local.am
diff --git a/c/src/lib/libbsp/m68k/mvme167/network/netexterns.h b/c/src/lib/libbsp/m68k/mvme167/network/netexterns.h
index 76259b7bae..4ad43f2231 100644
--- a/c/src/lib/libbsp/m68k/mvme167/network/netexterns.h
+++ b/c/src/lib/libbsp/m68k/mvme167/network/netexterns.h
@@ -11,7 +11,7 @@
extern int uti596_attach(struct rtems_bsdnet_ifconfig *);
extern int uti596dump(char * );
-extern void uti596reset(void);
+extern void uti596reset(void);
extern void uti596Diagnose(int);
extern void uti596_request_reset(void);
diff --git a/c/src/lib/libbsp/m68k/mvme167/network/uti596.h b/c/src/lib/libbsp/m68k/mvme167/network/uti596.h
index 5757767526..8b7a2067ab 100644
--- a/c/src/lib/libbsp/m68k/mvme167/network/uti596.h
+++ b/c/src/lib/libbsp/m68k/mvme167/network/uti596.h
@@ -1,4 +1,5 @@
+
/* uti596.h: Contains the defines and structures used by the uti596 driver */
/*
@@ -26,30 +27,30 @@
/* Ethernet statistics */
struct enet_statistics{
- int rx_packets; /* total packets received */
- int tx_packets; /* total packets transmitted */
- int rx_errors; /* bad packets received */
- int tx_errors; /* packet transmit problems */
- int rx_dropped; /* no space in buffers */
- int tx_dropped;
+ int rx_packets; /* total packets received */
+ int tx_packets; /* total packets transmitted */
+ int rx_errors; /* bad packets received */
+ int tx_errors; /* packet transmit problems */
+ int rx_dropped; /* no space in buffers */
+ int tx_dropped;
int tx_retries_exceeded; /* excessive retries */
- int multicast; /* multicast packets received */
- int collisions;
+ int multicast; /* multicast packets received */
+ int collisions;
/* detailed rx_errors: */
- int rx_length_errors;
- int rx_over_errors; /* receiver ring buff overflow */
- int rx_crc_errors; /* recved pkt with crc error */
- int rx_frame_errors; /* recv'd frame alignment error */
- int rx_fifo_errors; /* recv'r fifo overrun */
- int rx_missed_errors; /* receiver missed packet */
+ int rx_length_errors;
+ int rx_over_errors; /* receiver ring buff overflow */
+ int rx_crc_errors; /* recved pkt with crc error */
+ int rx_frame_errors; /* recv'd frame alignment error */
+ int rx_fifo_errors; /* recv'r fifo overrun */
+ int rx_missed_errors; /* receiver missed packet */
/* detailed tx_errors */
- int tx_aborted_errors;
- int tx_carrier_errors;
- int tx_fifo_errors;
- int tx_heartbeat_errors;
- int tx_window_errors;
+ int tx_aborted_errors;
+ int tx_carrier_errors;
+ int tx_fifo_errors;
+ int tx_heartbeat_errors;
+ int tx_window_errors;
/* NIC reset errors */
int nic_reset_count; /* The number of times uti596reset() has been called. */
@@ -58,62 +59,62 @@ struct enet_statistics{
#define UTI596_MUTEX 1
-#define CMD_EOL 0x8000 /* The last command of the list, stop. */
-#define CMD_SUSP 0x4000 /* Suspend after doing cmd. */
-#define CMD_INTR 0x2000 /* Interrupt after doing cmd. */
+#define CMD_EOL 0x8000 /* The last command of the list, stop. */
+#define CMD_SUSP 0x4000 /* Suspend after doing cmd. */
+#define CMD_INTR 0x2000 /* Interrupt after doing cmd. */
-#define CMD_FLEX 0x0008 /* Enable flexible memory model */
+#define CMD_FLEX 0x0008 /* Enable flexible memory model */
-#define SCB_STAT_CX 0x8000 /* Cmd completes with 'I' bit set */
-#define SCB_STAT_FR 0x4000 /* Frame Received */
-#define SCB_STAT_CNA 0x2000 /* Cmd unit Not Active */
-#define SCB_STAT_RNR 0x1000 /* Receiver Not Ready */
+#define SCB_STAT_CX 0x8000 /* Cmd completes with 'I' bit set */
+#define SCB_STAT_FR 0x4000 /* Frame Received */
+#define SCB_STAT_CNA 0x2000 /* Cmd unit Not Active */
+#define SCB_STAT_RNR 0x1000 /* Receiver Not Ready */
#define SCB_CUS_SUSPENDED 0x0100
#define SCB_CUS_ACTIVE 0x0200
-#define STAT_C 0x8000 /* Set to 1 after execution */
-#define STAT_B 0x4000 /* 1 : Cmd being executed, 0 : Cmd done. */
-#define STAT_OK 0x2000 /* 1: Command executed ok 0 : Error */
-#define STAT_A 0x1000 /* command has been aborted */
+#define STAT_C 0x8000 /* Set to 1 after execution */
+#define STAT_B 0x4000 /* 1 : Cmd being executed, 0 : Cmd done. */
+#define STAT_OK 0x2000 /* 1: Command executed ok 0 : Error */
+#define STAT_A 0x1000 /* command has been aborted */
-#define STAT_S11 0x0800
-#define STAT_S10 0x0400
-#define STAT_S9 0x0200
-#define STAT_S8 0x0100
-#define STAT_S7 0x0080
-#define STAT_S6 0x0040
-#define STAT_S5 0x0020
-#define STAT_MAX_COLLS 0x000F
+#define STAT_S11 0x0800
+#define STAT_S10 0x0400
+#define STAT_S9 0x0200
+#define STAT_S8 0x0100
+#define STAT_S7 0x0080
+#define STAT_S6 0x0040
+#define STAT_S5 0x0020
+#define STAT_MAX_COLLS 0x000F
-#define RBD_STAT_P 0x4000 /* prefetch */
-#define RBD_STAT_F 0x4000 /* used */
+#define RBD_STAT_P 0x4000 /* prefetch */
+#define RBD_STAT_F 0x4000 /* used */
-#define CUC_START 0x0100
-#define CUC_RESUME 0x0200
-#define CUC_SUSPEND 0x0300
-#define CUC_ABORT 0x0400
-#define RX_START 0x0010
-#define RX_RESUME 0x0020
-#define RX_SUSPEND 0x0030
-#define RX_ABORT 0x0040
+#define CUC_START 0x0100
+#define CUC_RESUME 0x0200
+#define CUC_SUSPEND 0x0300
+#define CUC_ABORT 0x0400
+#define RX_START 0x0010
+#define RX_RESUME 0x0020
+#define RX_SUSPEND 0x0030
+#define RX_ABORT 0x0040
-#define RU_SUSPENDED 0x0010
-#define RU_NO_RESOURCES 0x0020
-#define RU_READY 0x0040
+#define RU_SUSPENDED 0x0010
+#define RU_NO_RESOURCES 0x0020
+#define RU_READY 0x0040
-#define IO_ADDR 0x360
-#define PORT_ADDR IO_ADDR
-#define CHAN_ATTN PORT_ADDR + 4
-#define NIC_ADDR PORT_ADDR + 8
+#define IO_ADDR 0x360
+#define PORT_ADDR IO_ADDR
+#define CHAN_ATTN PORT_ADDR + 4
+#define NIC_ADDR PORT_ADDR + 8
#define I596_NULL ( ( void * ) 0xffffffff)
#define UTI_596_END_OF_FRAME 0x8000
-#define SIZE_MASK 0x3fff
+#define SIZE_MASK 0x3fff
struct i596_tbd;
@@ -271,9 +272,9 @@ typedef volatile struct uti596_softc {
i596_cmd *pCmdHead;
i596_cmd *pCmdTail; /* unneeded, as chaining not used, but implemented */
- rtems_id rxDaemonTid;
- rtems_id txDaemonTid;
- rtems_id resetDaemonTid;
+ rtems_id rxDaemonTid;
+ rtems_id txDaemonTid;
+ rtems_id resetDaemonTid;
struct enet_statistics stats;
int started;
@@ -281,7 +282,7 @@ typedef volatile struct uti596_softc {
unsigned long txInterrupts;
volatile int cmdOk;
int resetDone;
- unsigned long txRawWait;
+ unsigned long txRawWait;
i596_rfd *pInboundFrameQueue;
short int rxBdCount;
short int txBdCount;
@@ -296,3 +297,4 @@ typedef volatile struct uti596_softc {
} uti596_softc_;
#endif /* UTI596_H */
+
diff --git a/c/src/lib/libbsp/m68k/mvme167/startup/Makefile.am b/c/src/lib/libbsp/m68k/mvme167/startup/Makefile.am
index c062ffd507..59a0080d0c 100644
--- a/c/src/lib/libbsp/m68k/mvme167/startup/Makefile.am
+++ b/c/src/lib/libbsp/m68k/mvme167/startup/Makefile.am
@@ -32,16 +32,12 @@ $(PGM): $(OBJS)
$(PROJECT_RELEASE)/lib/linkcmds: linkcmds
$(INSTALL_DATA) $< $@
-$(PROJECT_RELEASE)/lib/elflinkcmds: elflinkcmds
- $(INSTALL_DATA) $< $@
-
-TMPINSTALL_FILES += $(PROJECT_RELEASE)/lib/linkcmds \
- $(PROJECT_RELEASE)/lib/elflinkcmds
+TMPINSTALL_FILES += $(PROJECT_RELEASE)/lib/linkcmds
all-local: $(ARCH) $(OBJS) $(PGM) $(TMPINSTALL_FILES)
.PRECIOUS: $(PGM)
-EXTRA_DIST = bspclean.c bspstart.c elflinkcmds linkcmds page_table.c
+EXTRA_DIST = bspclean.c bspstart.c linkcmds page_table.c
include $(top_srcdir)/../../../../../../automake/local.am
diff --git a/c/src/lib/libbsp/m68k/mvme167/startup/bspstart.c b/c/src/lib/libbsp/m68k/mvme167/startup/bspstart.c
index f443a48153..643e0276f8 100644
--- a/c/src/lib/libbsp/m68k/mvme167/startup/bspstart.c
+++ b/c/src/lib/libbsp/m68k/mvme167/startup/bspstart.c
@@ -81,7 +81,6 @@ void bsp_start( void )
{
extern void *_WorkspaceBase;
extern m68k_isr_entry M68Kvec[];
- extern void *_WorkspaceBase;
void M68KFPSPInstallExceptionHandlers (void);
diff --git a/c/src/lib/libbsp/m68k/mvme167/startup/linkcmds b/c/src/lib/libbsp/m68k/mvme167/startup/linkcmds
index 9cbf889dd7..c22f578905 100644
--- a/c/src/lib/libbsp/m68k/mvme167/startup/linkcmds
+++ b/c/src/lib/libbsp/m68k/mvme167/startup/linkcmds
@@ -22,11 +22,11 @@ OUTPUT_ARCH(m68k)
ENTRY(_start)
/*
- * Declare some sizes.
+ * Declare some sizes. Heap is sized at whatever ram space is left.
*/
-_RamBase = 0x00800000;
+_RamBase = DEFINED(_RamBase) ? _RamBase : 0x00800000;
_RamSize = DEFINED(_RamSize) ? _RamSize : 4M;
-_HeapSize = DEFINED(_HeapSize) ? _HeapSize : 0x10000;
+_HeapSize = DEFINED(_HeapSize) ? _HeapSize : 0;
_StackSize = DEFINED(_StackSize) ? _StackSize : 0x1000;
MEMORY
@@ -42,103 +42,144 @@ MEMORY
SECTIONS
{
- ram : {
- . = .;
- } >ram
+ /*
+ * Text, data and bss segments
+ */
+ .text : {
+ *(.text)
- /*
- * Text, data and bss segments
- */
- .text : {
- *(.text)
+ /*
+ * C++ constructors/destructors
+ */
+ *(.gnu.linkonce.t.*)
- /*
- * C++ constructors/destructors
- */
- *(.gnu.linkonce.t.*)
+ /*
+ * Initialization and finalization code.
+ *
+ * Various files can provide initialization and finalization
+ * functions. crtbegin.o and crtend.o are two instances. The
+ * body of these functions are in .init and .fini sections. We
+ * accumulate the bodies here, and prepend function prologues
+ * from crti.o and function epilogues from crtn.o. crti.o must
+ * be linked first; crtn.o must be linked last. Because these
+ * are wildcards, it doesn't matter if the user does not
+ * actually link against crti.o and crtn.o; the linker won't
+ * look for a file to match a wildcard. The wildcard also
+ * means that it doesn't matter which directory crti.o and
+ * crtn.o are in.
+ */
+ PROVIDE (_init = .);
+ *crti.o(.init)
+ *(.init)
+ *crtn.o(.init)
+
+ PROVIDE (_fini = .);
+ *crti.o(.fini)
+ *(.fini)
+ *crtn.o(.fini)
- /*
- * Initialization and finalization code.
- *
- * Various files can provide initialization and finalization
- * functions. crtbegin.o and crtend.o are two instances. The
- * body of these functions are in .init and .fini sections. We
- * accumulate the bodies here, and prepend function prologues
- * from crti.o and function epilogues from crtn.o. crti.o must
- * be linked first; crtn.o must be linked last. Because these
- * are wildcards, it doesn't matter if the user does not
- * actually link against crti.o and crtn.o; the linker won't
- * look for a file to match a wildcard. The wildcard also
- * means that it doesn't matter which directory crti.o and
- * crtn.o are in.
- */
- PROVIDE (_init = .);
- *crti.o(.init)
- *(.init)
- *crtn.o(.init)
- PROVIDE (_fini = .);
- *crti.o(.fini)
- *(.fini)
- *crtn.o(.fini)
+ /*
+ * C++ constructors/destructors
+ *
+ * gcc uses crtbegin.o to find the start of the constructors
+ * and destructors so we make sure it is first. Because this
+ * is a wildcard, it doesn't matter if the user does not
+ * actually link against crtbegin.o; the linker won't look for
+ * a file to match a wildcard. The wildcard also means that
+ * it doesn't matter which directory crtbegin.o is in. The
+ * constructor and destructor list are terminated in
+ * crtend.o. The same comments apply to it.
+ */
+ . = ALIGN (16);
+ *crtbegin.o(.ctors)
+ *(.ctors)
+ *crtend.o(.ctors)
+
+ *crtbegin.o(.dtors)
+ *(.dtors)
+ *crtend.o(.dtors)
- /*
- * C++ constructors/destructors
- *
- * gcc uses crtbegin.o to find the start of the constructors
- * and destructors so we make sure it is first. Because this
- * is a wildcard, it doesn't matter if the user does not
- * actually link against crtbegin.o; the linker won't look for
- * a file to match a wildcard. The wildcard also means that
- * it doesn't matter which directory crtbegin.o is in. The
- * constructor and destructor list are terminated in
- * crtend.o. The same comments apply to it.
- */
- . = ALIGN (16);
- *crtbegin.o(.ctors)
- *(.ctors)
- *crtend.o(.ctors)
- *crtbegin.o(.dtors)
- *(.dtors)
- *crtend.o(.dtors)
+ /*
+ * Exception frame info
+ */
+ . = ALIGN (16);
+ *(.eh_frame)
- /*
- * Exception frame info
- */
- . = ALIGN (16);
- *(.eh_frame)
+ /*
+ * Read-only data
+ */
+ . = ALIGN (16);
+ PROVIDE(_rodata_start = . );
+ *(.rodata)
+ *(.gnu.linkonce.r*)
+ PROVIDE(_erodata = . );
- /*
- * Read-only data
- */
- . = ALIGN (16);
- _rodata_start = . ;
- *(.rodata)
- *(.gnu.linkonce.r*)
+ . = ALIGN (16);
+ PROVIDE (_etext = .);
+ } >ram
+
+ .data : {
+ PROVIDE (_copy_start = .);
+ *(.data)
+ *(.gnu.linkonce.d*)
+ *(.gcc_except_table)
+ . = ALIGN (16);
+ PROVIDE (_edata = .);
+ PROVIDE (_copy_end = .);
+ } >ram
+
+ .bss : {
+ _clear_start = .;
+ *(.bss)
+ *(COMMON)
+ . = ALIGN (16);
+ PROVIDE (end = .);
- . = ALIGN (16);
- PROVIDE (_etext = .);
- } >ram
- .data : {
- PROVIDE (_copy_start = .);
- *(.data)
- *(.gnu.linkonce.d*)
- *(.gcc_except_table)
- . = ALIGN (16);
- PROVIDE (_edata = .);
- PROVIDE (_copy_end = .);
- } >ram
- .bss : {
- _clear_start = .;
- *(.bss)
- *(COMMON)
- . = ALIGN (16);
- PROVIDE (end = .);
+ . += _StackSize;
+ . = ALIGN (16);
+ _stack_init = .;
+ _clear_end = .;
- . += _StackSize;
- . = ALIGN (16);
- _stack_init = .;
- _clear_end = .;
+ _WorkspaceBase = .;
+ } >ram
- _WorkspaceBase = .;
- } >ram
+ /* Stabs debugging sections. */
+ .stab 0 : { *(.stab) }
+ .stabstr 0 : { *(.stabstr) }
+ .stab.excl 0 : { *(.stab.excl) }
+ .stab.exclstr 0 : { *(.stab.exclstr) }
+ .stab.index 0 : { *(.stab.index) }
+ .stab.indexstr 0 : { *(.stab.indexstr) }
+ .comment 0 : { *(.comment) }
+
+ /* DWARF debug sections.
+ Symbols in the DWARF debugging sections are relative to the beginning
+ of the section so we begin them at 0. */
+ /* DWARF 1 */
+ .debug 0 : { *(.debug) }
+ .line 0 : { *(.line) }
+
+ /* GNU DWARF 1 extensions */
+ .debug_srcinfo 0 : { *(.debug_srcinfo) }
+ .debug_sfnames 0 : { *(.debug_sfnames) }
+
+ /* DWARF 1.1 and DWARF 2 */
+ .debug_aranges 0 : { *(.debug_aranges) }
+ .debug_pubnames 0 : { *(.debug_pubnames) }
+
+ /* DWARF 2 */
+ .debug_info 0 : { *(.debug_info) }
+ .debug_abbrev 0 : { *(.debug_abbrev) }
+ .debug_line 0 : { *(.debug_line) }
+ .debug_frame 0 : { *(.debug_frame) }
+ .debug_str 0 : { *(.debug_str) }
+ .debug_loc 0 : { *(.debug_loc) }
+ .debug_macinfo 0 : { *(.debug_macinfo) }
+
+ /* SGI/MIPS DWARF 2 extensions */
+ .debug_weaknames 0 : { *(.debug_weaknames) }
+ .debug_funcnames 0 : { *(.debug_funcnames) }
+ .debug_typenames 0 : { *(.debug_typenames) }
+ .debug_varnames 0 : { *(.debug_varnames) }
+ /* These must appear regardless of . */
}
diff --git a/c/src/lib/libbsp/m68k/mvme167/startup/page_table.c b/c/src/lib/libbsp/m68k/mvme167/startup/page_table.c
index 5d44f3159b..ebbcc9739d 100644
--- a/c/src/lib/libbsp/m68k/mvme167/startup/page_table.c
+++ b/c/src/lib/libbsp/m68k/mvme167/startup/page_table.c
@@ -79,7 +79,7 @@ void page_table_init(
* E = 0b1 enable address translation
* S-Field = 0b1X ignore FC2 when matching
* U1, U0 = 0b00 user page attributes not used
- * CM = 0b01 cachable, writethrough
+ * CM = 0b01 cachable, copyback
* W = 0b0 read/write access allowed
*/
dtt0 = 0x007FC020;
diff --git a/c/src/lib/libbsp/m68k/mvme167/wrapup/Makefile.am b/c/src/lib/libbsp/m68k/mvme167/wrapup/Makefile.am
index 2e1392ca6d..cf6c8ecb38 100644
--- a/c/src/lib/libbsp/m68k/mvme167/wrapup/Makefile.am
+++ b/c/src/lib/libbsp/m68k/mvme167/wrapup/Makefile.am
@@ -4,7 +4,12 @@
AUTOMAKE_OPTIONS = foreign 1.4
-BSP_PIECES = clock console fatal startup timer
+# We only build the networking device driver if HAS_NETWORKING was defined
+if HAS_NETWORKING
+NETWORKING_DRIVER = network
+endif
+
+BSP_PIECES = clock console fatal startup timer $(NETWORKING_DRIVER)
# bummer; have to use $foreach since % pattern subst rules only replace 1x
OBJS = $(foreach piece, $(BSP_PIECES), $(wildcard ../$(piece)/$(ARCH)/*.o)) \
diff --git a/c/src/lib/libbsp/m68k/shared/m68kpretaskinghook.c b/c/src/lib/libbsp/m68k/shared/m68kpretaskinghook.c
index b81acbb6cf..fb94e37280 100644
--- a/c/src/lib/libbsp/m68k/shared/m68kpretaskinghook.c
+++ b/c/src/lib/libbsp/m68k/shared/m68kpretaskinghook.c
@@ -35,6 +35,7 @@ extern void bsp_libc_init( void *, unsigned long, int );
extern rtems_configuration_table BSP_Configuration;
extern unsigned long _RamSize;
+extern void *_RamBase;
extern void *_WorkspaceBase;
extern void *_HeapSize;
@@ -46,7 +47,7 @@ void bsp_pretasking_hook(void)
heapStart = (void *)
((unsigned long)&_WorkspaceBase + BSP_Configuration.work_space_size);
- ramSpace = _RamSize - (unsigned long) heapStart;
+ ramSpace = (unsigned long) &_RamBase + (unsigned long) &_RamSize - (unsigned long) heapStart;
if (heapSize == 0)
heapSize = ramSpace;
diff --git a/make/custom/mvme167.cfg b/make/custom/mvme167.cfg
index 78853bd3a4..df47822c73 100644
--- a/make/custom/mvme167.cfg
+++ b/make/custom/mvme167.cfg
@@ -4,6 +4,9 @@
# $Id$
#
+# THIS BSP USES ELF IMAGES. IT WILL NOT WORK WITH COFF UNLESS CHANGES
+# ARE MADE TO THE LINKCMDS FILE.
+
RTEMS_CPU=m68k
RTEMS_CPU_MODEL=m68040
@@ -14,10 +17,12 @@ RTEMS_BSP_FAMILY=mvme167
#
# This contains the compiler options necessary to select the CPU model
-# and (hopefully) optimize for it.
+# and (hopefully) optimize for it. We also specify the BSP during compilation.
+# This should really get its own flag, but it works here.
#
-CPU_CFLAGS = -m68040
+CPU_CFLAGS = -m68040 -DRTEMS_BSP=$(RTEMS_BSP)
+CFLAGS_DEBUG_V += -ggdb
# optimize flag: typically -O, could use -O4 or -fast
# -O4 is ok for RTEMS
@@ -33,11 +38,21 @@ CFLAGS_OPTIMIZE_V=-O4 -fomit-frame-pointer
#
# RTEMS_DEBUG (RTEMS)
# If defined, debug checks in RTEMS and support library code are enabled.
+#
+# CD2401_INT_LEVEL
+# Interrupt level for the CD2401.
+#
+# CD2401_POLLED_IO
+# 0 for interrupt-driven, 1 for polled I/O.
define make-target-options
@echo "/* #define NDEBUG 1 */ " >>$@
@echo "#define RTEMS_TEST_NO_PAUSE 1" >>$@
@echo "/* #define RTEMS_DEBUG 1 */" >>$@
+ @echo "#define CD2401_INT_LEVEL 1" >>$@
+ @echo "#define CD2401_POLLED_IO 1" >>$@
+
+
endef
# Here is the rule to actually build a $(ARCH)/foo.exe
@@ -79,7 +94,8 @@ define make-exe
$(LINK.c) $(AM_CFLAGS) $(AM_LDFLAGS) -o $@ \
$(LINK_OBJS) $(LINK_LIBS)
$(NM) -g -n $@ > $(basename $@).nm
- $(SIZE) $@
+ $(STRIP) -o $(basename $@) $@
+ $(SIZE) $(basename $@).exe
endef
endif