RTEMS  5.1
raw_exception.h
1 /*
2  * raw_execption.h
3  *
4  * This file contains implementation of C function to
5  * Instantiate mpc5xx primary exception entries.
6  * More detailled information can be found on the Motorola
7  * site and more precisely in the following book:
8  *
9  * MPC555/MPC556 User's Manual
10  * Motorola REF : MPC555UM/D Rev. 3, 2000 October 15
11  *
12  *
13  * MPC5xx port sponsored by Defence Research and Development Canada - Suffield
14  * Copyright (C) 2004, Real-Time Systems Inc. (querbach@realtime.bc.ca)
15  *
16  * Derived from libcpu/powerpc/mpc8xx/exceptions/raw_exception.h:
17  *
18  * Copyright (C) 1999 Eric Valette (valette@crf.canon.fr)
19  * Canon Centre Recherche France.
20  *
21  * The license and distribution terms for this file may be
22  * found in the file LICENSE in this distribution or at
23  * http://www.rtems.org/license/LICENSE.
24  */
25 
26 #ifndef _LIBCPU_RAW_EXCEPTION_H
27 #define _LIBCPU_RAW_EXCEPTION_H
28 
29 #include <libcpu/vectors.h>
30 
31 /*
32  * Exception Vectors as defined in the MPC555 User's Manual
33  */
34 
35 #define ASM_RESET_VECTOR 0x01
36 #define ASM_MACH_VECTOR 0x02
37 
38 #define ASM_EXT_VECTOR 0x05
39 #define ASM_ALIGN_VECTOR 0x06
40 #define ASM_PROG_VECTOR 0x07
41 #define ASM_FLOAT_VECTOR 0x08
42 #define ASM_DEC_VECTOR 0x09
43 
44 #define ASM_SYS_VECTOR 0x0C
45 #define ASM_TRACE_VECTOR 0x0D
46 #define ASM_FLOATASSIST_VECTOR 0x0E
47 
48 #define ASM_SOFTEMUL_VECTOR 0x10
49 
50 #define ASM_IPROT_VECTOR 0x13
51 #define ASM_DPROT_VECTOR 0x14
52 
53 #define ASM_DBREAK_VECTOR 0x1C
54 #define ASM_IBREAK_VECTOR 0x1D
55 #define ASM_MEBREAK_VECTOR 0x1E
56 #define ASM_NMEBREAK_VECTOR 0x1F
57 
58 #ifndef ASM
59 
60 /*
61  * Type definition for raw exceptions.
62  */
63 
64 typedef unsigned char rtems_vector;
66 typedef unsigned char rtems_raw_except_hdl_size;
67 
68 typedef struct {
69  rtems_vector vector;
70  rtems_exception_handler_t* raw_hdl;
72 
73 typedef void (*rtems_raw_except_enable) (const struct __rtems_raw_except_connect_data__*);
74 typedef void (*rtems_raw_except_disable) (const struct __rtems_raw_except_connect_data__*);
75 typedef int (*rtems_raw_except_is_enabled) (const struct __rtems_raw_except_connect_data__*);
76 
78  /*
79  * Exception vector (As defined in the manual)
80  */
81  rtems_vector exceptIndex;
82  /*
83  * Exception raw handler. See comment on handler properties below in function prototype.
84  */
86  /*
87  * function for enabling raw exceptions. In order to be consistent
88  * with the fact that the raw connexion can defined in the
89  * libcpu library, this library should have no knowledge of
90  * board specific hardware to manage exceptions and thus the
91  * "on" routine must enable the except at processor level only.
92  *
93  */
94  rtems_raw_except_enable on;
95  /*
96  * function for disabling raw exceptions. In order to be consistent
97  * with the fact that the raw connexion can defined in the
98  * libcpu library, this library should have no knowledge of
99  * board specific hardware to manage exceptions and thus the
100  * "on" routine must disable the except both at device and PIC level.
101  *
102  */
103  rtems_raw_except_disable off;
104  /*
105  * function enabling to know what exception may currently occur
106  */
107  rtems_raw_except_is_enabled isOn;
109 
110 typedef struct {
111  /*
112  * size of all the table fields (*Tbl) described below.
113  */
114  unsigned int exceptSize;
115  /*
116  * Default handler used when disconnecting exceptions.
117  */
118  rtems_raw_except_connect_data defaultRawEntry;
119  /*
120  * Table containing initials/current value.
121  */
122  rtems_raw_except_connect_data* rawExceptHdlTbl;
124 
125 /*
126  * C callable function enabling to set up one raw idt entry
127  */
128 extern int mpc5xx_set_exception (const rtems_raw_except_connect_data*);
129 
130 /*
131  * C callable function enabling to get one current raw idt entry
132  */
133 extern int mpc5xx_get_current_exception (rtems_raw_except_connect_data*);
134 
135 /*
136  * C callable function enabling to remove one current raw idt entry
137  */
138 extern int mpc5xx_delete_exception (const rtems_raw_except_connect_data*);
139 
140 /*
141  * C callable function enabling to check if vector is valid
142  */
143 extern int mpc5xx_vector_is_valid(rtems_vector vector);
144 
145 inline static void* mpc5xx_get_vector_addr(rtems_vector vector)
146 {
147  return ((void*) (((unsigned) vector) << 8));
148 }
149 /*
150  * Exception global init.
151  */
152 extern int mpc5xx_init_exceptions (rtems_raw_except_global_settings* config);
153 extern int mpc5xx_get_exception_config (rtems_raw_except_global_settings** config);
154 
155 # endif /* ASM */
156 
157 #define SIZEOF_
158 
159 #endif
Definition: deflate.c:115
Definition: raw_exception.h:77
Definition: raw_exception.h:110
Definition: raw_exception.h:68