This commit is contained in:
Ralf Corsepius
2005-05-07 07:17:10 +00:00
parent 7823ed9c32
commit 3bdce60b61
25 changed files with 0 additions and 2847 deletions

View File

@@ -1,14 +0,0 @@
aclocal.m4
autom4te*.cache
config.cache
config.guess
config.log
config.status
config.sub
configure
depcomp
install-sh
Makefile
Makefile.in
missing
mkinstalldirs

View File

@@ -1,92 +0,0 @@
2005-05-07 Ralf Corsepius <ralf_corsepius@rtems.org>
* Makefile.am, configure.ac, acinclude.m4: Remove.
2004-09-24 Ralf Corsepius <ralf_corsepius@rtems.org>
* configure.ac: Require automake > 1.9.
2004-02-12 Ralf Corsepius <corsepiu@faw.uni-ulm.de>
* acinclude.m4: Regenerate.
2004-02-12 Ralf Corsepius <corsepiu@faw.uni-ulm.de>
* configure.ac: RTEMS_CHECK_BSPDIR([$RTEMS_BSP_FAMILY]).
2004-01-13 Ralf Corsepius <corsepiu@faw.uni-ulm.de>
* Makefile.am: Use @RTEMS_BSP_FAMILY@ instead of
$(RTEMS_BSP_FAMILY).
2003-12-12 Ralf Corsepius <corsepiu@faw.uni-ulm.de>
* configure.ac: Require automake >= 1.8, autoconf >= 2.59.
2003-10-20 Ralf Corsepius <corsepiu@faw.uni-ulm.de>
* acinclude.m4: Reflect changes to bootstrap.
* configure.ac: Remove RTEMS_CHECK_CUSTON_BSP.
2003-08-18 Ralf Corsepius <corsepiu@faw.uni-ulm.de>
* Makefile.am: Reflect having moved aclocal/.
2003-08-16 Ralf Corsepius <corsepiu@faw.uni-ulm.de>
* Makefile.am: Reflect having moved automake/.
2003-08-11 Ralf Corsepius <corsepiu@faw.uni-ulm.de>
* configure.ac: Use rtems-bugs@rtems.com as bug report email address.
2003-03-06 Ralf Corsepius <corsepiu@faw.uni-ulm.de>
* configure.ac: Remove AC_CONFIG_AUX_DIR.
2003-02-11 Ralf Corsepius <corsepiu@faw.uni-ulm.de>
* configure.ac: AM_INIT_AUTOMAKE([1.7.2]).
2003-02-11 Ralf Corsepius <corsepiu@faw.uni-ulm.de>
* configure.ac: AC_PREREQ(2.57).
2002-12-06 Ralf Corsepius <corsepiu@faw.uni-ulm.de>
* configure.ac: Remove RTEMS_CHECK_BSP_CACHE.
2002-10-21 Ralf Corsepius <corsepiu@faw.uni-ulm.de>
* .cvsignore: Reformat.
Add autom4te*cache.
Remove autom4te.cache.
2002-08-07 Ivan Guzvinec <ivang@opencores.org>
* acinclude.m4, configure.ac: Bender BSP renamed to OpenRisc
Reference Platform or ORP.
2002-08-06 Joel Sherrill <joel@OARcorp.com>
* acinclude.m4, configure.ac: Go back to name bender for
the or32/or1200 BSP.
2002-08-06 Joel Sherrill <joel@OARcorp.com>
* acinclude.m4, configure.ac: Update and fix minor things so this
BSP compiles and almost completely links.
2002-08-06 Joel Sherrill <joel@OARcorp.com>
* .cvsignore: New file.
2002-08-06 Joel Sherrill <joel@OARcorp.com>
* Makefile.am: New file.
2002-08-06 Chris Ziomkowski <chris@asics.ws>
* ChangeLog, acinclude.m4, configure.ac: New files added as part
of merge from OpenCores repository.

View File

@@ -1,14 +0,0 @@
##
## $Id$
##
ACLOCAL_AMFLAGS = -I ../../../aclocal
## Descend into the @RTEMS_BSP_FAMILY@ directory
## Currently, the shared directory is not explicitly
## added but it is present in the source tree.
## Currently no shared
SUBDIRS = @RTEMS_BSP_FAMILY@
include $(top_srcdir)/../../../automake/subdirs.am
include $(top_srcdir)/../../../automake/local.am

View File

@@ -1,10 +0,0 @@
# RTEMS_CHECK_BSPDIR(RTEMS_BSP_FAMILY)
AC_DEFUN([RTEMS_CHECK_BSPDIR],
[
case "$1" in
orp )
AC_CONFIG_SUBDIRS([orp]);;
*)
AC_MSG_ERROR([Invalid BSP]);;
esac
])

View File

@@ -1,21 +0,0 @@
## Process this file with autoconf to produce a configure script.
##
## $Id$
AC_PREREQ(2.59)
AC_INIT([rtems-c-src-lib-libbsp-or32],[_RTEMS_VERSION],[rtems-bugs@rtems.com])
AC_CONFIG_SRCDIR([orp])
RTEMS_TOP(../../../../..)
RTEMS_CANONICAL_TARGET_CPU
AM_INIT_AUTOMAKE([no-define foreign 1.9])
AM_MAINTAINER_MODE
RTEMS_ENV_RTEMSBSP
RTEMS_PROJECT_ROOT
RTEMS_CHECK_BSPDIR([$RTEMS_BSP_FAMILY])
# Explicitly list all Makefiles here
AC_CONFIG_FILES([Makefile])
AC_OUTPUT

View File

@@ -1,14 +0,0 @@
aclocal.m4
autom4te*.cache
config.cache
config.guess
config.log
config.status
config.sub
configure
depcomp
install-sh
Makefile
Makefile.in
missing
mkinstalldirs

View File

