source: rtems/c/src/lib/libbsp/m68k/gen68302/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 Sep 19, 1995 at 2:53:29 PM

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.6 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 
28#include <string.h>
29#include <fcntl.h>
30 
31#ifdef STACK_CHECKER_ON
32#include <stackchk.h>
33#endif
34
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    /*
61     *  The last parameter to RTEMS_Malloc_Initialize is the "chunk"
62     *  size which a multiple of will be requested on each sbrk()
63     *  call by malloc().  A value of 0 indicates that sbrk() should
64     *  not be called to extend the heap.
65     */
66
67    RTEMS_Malloc_Initialize((void *) heap_start, 64 * 1024, 0);
68
69    /*
70     *  Init the RTEMS libio facility to provide UNIX-like system
71     *  calls for use by newlib (ie: provide __open, __close, etc)
72     *  Uses malloc() to get area for the iops, so must be after malloc init
73     */
74
75    rtems_libio_init();
76
77    /*
78     * Set up for the libc handling.
79     */
80
81    if (BSP_Configuration.ticks_per_timeslice > 0)
82        libc_init(1);                /* reentrant if possible */
83    else
84        libc_init(0);                /* non-reentrant */
85}
86
87/*
88 *  Function:   bsp_pretasking_hook
89 *  Created:    95/03/10
90 *
91 *  Description:
92 *      BSP pretasking hook.  Called just before drivers are initialized.
93 *      Used to setup libc and install any BSP extensions.
94 *
95 *  NOTES:
96 *      Must not use libc (to do io) from here, since drivers are
97 *      not yet initialized.
98 *
99 */
100 
101void
102bsp_pretasking_hook(void)
103{
104    bsp_libc_init();
105 
106#ifdef STACK_CHECKER_ON
107    /*
108     *  Initialize the stack bounds checker
109     *  We can either turn it on here or from the app.
110     */
111 
112    Stack_check_Initialize();
113#endif
114 
115#ifdef RTEMS_DEBUG
116    rtems_debug_enable( RTEMS_DEBUG_ALL_MASK );
117#endif
118}
119 
120
121/*
122 * After drivers are setup, register some "filenames"
123 * and open stdin, stdout, stderr files
124 *
125 * Newlib will automatically associate the files with these
126 * (it hardcodes the numbers)
127 */
128 
129void
130bsp_postdriver_hook(void)
131{
132  int stdin_fd, stdout_fd, stderr_fd;
133 
134  if ((stdin_fd = __open("/dev/console", O_RDONLY, 0)) == -1)
135    rtems_fatal_error_occurred('STD0');
136 
137  if ((stdout_fd = __open("/dev/console", O_WRONLY, 0)) == -1)
138    rtems_fatal_error_occurred('STD1');
139 
140  if ((stderr_fd = __open("/dev/console", O_WRONLY, 0)) == -1)
141    rtems_fatal_error_occurred('STD2');
142 
143  if ((stdin_fd != 0) || (stdout_fd != 1) || (stderr_fd != 2))
144    rtems_fatal_error_occurred('STIO');
145}
146
147int main(
148  int argc,
149  char **argv,
150  char **environp
151)
152{
153  if ((argc > 0) && argv && argv[0])
154    rtems_progname = argv[0];
155  else
156    rtems_progname = "RTEMS";
157
158  /*
159   *  Allocate the memory for the RTEMS Work Space.  This can come from
160   *  a variety of places: hard coded address, malloc'ed from outside
161   *  RTEMS world (e.g. simulator or primitive memory manager), or (as
162   *  typically done by stock BSPs) by subtracting the required amount
163   *  of work space from the last physical address on the CPU board.
164   */
165#if 0
166  Cpu_table.interrupt_vector_table = (mc68000_isr *) 0/*&M68Kvec*/;
167#endif
168
169
170  /*
171   *  Copy the Configuration Table .. so we can change it
172   */
173
174  BSP_Configuration = Configuration;
175
176  /*
177   * Add 1 region for the RTEMS Malloc
178   */
179
180  BSP_Configuration.maximum_regions++;
181
182  /*
183   * Add 1 extension for newlib libc
184   */
185
186#ifdef RTEMS_NEWLIB
187    BSP_Configuration.maximum_extensions++;
188#endif
189
190  /*
191   * Add another extension if using the stack checker
192   */
193
194#ifdef STACK_CHECKER_ON
195    BSP_Configuration.maximum_extensions++;
196#endif
197
198  /*
199   * Tell libio how many fd's we want and allow it to tweak config
200   */
201
202  rtems_libio_config(&BSP_Configuration, BSP_LIBIO_MAX_FDS);
203
204  /*
205   *  Need to "allocate" the memory for the RTEMS Workspace and
206   *  tell the RTEMS configuration where it is.  This memory is
207   *  not malloc'ed.  It is just "pulled from the air".
208   */
209
210  BSP_Configuration.work_space_start = (void *)
211      (RAM_END - BSP_Configuration.work_space_size);
212
213  /*
214   *  initialize the CPU table for this BSP
215   */
216
217  /*
218   *  we do not use the pretasking_hook
219   */
220
221  Cpu_table.pretasking_hook = bsp_pretasking_hook;  /* init libc, etc. */
222
223  Cpu_table.predriver_hook = NULL;
224
225  Cpu_table.postdriver_hook = bsp_postdriver_hook;
226
227  Cpu_table.idle_task = NULL;  /* do not override system IDLE task */
228
229  Cpu_table.do_zero_of_workspace = TRUE;
230
231  Cpu_table.interrupt_stack_size = 4096;
232
233  Cpu_table.extra_system_initialization_stack = 0;
234
235  /*
236   *  Don't forget the other CPU Table entries.
237   */
238
239  /*
240   *  Start RTEMS
241   */
242
243  rtems_initialize_executive( &BSP_Configuration, &Cpu_table );
244
245  bsp_cleanup();
246
247  return 0;
248}
Note: See TracBrowser for help on using the repository browser.