This commit was manufactured by cvs2svn to create branch 'vserver'.
[linux-2.6.git] / include / asm-i386 / mach-xen / 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 #if 0
38 /*
39  * Special IRQ vectors used by the SMP architecture, 0xf0-0xff
40  *
41  *  some of the following vectors are 'rare', they are merged
42  *  into a single vector (CALL_FUNCTION_VECTOR) to save vector space.
43  *  TLB, reschedule and local APIC vectors are performance-critical.
44  *
45  *  Vectors 0xf0-0xfa are free (reserved for future Linux use).
46  */
47 #define SPURIOUS_APIC_VECTOR    0xff
48 #define ERROR_APIC_VECTOR       0xfe
49 #define INVALIDATE_TLB_VECTOR   0xfd
50 #define RESCHEDULE_VECTOR       0xfc
51 #define CALL_FUNCTION_VECTOR    0xfb
52
53 #define THERMAL_APIC_VECTOR     0xf0
54 /*
55  * Local APIC timer IRQ vector is on a different priority level,
56  * to work around the 'lost local interrupt if more than 2 IRQ
57  * sources per level' errata.
58  */
59 #define LOCAL_TIMER_VECTOR      0xef
60 #endif
61
62 #define SPURIOUS_APIC_VECTOR    0xff
63 #define ERROR_APIC_VECTOR       0xfe
64
65 /*
66  * First APIC vector available to drivers: (vectors 0x30-0xee)
67  * we start at 0x31 to spread out vectors evenly between priority
68  * levels. (0x80 is the syscall vector)
69  */
70 #define FIRST_DEVICE_VECTOR     0x31
71 #define FIRST_SYSTEM_VECTOR     0xef
72
73 /*
74  * 16 8259A IRQ's, 208 potential APIC interrupt sources.
75  * Right now the APIC is mostly only used for SMP.
76  * 256 vectors is an architectural limit. (we can have
77  * more than 256 devices theoretically, but they will
78  * have to use shared interrupts)
79  * Since vectors 0x00-0x1f are used/reserved for the CPU,
80  * the usable vector space is 0x20-0xff (224 vectors)
81  */
82
83 #define RESCHEDULE_VECTOR       0
84 #define CALL_FUNCTION_VECTOR    1
85 #define NR_IPIS                 2
86
87 /*
88  * The maximum number of vectors supported by i386 processors
89  * is limited to 256. For processors other than i386, NR_VECTORS
90  * should be changed accordingly.
91  */
92 #define NR_VECTORS 256
93
94 #define FPU_IRQ                 13
95
96 #define FIRST_VM86_IRQ          3
97 #define LAST_VM86_IRQ           15
98 #define invalid_vm86_irq(irq)   ((irq) < 3 || (irq) > 15)
99
100 /*
101  * The flat IRQ space is divided into two regions:
102  *  1. A one-to-one mapping of real physical IRQs. This space is only used
103  *     if we have physical device-access privilege. This region is at the 
104  *     start of the IRQ space so that existing device drivers do not need
105  *     to be modified to translate physical IRQ numbers into our IRQ space.
106  *  3. A dynamic mapping of inter-domain and Xen-sourced virtual IRQs. These
107  *     are bound using the provided bind/unbind functions.
108  */
109
110 #define PIRQ_BASE               0
111 #define NR_PIRQS                256
112
113 #define DYNIRQ_BASE             (PIRQ_BASE + NR_PIRQS)
114 #define NR_DYNIRQS              256
115
116 #define NR_IRQS                 (NR_PIRQS + NR_DYNIRQS)
117 #define NR_IRQ_VECTORS          NR_IRQS
118
119 #define pirq_to_irq(_x)         ((_x) + PIRQ_BASE)
120 #define irq_to_pirq(_x)         ((_x) - PIRQ_BASE)
121
122 #define dynirq_to_irq(_x)       ((_x) + DYNIRQ_BASE)
123 #define irq_to_dynirq(_x)       ((_x) - DYNIRQ_BASE)
124
125 #endif /* _ASM_IRQ_VECTORS_H */