source: rtems/c/src/lib/libbsp/m68k/mvme162/startup/bspstart.c @ 9b64c2d5

4.104.114.84.95
Last change on this file since 9b64c2d5 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.4 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 *  Modifications of respective RTEMS file: COPYRIGHT (c) 1994.
21 *  EISCAT Scientific Association. M.Savitski
22 *
23 *  This material is a part of the MVME162 Board Support Package
24 *  for the RTEMS executive. Its licensing policies are those of the
25 *  RTEMS above.
26 *
27 *  $Id$
28 */
29
30#include <bsp.h>
31#include <rtems/libio.h>
32#include <page_table.h>
33 
34#include <libcsupport.h>
35 
36#include <string.h>
37 
38/*
39 *  The original table from the application and our copy of it with
40 *  some changes.
41 */
42
43extern rtems_configuration_table  Configuration;
44rtems_configuration_table  BSP_Configuration;
45
46rtems_cpu_table Cpu_table;
47
48char *rtems_progname;
49
50/*      Initialize whatever libc we are using
51 *      called from postdriver hook
52 */
53
54void bsp_libc_init()
55{
56    extern int end;
57    rtems_unsigned32        heap_start;
58
59    heap_start = (rtems_unsigned32) &end;
60    if (heap_start & (CPU_ALIGNMENT-1))
61        heap_start = (heap_start + CPU_ALIGNMENT) & ~(CPU_ALIGNMENT-1);
62
63    RTEMS_Malloc_Initialize((void *) heap_start, 64 * 1024, 0);
64
65    /*
66     *  Init the RTEMS libio facility to provide UNIX-like system
67     *  calls for use by newlib (ie: provide __rtems_open, __rtems_close, etc)
68     *  Uses malloc() to get area for the iops, so must be after malloc init
69     */
70
71    rtems_libio_init();
72
73    /*
74     * Set up for the libc handling.
75     */
76
77    if (BSP_Configuration.ticks_per_timeslice > 0)
78        libc_init(1);                /* reentrant if possible */
79    else
80        libc_init(0);                /* non-reentrant */
81}
82
83/*
84 *  Function:   bsp_pretasking_hook
85 *  Created:    95/03/10
86 *
87 *  Description:
88 *      BSP pretasking hook.  Called just before drivers are initialized.
89 *      Used to setup libc and install any BSP extensions.
90 *
91 *  NOTES:
92 *      Must not use libc (to do io) from here, since drivers are
93 *      not yet initialized.
94 *
95 */
96 
97void
98bsp_pretasking_hook(void)
99{
100    bsp_libc_init();
101 
102#ifdef RTEMS_DEBUG
103    rtems_debug_enable( RTEMS_DEBUG_ALL_MASK );
104#endif
105}
106 
107
108/*
109 *  Use the shared bsp_postdriver_hook() implementation
110 */
111 
112void bsp_postdriver_hook(void);
113
114
115void bsp_start( void )
116{
117  m68k_isr_entry *monitors_vector_table;
118  int             index;
119
120  /*
121   *  162Bug Vectors are at 0xFFE00000
122   *  162Bug Vectors on LX are at 0x00000000
123   */
124
125#if defined(mvme162lx)
126  monitors_vector_table = (m68k_isr_entry *)0x00000000;
127#else
128  monitors_vector_table = (m68k_isr_entry *)0xFFE00000;
129#endif
130
131  m68k_set_vbr( monitors_vector_table );
132
133  for ( index=2 ; index<=255 ; index++ )
134    M68Kvec[ index ] = monitors_vector_table[ 32 ];
135
136  M68Kvec[  2 ] = monitors_vector_table[  2 ];   /* bus error vector */
137  M68Kvec[  4 ] = monitors_vector_table[  4 ];   /* breakpoints vector */
138  M68Kvec[  9 ] = monitors_vector_table[  9 ];   /* trace vector */
139  M68Kvec[ 47 ] = monitors_vector_table[ 47 ];   /* system call vector */
140
141  m68k_set_vbr( &M68Kvec );
142
143  /*
144   *  You may wish to make the VME arbitration round-robin here, currently
145   *  we leave it as it is.
146   */
147
148  /* set the Interrupt Base Vectors */
149
150  lcsr->vector_base = (VBR0 << 28) | (VBR1 << 24);
151
152  page_table_init();
153
154  /*
155   *  we only use a hook to get the C library initialized.
156   */
157
158  Cpu_table.pretasking_hook = bsp_pretasking_hook;  /* init libc, etc. */
159
160  Cpu_table.predriver_hook = NULL;
161
162  Cpu_table.postdriver_hook = bsp_postdriver_hook;
163
164  Cpu_table.idle_task = NULL;  /* do not override system IDLE task */
165
166  Cpu_table.do_zero_of_workspace = TRUE;
167
168  Cpu_table.interrupt_vector_table = (m68k_isr_entry *) &M68Kvec;
169
170  Cpu_table.interrupt_stack_size = 4096;
171
172  Cpu_table.extra_mpci_receive_server_stack = 0;
173
174  /*
175   *  Copy the table
176   */
177
178  BSP_Configuration = Configuration;
179
180  /*
181   * Tell libio how many fd's we want and allow it to tweak config
182   */
183
184  rtems_libio_config(&BSP_Configuration, BSP_LIBIO_MAX_FDS);
185
186  BSP_Configuration.work_space_start = (void *)
187     (RAM_END - BSP_Configuration.work_space_size);
188}
Note: See TracBrowser for help on using the repository browser.