Update from "erik.ivanenko" <erik.ivanenko@utoronto.ca>.

Also removed bsp_postdriver_hook() from every bsp possible and moved
to shared version.
This commit is contained in:
Joel Sherrill committed 1998-03-30 13:42:13 +00:00
1 parent ece79bb1ab
commit 334427722c
12 files changed
+1430 -128

No files matched your search

+1 -1
View File
@@ -16,4 +16,4 @@ include $(RTEMS_ROOT)/make/directory.cfg
#was:
#SUB_DIRS=include startup clock console shmsupp timer wrapup
#is
SUB_DIRS=include startup clock console timer wrapup
SUB_DIRS=include start startup clock console timer wrapup
+1 -1
View File
@@ -19,5 +19,5 @@
%{qrtems_debug: start_g.o%s}}
*link:
%{!qrtems: %(old_link)} %{qrtems: -dc -dp -N -e start}
%{!qrtems: %(old_link)} %{qrtems: -dc -dp -N -e reset}
@@ -19,7 +19,7 @@
#include <stdlib.h>
#include "../startup/80386ex.h"
#include "../start/80386ex.h"
/* console_cleanup
*
File diff suppressed because it is too large. Load diff
File diff suppressed because it is too large. Load diff
@@ -0,0 +1,57 @@
#
# $Id$
#
@SET_MAKE@
srcdir = @srcdir@
VPATH = @srcdir@
RTEMS_ROOT = @top_srcdir@
PROJECT_ROOT = @PROJECT_ROOT@
PGMS=${ARCH}/start.o
# C source names, if any, go here -- minus the .c
C_PIECES=
C_FILES=$(C_PIECES:%=%.c)
C_O_FILES=$(C_PIECES:%=${ARCH}/%.o)
H_FILES=
# Assembly source names, if any, go here -- minus the .s
S_PIECES=start
S_FILES=$(S_PIECES:%=%.s)
S_O_FILES=$(S_FILES:%.s=${ARCH}/%.o)
SRCS=$(C_FILES) $(H_FILES) $(S_FILES)
OBJS=$(C_O_FILES) $(S_O_FILES)
include $(RTEMS_ROOT)/make/custom/$(RTEMS_BSP).cfg
include $(RTEMS_ROOT)/make/leaf.cfg
#
# (OPTIONAL) Add local stuff here using +=
#
DEFINES +=
CPPFLAGS +=
CFLAGS +=
LD_PATHS +=
LD_LIBS +=
LDFLAGS +=
#
# Add your list of files to delete here. The config files
# already know how to delete some stuff, so you may want
# to just run 'make clean' first to see what gets missed.
# 'make clobber' already includes 'make clean'
#
CLEAN_ADDITIONS +=
CLOBBER_ADDITIONS +=
all: ${ARCH} $(SRCS) $(OBJS) $(PGM)
$(INSTALL_VARIANT) -m 555 ${PGMS} ${PROJECT_RELEASE}/lib
# Install the program(s), appending _g or _p as appropriate.
# for include files, just use $(INSTALL)
@@ -0,0 +1,115 @@
/* macros.inc
*
* This file assists the board independent startup code
* by initializing the chip-select channels to
* reflect the proper memory configuration.
*
* NOTE: No stack has been established when this routine
* is invoked. It returns to start.s through ldsegs
*
* Submitted by:
*
* Erik Ivanenko
* University of Toronto
* erik.ivanenko@utoronto.ca
*
* The license and distribution terms for this file may be
* found in the file LICENSE in this distribution or at
* http://www.OARcorp.com/rtems/license.html.
*
* $Id$
*/
.set GDT_CODE_PTR , 0x10
.set GDT_DATA_PTR , 0x18
.set BOARD_SELECT , 0x301
.set BOARD_DATA , 0x302
.set BOARD_LATCH , 0x303
#define SetExRegByte(_register,_value) \
movb $ ## _value, al; \
movw $ ## _register, dx; \
outb al, dx
#define SetExRegWord(_register,_value) \
movw $ ## _value, ax; \
movw $ ## _register, dx ; \
outw ax, dx
#define DESC2(lim_0_15, bas_0_15, bas_16_23, access, gran, bas_24_31) \
.word lim_0_15 ; \
.word bas_0_15 ; \
.byte bas_16_23 ; \
.byte access ; \
.byte gran ; \
.byte bas_24_31
#define DESC3( _base, _limit) \
.word _limit ; \
.long _base
/* THE GET_ACCESS IS CHANGED FROM 8E TO 9E */
#define INTERRUPT_GATE( _vector ) \
.word _vector ; \
.word GDT_CODE_PTR ; \
.byte 0x0 ; \
.byte 0x8E ; \
.word 0x0
#define rLOAD_INDEX( _selector, _segment_register) \
movl _selector , _segment_register ; \
addb al, ( eax )
#define rLOAD_SEGMENT( _reg, _segment_register) \
mov _reg , _segment_register ; \
/* #define rLOAD_SEGMENT( _reg, _segment_register) \
.code16 ; \
mov _reg , _segment_register ; \
.code32
*/
#define pLOAD_SEGMENT( _selector, _segment_register) \
movl $ ## _selector , eax ; .code16 ; \
mov ax, _segment_register ; .code32
/* #define MOVE_WORD( _immed32, _reg ) \
data16 ; \
movl _immed32, _reg
*/
#define MOVE_WORD( _immed32, _reg ) \
movw _immed32, _reg
/* #define MOVE_IMMED_WORD( _immed32, _reg ) \
data16 ; \
mov $ ## _immed32, _reg
#define CS_OFF( _cs_symbol, _reg ) \
data16 ; \
mov _cs_symbol, _reg ; \
data16 ;\
andl $0x000ffff, _reg
#define _16_NOPS \
nop ; \
nop ; \
nop ; \
nop ; \
nop ; \
nop ; \
nop ; \
nop ; \
nop ; \
nop ; \
nop ; \
nop ; \
nop ; \
nop ; \
nop ; \
nop ;
*/
File diff suppressed because it is too large. Load diff
@@ -11,17 +11,15 @@ PROJECT_ROOT = @PROJECT_ROOT@
PGM=${ARCH}/startup.rel
# C source names, if any, go here -- minus the .c
C_PIECES=bspclean bspstart main sbrk setvec
C_PIECES=bspclean bsppost bspstart main sbrk setvec
C_FILES=$(C_PIECES:%=%.c)
C_O_FILES=$(C_PIECES:%=${ARCH}/%.o)
H_FILES=
# Assembly source names, if any, go here -- minus the .s
# removed initcsu piece, ldsegs piece and flush
S_PIECES= gdt idt interrupts interns reset_jmp
S_PIECES=
S_FILES=$(S_PIECES:%=%.s)
S_O_FILES=$(S_FILES:%.s=${ARCH}/%.o)
+8 -18
View File
@@ -3,25 +3,15 @@
#
The doit shell file cd's to $H, which refers to the directory
that contains the hello world test. The console is a raw com port.
Certain test programs behave differently with different com port speeds.
To test the programs, it is required that you hook up a terminal
( or minicom or procomm it doesn't really matter ) to the comm port of
the target hardware. You must ensure that the baud rate, parity etc
is set properly. This is done on the target hardware within interns.s .
( Set your terminal emulator to match. ) Currently, the settings
are 9600,8,n,1 .
The requirements for this BSP are only that the GAS used supports the
.code16 directive. The GAS released with any GCC version 2.8.0 or better
is required. The BSP was built with an egcs snapshot pre-1.0.2 and
post-1.0.1. However, any egcs should work.
The format and layout of the file interns.s is taken from the
intel ApBuilder software, freely distributed by Intel. Some
easy macros ( SetExRegByte and SetExRegWord ) are basically lifted
from the Intel macros. Similarly for the names of the IO ports.
This "port" begain with the forceCPU bsp. Hence I am sure that
there is some real trash that is not appropriate. For example
the act of copying the Interrupt Descriptor tables and Global
descriptor tables "into our space". ( in start.s I think )
The only "real" differences are in bspstart.c, where the initialization now
configures all available RAM, (after setting up the Workspaces) as heap.
The location of the stack was changed so that the heap was not trapped
between low memory and the stack; the stack comes before the heap.
Erik
+48 -68
View File
@@ -1,14 +1,9 @@
/* bsp_start()
*
/*
* 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.
*
* INPUT: NONE
*
* OUTPUT: NONE
*
* COPYRIGHT (c) 1989-1998.
* On-Line Applications Research Corporation (OAR).
* Copyright assigned to U.S. Government, 1994.
@@ -17,6 +12,12 @@
* found in the file LICENSE in this distribution or at
* http://www.OARcorp.com/rtems/license.html.
*
* Ported to the i386ex and submitted by:
*
* Erik Ivanenko
* University of Toronto
* erik.ivanenko@utoronto.ca
*
* $Id$
*/
@@ -24,12 +25,9 @@
#include <rtems/libio.h>
#include <libcsupport.h>
#include <fcntl.h>
#ifdef PRINTON
extern char inbyte(void);
extern void outbyte(char);
#ifdef STACK_CHECKER_ON
#include <stackchk.h>
#endif
/*
@@ -42,23 +40,35 @@ rtems_configuration_table BSP_Configuration;
rtems_cpu_table Cpu_table;
char *rtems_progname;
/* Initialize whatever libc we are using
* called from postdriver hook
/*
* Tells us where to put the workspace in case remote debugger is present.
*/
extern rtems_unsigned32 rdb_start;
/*
* bsp_libc_init
*
* Initialize whatever libc we are using called from bsp_postdriver_hook.
*/
void bsp_libc_init()
{
extern int end;
rtems_unsigned32 heap_start;
heap_start = (rtems_unsigned32) &end;
extern int heap_bottom;
rtems_unsigned32 heap_start;
rtems_unsigned32 heap_size;
heap_start = (rtems_unsigned32) &heap_bottom;
if (heap_start & (CPU_ALIGNMENT-1))
heap_start = (heap_start + CPU_ALIGNMENT) & ~(CPU_ALIGNMENT-1);
RTEMS_Malloc_Initialize((void *) heap_start, 64 * 1024, 0);
heap_start = (heap_start + CPU_ALIGNMENT) & ~(CPU_ALIGNMENT-1);
heap_size = BSP_Configuration.work_space_start -(void *) heap_start ;
heap_size &= 0xfffffff0; /* keep it as a multiple of 16 bytes */
heap_size &= 0xfffffff0; /* keep it as a multiple of 16 bytes */
RTEMS_Malloc_Initialize((void *) heap_start, heap_size, 0);
/*
* Init the RTEMS libio facility to provide UNIX-like system
* calls for use by newlib (ie: provide __rtems_open, __rtems_close, etc)
@@ -104,7 +114,7 @@ bsp_pretasking_hook(void)
Stack_check_Initialize();
#endif
#ifdef RTEMS_DEBUG
rtems_debug_enable( RTEMS_DEBUG_ALL_MASK );
#endif
@@ -112,45 +122,13 @@ bsp_pretasking_hook(void)
/*
* After drivers are setup, register some "filenames"
* and open stdin, stdout, stderr files
*
* Newlib will automatically associate the files with these
* (it hardcodes the numbers)
* Use the shared bsp_postdriver_hook() implementation
*/
void
bsp_postdriver_hook(void)
{
int stdin_fd, stdout_fd, stderr_fd;
int error_code;
error_code = 'S' << 24 | 'T' << 16;
if ((stdin_fd = __rtems_open("/dev/console", O_RDONLY, 0)) == -1)
rtems_fatal_error_occurred( error_code | 'D' << 8 | '0' );
if ((stdout_fd = __rtems_open("/dev/console", O_WRONLY, 0)) == -1)
rtems_fatal_error_occurred( error_code | 'D' << 8 | '1' );
if ((stderr_fd = __rtems_open("/dev/console", O_WRONLY, 0)) == -1)
rtems_fatal_error_occurred( error_code | 'D' << 8 | '2' );
if ((stdin_fd != 0) || (stdout_fd != 1) || (stderr_fd != 2))
rtems_fatal_error_occurred( error_code | 'I' << 8 | 'O' );
}
void bsp_postdriver_hook(void);
void bsp_start( void )
{
#ifdef PRINTON
outbyte('a');
outbyte('b');
outbyte('c');
outbyte ('S');
#endif
/*
* we do not use the pretasking_hook.
*/
@@ -169,7 +147,7 @@ void bsp_start( void )
Cpu_table.interrupt_table_offset = (void *)Interrupt_descriptor_table;
Cpu_table.interrupt_stack_size = 4096;
Cpu_table.interrupt_stack_size = 4096; /* STACK_MINIMUM_SIZE */
Cpu_table.extra_mpci_receive_server_stack = 0;
@@ -179,24 +157,26 @@ void bsp_start( void )
BSP_Configuration = Configuration;
#if defined(RTEMS_POSIX_API)
BSP_Configuration.work_space_size *= 3;
#endif
BSP_Configuration.work_space_start = (void *)
RAM_END - BSP_Configuration.work_space_size;
#ifdef SPRINTON
sprintf( x_buffer, "ram end : %u, work_space_size: %d\n",
RAM_END , BSP_Configuration.work_space_size );
do {
outbyte ( x_buffer[i] );
} while ( x_buffer[i++] != '\n');
#endif
/*
* Add 1 region for Malloc in libc_low
*/
BSP_Configuration.RTEMS_api_configuration->maximum_regions++;
/*
* Account for the console's resources
*/
/* console_reserve_resources( &BSP_Configuration ); */
/*
* Add 1 extension for newlib libc
*/
File diff suppressed because it is too large. Load diff