ftp://ftp.kernel.org/pub/linux/kernel/v2.6/linux-2.6.6.tar.bz2
[linux-2.6.git] / include / asm-i386 / mach-default / irq_vectors.h
1 /*
2  * This file should contain #defines for all of the interrupt vector
3  * numbers used by this architecture.
4  *
5  * In addition, there are some standard defines:
6  *
7  *      FIRST_EXTERNAL_VECTOR:
8  *              The first free place for external interrupts
9  *
10  *      SYSCALL_VECTOR:
11  *              The IRQ vector a syscall makes the user to kernel transition
12  *              under.
13  *
14  *      TIMER_IRQ:
15  *              The IRQ number the timer interrupt comes in at.
16  *
17  *      NR_IRQS:
18  *              The total number of interrupt vectors (including all the
19  *              architecture specific interrupts) needed.
20  *
21  */                     
22 #ifndef _ASM_IRQ_VECTORS_H
23 #define _ASM_IRQ_VECTORS_H
24
25 /*
26  * IDT vectors usable for external interrupt sources start
27  * at 0x20:
28  */
29 #define FIRST_EXTERNAL_VECTOR   0x20
30
31 #define SYSCALL_VECTOR          0x80
32
33 /*
34  * Vectors 0x20-0x2f are used for ISA interrupts.
35  */
36
37 /*
38  * Special IRQ vectors used by the SMP architecture, 0xf0-0xff
39  *
40  *  some of the following vectors are 'rare', they are merged
41  *  into a single vector (CALL_FUNCTION_VECTOR) to save vector space.
42  *  TLB, reschedule and local APIC vectors are performance-critical.
43  *
44  *  Vectors 0xf0-0xfa are free (reserved for future Linux use).
45  */
46 #define SPURIOUS_APIC_VECTOR    0xff
47 #define ERROR_APIC_VECTOR       0xfe
48 #define INVALIDATE_TLB_VECTOR   0xfd
49 #define RESCHEDULE_VECTOR       0xfc
50 #define CALL_FUNCTION_VECTOR    0xfb
51
52 #define THERMAL_APIC_VECTOR     0xf0
53 /*
54  * Local APIC timer IRQ vector is on a different priority level,
55  * to work around the 'lost local interrupt if more than 2 IRQ
56  * sources per level' errata.
57  */
58 #define LOCAL_TIMER_VECTOR      0xef
59
60 /*
61  * First APIC vector available to drivers: (vectors 0x30-0xee)
62  * we start at 0x31 to spread out vectors evenly between priority
63  * levels. (0x80 is the syscall vector)
64  */
65 #define FIRST_DEVICE_VECTOR     0x31
66 #define FIRST_SYSTEM_VECTOR     0xef
67
68 #define TIMER_IRQ 0
69
70 /*
71  * 16 8259A IRQ's, 208 potential APIC interrupt sources.
72  * Right now the APIC is mostly only used for SMP.
73  * 256 vectors is an architectural limit. (we can have
74  * more than 256 devices theoretically, but they will
75  * have to use shared interrupts)
76  * Since vectors 0x00-0x1f are used/reserved for the CPU,
77  * the usable vector space is 0x20-0xff (224 vectors)
78  */
79
80 /*
81  * The maximum number of vectors supported by i386 processors
82  * is limited to 256. For processors other than i386, NR_VECTORS
83  * should be changed accordingly.
84  */
85 #define NR_VECTORS 256
86
87 #include "irq_vectors_limits.h"
88
89 #define FPU_IRQ                 13
90
91 #define FIRST_VM86_IRQ          3
92 #define LAST_VM86_IRQ           15
93 #define invalid_vm86_irq(irq)   ((irq) < 3 || (irq) > 15)
94
95
96 #endif /* _ASM_IRQ_VECTORS_H */