@@ -1,287 +0,0 @@
2005-05-07 Ralf Corsepius <ralf.corsepius@rtems.org>
* bsp_specs, clock/clockdrv.c, configure.ac,
console/console.c, console/console.h, include/bsp.h,
include/tm27.h, Makefile.am, README, start/start.S,
startup/bspclean.c, startup/bspstart.c, startup/linkcmds,
startup/setvec.c, timer/timer.c, timer/timerisr.c, times: Remove.
2005-01-07 Ralf Corsepius <ralf.corsepius@rtems.org>
* Makefile.am: Eliminate CFLAGS_OPTIMIZE_V.
2005-01-02 Ralf Corsepius <ralf.corsepius@rtems.org>
* Makefile.am: Remove build-variant support.
2004-09-24 Ralf Corsepius <ralf_corsepius@rtems.org>
* configure.ac: Require automake > 1.9.
2004-04-23 Ralf Corsepius <ralf_corsepius@rtems.org>
PR 610/bsps
* Makefile.am: Add include/tm27.h, Cosmetics.
* include/tm27.h: Final cosmetics.
2004-04-22 Ralf Corsepius <ralf_corsepius@rtems.org>
* include/bsp.h: Split out tmtest27 support.
* include/tm27.h: New.
2004-04-21 Ralf Corsepius <ralf_corsepius@rtems.org>
PR 613/bsps
* include/bsp.h: Remove MAX_LONG_TEST_DURATION.
2004-04-21 Ralf Corsepius <ralf_corsepius@rtems.org>
PR 614/bsps
* include/bsp.h: Remove MAX_SHORT_TEST_DURATION (Unused).
2004-04-02 Ralf Corsepius <ralf_corsepius@rtems.org>
* start/start.S: Include <rtems/asm.h> instead of <asm.h>.
2004-04-01 Ralf Corsepius <ralf_corsepius@rtems.org>
* include/bsp.h: Include <rtems/clockdrv.h> instead of <clockdrv.h>.
* include/bsp.h: Include <rtems/console.h> instead of <console.h>.
2004-03-31 Ralf Corsepius <ralf_corsepius@rtems.org>
* clock/clockdrv.c, console/console.c, startup/bspstart.c,
timer/timer.c, timer/timerisr.c: Convert to using c99 fixed size
types.
2004-02-19 Ralf Corsepius <corsepiu@faw.uni-ulm.de>
* Makefile.am: Reflect changes to bsp.am.
Preinstall dist_project_lib*.
2004-02-14 Ralf Corsepius <corsepiu@faw.uni-ulm.de>
* Makefile.am: Reflect changes to bsp.am.
2004-02-12 Ralf Corsepius <corsepiu@faw.uni-ulm.de>
* Makefile.am: Use CPPASCOMPILE instead of CCASCOMPILE.
2004-01-30 Ralf Corsepius <corsepiu@faw.uni-ulm.de>
* Makefile.am: Cosmetics.
2004-01-30 Ralf Corsepius <corsepiu@faw.uni-ulm.de>
* Makefile.am: Merge-in clock/Makefile.am, console/Makefile.am,
start/Makefile.am, startup/Makefile.am, timer/Makefile.am,
wrapup/Makefile.am. Use automake compilation rules.
* clock/Makefile.am, console/Makefile.am, start/Makefile.am,
startup/Makefile.am, timer/Makefile.am, wrapup/Makefile.am: Remove.
* configure.ac: Reflect changes above.
2004-01-28 Ralf Corsepius <corsepiu@faw.uni-ulm.de>
* configure.ac: Add nostdinc to AUTOMAKE_OPTIONS.
Add RTEMS_PROG_CCAS.
2004-01-21 Ralf Corsepius <corsepiu@faw.uni-ulm.de>
* Makefile.am: Add PREINSTALL_DIRS.
2004-01-14 Ralf Corsepius <corsepiu@faw.uni-ulm.de>
* Makefile.am: Re-add dirstamps to PRE/TMPINSTALL_FILES.
Add PRE/TMPINSTALL_FILES to CLEANFILES.
* start/Makefile.am: Ditto.
* startup/Makefile.am: Ditto.
2004-01-05 Ralf Corsepius <corsepiu@faw.uni-ulm.de>
* wrapup/Makefile.am: Eliminate $(LIB).
Use noinst_DATA to trigger building libbsp.a.
2003-12-13 Ralf Corsepius <corsepiu@faw.uni-ulm.de>
* start/Makefile.am: s,${PROJECT_RELEASE}/lib,$(PROJECT_LIB),g.
* startup/Makefile.am: s,${PROJECT_RELEASE}/lib,$(PROJECT_LIB),g.
2003-12-12 Ralf Corsepius <corsepiu@faw.uni-ulm.de>
* start/Makefile.am: Use mkdir_p. Remove dirs from PRE/TMPINSTALL_FILES.
* startup/Makefile.am: Use mkdir_p. Remove dirs from PRE/TMPINSTALL_FILES.
2003-12-12 Ralf Corsepius <corsepiu@faw.uni-ulm.de>
* configure.ac: Require automake >= 1.8, autoconf >= 2.59.
2003-12-12 Ralf Corsepius <corsepiu@faw.uni-ulm.de>
* wrapup/Makefile.am: Cosmetics.
2003-12-11 Ralf Corsepius <corsepiu@faw.uni-ulm.de>
* start/Makefile.am: Misc cleanups and fixes.
* startup/Makefile.am: Misc cleanups and fixes.
* wrapup/Makefile.am: Misc cleanups and fixes.
2003-12-02 Ralf Corsepius <corsepiu@faw.uni-ulm.de>
* startup/Makefile.am: Remove S_FILES. Cosmetics.
2003-12-02 Ralf Corsepius <corsepiu@faw.uni-ulm.de>
* Makefile.am: Add preinstallation dirstamp support.
* clock/Makefile.am: Cosmetics.
* console/Makefile.am: Cosmetics.
* startup/Makefile.am: Cosmetics.
* timer/Makefile.am: Cosmetics.
* wrapup/Makefile.am: Cosmetics.
2003-12-02 Ralf Corsepius <corsepiu@faw.uni-ulm.de>
* clock/Makefile.am: Remove all-local: $(ARCH).
* console/Makefile.am: Remove all-local: $(ARCH).
* start/Makefile.am: Remove all-local: $(ARCH).
* startup/Makefile.am: Remove all-local: $(ARCH).
* timer/Makefile.am: Remove all-local: $(ARCH).
* wrapup/Makefile.am: Remove all-local: $(ARCH).
2003-09-29 Ralf Corsepius <corsepiu@faw.uni-ulm.de>
* Makefile.am: Merge-in include/Makefile.am.
Reflect changes to bsp.am.
* include/Makefile.am: Remove.
* configure.ac: Reflect changes above.
2003-09-08 Ralf Corsepius <corsepiu@faw.uni-ulm.de>
* bsp_specs: Remove *lib:.
2003-09-04 Joel Sherrill <joel@OARcorp.com>
* clock/clockdrv.c, console/console.c, console/console.h,
include/bsp.h, start/start.S, startup/bspclean.c, startup/bspstart.c,
startup/linkcmds, startup/setvec.c, timer/timer.c, timer/timerisr.c:
URL for license changed.
2003-08-18 Ralf Corsepius <corsepiu@faw.uni-ulm.de>
* Makefile.am: Reflect having moved aclocal/.
2003-08-16 Ralf Corsepius <corsepiu@faw.uni-ulm.de>
* Makefile.am: Reflect having moved automake/.
* clock/Makefile.am: Reflect having moved automake/.
* console/Makefile.am: Reflect having moved automake/.
* include/Makefile.am: Reflect having moved automake/.
* start/Makefile.am: Reflect having moved automake/.
* startup/Makefile.am: Reflect having moved automake/.
* timer/Makefile.am: Reflect having moved automake/.
* wrapup/Makefile.am: Reflect having moved automake/.
2003-08-11 Ralf Corsepius <corsepiu@faw.uni-ulm.de>
* configure.ac: Use rtems-bugs@rtems.com as bug report email address.
2003-08-06 Ralf Corsepius <corsepiu@faw.uni-ulm.de>
PR 445/bsps
* bsp_specs: Remove -D__embedded__ -Asystem(embedded) from cpp.
Remove cpp, old_cpp (now unused).
2003-03-06 Ralf Corsepius <corsepiu@faw.uni-ulm.de>
* configure.ac: Remove AC_CONFIG_AUX_DIR.
2003-02-11 Ralf Corsepius <corsepiu@faw.uni-ulm.de>
* configure.ac: AM_INIT_AUTOMAKE([1.7.2]).
2003-02-11 Ralf Corsepius <corsepiu@faw.uni-ulm.de>
* configure.ac: AC_PREREQ(2.57).
2003-01-20 Joel Sherrill <joel@OARcorp.com>
* startup/linkcmds*: Add FreeBSD sysctl() sections.
2002-12-17 Ralf Corsepius <corsepiu@faw.uni-ulm.de>
* clock/Makefile.am: Don't include @RTEMS_BSP@.cfg.
* console/Makefile.am: Don't include @RTEMS_BSP@.cfg.
* start/Makefile.am: Don't include @RTEMS_BSP@.cfg.
* startup/Makefile.am: Don't include @RTEMS_BSP@.cfg.
* timer/Makefile.am: Don't include @RTEMS_BSP@.cfg.
2002-12-12 Ralf Corsepius <corsepiu@faw.uni-ulm.de>
* start/Makefile.am: Use install-data-local to install startfile.
2002-12-10 Ralf Corsepius <corsepiu@faw.uni-ulm.de>
* wrapup/Makefile.am: Don't include @RTEMS_BSP@.cfg.
2002-10-21 Ralf Corsepius <corsepiu@faw.uni-ulm.de>
* .cvsignore: Reformat.
Add autom4te*cache.
Remove autom4te.cache.
2002-10-09 Ralf Corsepius <corsepiu@faw.uni-ulm.de>
* .cvsignore: Add autom4te.cache.
2002-09-14 Ivan Guzvinec <ivang@opencores.org>
* include/bsp.h, startup/Makefile.am, startup/bspclean.c:
Cleanup so the BSP works.
2002-08-21 Joel Sherrill <joel@OARcorp.com>
* bsp_specs: Added support for -nostdlibs.
2002-08-11 Ralf Corsepius <corsepiu@faw.uni-ulm.de>
* clock/Makefile.am: Use .$(OBJEXT) instead of .o.
* console/Makefile.am: Use .$(OBJEXT) instead of .o.
* start/Makefile.am: Use .$(OBJEXT) instead of .o.
* startup/Makefile.am: Use .$(OBJEXT) instead of .o.
* timer/Makefile.am: Use .$(OBJEXT) instead of .o.
* wrapup/Makefile.am: Use .$(OBJEXT) instead of .o.
2002-08-07 Ivan Guzvinec <ivang@opencores.org>
* configure.ac: Bender BSP renamed to OpenRisc Reference Platform
for ORP.
2002-08-07 Ivan Guzvinec <ivang@opencores.org>
* include/bsp.h, start/start.S, startup/linkcmds: Patches which
were required to make the BSP run.
2002-08-06 Joel Sherrill <joel@OARcorp.com>
* configure.ac: GO back to name bender for the or32/or1200 BSP.
2002-08-06 Joel Sherrill <joel@OARcorp.com>
* bsp_specs, configure.ac, startup/bspstart.c: Update and fix
minor things so this BSP compiles and almost completely links.
* startup/Makefile.am: New file.
2002-08-06 Joel Sherrill <joel@OARcorp.com>
* include/.cvsignore: Updated to account for more files.
2002-08-06 Chris Ziomkowski <chris@asics.ws>
* .cvsignore, Makefile.am, README, bsp_specs, configure.ac, times,
clock/.cvsignore, clock/Makefile.am, clock/clockdrv.c,
console/.cvsignore, console/Makefile.am, console/console.c,
console/console.h, include/.cvsignore, include/Makefile.am,
include/bsp.h, start/.cvsignore, start/Makefile.am, start/start.S,
startup/.cvsignore, startup/bspclean.c, startup/bspstart.c,
startup/linkcmds, startup/main.c, startup/setvec.c, timer/.cvsignore,
timer/Makefile.am, timer/timer.c, timer/timerisr.c,
wrapup/.cvsignore, wrapup/Makefile.am, ChangeLog: New files added
as part of merge from OpenCores repository.

View File

@@ -1,104 +0,0 @@
##
## $Id$
##
ACLOCAL_AMFLAGS = -I ../../../../aclocal
include $(top_srcdir)/../../../../automake/compile.am
include $(top_srcdir)/../../bsp.am
dist_project_lib_DATA = bsp_specs
include_HEADERS = include/bsp.h
include_HEADERS += include/tm27.h
nodist_include_HEADERS = include/bspopts.h
DISTCLEANFILES = include/bspopts.h
noinst_PROGRAMS =
include_HEADERS += include/coverhd.h
EXTRA_DIST = start.S
start.$(OBJEXT): start/start.S
$(CPPASCOMPILE) -DASM -o $@ -c $<
project_lib_DATA = start.$(OBJEXT)
dist_project_lib_DATA += startup/linkcmds
noinst_PROGRAMS += startup.rel
startup_rel_SOURCES = ../../shared/bsplibc.c ../../shared/bsppost.c \
startup/bspstart.c startup/bspclean.c ../../shared/bootcard.c \
../../shared/main.c ../../shared/sbrk.c \
../../shared/gnatinstallhandler.c startup/setvec.c
startup_rel_CPPFLAGS = $(AM_CPPFLAGS)
startup_rel_LDFLAGS = $(RTEMS_RELLDFLAGS)
noinst_PROGRAMS += clock.rel
clock_rel_SOURCES = clock/clockdrv.c
clock_rel_CPPFLAGS = $(AM_CPPFLAGS)
clock_rel_LDFLAGS = $(RTEMS_RELLDFLAGS)
noinst_PROGRAMS += console.rel
console_rel_SOURCES = console/console.c console/console.h
console_rel_CPPFLAGS = $(AM_CPPFLAGS)
console_rel_LDFLAGS = $(RTEMS_RELLDFLAGS)
noinst_PROGRAMS += timer.rel
timer_rel_SOURCES = timer/timer.c timer/timerisr.c
timer_rel_CPPFLAGS = $(AM_CPPFLAGS)
timer_rel_LDFLAGS = $(RTEMS_RELLDFLAGS)
noinst_LIBRARIES = libbsp.a
libbsp_a_SOURCES =
libbsp_a_LIBADD = startup.rel clock.rel console.rel timer.rel
all-local: $(PREINSTALL_FILES) $(TMPINSTALL_FILES)
PREINSTALL_DIRS =
PREINSTALL_FILES =
TMPINSTALL_FILES =
$(PROJECT_INCLUDE)/$(dirstamp):
@$(mkdir_p) $(PROJECT_INCLUDE)
@: > $(PROJECT_INCLUDE)/$(dirstamp)
PREINSTALL_DIRS += $(PROJECT_INCLUDE)/$(dirstamp)
$(PROJECT_LIB)/$(dirstamp):
@$(mkdir_p) $(PROJECT_LIB)
@: > $(PROJECT_LIB)/$(dirstamp)
PREINSTALL_DIRS += $(PROJECT_LIB)/$(dirstamp)
$(PROJECT_LIB)/bsp_specs: bsp_specs $(PROJECT_LIB)/$(dirstamp)
$(INSTALL_DATA) $< $(PROJECT_LIB)/bsp_specs
PREINSTALL_FILES += $(PROJECT_LIB)/bsp_specs
$(PROJECT_INCLUDE)/bsp.h: include/bsp.h $(PROJECT_INCLUDE)/$(dirstamp)
$(INSTALL_DATA) $< $(PROJECT_INCLUDE)/bsp.h
PREINSTALL_FILES += $(PROJECT_INCLUDE)/bsp.h
$(PROJECT_INCLUDE)/tm27.h: include/tm27.h $(PROJECT_INCLUDE)/$(dirstamp)
$(INSTALL_DATA) $< $(PROJECT_INCLUDE)/tm27.h
PREINSTALL_FILES += $(PROJECT_INCLUDE)/tm27.h
$(PROJECT_INCLUDE)/bspopts.h: include/bspopts.h $(PROJECT_INCLUDE)/$(dirstamp)
$(INSTALL_DATA) $< $(PROJECT_INCLUDE)/bspopts.h
PREINSTALL_FILES += $(PROJECT_INCLUDE)/bspopts.h
$(PROJECT_INCLUDE)/coverhd.h: include/coverhd.h $(PROJECT_INCLUDE)/$(dirstamp)
$(INSTALL_DATA) $< $(PROJECT_INCLUDE)/coverhd.h
PREINSTALL_FILES += $(PROJECT_INCLUDE)/coverhd.h
$(PROJECT_LIB)/start.$(OBJEXT): start.$(OBJEXT) $(PROJECT_LIB)/$(dirstamp)
$(INSTALL_DATA) $< $(PROJECT_LIB)/start.$(OBJEXT)
TMPINSTALL_FILES += $(PROJECT_LIB)/start.$(OBJEXT)
$(PROJECT_LIB)/linkcmds: startup/linkcmds $(PROJECT_LIB)/$(dirstamp)
$(INSTALL_DATA) $< $(PROJECT_LIB)/linkcmds
PREINSTALL_FILES += $(PROJECT_LIB)/linkcmds
CLEANFILES = $(PREINSTALL_FILES)
DISTCLEANFILES += $(PREINSTALL_DIRS)
CLEANFILES += $(TMPINSTALL_FILES)
include $(top_srcdir)/../../../../automake/local.am

