Mercurial > ecos
annotate packages/hal/powerpc/arch/current/src/vectors.S @ 2883:842a82a508f3
Add Book E architecture support. See the ChangeLog for full details.
| author | nickg |
|---|---|
| date | Mon, 08 Jun 2009 15:46:34 +0000 |
| parents | 74dbf4c3f2e1 |
| children | 5d701b4e0c3b |
| rev | line source |
|---|---|
| 2 | 1 ##========================================================================== |
| 0 | 2 ## |
| 3 ## vectors.S | |
| 4 ## | |
| 5 ## PowerPC exception vectors | |
| 6 ## | |
| 2 | 7 ##========================================================================== |
|
2729
74dbf4c3f2e1
Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents:
2563
diff
changeset
|
8 ## ####ECOSGPLCOPYRIGHTBEGIN#### |
|
74dbf4c3f2e1
Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents:
2563
diff
changeset
|
9 ## ------------------------------------------- |
|
74dbf4c3f2e1
Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents:
2563
diff
changeset
|
10 ## This file is part of eCos, the Embedded Configurable Operating System. |
|
2883
842a82a508f3
Add Book E architecture support. See the ChangeLog for full details.
nickg
parents:
2729
diff
changeset
|
11 ## Copyright (C) 1998, 1999, 2000, 2001, 2002, 2007, 2008 Free Software Foundation, Inc. |
|
210
d2c90368aeef
Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
208
diff
changeset
|
12 ## |
|
2729
74dbf4c3f2e1
Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents:
2563
diff
changeset
|
13 ## eCos is free software; you can redistribute it and/or modify it under |
|
74dbf4c3f2e1
Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents:
2563
diff
changeset
|
14 ## the terms of the GNU General Public License as published by the Free |
|
74dbf4c3f2e1
Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents:
2563
diff
changeset
|
15 ## Software Foundation; either version 2 or (at your option) any later |
|
74dbf4c3f2e1
Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents:
2563
diff
changeset
|
16 ## version. |
|
210
d2c90368aeef
Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
208
diff
changeset
|
17 ## |
|
2729
74dbf4c3f2e1
Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents:
2563
diff
changeset
|
18 ## eCos is distributed in the hope that it will be useful, but WITHOUT |
|
74dbf4c3f2e1
Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents:
2563
diff
changeset
|
19 ## ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or |
|
74dbf4c3f2e1
Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents:
2563
diff
changeset
|
20 ## FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License |
|
74dbf4c3f2e1
Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents:
2563
diff
changeset
|
21 ## for more details. |
|
210
d2c90368aeef
Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
208
diff
changeset
|
22 ## |
|
2729
74dbf4c3f2e1
Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents:
2563
diff
changeset
|
23 ## You should have received a copy of the GNU General Public License |
|
74dbf4c3f2e1
Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents:
2563
diff
changeset
|
24 ## along with eCos; if not, write to the Free Software Foundation, Inc., |
|
74dbf4c3f2e1
Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents:
2563
diff
changeset
|
25 ## 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. |
|
210
d2c90368aeef
Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
208
diff
changeset
|
26 ## |
|
2729
74dbf4c3f2e1
Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents:
2563
diff
changeset
|
27 ## As a special exception, if other files instantiate templates or use |
|
74dbf4c3f2e1
Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents:
2563
diff
changeset
|
28 ## macros or inline functions from this file, or you compile this file |
|
74dbf4c3f2e1
Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents:
2563
diff
changeset
|
29 ## and link it with other works to produce a work based on this file, |
|
74dbf4c3f2e1
Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents:
2563
diff
changeset
|
30 ## this file does not by itself cause the resulting work to be covered by |
|
74dbf4c3f2e1
Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents:
2563
diff
changeset
|
31 ## the GNU General Public License. However the source code for this file |
|
74dbf4c3f2e1
Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents:
2563
diff
changeset
|
32 ## must still be made available in accordance with section (3) of the GNU |
|
74dbf4c3f2e1
Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents:
2563
diff
changeset
|
33 ## General Public License v2. |
|
210
d2c90368aeef
Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
208
diff
changeset
|
34 ## |
|
2729
74dbf4c3f2e1
Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents:
2563
diff
changeset
|
35 ## This exception does not invalidate any other reasons why a work based |
|
74dbf4c3f2e1
Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents:
2563
diff
changeset
|
36 ## on this file might be covered by the GNU General Public License. |
|
74dbf4c3f2e1
Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents:
2563
diff
changeset
|
37 ## ------------------------------------------- |
|
74dbf4c3f2e1
Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents:
2563
diff
changeset
|
38 ## ####ECOSGPLCOPYRIGHTEND#### |
| 2 | 39 ##========================================================================== |
| 0 | 40 #######DESCRIPTIONBEGIN#### |
| 41 ## | |
| 2 | 42 ## Author(s): nickg, jskov |
| 43 ## Contributors: nickg, jskov | |
| 44 ## Date: 1999-02-20 | |
| 45 ## Purpose: PowerPC exception vectors | |
| 46 ## Description: This file defines the code placed into the exception | |
| 47 ## vectors. It also contains the first level default VSRs | |
| 48 ## that save and restore state for both exceptions and | |
| 49 ## interrupts. | |
| 0 | 50 ## |
| 51 ######DESCRIPTIONEND#### | |
| 52 ## | |
| 2 | 53 ##========================================================================== |
| 0 | 54 |
|
70
c5536bad4c24
Merge from eCos master repository on 2000-02-11-15:46:40-GMT
jlarmour
parents:
68
diff
changeset
|
55 #=========================================================================== |
|
c5536bad4c24
Merge from eCos master repository on 2000-02-11-15:46:40-GMT
jlarmour
parents:
68
diff
changeset
|
56 # |
|
c5536bad4c24
Merge from eCos master repository on 2000-02-11-15:46:40-GMT
jlarmour
parents:
68
diff
changeset
|
57 # The PowerPC exception handling has changed as of version 1.3.1. |
|
c5536bad4c24
Merge from eCos master repository on 2000-02-11-15:46:40-GMT
jlarmour
parents:
68
diff
changeset
|
58 # The primary motivation for rewriting the code was to bring it more |
|
c5536bad4c24
Merge from eCos master repository on 2000-02-11-15:46:40-GMT
jlarmour
parents:
68
diff
changeset
|
59 # in line with the other HALs, in particular to allow a RAM application |
|
c5536bad4c24
Merge from eCos master repository on 2000-02-11-15:46:40-GMT
jlarmour
parents:
68
diff
changeset
|
60 # to cleanly take over only a subset of vectors from a running ROM |
|
c5536bad4c24
Merge from eCos master repository on 2000-02-11-15:46:40-GMT
jlarmour
parents:
68
diff
changeset
|
61 # monitor. |
|
c5536bad4c24
Merge from eCos master repository on 2000-02-11-15:46:40-GMT
jlarmour
parents:
68
diff
changeset
|
62 # |
|
c5536bad4c24
Merge from eCos master repository on 2000-02-11-15:46:40-GMT
jlarmour
parents:
68
diff
changeset
|
63 # GDB stubs (and CygMon, should it be ported to PPC) copies |
|
c5536bad4c24
Merge from eCos master repository on 2000-02-11-15:46:40-GMT
jlarmour
parents:
68
diff
changeset
|
64 # exception vector entry handler code to address 0. These vector entry |
|
c5536bad4c24
Merge from eCos master repository on 2000-02-11-15:46:40-GMT
jlarmour
parents:
68
diff
changeset
|
65 # handlers (defined by the exception_vector macro below) compute |
|
c5536bad4c24
Merge from eCos master repository on 2000-02-11-15:46:40-GMT
jlarmour
parents:
68
diff
changeset
|
66 # a vector index into the hal_vsr_table, fetch the pointer, and |
|
c5536bad4c24
Merge from eCos master repository on 2000-02-11-15:46:40-GMT
jlarmour
parents:
68
diff
changeset
|
67 # jump to the HAL vector service routine (VSR). |
|
c5536bad4c24
Merge from eCos master repository on 2000-02-11-15:46:40-GMT
jlarmour
parents:
68
diff
changeset
|
68 # |
|
c5536bad4c24
Merge from eCos master repository on 2000-02-11-15:46:40-GMT
jlarmour
parents:
68
diff
changeset
|
69 # The hal_vsr_table is located immediately after the vector |
|
c5536bad4c24
Merge from eCos master repository on 2000-02-11-15:46:40-GMT
jlarmour
parents:
68
diff
changeset
|
70 # handlers (at address 0x3000), allowing RAM applications to |
|
c5536bad4c24
Merge from eCos master repository on 2000-02-11-15:46:40-GMT
jlarmour
parents:
68
diff
changeset
|
71 # change VSRs as necessary, while still keeping desired ROM |
|
c5536bad4c24
Merge from eCos master repository on 2000-02-11-15:46:40-GMT
jlarmour
parents:
68
diff
changeset
|
72 # monitor functionality available for debugging. |
|
c5536bad4c24
Merge from eCos master repository on 2000-02-11-15:46:40-GMT
jlarmour
parents:
68
diff
changeset
|
73 # |
|
c5536bad4c24
Merge from eCos master repository on 2000-02-11-15:46:40-GMT
jlarmour
parents:
68
diff
changeset
|
74 # ROM applications can still be configured to leave the vector entry |
|
c5536bad4c24
Merge from eCos master repository on 2000-02-11-15:46:40-GMT
jlarmour
parents:
68
diff
changeset
|
75 # handlers at 0xff000000, but there is at the moment no |
|
c5536bad4c24
Merge from eCos master repository on 2000-02-11-15:46:40-GMT
jlarmour
parents:
68
diff
changeset
|
76 # provision for reclaiming the reserved vector space in RAM to |
|
c5536bad4c24
Merge from eCos master repository on 2000-02-11-15:46:40-GMT
jlarmour
parents:
68
diff
changeset
|
77 # application usage. |
|
c5536bad4c24
Merge from eCos master repository on 2000-02-11-15:46:40-GMT
jlarmour
parents:
68
diff
changeset
|
78 # |
|
c5536bad4c24
Merge from eCos master repository on 2000-02-11-15:46:40-GMT
jlarmour
parents:
68
diff
changeset
|
79 # RAM applications can also be configured to provide exception |
|
c5536bad4c24
Merge from eCos master repository on 2000-02-11-15:46:40-GMT
jlarmour
parents:
68
diff
changeset
|
80 # handlers which are copied to address 0 on startup, thus taking |
|
c5536bad4c24
Merge from eCos master repository on 2000-02-11-15:46:40-GMT
jlarmour
parents:
68
diff
changeset
|
81 # full control of the target. |
|
c5536bad4c24
Merge from eCos master repository on 2000-02-11-15:46:40-GMT
jlarmour
parents:
68
diff
changeset
|
82 # |
|
c5536bad4c24
Merge from eCos master repository on 2000-02-11-15:46:40-GMT
jlarmour
parents:
68
diff
changeset
|
83 # |
|
c5536bad4c24
Merge from eCos master repository on 2000-02-11-15:46:40-GMT
jlarmour
parents:
68
diff
changeset
|
84 # Default configuration is for RAM applications to rely on an |
|
c5536bad4c24
Merge from eCos master repository on 2000-02-11-15:46:40-GMT
jlarmour
parents:
68
diff
changeset
|
85 # existing ROM monitor to provide debugging functionality, and |
|
c5536bad4c24
Merge from eCos master repository on 2000-02-11-15:46:40-GMT
jlarmour
parents:
68
diff
changeset
|
86 # for ROM applications to copy vectors to address 0. |
|
c5536bad4c24
Merge from eCos master repository on 2000-02-11-15:46:40-GMT
jlarmour
parents:
68
diff
changeset
|
87 # |
|
c5536bad4c24
Merge from eCos master repository on 2000-02-11-15:46:40-GMT
jlarmour
parents:
68
diff
changeset
|
88 # |
|
c5536bad4c24
Merge from eCos master repository on 2000-02-11-15:46:40-GMT
jlarmour
parents:
68
diff
changeset
|
89 # Unfortunately the new exception scheme is not compatible with the |
|
c5536bad4c24
Merge from eCos master repository on 2000-02-11-15:46:40-GMT
jlarmour
parents:
68
diff
changeset
|
90 # old scheme. Stubs and applications must be compiled using the same |
|
c5536bad4c24
Merge from eCos master repository on 2000-02-11-15:46:40-GMT
jlarmour
parents:
68
diff
changeset
|
91 # scheme (i.e., old binaries will not run with new stubs, and new |
|
c5536bad4c24
Merge from eCos master repository on 2000-02-11-15:46:40-GMT
jlarmour
parents:
68
diff
changeset
|
92 # binaries will not run with old stubs). |
|
c5536bad4c24
Merge from eCos master repository on 2000-02-11-15:46:40-GMT
jlarmour
parents:
68
diff
changeset
|
93 # |
|
c5536bad4c24
Merge from eCos master repository on 2000-02-11-15:46:40-GMT
jlarmour
parents:
68
diff
changeset
|
94 #=========================================================================== |
|
c5536bad4c24
Merge from eCos master repository on 2000-02-11-15:46:40-GMT
jlarmour
parents:
68
diff
changeset
|
95 |
| 0 | 96 #include <pkgconf/hal.h> |
| 97 | |
| 98 #ifdef CYGPKG_KERNEL | |
| 99 #include <pkgconf/kernel.h> // CYGPKG_KERNEL_INSTRUMENT | |
| 100 #endif | |
| 2 | 101 |
| 102 #define CYGARC_HAL_COMMON_EXPORT_CPU_MACROS | |
|
76
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
72
diff
changeset
|
103 #include <cyg/hal/ppc_regs.h> |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
72
diff
changeset
|
104 |
| 2 | 105 #=========================================================================== |
| 0 | 106 |
|
208
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
149
diff
changeset
|
107 // .file "vectors.S" |
| 0 | 108 |
|
70
c5536bad4c24
Merge from eCos master repository on 2000-02-11-15:46:40-GMT
jlarmour
parents:
68
diff
changeset
|
109 .extern hal_interrupt_data |
| 0 | 110 .extern hal_interrupt_handlers |
| 111 .extern hal_interrupt_objects | |
|
70
c5536bad4c24
Merge from eCos master repository on 2000-02-11-15:46:40-GMT
jlarmour
parents:
68
diff
changeset
|
112 .extern hal_vsr_table |
| 0 | 113 |
|
70
c5536bad4c24
Merge from eCos master repository on 2000-02-11-15:46:40-GMT
jlarmour
parents:
68
diff
changeset
|
114 .extern cyg_hal_invoke_constructors |
| 0 | 115 .extern cyg_instrument |
|
70
c5536bad4c24
Merge from eCos master repository on 2000-02-11-15:46:40-GMT
jlarmour
parents:
68
diff
changeset
|
116 .extern cyg_start |
|
c5536bad4c24
Merge from eCos master repository on 2000-02-11-15:46:40-GMT
jlarmour
parents:
68
diff
changeset
|
117 .extern hal_IRQ_init |
|
c5536bad4c24
Merge from eCos master repository on 2000-02-11-15:46:40-GMT
jlarmour
parents:
68
diff
changeset
|
118 .extern hal_MMU_init |
|
c5536bad4c24
Merge from eCos master repository on 2000-02-11-15:46:40-GMT
jlarmour
parents:
68
diff
changeset
|
119 .extern hal_enable_caches |
|
c5536bad4c24
Merge from eCos master repository on 2000-02-11-15:46:40-GMT
jlarmour
parents:
68
diff
changeset
|
120 .extern hal_hardware_init |
|
c5536bad4c24
Merge from eCos master repository on 2000-02-11-15:46:40-GMT
jlarmour
parents:
68
diff
changeset
|
121 .extern initialize_stub |
| 0 | 122 |
|
70
c5536bad4c24
Merge from eCos master repository on 2000-02-11-15:46:40-GMT
jlarmour
parents:
68
diff
changeset
|
123 .extern __bss_start |
|
c5536bad4c24
Merge from eCos master repository on 2000-02-11-15:46:40-GMT
jlarmour
parents:
68
diff
changeset
|
124 .extern __bss_end |
|
c5536bad4c24
Merge from eCos master repository on 2000-02-11-15:46:40-GMT
jlarmour
parents:
68
diff
changeset
|
125 .extern __sbss_start |
|
c5536bad4c24
Merge from eCos master repository on 2000-02-11-15:46:40-GMT
jlarmour
parents:
68
diff
changeset
|
126 .extern __sbss_end |
| 0 | 127 |
| 2 | 128 #=========================================================================== |
| 0 | 129 # MSR initialization value |
| 130 # zero all bits except: | |
| 131 # FP = floating point available | |
| 132 # ME = machine check enabled | |
| 133 # IP = vectors at 0xFFFxxxxx (ROM startup only) | |
| 2 | 134 # IR = instruction address translation |
| 135 # DR = data address translation | |
| 0 | 136 # RI = recoverable interrupt |
| 137 | |
|
82
6736c52df507
Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents:
76
diff
changeset
|
138 #define CYG_MSR_COMMON (MSR_FP | MSR_ME | MSR_RI) |
|
6736c52df507
Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents:
76
diff
changeset
|
139 |
|
6736c52df507
Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents:
76
diff
changeset
|
140 #if (CYGHWR_HAL_POWERPC_VECTOR_BASE == 0xfff00000) |
|
6736c52df507
Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents:
76
diff
changeset
|
141 # define IP_BIT MSR_IP |
|
6736c52df507
Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents:
76
diff
changeset
|
142 #else |
|
6736c52df507
Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents:
76
diff
changeset
|
143 # define IP_BIT 0 |
| 0 | 144 #endif |
|
70
c5536bad4c24
Merge from eCos master repository on 2000-02-11-15:46:40-GMT
jlarmour
parents:
68
diff
changeset
|
145 |
|
82
6736c52df507
Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents:
76
diff
changeset
|
146 #ifdef CYGHWR_HAL_POWERPC_ENABLE_MMU |
|
6736c52df507
Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents:
76
diff
changeset
|
147 # define IR_DR_BITS (MSR_IR | MSR_DR) |
|
6736c52df507
Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents:
76
diff
changeset
|
148 #else |
|
6736c52df507
Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents:
76
diff
changeset
|
149 # define IR_DR_BITS 0 |
| 0 | 150 #endif |
| 151 | |
|
82
6736c52df507
Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents:
76
diff
changeset
|
152 #define CYG_MSR (CYG_MSR_COMMON | IP_BIT | IR_DR_BITS) |
|
6736c52df507
Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents:
76
diff
changeset
|
153 |
|
70
c5536bad4c24
Merge from eCos master repository on 2000-02-11-15:46:40-GMT
jlarmour
parents:
68
diff
changeset
|
154 # Include variant macros after MSR definition. |
|
76
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
72
diff
changeset
|
155 #include <cyg/hal/arch.inc> |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
72
diff
changeset
|
156 #include <cyg/hal/ppc_offsets.inc> |
|
70
c5536bad4c24
Merge from eCos master repository on 2000-02-11-15:46:40-GMT
jlarmour
parents:
68
diff
changeset
|
157 |
|
c5536bad4c24
Merge from eCos master repository on 2000-02-11-15:46:40-GMT
jlarmour
parents:
68
diff
changeset
|
158 |
| 2 | 159 #=========================================================================== |
| 0 | 160 # If the following option is enabled, we only save registers up to R12. |
| 161 # The PowerPC ABI defines registers 13..31 as callee saved and thus we do | |
| 162 # not need to save them when calling C functions. | |
| 163 | |
| 164 #ifdef CYGDBG_HAL_COMMON_INTERRUPTS_SAVE_MINIMUM_CONTEXT | |
|
70
c5536bad4c24
Merge from eCos master repository on 2000-02-11-15:46:40-GMT
jlarmour
parents:
68
diff
changeset
|
165 # define MAX_SAVE_REG 12 |
| 0 | 166 #else |
|
70
c5536bad4c24
Merge from eCos master repository on 2000-02-11-15:46:40-GMT
jlarmour
parents:
68
diff
changeset
|
167 # define MAX_SAVE_REG 31 |
| 0 | 168 #endif |
| 169 | |
|
76
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
72
diff
changeset
|
170 |
|
82
6736c52df507
Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents:
76
diff
changeset
|
171 #if defined(CYGHWR_HAL_POWERPC_NEED_VECTORS) |
|
76
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
72
diff
changeset
|
172 |
| 2 | 173 #=========================================================================== |
| 0 | 174 # Start by defining the exceptions vectors that must be placed at |
|
70
c5536bad4c24
Merge from eCos master repository on 2000-02-11-15:46:40-GMT
jlarmour
parents:
68
diff
changeset
|
175 # locations 0xFFF00000 or 0x00000000. The following code will normally |
| 0 | 176 # be located at 0xFFF00000 in the ROM. It may optionally be copied out |
| 177 # to 0x00000000 if we want to use the RAM vectors. For this reason this code | |
|
70
c5536bad4c24
Merge from eCos master repository on 2000-02-11-15:46:40-GMT
jlarmour
parents:
68
diff
changeset
|
178 # MUST BE POSITION INDEPENDENT. |
| 0 | 179 |
| 180 .section ".vectors","ax" | |
| 181 | |
| 2 | 182 #--------------------------------------------------------------------------- |
|
70
c5536bad4c24
Merge from eCos master repository on 2000-02-11-15:46:40-GMT
jlarmour
parents:
68
diff
changeset
|
183 # Macros for generating an exception vector service routine |
|
c5536bad4c24
Merge from eCos master repository on 2000-02-11-15:46:40-GMT
jlarmour
parents:
68
diff
changeset
|
184 |
|
c5536bad4c24
Merge from eCos master repository on 2000-02-11-15:46:40-GMT
jlarmour
parents:
68
diff
changeset
|
185 # Reset vector macro |
| 0 | 186 |
|
70
c5536bad4c24
Merge from eCos master repository on 2000-02-11-15:46:40-GMT
jlarmour
parents:
68
diff
changeset
|
187 .macro reset_vector name |
|
2883
842a82a508f3
Add Book E architecture support. See the ChangeLog for full details.
nickg
parents:
2729
diff
changeset
|
188 .p2align CYGHWR_HAL_POWERPC_VECTOR_ALIGNMENT |
|
70
c5536bad4c24
Merge from eCos master repository on 2000-02-11-15:46:40-GMT
jlarmour
parents:
68
diff
changeset
|
189 .globl __exception_\name |
|
c5536bad4c24
Merge from eCos master repository on 2000-02-11-15:46:40-GMT
jlarmour
parents:
68
diff
changeset
|
190 __exception_\name: |
| 473 | 191 #ifdef CYGSEM_HAL_POWERPC_RESET_USES_JUMP |
| 192 bl _start | |
| 193 #else | |
| 0 | 194 lwi r3,_start |
| 195 mtlr r3 | |
| 196 blr | |
| 473 | 197 #endif |
| 198 | |
|
70
c5536bad4c24
Merge from eCos master repository on 2000-02-11-15:46:40-GMT
jlarmour
parents:
68
diff
changeset
|
199 .endm |
| 0 | 200 |
|
70
c5536bad4c24
Merge from eCos master repository on 2000-02-11-15:46:40-GMT
jlarmour
parents:
68
diff
changeset
|
201 # Generic vector macro |
|
c5536bad4c24
Merge from eCos master repository on 2000-02-11-15:46:40-GMT
jlarmour
parents:
68
diff
changeset
|
202 |
| 0 | 203 .macro exception_vector name |
|
2883
842a82a508f3
Add Book E architecture support. See the ChangeLog for full details.
nickg
parents:
2729
diff
changeset
|
204 .p2align CYGHWR_HAL_POWERPC_VECTOR_ALIGNMENT |
| 0 | 205 .globl __exception_\name |
| 206 __exception_\name: | |
|
76
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
72
diff
changeset
|
207 mtspr SPRG1,r3 # stash some work registers away |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
72
diff
changeset
|
208 mtspr SPRG2,r4 |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
72
diff
changeset
|
209 mtspr SPRG3,r5 |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
72
diff
changeset
|
210 mfcr r4 # stash CR |
|
138
289bf90c6a9b
Merge from eCos master repository on 2000-11-24-06:43:05-GMT
jlarmour
parents:
136
diff
changeset
|
211 li r5,__exception_\name-rom_vectors # load low half of vector addr |
|
2883
842a82a508f3
Add Book E architecture support. See the ChangeLog for full details.
nickg
parents:
2729
diff
changeset
|
212 srwi r5,r5,(CYGHWR_HAL_POWERPC_VECTOR_ALIGNMENT-2) # shift right by alignment-2 |
|
76
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
72
diff
changeset
|
213 lwi r3,hal_vsr_table # table base |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
72
diff
changeset
|
214 lwzx r3,r3,r5 # address of vsr |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
72
diff
changeset
|
215 mflr r5 # save link register |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
72
diff
changeset
|
216 mtlr r3 # put vsr address into it |
|
138
289bf90c6a9b
Merge from eCos master repository on 2000-11-24-06:43:05-GMT
jlarmour
parents:
136
diff
changeset
|
217 li r3,__exception_\name-rom_vectors # reload low half of vector addr |
|
76
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
72
diff
changeset
|
218 blr # go to common code |
| 0 | 219 .endm |
| 220 | |
| 2 | 221 #--------------------------------------------------------------------------- |
| 0 | 222 # Define the exception vectors. |
| 223 | |
|
138
289bf90c6a9b
Merge from eCos master repository on 2000-11-24-06:43:05-GMT
jlarmour
parents:
136
diff
changeset
|
224 // Some platforms won't let us put the vector code just where we want |
|
289bf90c6a9b
Merge from eCos master repository on 2000-11-24-06:43:05-GMT
jlarmour
parents:
136
diff
changeset
|
225 // This macro introduces some lattitude in vector placement |
|
289bf90c6a9b
Merge from eCos master repository on 2000-11-24-06:43:05-GMT
jlarmour
parents:
136
diff
changeset
|
226 |
|
289bf90c6a9b
Merge from eCos master repository on 2000-11-24-06:43:05-GMT
jlarmour
parents:
136
diff
changeset
|
227 #ifdef CYG_HAL_FUDGE_VECTOR_ALIGNMENT |
|
289bf90c6a9b
Merge from eCos master repository on 2000-11-24-06:43:05-GMT
jlarmour
parents:
136
diff
changeset
|
228 hal_fudge_vector_alignment |
|
289bf90c6a9b
Merge from eCos master repository on 2000-11-24-06:43:05-GMT
jlarmour
parents:
136
diff
changeset
|
229 #endif |
|
289bf90c6a9b
Merge from eCos master repository on 2000-11-24-06:43:05-GMT
jlarmour
parents:
136
diff
changeset
|
230 |
|
70
c5536bad4c24
Merge from eCos master repository on 2000-02-11-15:46:40-GMT
jlarmour
parents:
68
diff
changeset
|
231 rom_vectors: |
| 0 | 232 # These are the architecture defined vectors that |
| 233 # are always present. | |
|
138
289bf90c6a9b
Merge from eCos master repository on 2000-11-24-06:43:05-GMT
jlarmour
parents:
136
diff
changeset
|
234 #ifdef CYG_HAL_RESERVED_VECTOR_00000 |
|
289bf90c6a9b
Merge from eCos master repository on 2000-11-24-06:43:05-GMT
jlarmour
parents:
136
diff
changeset
|
235 hal_reserved_vector_00000 |
|
2883
842a82a508f3
Add Book E architecture support. See the ChangeLog for full details.
nickg
parents:
2729
diff
changeset
|
236 #else |
|
70
c5536bad4c24
Merge from eCos master repository on 2000-02-11-15:46:40-GMT
jlarmour
parents:
68
diff
changeset
|
237 exception_vector reserved_00000 |
|
138
289bf90c6a9b
Merge from eCos master repository on 2000-11-24-06:43:05-GMT
jlarmour
parents:
136
diff
changeset
|
238 #endif |
|
70
c5536bad4c24
Merge from eCos master repository on 2000-02-11-15:46:40-GMT
jlarmour
parents:
68
diff
changeset
|
239 reset_vector reset |
| 0 | 240 exception_vector machine_check |
| 241 exception_vector data_storage | |
| 242 exception_vector instruction_storage | |
| 243 exception_vector external | |
| 244 exception_vector alignment | |
| 245 exception_vector program | |
| 246 exception_vector floatingpoint_unavailable | |
| 247 exception_vector decrementer | |
| 248 exception_vector reserved_00a00 | |
| 249 exception_vector reserved_00b00 | |
| 250 exception_vector system_call | |
| 251 exception_vector trace | |
| 252 exception_vector floatingpoint_assist | |
| 253 exception_vector reserved_00f00 | |
| 254 | |
|
2883
842a82a508f3
Add Book E architecture support. See the ChangeLog for full details.
nickg
parents:
2729
diff
changeset
|
255 #if defined(CYGHWR_HAL_POWERPC_BOOK_E) |
|
842a82a508f3
Add Book E architecture support. See the ChangeLog for full details.
nickg
parents:
2729
diff
changeset
|
256 # Book E defines some extra vectors |
|
842a82a508f3
Add Book E architecture support. See the ChangeLog for full details.
nickg
parents:
2729
diff
changeset
|
257 exception_vector critical_input |
|
842a82a508f3
Add Book E architecture support. See the ChangeLog for full details.
nickg
parents:
2729
diff
changeset
|
258 exception_vector ap_unavailable |
|
842a82a508f3
Add Book E architecture support. See the ChangeLog for full details.
nickg
parents:
2729
diff
changeset
|
259 exception_vector interval_timer |
|
842a82a508f3
Add Book E architecture support. See the ChangeLog for full details.
nickg
parents:
2729
diff
changeset
|
260 exception_vector watchdog |
|
842a82a508f3
Add Book E architecture support. See the ChangeLog for full details.
nickg
parents:
2729
diff
changeset
|
261 exception_vector data_tlb_miss |
|
842a82a508f3
Add Book E architecture support. See the ChangeLog for full details.
nickg
parents:
2729
diff
changeset
|
262 exception_vector instruction_tlb_miss |
|
842a82a508f3
Add Book E architecture support. See the ChangeLog for full details.
nickg
parents:
2729
diff
changeset
|
263 exception_vector debug |
|
842a82a508f3
Add Book E architecture support. See the ChangeLog for full details.
nickg
parents:
2729
diff
changeset
|
264 #endif |
|
842a82a508f3
Add Book E architecture support. See the ChangeLog for full details.
nickg
parents:
2729
diff
changeset
|
265 |
|
70
c5536bad4c24
Merge from eCos master repository on 2000-02-11-15:46:40-GMT
jlarmour
parents:
68
diff
changeset
|
266 # Variants may define extra vectors. |
|
c5536bad4c24
Merge from eCos master repository on 2000-02-11-15:46:40-GMT
jlarmour
parents:
68
diff
changeset
|
267 hal_extra_vectors |
| 0 | 268 |
|
70
c5536bad4c24
Merge from eCos master repository on 2000-02-11-15:46:40-GMT
jlarmour
parents:
68
diff
changeset
|
269 rom_vectors_end: |
| 0 | 270 |
|
82
6736c52df507
Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents:
76
diff
changeset
|
271 #else // CYGHWR_HAL_POWERPC_NEED_VECTORS |
|
76
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
72
diff
changeset
|
272 |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
72
diff
changeset
|
273 # When vectors are not included this is the primary entry point. |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
72
diff
changeset
|
274 .globl __exception_reset |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
72
diff
changeset
|
275 __exception_reset: |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
72
diff
changeset
|
276 lwi r3,_start |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
72
diff
changeset
|
277 mtlr r3 |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
72
diff
changeset
|
278 blr |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
72
diff
changeset
|
279 |
|
82
6736c52df507
Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents:
76
diff
changeset
|
280 #endif // CYGHWR_HAL_POWERPC_NEED_VECTORS |
|
76
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
72
diff
changeset
|
281 |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
72
diff
changeset
|
282 |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
72
diff
changeset
|
283 |
| 2 | 284 #=========================================================================== |
| 285 # Real startup code. We jump here from the various reset vectors to set up | |
| 286 # the world. | |
| 0 | 287 |
| 288 .text | |
| 289 .globl _start | |
| 2 | 290 _start: |
|
70
c5536bad4c24
Merge from eCos master repository on 2000-02-11-15:46:40-GMT
jlarmour
parents:
68
diff
changeset
|
291 # Initialize CPU to a post-reset state, ensuring the ground doesn''t |
|
c5536bad4c24
Merge from eCos master repository on 2000-02-11-15:46:40-GMT
jlarmour
parents:
68
diff
changeset
|
292 # shift under us while we try to set things up. |
|
c5536bad4c24
Merge from eCos master repository on 2000-02-11-15:46:40-GMT
jlarmour
parents:
68
diff
changeset
|
293 hal_cpu_init |
| 0 | 294 |
| 295 # Set up global offset table | |
| 296 lwi r2,_GLOBAL_OFFSET_TABLE_ | |
| 297 | |
| 298 # set up time base register to zero | |
| 299 xor r3,r3,r3 | |
| 2 | 300 mtspr TBL_W,r3 |
| 0 | 301 xor r4,r4,r4 |
| 2 | 302 mtspr TBU_W,r4 |
| 303 | |
| 304 # Call platform specific hardware initialization | |
| 305 # This may include memory controller initialization. It is not | |
| 306 # safe to access RAM until after this point. | |
|
16
4f2df4ab82c8
Merge from eCos master repository on 1999-06-18-15:25:04-BST
jlarmour
parents:
14
diff
changeset
|
307 bl hal_hardware_init # this is platform dependent |
|
208
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
149
diff
changeset
|
308 .globl _hal_hardware_init_done |
|
1223
dbcfe4e0dbd2
New platform - TAMS MOAB - and generic changes to support it
gthomas
parents:
1157
diff
changeset
|
309 _hal_hardware_init_done: |
|
208
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
149
diff
changeset
|
310 |
|
2883
842a82a508f3
Add Book E architecture support. See the ChangeLog for full details.
nickg
parents:
2729
diff
changeset
|
311 hal_vectors_init |
|
842a82a508f3
Add Book E architecture support. See the ChangeLog for full details.
nickg
parents:
2729
diff
changeset
|
312 |
| 0 | 313 # set up stack |
| 314 lwi sp,__interrupt_stack | |
| 2 | 315 mtspr SPRG0,sp # save in sprg0 for later use |
| 0 | 316 |
|
70
c5536bad4c24
Merge from eCos master repository on 2000-02-11-15:46:40-GMT
jlarmour
parents:
68
diff
changeset
|
317 # Set up exception handlers and VSR table, taking care not to |
|
c5536bad4c24
Merge from eCos master repository on 2000-02-11-15:46:40-GMT
jlarmour
parents:
68
diff
changeset
|
318 # step on any ROM monitor''s toes. |
| 473 | 319 hal_mon_init |
|
70
c5536bad4c24
Merge from eCos master repository on 2000-02-11-15:46:40-GMT
jlarmour
parents:
68
diff
changeset
|
320 |
|
c5536bad4c24
Merge from eCos master repository on 2000-02-11-15:46:40-GMT
jlarmour
parents:
68
diff
changeset
|
321 #if defined(CYG_HAL_STARTUP_ROM) |
| 0 | 322 # Copy data from ROM to ram |
| 323 lwi r3,__rom_data_start # r3 = rom start | |
| 324 lwi r4,__ram_data_start # r4 = ram start | |
| 325 lwi r5,__ram_data_end # r5 = ram end | |
| 326 | |
| 327 cmplw r4,r5 # skip if no data | |
| 328 beq 2f | |
| 2438 | 329 sub r5,r5,r4 # compute number of words to copy |
| 330 srwi r5,r5,2 | |
| 331 mtctr r5 | |
| 332 subi r3,r3,4 | |
| 333 subi r4,r4,4 | |
| 334 1: lwzu r0,4(r3) # get word from ROM | |
| 335 stwu r0,4(r4) # store in RAM | |
| 336 bdnz 1b | |
| 0 | 337 2: |
|
14
01ce82f3e11a
Merge from eCos master repository on 1999-06-11-17:05:41-BST
jlarmour
parents:
10
diff
changeset
|
338 #endif |
| 2 | 339 |
| 0 | 340 # clear BSS |
| 341 lwi r3,__bss_start # r3 = start | |
| 2 | 342 lwi r4,__bss_end # r4 = end |
| 0 | 343 li r0,0 # r0 = 0 |
| 344 cmplw r3,r4 # skip if no bss | |
| 345 beq 2f | |
| 2438 | 346 sub r4,r4,r3 # compute number of words to clear |
| 347 srwi r4,r4,2 | |
| 348 mtctr r4 | |
| 349 subi r3,r3,4 | |
| 0 | 350 |
| 2438 | 351 1: stwu r0,4(r3) # store zero & increment pointer |
| 352 bdnz 1b | |
| 0 | 353 2: |
| 354 | |
| 2 | 355 # clear SBSS |
| 356 lwi r3,__sbss_start # r3 = start | |
| 357 lwi r4,__sbss_end # r4 = end | |
| 358 cmplw r3,r4 # skip if no sbss | |
| 359 beq 2f | |
| 2438 | 360 sub r4,r4,r3 # compute number of words to clear |
| 361 srwi r4,r4,2 | |
| 362 mtctr r4 | |
| 363 subi r3,r3,4 | |
| 2 | 364 |
| 2438 | 365 1: stwu r0,4(r3) # store zero & increment pointer |
| 366 bdnz 1b | |
| 2 | 367 2: |
| 368 | |
| 369 # It is now safe to call C functions which may rely on initialized | |
| 370 # data. | |
| 371 | |
| 372 # Set up stack for calls to C code. | |
| 0 | 373 subi sp,sp,12 # make space on stack |
| 374 li r0,0 | |
| 375 stw r0,0(sp) # clear back chain | |
| 376 stw r0,8(sp) # zero return pc | |
|
76
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
72
diff
changeset
|
377 stwu sp,-CYGARC_PPC_STACK_FRAME_SIZE(sp) # create new stack frame |
| 2 | 378 |
|
82
6736c52df507
Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents:
76
diff
changeset
|
379 # Variant HALs may need to do something special before we continue |
|
6736c52df507
Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents:
76
diff
changeset
|
380 bl hal_variant_init |
|
6736c52df507
Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents:
76
diff
changeset
|
381 |
|
101
c37d3a9e1b28
Merge from eCos master repository on 2000-06-16-07:47:03-BST
jlarmour
parents:
82
diff
changeset
|
382 # Platform initialization |
|
c37d3a9e1b28
Merge from eCos master repository on 2000-06-16-07:47:03-BST
jlarmour
parents:
82
diff
changeset
|
383 bl hal_platform_init |
|
c37d3a9e1b28
Merge from eCos master repository on 2000-06-16-07:47:03-BST
jlarmour
parents:
82
diff
changeset
|
384 |
|
82
6736c52df507
Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents:
76
diff
changeset
|
385 # MMU and cache are controlled by the same option since caching |
|
1333
0e2485da1dbc
Fix problem with [re]enable of FPU during interrupts
gthomas
parents:
1223
diff
changeset
|
386 # on the PPC [typically] does not make sense without the MMU to mark |
|
0e2485da1dbc
Fix problem with [re]enable of FPU during interrupts
gthomas
parents:
1223
diff
changeset
|
387 # regions which should not be cached. |
|
82
6736c52df507
Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents:
76
diff
changeset
|
388 #ifdef CYGHWR_HAL_POWERPC_ENABLE_MMU |
| 2 | 389 # Initialize MMU. |
| 390 bl hal_MMU_init | |
| 391 | |
|
1333
0e2485da1dbc
Fix problem with [re]enable of FPU during interrupts
gthomas
parents:
1223
diff
changeset
|
392 # Enable MMU (if desired) so we can safely enable caches. |
|
76
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
72
diff
changeset
|
393 lwi r3,CYG_MSR # interrupts enabled later |
| 2 | 394 sync |
| 395 mtmsr r3 | |
| 396 sync | |
|
14
01ce82f3e11a
Merge from eCos master repository on 1999-06-11-17:05:41-BST
jlarmour
parents:
10
diff
changeset
|
397 |
| 2 | 398 # Enable caches |
| 399 bl hal_enable_caches | |
|
82
6736c52df507
Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents:
76
diff
changeset
|
400 #endif // CYGHWR_HAL_POWERPC_ENABLE_MMU |
| 0 | 401 |
|
149
52c99470ec11
Merge from eCos master repository on 2001-01-19-06:43:03-GMT
jlarmour
parents:
138
diff
changeset
|
402 # set up platform specific interrupt environment |
|
52c99470ec11
Merge from eCos master repository on 2001-01-19-06:43:03-GMT
jlarmour
parents:
138
diff
changeset
|
403 bl hal_IRQ_init |
|
52c99470ec11
Merge from eCos master repository on 2001-01-19-06:43:03-GMT
jlarmour
parents:
138
diff
changeset
|
404 |
| 2 | 405 # call c++ constructors |
| 406 bl cyg_hal_invoke_constructors | |
| 0 | 407 |
| 2 | 408 #ifdef CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS |
| 409 bl initialize_stub | |
| 0 | 410 #endif |
|
101
c37d3a9e1b28
Merge from eCos master repository on 2000-06-16-07:47:03-BST
jlarmour
parents:
82
diff
changeset
|
411 #if defined(CYGDBG_HAL_DEBUG_GDB_CTRLC_SUPPORT) \ |
|
c37d3a9e1b28
Merge from eCos master repository on 2000-06-16-07:47:03-BST
jlarmour
parents:
82
diff
changeset
|
412 || defined(CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT) |
|
c37d3a9e1b28
Merge from eCos master repository on 2000-06-16-07:47:03-BST
jlarmour
parents:
82
diff
changeset
|
413 .extern hal_ctrlc_isr_init |
|
c37d3a9e1b28
Merge from eCos master repository on 2000-06-16-07:47:03-BST
jlarmour
parents:
82
diff
changeset
|
414 bl hal_ctrlc_isr_init |
|
c37d3a9e1b28
Merge from eCos master repository on 2000-06-16-07:47:03-BST
jlarmour
parents:
82
diff
changeset
|
415 #endif |
|
c37d3a9e1b28
Merge from eCos master repository on 2000-06-16-07:47:03-BST
jlarmour
parents:
82
diff
changeset
|
416 |
| 0 | 417 bl cyg_start # call cyg_start |
| 418 9: | |
| 419 b 9b # if we return, loop | |
| 420 | |
| 2 | 421 #--------------------------------------------------------------------------- |
| 0 | 422 # This code handles the common part of all exception handlers. |
| 423 # It saves the machine state onto the stack and then calls | |
| 424 # a "C" routine to do the rest of the work. This work may result | |
| 425 # in thread switches, and changes to the saved state. When we return | |
| 426 # here the saved state is restored and execution is continued. | |
| 427 | |
| 428 .text | |
| 429 | |
|
70
c5536bad4c24
Merge from eCos master repository on 2000-02-11-15:46:40-GMT
jlarmour
parents:
68
diff
changeset
|
430 .globl cyg_hal_default_exception_vsr |
|
c5536bad4c24
Merge from eCos master repository on 2000-02-11-15:46:40-GMT
jlarmour
parents:
68
diff
changeset
|
431 cyg_hal_default_exception_vsr: |
| 0 | 432 |
| 433 # We come here with all register containing their | |
| 434 # pre-exception values except: | |
| 435 # R3 = ls 16 bits of vector address | |
| 436 # R4 = saved CR | |
| 437 # R5 = saved LR | |
| 438 # LR = VSR address | |
| 439 # SPRG1 = old R3 | |
| 440 # SPRG2 = old R4 | |
| 441 # SPRG3 = old R5 | |
| 442 # SRR0 = old PC | |
| 2 | 443 # SRR1 = old MSR and the exception cause (the POW state is lost!) |
| 0 | 444 |
|
76
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
72
diff
changeset
|
445 subi sp,sp,CYGARC_PPC_EXCEPTION_DECREMENT |
| 0 | 446 # leave space for registers and |
| 447 # a safety margin | |
|
136
a9ac27ec7abc
Merge from eCos master repository on 2000-11-17-18:24:25-GMT
jlarmour
parents:
105
diff
changeset
|
448 #ifdef CYGPKG_HAL_POWERPC_PPC40x |
|
a9ac27ec7abc
Merge from eCos master repository on 2000-11-17-18:24:25-GMT
jlarmour
parents:
105
diff
changeset
|
449 // The caches on this processor are always enabled when the MMU is on |
|
a9ac27ec7abc
Merge from eCos master repository on 2000-11-17-18:24:25-GMT
jlarmour
parents:
105
diff
changeset
|
450 // (and disabled when off). Thus we need to be careful about cache |
|
a9ac27ec7abc
Merge from eCos master repository on 2000-11-17-18:24:25-GMT
jlarmour
parents:
105
diff
changeset
|
451 // polution and staleness when changing the MMU state. |
|
a9ac27ec7abc
Merge from eCos master repository on 2000-11-17-18:24:25-GMT
jlarmour
parents:
105
diff
changeset
|
452 // At this point, the MMU is off due to the exception. We need to |
|
a9ac27ec7abc
Merge from eCos master repository on 2000-11-17-18:24:25-GMT
jlarmour
parents:
105
diff
changeset
|
453 // flush the part of the cache which may be touched before the MMU |
|
a9ac27ec7abc
Merge from eCos master repository on 2000-11-17-18:24:25-GMT
jlarmour
parents:
105
diff
changeset
|
454 // is reenabled so that memory will be consistent when that happens. |
|
a9ac27ec7abc
Merge from eCos master repository on 2000-11-17-18:24:25-GMT
jlarmour
parents:
105
diff
changeset
|
455 // Of course, this is complicated by the fact that there are no "free" |
|
a9ac27ec7abc
Merge from eCos master repository on 2000-11-17-18:24:25-GMT
jlarmour
parents:
105
diff
changeset
|
456 // registers at this point in the code. |
|
a9ac27ec7abc
Merge from eCos master repository on 2000-11-17-18:24:25-GMT
jlarmour
parents:
105
diff
changeset
|
457 dcbf 0,sp // Flushes first line |
|
a9ac27ec7abc
Merge from eCos master repository on 2000-11-17-18:24:25-GMT
jlarmour
parents:
105
diff
changeset
|
458 stw r3,0(sp) // This is now safe |
|
a9ac27ec7abc
Merge from eCos master repository on 2000-11-17-18:24:25-GMT
jlarmour
parents:
105
diff
changeset
|
459 li r3,CYGARC_PPCREG_VECTOR // Flush lines which will be changed |
|
a9ac27ec7abc
Merge from eCos master repository on 2000-11-17-18:24:25-GMT
jlarmour
parents:
105
diff
changeset
|
460 dcbf r3,sp |
|
a9ac27ec7abc
Merge from eCos master repository on 2000-11-17-18:24:25-GMT
jlarmour
parents:
105
diff
changeset
|
461 li r3,CYGARC_PPCREG_CR |
|
a9ac27ec7abc
Merge from eCos master repository on 2000-11-17-18:24:25-GMT
jlarmour
parents:
105
diff
changeset
|
462 dcbf r3,sp |
|
a9ac27ec7abc
Merge from eCos master repository on 2000-11-17-18:24:25-GMT
jlarmour
parents:
105
diff
changeset
|
463 li r3,CYGARC_PPCREG_LR |
|
a9ac27ec7abc
Merge from eCos master repository on 2000-11-17-18:24:25-GMT
jlarmour
parents:
105
diff
changeset
|
464 dcbf r3,sp |
|
a9ac27ec7abc
Merge from eCos master repository on 2000-11-17-18:24:25-GMT
jlarmour
parents:
105
diff
changeset
|
465 lwz r3,0(sp) // Restore register |
|
a9ac27ec7abc
Merge from eCos master repository on 2000-11-17-18:24:25-GMT
jlarmour
parents:
105
diff
changeset
|
466 #endif |
| 0 | 467 |
| 468 # First, save away some registers | |
|
76
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
72
diff
changeset
|
469 stw r3,CYGARC_PPCREG_VECTOR(sp) # stash vector |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
72
diff
changeset
|
470 stw r4,CYGARC_PPCREG_CR(sp) # stash CR |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
72
diff
changeset
|
471 stw r5,CYGARC_PPCREG_LR(sp) # stash LR |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
72
diff
changeset
|
472 |
|
2883
842a82a508f3
Add Book E architecture support. See the ChangeLog for full details.
nickg
parents:
2729
diff
changeset
|
473 # Save exception PC and MSR |
|
842a82a508f3
Add Book E architecture support. See the ChangeLog for full details.
nickg
parents:
2729
diff
changeset
|
474 mfsrr0 r3 |
|
842a82a508f3
Add Book E architecture support. See the ChangeLog for full details.
nickg
parents:
2729
diff
changeset
|
475 stw r3,CYGARC_PPCREG_PC(sp) |
|
842a82a508f3
Add Book E architecture support. See the ChangeLog for full details.
nickg
parents:
2729
diff
changeset
|
476 mfsrr1 r3 |
|
842a82a508f3
Add Book E architecture support. See the ChangeLog for full details.
nickg
parents:
2729
diff
changeset
|
477 stw r3,CYGARC_PPCREG_MSR(sp) |
|
842a82a508f3
Add Book E architecture support. See the ChangeLog for full details.
nickg
parents:
2729
diff
changeset
|
478 |
|
842a82a508f3
Add Book E architecture support. See the ChangeLog for full details.
nickg
parents:
2729
diff
changeset
|
479 cyg_hal_default_exception_vsr_common: |
|
842a82a508f3
Add Book E architecture support. See the ChangeLog for full details.
nickg
parents:
2729
diff
changeset
|
480 |
|
76
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
72
diff
changeset
|
481 #ifdef CYGDBG_HAL_POWERPC_FRAME_WALLS |
|
2883
842a82a508f3
Add Book E architecture support. See the ChangeLog for full details.
nickg
parents:
2729
diff
changeset
|
482 # Mark this frame as an Exception frame |
|
76
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
72
diff
changeset
|
483 lwi r3,0xDDDDDDE0 |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
72
diff
changeset
|
484 stw r3,CYGARC_PPCREG_WALL_HEAD(sp) |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
72
diff
changeset
|
485 lwi r3,0xDDDDDDE1 |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
72
diff
changeset
|
486 stw r3,CYGARC_PPCREG_WALL_TAIL(sp) |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
72
diff
changeset
|
487 #endif |
| 2 | 488 |
|
1333
0e2485da1dbc
Fix problem with [re]enable of FPU during interrupts
gthomas
parents:
1223
diff
changeset
|
489 # Enable MMU & interrupt/FPU environment (as configured) |
|
76
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
72
diff
changeset
|
490 lwi r3,CYG_MSR |
| 2 | 491 sync |
| 492 mtmsr r3 | |
| 493 sync | |
| 494 | |
| 495 mfspr r3,SPRG1 # save original R3 | |
|
76
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
72
diff
changeset
|
496 stw r3,CYGARC_PPCREG_REGS+3*4(sp) |
| 2 | 497 mfspr r4,SPRG2 # save original R4 |
|
76
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
72
diff
changeset
|
498 stw r4,CYGARC_PPCREG_REGS+4*4(sp) |
| 2 | 499 mfspr r5,SPRG3 # save original R5 |
|
76
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
72
diff
changeset
|
500 stw r5,CYGARC_PPCREG_REGS+5*4(sp) |
| 0 | 501 |
|
76
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
72
diff
changeset
|
502 stw r0,CYGARC_PPCREG_REGS+0*4(sp) # save R0 |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
72
diff
changeset
|
503 stw r2,CYGARC_PPCREG_REGS+2*4(sp) # save R2 |
| 0 | 504 |
|
76
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
72
diff
changeset
|
505 mr r3,sp # recreate original SP |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
72
diff
changeset
|
506 addi r3,r3,CYGARC_PPC_EXCEPTION_DECREMENT |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
72
diff
changeset
|
507 stw r3,CYGARC_PPCREG_REGS+1*4(sp) # and save it in state |
| 0 | 508 |
| 2 | 509 # Save registers r6..r12/r31 |
| 0 | 510 .set _reg,6 |
| 511 .rept MAX_SAVE_REG+1-6 | |
|
76
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
72
diff
changeset
|
512 stw _reg,(CYGARC_PPCREG_REGS+_reg*4)(sp) |
| 0 | 513 .set _reg,_reg+1 |
| 514 .endr | |
| 515 | |
| 2 | 516 # Save registers used in vsr (r14+r15) |
|
76
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
72
diff
changeset
|
517 stw r14,(CYGARC_PPCREG_REGS+14*4)(sp) |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
72
diff
changeset
|
518 stw r15,(CYGARC_PPCREG_REGS+15*4)(sp) |
| 2 | 519 |
|
76
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
72
diff
changeset
|
520 # get remaining family CPU registers |
| 0 | 521 mfxer r3 |
|
76
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
72
diff
changeset
|
522 mfctr r4 |
| 0 | 523 # and store them |
|
76
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
72
diff
changeset
|
524 stw r3,CYGARC_PPCREG_XER(sp) |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
72
diff
changeset
|
525 stw r4,CYGARC_PPCREG_CTR(sp) |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
72
diff
changeset
|
526 |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
72
diff
changeset
|
527 # Save variant registers |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
72
diff
changeset
|
528 hal_variant_save sp |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
72
diff
changeset
|
529 |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
72
diff
changeset
|
530 # Save FPU registers |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
72
diff
changeset
|
531 hal_fpu_save sp |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
72
diff
changeset
|
532 |
| 0 | 533 # The entire CPU state is now stashed on the stack, |
| 534 # call into C to do something with it. | |
| 535 | |
| 536 mr r3,sp # R3 = register dump | |
| 537 | |
|
76
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
72
diff
changeset
|
538 subi sp,sp,CYGARC_PPC_STACK_FRAME_SIZE # make a null frame |
| 0 | 539 |
| 540 li r0,0 # R0 = 0 | |
| 541 stw r0,0(sp) # backchain = 0 | |
| 542 stw r0,8(sp) # return pc = 0 | |
| 543 | |
|
76
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
72
diff
changeset
|
544 stwu sp,-CYGARC_PPC_STACK_FRAME_SIZE(sp) # create new stack frame |
| 0 | 545 # where C code can save LR |
| 546 | |
| 547 lwi r5,restore_state # get return link | |
| 548 mtlr r5 # to link register | |
| 549 | |
| 2 | 550 .extern cyg_hal_exception_handler |
| 551 b cyg_hal_exception_handler # call C code, r3 = registers | |
| 0 | 552 |
| 553 # When the call returns it will go to restore_state below. | |
| 554 | |
|
2883
842a82a508f3
Add Book E architecture support. See the ChangeLog for full details.
nickg
parents:
2729
diff
changeset
|
555 #if defined(CYGHWR_HAL_POWERPC_BOOK_E) |
|
842a82a508f3
Add Book E architecture support. See the ChangeLog for full details.
nickg
parents:
2729
diff
changeset
|
556 ##-------------------------------------------------------------------------- |
|
842a82a508f3
Add Book E architecture support. See the ChangeLog for full details.
nickg
parents:
2729
diff
changeset
|
557 ## Critical exception handling code. |
|
842a82a508f3
Add Book E architecture support. See the ChangeLog for full details.
nickg
parents:
2729
diff
changeset
|
558 ## |
|
842a82a508f3
Add Book E architecture support. See the ChangeLog for full details.
nickg
parents:
2729
diff
changeset
|
559 ## Book E processors save the old PC and MSR in CSRR0/1 for certain |
|
842a82a508f3
Add Book E architecture support. See the ChangeLog for full details.
nickg
parents:
2729
diff
changeset
|
560 ## exceptions. This VSR saves the values from these registers before |
|
842a82a508f3
Add Book E architecture support. See the ChangeLog for full details.
nickg
parents:
2729
diff
changeset
|
561 ## branching to the common VSR code. |
|
842a82a508f3
Add Book E architecture support. See the ChangeLog for full details.
nickg
parents:
2729
diff
changeset
|
562 |
|
842a82a508f3
Add Book E architecture support. See the ChangeLog for full details.
nickg
parents:
2729
diff
changeset
|
563 .globl cyg_hal_default_critical_exception_vsr |
|
842a82a508f3
Add Book E architecture support. See the ChangeLog for full details.
nickg
parents:
2729
diff
changeset
|
564 cyg_hal_default_critical_exception_vsr: |
|
842a82a508f3
Add Book E architecture support. See the ChangeLog for full details.
nickg
parents:
2729
diff
changeset
|
565 |
|
842a82a508f3
Add Book E architecture support. See the ChangeLog for full details.
nickg
parents:
2729
diff
changeset
|
566 # We come here with all register containing their |
|
842a82a508f3
Add Book E architecture support. See the ChangeLog for full details.
nickg
parents:
2729
diff
changeset
|
567 # pre-exception values except: |
|
842a82a508f3
Add Book E architecture support. See the ChangeLog for full details.
nickg
parents:
2729
diff
changeset
|
568 # R3 = ls 16 bits of vector address |
|
842a82a508f3
Add Book E architecture support. See the ChangeLog for full details.
nickg
parents:
2729
diff
changeset
|
569 # R4 = saved CR |
|
842a82a508f3
Add Book E architecture support. See the ChangeLog for full details.
nickg
parents:
2729
diff
changeset
|
570 # R5 = saved LR |
|
842a82a508f3
Add Book E architecture support. See the ChangeLog for full details.
nickg
parents:
2729
diff
changeset
|
571 # LR = VSR address |
|
842a82a508f3
Add Book E architecture support. See the ChangeLog for full details.
nickg
parents:
2729
diff
changeset
|
572 # SPRG1 = old R3 |
|
842a82a508f3
Add Book E architecture support. See the ChangeLog for full details.
nickg
parents:
2729
diff
changeset
|
573 # SPRG2 = old R4 |
|
842a82a508f3
Add Book E architecture support. See the ChangeLog for full details.
nickg
parents:
2729
diff
changeset
|
574 # SPRG3 = old R5 |
|
842a82a508f3
Add Book E architecture support. See the ChangeLog for full details.
nickg
parents:
2729
diff
changeset
|
575 # CSRR0 = old PC |
|
842a82a508f3
Add Book E architecture support. See the ChangeLog for full details.
nickg
parents:
2729
diff
changeset
|
576 # CSRR1 = old MSR and the exception cause |
| 0 | 577 |
|
2883
842a82a508f3
Add Book E architecture support. See the ChangeLog for full details.
nickg
parents:
2729
diff
changeset
|
578 subi sp,sp,CYGARC_PPC_EXCEPTION_DECREMENT |
|
842a82a508f3
Add Book E architecture support. See the ChangeLog for full details.
nickg
parents:
2729
diff
changeset
|
579 # leave space for registers and |
|
842a82a508f3
Add Book E architecture support. See the ChangeLog for full details.
nickg
parents:
2729
diff
changeset
|
580 # a safety margin |
|
842a82a508f3
Add Book E architecture support. See the ChangeLog for full details.
nickg
parents:
2729
diff
changeset
|
581 |
|
842a82a508f3
Add Book E architecture support. See the ChangeLog for full details.
nickg
parents:
2729
diff
changeset
|
582 # First, save away some registers |
|
842a82a508f3
Add Book E architecture support. See the ChangeLog for full details.
nickg
parents:
2729
diff
changeset
|
583 stw r3,CYGARC_PPCREG_VECTOR(sp) # stash vector |
|
842a82a508f3
Add Book E architecture support. See the ChangeLog for full details.
nickg
parents:
2729
diff
changeset
|
584 stw r4,CYGARC_PPCREG_CR(sp) # stash CR |
|
842a82a508f3
Add Book E architecture support. See the ChangeLog for full details.
nickg
parents:
2729
diff
changeset
|
585 stw r5,CYGARC_PPCREG_LR(sp) # stash LR |
|
842a82a508f3
Add Book E architecture support. See the ChangeLog for full details.
nickg
parents:
2729
diff
changeset
|
586 |
|
842a82a508f3
Add Book E architecture support. See the ChangeLog for full details.
nickg
parents:
2729
diff
changeset
|
587 # Save exception PC and MSR |
|
842a82a508f3
Add Book E architecture support. See the ChangeLog for full details.
nickg
parents:
2729
diff
changeset
|
588 mfspr r3,58 |
|
842a82a508f3
Add Book E architecture support. See the ChangeLog for full details.
nickg
parents:
2729
diff
changeset
|
589 stw r3,CYGARC_PPCREG_PC(sp) |
|
842a82a508f3
Add Book E architecture support. See the ChangeLog for full details.
nickg
parents:
2729
diff
changeset
|
590 mfspr r3,59 |
|
842a82a508f3
Add Book E architecture support. See the ChangeLog for full details.
nickg
parents:
2729
diff
changeset
|
591 stw r3,CYGARC_PPCREG_MSR(sp) |
|
842a82a508f3
Add Book E architecture support. See the ChangeLog for full details.
nickg
parents:
2729
diff
changeset
|
592 |
|
842a82a508f3
Add Book E architecture support. See the ChangeLog for full details.
nickg
parents:
2729
diff
changeset
|
593 b cyg_hal_default_exception_vsr_common |
|
842a82a508f3
Add Book E architecture support. See the ChangeLog for full details.
nickg
parents:
2729
diff
changeset
|
594 |
|
842a82a508f3
Add Book E architecture support. See the ChangeLog for full details.
nickg
parents:
2729
diff
changeset
|
595 #endif |
|
842a82a508f3
Add Book E architecture support. See the ChangeLog for full details.
nickg
parents:
2729
diff
changeset
|
596 |
| 2 | 597 ##-------------------------------------------------------------------------- |
| 598 ## The following macros are defined depending on whether the Interrupt | |
| 599 ## system is using isr tables or chaining, and depending on the interrupt | |
| 600 ## controller in the system. | |
| 601 | |
|
70
c5536bad4c24
Merge from eCos master repository on 2000-02-11-15:46:40-GMT
jlarmour
parents:
68
diff
changeset
|
602 #ifndef CYGPKG_HAL_POWERPC_INTC_DEFINED |
| 2 | 603 |
|
76
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
72
diff
changeset
|
604 ## This is the simple version. No interrupt controller, CYGARC_PPCREG_VECTOR |
| 2 | 605 ## is updated with the decoded interrupt vector. Isr tables/chaining |
| 606 ## use same interrupt decoder. | |
| 607 ## Bit 21 biffers between decrementer (0) and external (1). | |
| 608 | |
| 609 # decode the interrupt | |
|
70
c5536bad4c24
Merge from eCos master repository on 2000-02-11-15:46:40-GMT
jlarmour
parents:
68
diff
changeset
|
610 .macro hal_intc_decode dreg,state |
|
76
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
72
diff
changeset
|
611 lwz \dreg,CYGARC_PPCREG_VECTOR(\state) # retrieve vector number, |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
72
diff
changeset
|
612 rlwinm \dreg,\dreg,22,31,31 # isolate bit 21 and update |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
72
diff
changeset
|
613 stw \dreg,CYGARC_PPCREG_VECTOR(\state) # vector in state frame. |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
72
diff
changeset
|
614 slwi \dreg,\dreg,2 # convert to word offset. |
| 2 | 615 .endm |
| 616 | |
|
72
da3908c9cd10
Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
70
diff
changeset
|
617 #endif // CYGPKG_HAL_POWERPC_INTC_DEFINED |
| 2 | 618 |
| 619 #--------------------------------------------------------------------------- | |
| 0 | 620 # Common interrupt handling code. |
| 621 | |
|
70
c5536bad4c24
Merge from eCos master repository on 2000-02-11-15:46:40-GMT
jlarmour
parents:
68
diff
changeset
|
622 .globl cyg_hal_default_interrupt_vsr |
|
c5536bad4c24
Merge from eCos master repository on 2000-02-11-15:46:40-GMT
jlarmour
parents:
68
diff
changeset
|
623 cyg_hal_default_interrupt_vsr: |
| 0 | 624 |
| 625 # We come here with all register containing their | |
| 626 # pre-exception values except: | |
| 627 # R3 = ls 16 bits of vector address | |
| 628 # R4 = saved CR | |
| 629 # R5 = saved LR | |
| 630 # LR = VSR address | |
| 631 # SPRG1 = old R3 | |
| 632 # SPRG2 = old R4 | |
| 633 # SPRG3 = old R5 | |
| 634 # SRR0 = old PC | |
| 635 # SRR1 = old MSR | |
| 636 | |
| 637 | |
|
76
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
72
diff
changeset
|
638 subi sp,sp,CYGARC_PPC_EXCEPTION_DECREMENT |
| 0 | 639 # leave space for registers and |
| 640 # a safety margin | |
|
136
a9ac27ec7abc
Merge from eCos master repository on 2000-11-17-18:24:25-GMT
jlarmour
parents:
105
diff
changeset
|
641 #ifdef CYGPKG_HAL_POWERPC_PPC40x |
|
a9ac27ec7abc
Merge from eCos master repository on 2000-11-17-18:24:25-GMT
jlarmour
parents:
105
diff
changeset
|
642 // The caches on this processor are always enabled when the MMU is on |
|
a9ac27ec7abc
Merge from eCos master repository on 2000-11-17-18:24:25-GMT
jlarmour
parents:
105
diff
changeset
|
643 // (and disabled when off). Thus we need to be careful about cache |
|
a9ac27ec7abc
Merge from eCos master repository on 2000-11-17-18:24:25-GMT
jlarmour
parents:
105
diff
changeset
|
644 // polution and staleness when changing the MMU state. |
|
a9ac27ec7abc
Merge from eCos master repository on 2000-11-17-18:24:25-GMT
jlarmour
parents:
105
diff
changeset
|
645 // At this point, the MMU is off due to the exception. We need to |
|
a9ac27ec7abc
Merge from eCos master repository on 2000-11-17-18:24:25-GMT
jlarmour
parents:
105
diff
changeset
|
646 // flush the part of the cache which may be touched before the MMU |
|
a9ac27ec7abc
Merge from eCos master repository on 2000-11-17-18:24:25-GMT
jlarmour
parents:
105
diff
changeset
|
647 // is reenabled so that memory will be consistent when that happens. |
|
a9ac27ec7abc
Merge from eCos master repository on 2000-11-17-18:24:25-GMT
jlarmour
parents:
105
diff
changeset
|
648 // Of course, this is complicated by the fact that there are no "free" |
|
a9ac27ec7abc
Merge from eCos master repository on 2000-11-17-18:24:25-GMT
jlarmour
parents:
105
diff
changeset
|
649 // registers at this point in the code. |
|
a9ac27ec7abc
Merge from eCos master repository on 2000-11-17-18:24:25-GMT
jlarmour
parents:
105
diff
changeset
|
650 dcbf 0,sp // Flushes first line |
|
a9ac27ec7abc
Merge from eCos master repository on 2000-11-17-18:24:25-GMT
jlarmour
parents:
105
diff
changeset
|
651 stw r3,0(sp) // This is now safe |
|
a9ac27ec7abc
Merge from eCos master repository on 2000-11-17-18:24:25-GMT
jlarmour
parents:
105
diff
changeset
|
652 li r3,CYGARC_PPCREG_VECTOR // Flush lines which will be changed |
|
a9ac27ec7abc
Merge from eCos master repository on 2000-11-17-18:24:25-GMT
jlarmour
parents:
105
diff
changeset
|
653 dcbf r3,sp |
|
a9ac27ec7abc
Merge from eCos master repository on 2000-11-17-18:24:25-GMT
jlarmour
parents:
105
diff
changeset
|
654 li r3,CYGARC_PPCREG_CR |
|
a9ac27ec7abc
Merge from eCos master repository on 2000-11-17-18:24:25-GMT
jlarmour
parents:
105
diff
changeset
|
655 dcbf r3,sp |
|
a9ac27ec7abc
Merge from eCos master repository on 2000-11-17-18:24:25-GMT
jlarmour
parents:
105
diff
changeset
|
656 li r3,CYGARC_PPCREG_LR |
|
a9ac27ec7abc
Merge from eCos master repository on 2000-11-17-18:24:25-GMT
jlarmour
parents:
105
diff
changeset
|
657 dcbf r3,sp |
|
a9ac27ec7abc
Merge from eCos master repository on 2000-11-17-18:24:25-GMT
jlarmour
parents:
105
diff
changeset
|
658 lwz r3,0(sp) // Restore register |
|
a9ac27ec7abc
Merge from eCos master repository on 2000-11-17-18:24:25-GMT
jlarmour
parents:
105
diff
changeset
|
659 #endif |
|
a9ac27ec7abc
Merge from eCos master repository on 2000-11-17-18:24:25-GMT
jlarmour
parents:
105
diff
changeset
|
660 |
|
76
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
72
diff
changeset
|
661 stw r3,CYGARC_PPCREG_VECTOR(sp) # stash vector |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
72
diff
changeset
|
662 stw r4,CYGARC_PPCREG_CR(sp) # stash CR |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
72
diff
changeset
|
663 stw r5,CYGARC_PPCREG_LR(sp) # stash LR |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
72
diff
changeset
|
664 |
|
2883
842a82a508f3
Add Book E architecture support. See the ChangeLog for full details.
nickg
parents:
2729
diff
changeset
|
665 # Save exception PC and MSR |
|
842a82a508f3
Add Book E architecture support. See the ChangeLog for full details.
nickg
parents:
2729
diff
changeset
|
666 mfsrr0 r3 |
|
842a82a508f3
Add Book E architecture support. See the ChangeLog for full details.
nickg
parents:
2729
diff
changeset
|
667 stw r3,CYGARC_PPCREG_PC(sp) |
|
842a82a508f3
Add Book E architecture support. See the ChangeLog for full details.
nickg
parents:
2729
diff
changeset
|
668 mfsrr1 r3 |
|
842a82a508f3
Add Book E architecture support. See the ChangeLog for full details.
nickg
parents:
2729
diff
changeset
|
669 stw r3,CYGARC_PPCREG_MSR(sp) |
|
842a82a508f3
Add Book E architecture support. See the ChangeLog for full details.
nickg
parents:
2729
diff
changeset
|
670 |
|
842a82a508f3
Add Book E architecture support. See the ChangeLog for full details.
nickg
parents:
2729
diff
changeset
|
671 cyg_hal_default_interrupt_vsr_common: |
|
842a82a508f3
Add Book E architecture support. See the ChangeLog for full details.
nickg
parents:
2729
diff
changeset
|
672 |
|
76
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
72
diff
changeset
|
673 #ifdef CYGDBG_HAL_POWERPC_FRAME_WALLS |
|
2883
842a82a508f3
Add Book E architecture support. See the ChangeLog for full details.
nickg
parents:
2729
diff
changeset
|
674 # Mark this frame as an interrupt frame |
|
76
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
72
diff
changeset
|
675 lwi r3,0xDDDDDD10 |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
72
diff
changeset
|
676 stw r3,CYGARC_PPCREG_WALL_HEAD(sp) |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
72
diff
changeset
|
677 lwi r3,0xDDDDDD11 |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
72
diff
changeset
|
678 stw r3,CYGARC_PPCREG_WALL_TAIL(sp) |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
72
diff
changeset
|
679 #endif |
| 0 | 680 |
|
1333
0e2485da1dbc
Fix problem with [re]enable of FPU during interrupts
gthomas
parents:
1223
diff
changeset
|
681 # Enable MMU & interrupt/FPU environment as configured |
|
76
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
72
diff
changeset
|
682 lwi r3,CYG_MSR |
| 2 | 683 sync |
| 684 mtmsr r3 | |
| 685 sync | |
| 686 | |
| 687 mfspr r3,SPRG1 # save original R3 | |
|
76
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
72
diff
changeset
|
688 stw r3,CYGARC_PPCREG_REGS+3*4(sp) |
| 2 | 689 mfspr r4,SPRG2 # save original R4 |
|
76
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
72
diff
changeset
|
690 stw r4,CYGARC_PPCREG_REGS+4*4(sp) |
| 2 | 691 mfspr r5,SPRG3 # save original R5 |
|
76
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
72
diff
changeset
|
692 stw r5,CYGARC_PPCREG_REGS+5*4(sp) |
| 0 | 693 |
|
76
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
72
diff
changeset
|
694 stw r0,CYGARC_PPCREG_REGS+0*4(sp) # save R0 |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
72
diff
changeset
|
695 stw r2,CYGARC_PPCREG_REGS+2*4(sp) # save R2 |
| 0 | 696 |
|
76
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
72
diff
changeset
|
697 mr r3,sp # recreate original SP |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
72
diff
changeset
|
698 addi r3,r3,CYGARC_PPC_EXCEPTION_DECREMENT |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
72
diff
changeset
|
699 stw r3,CYGARC_PPCREG_REGS+1*4(sp) # and save it in state |
| 0 | 700 |
| 2 | 701 # Save registers r6..r12/r31 |
| 0 | 702 .set _reg,6 |
| 703 .rept MAX_SAVE_REG+1-6 | |
|
76
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
72
diff
changeset
|
704 stw _reg,(CYGARC_PPCREG_REGS+_reg*4)(sp) |
| 0 | 705 .set _reg,_reg+1 |
| 706 .endr | |
| 707 | |
| 2 | 708 # Save registers used in vsr (r14+r15) |
|
76
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
72
diff
changeset
|
709 stw r14,CYGARC_PPCREG_REGS+14*4(sp) |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
72
diff
changeset
|
710 stw r15,CYGARC_PPCREG_REGS+15*4(sp) |
| 2 | 711 |
|
76
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
72
diff
changeset
|
712 # get remaining family CPU registers |
| 0 | 713 mfxer r3 |
|
76
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
72
diff
changeset
|
714 mfctr r4 |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
72
diff
changeset
|
715 |
| 0 | 716 # and store them |
|
76
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
72
diff
changeset
|
717 stw r3,CYGARC_PPCREG_XER(sp) |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
72
diff
changeset
|
718 stw r4,CYGARC_PPCREG_CTR(sp) |
| 0 | 719 |
|
76
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
72
diff
changeset
|
720 # Save variant registers |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
72
diff
changeset
|
721 hal_variant_save sp |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
72
diff
changeset
|
722 |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
72
diff
changeset
|
723 # Save FPU registers |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
72
diff
changeset
|
724 hal_fpu_save sp |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
72
diff
changeset
|
725 |
| 0 | 726 # The entire CPU state is now stashed on the stack, |
| 727 # increment the scheduler lock and call the ISR | |
| 728 # for this vector. | |
| 729 | |
| 730 #ifdef CYGFUN_HAL_COMMON_KERNEL_SUPPORT | |
| 2 | 731 .extern cyg_scheduler_sched_lock |
| 732 lwi r3,cyg_scheduler_sched_lock | |
| 0 | 733 lwz r4,0(r3) |
| 734 addi r4,r4,1 | |
| 735 stw r4,0(r3) | |
| 736 #endif | |
| 737 | |
| 2 | 738 mr r14,sp # r14 = register dump |
| 0 | 739 |
| 740 #ifdef CYGIMP_HAL_COMMON_INTERRUPTS_USE_INTERRUPT_STACK | |
| 741 lwi r3,__interrupt_stack # stack top | |
| 742 lwi r4,__interrupt_stack_base # stack base | |
| 743 sub. r5,sp,r4 # sp - base | |
| 744 blt 1f # if < 0 - not on istack | |
| 745 sub. r5,r3,sp # top - sp | |
| 746 bgt 2f # if > 0 - already on istack | |
| 747 | |
| 748 1: mr sp,r3 # switch to istack | |
| 749 | |
| 2 | 750 2: stwu r14,-4(sp) # save old SP on stack |
| 0 | 751 |
| 752 #endif | |
| 753 | |
|
76
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
72
diff
changeset
|
754 subi sp,sp,CYGARC_PPC_STACK_FRAME_SIZE # make a null frame |
| 0 | 755 |
| 756 li r0,0 # R0 = 0 | |
| 757 stw r0,0(sp) # backchain = 0 | |
| 758 stw r0,8(sp) # return pc = 0 | |
| 759 | |
|
76
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
72
diff
changeset
|
760 stwu sp,-CYGARC_PPC_STACK_FRAME_SIZE(sp) # create new stack frame |
| 0 | 761 # where C code can save LR |
| 762 | |
| 763 #if defined(CYGPKG_KERNEL_INSTRUMENT) && defined(CYGDBG_KERNEL_INSTRUMENT_INTR) | |
| 764 | |
| 765 lwi r3,0x0301 # r3 = type = INTR,RAISE | |
|
76
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
72
diff
changeset
|
766 lwz r4,CYGARC_PPCREG_VECTOR(r14) # arg1 = vector address |
| 0 | 767 srwi r4,r4,8 # arg1 = vector number |
| 768 xor r5,r5,r5 # arg2 = 0 | |
| 769 bl cyg_instrument # call instrument function | |
| 770 | |
| 771 #endif | |
| 772 | |
|
70
c5536bad4c24
Merge from eCos master repository on 2000-02-11-15:46:40-GMT
jlarmour
parents:
68
diff
changeset
|
773 hal_intc_decode r15,r14 # get table index |
| 2 | 774 |
|
101
c37d3a9e1b28
Merge from eCos master repository on 2000-06-16-07:47:03-BST
jlarmour
parents:
82
diff
changeset
|
775 #if defined(CYGDBG_HAL_DEBUG_GDB_CTRLC_SUPPORT) \ |
|
c37d3a9e1b28
Merge from eCos master repository on 2000-06-16-07:47:03-BST
jlarmour
parents:
82
diff
changeset
|
776 || defined(CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT) |
|
c37d3a9e1b28
Merge from eCos master repository on 2000-06-16-07:47:03-BST
jlarmour
parents:
82
diff
changeset
|
777 # If we are supporting Ctrl-C interrupts from GDB, we must squirrel |
|
c37d3a9e1b28
Merge from eCos master repository on 2000-06-16-07:47:03-BST
jlarmour
parents:
82
diff
changeset
|
778 # away a pointer to the save interrupt state here so that we can |
|
c37d3a9e1b28
Merge from eCos master repository on 2000-06-16-07:47:03-BST
jlarmour
parents:
82
diff
changeset
|
779 # plant a breakpoint at some later time. |
|
c37d3a9e1b28
Merge from eCos master repository on 2000-06-16-07:47:03-BST
jlarmour
parents:
82
diff
changeset
|
780 |
|
c37d3a9e1b28
Merge from eCos master repository on 2000-06-16-07:47:03-BST
jlarmour
parents:
82
diff
changeset
|
781 .extern hal_saved_interrupt_state |
|
c37d3a9e1b28
Merge from eCos master repository on 2000-06-16-07:47:03-BST
jlarmour
parents:
82
diff
changeset
|
782 lwi r3,hal_saved_interrupt_state |
|
c37d3a9e1b28
Merge from eCos master repository on 2000-06-16-07:47:03-BST
jlarmour
parents:
82
diff
changeset
|
783 stw r14,0(r3) |
|
c37d3a9e1b28
Merge from eCos master repository on 2000-06-16-07:47:03-BST
jlarmour
parents:
82
diff
changeset
|
784 |
|
c37d3a9e1b28
Merge from eCos master repository on 2000-06-16-07:47:03-BST
jlarmour
parents:
82
diff
changeset
|
785 #endif |
|
c37d3a9e1b28
Merge from eCos master repository on 2000-06-16-07:47:03-BST
jlarmour
parents:
82
diff
changeset
|
786 |
| 2 | 787 #ifdef CYGSEM_HAL_COMMON_INTERRUPTS_ALLOW_NESTING |
| 0 | 788 |
|
68
f74b2666b30d
Merge from eCos master repository on 2000-02-04-07:47:04-GMT
jlarmour
parents:
66
diff
changeset
|
789 #ifdef CYGPKG_HAL_POWERPC_MPC8xx |
| 2 | 790 # The CPM controller allows nested interrupts. However, |
| 791 # it sits on the back of the SIU controller which has no | |
| 792 # HW support for this. In effect, SW masking of lower | |
| 793 # priority IRQs in the SIU would be required for this to work. | |
| 794 #endif | |
| 795 | |
| 796 #endif | |
| 797 | |
|
76
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
72
diff
changeset
|
798 lwz r3,CYGARC_PPCREG_VECTOR(r14) # retrieve decoded vector # |
| 0 | 799 |
| 800 lwi r6,hal_interrupt_handlers # get interrupt handler table | |
| 801 lwzx r6,r6,r15 # load routine pointer | |
| 802 | |
| 803 lwi r4,hal_interrupt_data # get interrupt data table | |
| 804 lwzx r4,r4,r15 # load data pointer | |
| 805 # R4 = data argument | |
| 423 | 806 mr r5,r14 # R5 = saved registers |
| 0 | 807 |
| 808 mtctr r6 # put isr address in ctr | |
| 809 | |
| 810 bctrl # branch to ctr reg and link | |
| 811 | |
| 812 #ifdef CYGIMP_HAL_COMMON_INTERRUPTS_USE_INTERRUPT_STACK | |
| 813 | |
| 814 # If we are returning from the last nested interrupt, move back | |
| 815 # to the thread stack. interrupt_end() must be called on the | |
| 816 # thread stack since it potentially causes a context switch. | |
| 817 # Since we have arranged for the top of stack location to | |
| 818 # contain the sp we need to go back to here, just pop it off | |
| 819 # and put it in SP. | |
| 820 | |
| 821 | |
|
76
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
72
diff
changeset
|
822 lwz sp,CYGARC_PPC_STACK_FRAME_SIZE*2(sp) # sp = *sp |
| 0 | 823 |
|
76
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
72
diff
changeset
|
824 subi sp,sp,CYGARC_PPC_STACK_FRAME_SIZE # make a null frame |
| 0 | 825 |
| 826 li r0,0 # R0 = 0 | |
| 827 stw r0,0(sp) # backchain = 0 | |
| 828 stw r0,8(sp) # return pc = 0 | |
| 829 | |
|
76
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
72
diff
changeset
|
830 stwu sp,-CYGARC_PPC_STACK_FRAME_SIZE(sp) # create new stack frame |
| 0 | 831 # where C code can save LR |
| 832 #endif | |
| 833 | |
|
1157
aacbd943879a
* src/vectors.S (cyg_hal_default_interrupt_vsr): Removed ifdef on
nickg
parents:
473
diff
changeset
|
834 # On return r3 bit 1 will indicate whether a DSR is |
| 0 | 835 # to be posted. Pass this together with a pointer to |
| 836 # the interrupt object we have just used to the | |
| 837 # interrupt tidy up routine. | |
| 838 | |
| 2 | 839 # Note that r14 and r15 are defined to be preserved across |
| 0 | 840 # calls by the calling convention, so they still contain |
| 841 # the register dump and the vector number respectively. | |
| 2 | 842 |
| 0 | 843 lwi r4,hal_interrupt_objects # get interrupt object table |
| 844 lwzx r4,r4,r15 # load object pointer | |
|
76
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
72
diff
changeset
|
845 mr r5,r14 # arg3 = saved register dump |
| 0 | 846 |
| 847 .extern interrupt_end | |
| 848 bl interrupt_end # call into C to finish off | |
| 849 | |
| 850 restore_state: | |
| 851 # All done, restore CPU state and continue | |
| 852 | |
|
82
6736c52df507
Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents:
76
diff
changeset
|
853 # retrieve CPU state pointer |
|
6736c52df507
Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents:
76
diff
changeset
|
854 addi sp,sp,CYGARC_PPC_STACK_FRAME_SIZE*2 |
|
6736c52df507
Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents:
76
diff
changeset
|
855 |
|
6736c52df507
Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents:
76
diff
changeset
|
856 # Restore FPU registers |
|
6736c52df507
Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents:
76
diff
changeset
|
857 hal_fpu_load sp |
|
6736c52df507
Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents:
76
diff
changeset
|
858 |
|
6736c52df507
Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents:
76
diff
changeset
|
859 # Restore variant registers |
|
6736c52df507
Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents:
76
diff
changeset
|
860 hal_variant_load sp |
| 0 | 861 |
| 862 # get sprs we want to restore | |
|
76
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
72
diff
changeset
|
863 # stuff some of them into the CPU |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
72
diff
changeset
|
864 lwz r3,CYGARC_PPCREG_XER(sp) |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
72
diff
changeset
|
865 lwz r4,CYGARC_PPCREG_LR(sp) |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
72
diff
changeset
|
866 lwz r5,CYGARC_PPCREG_CTR(sp) |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
72
diff
changeset
|
867 mtxer r3 |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
72
diff
changeset
|
868 mtlr r4 |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
72
diff
changeset
|
869 mtctr r5 |
| 0 | 870 |
| 2 | 871 # Restore registers used in vsr (r14+r15) |
|
76
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
72
diff
changeset
|
872 lwz r14,CYGARC_PPCREG_REGS+14*4(r1) |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
72
diff
changeset
|
873 lwz r15,CYGARC_PPCREG_REGS+15*4(r1) |
| 2 | 874 |
| 875 # restore registers r6..r12/r31 | |
| 0 | 876 .set _reg,6 |
| 877 .rept MAX_SAVE_REG+1-6 | |
|
76
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
72
diff
changeset
|
878 lwz _reg,(CYGARC_PPCREG_REGS+_reg*4)(sp) |
| 0 | 879 .set _reg,_reg+1 |
| 880 .endr | |
| 881 | |
|
76
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
72
diff
changeset
|
882 hal_cpu_int_disable |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
72
diff
changeset
|
883 |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
72
diff
changeset
|
884 # restore R0 and R2 |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
72
diff
changeset
|
885 lwz r0,CYGARC_PPCREG_REGS+0*4(sp) |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
72
diff
changeset
|
886 lwz r2,CYGARC_PPCREG_REGS+2*4(sp) |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
72
diff
changeset
|
887 |
| 0 | 888 # Here all the registers are loaded except |
|
76
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
72
diff
changeset
|
889 # sp = HAL_SavedRegisters |
| 0 | 890 # r3 = ccr |
| 891 # r4 = srr0 = pc | |
| 892 # r5 = srr1 = msr | |
|
76
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
72
diff
changeset
|
893 # |
| 0 | 894 # We have to disable interrupts while srr0 and |
| 895 # srr1 are loaded, since another interrupt will | |
| 896 # destroy them. | |
| 897 | |
|
76
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
72
diff
changeset
|
898 lwz r3,CYGARC_PPCREG_CR(sp) |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
72
diff
changeset
|
899 lwz r4,CYGARC_PPCREG_PC(sp) |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
72
diff
changeset
|
900 lwz r5,CYGARC_PPCREG_MSR(sp) |
| 0 | 901 mtcr r3 # set ccr |
| 902 mtsrr0 r4 # load old pc | |
| 903 mtsrr1 r5 # load old msr | |
| 904 | |
|
76
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
72
diff
changeset
|
905 #ifdef CYGDBG_HAL_POWERPC_FRAME_WALLS |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
72
diff
changeset
|
906 # Mark this frame as (almost) dead. |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
72
diff
changeset
|
907 lwi r3,0xDDDDDDD0 |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
72
diff
changeset
|
908 stw r3,CYGARC_PPCREG_WALL_HEAD(sp) |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
72
diff
changeset
|
909 lwi r3,0xDDDDDDD1 |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
72
diff
changeset
|
910 stw r3,CYGARC_PPCREG_WALL_TAIL(sp) |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
72
diff
changeset
|
911 #endif |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
72
diff
changeset
|
912 |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
72
diff
changeset
|
913 lwz r3,CYGARC_PPCREG_REGS+3*4(sp) # load r3 value |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
72
diff
changeset
|
914 lwz r4,CYGARC_PPCREG_REGS+4*4(sp) # load r4 value |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
72
diff
changeset
|
915 lwz r5,CYGARC_PPCREG_REGS+5*4(sp) # load r5 value |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
72
diff
changeset
|
916 lwz sp,CYGARC_PPCREG_REGS+1*4(sp) # restore sp |
| 0 | 917 |
| 918 sync # settle things down | |
| 919 isync | |
| 920 rfi # and return | |
| 921 | |
|
2883
842a82a508f3
Add Book E architecture support. See the ChangeLog for full details.
nickg
parents:
2729
diff
changeset
|
922 #if defined(CYGHWR_HAL_POWERPC_BOOK_E) |
|
842a82a508f3
Add Book E architecture support. See the ChangeLog for full details.
nickg
parents:
2729
diff
changeset
|
923 ##--------------------------------------------------------------------------- |
|
842a82a508f3
Add Book E architecture support. See the ChangeLog for full details.
nickg
parents:
2729
diff
changeset
|
924 ## Critical interrupt handling code. |
|
842a82a508f3
Add Book E architecture support. See the ChangeLog for full details.
nickg
parents:
2729
diff
changeset
|
925 ## |
|
842a82a508f3
Add Book E architecture support. See the ChangeLog for full details.
nickg
parents:
2729
diff
changeset
|
926 ## Book E processors save the old PC and MSR in CSRR0/1 for certain |
|
842a82a508f3
Add Book E architecture support. See the ChangeLog for full details.
nickg
parents:
2729
diff
changeset
|
927 ## exceptions. This VSR saves the values from these registers before |
|
842a82a508f3
Add Book E architecture support. See the ChangeLog for full details.
nickg
parents:
2729
diff
changeset
|
928 ## branching to the common VSR code. |
|
842a82a508f3
Add Book E architecture support. See the ChangeLog for full details.
nickg
parents:
2729
diff
changeset
|
929 |
|
842a82a508f3
Add Book E architecture support. See the ChangeLog for full details.
nickg
parents:
2729
diff
changeset
|
930 .globl cyg_hal_default_interrupt_vsr |
|
842a82a508f3
Add Book E architecture support. See the ChangeLog for full details.
nickg
parents:
2729
diff
changeset
|
931 cyg_hal_default_critical_interrupt_vsr: |
|
842a82a508f3
Add Book E architecture support. See the ChangeLog for full details.
nickg
parents:
2729
diff
changeset
|
932 |
|
842a82a508f3
Add Book E architecture support. See the ChangeLog for full details.
nickg
parents:
2729
diff
changeset
|
933 # We come here with all register containing their |
|
842a82a508f3
Add Book E architecture support. See the ChangeLog for full details.
nickg
parents:
2729
diff
changeset
|
934 # pre-exception values except: |
|
842a82a508f3
Add Book E architecture support. See the ChangeLog for full details.
nickg
parents:
2729
diff
changeset
|
935 # R3 = ls 16 bits of vector address |
|
842a82a508f3
Add Book E architecture support. See the ChangeLog for full details.
nickg
parents:
2729
diff
changeset
|
936 # R4 = saved CR |
|
842a82a508f3
Add Book E architecture support. See the ChangeLog for full details.
nickg
parents:
2729
diff
changeset
|
937 # R5 = saved LR |
|
842a82a508f3
Add Book E architecture support. See the ChangeLog for full details.
nickg
parents:
2729
diff
changeset
|
938 # LR = VSR address |
|
842a82a508f3
Add Book E architecture support. See the ChangeLog for full details.
nickg
parents:
2729
diff
changeset
|
939 # SPRG1 = old R3 |
|
842a82a508f3
Add Book E architecture support. See the ChangeLog for full details.
nickg
parents:
2729
diff
changeset
|
940 # SPRG2 = old R4 |
|
842a82a508f3
Add Book E architecture support. See the ChangeLog for full details.
nickg
parents:
2729
diff
changeset
|
941 # SPRG3 = old R5 |
|
842a82a508f3
Add Book E architecture support. See the ChangeLog for full details.
nickg
parents:
2729
diff
changeset
|
942 # CSRR0 = old PC |
|
842a82a508f3
Add Book E architecture support. See the ChangeLog for full details.
nickg
parents:
2729
diff
changeset
|
943 # CSRR1 = old MSR |
|
10
d3fbcdfa1b2f
Merge from eCos master repository on 1999-05-29-00:13:11-BST
jlarmour
parents:
8
diff
changeset
|
944 |
|
d3fbcdfa1b2f
Merge from eCos master repository on 1999-05-29-00:13:11-BST
jlarmour
parents:
8
diff
changeset
|
945 |
|
2883
842a82a508f3
Add Book E architecture support. See the ChangeLog for full details.
nickg
parents:
2729
diff
changeset
|
946 subi sp,sp,CYGARC_PPC_EXCEPTION_DECREMENT |
|
842a82a508f3
Add Book E architecture support. See the ChangeLog for full details.
nickg
parents:
2729
diff
changeset
|
947 # leave space for registers and |
|
842a82a508f3
Add Book E architecture support. See the ChangeLog for full details.
nickg
parents:
2729
diff
changeset
|
948 # a safety margin |
|
842a82a508f3
Add Book E architecture support. See the ChangeLog for full details.
nickg
parents:
2729
diff
changeset
|
949 |
|
842a82a508f3
Add Book E architecture support. See the ChangeLog for full details.
nickg
parents:
2729
diff
changeset
|
950 stw r3,CYGARC_PPCREG_VECTOR(sp) # stash vector |
|
842a82a508f3
Add Book E architecture support. See the ChangeLog for full details.
nickg
parents:
2729
diff
changeset
|
951 stw r4,CYGARC_PPCREG_CR(sp) # stash CR |
|
842a82a508f3
Add Book E architecture support. See the ChangeLog for full details.
nickg
parents:
2729
diff
changeset
|
952 stw r5,CYGARC_PPCREG_LR(sp) # stash LR |
|
842a82a508f3
Add Book E architecture support. See the ChangeLog for full details.
nickg
parents:
2729
diff
changeset
|
953 |
|
842a82a508f3
Add Book E architecture support. See the ChangeLog for full details.
nickg
parents:
2729
diff
changeset
|
954 # Save exception PC and MSR |
|
842a82a508f3
Add Book E architecture support. See the ChangeLog for full details.
nickg
parents:
2729
diff
changeset
|
955 mfspr r3,58 # Get CSSR0 |
|
842a82a508f3
Add Book E architecture support. See the ChangeLog for full details.
nickg
parents:
2729
diff
changeset
|
956 stw r3,CYGARC_PPCREG_PC(sp) |
|
842a82a508f3
Add Book E architecture support. See the ChangeLog for full details.
nickg
parents:
2729
diff
changeset
|
957 mfspr r3,59 # Get CSSR1 |
|
842a82a508f3
Add Book E architecture support. See the ChangeLog for full details.
nickg
parents:
2729
diff
changeset
|
958 stw r3,CYGARC_PPCREG_MSR(sp) |
|
842a82a508f3
Add Book E architecture support. See the ChangeLog for full details.
nickg
parents:
2729
diff
changeset
|
959 |
|
842a82a508f3
Add Book E architecture support. See the ChangeLog for full details.
nickg
parents:
2729
diff
changeset
|
960 b cyg_hal_default_interrupt_vsr_common |
|
842a82a508f3
Add Book E architecture support. See the ChangeLog for full details.
nickg
parents:
2729
diff
changeset
|
961 |
|
842a82a508f3
Add Book E architecture support. See the ChangeLog for full details.
nickg
parents:
2729
diff
changeset
|
962 #endif |
|
842a82a508f3
Add Book E architecture support. See the ChangeLog for full details.
nickg
parents:
2729
diff
changeset
|
963 |
|
10
d3fbcdfa1b2f
Merge from eCos master repository on 1999-05-29-00:13:11-BST
jlarmour
parents:
8
diff
changeset
|
964 ##----------------------------------------------------------------------------- |
|
d3fbcdfa1b2f
Merge from eCos master repository on 1999-05-29-00:13:11-BST
jlarmour
parents:
8
diff
changeset
|
965 ## Execute pending DSRs on the interrupt stack with interrupts enabled. |
|
d3fbcdfa1b2f
Merge from eCos master repository on 1999-05-29-00:13:11-BST
jlarmour
parents:
8
diff
changeset
|
966 ## Note: this can only be called from code running on a thread stack |
|
76
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
72
diff
changeset
|
967 |
|
10
d3fbcdfa1b2f
Merge from eCos master repository on 1999-05-29-00:13:11-BST
jlarmour
parents:
8
diff
changeset
|
968 #ifdef CYGIMP_HAL_COMMON_INTERRUPTS_USE_INTERRUPT_STACK |
|
d3fbcdfa1b2f
Merge from eCos master repository on 1999-05-29-00:13:11-BST
jlarmour
parents:
8
diff
changeset
|
969 .extern cyg_interrupt_call_pending_DSRs |
|
d3fbcdfa1b2f
Merge from eCos master repository on 1999-05-29-00:13:11-BST
jlarmour
parents:
8
diff
changeset
|
970 |
|
d3fbcdfa1b2f
Merge from eCos master repository on 1999-05-29-00:13:11-BST
jlarmour
parents:
8
diff
changeset
|
971 FUNC_START(hal_interrupt_stack_call_pending_DSRs) |
|
76
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
72
diff
changeset
|
972 # Change to interrupt stack, save state and set up stack for |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
72
diff
changeset
|
973 # calls to C code. |
|
10
d3fbcdfa1b2f
Merge from eCos master repository on 1999-05-29-00:13:11-BST
jlarmour
parents:
8
diff
changeset
|
974 mr r3,sp |
|
76
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
72
diff
changeset
|
975 lwi r4,__interrupt_stack |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
72
diff
changeset
|
976 subi r4,r4,24 # make space on stack |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
72
diff
changeset
|
977 mr sp,r4 |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
72
diff
changeset
|
978 stw r3,12(sp) # save old sp |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
72
diff
changeset
|
979 mfmsr r3 |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
72
diff
changeset
|
980 stw r3,16(sp) # save old MSR |
|
10
d3fbcdfa1b2f
Merge from eCos master repository on 1999-05-29-00:13:11-BST
jlarmour
parents:
8
diff
changeset
|
981 mflr r3 |
|
76
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
72
diff
changeset
|
982 stw r3,20(sp) # save old LR |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
72
diff
changeset
|
983 |
|
10
d3fbcdfa1b2f
Merge from eCos master repository on 1999-05-29-00:13:11-BST
jlarmour
parents:
8
diff
changeset
|
984 li r0,0 |
|
d3fbcdfa1b2f
Merge from eCos master repository on 1999-05-29-00:13:11-BST
jlarmour
parents:
8
diff
changeset
|
985 stw r0,0(sp) # clear back chain |
|
d3fbcdfa1b2f
Merge from eCos master repository on 1999-05-29-00:13:11-BST
jlarmour
parents:
8
diff
changeset
|
986 stw r0,8(sp) # zero return pc |
|
d3fbcdfa1b2f
Merge from eCos master repository on 1999-05-29-00:13:11-BST
jlarmour
parents:
8
diff
changeset
|
987 |
|
76
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
72
diff
changeset
|
988 hal_cpu_int_enable |
|
10
d3fbcdfa1b2f
Merge from eCos master repository on 1999-05-29-00:13:11-BST
jlarmour
parents:
8
diff
changeset
|
989 |
|
d3fbcdfa1b2f
Merge from eCos master repository on 1999-05-29-00:13:11-BST
jlarmour
parents:
8
diff
changeset
|
990 # Call into kernel which will execute DSRs |
|
76
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
72
diff
changeset
|
991 stwu sp,-CYGARC_PPC_STACK_FRAME_SIZE(sp) |
|
10
d3fbcdfa1b2f
Merge from eCos master repository on 1999-05-29-00:13:11-BST
jlarmour
parents:
8
diff
changeset
|
992 bl cyg_interrupt_call_pending_DSRs |
|
76
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
72
diff
changeset
|
993 addi sp,sp,CYGARC_PPC_STACK_FRAME_SIZE |
|
10
d3fbcdfa1b2f
Merge from eCos master repository on 1999-05-29-00:13:11-BST
jlarmour
parents:
8
diff
changeset
|
994 |
|
76
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
72
diff
changeset
|
995 lwz r3,20(sp) # restore LR |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
72
diff
changeset
|
996 mtlr r3 |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
72
diff
changeset
|
997 lwz r5,12(sp) # get SP from saved state |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
72
diff
changeset
|
998 lwz r3,16(sp) # restore interrupt setting |
|
2883
842a82a508f3
Add Book E architecture support. See the ChangeLog for full details.
nickg
parents:
2729
diff
changeset
|
999 hal_cpu_int_merge r3,r4 |
|
10
d3fbcdfa1b2f
Merge from eCos master repository on 1999-05-29-00:13:11-BST
jlarmour
parents:
8
diff
changeset
|
1000 |
|
76
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
72
diff
changeset
|
1001 mr sp,r5 # restore stack pointer |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
72
diff
changeset
|
1002 blr # and return to caller |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
72
diff
changeset
|
1003 #endif |
|
10
d3fbcdfa1b2f
Merge from eCos master repository on 1999-05-29-00:13:11-BST
jlarmour
parents:
8
diff
changeset
|
1004 |
| 2 | 1005 #--------------------------------------------------------------------------- |
| 0 | 1006 ## Temporary interrupt stack |
| 1007 | |
| 1008 .section ".bss" | |
| 1009 | |
| 1010 .balign 16 | |
|
8
ece80412419a
Merge from eCos master repository on 1999-05-21-22:05:54-BST
jlarmour
parents:
2
diff
changeset
|
1011 .global cyg_interrupt_stack_base |
|
ece80412419a
Merge from eCos master repository on 1999-05-21-22:05:54-BST
jlarmour
parents:
2
diff
changeset
|
1012 cyg_interrupt_stack_base: |
| 0 | 1013 __interrupt_stack_base: |
| 1014 .rept CYGNUM_HAL_COMMON_INTERRUPTS_STACK_SIZE | |
| 1015 .byte 0 | |
| 1016 .endr | |
| 1017 .balign 16 | |
|
8
ece80412419a
Merge from eCos master repository on 1999-05-21-22:05:54-BST
jlarmour
parents:
2
diff
changeset
|
1018 .global cyg_interrupt_stack |
|
ece80412419a
Merge from eCos master repository on 1999-05-21-22:05:54-BST
jlarmour
parents:
2
diff
changeset
|
1019 cyg_interrupt_stack: |
| 0 | 1020 __interrupt_stack: |
| 1021 | |
| 1022 .long 0,0,0,0,0,0,0,0 | |
| 1023 | |
| 2 | 1024 #--------------------------------------------------------------------------- |
| 0 | 1025 # end of vectors.S |
