Linux kernel & device driver programming

Cross-Referenced Linux and Device Driver Code

[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ]
Version: [ 2.6.11.8 ] [ 2.6.25 ] [ 2.6.25.8 ] [ 2.6.31.13 ] Architecture: [ i386 ]
  1 #ifndef _ASM_X86_HW_IRQ_H
  2 #define _ASM_X86_HW_IRQ_H
  3 
  4 /*
  5  * (C) 1992, 1993 Linus Torvalds, (C) 1997 Ingo Molnar
  6  *
  7  * moved some of the old arch/i386/kernel/irq.h to here. VY
  8  *
  9  * IRQ/IPI changes taken from work by Thomas Radke
 10  * <tomsoft@informatik.tu-chemnitz.de>
 11  *
 12  * hacked by Andi Kleen for x86-64.
 13  * unified by tglx
 14  */
 15 
 16 #include <asm/irq_vectors.h>
 17 
 18 #ifndef __ASSEMBLY__
 19 
 20 #include <linux/percpu.h>
 21 #include <linux/profile.h>
 22 #include <linux/smp.h>
 23 
 24 #include <asm/atomic.h>
 25 #include <asm/irq.h>
 26 #include <asm/sections.h>
 27 
 28 /* Interrupt handlers registered during init_IRQ */
 29 extern void apic_timer_interrupt(void);
 30 extern void generic_interrupt(void);
 31 extern void error_interrupt(void);
 32 extern void perf_pending_interrupt(void);
 33 
 34 extern void spurious_interrupt(void);
 35 extern void thermal_interrupt(void);
 36 extern void reschedule_interrupt(void);
 37 extern void mce_self_interrupt(void);
 38 
 39 extern void invalidate_interrupt(void);
 40 extern void invalidate_interrupt0(void);
 41 extern void invalidate_interrupt1(void);
 42 extern void invalidate_interrupt2(void);
 43 extern void invalidate_interrupt3(void);
 44 extern void invalidate_interrupt4(void);
 45 extern void invalidate_interrupt5(void);
 46 extern void invalidate_interrupt6(void);
 47 extern void invalidate_interrupt7(void);
 48 
 49 extern void irq_move_cleanup_interrupt(void);
 50 extern void reboot_interrupt(void);
 51 extern void threshold_interrupt(void);
 52 
 53 extern void call_function_interrupt(void);
 54 extern void call_function_single_interrupt(void);
 55 
 56 /* PIC specific functions */
 57 extern void disable_8259A_irq(unsigned int irq);
 58 extern void enable_8259A_irq(unsigned int irq);
 59 extern int i8259A_irq_pending(unsigned int irq);
 60 extern void make_8259A_irq(unsigned int irq);
 61 extern void init_8259A(int aeoi);
 62 
 63 /* IOAPIC */
 64 #define IO_APIC_IRQ(x) (((x) >= NR_IRQS_LEGACY) || ((1<<(x)) & io_apic_irqs))
 65 extern unsigned long io_apic_irqs;
 66 
 67 extern void init_VISWS_APIC_irqs(void);
 68 extern void setup_IO_APIC(void);
 69 extern void disable_IO_APIC(void);
 70 
 71 struct io_apic_irq_attr {
 72         int ioapic;
 73         int ioapic_pin;
 74         int trigger;
 75         int polarity;
 76 };
 77 
 78 static inline void set_io_apic_irq_attr(struct io_apic_irq_attr *irq_attr,
 79                                         int ioapic, int ioapic_pin,
 80                                         int trigger, int polarity)
 81 {
 82         irq_attr->ioapic     = ioapic;
 83         irq_attr->ioapic_pin = ioapic_pin;
 84         irq_attr->trigger    = trigger;
 85         irq_attr->polarity   = polarity;
 86 }
 87 
 88 extern int IO_APIC_get_PCI_irq_vector(int bus, int devfn, int pin,
 89                                         struct io_apic_irq_attr *irq_attr);
 90 extern void setup_ioapic_dest(void);
 91 
 92 extern void enable_IO_APIC(void);
 93 
 94 /* Statistics */
 95 extern atomic_t irq_err_count;
 96 extern atomic_t irq_mis_count;
 97 
 98 /* EISA */
 99 extern void eisa_set_level_irq(unsigned int irq);
100 
101 /* SMP */
102 extern void smp_apic_timer_interrupt(struct pt_regs *);
103 extern void smp_spurious_interrupt(struct pt_regs *);
104 extern void smp_generic_interrupt(struct pt_regs *);
105 extern void smp_error_interrupt(struct pt_regs *);
106 #ifdef CONFIG_X86_IO_APIC
107 extern asmlinkage void smp_irq_move_cleanup_interrupt(void);
108 #endif
109 #ifdef CONFIG_SMP
110 extern void smp_reschedule_interrupt(struct pt_regs *);
111 extern void smp_call_function_interrupt(struct pt_regs *);
112 extern void smp_call_function_single_interrupt(struct pt_regs *);
113 #ifdef CONFIG_X86_32
114 extern void smp_invalidate_interrupt(struct pt_regs *);
115 #else
116 extern asmlinkage void smp_invalidate_interrupt(struct pt_regs *);
117 #endif
118 #endif
119 
120 extern void (*__initconst interrupt[NR_VECTORS-FIRST_EXTERNAL_VECTOR])(void);
121 
122 typedef int vector_irq_t[NR_VECTORS];
123 DECLARE_PER_CPU(vector_irq_t, vector_irq);
124 
125 #ifdef CONFIG_X86_IO_APIC
126 extern void lock_vector_lock(void);
127 extern void unlock_vector_lock(void);
128 extern void __setup_vector_irq(int cpu);
129 #else
130 static inline void lock_vector_lock(void) {}
131 static inline void unlock_vector_lock(void) {}
132 static inline void __setup_vector_irq(int cpu) {}
133 #endif
134 
135 #endif /* !ASSEMBLY_ */
136 
137 #endif /* _ASM_X86_HW_IRQ_H */
138 
  This page was automatically generated by the LXR engine.