View File

@@ -1,69 +0,0 @@
#
# $Id$
#
# This is a sample hardware description file for a BSP. This comment
# block does not have to appear in a real one. The intention of this
# file is to provide a central place to look when searching for
# information about a board when starting a new BSP. For example,
# you may want to find an existing timer driver for the chip you are
# using on your board. It is easier to grep for the chip name in
# all of the HARDWARE files than to peruse the source tree. Hopefully,
# making the HARDDWARE files accurate will also alleviate the common
# problem of not knowing anything about a board based on its BSP
# name.
#
# NOTE: If you have a class of peripheral chip on board which
# is not in this list please add it to this file so
# others will also use the same name.
#
# Timer resolution is the way it is configured in this BSP.
# On a counting timer, this is the length of time which
# corresponds to 1 count.
#
BSP NAME: fastsbc1
BOARD: Fasssst Computers, Fast SBC-1
BUS: SchoolBus
CPU FAMILY: i386
CPU: Intel Hexium
COPROCESSORS: Witch Hex87
MODE: 32 bit mode
DEBUG MONITOR: HexBug
PERIPHERALS
===========
TIMERS: Intel i8254
RESOLUTION: .0001 microseconds
SERIAL PORTS: Zilog Z8530 (with 2 ports)
REAL-TIME CLOCK: RTC-4
DMA: Intel i8259
VIDEO: none
SCSI: none
NETWORKING: none
DRIVER INFORMATION
==================
CLOCK DRIVER: RTC-4
IOSUPP DRIVER: Zilog Z8530 port A
SHMSUPP: polled and interrupts
TIMER DRIVER: Intel i8254
TTY DRIVER: stub only
STDIO
=====
PORT: Console port 0
ELECTRICAL: RS-232
BAUD: 9600
BITS PER CHARACTER: 8
PARITY: None
STOP BITS: 1
NOTES
=====
(1) 900 Mhz and 950 Mhz versions.
(2) 1 Gb or 2 Gb RAM.
(3) PC compatible if HexBug not enabled.

View File

@@ -1,12 +0,0 @@
%rename endfile old_endfile
%rename startfile old_startfile
%rename link old_link
*startfile:
%{!qrtems: %(old_startfile)} %{!nostdlib: %{qrtems: \
%{!qrtems_debug: start.o%s} \
%{qrtems_debug: start_g.o%s}}}
*link:
%{!qrtems: %(old_link)} %{qrtems: -dc -dp -N -e _start}

View File

@@ -1,225 +0,0 @@
/* ckinit.c
*
* This file provides a template for the clock device driver initialization.
*
* 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.com/license/LICENSE.
*
* $Id$
*/
#include <stdlib.h>
#include <rtems.h>
#include <rtems/libio.h>
#include <bsp.h>
static void (*old_handler)(unsigned int,unsigned int,unsigned int,unsigned int);
void Clock_exit( void );
void Clock_isr( rtems_vector_number vector,unsigned int pc,
unsigned int address, unsigned int sr);
/*
* The interrupt vector number associated with the clock tick device
* driver.
*/
#define CLOCK_VECTOR 8
/*
* Clock_driver_ticks is a monotonically increasing counter of the
* number of clock ticks since the driver was initialized.
*/
volatile uint32_t Clock_driver_ticks;
/*
* Clock_isrs is the number of clock ISRs until the next invocation of
* the RTEMS clock tick routine. The clock tick device driver
* gets an interrupt once a millisecond and counts down until the
* length of time between the user configured microseconds per tick
* has passed.
*/
uint32_t Clock_isrs; /* ISRs until next tick */
/*
* These are set by clock driver during its init
*/
rtems_device_major_number rtems_clock_major = ~0;
rtems_device_minor_number rtems_clock_minor;
void Clock_exit( void );
/* Write this to restart the Timer. Sets mode = 01,
interrupts enabled, interrupt not pending, report
at 200,000 (1 msec on 200 MHz CPU) */
static const unsigned int TTMR_RESET = 0x60030D40;
/*
* Isr Handler
*/
void Clock_isr(uint32_t vector,
uint32_t pc,
uint32_t ear,
uint32_t sr)
{
register int pending;
register int value = 0x60002710;
/* Was it us? */
asm volatile ("l.mfspr %0,r0,0x4802 \n\t" /* Read the PIC status */
"l.andi %0,%0,0x8 \n\t" : "=r" (pending));
if(pending)
{
rtems_clock_tick();
asm ("l.mtspr r0,%0,0x5000 \n\t" :: "r" (value));
}
if(old_handler)
(*old_handler)(vector,pc,ear,sr);
}
/*
* Install_clock
*
* Install a clock tick handler and reprograms the chip. This
* is used to initially establish the clock tick.
*/
void Install_clock()
{
uint32_t tmp,sr,ttmr,ttcr;
extern uint32_t Or1k_Interrupt_Vectors[16];
ttmr = TTMR_RESET; /* Reset value */
ttcr = 0; /* Start at 0 */
/*
* Initialize the clock tick device driver variables
*/
/* Make sure the Timer (interrupt 3) is enabled and
reports a high prority interrupt */
asm volatile ("l.mfspr %0,r0,0x4800 \n\t" /* Get the PIC mask */
"l.ori %0,%0,0x8 \n\t" /* Enable int 3 */
"l.mtspr r0,%0,0x4800 \n\t" /* Write back mask */
"l.mfspr %0,r0,0x4801 \n\t" /* Get priority mask */
"l.ori %0,%0,0x8 \n\t" /* Set us to high */
"l.mtspr r0,%0,0x4801 \n\t" /* Write back to PICPR */
: "=r" (tmp));
/* Generate a 1 kHz interrupt */
asm volatile ("l.mfspr %0,r0,0x11 \n\t" /* Get the current setting */
"l.addi %1,r0,-5 \n\t"
"l.and %1,%1,%0 \n\t" /* Turn off interrupts */
"l.mtspr r0,%1,0x11 \n\t" /* Set it in SR */
"l.mtspr r0,%2,0x5000\n\t" /* Set TTMR */
"l.mtspr r0,%3,0x5100\n\t" /* Set TTCR */
: "=&r" (sr), "=&r" (tmp) : "r" (ttmr), "r" (ttcr));
old_handler = (void(*)(unsigned int,unsigned int,unsigned int,unsigned int))
Or1k_Interrupt_Vectors[8];
Or1k_Interrupt_Vectors[8] = (uint32_t)Clock_isr;
asm volatile ("l.mtspr r0,%0,0x11\n\t":: "r" (sr));
Clock_driver_ticks = 0;
/*
* Schedule the clock cleanup routine to execute if the application exits.
*/
atexit( Clock_exit );
}
/*
* Clean up before the application exits
*/
void Clock_exit( void )
{
register int temp1;
register int temp2;
/* In the case of a fatal error, we should shut down
all the interrupts so we don't get woken up again. */
/* First, turn off the clock in the PIC */
asm volatile ("l.mfspr %0,r0,0x4800 \n\t" /* Get the PIC mask */
"l.addi %1,%1,-9 \n\t" /* Create a mask to disable */
"l.and %0,%1,%0 \n\t" /* Mask us out */
"l.mtspr r0,%0,0x4800 \n\t" /* Write back mask */
"l.mfspr %0,r0,0x4801 \n\t" /* Get priority mask */
"l.and %0,%1,%0 \n\t" /* Set us to low */
"l.mtspr r0,%0,0x4801 \n\t" /* Write back to PICPR */
: "=r" (temp1), "=r" (temp2));
/* Now turn off the clock at the timer */
asm volatile ("l.mtspr r0,r0,0x5000\n\t" /* Clear TTMR */
"l.mtspr r0,r0,0x5100\n\t"); /* Clear TTCR */
}
/*
* Clock_initialize
*
* Device driver entry point for clock tick driver initialization.
*/
rtems_device_driver Clock_initialize(
rtems_device_major_number major,
rtems_device_minor_number minor,
void *pargp
)
{
Install_clock();
/*
* make major/minor avail to others such as shared memory driver
*/
rtems_clock_major = major;
rtems_clock_minor = minor;
return RTEMS_SUCCESSFUL;
}
rtems_device_driver Clock_control(
rtems_device_major_number major,
rtems_device_minor_number minor,
void *pargp
)
{
uint32_t isrlevel;
rtems_libio_ioctl_args_t *args = pargp;
if (args == 0)
goto done;
/*
* This is hokey, but until we get a defined interface
* to do this, it will just be this simple...
*/
if (args->command == rtems_build_name('I', 'S', 'R', ' '))
{
Clock_isr(CLOCK_VECTOR,0,0,0);
}
else if (args->command == rtems_build_name('N', 'E', 'W', ' '))
{
rtems_interrupt_disable( isrlevel );
(void) set_vector( args->buffer, CLOCK_VECTOR, 1 );
rtems_interrupt_enable( isrlevel );
}
done:
return RTEMS_SUCCESSFUL;
}

View File

