source: rtems/c/src/lib/libbsp/m68k/dmv152/startup/bspstart.c @ 3652ad35

4.104.114.84.95
Last change on this file since 3652ad35 was 3652ad35, checked in by Joel Sherrill <joel.sherrill@…>, on 09/19/95 at 14:53:29

Minor bug fixes to get all targets compilable and running. The
single biggest changes were the expansion of the workspace size
macro to include other types of objects and the increase in the
minimum stack size for most CPUs.

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