diff options
Diffstat (limited to 'include/asm-i386')
| -rw-r--r-- | include/asm-i386/interrupt.h | 48 | ||||
| -rw-r--r-- | include/asm-i386/u-boot-i386.h | 6 | 
2 files changed, 52 insertions, 2 deletions
diff --git a/include/asm-i386/interrupt.h b/include/asm-i386/interrupt.h index 315b4001c..7f408cb94 100644 --- a/include/asm-i386/interrupt.h +++ b/include/asm-i386/interrupt.h @@ -1,7 +1,10 @@  /* - * (C) Copyright 2008 + * (C) Copyright 2009   * Graeme Russ, graeme.russ@gmail.com   * + * (C) Copyright 2002 + * Daniel Engström, Omicron Ceti AB, daniel@omicron.se + *   * See file CREDITS for list of people who contributed to this   * project.   * @@ -24,6 +27,47 @@  #ifndef __ASM_INTERRUPT_H_  #define __ASM_INTERRUPT_H_ 1 -void set_vector(int intnum, void *routine); +/* cpu/i386/interrupts.c */ +void set_vector(u8 intnum, void *routine); + +/* lib_i386/interupts.c */ +void disable_irq(int irq); +void enable_irq(int irq); + +/* Architecture specific functions */ +void mask_irq(int irq); +void unmask_irq(int irq); +void specific_eoi(int irq); + +extern char exception_stack[]; + +#define __isr__ void __attribute__ ((regparm(0))) + +#define DECLARE_INTERRUPT(x) \ +	asm(".globl irq_"#x"\n" \ +		    "irq_"#x":\n" \ +		    "pusha \n" \ +		    "pushl $"#x"\n" \ +		    "pushl $irq_return\n" \ +		    "jmp   do_irq\n"); \ +	__isr__ irq_##x(void) + +#define DECLARE_EXCEPTION(x, f) \ +	asm(".globl exp_"#x"\n" \ +		    "exp_"#x":\n" \ +		    "pusha \n" \ +		    "movl     %esp, %ebx\n" \ +		    "movl     $exception_stack, %eax\n" \ +		    "movl     %eax, %esp \n" \ +		    "pushl    %ebx\n" \ +		    "movl     32(%esp), %ebx\n" \ +		    "xorl     %edx, %edx\n" \ +		    "movw     36(%esp), %dx\n" \ +		    "pushl    %edx\n" \ +		    "pushl    %ebx\n" \ +		    "pushl    $"#x"\n" \ +		    "pushl    $exp_return\n" \ +		    "jmp      "#f"\n"); \ +	__isr__ exp_##x(void)  #endif diff --git a/include/asm-i386/u-boot-i386.h b/include/asm-i386/u-boot-i386.h index 12d10a78a..9a60cacd1 100644 --- a/include/asm-i386/u-boot-i386.h +++ b/include/asm-i386/u-boot-i386.h @@ -45,6 +45,12 @@ extern ulong i386boot_bios_size;    /* size of BIOS emulation code */  int cpu_init(void);  int timer_init(void); +/* cpu/.../interrupts.c */ +int cpu_init_interrupts(void); + +/* cpu/.../exceptions.c */ +int cpu_init_exceptions(void); +  /* board/.../... */  int board_init(void);  int dram_init(void);  |