@@ -1,20 +0,0 @@
## Process this file with autoconf to produce a configure script.
##
## $Id$
AC_PREREQ(2.59)
AC_INIT([rtems-c-src-lib-libbsp-or32-orp],[_RTEMS_VERSION],[rtems-bugs@rtems.com])
AC_CONFIG_SRCDIR([bsp_specs])
RTEMS_TOP(../../../../../..)
RTEMS_CANONICAL_TARGET_CPU
AM_INIT_AUTOMAKE([no-define nostdinc foreign 1.9])
RTEMS_BSP_CONFIGURE
RTEMS_PROG_CC_FOR_TARGET([-ansi -fasm])
RTEMS_CANONICALIZE_TOOLS
RTEMS_PROG_CCAS
# Explicitly list all Makefiles here
AC_CONFIG_FILES([Makefile])
AC_OUTPUT

View File

@@ -1,374 +0,0 @@
/*
* This file contains the template for a console IO package.
*
* 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.com/license/LICENSE.
*
* This file adapted from no_bsp board library of the RTEMS distribution.
* The body has been modified for the Bender Or1k implementation by
* Chris Ziomkowski. <chris@asics.ws>
*/
#define BENDER_INIT
#include <bsp.h>
#include <rtems/libio.h>
#include "console.h"
static int localEcho;
static UART_16450* uart = (UART_16450*)0x80000000; /* This is where the simulator puts it */
/* console_initialize
*
* This routine initializes the console IO driver.
*
* Input parameters: NONE
*
* Output parameters: NONE
*
* Return values:
*/
void (*old_handler)(unsigned int,unsigned int,unsigned int,unsigned int);
void console_interrupt(unsigned int vector,unsigned int pc,
unsigned int effective_addr, unsigned int status)
{
int reason;
register int pending;
/* First thing's first...is this for us? */
asm volatile ("l.mfspr %0,r0,0x4802 \n\t" /* Read the PIC status */
"l.andi %0,%0,0x4 \n\t" : "=r" (pending));
if(pending)
{
reason = uart->read.IIR;
switch(reason)
{
case 0: /* Interrupt because of modem status */
break;
case 2: /* Interrupt because Transmitter empty */
break;
case 4: /* Interrupt because Received data available */
break;
case 6: /* Interrupt because Status Register */
break;
case 12: /* Interrupt because of character timeout (16550 only) */
break;
default: /* No interrupt */
break;
}
}
if(old_handler)
(*old_handler)(vector,pc,effective_addr,status);
}
rtems_device_driver console_initialize(
rtems_device_major_number major,
rtems_device_minor_number minor,
void *arg
)
{
rtems_status_code status;
int tmp,tmp2;
uint32_t sr;
extern uint32_t Or1k_Interrupt_Vectors[16];
/* Make sure the UART (interrupt 2) is enabled and
reports a low prority interrupt */
asm volatile ("l.mfspr %0,r0,0x4800 \n\t" /* Get the PIC mask */
"l.ori %0,%0,0x4 \n\t" /* Enable int 2 */
"l.mtspr r0,%0,0x4800 \n\t" /* Write back mask */
"l.mfspr %0,r0,0x4801 \n\t" /* Get priority mask */
"l.addi %1,r0,-5 \n\t"
"l.and %0,%0,%1 \n\t" /* Set us to low */
"l.mtspr r0,%0,0x4801 \n\t" /* Write back to PICPR */
: "=r" (tmp), "=r" (tmp2));
/* Install the interrupt handler */
asm volatile ("l.mfspr %0,r0,0x11 \n\t"
"l.addi %1,r0,-5 \n\t"
"l.and %1,%1,%0 \n\t"
"l.mtspr r0,%1,0x11 \n\t": "=&r" (sr) : "r" (tmp));
old_handler = (void(*)(unsigned int,unsigned int,unsigned int,unsigned int))
Or1k_Interrupt_Vectors[5];
Or1k_Interrupt_Vectors[5] = (uint32_t)console_interrupt;
asm volatile ("l.mtspr r0,%0,0x11\n\t":: "r" (sr));
/* Assume 1843.2/16 kHz clock */
uart->latch.LCR = 0x80; /* Set the divisor latch bit */
uart->latch.DLM = 2; /* 57,600 */
uart->latch.DLL = 0;
uart->write.LCR = 0x03; /* 8-N-1 */
uart->write.MCR = 0x03; /* Assert RTS & DTR */
/* uart->write.FCR = 0x00; */ /* Make sure we're in 16450 mode... Ignore for 16450 driver */
uart->write.IER = 0x05; /* Don't worry about TEMT unless we need to. */
tmp = uart->read.LSR; /* Make sure interrupts are cleared */
tmp = uart->read.RBR; /* Clear the input buffer */
tmp = uart->read.MSR; /* Clear the modem status register */
localEcho = 1; /* Turn on local echo */
status = rtems_io_register_name(
"/dev/console",
major,
(rtems_device_minor_number) 0
);
if (status != RTEMS_SUCCESSFUL)
rtems_fatal_error_occurred(status);
return RTEMS_SUCCESSFUL;
}
/* is_character_ready
*
* This routine returns TRUE if a character is available.
*
* Input parameters: NONE
*
* Output parameters: NONE
*
* Return values:
*/
rtems_boolean is_character_ready(
char *ch
)
{
*ch = '\0'; /* return NULL for no particular reason */
return(TRUE);
}
/* inbyte
*
* This routine reads a character from the SOURCE.
*
* Input parameters: NONE
*
* Output parameters: NONE
*
* Return values:
* character read from SOURCE
*/
char inbyte( void )
{
unsigned int stat;
stat = uart->read.LSR;
while(!(stat & 0x01)) /* ! Data Ready */
{
rtems_task_wake_after( RTEMS_YIELD_PROCESSOR );
stat = uart->read.LSR;
}
return uart->read.RBR; /* Return the character */
}
/* outbyte
*
* This routine transmits a character out the SOURCE. Flow
* control is not currently enabled.
*
* Input parameters:
* ch - character to be transmitted
*
* Output parameters: NONE
*/
void outbyte(char ch)
{
unsigned int stat;
/*
* Carriage Return/New line translation.
*/
stat = uart->read.LSR;
while(!(stat & 0x40)) /* ! TEMT */
{
rtems_task_wake_after( RTEMS_YIELD_PROCESSOR );
stat = uart->read.LSR;
}
uart->write.THR = ch;
if ( ch == '\n' )
outbyte( '\r' );
}
/*
* Open entry point
*/
rtems_device_driver console_open(
rtems_device_major_number major,
rtems_device_minor_number minor,
void * arg
)
{
return RTEMS_SUCCESSFUL;
}
/*
* Close entry point
*/
rtems_device_driver console_close(
rtems_device_major_number major,
rtems_device_minor_number minor,
void * arg
)
{
return RTEMS_SUCCESSFUL;
}
/*
* read bytes from the serial port. We only have stdin.
*/
rtems_device_driver console_read(
rtems_device_major_number major,
rtems_device_minor_number minor,
void * arg
)
{
rtems_libio_rw_args_t *rw_args;
char *buffer;
int maximum;
int count = 0;
rw_args = (rtems_libio_rw_args_t *) arg;
buffer = rw_args->buffer;
maximum = rw_args->count;
for (count = 0; count < maximum; count++)
{
buffer[ count ] = inbyte();
if (buffer[ count ] == '\n' || buffer[ count ] == '\r')
{
buffer[ count++ ] = '\n';
if(localEcho)
outbyte('\n' ); /* newline */
break; /* Return for a newline */
}
else if (buffer[ count ] == '\b' && count > 0 )
{
if(localEcho)
{
outbyte('\b' ); /* move back one space */
outbyte(' ' ); /* erase the character */
outbyte('\b' ); /* move back one space */
}
count-=2;
}
else if(localEcho)
outbyte(buffer[ count ]); /* echo the character */
}
rw_args->bytes_moved = count;
return (count >= 0) ? RTEMS_SUCCESSFUL : RTEMS_UNSATISFIED;
}
/*
* write bytes to the serial port. Stdout and stderr are the same.
*/
rtems_device_driver console_write(
rtems_device_major_number major,
rtems_device_minor_number minor,
void * arg
)
{
int count;
int maximum;
rtems_libio_rw_args_t *rw_args;
char *buffer;
rw_args = (rtems_libio_rw_args_t *) arg;
buffer = rw_args->buffer;
maximum = rw_args->count;
for (count = 0; count < maximum; count++) {
if ( buffer[ count ] == '\n') {
outbyte('\r');
}
outbyte( buffer[ count ] );
}
rw_args->bytes_moved = maximum;
return 0;
}
/*
* IO Control entry point
*/
rtems_device_driver console_control(
rtems_device_major_number major,
rtems_device_minor_number minor,
void * arg
)
{
int param,div;
ConsoleIOCTLRequest* request = (ConsoleIOCTLRequest*)arg;
if (!arg)
return RTEMS_INVALID_ADDRESS;
switch(request->command)
{
case TERM_LOCAL_ECHO:
param = (int)(request->data);
if(param < 0 || param > 1)
return RTEMS_INVALID_NUMBER;
localEcho = param;
break;
case TERM_BIT_RATE:
param = (int)(request->data);
switch(param)
{
case 50:
case 150:
case 300:
case 600:
case 1200:
case 1800:
case 2000:
case 2400:
case 3600:
case 4800:
case 7200:
case 9600:
case 19200:
case 38400:
case 57600:
case 115200:
div = 115200/param;
uart->latch.LCR |= 0x80; /* Set the divisor latch bit */
uart->latch.DLM = div & 0xFF;
uart->latch.DLL = div >> 8;
uart->write.LCR &= 0x7F; /* Clear the divisor latch bit */
break;
default:
return RTEMS_INVALID_NUMBER;
}
break;
default:
return RTEMS_NOT_CONFIGURED;
}
return RTEMS_SUCCESSFUL;
}

View File

@@ -1,70 +0,0 @@
/* console.h -- console header file for the Bender board using the
* Or1k architecture.
*
* Copyright (C) 2001 Chris Ziomkowski, chris@asics.ws
*
* This file is distributed as part of the RTEMS package from
* OAR Corporation, and follows the licensing and distribution
* terms as stated for RTEMS.
*
* 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.com/license/LICENSE.
*/
#ifndef _CONSOLE_H
#define _CONSOLE_H
typedef enum {
TERM_LOCAL_ECHO,
TERM_BIT_RATE,
} ConsoleIOCTLCommand;
typedef struct {
ConsoleIOCTLCommand command;
void* data;
} ConsoleIOCTLRequest;
typedef struct {
unsigned char RBR;
unsigned char IER;
unsigned char IIR;
unsigned char LCR;
unsigned char MCR;
unsigned char LSR;
unsigned char MSR;
unsigned char SCR;
} UART_16450_Read;
typedef struct {
unsigned char THR;
unsigned char IER;
unsigned char IIR;
unsigned char LCR;
unsigned char MCR;
unsigned char LSR;
unsigned char MSR;
unsigned char SCR;
} UART_16450_Write;
typedef struct {
unsigned char DLM;
unsigned char DLL;
unsigned char IIR;
unsigned char LCR;
unsigned char MCR;
unsigned char LSR;
unsigned char MSR;
unsigned char SCR;
} UART_16450_Latch;
typedef union {
UART_16450_Read read;
UART_16450_Write write;
UART_16450_Latch latch;
} UART_16450;
#endif

