source: rtems/c/src/lib/libbsp/powerpc/mpc8260ads/vectors/vectors_init.c @ 5edbffe

4.104.114.84.95
Last change on this file since 5edbffe was 5edbffe, checked in by Joel Sherrill <joel.sherrill@…>, on 10/22/01 at 14:46:02

01-10-22 Andy Dachs <a.dachs@…>

  • mpc8260ads added as new BSP. tm27 reported not to run at this time.
  • ChangeLog?, Makefile.am, README, aclocal.m4, bsp_specs, clock/.cvsignore, clock/Makefile.am, clock/p_clock.c, configure.in, console/Makefile.am, console/console.c, include/Makefile.am, include/bsp.h, include/coverhd.h, irq/.cvsignore, irq/Makefile.am, irq/irq.c, irq/irq.h, irq/irq_asm.S, irq/irq_init.c, network/Makefile.am, network/README, network/if_hdlcsubr.c, network/if_hdlcsubr.h, network/network.c, start/Makefile.am, start/start.S, startup/Makefile.am, startup/bspstart.c, startup/cpuinit.c, startup/linkcmds, startup/setvec.c, times, vectors/.cvsignore, vectors/Makefile.am, vectors/vectors.S, vectors/vectors.h, vectors/vectors_init.c, wrapup/Makefile.am: New files.
  • Property mode set to 100644
