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