0001
0002 #ifndef _ASM_X86_IRQ_VECTORS_H
0003 #define _ASM_X86_IRQ_VECTORS_H
0004
0005 #include <linux/threads.h>
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019
0020
0021
0022
0023
0024
0025
0026
0027
0028
0029
0030 #define NMI_VECTOR 0x02
0031
0032
0033
0034
0035
0036 #define FIRST_EXTERNAL_VECTOR 0x20
0037
0038
0039
0040
0041
0042
0043 #define IRQ_MOVE_CLEANUP_VECTOR FIRST_EXTERNAL_VECTOR
0044
0045 #define IA32_SYSCALL_VECTOR 0x80
0046
0047
0048
0049
0050
0051 #define ISA_IRQ_VECTOR(irq) (((FIRST_EXTERNAL_VECTOR + 16) & ~15) + irq)
0052
0053
0054
0055
0056
0057
0058
0059
0060
0061 #define SPURIOUS_APIC_VECTOR 0xff
0062
0063
0064
0065 #if ((SPURIOUS_APIC_VECTOR & 0x0F) != 0x0F)
0066 # error SPURIOUS_APIC_VECTOR definition error
0067 #endif
0068
0069 #define ERROR_APIC_VECTOR 0xfe
0070 #define RESCHEDULE_VECTOR 0xfd
0071 #define CALL_FUNCTION_VECTOR 0xfc
0072 #define CALL_FUNCTION_SINGLE_VECTOR 0xfb
0073 #define THERMAL_APIC_VECTOR 0xfa
0074 #define THRESHOLD_APIC_VECTOR 0xf9
0075 #define REBOOT_VECTOR 0xf8
0076
0077
0078
0079
0080 #define X86_PLATFORM_IPI_VECTOR 0xf7
0081
0082
0083
0084
0085 #define IRQ_WORK_VECTOR 0xf6
0086
0087
0088 #define DEFERRED_ERROR_VECTOR 0xf4
0089
0090
0091 #define HYPERVISOR_CALLBACK_VECTOR 0xf3
0092
0093
0094 #ifdef CONFIG_HAVE_KVM
0095 #define POSTED_INTR_VECTOR 0xf2
0096 #define POSTED_INTR_WAKEUP_VECTOR 0xf1
0097 #define POSTED_INTR_NESTED_VECTOR 0xf0
0098 #endif
0099
0100 #define MANAGED_IRQ_SHUTDOWN_VECTOR 0xef
0101
0102 #if IS_ENABLED(CONFIG_HYPERV)
0103 #define HYPERV_REENLIGHTENMENT_VECTOR 0xee
0104 #define HYPERV_STIMER0_VECTOR 0xed
0105 #endif
0106
0107 #define LOCAL_TIMER_VECTOR 0xec
0108
0109 #define NR_VECTORS 256
0110
0111 #ifdef CONFIG_X86_LOCAL_APIC
0112 #define FIRST_SYSTEM_VECTOR LOCAL_TIMER_VECTOR
0113 #else
0114 #define FIRST_SYSTEM_VECTOR NR_VECTORS
0115 #endif
0116
0117 #define NR_EXTERNAL_VECTORS (FIRST_SYSTEM_VECTOR - FIRST_EXTERNAL_VECTOR)
0118 #define NR_SYSTEM_VECTORS (NR_VECTORS - FIRST_SYSTEM_VECTOR)
0119
0120
0121
0122
0123
0124
0125
0126
0127
0128
0129
0130
0131 #define NR_IRQS_LEGACY 16
0132
0133 #define CPU_VECTOR_LIMIT (64 * NR_CPUS)
0134 #define IO_APIC_VECTOR_LIMIT (32 * MAX_IO_APICS)
0135
0136 #if defined(CONFIG_X86_IO_APIC) && defined(CONFIG_PCI_MSI)
0137 #define NR_IRQS \
0138 (CPU_VECTOR_LIMIT > IO_APIC_VECTOR_LIMIT ? \
0139 (NR_VECTORS + CPU_VECTOR_LIMIT) : \
0140 (NR_VECTORS + IO_APIC_VECTOR_LIMIT))
0141 #elif defined(CONFIG_X86_IO_APIC)
0142 #define NR_IRQS (NR_VECTORS + IO_APIC_VECTOR_LIMIT)
0143 #elif defined(CONFIG_PCI_MSI)
0144 #define NR_IRQS (NR_VECTORS + CPU_VECTOR_LIMIT)
0145 #else
0146 #define NR_IRQS NR_IRQS_LEGACY
0147 #endif
0148
0149 #endif