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

4.104.114.84.95
Last change on this file since 71f4beb was 9b64c2d5, checked in by Joel Sherrill <joel.sherrill@…>, on 04/15/98 at 00:10:03

Per suggestion from Eric Norum, went from one initial extension set
to multiple. This lets the stack check extension be installed
at system initialization time and avoids the BSP having to
even know about its existence.

  • Property mode set to 100644
File size: 3.8 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-1998.
13 *  On-Line Applications Research Corporation (OAR).
14 *  Copyright assigned to U.S. Government, 1994.
15 *
16 *  The license and distribution terms for this file may be
17 *  found in the file LICENSE in this distribution or at
18 *  http://www.OARcorp.com/rtems/license.html.
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 
30/*
31 *  The original table from the application and our copy of it with
32 *  some changes.
33 */
34
35extern rtems_configuration_table Configuration;
36
37rtems_configuration_table  BSP_Configuration;
38
39rtems_cpu_table Cpu_table;
40
41char *rtems_progname;
42
43/*      Initialize whatever libc we are using
44 *      called from postdriver hook
45 */
46
47void bsp_libc_init()
48{
49    extern int end;
50    rtems_unsigned32        heap_start;
51
52    heap_start = (rtems_unsigned32) &end;
53    if (heap_start & (CPU_ALIGNMENT-1))
54        heap_start = (heap_start + CPU_ALIGNMENT) & ~(CPU_ALIGNMENT-1);
55
56    RTEMS_Malloc_Initialize((void *) heap_start, 64 * 1024, 0);
57
58    /*
59     *  Init the RTEMS libio facility to provide UNIX-like system
60     *  calls for use by newlib (ie: provide __rtems_open, __rtems_close, etc)
61     *  Uses malloc() to get area for the iops, so must be after malloc init
62     */
63
64    rtems_libio_init();
65
66    /*
67     * Set up for the libc handling.
68     */
69
70    if (BSP_Configuration.ticks_per_timeslice > 0)
71        libc_init(1);                /* reentrant if possible */
72    else
73        libc_init(0);                /* non-reentrant */
74}
75
76/*
77 *  Function:   bsp_pretasking_hook
78 *  Created:    95/03/10
79 *
80 *  Description:
81 *      BSP pretasking hook.  Called just before drivers are initialized.
82 *      Used to setup libc and install any BSP extensions.
83 *
84 *  NOTES:
85 *      Must not use libc (to do io) from here, since drivers are
86 *      not yet initialized.
87 *
88 */
89 
90void
91bsp_pretasking_hook(void)
92{
93    bsp_libc_init();
94 
95#ifdef RTEMS_DEBUG
96    rtems_debug_enable( RTEMS_DEBUG_ALL_MASK );
97#endif
98}
99 
100
101/*
102 *  Use the shared bsp_postdriver_hook() implementation
103 */
104 
105void bsp_postdriver_hook(void);
106
107void bsp_start( void )
108{
109  /* set node number in SQSIO4 CTL REG */
110
111  *((rtems_unsigned32 *)0xc00000b0) =
112       (Configuration.User_multiprocessing_table) ?
113          Configuration.User_multiprocessing_table->node : 0;
114
115  Prcb    = get_prcb();
116  Ctl_tbl = Prcb->control_tbl;
117
118  /* following configures the data breakpoint (which must be set
119   *   before this is executed) to break on writes only.
120   */
121
122  Ctl_tbl->bpcon &= ~0x00cc0000;
123  i960_reload_ctl_group( 6 );
124
125  /*  bit 31 of the Register Cache Control can be set to
126   *  enable an alternative caching algorithm.  It does
127   *  not appear to help RTEMS.
128   */
129
130  /* Configure Number of Register Caches */
131
132  Prcb->reg_cache_cfg = 8;
133  i960_soft_reset( Prcb );
134
135  /*
136   *  we do not use the pretasking_hook.
137   */
138
139  Cpu_table.pretasking_hook = bsp_pretasking_hook;  /* init libc, etc. */
140
141  Cpu_table.predriver_hook = NULL;
142
143  Cpu_table.postdriver_hook = bsp_postdriver_hook;
144
145  Cpu_table.idle_task = NULL;  /* do not override system IDLE task */
146
147  Cpu_table.do_zero_of_workspace = TRUE;
148
149  Cpu_table.interrupt_stack_size = 4096;
150
151  Cpu_table.extra_mpci_receive_server_stack = 0;
152
153  Cpu_table.Prcb = Prcb;
154
155  /*
156   *  Copy the table
157   */
158
159  BSP_Configuration = Configuration;
160
161  /*
162   * Tell libio how many fd's we want and allow it to tweak config
163   */
164
165  rtems_libio_config(&BSP_Configuration, BSP_LIBIO_MAX_FDS);
166
167  BSP_Configuration.work_space_start = (void *)
168     (RAM_END - BSP_Configuration.work_space_size);
169}
Note: See TracBrowser for help on using the repository browser.