1 #ifndef _ASM_X86_IRQ_VECTORS_H
2 #define _ASM_X86_IRQ_VECTORS_H
4 #define MCE_VECTOR 0x12
7 # define SYSCALL_VECTOR 0x80
8 # define IA32_SYSCALL_VECTOR 0x80
10 # define IA32_SYSCALL_VECTOR 0x80
13 #define RESCHEDULE_VECTOR 0
14 #define CALL_FUNCTION_VECTOR 1
15 #define CALL_FUNC_SINGLE_VECTOR 2
16 #define SPIN_UNLOCK_VECTOR 3
17 #define REBOOT_VECTOR 4
21 * The maximum number of vectors supported by i386 processors
22 * is limited to 256. For processors other than i386, NR_VECTORS
23 * should be changed accordingly.
25 #define NR_VECTORS 256
27 #define FIRST_VM86_IRQ 3
28 #define LAST_VM86_IRQ 15
31 static inline int invalid_vm86_irq(int irq)
33 return irq < FIRST_VM86_IRQ || irq > LAST_VM86_IRQ;
38 * Size the maximum number of interrupts.
40 * If the irq_desc[] array has a sparse layout, we can size things
41 * generously - it scales up linearly with the maximum number of CPUs,
42 * and the maximum number of IO-APICs, whichever is higher.
44 * In other cases we size more conservatively, to not create too large
48 #define NR_IRQS_LEGACY 16
51 * The flat IRQ space is divided into two regions:
52 * 1. A one-to-one mapping of real physical IRQs. This space is only used
53 * if we have physical device-access privilege. This region is at the
54 * start of the IRQ space so that existing device drivers do not need
55 * to be modified to translate physical IRQ numbers into our IRQ space.
56 * 3. A dynamic mapping of inter-domain and Xen-sourced virtual IRQs. These
57 * are bound using the provided bind/unbind functions.
61 #define CPU_VECTOR_LIMIT ( 8 * NR_CPUS )
62 #define IO_APIC_VECTOR_LIMIT ( 32 * MAX_IO_APICS )
64 #ifdef CONFIG_X86_IO_APIC
65 # if !defined(NR_CPUS) || !defined(MAX_IO_APICS)
67 # elif defined(CONFIG_SPARSE_IRQ)
69 (CPU_VECTOR_LIMIT > IO_APIC_VECTOR_LIMIT ? \
70 (NR_VECTORS + CPU_VECTOR_LIMIT) : \
71 (NR_VECTORS + IO_APIC_VECTOR_LIMIT))
72 # elif NR_CPUS < MAX_IO_APICS
73 # define NR_PIRQS (NR_VECTORS + 4*CPU_VECTOR_LIMIT)
75 # define NR_PIRQS (NR_VECTORS + IO_APIC_VECTOR_LIMIT)
77 #elif defined(CONFIG_XEN_PCIDEV_FRONTEND)
78 # define NR_PIRQS (NR_VECTORS + CPU_VECTOR_LIMIT)
79 #else /* !CONFIG_X86_IO_APIC: */
80 # define NR_PIRQS NR_IRQS_LEGACY
84 #if defined(CONFIG_X86_IO_APIC) && defined(CONFIG_SPARSE_IRQ)
87 # define nr_pirqs NR_PIRQS
91 #define DYNIRQ_BASE (PIRQ_BASE + nr_pirqs)
92 #define NR_DYNIRQS (64 + CONFIG_XEN_NR_GUEST_DEVICES)
94 #define NR_IRQS (NR_PIRQS + NR_DYNIRQS)
96 #endif /* _ASM_X86_IRQ_VECTORS_H */