View File

@@ -1,5 +0,0 @@
coverhd.h
bspopts.h
bspopts.h.in
stamp-h
stamp-h.in

View File

@@ -1,84 +0,0 @@
/* bsp.h
*
* This include file contains all board IO definitions.
*
* XXX : put yours in here
*
* 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.com/license/LICENSE.
*
* $Id$
*/
#ifndef __ORP_h
#define __ORP_h
#ifdef __cplusplus
extern "C" {
#endif
#include <bspopts.h>
#include <rtems.h>
#include <rtems/console.h>
#include <rtems/clockdrv.h>
/*
* confdefs.h overrides for this BSP:
* - number of termios serial ports (defaults to 1)
* - Interrupt stack space is not minimum if defined.
*/
/* #define CONFIGURE_NUMBER_OF_TERMIOS_PORTS 2 */
#define CONFIGURE_INTERRUPT_STACK_MEMORY (4 * 1024)
/*
* Simple spin delay in microsecond units for device drivers.
* This is very dependent on the clock speed of the target.
*/
#define delay( microseconds ) \
{ \
}
/* Constants */
#define RAM_START 0x10000000
#define RAM_END 0x10800000
/* miscellaneous stuff assumed to exist */
extern rtems_configuration_table BSP_Configuration;
/*
* Device Driver Table Entries
*/
/*
* NOTE: Use the standard Console driver entry
*/
/*
* NOTE: Use the standard Clock driver entry
*/
/* functions */
void bsp_cleanup( void );
no_cpu_isr_entry set_vector( /* returns old vector */
rtems_isr_entry handler, /* isr routine */
rtems_vector_number vector, /* vector number */
int type /* RTEMS or RAW intr */
);
#ifdef __cplusplus
}
#endif
#endif
/* end of include file */

View File

@@ -1,32 +0,0 @@
/*
* tm27.h
*
* The license and distribution terms for this file may be
* found in the file LICENSE in this distribution or at
* http://www.rtems.com/license/LICENSE.
*
* $Id$
*/
#ifndef _RTEMS_TMTEST27
#error "This is an RTEMS internal file you must not include directly."
#endif
#ifndef __tm27_h
#define __tm27_h
/*
* Stuff for Time Test 27
*/
#define MUST_WAIT_FOR_INTERRUPT 0
#define Install_tm27_vector( handler ) set_vector( (handler), 0, 1 )
#define Cause_tm27_intr() /* empty */
#define Clear_tm27_intr() /* empty */
#define Lower_tm27_intr() /* empty */
#endif

View File

