1 | /* vectors.s 1.1 - 95/12/04 |
---|
2 | * |
---|
3 | * This file contains the assembly code for the PowerPC 505 |
---|
4 | * interrupt veneers for RTEMS. |
---|
5 | * |
---|
6 | * Author: Sergei Organov <osv@javad.ru> |
---|
7 | * |
---|
8 | * COPYRIGHT (c) 1998 by JPS. |
---|
9 | * |
---|
10 | * To anyone who acknowledges that this file is provided "AS IS" |
---|
11 | * without any express or implied warranty: |
---|
12 | * permission to use, copy, modify, and distribute this file |
---|
13 | * for any purpose is hereby granted without fee, provided that |
---|
14 | * the above copyright notice and this notice appears in all |
---|
15 | * copies, and that the name of i-cubed limited not be used in |
---|
16 | * advertising or publicity pertaining to distribution of the |
---|
17 | * software without specific, written prior permission. |
---|
18 | * i-cubed limited makes no representations about the suitability |
---|
19 | * of this software for any purpose. |
---|
20 | * |
---|
21 | */ |
---|
22 | |
---|
23 | #include <rtems/asm.h> |
---|
24 | #include <rtems/score/powerpc.h> |
---|
25 | #include <rtems/score/ppc_offs.h> |
---|
26 | |
---|
27 | /* Vector offsets */ |
---|
28 | .set reset, 0x0100 # PPC_IRQ_SYSTEM_RESET |
---|
29 | .set machine_check, 0x0200 # PPC_IRQ_MCHECK |
---|
30 | .set dsi, 0x0300 # PPC_IRQ_PROTECT |
---|
31 | .set isi, 0x0400 # PPC_IRQ_ISI |
---|
32 | .set external_interrupt, 0x0500 # PPC_IRQ_EXTERNAL |
---|
33 | .set alignment, 0x0600 # PPC_IRQ_ALIGNMENT |
---|
34 | .set program, 0x0700 # PPC_IRQ_PROGRAM |
---|
35 | .set fp_unavailable, 0x0800 # PPC_IRQ_NOFP |
---|
36 | .set decrementer, 0x0900 # PPC_IRQ_DECREMENTER |
---|
37 | .set system_call, 0x0C00 # PPC_IRQ_SCALL |
---|
38 | .set trace, 0x0D00 # PPC_IRQ_TRACE |
---|
39 | .set fp_assist, 0x0E00 # PPC_IRQ_FP_ASST |
---|
40 | .set software_emulation, 0x1000 # PPC_IRQ_SOFTEMU |
---|
41 | .set data_bp, 0x1C00 # PPC_IRQ_DATA_BP |
---|
42 | .set istruction_bp, 0x1D00 # PPC_IRQ_INST_BP |
---|
43 | .set m_extern_bp, 0x1E00 # PPC_IRQ_MEXT_BP |
---|
44 | .set nm_extern_bp, 0x1F00 # PPC_IRQ_NMEXT_BP |
---|
45 | |
---|
46 | #define ABI_ADD 0 |
---|
47 | .extern led_green |
---|
48 | #define ISR_HANDLER(vector, irq) \ |
---|
49 | .org vector; \ |
---|
50 | stwu r1, -(ABI_ADD + IP_END)(r1); \ |
---|
51 | stw r0, IP_0(r1); \ |
---|
52 | li r0, irq; \ |
---|
53 | b PROC (_ISR_Handler); |
---|
54 | |
---|
55 | /* Go to the right section */ |
---|
56 | .section .vect,"ax",@progbits |
---|
57 | .globl __vect |
---|
58 | __vect: |
---|
59 | ISR_HANDLER(reset, PPC_IRQ_SYSTEM_RESET) |
---|
60 | ISR_HANDLER(machine_check, PPC_IRQ_MCHECK) |
---|
61 | ISR_HANDLER(dsi, PPC_IRQ_PROTECT) |
---|
62 | ISR_HANDLER(isi, PPC_IRQ_ISI) |
---|
63 | ISR_HANDLER(external_interrupt, PPC_IRQ_EXTERNAL) |
---|
64 | ISR_HANDLER(alignment, PPC_IRQ_ALIGNMENT) |
---|
65 | ISR_HANDLER(program, PPC_IRQ_PROGRAM) |
---|
66 | ISR_HANDLER(fp_unavailable, PPC_IRQ_NOFP) |
---|
67 | ISR_HANDLER(decrementer, PPC_IRQ_DECREMENTER) |
---|
68 | ISR_HANDLER(system_call, PPC_IRQ_SCALL) |
---|
69 | ISR_HANDLER(trace, PPC_IRQ_TRACE) |
---|
70 | ISR_HANDLER(fp_assist, PPC_IRQ_FP_ASST) |
---|
71 | ISR_HANDLER(software_emulation, PPC_IRQ_SOFTEMU) |
---|
72 | ISR_HANDLER(data_bp, PPC_IRQ_DATA_BP) |
---|
73 | ISR_HANDLER(istruction_bp, PPC_IRQ_INST_BP) |
---|
74 | ISR_HANDLER(m_extern_bp, PPC_IRQ_MEXT_BP) |
---|
75 | ISR_HANDLER(nm_extern_bp, PPC_IRQ_NMEXT_BP) |
---|