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

4.104.114.84.95
Last change on this file since b3d3a34e 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: 4.2 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;
36rtems_configuration_table         BSP_Configuration;
37
38rtems_cpu_table Cpu_table;
39
40char *rtems_progname;
41
42/*      Initialize whatever libc we are using
43 *      called from postdriver hook
44 */
45
46void bsp_libc_init()
47{
48    extern int end;
49    rtems_unsigned32        heap_start;
50
51    heap_start = (rtems_unsigned32) &end;
52    if (heap_start & (CPU_ALIGNMENT-1))
53        heap_start = (heap_start + CPU_ALIGNMENT) & ~(CPU_ALIGNMENT-1);
54
55    RTEMS_Malloc_Initialize((void *) heap_start, 64 * 1024, 0);
56
57    /*
58     *  Init the RTEMS libio facility to provide UNIX-like system
59     *  calls for use by newlib (ie: provide __rtems_open, __rtems_close, etc)
60     *  Uses malloc() to get area for the iops, so must be after malloc init
61     */
62
63    rtems_libio_init();
64
65    /*
66     * Set up for the libc handling.
67     */
68
69    if (BSP_Configuration.ticks_per_timeslice > 0)
70        libc_init(1);                /* reentrant if possible */
71    else
72        libc_init(0);                /* non-reentrant */
73}
74
75/*
76 *  Function:   bsp_pretasking_hook
77 *  Created:    95/03/10
78 *
79 *  Description:
80 *      BSP pretasking hook.  Called just before drivers are initialized.
81 *      Used to setup libc and install any BSP extensions.
82 *
83 *  NOTES:
84 *      Must not use libc (to do io) from here, since drivers are
85 *      not yet initialized.
86 *
87 */
88 
89void
90bsp_pretasking_hook(void)
91{
92    bsp_libc_init();
93 
94#ifdef RTEMS_DEBUG
95    rtems_debug_enable( RTEMS_DEBUG_ALL_MASK );
96#endif
97}
98 
99
100/*
101 *  Use the shared bsp_postdriver_hook() implementation
102 */
103 
104void bsp_postdriver_hook(void);
105
106void bsp_start( void )
107{
108  m68k_isr_entry *monitors_vector_table;
109  int             index;
110  void           *vbr;
111
112  monitors_vector_table = (m68k_isr_entry *)0;   /* Monitor Vectors are at 0 */
113  m68k_set_vbr( monitors_vector_table );
114
115  for ( index=2 ; index<=255 ; index++ )
116    M68Kvec[ index ] = monitors_vector_table[ 32 ];
117
118  M68Kvec[  2 ] = monitors_vector_table[  2 ];   /* bus error vector */
119  M68Kvec[  4 ] = monitors_vector_table[  4 ];   /* breakpoints vector */
120  M68Kvec[  9 ] = monitors_vector_table[  9 ];   /* trace vector */
121
122  /*
123   *  Uncommenting this seems to confuse/break the monitor on this board.
124   *  It probably assumes the vector table is at 0.
125   */
126
127  /* m68k_set_vbr( &M68Kvec ); */
128
129  /*
130   *  Adjust the VMEbus mode to round-robin.
131   */
132
133  /*
134   *  This is only apparent with the shared memory driver which has not
135   *  yet been supported on this target.
136   */
137
138  m68k_enable_caching();
139
140  /*
141   *  we only use a hook to get the C library initialized.
142   */
143
144  Cpu_table.pretasking_hook = bsp_pretasking_hook;  /* init libc, etc. */
145
146  Cpu_table.predriver_hook = NULL;
147
148  Cpu_table.postdriver_hook = bsp_postdriver_hook;
149
150  Cpu_table.idle_task = NULL;  /* do not override system IDLE task */
151
152  Cpu_table.do_zero_of_workspace = TRUE;
153
154  m68k_get_vbr( vbr );
155  Cpu_table.interrupt_vector_table = vbr;
156
157  Cpu_table.interrupt_stack_size = 4096;
158
159  Cpu_table.extra_mpci_receive_server_stack = 0;
160
161  /*
162   *  Copy the table
163   */
164
165  BSP_Configuration = Configuration;
166
167  BSP_Configuration.work_space_start = (void *)
168     (RAM_END - BSP_Configuration.work_space_size);
169
170  /*
171   *  Account for the console's resources
172   */
173
174  console_reserve_resources( &BSP_Configuration );
175
176  /*
177   * Tell libio how many fd's we want and allow it to tweak config
178   */
179
180  rtems_libio_config(&BSP_Configuration, BSP_LIBIO_MAX_FDS);
181
182  /* Clock_exit is done as an atexit() function */
183}
Note: See TracBrowser for help on using the repository browser.