blob: 7f408cb944e3b06304c0866f257586ae66e2e483 [file] [log] [blame]
Graeme Russ9933d602008-12-07 10:29:01 +11001/*
Graeme Russabf0cd32009-02-24 21:13:40 +11002 * (C) Copyright 2009
Graeme Russ9933d602008-12-07 10:29:01 +11003 * Graeme Russ, graeme.russ@gmail.com
4 *
Graeme Russabf0cd32009-02-24 21:13:40 +11005 * (C) Copyright 2002
6 * Daniel Engström, Omicron Ceti AB, daniel@omicron.se
7 *
Graeme Russ9933d602008-12-07 10:29:01 +11008 * See file CREDITS for list of people who contributed to this
9 * project.
10 *
11 * This program is free software; you can redistribute it and/or
12 * modify it under the terms of the GNU General Public License as
13 * published by the Free Software Foundation; either version 2 of
14 * the License, or (at your option) any later version.
15 *
16 * This program is distributed in the hope that it will be useful,
17 * but WITHOUT ANY WARRANTY; without even the implied warranty of
18 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
19 * GNU General Public License for more details.
20 *
21 * You should have received a copy of the GNU General Public License
22 * along with this program; if not, write to the Free Software
23 * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
24 * MA 02111-1307 USA
25 */
26
27#ifndef __ASM_INTERRUPT_H_
28#define __ASM_INTERRUPT_H_ 1
29
Graeme Russabf0cd32009-02-24 21:13:40 +110030/* cpu/i386/interrupts.c */
31void set_vector(u8 intnum, void *routine);
32
33/* lib_i386/interupts.c */
34void disable_irq(int irq);
35void enable_irq(int irq);
36
37/* Architecture specific functions */
38void mask_irq(int irq);
39void unmask_irq(int irq);
40void specific_eoi(int irq);
41
42extern char exception_stack[];
43
44#define __isr__ void __attribute__ ((regparm(0)))
45
46#define DECLARE_INTERRUPT(x) \
47 asm(".globl irq_"#x"\n" \
48 "irq_"#x":\n" \
49 "pusha \n" \
50 "pushl $"#x"\n" \
51 "pushl $irq_return\n" \
52 "jmp do_irq\n"); \
53 __isr__ irq_##x(void)
54
55#define DECLARE_EXCEPTION(x, f) \
56 asm(".globl exp_"#x"\n" \
57 "exp_"#x":\n" \
58 "pusha \n" \
59 "movl %esp, %ebx\n" \
60 "movl $exception_stack, %eax\n" \
61 "movl %eax, %esp \n" \
62 "pushl %ebx\n" \
63 "movl 32(%esp), %ebx\n" \
64 "xorl %edx, %edx\n" \
65 "movw 36(%esp), %dx\n" \
66 "pushl %edx\n" \
67 "pushl %ebx\n" \
68 "pushl $"#x"\n" \
69 "pushl $exp_return\n" \
70 "jmp "#f"\n"); \
71 __isr__ exp_##x(void)
Graeme Russ9933d602008-12-07 10:29:01 +110072
73#endif