source: rtems/c/src/lib/libbsp/i960/cvme961/startup/bspstart.c @ 11290355

4.104.114.84.95
Last change on this file since 11290355 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.3 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;
41
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    heap_start = (rtems_unsigned32) &end;
58    if (heap_start & (CPU_ALIGNMENT-1))
59        heap_start = (heap_start + CPU_ALIGNMENT) & ~(CPU_ALIGNMENT-1);
60
61    RTEMS_Malloc_Initialize((void *) heap_start, 64 * 1024, 0);
62
63    /*
64     *  Init the RTEMS libio facility to provide UNIX-like system
65     *  calls for use by newlib (ie: provide __open, __close, etc)
66     *  Uses malloc() to get area for the iops, so must be after malloc init
67     */
68
69    rtems_libio_init();
70
71    /*
72     * Set up for the libc handling.
73     */
74
75    if (BSP_Configuration.ticks_per_timeslice > 0)
76        libc_init(1);                /* reentrant if possible */
77    else
78        libc_init(0);                /* non-reentrant */
79}
80
81/*
82 *  Function:   bsp_pretasking_hook
83 *  Created:    95/03/10
84 *
85 *  Description:
86 *      BSP pretasking hook.  Called just before drivers are initialized.
87 *      Used to setup libc and install any BSP extensions.
88 *
89 *  NOTES:
90 *      Must not use libc (to do io) from here, since drivers are
91 *      not yet initialized.
92 *
93 */
94 
95void
96bsp_pretasking_hook(void)
97{
98    bsp_libc_init();
99 
100#ifdef STACK_CHECKER_ON
101    /*
102     *  Initialize the stack bounds checker
103     *  We can either turn it on here or from the app.
104     */
105 
106    Stack_check_Initialize();
107#endif
108 
109#ifdef RTEMS_DEBUG
110    rtems_debug_enable( RTEMS_DEBUG_ALL_MASK );
111#endif
112}
113 
114
115/*
116 * After drivers are setup, register some "filenames"
117 * and open stdin, stdout, stderr files
118 *
119 * Newlib will automatically associate the files with these
120 * (it hardcodes the numbers)
121 */
122 
123void
124bsp_postdriver_hook(void)
125{
126  int stdin_fd, stdout_fd, stderr_fd;
127 
128  if ((stdin_fd = __open("/dev/console", O_RDONLY, 0)) == -1)
129    rtems_fatal_error_occurred('STD0');
130 
131  if ((stdout_fd = __open("/dev/console", O_WRONLY, 0)) == -1)
132    rtems_fatal_error_occurred('STD1');
133 
134  if ((stderr_fd = __open("/dev/console", O_WRONLY, 0)) == -1)
135    rtems_fatal_error_occurred('STD2');
136 
137  if ((stdin_fd != 0) || (stdout_fd != 1) || (stderr_fd != 2))
138    rtems_fatal_error_occurred('STIO');
139}
140
141int main(
142  int argc,
143  char **argv,
144  char **environp
145)
146{
147  if ((argc > 0) && argv && argv[0])
148    rtems_progname = argv[0];
149  else
150    rtems_progname = "RTEMS";
151
152  /* set node number in SQSIO4 CTL REG */
153
154  *((rtems_unsigned32 *)0xc00000b0) =
155       (Configuration.User_multiprocessing_table) ?
156          Configuration.User_multiprocessing_table->node : 0;
157
158  Prcb    = get_prcb();
159  Ctl_tbl = Prcb->control_tbl;
160
161  /* following configures the data breakpoint (which must be set
162   *   before this is executed) to break on writes only.
163   */
164
165  Ctl_tbl->bpcon &= ~0x00cc0000;
166  i960_reload_ctl_group( 6 );
167
168  /*  bit 31 of the Register Cache Control can be set to
169   *  enable an alternative caching algorithm.  It does
170   *  not appear to help RTEMS.
171   */
172
173  /* Configure Number of Register Caches */
174
175  Prcb->reg_cache_cfg = 8;
176  i960_soft_reset( Prcb );
177
178  /*
179   *  we do not use the pretasking_hook.
180   */
181
182  Cpu_table.pretasking_hook = bsp_pretasking_hook;  /* init libc, etc. */
183
184  Cpu_table.predriver_hook = NULL;
185
186  Cpu_table.postdriver_hook = bsp_postdriver_hook;
187
188  Cpu_table.idle_task = NULL;  /* do not override system IDLE task */
189
190  Cpu_table.do_zero_of_workspace = TRUE;
191
192  Cpu_table.interrupt_stack_size = 4096;
193
194  Cpu_table.extra_system_initialization_stack = 0;
195
196  Cpu_table.Prcb = Prcb;
197
198  /*
199   *  Copy the table
200   */
201
202  BSP_Configuration = Configuration;
203
204  /*
205   * Add 1 region for the RTEMS Malloc
206   */
207
208  BSP_Configuration.maximum_regions++;
209
210  /*
211   * Add 1 extension for newlib libc
212   */
213
214#ifdef RTEMS_NEWLIB
215    BSP_Configuration.maximum_extensions++;
216#endif
217
218  /*
219   * Add another extension if using the stack checker
220   */
221
222#ifdef STACK_CHECKER_ON
223    BSP_Configuration.maximum_extensions++;
224#endif
225
226  /*
227   * Tell libio how many fd's we want and allow it to tweak config
228   */
229
230  rtems_libio_config(&BSP_Configuration, BSP_LIBIO_MAX_FDS);
231
232  BSP_Configuration.work_space_start = (void *)
233     (RAM_END - BSP_Configuration.work_space_size);
234
235  rtems_initialize_executive( &BSP_Configuration, &Cpu_table );
236  /* does not return */
237
238  bsp_cleanup();
239
240  return 0;
241
242}
Note: See TracBrowser for help on using the repository browser.