]> git.kernelconcepts.de Git - karo-tx-uboot.git/blob - include/asm-i386/interrupt.h
imported Ka-Ro specific additions to U-Boot 2009.08 for TX28
[karo-tx-uboot.git] / include / asm-i386 / interrupt.h
1 /*
2  * (C) Copyright 2009
3  * Graeme Russ, graeme.russ@gmail.com
4  *
5  * (C) Copyright 2002
6  * Daniel Engström, Omicron Ceti AB, daniel@omicron.se
7  *
8  * 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
30 /* cpu/i386/interrupts.c */
31 void set_vector(u8 intnum, void *routine);
32
33 /* lib_i386/interupts.c */
34 void disable_irq(int irq);
35 void enable_irq(int irq);
36
37 /* Architecture specific functions */
38 void mask_irq(int irq);
39 void unmask_irq(int irq);
40 void specific_eoi(int irq);
41
42 extern 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)
72
73 #endif