@@ -1,799 +0,0 @@
/* start.S -- bootup code for the Bender board using the Or1k
* architecture.
*
* Copyright (C) 2001 Chris Ziomkowski, chris@asics.ws
*
* This file is distributed as part of the RTEMS package from
* OAR Corporation, and follows the licensing and distribution
* terms as stated for RTEMS.
*
* 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.com/license/LICENSE.
*/
#include <rtems/asm.h>
/* Since we don't yet have a memory map for Bender, I am
assuming the following. Hopefully, this will be easily
modified once we get the real values.
0x00000000 - 0x00200000: Flash/ROM (boot code / 2 MB)
0x01000000 - 0x010FFFFF: Synchronous SRAM (area 2 / 1 MB)
0x10000000 - 0x1FFFFFFF: External SDRAM (area 3 / 256 MB)
0x20000000 - 0x2FFFFFFF: External SDRAM (area 4 / 256 MB)
0x80000000 - 0x8000001F: 4 16550 UART controllers
0x80010000 - 0x80017FFF: Internal Bender RAM
0x80020000 - 0xFFFFFFFF: Memory mapped Bender Peripherals
For this version, I assume that only the flash and 32 MB
of RAM in area 3 are populated. Everything else should
return a bus error when accessed.
*/
.file "start.S"
.data
PUBLIC(Or1k_Interrupt_Vectors)
SYM (Or1k_Interrupt_Vectors):
.word 0x00000000 # No Vector
.word _start # Reset Vector (Ignored)
.word __Internal_error_Occurred # Bus Error
.word __Internal_error_Occurred # Data Page Fault
.word __Internal_error_Occurred # Instruction Page Fault
.word __int_reenable # Low Priority Interrupt
.word __Internal_error_Occurred # Alignment Exception
.word __Internal_error_Occurred # Illegal Instruction Exception
.word __int_reenable # High Priority Interrupt
.word __Internal_error_Occurred # ITBL Miss
.word __Internal_error_Occurred # DTBL Miss
.word 0x00000000 # Range Exception
.word 0x00000000 # System Call
.word 0x00000000 # Breakpoint
.word 0x00000000 # Trap
/*
PUBLIC(BOTTOM_OF_MEMORY)
SYM (BOTTOM_OF_MEMORY):
.word 0x10000000 # Assume RAM @ 0 for the sim
PUBLIC(TOP_OF_MEMORY)
SYM (TOP_OF_MEMORY):
.word 0x10800000 # Assume RAM @ 0 for the sim
*/
PUBLIC(_mem_end)
SYM (_mem_end):
.word 0x10800000
BEGIN_CODE
.org 0x0
/**************/
/* _panic */
/**************/
/* Place the panic vector at 0 */
.proc __panic
.def __panic
.val __panic
.scl 2
.type 044
.endef
.global __panic
__panic:
l.jal __exit
l.nop
.endproc __panic
.def __panic
.val .
.scl -1
.endef
/* Exception processing...first, we will save the
16 non callee saved registers which could be
corrupted by calling a C function. We have no
way of knowing which of these will be used, so
we have to save all of them. We will then save
the EPCR and ESR, in case a nested exception is
called. Next, we call the user function. We then
restore all the registers to their original
values, and finally disable exceptions, restore
EPCR and ESR (EEAR is not essential to restore)
and then return from the interrupt. */
/******************************************/
/* Normal exception handling */
/* Called with 80 bytes allocated on the */
/* stack, the vector function in r11, and */
/* the vector number in r3. Original */
/* values at 28(r1) and 0(r1). */
/******************************************/
.proc ___standard_exception
.def ___standard_exception
.val ___standard_exception
.scl 2
.type 044
.endef
.global ___standard_exception
___standard_exception:
l.sfeqi r11,0 /* Ignore it if it is zero */
l.bf L2_2
l.sw 4(r1),r4 /* Save r4 */
/* Ignore fast context switching in this release. */
/* It's poorly conceived, and will probably never */
/* be implemented... */
l.sw 8(r1),r5
l.sw 12(r1),r6
l.sw 16(r1),r7
l.mfspr r4,r0,0x20 /* Save EPCR */
l.mfspr r5,r0,0x30 /* Save EEAR */
l.mfspr r6,r0,0x40 /* Save ESR */
l.mfspr r7,r0,17
l.ori r7,r7,2
l.mtspr r0,r7,17 /* Reenable exceptions */
l.sw 20(r1),r8
l.sw 24(r1),r9
l.sw 32(r1),r12
l.sw 36(r1),r14
l.sw 40(r1),r16
l.sw 44(r1),r18
l.sw 48(r1),r20
l.sw 52(r1),r22
l.sw 56(r1),r24
l.sw 60(r1),r26
l.sw 64(r1),r28
l.sw 68(r1),r30
l.sw 72(r1),r4 /* Save EPCR. User could change r4 */
/* Now, call the installed handler with the arguments:
r3 ==> vector # (1-14)
r4 ==> EPCR
r5 ==> EEAR
r6 ==> ESR
r11 ==> User function
*/
l.jal ___user_function /* Call the user routine */
l.sw 76(r1),r6 /* Save ESR. User could change r6 */
/* Ignore r5 (EEAR). It is not critical for state */
l.lwz r30,68(r1)
l.lwz r28,64(r1)
l.lwz r26,60(r1)
l.lwz r24,56(r1)
l.lwz r22,52(r1)
l.lwz r20,48(r1)
l.lwz r18,44(r1)
l.lwz r16,40(r1)
l.lwz r14,36(r1)
l.lwz r12,32(r1)
l.lwz r9,24(r1)
l.lwz r8,20(r1)
l.lwz r7,16(r1)
l.lwz r5,8(r1)
l.addi r6,r0,-3 /* Set r6 to 0xFFFFFFFD */
l.mfspr r3,r0,17 /* Get SR value */
l.and r3,r3,r6 /* Clear exception bit */
l.mfspr r0,r3,17 /* Disable exceptions */
l.lwz r6,76(r1) /* Recover ESR */
l.lwz r4,72(r1) /* Recover EPCR */
l.mtspr r0,r4,0x20 /* Restore ESR */
l.mtspr r0,r6,0x40 /* Restore EPCR */
l.lwz r6,12(r1)
l.lwz r4,4(r1)
L2_2:
l.lwz r11,28(r1)
l.lwz r3,0(r1)
l.addi r1,r1,80
l.rfe
l.nop /* The document doesn't say this is
a delay slot instruction, but the
simulator doesn't work without this. */
.endproc ___standard_exception
.def ___standard_exception
.val .
.scl -1
.endef
/****************************************************************************/
/* These constants must be in .text section in order to be */
/* properly addressed in code. */
PUBLIC(BOTTOM_OF_MEMORY)
SYM (BOTTOM_OF_MEMORY):
.word 0x10000000 # Assume RAM @ 0 for the sim
PUBLIC(TOP_OF_MEMORY)
SYM (TOP_OF_MEMORY):
.word 0x10800000 # Assume RAM @ 0 for the sim
/****************************************************************************/
/** Currently, about 57 of the 64 valid address locations
are being used here. If you add code to the above
routine, make sure it isn't more than 7 instructions
or you will overflow into the reset vector. **/
/****************************/
/* Reset vector static code */
/****************************/
.org 0x100
.proc ___rst
.global ___rst
___rst:
/* Set the stack pointer */
l.movhi r1,hi(_TOP_OF_MEMORY)
l.ori r1,r1,lo(_TOP_OF_MEMORY)
l.lwz r1,0(r1) /* Dereference it */
/* Set the frame pointer */
l.add r2,r0,r1
l.mfspr r3,r0,17 /* Get SR value */
l.ori r3,r3,2 /* Set exception enable bit */
l.j _start /* Jump to main routine */
l.mtspr r0,r3,17 /* Enable exceptions (DELAY) */
.endproc ___rst
/***********************************************************/
/* Note: right after the reset vector, we are going to */
/* place a table with the necessary values to initialize */
/* the memory controller. This pointer will be set and */
/* passed to the _start routine in r4. The first thing the */
/* the _start routine will do is to initialize the memory */
/* controller. The code to initialze the memory controller */
/* is expected to be larger than the 50 some odd */
/* instructions that are remaining here before the bus */
/* error vector, which is why it is left to the _start */
/* routine. */
/***********************************************************/
/********************************/
/* Bus Error vector static code */
/********************************/
.org 0x200
.proc ___bus_error
.global ___bus_error
___bus_error:
l.addi r1,r1,-80
l.sw 0(r1),r3
l.sw 28(r1),r11
l.movhi r11,hi(_Or1k_Interrupt_Vectors)
l.ori r11,r11,lo(_Or1k_Interrupt_Vectors)
l.lwz r11,8(r11)
l.j ___standard_exception
l.addi r3,r0,2
.endproc ___bus_error
/* Put _Internal_error_Occurred and _int_reenable here */
/* No reason to waste space...it'll be filled with 0 if */
/* we don't... */
/********************************/
/* _Internal_error_Occurred */
/********************************/
.proc __Internal_error_Occurred
.def __Internal_error_Occurred
.val __Internal_error_Occurred
.scl 2
.type 044
.endef
.global __Internal_error_Occurred
__Internal_error_Occurred:
l.jal __panic
l.nop
.endproc __Internal_error_Occurred
.def __Internal_error_Occurred
.val .
.scl -1
.endef
/*********************/
/* _int_reenable */
/*********************/
.proc __int_reenable
.def __int_reenable
.val __int_reenable
.scl 2
.type 044
.endef
.global __int_reenable
__int_reenable:
l.mfspr r11,r0,17
l.ori r11,r11,0x04
l.jr r9
l.mtspr r0,r11,17
.endproc __int_reenable
.def __int_reenable
.val .
.scl -1
.endef
/*********************&**/
/* ___user_function */
/************************/
.proc ___user_function
.def ___user_function
.val ___user_function
.scl 2
.type 044
.endef
.global ___user_function
___user_function:
/* r11 contains the address to call. We can
modify r7, r8, r12, and r14 at will */
l.movhi r7,hi(__Thread_Dispatch_disable_level)
l.ori r7,r7,lo(__Thread_Dispatch_disable_level)
l.lwz r8,0(r7)
l.addi r1,r1,-8 # Stack must be DWORD aligned
l.sw 0(r1),r9 # Save the return address
l.addi r8,r8,1 # Increment __Thread_Dispatch...
l.jalr r11
l.sw 0(r7),r8 # Disable thread dispatching
/* Now, we need to determine if we need to
service the RTEMS environment. RTEMS tries
to draw a distinction between a RAW handler
(where this isn't necessary) and an RTEMS
handler. However, it appears almost all ISR's
will not be RAW under this definition, and
those that are will not honestly be hurt by
the 20 or so extra cycles it will take to do
the following code. If there is a very frequent
interrupt, then it should probably be hard
coded into the static routine anyway, rather
than suffer the hit of calling it indirectly */
/* Note: RTEMS recommends incrementing and
decrementing the _ISR_Nest_Level as well.
We are specifically not doing this because
in the Or1k architecture it is impossible
to nest interrupts. Interrupts must run to
completion before reenabling. If there is a
significant task to be done, then it should
run in a bottom half handler, similar to the
way Linux works. In theory though, even if
we do allow nested interrupts, there is no
reason for this flag, as it seems to be for
the purpose of restoring the normal stack in
place of the interrupt stack. We don't use a
separate exception stack, so this should not
be an issue for us. */
l.movhi r7,hi(__Thread_Dispatch_disable_level)
l.ori r7,r7,lo(__Thread_Dispatch_disable_level)
l.lwz r8,0(r7)
l.addi r8,r8,-1 # Decrement __Thread_Dispatch...
l.sw 0(r7),r8 # Memory stall likely here...
l.sfeqi r8,0 # Skip if _Thread_Dispatch != 0
l.bnf L4_2
l.movhi r7,hi(__Context_Switch_necessary)
l.ori r7,r7,lo(__Context_Switch_necessary)
l.lwz r8,0(r7)
l.movhi r7,hi(__ISR_Signals_to_thread_executing)
l.ori r7,r7,lo(__ISR_Signals_to_thread_executing)
l.lwz r12,0(r7)
l.sfeqi r8,0 # Skip if __Context... is false
l.bf L4_2
l.movhi r14,hi(__Thread_Dispatch)
l.sfeqi r12,0 # Skip if __ISR... is true
l.bnf L4_2
l.ori r14,r14,lo(__Thread_Dispatch)
l.jalr r14
l.sw 0(r7),r0 # Set __ISR... to false
L4_2:
l.lwz r9,0(r1) # Recover the return address
l.jr r9
l.addi r1,r1,8 # Reset the stack
.endproc ___user_function
.def ___user_function
.val .
.scl -1
.endef
/* Code wasted between here and 0x300 */
/**************************************/
/* Data Page Fault vector static code */
/**************************************/
.org 0x300
.proc ___data_page_fault
.global ___data_page_fault
___data_page_fault:
l.addi r1,r1,-80
l.sw 0(r1),r3
l.sw 28(r1),r11
l.movhi r11,hi(_Or1k_Interrupt_Vectors)
l.ori r11,r11,lo(_Or1k_Interrupt_Vectors)
l.lwz r11,12(r11)
l.j ___standard_exception
l.addi r3,r0,3
.endproc ___data_page_fault
/* Code wasted between here and 0x400 */
/*********************************************/
/* Instruction Page Fault vector static code */
/*********************************************/
.org 0x400
.proc ___insn_page_fault
.global ___insn_page_fault
___insn_page_fault:
l.addi r1,r1,-80
l.sw 0(r1),r3
l.sw 28(r1),r11
l.movhi r11,hi(_Or1k_Interrupt_Vectors)
l.ori r11,r11,lo(_Or1k_Interrupt_Vectors)
l.lwz r11,16(r11)
l.j ___standard_exception
l.addi r3,r0,4
.endproc ___insn_page_fault
/* Code wasted between here and 0x500 */
/**************************************/
/* Low Priority Interrupt static code */
/**************************************/
.org 0x500
.proc ___low_priority_int
.global ___low_priority_int
___low_priority_int:
l.addi r1,r1,-80
l.sw 0(r1),r3
l.sw 28(r1),r11
l.mfspr r3,r0,17 # Get the SR
l.addi r11,r0,-5 # r11 = 0xFFFFFFFB
l.and r11,r11,r3 # Clear the EIR bit
l.mtspr r0,r11,17 # Set the SR w/o INT
l.movhi r11,hi(_Or1k_Interrupt_Vectors)
l.ori r11,r11,lo(_Or1k_Interrupt_Vectors)
l.lwz r11,20(r11)
l.j ___standard_exception
l.addi r3,r0,5
.endproc ___low_priority_int
/* Code wasted between here and 0x600 */
/******************************************/
/* Alignment Exception vector static code */
/******************************************/
.org 0x600
.proc ___alignment_exception
.global ___alignment_exception
___alignment_exception:
l.addi r1,r1,-80
l.sw 0(r1),r3
l.sw 28(r1),r11
l.movhi r11,hi(_Or1k_Interrupt_Vectors)
l.ori r11,r11,lo(_Or1k_Interrupt_Vectors)
l.lwz r11,24(r11)
l.j ___standard_exception
l.addi r3,r0,6
.endproc ___alignment_exception
/* Code wasted between here and 0x700 */
/******************************************/
/* Illegal Instruction vector static code */
/******************************************/
.org 0x700
.proc ___illegal_instruction
.global ___illegal_instruction
___illegal_instruction:
l.addi r1,r1,-80
l.sw 0(r1),r3
l.sw 28(r1),r11
l.movhi r11,hi(_Or1k_Interrupt_Vectors)
l.ori r11,r11,lo(_Or1k_Interrupt_Vectors)
l.lwz r11,28(r11)
l.j ___standard_exception
l.addi r3,r0,7
.endproc ___illegal_instruction
/* Code wasted between here and 0x800 */
/***************************************/
/* High Priority Interrupt static code */
/***************************************/
.org 0x800
.proc ___high_priority_int
.global ___high_priority_int
___high_priority_int:
l.addi r1,r1,-80
l.sw 0(r1),r3
l.sw 28(r1),r11
l.mfspr r3,r0,17 # Get the SR
l.addi r11,r0,-5 # r11 = 0xFFFFFFFB
l.and r11,r11,r3 # Clear the EIR bit
l.mtspr r0,r11,17 # Set the SR w/o INT
l.movhi r11,hi(_Or1k_Interrupt_Vectors)
l.ori r11,r11,lo(_Or1k_Interrupt_Vectors)
l.lwz r11,32(r11)
l.j ___standard_exception
l.addi r3,r0,8
.endproc ___high_priority_int
/* Code wasted between here and 0x900 */
/********************************/
/* ITBL Miss vector static code */
/********************************/
.org 0x900
.proc ___ITBL_miss_exception
.global ___ITBL_miss_exception
___ITBL_miss_exception:
l.addi r1,r1,-80
l.sw 0(r1),r3
l.sw 28(r1),r11
l.movhi r11,hi(_Or1k_Interrupt_Vectors)
l.ori r11,r11,lo(_Or1k_Interrupt_Vectors)
l.lwz r11,36(r11)
l.j ___standard_exception
l.addi r3,r0,9
.endproc ___ITBL_miss_exception
/* Code wasted between here and 0xA00 */
/********************************/
/* DTBL Miss vector static code */
/********************************/
.org 0xA00
.proc ___DTBL_miss_exception
.global ___DTBL_miss_exception
___DTBL_miss_exception:
l.addi r1,r1,-80
l.sw 0(r1),r3
l.sw 28(r1),r11
l.movhi r11,hi(_Or1k_Interrupt_Vectors)
l.ori r11,r11,lo(_Or1k_Interrupt_Vectors)
l.lwz r11,40(r11)
l.j ___standard_exception
l.addi r3,r0,10
.endproc ___DTBL_miss_exception
/* Code wasted between here and 0xB00 */
/**************************************/
/* Range Exception vector static code */
/**************************************/
.org 0xB00
.proc ___range_exception
.global ___range_exception
___range_exception:
l.addi r1,r1,-80
l.sw 0(r1),r3
l.sw 28(r1),r11
l.movhi r11,hi(_Or1k_Interrupt_Vectors)
l.ori r11,r11,lo(_Or1k_Interrupt_Vectors)
l.lwz r11,44(r11)
l.j ___standard_exception
l.addi r3,r0,11
.endproc ___range_exception
/* Code wasted between here and 0xC00 */
/**********************************/
/* System Call vector static code */
/**********************************/
.org 0xC00
.proc ___system_call
.global ___system_call
___system_call:
l.addi r1,r1,-80
l.sw 0(r1),r3
l.sw 28(r1),r11
l.movhi r11,hi(_Or1k_Interrupt_Vectors)
l.ori r11,r11,lo(_Or1k_Interrupt_Vectors)
l.lwz r11,48(r11)
l.j ___standard_exception
l.addi r3,r0,12
.endproc ___system_call
/* Code wasted between here and 0xD00 */
/**********************************/
/* Breakpoint vector static code */
/**********************************/
.org 0xD00
.proc ___breakpoint
.global ___breakpoint
___breakpoint:
/* In keeping with the necessary requirements for
gdb to work, we are limiting this vector to
only 2 statements, which effect an immediate
return. At a later date, we may insert a debug
monitor here that will do even more, but for
now, this is all we want. */
l.rfe
l.nop
.endproc ___breakpoint
/* Code wasted between here and 0xE00 */
/*************************************/
/* Trap Exception vector static code */
/*************************************/
.org 0xE00
.proc ___trap_exception
.global ___trap_exception
___trap_exception:
l.addi r1,r1,-80
l.sw 0(r1),r3
l.sw 28(r1),r11
l.movhi r11,hi(_Or1k_Interrupt_Vectors)
l.ori r11,r11,lo(_Or1k_Interrupt_Vectors)
l.lwz r11,56(r11)
l.j ___standard_exception
l.addi r3,r0,14
.endproc ___trap_exception
/* Code wasted between here and 0x2000 */
/* Exceptions from 0xF00 to 0x1F00 are not defined */
/* in the Or1k architecture. They should be filled */
/* in here for other implementations. */
.org 0x2000 /* Start after exception vector table */
/*********************/
/* start */
/*********************/
/* This is where we jump to right after the reset exception
handler. The system configuration information should
be passed to us in a pointer in r4. Generally, the
reset vector will call this routine directly, and
the memory configuration information will be stored
in the ROM/Flash image. It was decided no attempt
would be made to automatically determine this
information by probing, as the scheme would be too
complex and inherently unreliable. */
/* Initialize strings and structures here */
L_program:
.ascii "RTEMS_or1k\000"
.align 4
L_argv:
.word L_program
.proc _start
.def _start
.val _start
.scl 2
.type 044
.endef
.global _start
_start:
/* Initialize the memory controller here!
Discussions with Rudi have stated that
the first few bytes of the ROM image should
contain a RAM map as opposed to trying to
figure out what to do based on probing. This
means a separate build of the OS for every
possible board configuration, but there
doesn't seem to be a better alternative. */
/*** FIX ME! Initialize the external memory controller! ***/
/* Move the data segment to RAM. Alternatively, we may
copy the text segment as well. For now, we'll assume
that the cache gives us sufficient performance that this
is not necessary. It will be very easy to add this later.
*/
l.movhi r4,hi(_etext)
l.ori r4,r4,lo(_etext)
l.movhi r5,hi(_BOTTOM_OF_MEMORY)
l.ori r5,r5,lo(_BOTTOM_OF_MEMORY)
l.lwz r5,0(r5) # Dereference it
/* l.add r5,r5,r4 # Place it in memory above the text segment*/
l.movhi r3,hi(_edata)
l.ori r3,r3,lo(_edata)
l.movhi r5,hi(_data_start)
l.ori r5,r5,lo(_data_start)
L3_0:
l.lwz r6,0(r4)
l.addi r5,r5,4
l.addi r4,r4,4
l.sfeq r3,r5
l.bnf L3_0
l.sw -4(r5),r6 # Minimize write after read stalls
/* Initialize the BSS segment */
l.movhi r3,hi(__end)
l.ori r3,r3,lo(__end)
/* l.sub r3,r3,r4
l.add r3,r3,r5*/
l.sfleu r3,r5
l.bf L3_2 # Check for no BSS segment!
l.nop
L3_1:
l.addi r5,r5,4
l.sfeq r5,r3
l.bnf L3_1
l.sw -4(r5),r0
L3_2:
/* Tell everyone where the heap begins */
l.movhi r4,hi(__mem_end)
l.ori r4,r4,lo(__mem_end)
l.sw 0(r4),r5
/* Due to what I consider a bug in RTEMS, the entire
heap must be zeroed. I think this is the dumbest thing
I've ever heard, but whatever turns them on. I'd rather
see the code which depends on this behavior fixed. I
myself have never written code which assumes zeroes
will be returned from memory allocated from the heap.
Anyway, if I don't do it here, I have to set a flag in
the CPU structure which then will do it anyway, but
from less efficient C code! Zero from here to the
stack pointer... One day when I'm old and gray maybe
I'll set this to random values instead and fix
whatever breaks. */
l.sw 0(r5),r0
l.sfeq r5,r1
l.bnf L3_3
l.addi r5,r5,4
L3_3:
l.addi r3,r0,1 /* Set argc to 1 */
l.movhi r4,hi(L_argv) /* Initialize argv */
l.ori r4,r4,lo(L_argv)
l.addi r5,r5,0 /* Set envp to NULL */
l.mfspr r11,r0,17 /* Get SR value */
l.ori r11,r11,0x4 /* Set interrupt enable bit */
l.jal _boot_card /* Boot up the card...run the OS */
l.mtspr r0,r11,17 /* Enable exceptions (DELAY) */
/* We're done. We exited normally. Shut down. */
l.jal __exit
l.nop
.endproc _start
.def _start
.val .
.scl -1
.endef
END_CODE

