vserver 2.0 rc7
[linux-2.6.git] / arch / x86_64 / kernel / i8259.c
index f5d084a..7873d9b 100644 (file)
@@ -12,6 +12,7 @@
 #include <linux/init.h>
 #include <linux/kernel_stat.h>
 #include <linux/sysdev.h>
+#include <linux/bitops.h>
 
 #include <asm/acpi.h>
 #include <asm/atomic.h>
@@ -19,7 +20,6 @@
 #include <asm/io.h>
 #include <asm/irq.h>
 #include <asm/hw_irq.h>
-#include <asm/bitops.h>
 #include <asm/pgtable.h>
 #include <asm/delay.h>
 #include <asm/desc.h>
@@ -130,7 +130,7 @@ void (*interrupt[NR_IRQS])(void) = {
  * moves to arch independent land
  */
 
-spinlock_t i8259A_lock = SPIN_LOCK_UNLOCKED;
+DEFINE_SPINLOCK(i8259A_lock);
 
 static void end_8259A_irq (unsigned int irq)
 {
@@ -148,7 +148,7 @@ static void end_8259A_irq (unsigned int irq)
 
 #define shutdown_8259A_irq     disable_8259A_irq
 
-void mask_and_ack_8259A(unsigned int);
+static void mask_and_ack_8259A(unsigned int);
 
 static unsigned int startup_8259A_irq(unsigned int irq)
 { 
@@ -272,7 +272,7 @@ static inline int i8259A_irq_real(unsigned int irq)
  * first, _then_ send the EOI, and the order of EOI
  * to the two 8259s is important!
  */
-void mask_and_ack_8259A(unsigned int irq)
+static void mask_and_ack_8259A(unsigned int irq)
 {
        unsigned int irqmask = 1 << irq;
        unsigned long flags;
@@ -409,7 +409,7 @@ static int i8259A_resume(struct sys_device *dev)
        return 0;
 }
 
-static int i8259A_suspend(struct sys_device *dev, u32 state)
+static int i8259A_suspend(struct sys_device *dev, pm_message_t state)
 {
        save_ELCR(irq_trigger);
        return 0;
@@ -476,6 +476,8 @@ void error_interrupt(void);
 void reschedule_interrupt(void);
 void call_function_interrupt(void);
 void invalidate_interrupt(void);
+void thermal_interrupt(void);
+void i8254_timer_resume(void);
 
 static void setup_timer(void)
 {
@@ -492,6 +494,11 @@ static int timer_resume(struct sys_device *dev)
        return 0;
 }
 
+void i8254_timer_resume(void)
+{
+       setup_timer();
+}
+
 static struct sysdev_class timer_sysclass = {
        set_kset_name("timer"),
        .resume         = timer_resume,
@@ -550,6 +557,7 @@ void __init init_IRQ(void)
        /* IPI for generic function call */
        set_intr_gate(CALL_FUNCTION_VECTOR, call_function_interrupt);
 #endif 
+       set_intr_gate(THERMAL_APIC_VECTOR, thermal_interrupt);
 
 #ifdef CONFIG_X86_LOCAL_APIC
        /* self generated IPI for local APIC timer */