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