View File

@@ -1,26 +0,0 @@
/* bsp_cleanup()
*
* This routine normally is part of start.s and usually returns
* control to a monitor.
*
* INPUT: NONE
*
* OUTPUT: NONE
*
* 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.com/license/LICENSE.
*
* $Id$
*/
#include <rtems.h>
#include <bsp.h>
void bsp_cleanup( void )
{
exit(0);
}

View File

@@ -1,118 +0,0 @@
/*
* This routine starts the application. It includes application,
* board, and monitor specific initialization and configuration.
* The generic CPU dependent initialization has been performed
* before this routine is invoked.
*
* 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.com/license/LICENSE.
*
* This file adapted from no_bsp board library of the RTEMS distribution.
* The body has been modified for the Bender Or1k implementation by
* Chris Ziomkowski. <chris@asics.ws>
*/
#include <bsp.h>
#include <rtems/libio.h>
#include <rtems/libcsupport.h>
#include <string.h>
extern int _mem_end;
/*
* The original table from the application and our copy of it with
* some changes.
*/
extern rtems_configuration_table Configuration;
rtems_configuration_table BSP_Configuration;
rtems_cpu_table Cpu_table;
/*
* Use the shared implementations of the following routines
*/
void bsp_postdriver_hook(void);
void bsp_libc_init( void *, uint32_t, int );
/*
* Function: bsp_pretasking_hook
* Created: 95/03/10
*
* Description:
* BSP pretasking hook. Called just before drivers are initialized.
* Used to setup libc and install any BSP extensions.
*
* NOTES:
* Must not use libc (to do io) from here, since drivers are
* not yet initialized.
*
*/
void bsp_pretasking_hook(void)
{
uint32_t heap_start;
heap_start = (uint32_t) _mem_end;
if (heap_start & (CPU_ALIGNMENT-1))
heap_start = (heap_start + CPU_ALIGNMENT) & ~(CPU_ALIGNMENT-1);
bsp_libc_init((void *) heap_start, 64 * 1024, 0);
#ifdef RTEMS_DEBUG
rtems_debug_enable( RTEMS_DEBUG_ALL_MASK );
#endif
}
/*
* bsp_start
*
* This routine does the bulk of the system initialization.
*/
void bsp_start( void )
{
/*
* Allocate the memory for the RTEMS Work Space. This can come from
* a variety of places: hard coded address, malloc'ed from outside
* RTEMS world (e.g. simulator or primitive memory manager), or (as
* typically done by stock BSPs) by subtracting the required amount
* of work space from the last physical address on the CPU board.
*/
/*
* Need to "allocate" the memory for the RTEMS Workspace and
* tell the RTEMS configuration where it is. This memory is
* not malloc'ed. It is just "pulled from the air".
*/
BSP_Configuration.work_space_start = _mem_end;
_mem_end += BSP_Configuration.work_space_size + 512;
( BSP_Configuration.work_space_size + 512 );
BSP_Configuration.work_space_start = (void *) ((unsigned int)((char *)BSP_Configuration.work_space_start + CPU_ALIGNMENT) & ~(CPU_ALIGNMENT-1));
/*
* initialize the CPU table for this BSP
*/
Cpu_table.pretasking_hook = bsp_pretasking_hook; /* init libc, etc. */
Cpu_table.postdriver_hook = bsp_postdriver_hook;
Cpu_table.do_zero_of_workspace = FALSE;
Cpu_table.interrupt_stack_size = CONFIGURE_INTERRUPT_STACK_MEMORY;
/*
* Start RTEMS
*/
rtems_initialize_executive( &BSP_Configuration, &Cpu_table );
bsp_cleanup();
}

View File

@@ -1,82 +0,0 @@
/*
* This file contains directives for the GNU linker which are specific
* to the NO_CPU NO_BSP BOARD.
*
* 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.com/license/LICENSE.
*
* $Id$
*/
MEMORY
{
flash : org = 0x00000000, l = 2M
ram : org = 0x10000000, l = 32M
}
SECTIONS
{
.text : AT (0x0) {
text_start = . ;
_text_start = . ;
*(.text)
. = ALIGN (16);
/*
* Special FreeBSD sysctl sections.
*/
. = ALIGN (16);
__start_set_sysctl_set = .;
*(set_sysctl_*);
__stop_set_sysctl_set = ABSOLUTE(.);
*(set_domain_*);
*(set_pseudo_*);
*(.eh_fram)
. = ALIGN (16);
/*
* C++ constructors
*/
__CTOR_LIST__ = .;
LONG((__CTOR_END__ - __CTOR_LIST__) / 4 - 2)
*(.ctors)
LONG(0)
__CTOR_END__ = .;
__DTOR_LIST__ = .;
LONG((__DTOR_END__ - __DTOR_LIST__) / 4 - 2)
*(.dtors)
LONG(0)
__DTOR_END__ = .;
_etext = ALIGN( 0x10 ) ;
. = ALIGN( 0x10) ;
} > flash
.data : AT ( ADDR(.text) + SIZEOF(.text) ) {
data_start = . ;
_data_start = . ;
*(.data)
_edata = ALIGN( 0x10 );
. = ALIGN (0x10);
} > ram
.bss : AT ( ADDR(.text) + SIZEOF(.text) + SIZEOF(.data) ) {
bss_start = .;
_bss_start = .;
*(.bss)
*(COMMON)
end = ALIGN( 0x10 );
__end = ALIGN( 0x10 );
. = ALIGN (0x10);
} > ram
}

View File

