2 * Copyright (C) 2005 Jakub Jermar
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions
9 * - Redistributions of source code must retain the above copyright
10 * notice, this list of conditions and the following disclaimer.
11 * - Redistributions in binary form must reproduce the above copyright
12 * notice, this list of conditions and the following disclaimer in the
13 * documentation and/or other materials provided with the distribution.
14 * - The name of the author may not be used to endorse or promote products
15 * derived from this software without specific prior written permission.
17 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
18 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
19 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
20 * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
21 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
22 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
23 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
24 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
25 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
26 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
29 /** @addtogroup ia64interrupt
35 #ifndef KERN_ia64_INTERRUPT_H_
36 #define KERN_ia64_INTERRUPT_H_
39 #include <arch/types.h>
40 #include <arch/register.h>
42 /** ia64 has 256 INRs. */
46 * We need to keep this just to compile.
47 * We might eventually move interrupt/ stuff
53 /** External Interrupt vectors. */
54 #define INTERRUPT_TIMER 0
55 #define INTERRUPT_SPURIOUS 15
57 /** General Exception codes. */
58 #define GE_ILLEGALOP 0
61 #define GE_RESREGFLD 3
62 #define GE_DISBLDISTRAN 4
63 #define GE_ILLEGALDEP 8
65 #define EOI 0 /**< The actual value doesn't matter. */
100 uintptr_t ar_bspstore
;
101 uintptr_t ar_bspstore_new
;
115 * The following variables are defined only for break_instruction handler.
124 static inline void istate_set_retaddr(istate_t
*istate
, uintptr_t retaddr
)
126 istate
->cr_iip
= retaddr
;
127 istate
->cr_ipsr
.ri
= 0; /* return to instruction slot #0 */
130 static inline unative_t
istate_get_pc(istate_t
*istate
)
132 return istate
->cr_iip
;
135 static inline int istate_from_uspace(istate_t
*istate
)
137 return (istate
->cr_iip
) < 0xe000000000000000ULL
;
142 extern void general_exception(uint64_t vector
, istate_t
*istate
);
143 extern int break_instruction(uint64_t vector
, istate_t
*istate
);
144 extern void universal_handler(uint64_t vector
, istate_t
*istate
);
145 extern void nop_handler(uint64_t vector
, istate_t
*istate
);
146 extern void external_interrupt(uint64_t vector
, istate_t
*istate
);
147 extern void disabled_fp_register(uint64_t vector
, istate_t
*istate
);