Add AMD threshold APIC vector defines for 32bit Signed-off-by: Andi Kleen --- arch/x86/kernel/apic_32.c | 8 ++++++++ include/asm-x86/apic_32.h | 10 ++++++++++ include/asm-x86/mach-default/irq_vectors.h | 3 ++- 3 files changed, 20 insertions(+), 1 deletion(-) Index: linux/include/asm-x86/apic_32.h =================================================================== --- linux.orig/include/asm-x86/apic_32.h +++ linux/include/asm-x86/apic_32.h @@ -110,6 +110,9 @@ extern void setup_secondary_APIC_clock ( extern int APIC_init_uniprocessor (void); extern void enable_NMI_through_LVT0 (void * dummy); +extern void setup_APIC_extended_lvt(unsigned char lvt_off, unsigned char vector, + unsigned char msg_type, unsigned char mask); + #define ARCH_APICTIMER_STOPS_ON_C3 1 @@ -118,6 +121,13 @@ extern int local_apic_timer_c2_ok; extern int local_apic_timer_disabled; +#define K8_APIC_EXT_LVT_BASE 0x500 +#define K8_APIC_EXT_INT_MSG_FIX 0x0 +#define K8_APIC_EXT_INT_MSG_SMI 0x2 +#define K8_APIC_EXT_INT_MSG_NMI 0x4 +#define K8_APIC_EXT_INT_MSG_EXT 0x7 +#define K8_APIC_EXT_LVT_ENTRY_THRESHOLD 0 + #else /* !CONFIG_X86_LOCAL_APIC */ static inline void lapic_shutdown(void) { } #define local_apic_timer_c2_ok 1 Index: linux/include/asm-x86/mach-default/irq_vectors.h =================================================================== --- linux.orig/include/asm-x86/mach-default/irq_vectors.h +++ linux/include/asm-x86/mach-default/irq_vectors.h @@ -41,13 +41,14 @@ * into a single vector (CALL_FUNCTION_VECTOR) to save vector space. * TLB, reschedule and local APIC vectors are performance-critical. * - * Vectors 0xf0-0xfa are free (reserved for future Linux use). + * Vectors 0xf1-0xf9 are free (reserved for future Linux use). */ #define SPURIOUS_APIC_VECTOR 0xff #define ERROR_APIC_VECTOR 0xfe #define INVALIDATE_TLB_VECTOR 0xfd #define RESCHEDULE_VECTOR 0xfc #define CALL_FUNCTION_VECTOR 0xfb +#define THRESHOLD_APIC_VECTOR 0xfa #define THERMAL_APIC_VECTOR 0xf0 /* Index: linux/arch/x86/kernel/apic_32.c =================================================================== --- linux.orig/arch/x86/kernel/apic_32.c +++ linux/arch/x86/kernel/apic_32.c @@ -603,6 +603,14 @@ int setup_profiling_timer(unsigned int m return -EINVAL; } +void setup_APIC_extended_lvt(unsigned char lvt_off, unsigned char vector, + unsigned char msg_type, unsigned char mask) +{ + unsigned long reg = (lvt_off << 4) + K8_APIC_EXT_LVT_BASE; + unsigned int v = (mask << 16) | (msg_type << 8) | vector; + apic_write(reg, v); +} + /* * Local APIC start and shutdown */