Setting up repository
[linux-libre-firmware.git] / ath9k_htc / sboot / magpie_1_1 / sboot / athos / src / xtos / null-vectors.S
1 // null-vectors.S  -  Stubs for Unused Vectors and Handlers
2 // $Id: //depot/rel/Cottonwood/Xtensa/OS/xtos/null-vectors.S#3 $
3
4 // Copyright (c) 2006-2010 Tensilica Inc.
5 //
6 // Permission is hereby granted, free of charge, to any person obtaining
7 // a copy of this software and associated documentation files (the
8 // "Software"), to deal in the Software without restriction, including
9 // without limitation the rights to use, copy, modify, merge, publish,
10 // distribute, sublicense, and/or sell copies of the Software, and to
11 // permit persons to whom the Software is furnished to do so, subject to
12 // the following conditions:
13 //
14 // The above copyright notice and this permission notice shall be included
15 // in all copies or substantial portions of the Software.
16 //
17 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
18 // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
19 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
20 // IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
21 // CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
22 // TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
23 // SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
24
25
26 // NOTE:  The simulator version of this file is currently not used,
27 // i.e. the SIMULATOR macro is never defined when assembling this file.
28 // The relevant simulator code is left here for illustrative purposes only.
29
30
31 #include <xtensa/coreasm.h>
32 #include "xtos-internal.h"
33 #ifdef SIMULATOR
34 #include <xtensa/simcall.h>
35 #endif
36
37         //  These are just tiny non-functional vectors and handlers for when
38         //  their functionality is not being used.  They just try to signal
39         //  the debugger that an unhandled exception or interrupt occurred,
40         //  and otherwise just spin in a loop.
41         //
42         //  For interrupts levels above DEBUGLEVEL, lowering PS.INTLEVEL
43         //  for break to work is tricky, and not always possible in a
44         //  generic fashion without interfering with normal program execution.
45         //  So for now we don't do it.
46
47
48 #if defined(__SPLIT__user)
49
50 # if XCHAL_HAVE_EXCEPTIONS
51         .begin  literal_prefix  .UserExceptionVector
52         .section                .UserExceptionVector.text, "ax"
53         .align 4
54         .global _UserExceptionVector
55 _UserExceptionVector:
56 #  if XCHAL_HAVE_DEBUG
57         break   1, 1    // unexpected user-vectored general exception
58 #  endif
59 1:      j       1b      // infinite loop - unexpected user-vectored exception
60         .size   _UserExceptionVector, . - _UserExceptionVector
61         .end    literal_prefix
62 # endif
63
64 #elif defined(__SPLIT__level1int)
65
66         .text
67         .global _xtos_l1int_handler
68 _xtos_l1int_handler:
69         movi    a3, _xtos_unhandled_exception
70         jx      a3
71         .size   _xtos_l1int_handler, . - _xtos_l1int_handler
72
73 #elif defined(__SPLIT__level2)
74
75 # if (XCHAL_NUM_INTLEVELS >= 2) && (XCHAL_DEBUGLEVEL != 2)
76         .begin  literal_prefix  .Level2InterruptVector
77         .section                .Level2InterruptVector.text, "ax"
78         .align 4
79         .global _Level2Vector
80 _Level2Vector:
81 #  if XCHAL_HAVE_DEBUG && (XCHAL_DEBUGLEVEL > 2)
82         break   1, 2    // unexpected high-priority interrupt
83 #  elif defined(SIMULATOR)
84         wsr     a2, EXCSAVE_2
85         movi    a2, SYS_unhandled_highpri_interrupt
86         simcall         // let simulator/debugger report unhandled level-2 interrupt
87 #  endif
88 1:      j       1b      // infinite loop - unexpected level-2 interrupt
89         .size   _Level2Vector, . - _Level2Vector
90         .text
91         .end    literal_prefix
92 # endif /* level 2 */
93
94
95 #elif defined(__SPLIT__level3)
96
97 # if (XCHAL_NUM_INTLEVELS >= 3) && (XCHAL_DEBUGLEVEL != 3)
98         .begin  literal_prefix  .Level3InterruptVector
99         .section                .Level3InterruptVector.text, "ax"
100         .align 4
101         .global _Level3Vector
102 _Level3Vector:
103 #  if XCHAL_HAVE_DEBUG && (XCHAL_DEBUGLEVEL > 3)
104         break   1, 2    // unexpected high-priority interrupt
105 #  elif defined(SIMULATOR)
106         wsr     a2, EXCSAVE_3
107         movi    a2, SYS_unhandled_highpri_interrupt
108         simcall         // let simulator/debugger report unhandled level-3 interrupt
109 #  endif
110 1:      j       1b      // infinite loop - unexpected level-3 interrupt
111         .size   _Level3Vector, . - _Level3Vector
112         .text
113         .end    literal_prefix
114 # endif /* level 3 */
115
116
117 #elif defined(__SPLIT__level4)
118
119 # if (XCHAL_NUM_INTLEVELS >= 4) && (XCHAL_DEBUGLEVEL != 4)
120         .begin  literal_prefix  .Level4InterruptVector
121         .section                .Level4InterruptVector.text, "ax"
122         .align 4
123         .global _Level4Vector
124 _Level4Vector:
125 #  if XCHAL_HAVE_DEBUG && (XCHAL_DEBUGLEVEL > 4)
126         break   1, 2    // unexpected high-priority interrupt
127 #  elif defined(SIMULATOR)
128         wsr     a2, EXCSAVE_4
129         movi    a2, SYS_unhandled_highpri_interrupt
130         simcall         // let simulator/debugger report unhandled level-4 interrupt
131 #  endif
132 1:      j       1b      // infinite loop - unexpected level-4 interrupt
133         .size   _Level4Vector, . - _Level4Vector
134         .text
135         .end    literal_prefix
136 # endif /* level 4 */
137
138
139 #elif defined(__SPLIT__level5)
140
141 # if (XCHAL_NUM_INTLEVELS >= 5) && (XCHAL_DEBUGLEVEL != 5)
142         .begin  literal_prefix  .Level5InterruptVector
143         .section                .Level5InterruptVector.text, "ax"
144         .align 4
145         .global _Level5Vector
146 _Level5Vector:
147 #  if XCHAL_HAVE_DEBUG && (XCHAL_DEBUGLEVEL > 5)
148         break   1, 2    // unexpected high-priority interrupt
149 #  elif defined(SIMULATOR)
150         wsr     a2, EXCSAVE_5
151         movi    a2, SYS_unhandled_highpri_interrupt
152         simcall         // let simulator/debugger report unhandled level-5 interrupt
153 #  endif
154 1:      j       1b      // infinite loop - unexpected level-5 interrupt
155         .size   _Level5Vector, . - _Level5Vector
156         .text
157         .end    literal_prefix
158 # endif /* level 5 */
159
160
161 #elif defined(__SPLIT__level6)
162
163 # if (XCHAL_NUM_INTLEVELS >= 6) && (XCHAL_DEBUGLEVEL != 6)
164         .begin  literal_prefix  .Level6InterruptVector
165         .section                .Level6InterruptVector.text, "ax"
166         .align 4
167         .global _Level6Vector
168 _Level6Vector:
169 #  if XCHAL_HAVE_DEBUG && (XCHAL_DEBUGLEVEL > 6)
170         break   1, 2    // unexpected high-priority interrupt
171 #  elif defined(SIMULATOR)
172         wsr     a2, EXCSAVE_6
173         movi    a2, SYS_unhandled_highpri_interrupt
174         simcall         // let simulator/debugger report unhandled level-6 interrupt
175 #  endif
176 1:      j       1b      // infinite loop - unexpected level-6 interrupt
177         .size   _Level6Vector, . - _Level6Vector
178         .text
179         .end    literal_prefix
180 # endif /* level 6 */
181
182
183 #endif /* split */
184