2008-05-02 21:00:30 +04:00
# ifndef _ASM_HW_IRQ_H
# define _ASM_HW_IRQ_H
/*
* ( C ) 1992 , 1993 Linus Torvalds , ( C ) 1997 Ingo Molnar
*
* moved some of the old arch / i386 / kernel / irq . h to here . VY
*
* IRQ / IPI changes taken from work by Thomas Radke
* < tomsoft @ informatik . tu - chemnitz . de >
*
* hacked by Andi Kleen for x86 - 64.
* unified by tglx
*/
2008-05-02 22:10:09 +04:00
# include <asm/irq_vectors.h>
2008-05-02 21:00:30 +04:00
# ifndef __ASSEMBLY__
# include <linux/percpu.h>
# include <linux/profile.h>
# include <linux/smp.h>
# include <asm/atomic.h>
# include <asm/irq.h>
# include <asm/sections.h>
# define platform_legacy_irq(irq) ((irq) < 16)
/* Interrupt handlers registered during init_IRQ */
extern void apic_timer_interrupt ( void ) ;
extern void error_interrupt ( void ) ;
extern void spurious_interrupt ( void ) ;
extern void thermal_interrupt ( void ) ;
extern void reschedule_interrupt ( void ) ;
extern void invalidate_interrupt ( void ) ;
extern void invalidate_interrupt0 ( void ) ;
extern void invalidate_interrupt1 ( void ) ;
extern void invalidate_interrupt2 ( void ) ;
extern void invalidate_interrupt3 ( void ) ;
extern void invalidate_interrupt4 ( void ) ;
extern void invalidate_interrupt5 ( void ) ;
extern void invalidate_interrupt6 ( void ) ;
extern void invalidate_interrupt7 ( void ) ;
extern void irq_move_cleanup_interrupt ( void ) ;
extern void threshold_interrupt ( void ) ;
extern void call_function_interrupt ( void ) ;
/* PIC specific functions */
extern void disable_8259A_irq ( unsigned int irq ) ;
extern void enable_8259A_irq ( unsigned int irq ) ;
extern int i8259A_irq_pending ( unsigned int irq ) ;
extern void make_8259A_irq ( unsigned int irq ) ;
extern void init_8259A ( int aeoi ) ;
/* IOAPIC */
# define IO_APIC_IRQ(x) (((x) >= 16) || ((1<<(x)) & io_apic_irqs))
extern unsigned long io_apic_irqs ;
extern void init_VISWS_APIC_irqs ( void ) ;
extern void setup_IO_APIC ( void ) ;
extern void disable_IO_APIC ( void ) ;
extern void print_IO_APIC ( void ) ;
extern int IO_APIC_get_PCI_irq_vector ( int bus , int slot , int fn ) ;
extern void setup_ioapic_dest ( void ) ;
2008-05-03 00:02:25 +04:00
# ifdef CONFIG_X86_64
extern void enable_IO_APIC ( void ) ;
# endif
2008-05-02 21:00:30 +04:00
/* IPI functions */
extern void send_IPI_self ( int vector ) ;
extern void send_IPI ( int dest , int vector ) ;
/* Statistics */
extern atomic_t irq_err_count ;
extern atomic_t irq_mis_count ;
2008-05-03 02:30:50 +04:00
/* EISA */
extern void eisa_set_level_irq ( unsigned int irq ) ;
2008-05-02 22:10:09 +04:00
/* Voyager functions */
extern asmlinkage void vic_cpi_interrupt ( void ) ;
extern asmlinkage void vic_sys_interrupt ( void ) ;
extern asmlinkage void vic_cmn_interrupt ( void ) ;
extern asmlinkage void qic_timer_interrupt ( void ) ;
extern asmlinkage void qic_invalidate_interrupt ( void ) ;
extern asmlinkage void qic_reschedule_interrupt ( void ) ;
extern asmlinkage void qic_enable_irq_interrupt ( void ) ;
extern asmlinkage void qic_call_function_interrupt ( void ) ;
2007-10-11 13:20:03 +04:00
# ifdef CONFIG_X86_32
2008-05-03 00:10:39 +04:00
extern void ( * const interrupt [ NR_IRQS ] ) ( void ) ;
2007-10-11 13:20:03 +04:00
# else
2008-05-03 00:10:39 +04:00
typedef int vector_irq_t [ NR_VECTORS ] ;
DECLARE_PER_CPU ( vector_irq_t , vector_irq ) ;
extern spinlock_t vector_lock ;
2007-10-11 13:20:03 +04:00
# endif
2008-05-29 07:34:19 +04:00
extern void setup_vector_irq ( int cpu ) ;
2008-05-02 21:00:30 +04:00
2008-05-03 00:10:39 +04:00
# endif /* !ASSEMBLY_ */
2008-05-02 21:00:30 +04:00
# endif