source: rtems/c/src/lib/libbsp/powerpc/gen5200/vectors/vectors.S @ a877cc8e

Last change on this file since a877cc8e was a877cc8e, checked in by Ralf Corsepius <ralf.corsepius@…>, on 10/17/06 at 02:46:07

Convert to utf-8.

  • Property mode set to 100644
File size: 8.1 KB
Line 
1/*===============================================================*\
2| Project: RTEMS generic MPC5200 BSP                              |
3+-----------------------------------------------------------------+
4| Partially based on the code references which are named below.   |
5| Adaptions, modifications, enhancements and any recent parts of  |
6| the code are:                                                   |
7|                    Copyright (c) 2005                           |
8|                    Embedded Brains GmbH                         |
9|                    Obere Lagerstr. 30                           |
10|                    D-82178 Puchheim                             |
11|                    Germany                                      |
12|                    rtems@embedded-brains.de                     |
13+-----------------------------------------------------------------+
14| The license and distribution terms for this file may be         |
15| found in the file LICENSE in this distribution or at            |
16|                                                                 |
17| http://www.rtems.com/license/LICENSE.                           |
18|                                                                 |
19+-----------------------------------------------------------------+
20| this file contains the irq controller handler                   |
21\*===============================================================*/
22/***********************************************************************/
23/*                                                                     */
24/*   Module:       vectors.s                                           */
25/*   Date:         07/17/2003                                          */
26/*   Purpose:      RTEMS assembly code for PowerPC exception veneers   */
27/*                                                                     */
28/*---------------------------------------------------------------------*/
29/*                                                                     */
30/*   Description:                                                      */
31/*                                                                     */
32/*---------------------------------------------------------------------*/
33/*                                                                     */
34/*   Code                                                              */
35/*   References:   This file contains the assembly code for the        */
36/*                 PowerPC exception veneers for RTEMS.                */
37/*   Module:       vectors.s                                           */
38/*   Project:      RTEMS 4.6.0pre1 / MCF8260ads BSP                    */
39/*   Version       1.2                                                 */
40/*   Date:         04/18/2002                                          */
41/*                                                                     */
42/*   Author(s) / Copyright(s):                                         */
43/*                                                                     */
44/*   (c) 1999, Eric Valette valette@crf.canon.fr                       */
45/*                                                                     */
46/*---------------------------------------------------------------------*/
47/*                                                                     */
48/*   Partially based on the code references which are named above.     */
49/*   Adaptions, modifications, enhancements and any recent parts of    */
50/*   the code are under the right of                                   */
51/*                                                                     */
52/*         IPR Engineering, Dachauer Straße 38, D-80335 MÃŒnchen        */
53/*                        Copyright(C) 2003                            */
54/*                                                                     */
55/*---------------------------------------------------------------------*/
56/*                                                                     */
57/*   IPR Engineering makes no representation or warranties with        */
58/*   respect to the performance of this computer program, and          */
59/*   specifically disclaims any responsibility for any damages,        */
60/*   special or consequential, connected with the use of this program. */
61/*                                                                     */
62/*---------------------------------------------------------------------*/
63/*                                                                     */
64/*   Version history:  1.0                                             */
65/*                                                                     */
66/***********************************************************************/
67
68#include <rtems/asm.h>
69#include <rtems/score/cpu.h>
70#include "vectors.h"   
71
72#define SYNC \
73        sync; \
74        isync
75       
76        .text
77        .p2align 5     
78               
79PUBLIC_VAR(default_exception_vector_code_prolog)
80SYM (default_exception_vector_code_prolog):
81        /*
82         * let room for exception frame
83         */
84        stwu    r1, - (EXCEPTION_FRAME_END)(r1)
85        stw     r3, GPR3_OFFSET(r1)
86        stw     r2, GPR2_OFFSET(r1)
87        mflr    r2
88        stw     r2, EXC_LR_OFFSET(r1)
89        bl      0f
900:      /*
91         * r3 = exception vector entry point
92         * (256 * vector number) + few instructions
93         */
94        mflr    r3
95        /*
96         * r3 = r3 >> 8 = vector
97         */
98        srwi    r3,r3,8
99        ba      push_normalized_frame
100       
101        PUBLIC_VAR (default_exception_vector_code_prolog_size)
102       
103        default_exception_vector_code_prolog_size= . - default_exception_vector_code_prolog
104       
105        .p2align 5
106PUBLIC_VAR (push_normalized_frame)     
107SYM (push_normalized_frame):
108        stw     r3, EXCEPTION_NUMBER_OFFSET(r1)
109        stw     r0, GPR0_OFFSET(r1)
110        mfsrr0  r2
111        stw     r2, SRR0_FRAME_OFFSET(r1)
112        mfsrr1  r3
113        stw     r3, SRR1_FRAME_OFFSET(r1)
114        /*
115         * Save general purpose registers
116         * Already saved in prolog : R1, R2, R3, LR.
117         * Saved a few line above  : R0
118         *
119         * Manual says that "stmw" instruction may be slower than
120         * series of individual "stw" but who cares about performance
121         * for the DEFAULT exception handler?
122         */
123        stmw    r4, GPR4_OFFSET(r1)     /* save R4->R31 */
124
125        mfcr    r31
126        stw     r31,  EXC_CR_OFFSET(r1)
127        mfctr   r30
128        stw     r30,  EXC_CTR_OFFSET(r1)
129        mfxer   r28
130        stw     r28,  EXC_XER_OFFSET(r1)
131        /*
132         * compute SP at exception entry
133         */
134        addi    r2, r1, EXCEPTION_FRAME_END
135        /*
136         * store it at the right place
137         */
138        stw     r2, GPR1_OFFSET(r1)
139
140        /*
141         * Enable data and instruction address translation, exception nesting
142         */
143        mfmsr   r3
144        ori     r3,r3, MSR_RI|MSR_DR /*| MSR_IR*/
145        mtmsr   r3
146        SYNC
147       
148        /*
149         * Call C exception handler
150         */
151        /*
152         * store the execption frame address in r3 (first param)
153         */
154        addi    r3, r1, 0x8
155        /*
156         * globalExceptHdl(r3)
157         */
158        addis   r4, 0, globalExceptHdl@ha
159        lwz     r5, globalExceptHdl@l(r4)
160        mtlr    r5
161        blrl
162        /*
163         * Restore registers status
164         */
165        lwz     r31,  EXC_CR_OFFSET(r1)
166        mtcr    r31
167        lwz     r30,  EXC_CTR_OFFSET(r1)
168        mtctr   r30
169        lwz     r29,  EXC_LR_OFFSET(r1)
170        mtlr    r29
171        lwz     r28,  EXC_XER_OFFSET(r1)
172        mtxer   r28
173
174        lmw     r4, GPR4_OFFSET(r1)
175        lwz     r2, GPR2_OFFSET(r1)
176        lwz     r0, GPR0_OFFSET(r1)
177
178        /*
179         * Disable data and instruction translation. Make path non recoverable...
180         */
181        mfmsr   r3
182        xori    r3, r3, MSR_RI|MSR_DR /*| MSR_IR */
183        mtmsr   r3
184        SYNC
185       
186        /*
187         * Restore rfi related settings
188         */
189                 
190        lwz     r3, SRR1_FRAME_OFFSET(r1)
191        mtsrr1  r3
192        lwz     r3, SRR0_FRAME_OFFSET(r1)
193        mtsrr0  r3
194       
195        lwz     r3, GPR3_OFFSET(r1)
196        addi    r1,r1, EXCEPTION_FRAME_END
197        SYNC
198        rfi
199
200        .section .vectors,"awx",@progbits
201
202        PUBLIC_VAR (__vectors)
203        SYM (__vectors):
204        bl      start
205        .rep 63
206        .long 0x04000400
207        .endr
208__vec2: b       __vec2
209        .rep 63
210        .long 0x04000400
211        .endr
212__vec3: b       __vec3
213        .rep 63
214        .long 0x04000400
215        .endr
216__vec4: b       __vec4
217        .rep 63
218        .long 0x04000400
219        .endr
220__vec5: b       __vec5
221        .rep 63
222        .long 0x04000400
223        .endr
224__vec6: b       __vec6
225        .rep 63
226        .long 0x04000400
227        .endr
228__vec7: b       __vec7
229        .rep 63
230        .long 0x04000400
231        .endr
232__vec8: b       __vec8
233        .rep 63
234        .long 0x04000400
235        .endr
236__vec9: b       __vec9
237        .rep 63
238        .long 0x04000400
239        .endr
240__veca: b       __veca
241        .rep 63
242        .long 0x04000400
243        .endr
244__vecb: b       __vecb
245        .rep 63
246        .long 0x04000400
247        .endr
248__vecc: b       __vecc
249        .rep 63
250        .long 0x04000400
251        .endr
252__vecd: b       __vecd
253        .rep 63
254        .long 0x04000400
255        .endr
256__vece: b       __vece
257        .rep 63
258        .long 0x04000400
259        .endr
260__vecf: b       __vecf
261        .rep 63+1024
262        .long 0x04000400
263        .endr
264
Note: See TracBrowser for help on using the repository browser.