File size: 4.6 KB
Line 
1/*
2 * vectors_init.c Exception hanlding initialisation (and generic handler).
3 *
4 *  This include file describe the data structure and the functions implemented
5 *  by rtems to handle exceptions.
6 *
7 *  CopyRight (C) 1999 valette@crf.canon.fr
8 *
9 *  The license and distribution terms for this file may be
10 *  found in found in the file LICENSE in this distribution or at
11 *  http://www.OARcorp.com/rtems/license.html.
12 *
13 *  $Id$
14 */
15#include <bsp/vectors.h>
16#include <libcpu/raw_exception.h>
17#include <bsp.h>
18
19static rtems_raw_except_global_settings exception_config;
20static rtems_raw_except_connect_data    exception_table[LAST_VALID_EXC + 1];
21
22exception_handler_t globalExceptHdl;
23
24void C_exception_handler(BSP_Exception_frame* excPtr)
25{
26  int recoverable = 0;
27
28  printk("exception handler called for exception %d\n", excPtr->_EXC_number);
29  printk("\t Next PC or Address of fault = %x\n", excPtr->EXC_SRR0);
30  printk("\t Saved MSR = %x\n", excPtr->EXC_SRR1);
31  printk("\t R0 = %x\n", excPtr->GPR0);
32  printk("\t R1 = %x\n", excPtr->GPR1);
33  printk("\t R2 = %x\n", excPtr->GPR2);
34  printk("\t R3 = %x\n", excPtr->GPR3);
35  printk("\t R4 = %x\n", excPtr->GPR4);
36  printk("\t R5 = %x\n", excPtr->GPR5);
37  printk("\t R6 = %x\n", excPtr->GPR6);
38  printk("\t R7 = %x\n", excPtr->GPR7);
39  printk("\t R8 = %x\n", excPtr->GPR8);
40  printk("\t R9 = %x\n", excPtr->GPR9);
41  printk("\t R10 = %x\n", excPtr->GPR10);
42  printk("\t R11 = %x\n", excPtr->GPR11);
43  printk("\t R12 = %x\n", excPtr->GPR12);
44  printk("\t R13 = %x\n", excPtr->GPR13);
45  printk("\t R14 = %x\n", excPtr->GPR14);
46  printk("\t R15 = %x\n", excPtr->GPR15);
47  printk("\t R16 = %x\n", excPtr->GPR16);
48  printk("\t R17 = %x\n", excPtr->GPR17);
49  printk("\t R18 = %x\n", excPtr->GPR18);
50  printk("\t R19 = %x\n", excPtr->GPR19);
51  printk("\t R20 = %x\n", excPtr->GPR20);
52  printk("\t R21 = %x\n", excPtr->GPR21);
53  printk("\t R22 = %x\n", excPtr->GPR22);
54  printk("\t R23 = %x\n", excPtr->GPR23);
55  printk("\t R24 = %x\n", excPtr->GPR24);
56  printk("\t R25 = %x\n", excPtr->GPR25);
57  printk("\t R26 = %x\n", excPtr->GPR26);
58  printk("\t R27 = %x\n", excPtr->GPR27);
59  printk("\t R28 = %x\n", excPtr->GPR28);
60  printk("\t R29 = %x\n", excPtr->GPR29);
61  printk("\t R30 = %x\n", excPtr->GPR30);
62  printk("\t R31 = %x\n", excPtr->GPR31);
63  printk("\t CR = %x\n", excPtr->EXC_CR);
64  printk("\t CTR = %x\n", excPtr->EXC_CTR);
65  printk("\t XER = %x\n", excPtr->EXC_XER);
66  printk("\t LR = %x\n", excPtr->EXC_LR);
67  printk("\t MSR = %x\n", excPtr->EXC_MSR);
68  if (excPtr->_EXC_number == ASM_DEC_VECTOR)
69       recoverable = 1;
70  if (excPtr->_EXC_number == ASM_SYS_VECTOR)
71#ifdef TEST_RAW_EXCEPTION_CODE     
72    recoverable = 1;
73#else
74    recoverable = 0;
75#endif
76    if (!recoverable) {
77      printk("unrecoverable exception!!! Push reset button\n");
78      while(1);
79    }
80}
81
82void nop_except_enable(const rtems_raw_except_connect_data* ptr)
83{
84}
85int except_always_enabled(const rtems_raw_except_connect_data* ptr)
86{
87  return 1;
88}
89
90void initialize_exceptions()
91{
92  int i;
93
94  /*
95   * Initialize pointer used by low level execption handling
96   */
97  globalExceptHdl                               = C_exception_handler;
98  /*
99   * Put  default_exception_vector_code_prolog at relevant exception
100   * code entry addresses
101   */
102  exception_config.exceptSize                   = LAST_VALID_EXC + 1;
103  exception_config.rawExceptHdlTbl              = &exception_table[0];
104  exception_config.defaultRawEntry.exceptIndex  = 0;
105  exception_config.defaultRawEntry.hdl.vector   = 0;
106  exception_config.defaultRawEntry.hdl.raw_hdl  = default_exception_vector_code_prolog;
107  /*
108   * Note that next line the '&' before default_exception_vector_code_prolog_size
109   * is not a bug as it is defined a .set directly in asm...
110   */
111  exception_config.defaultRawEntry.hdl.raw_hdl_size = (unsigned) &default_exception_vector_code_prolog_size;
112
113/*
114  _BSP_GPLED0_off();
115  _BSP_GPLED1_on();
116*/
117
118  for (i=0; i <= exception_config.exceptSize; i++) {
119/*
120    printk("installing exception number %d\n", i);
121*/
122    if (!mpc8xx_vector_is_valid (i)) {
123      continue;
124    }
125    exception_table[i].exceptIndex      = i;
126    exception_table[i].hdl              = exception_config.defaultRawEntry.hdl;
127    exception_table[i].hdl.vector       = i;
128    exception_table[i].on               = nop_except_enable;
129    exception_table[i].off              = nop_except_enable;
130    exception_table[i].isOn             = except_always_enabled;
131  }
132
133/*  _BSP_GPLED0_on(); */
134
135
136  if (!mpc8xx_init_exceptions(&exception_config)) {
137    /*
138     * At this stage we may not call BSP_Panic because it uses exceptions!!!
139     */
140    printk("Exception handling initialization failed\n");
141    printk("System locked\n"); while(1);
142  }
143  else {
144#if 0
145    printk("Exception handling initialization done\n");
146#endif
147  }
148
149/*  _BSP_GPLED1_off(); */
150
151}
Note: See TracBrowser for help on using the repository browser.