提交 c0eaa453 编写于 作者: C Cyrill Gorcunov 提交者: Ingo Molnar

x86: apic - introduce imcr_ helpers

Impact: cleanup

Distinguish port writting magic into helpers with comments.
Signed-off-by: NCyrill Gorcunov <gorcunov@openvz.org>
LKML-Reference: <20090412165058.535921550@openvz.org>
Signed-off-by: NIngo Molnar <mingo@elte.hu>
上级 edea7148
...@@ -98,6 +98,29 @@ early_param("lapic", parse_lapic); ...@@ -98,6 +98,29 @@ early_param("lapic", parse_lapic);
/* Local APIC was disabled by the BIOS and enabled by the kernel */ /* Local APIC was disabled by the BIOS and enabled by the kernel */
static int enabled_via_apicbase; static int enabled_via_apicbase;
/*
* Handle interrupt mode configuration register (IMCR).
* This register controls whether the interrupt signals
* that reach the BSP come from the master PIC or from the
* local APIC. Before entering Symmetric I/O Mode, either
* the BIOS or the operating system must switch out of
* PIC Mode by changing the IMCR.
*/
static inline imcr_pic_to_apic(void)
{
/* select IMCR register */
outb(0x70, 0x22);
/* NMI and 8259 INTR go through APIC */
outb(0x01, 0x23);
}
static inline imcr_apic_to_pic(void)
{
/* select IMCR register */
outb(0x70, 0x22);
/* NMI and 8259 INTR go directly to BSP */
outb(0x00, 0x23);
}
#endif #endif
#ifdef CONFIG_X86_64 #ifdef CONFIG_X86_64
...@@ -1727,8 +1750,7 @@ void __init connect_bsp_APIC(void) ...@@ -1727,8 +1750,7 @@ void __init connect_bsp_APIC(void)
*/ */
apic_printk(APIC_VERBOSE, "leaving PIC mode, " apic_printk(APIC_VERBOSE, "leaving PIC mode, "
"enabling APIC mode.\n"); "enabling APIC mode.\n");
outb(0x70, 0x22); imcr_pic_to_apic();
outb(0x01, 0x23);
} }
#endif #endif
if (apic->enable_apic_mode) if (apic->enable_apic_mode)
...@@ -1756,8 +1778,7 @@ void disconnect_bsp_APIC(int virt_wire_setup) ...@@ -1756,8 +1778,7 @@ void disconnect_bsp_APIC(int virt_wire_setup)
*/ */
apic_printk(APIC_VERBOSE, "disabling APIC mode, " apic_printk(APIC_VERBOSE, "disabling APIC mode, "
"entering PIC mode.\n"); "entering PIC mode.\n");
outb(0x70, 0x22); imcr_apic_to_pic();
outb(0x00, 0x23);
return; return;
} }
#endif #endif
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册