diff options
author | Pavel Machek <pavel@suse.cz> | 2008-05-28 06:42:57 -0400 |
---|---|---|
committer | Ingo Molnar <mingo@elte.hu> | 2008-06-02 05:55:52 -0400 |
commit | c46e62f73569d7ef42255bd6f31e35925b7f1492 (patch) | |
tree | 388101fe2d786104e63f3438cad2064cce893bbb /arch/x86/kernel | |
parent | ec42418f1973e1f77da1fcca3be59c0acb878a9d (diff) |
i8259: fix final ugliness
Introduce IRQx_VECTOR on 32-bit, so that #ifdef noise is kept
down. There should be no object code change.
[ mingo@elte.hu: merged to x86/irq not x86/i8259 due to x86/irq having
restructured the vector code into asm-x86/irq_vectors.h, which this
patch touches. ]
Signed-off-by: Pavel Machek <pavel@suse.cz>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
Diffstat (limited to 'arch/x86/kernel')
-rw-r--r-- | arch/x86/kernel/i8259.c | 22 |
1 files changed, 8 insertions, 14 deletions
diff --git a/arch/x86/kernel/i8259.c b/arch/x86/kernel/i8259.c index 7a0fda8f01b5..dc92b49d9204 100644 --- a/arch/x86/kernel/i8259.c +++ b/arch/x86/kernel/i8259.c | |||
@@ -297,34 +297,28 @@ void init_8259A(int auto_eoi) | |||
297 | * outb_pic - this has to work on a wide range of PC hardware. | 297 | * outb_pic - this has to work on a wide range of PC hardware. |
298 | */ | 298 | */ |
299 | outb_pic(0x11, PIC_MASTER_CMD); /* ICW1: select 8259A-1 init */ | 299 | outb_pic(0x11, PIC_MASTER_CMD); /* ICW1: select 8259A-1 init */ |
300 | #ifndef CONFIG_X86_64 | 300 | |
301 | outb_pic(0x20 + 0, PIC_MASTER_IMR); /* ICW2: 8259A-1 IR0-7 mapped to 0x20-0x27 */ | 301 | /* ICW2: 8259A-1 IR0-7 mapped to 0x30-0x37 on x86-64, |
302 | outb_pic(1U << PIC_CASCADE_IR, PIC_MASTER_IMR); /* 8259A-1 (the master) has a slave on IR2 */ | 302 | to 0x20-0x27 on i386 */ |
303 | #else /* CONFIG_X86_64 */ | ||
304 | /* ICW2: 8259A-1 IR0-7 mapped to 0x30-0x37 */ | ||
305 | outb_pic(IRQ0_VECTOR, PIC_MASTER_IMR); | 303 | outb_pic(IRQ0_VECTOR, PIC_MASTER_IMR); |
304 | |||
306 | /* 8259A-1 (the master) has a slave on IR2 */ | 305 | /* 8259A-1 (the master) has a slave on IR2 */ |
307 | outb_pic(0x04, PIC_MASTER_IMR); | 306 | outb_pic(1U << PIC_CASCADE_IR, PIC_MASTER_IMR); |
308 | #endif /* CONFIG_X86_64 */ | 307 | |
309 | if (auto_eoi) /* master does Auto EOI */ | 308 | if (auto_eoi) /* master does Auto EOI */ |
310 | outb_pic(MASTER_ICW4_DEFAULT | PIC_ICW4_AEOI, PIC_MASTER_IMR); | 309 | outb_pic(MASTER_ICW4_DEFAULT | PIC_ICW4_AEOI, PIC_MASTER_IMR); |
311 | else /* master expects normal EOI */ | 310 | else /* master expects normal EOI */ |
312 | outb_pic(MASTER_ICW4_DEFAULT, PIC_MASTER_IMR); | 311 | outb_pic(MASTER_ICW4_DEFAULT, PIC_MASTER_IMR); |
313 | 312 | ||
314 | outb_pic(0x11, PIC_SLAVE_CMD); /* ICW1: select 8259A-2 init */ | 313 | outb_pic(0x11, PIC_SLAVE_CMD); /* ICW1: select 8259A-2 init */ |
315 | #ifndef CONFIG_X86_64 | 314 | |
316 | outb_pic(0x20 + 8, PIC_SLAVE_IMR); /* ICW2: 8259A-2 IR0-7 mapped to 0x28-0x2f */ | 315 | /* ICW2: 8259A-2 IR0-7 mapped to IRQ8_VECTOR */ |
317 | outb_pic(PIC_CASCADE_IR, PIC_SLAVE_IMR); /* 8259A-2 is a slave on master's IR2 */ | ||
318 | outb_pic(SLAVE_ICW4_DEFAULT, PIC_SLAVE_IMR); /* (slave's support for AEOI in flat mode is to be investigated) */ | ||
319 | #else /* CONFIG_X86_64 */ | ||
320 | /* ICW2: 8259A-2 IR0-7 mapped to 0x38-0x3f */ | ||
321 | outb_pic(IRQ8_VECTOR, PIC_SLAVE_IMR); | 316 | outb_pic(IRQ8_VECTOR, PIC_SLAVE_IMR); |
322 | /* 8259A-2 is a slave on master's IR2 */ | 317 | /* 8259A-2 is a slave on master's IR2 */ |
323 | outb_pic(PIC_CASCADE_IR, PIC_SLAVE_IMR); | 318 | outb_pic(PIC_CASCADE_IR, PIC_SLAVE_IMR); |
324 | /* (slave's support for AEOI in flat mode is to be investigated) */ | 319 | /* (slave's support for AEOI in flat mode is to be investigated) */ |
325 | outb_pic(SLAVE_ICW4_DEFAULT, PIC_SLAVE_IMR); | 320 | outb_pic(SLAVE_ICW4_DEFAULT, PIC_SLAVE_IMR); |
326 | 321 | ||
327 | #endif /* CONFIG_X86_64 */ | ||
328 | if (auto_eoi) | 322 | if (auto_eoi) |
329 | /* | 323 | /* |
330 | * In AEOI mode we just have to mask the interrupt | 324 | * In AEOI mode we just have to mask the interrupt |