source: rtems/c/src/lib/libbsp/m68k/mvme136/startup/bspstart.c @ 3a4ae6c

4.104.114.84.95
Last change on this file since 3a4ae6c was 3a4ae6c, checked in by Joel Sherrill <joel.sherrill@…>, on Sep 11, 1995 at 7:35:39 PM

The word "RTEMS" almost completely removed from the core.

Configuration Table Template file added and all tests
modified to use this. All gvar.h and conftbl.h files
removed from test directories.

Configuration parameter maximum_devices added.

Core semaphore and mutex handlers added and RTEMS API Semaphore
Manager updated to reflect this.

Initialization sequence changed to invoke API specific initialization
routines. Initialization tasks table now owned by RTEMS Tasks Manager.

Added user extension for post-switch.

Utilized user extensions to implement API specific functionality
like signal dispatching.

Added extensions to the System Initialization Thread so that an
API can register a function to be invoked while the system
is being initialized. These are largely equivalent to the
pre-driver and post-driver hooks.

Added the Modules file oar-go32_p5, modified oar-go32, and modified
the file make/custom/go32.cfg to look at an environment varable which
determines what CPU model is being used.

All BSPs updated to reflect named devices and clock driver's IOCTL
used by the Shared Memory Driver. Also merged clock isr into
main file and removed ckisr.c where possible.

Updated spsize to reflect new and moved variables.

Makefiles for the executive source and include files updated to show
break down of files into Core, RTEMS API, and Neither.

Header and inline files installed into subdirectory based on whether
logically in the Core or a part of the RTEMS API.

  • Property mode set to 100644
