===== arch/i386/kernel/i8259.c 1.30 vs edited ===== --- 1.30/arch/i386/kernel/i8259.c Thu Apr 22 19:15:40 2004 +++ edited/arch/i386/kernel/i8259.c Mon Jun 28 13:51:16 2004 @@ -238,14 +238,26 @@ } } +static char irq_trigger[2]; static int i8259A_resume(struct sys_device *dev) { init_8259A(0); + outb(irq_trigger[0], 0x4d0); + outb(irq_trigger[1], 0x4d1); + return 0; +} + +static int i8259A_suspend(struct sys_device *dev, u32 state) +{ + /* IRQ 0,1,2,8,13 are marked as reserved */ + irq_trigger[0] = inb(0x4d0) & 0xF8; + irq_trigger[1] = inb(0x4d1) & 0xDE; return 0; } static struct sysdev_class i8259_sysdev_class = { set_kset_name("i8259"), + .suspend = i8259A_suspend, .resume = i8259A_resume, };