No empty .Rs/.Re
[netbsd-mini2440.git] / sys / arch / arm / arm32 / irq_dispatch.S
blob77d92c32edb4eea15423d2a82854a27e1484566c
1 /*      $NetBSD$        */
3 /*
4  * Copyright (c) 2002 Fujitsu Component Limited
5  * Copyright (c) 2002 Genetec Corporation
6  * All rights reserved.
7  *
8  * Redistribution and use in source and binary forms, with or without
9  * modification, are permitted provided that the following conditions
10  * are met:
11  * 1. Redistributions of source code must retain the above copyright
12  *    notice, this list of conditions and the following disclaimer.
13  * 2. Redistributions in binary form must reproduce the above copyright
14  *    notice, this list of conditions and the following disclaimer in the
15  *    documentation and/or other materials provided with the distribution.
16  * 3. Neither the name of The Fujitsu Component Limited nor the name of
17  *    Genetec corporation may not be used to endorse or promote products
18  *    derived from this software without specific prior written permission.
19  *
20  * THIS SOFTWARE IS PROVIDED BY FUJITSU COMPONENT LIMITED AND GENETEC
21  * CORPORATION ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
22  * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
23  * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
24  * DISCLAIMED.  IN NO EVENT SHALL FUJITSU COMPONENT LIMITED OR GENETEC
25  * CORPORATION BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
26  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
27  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
28  * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
29  * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
30  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
31  * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
32  * SUCH DAMAGE.
33  */
36  * Copyright (c) 2002, 2003 Wasabi Systems, Inc.
37  * All rights reserved.
38  *
39  * Written by Jason R. Thorpe for Wasabi Systems, Inc.
40  *
41  * Redistribution and use in source and binary forms, with or without
42  * modification, are permitted provided that the following conditions
43  * are met:
44  * 1. Redistributions of source code must retain the above copyright
45  *    notice, this list of conditions and the following disclaimer.
46  * 2. Redistributions in binary form must reproduce the above copyright
47  *    notice, this list of conditions and the following disclaimer in the
48  *    documentation and/or other materials provided with the distribution.
49  * 3. All advertising materials mentioning features or use of this software
50  *    must display the following acknowledgement:
51  *      This product includes software developed for the NetBSD Project by
52  *      Wasabi Systems, Inc.
53  * 4. The name of Wasabi Systems, Inc. may not be used to endorse
54  *    or promote products derived from this software without specific prior
55  *    written permission.
56  *
57  * THIS SOFTWARE IS PROVIDED BY WASABI SYSTEMS, INC. ``AS IS'' AND
58  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
59  * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
60  * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL WASABI SYSTEMS, INC
61  * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
62  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
63  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
64  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
65  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
66  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
67  * POSSIBILITY OF SUCH DAMAGE.
68  */
70 #include "assym.h"
72 #include <machine/asm.h>
73 #include <machine/cpu.h>
74 #include <machine/frame.h>
76 #include "opt_arm_intr_impl.h"
77 #ifdef ARM_INTR_IMPL
78 #include ARM_INTR_IMPL
79 #else
80 #error ARM_INTR_IMPL not defined
81 #endif
83 #ifndef ARM_IRQ_HANDLER
84 #error ARM_IRQ_HANDLER not defined
85 #endif
88  * irq_entry:
89  *      Main entry point for the IRQ vector.  This is a generic version
90  *      which can be used by different platforms.
91  */
92         .text
93         .align  0
94 .Lcurrent_intr_depth:
95         .word   _C_LABEL(cpu_info_store) + CI_INTR_DEPTH
97 LOCK_CAS_CHECK_LOCALS
99 AST_ALIGNMENT_FAULT_LOCALS
101 ASENTRY_NP(irq_entry)
102         sub     lr, lr, #0x00000004     /* Adjust the lr */
104         PUSHFRAMEINSVC                  /* Push an interrupt frame */
105         ENABLE_ALIGNMENT_FAULTS         /* finishes with curcpu() in r4 */
107         /*
108          * Increment the interrupt nesting depth and call the interrupt
109          * dispatch routine.  We've pushed a frame, so we can safely use
110          * callee-saved regs here.  We use the following registers, which
111          * we expect to presist:
112          *
113          *      r4      address of current cpu_info
114          *      r6      old value of `ci_intr_depth'
115          */
116         mov     r0, sp                  /* arg for dispatcher */
117         ldr     r6, [r4, #CI_INTR_DEPTH]
118         add     r1, r6, #1
119         str     r1, [r4, #CI_INTR_DEPTH]
121         bl      ARM_IRQ_HANDLER
123         /*
124          * Restore the old interrupt depth value (which should be the
125          * same as decrementing it at this point).
126          */
127         str     r6, [r4, #CI_INTR_DEPTH]
129         LOCK_CAS_CHECK
131         DO_AST_AND_RESTORE_ALIGNMENT_FAULTS
132         PULLFRAMEFROMSVCANDEXIT
133         movs    pc, lr                  /* Exit */