File size: 4.9 KB
Line 
1/*  bsp_start()
2 *
3 *  This routine starts the application.  It includes application,
4 *  board, and monitor specific initialization and configuration.
5 *  The generic CPU dependent initialization has been performed
6 *  before this routine is invoked.
7 *
8 *  INPUT:  NONE
9 *
10 *  OUTPUT: NONE
11 *
12 *  COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
13 *  On-Line Applications Research Corporation (OAR).
14 *  All rights assigned to U.S. Government, 1994.
15 *
16 *  This material may be reproduced by or for the U.S. Government pursuant
17 *  to the copyright license under the clause at DFARS 252.227-7013.  This
18 *  notice must appear in all copies of this file and its derivatives.
19 *
20 *  $Id$
21 */
22
23#include <bsp.h>
24#include <rtems/libio.h>
25
26#include <libcsupport.h>
27#include <z8036.h>
28
29#include <string.h>
30#include <fcntl.h>
31
32#ifdef STACK_CHECKER_ON
33#include <stackchk.h>
34#endif
35
36/*
37 *  The original table from the application and our copy of it with
38 *  some changes.
39 */
40
41extern rtems_configuration_table  Configuration;
42rtems_configuration_table         BSP_Configuration;
43
44rtems_cpu_table Cpu_table;
45
46char *rtems_progname;
47
48/*      Initialize whatever libc we are using
49 *      called from postdriver hook
50 */
51
52void bsp_libc_init()
53{
54    extern int end;
55    rtems_unsigned32        heap_start;
56
57#ifdef RTEMS_DEBUG
58    rtems_debug_enable( RTEMS_DEBUG_ALL_MASK );
59#endif
60
61    heap_start = (rtems_unsigned32) &end;
62    if (heap_start & (CPU_ALIGNMENT-1))
63        heap_start = (heap_start + CPU_ALIGNMENT) & ~(CPU_ALIGNMENT-1);
64
65    RTEMS_Malloc_Initialize((void *) heap_start, 64 * 1024, 0);
66
67    /*
68     *  Init the RTEMS libio facility to provide UNIX-like system
69     *  calls for use by newlib (ie: provide __open, __close, etc)
70     *  Uses malloc() to get area for the iops, so must be after malloc init
71     */
72
73    rtems_libio_init();
74
75    /*
76     * Set up for the libc handling.
77     */
78
79    if (BSP_Configuration.ticks_per_timeslice > 0)
80        libc_init(1);                /* reentrant if possible */
81    else
82        libc_init(0);                /* non-reentrant */
83
84    /*
85     *  Initialize the stack bounds checker
86     */
87
88#ifdef STACK_CHECKER_ON
89    Stack_check_Initialize();
90#endif
91}
92
93/*
94 * After drivers are setup, register some "filenames"
95 * and open stdin, stdout, stderr files
96 *
97 * Newlib will automatically associate the files with these
98 * (it hardcodes the numbers)
99 */
100 
101void
102bsp_postdriver_hook(void)
103{
104  int stdin_fd, stdout_fd, stderr_fd;
105
106  if ((stdin_fd = __open("/dev/console", O_RDONLY, 0)) == -1)
107    rtems_fatal_error_occurred('STD0');
108 
109  if ((stdout_fd = __open("/dev/console", O_WRONLY, 0)) == -1)
110    rtems_fatal_error_occurred('STD1');
111 
112  if ((stderr_fd = __open("/dev/console", O_WRONLY, 0)) == -1)
113    rtems_fatal_error_occurred('STD2');
114 
115  if ((stdin_fd != 0) || (stdout_fd != 1) || (stderr_fd != 2))
116    rtems_fatal_error_occurred('STIO');
117}
118
119
120int main(
121  int argc,
122  char **argv,
123  char **environp
124)
125{
126  m68k_isr_entry *monitors_vector_table;
127  int             index;
128
129  if ((argc > 0) && argv && argv[0])
130    rtems_progname = argv[0];
131  else
132    rtems_progname = "RTEMS";
133
134  monitors_vector_table = (m68k_isr_entry *)0;   /* 135Bug Vectors are at 0 */
135  m68k_set_vbr( monitors_vector_table );
136
137  for ( index=2 ; index<=255 ; index++ )
138    M68Kvec[ index ] = monitors_vector_table[ 32 ];
139
140  M68Kvec[  2 ] = monitors_vector_table[  2 ];   /* bus error vector */
141  M68Kvec[  4 ] = monitors_vector_table[  4 ];   /* breakpoints vector */
142  M68Kvec[  9 ] = monitors_vector_table[  9 ];   /* trace vector */
143  M68Kvec[ 47 ] = monitors_vector_table[ 47 ];   /* system call vector */
144
145  m68k_set_vbr( &M68Kvec );
146
147  (*(rtems_unsigned8 *)0xfffb0067) = 0x7f; /* make VME access round-robin */
148
149  m68k_enable_caching();
150
151  /*
152   *  we only use a hook to get the C library initialized.
153   */
154
155  Cpu_table.pretasking_hook = NULL;
156
157  Cpu_table.predriver_hook = bsp_libc_init;  /* RTEMS resources available */
158
159  Cpu_table.postdriver_hook = bsp_postdriver_hook;
160
161  Cpu_table.idle_task = NULL;  /* do not override system IDLE task */
162
163  Cpu_table.do_zero_of_workspace = TRUE;
164
165  Cpu_table.interrupt_vector_table = (m68k_isr_entry *) &M68Kvec;
166
167  Cpu_table.interrupt_stack_size = 4096;
168
169  Cpu_table.extra_system_initialization_stack = 0;
170
171  /*
172   *  Copy the table
173   */
174
175  BSP_Configuration = Configuration;
176
177  BSP_Configuration.work_space_start = (void *)
178     (RAM_END - BSP_Configuration.work_space_size);
179
180  /*
181   * Add 1 region for the RTEMS Malloc
182   */
183
184  BSP_Configuration.maximum_regions++;
185
186  /*
187   * Add 1 extension for newlib libc
188   */
189
190#ifdef RTEMS_NEWLIB
191    BSP_Configuration.maximum_extensions++;
192#endif
193
194  /*
195   * Add another extension if using the stack checker
196   */
197
198#ifdef STACK_CHECKER_ON
199    BSP_Configuration.maximum_extensions++;
200#endif
201
202  /*
203   * Tell libio how many fd's we want and allow it to tweak config
204   */
205
206  rtems_libio_config(&BSP_Configuration, BSP_LIBIO_MAX_FDS);
207
208  rtems_initialize_executive( &BSP_Configuration, &Cpu_table );
209  /* does not return */
210
211  bsp_cleanup();
212
213  return 0;
214}
Note: See TracBrowser for help on using the repository browser.