source: rtems/c/src/lib/libbsp/powerpc/ppcn_60x/vectors/vectors.S @ 58f0d35f

4.104.114.84.9
Last change on this file since 58f0d35f was 58f0d35f, checked in by Ralf Corsepius <ralf.corsepius@…>, on Feb 9, 2005 at 3:17:23 PM

2005-02-09 Ralf Corsepius <ralf.corsepius@…>

  • vectors/vectors.S: Remove XCOFF support.
  • Property mode set to 100644
File size: 6.2 KB
Line 
1/*
2 * (c) 1998, Radstone Technology plc.
3 *
4 *
5 * This is an unpublished work the copyright  in  which   vests
6 * in  Radstone Technology plc.  All rights reserved.
7 *
8 * The information contained herein is the property of Radstone
9 * Technology  plc.  and  is  supplied  without  liability  for
10 * errors or omissions and no part may be reproduced,  used  or
11 * disclosed except as authorized by contract or  other written
12 * permission.     The    copyright    and    the     foregoing
13 * restriction   on  reproduction, use and disclosure extend to
14 * all  the   media   in   which   this  information   may   be
15 * embodied.
16 *
17 */
18/*  vectors.s   1.1 - 95/12/04
19 *
20 *  This file contains the assembly code for the PowerPC
21 *  interrupt veneers for RTEMS.
22 *
23 */
24
25/*
26 *  The issue with this file is getting it loaded at the right place.
27 *  The first vector MUST be at address 0x????0100.
28 *  How this is achieved is dependant on the tool chain.
29 *
30 *  However the basic mechanism for ELF assemblers is to create a
31 *  section called ".vectors", which will be loaded to an address
32 *  between 0x????0000 and 0x????0100 (inclusive) via a link script.
33 *
34 *  The basic mechanism for XCOFF assemblers is to place it in the
35 *  normal text section, and arrange for this file to be located
36 *  at an appropriate position on the linker command line.
37 *
38 *  The variable 'PPC_VECTOR_FILE_BASE' must be defined to be the
39 *  offset from 0x????0000 to the first location in the file.  This
40 *  will usually be 0x0000 or 0x0100.
41 *
42 *  $Id$
43 */
44
45#include <rtems/asm.h>
46#include "bsp.h"
47
48#ifndef PPC_VECTOR_FILE_BASE
49#error "PPC_VECTOR_FILE_BASE is not defined."
50#endif
51
52    .set    IP_LINK, 0
53#if (PPC_ABI == PPC_ABI_POWEROPEN || PPC_ABI == PPC_ABI_GCC27)
54    .set    IP_0, (IP_LINK + 56)
55#else
56    .set    IP_0, (IP_LINK + 8)
57#endif
58    .set    IP_2, (IP_0 + 4)
59
60    .set    IP_3, (IP_2 + 4)
61    .set    IP_4, (IP_3 + 4)
62    .set    IP_5, (IP_4 + 4)
63    .set    IP_6, (IP_5 + 4)
64
65    .set    IP_7, (IP_6 + 4)
66    .set    IP_8, (IP_7 + 4)
67    .set    IP_9, (IP_8 + 4)
68    .set    IP_10, (IP_9 + 4)
69
70    .set    IP_11, (IP_10 + 4)
71    .set    IP_12, (IP_11 + 4)
72    .set    IP_13, (IP_12 + 4)
73    .set    IP_28, (IP_13 + 4)
74
75    .set    IP_29, (IP_28 + 4)
76    .set    IP_30, (IP_29 + 4)
77    .set    IP_31, (IP_30 + 4)
78    .set    IP_CR, (IP_31 + 4)
79
80    .set    IP_CTR, (IP_CR + 4)
81    .set    IP_XER, (IP_CTR + 4)
82    .set    IP_LR, (IP_XER + 4)
83    .set    IP_PC, (IP_LR + 4)
84
85    .set    IP_MSR, (IP_PC + 4)
86
87    .set    IP_END, (IP_MSR + 16)
88
89        /* Where this file will be loaded */
90        .set    file_base, PPC_VECTOR_FILE_BASE
91
92        /* Vector offsets                        */
93        .set    reset_vector,0x0100
94        .set    mach_vector,0x0200
95        .set    prot_vector,0x0300
96        .set    isi_vector,0x0400
97        .set    ext_vector,0x0500
98        .set    align_vector,0x0600
99        .set    prog_vector,0x0700
100        .set    float_vector,0x0800
101        .set    dec_vector,0x0900
102        .set    sys_vector,0x00C00
103        .set    trace_vector, 0x0d00
104        .set    itm_vector,0x01000
105        .set    dltm_vector,0x1100
106        .set    dstm_vector,0x1200
107        .set    addr_vector,0x1300
108        .set    sysmgmt_vector,0x1400
109
110/* Go to the right section */
111#if PPC_ASM == PPC_ASM_ELF
112        .section .vectors,"awx",@progbits
113#endif
114
115        PUBLIC_VAR (__vectors)
116SYM (__vectors):
117
118#if PPCN_60X_USE_DINK
119        .org    reset_vector - file_base
120        /* This is where the DINK soft reset handler is located */
121        ba  0xfff00180
122
123        .org    mach_vector - file_base
124        ba  0xfff00200
125
126        .org    prot_vector - file_base
127        ba  0xfff00300
128
129        .org    isi_vector - file_base
130        ba  0xfff00400
131
132        .org    ext_vector - file_base
133        rfi
134
135        .org    align_vector - file_base
136        ba  0xfff00600
137
138        .org    prog_vector - file_base
139        ba  0xfff00700
140
141        .org    float_vector - file_base
142        ba  0xfff00800
143
144        .org    dec_vector - file_base
145        rfi
146
147        .org    sys_vector - file_base
148        ba  0xfff00C00
149
150        .org    trace_vector - file_base
151        ba  0xfff00d00
152
153        .org    itm_vector - file_base
154        ba  0xfff01000
155
156        .org    dltm_vector - file_base
157        ba  0xfff01100
158
159        .org    dstm_vector - file_base
160        ba  0xfff01200
161
162        .org    addr_vector - file_base
163        ba  0xfff01300
164
165        .org    sysmgmt_vector - file_base
166        ba  0xfff01400
167#else
168        .org    reset_vector - file_base
169        stwu    r1, -(IP_END)(r1)
170        stw             r4,IP_4(r1)
171        li              r4,1
172display_exc:
173        stw             r3,IP_3(r1)
174        stw             r5,IP_5(r1)
175        /*
176         * Enable data and instruction address translation
177         */
178        li      r3,MSR_IR | MSR_DR
179        mtmsr   r3
180        lis             r3,0x8000
181        stb             r4,0x860(r3)
182        addi    r4,r4,0x30
183waitfortx:
184        lbz             r5,0x3fd(r3)
185        andi.   r5,r5,0x20
186        beq             waitfortx
187        stb             r4,0x3f8(r3)
188        li              r5,0
189        stw             r4,0x00(r5)
190        mfsrr0  r4
191        stw             r4,0x04(r5)
192        mfsrr1  r4
193        stw             r4,0x08(r5)
194        lwz             r4,IP_4(r1)
195        lwz             r5,IP_5(r1)
196        lwz             r3,IP_3(r1)
197        addi    r1,r1,IP_END
198        rfi
199
200        .org    mach_vector - file_base
201        stwu    r1, -(IP_END)(r1)
202        stw             r4,IP_4(r1)
203        stw             r3,IP_3(r1)
204        lis             r4,0
205        mfspr   r3,srr0
206        stw             r3,0x00(r4)
207        mfspr   r3,srr1
208        stw             r3,0x04(r4)
209        stw             r5,0x08(r4)
210        stw             r2,0x0c(r4)
211        stw             r11,0x10(r4)
212        stw             r12,0x14(r4)
213        dcbst   0,r4
214        li              r4,0x02
215        b               display_exc
216
217        .org    prot_vector - file_base
218        stwu    r1, -(IP_END)(r1)
219        stw             r4,IP_4(r1)
220        li              r4,0x03
221        b               display_exc
222
223        .org    isi_vector - file_base
224        stwu    r1, -(IP_END)(r1)
225        stw             r4,IP_4(r1)
226        li              r4,0x04
227        b               display_exc
228
229        .org    ext_vector - file_base
230        rfi
231
232        .org    align_vector - file_base
233        stwu    r1, -(IP_END)(r1)
234        stw             r4,IP_4(r1)
235        li              r4,0x06
236        b               display_exc
237
238        .org    prog_vector - file_base
239        stwu    r1, -(IP_END)(r1)
240        stw             r4,IP_4(r1)
241        li              r4,0x07
242        b               display_exc
243
244        .org    float_vector - file_base
245        stwu    r1, -(IP_END)(r1)
246        stw             r4,IP_4(r1)
247        li              r4,0x08
248        b               display_exc
249
250        .org    dec_vector - file_base
251        rfi
252
253        .org    sys_vector - file_base
254        stwu    r1, -(IP_END)(r1)
255        stw             r4,IP_4(r1)
256        li              r4,0x0a
257        b               display_exc
258
259        .org    trace_vector - file_base
260        stwu    r1, -(IP_END)(r1)
261        stw             r4,IP_4(r1)
262        li              r4,0x0b
263        b               display_exc
264
265        .org    itm_vector - file_base
266        stwu    r1, -(IP_END)(r1)
267        stw             r4,IP_4(r1)
268        li              r4,0x0c
269        b               display_exc
270
271        .org    dltm_vector - file_base
272        stwu    r1, -(IP_END)(r1)
273        stw             r4,IP_4(r1)
274        li              r4,0x0d
275        b               display_exc
276
277        .org    dstm_vector - file_base
278        stwu    r1, -(IP_END)(r1)
279        stw             r4,IP_4(r1)
280        li              r4,0x0e
281        b               display_exc
282
283        .org    addr_vector - file_base
284        stwu    r1, -(IP_END)(r1)
285        stw             r4,IP_4(r1)
286        li              r4,0x0f
287        b               display_exc
288
289        .org    sysmgmt_vector - file_base
290        stwu    r1, -(IP_END)(r1)
291        stw             r4,IP_4(r1)
292        li              r4,0x00
293        b               display_exc
294#endif
Note: See TracBrowser for help on using the repository browser.