@@ -1,42 +0,0 @@
/* set_vector
*
* This routine installs an interrupt vector on the target Board/CPU.
* This routine is allowed to be as board dependent as necessary.
*
* INPUT:
* handler - interrupt handler entry point
* vector - vector number
* type - 0 indicates raw hardware connect
* 1 indicates RTEMS interrupt connect
*
* RETURNS:
* address of previous interrupt handler
*
* 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.com/license/LICENSE.
*
* $Id$
*/
#include <rtems.h>
#include <bsp.h>
no_cpu_isr_entry set_vector( /* returns old vector */
rtems_isr_entry handler, /* isr routine */
rtems_vector_number vector, /* vector number */
int type /* RTEMS or RAW intr */
)
{
no_cpu_isr_entry previous_isr;
if ( type )
rtems_interrupt_catch( handler, vector, (rtems_isr_entry *) &previous_isr );
else {
/* XXX: install non-RTEMS ISR as "raw" interupt */
}
return previous_isr;
}

View File

@@ -1,103 +0,0 @@
/* timer.c
*
* This file manages the benchmark timer used by the RTEMS Timing Test
* Suite. Each measured time period is demarcated by calls to
* Timer_initialize() and Read_timer(). Read_timer() usually returns
* the number of microseconds since Timer_initialize() exitted.
*
* NOTE: It is important that the timer start/stop overhead be
* determined when porting or modifying this code.
*
* 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.com/license/LICENSE.
*
* $Id$
*/
#include <rtems.h>
#include <bsp.h>
uint32_t Timer_interrupts;
rtems_boolean Timer_driver_Find_average_overhead;
void Timer_initialize( void )
{
/*
* Timer has never overflowed. This may not be necessary on some
* implemenations of timer but ....
*/
Timer_interrupts = 0;
/*
* Somehow start the timer
*/
}
/*
* The following controls the behavior of Read_timer().
*
* AVG_OVEREHAD is the overhead for starting and stopping the timer. It
* is usually deducted from the number returned.
*
* LEAST_VALID is the lowest number this routine should trust. Numbers
* below this are "noise" and zero is returned.
*/
#define AVG_OVERHEAD 0 /* It typically takes X.X microseconds */
/* (Y countdowns) to start/stop the timer. */
/* This value is in microseconds. */
#define LEAST_VALID 1 /* Don't trust a clicks value lower than this */
int Read_timer( void )
{
uint32_t clicks;
uint32_t total;
/*
* Read the timer and see how many clicks it has been since we started.
*/
clicks = 0; /* XXX: read some HW here */
/*
* Total is calculated by taking into account the number of timer overflow
* interrupts since the timer was initialized and clicks since the last
* interrupts.
*/
total = clicks * 0;
if ( Timer_driver_Find_average_overhead == 1 )
return total; /* in XXX microsecond units */
else {
if ( total < LEAST_VALID )
return 0; /* below timer resolution */
/*
* Somehow convert total into microseconds
*/
return (total - AVG_OVERHEAD);
}
}
/*
* Empty function call used in loops to measure basic cost of looping
* in Timing Test Suite.
*/
rtems_status_code Empty_function( void )
{
return RTEMS_SUCCESSFUL;
}
void Set_find_average_overhead(
rtems_boolean find_flag
)
{
Timer_driver_Find_average_overhead = find_flag;
}

View File

@@ -1,36 +0,0 @@
/* timerisr.s
*
* If required this ISR is used to bump a count of interval "overflow"
* interrupts which have occurred since the timer was started. The
* number of overflows is taken into account in the Read_timer()
* routine if necessary.
*
* To reduce overhead this is best to be the "rawest" hardware interupt
* handler you can write. This should be the only interrupt which can
* occur during the measured time period.
*
* NOTE: This file is USUALLY in assembly and is LEAN AND MEAN.
* Any code in this isr is pure overhead which can perturb
* the accuracy of the Timing Test Suite.
*
* 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.com/license/LICENSE.
*
* $Id$
*/
#include <rtems.h>
extern uint32_t _Timer_interrupts;
void timerisr( void )
{
/*
* _Timer_interrupts += TIMER_BETWEEN_OVERFLOWS (usually in microseconds)
* return from interrupt
*/
}

View File

@@ -1,194 +0,0 @@
#
# Timing Test Suite Results for the NO_BSP
#
# NOTE: This is just a template. The times are irrelevant since this BSP
# can only be compiled -- not executed.
#
# $Id$
#
Board:
CPU: include coprocessor if applicable
Clock Speed:
Memory Configuration: SRAM, DRAM, cache, etc
Wait States:
Times Reported in: cycles, microseconds, etc
Timer Source: Count Down Timer, on-CPU cycle counter, etc
Column X:
Column Y:
# DESCRIPTION A B
== ================================================================= ==== ====
1 rtems_semaphore_create 20
rtems_semaphore_delete 21
rtems_semaphore_obtain: available 15
rtems_semaphore_obtain: not available -- NO_WAIT 15
rtems_semaphore_release: no waiting tasks 16
2 rtems_semaphore_obtain: not available -- caller blocks 62
3 rtems_semaphore_release: task readied -- preempts caller 55
4 rtems_task_restart: blocked task -- preempts caller 77
rtems_task_restart: ready task -- preempts caller 70
rtems_semaphore_release: task readied -- returns to caller 25
rtems_task_create 57
rtems_task_start 31
rtems_task_restart: suspended task -- returns to caller 36
rtems_task_delete: suspended task 47
rtems_task_restart: ready task -- returns to caller 37
rtems_task_restart: blocked task -- returns to caller 46
rtems_task_delete: blocked task 50
5 rtems_task_suspend: calling task 51
rtems_task_resume: task readied -- preempts caller 49
6 rtems_task_restart: calling task 59
rtems_task_suspend: returns to caller 18
rtems_task_resume: task readied -- returns to caller 19
rtems_task_delete: ready task 50
7 rtems_task_restart: suspended task -- preempts caller 70
8 rtems_task_set_priority: obtain current priority 12
rtems_task_set_priority: returns to caller 27
rtems_task_mode: obtain current mode 5
rtems_task_mode: no reschedule 5
rtems_task_mode: reschedule -- returns to caller 8
rtems_task_mode: reschedule -- preempts caller 39
rtems_task_set_note 13
rtems_task_get_note 13
rtems_clock_set 33
rtems_clock_get 3
9 rtems_message_queue_create 110
rtems_message_queue_send: no waiting tasks 37
rtems_message_queue_urgent: no waiting tasks 37
rtems_message_queue_receive: available 31
rtems_message_queue_flush: no messages flushed 12
rtems_message_queue_flush: messages flushed 16
rtems_message_queue_delete 26
10 rtems_message_queue_receive: not available -- NO_WAIT 15
rtems_message_queue_receive: not available -- caller blocks 62
11 rtems_message_queue_send: task readied -- preempts caller 72
12 rtems_message_queue_send: task readied -- returns to caller 39
13 rtems_message_queue_urgent: task readied -- preempts caller 72
14 rtems_message_queue_urgent: task readied -- returns to caller 39
15 rtems_event_receive: obtain current events 1
rtems_event_receive: not available -- NO_WAIT 12
rtems_event_receive: not available -- caller blocks 56
rtems_event_send: no task readied 12
rtems_event_receive: available 12
rtems_event_send: task readied -- returns to caller 24
16 rtems_event_send: task readied -- preempts caller 55
17 rtems_task_set_priority: preempts caller 62
18 rtems_task_delete: calling task 83
19 rtems_signal_catch 9
rtems_signal_send: returns to caller 15
rtems_signal_send: signal to self 18
exit ASR overhead: returns to calling task 22
exit ASR overhead: returns to preempting task 49
20 rtems_partition_create 35
rtems_region_create 23
rtems_partition_get_buffer: available 15
rtems_partition_get_buffer: not available 13
rtems_partition_return_buffer 18
rtems_partition_delete 16
rtems_region_get_segment: available 22
rtems_region_get_segment: not available -- NO_WAIT 21
rtems_region_return_segment: no waiting tasks 19
rtems_region_get_segment: not available -- caller blocks 64
rtems_region_return_segment: task readied -- preempts caller 74
rtems_region_return_segment: task readied -- returns to caller 44
rtems_region_delete 16
rtems_io_initialize 2
rtems_io_open 1
rtems_io_close 1
rtems_io_read 1
rtems_io_write 1
rtems_io_control 1
21 rtems_task_ident 149
rtems_message_queue_ident 145
rtems_semaphore_ident 156
rtems_partition_ident 145
rtems_region_ident 148
rtems_port_ident 145
rtems_timer_ident 145
rtems_rate_monotonic_ident 145
22 rtems_message_queue_broadcast: task readied -- returns to caller 42
rtems_message_queue_broadcast: no waiting tasks 17
rtems_message_queue_broadcast: task readied -- preempts caller 78
23 rtems_timer_create 14
rtems_timer_fire_after: inactive 22
rtems_timer_fire_after: active 24
rtems_timer_cancel: active 15
rtems_timer_cancel: inactive 13
rtems_timer_reset: inactive 21
rtems_timer_reset: active 23
rtems_timer_fire_when: inactive 34
rtems_timer_fire_when: active 34
rtems_timer_delete: active 19
rtems_timer_delete: inactive 17
rtems_task_wake_when 69
24 rtems_task_wake_after: yield -- returns to caller 9
rtems_task_wake_after: yields -- preempts caller 45
25 rtems_clock_tick 4
26 _ISR_Disable 0
_ISR_Flash 1
_ISR_Enable 1
_Thread_Disable_dispatch 0
_Thread_Enable_dispatch 7
_Thread_Set_state 11
_Thread_Disptach (NO FP) 31
context switch: no floating point contexts 21
context switch: self 10
context switch: to another task 10
context switch: restore 1st FP task 25
fp context switch: save idle, restore idle 31
fp context switch: save idle, restore initialized 19
fp context switch: save initialized, restore initialized 20
_Thread_Resume 7
_Thread_Unblock 7
_Thread_Ready 9
_Thread_Get 4
_Semaphore_Get 2
_Thread_Get: invalid id 0
27 interrupt entry overhead: returns to interrupted task 6
interrupt exit overhead: returns to interrupted task 6
interrupt entry overhead: returns to nested interrupt 6
interrupt exit overhead: returns to nested interrupt 5
interrupt entry overhead: returns to preempting task 7
interrupt exit overhead: returns to preempting task 36
28 rtems_port_create 16
rtems_port_external_to_internal 11
rtems_port_internal_to_external 11
rtems_port_delete 16
29 rtems_rate_monotonic_create 15
rtems_rate_monotonic_period: initiate period -- returns to caller 21
rtems_rate_monotonic_period: obtain status 13
rtems_rate_monotonic_cancel 16
rtems_rate_monotonic_delete: inactive 18
rtems_rate_monotonic_delete: active 20
rtems_rate_monotonic_period: conclude periods -- caller blocks 53