From: Ian Campbell Date: Wed, 1 Jun 2011 15:43:29 +0000 (+0100) Subject: hvmloader: setup APICs in a common function again. X-Git-Tag: archive/raspbian/4.8.0-1+rpi1~1^2~10253 X-Git-Url: https://dgit.raspbian.org/?a=commitdiff_plain;h=2e65685119c40ab1eebf4d139e6c7d00cf49dcc8;p=xen.git hvmloader: setup APICs in a common function again. Previous refactoring was premature. Signed-off-by: Ian Campbell --- diff --git a/tools/firmware/hvmloader/config.h b/tools/firmware/hvmloader/config.h index d48bef5e2f..44b664229f 100644 --- a/tools/firmware/hvmloader/config.h +++ b/tools/firmware/hvmloader/config.h @@ -26,7 +26,6 @@ struct bios_config { /* ACPI tables */ unsigned int acpi_start; - void (*apic_setup)(void); void (*smp_setup)(void); uint32_t (*bios_high_setup)(void); diff --git a/tools/firmware/hvmloader/hvmloader.c b/tools/firmware/hvmloader/hvmloader.c index d1c4939c16..baa2f3927f 100644 --- a/tools/firmware/hvmloader/hvmloader.c +++ b/tools/firmware/hvmloader/hvmloader.c @@ -25,6 +25,7 @@ #include "config.h" #include "pci_regs.h" #include "option_rom.h" +#include "apic_regs.h" #include #include @@ -332,6 +333,21 @@ static void cmos_write_memory_size(void) cmos_outb(0x35, (uint8_t)( alt_mem >> 8)); } +static void apic_setup(void) +{ + /* Set the IOAPIC ID to the static value used in the MP/ACPI tables. */ + ioapic_write(0x00, IOAPIC_ID); + + /* NMIs are delivered direct to the BSP. */ + lapic_write(APIC_SPIV, APIC_SPIV_APIC_ENABLED | 0xFF); + lapic_write(APIC_LVT0, (APIC_MODE_EXTINT << 8) | APIC_LVT_MASKED); + lapic_write(APIC_LVT1, APIC_MODE_NMI << 8); + + /* 8259A ExtInts are delivered through IOAPIC pin 0 (Virtual Wire Mode). */ + ioapic_write(0x10, APIC_DM_EXTINT); + ioapic_write(0x11, SET_APIC_ID(LAPIC_ID(0))); +} + struct bios_info { const char *key; const struct bios_config *bios; @@ -384,8 +400,7 @@ int main(void) printf("CPU speed is %u MHz\n", get_cpu_mhz()); - if (bios->apic_setup) - bios->apic_setup(); + apic_setup(); pci_setup(); if (bios->smp_setup) diff --git a/tools/firmware/hvmloader/rombios.c b/tools/firmware/hvmloader/rombios.c index a8d755e474..40b3134125 100644 --- a/tools/firmware/hvmloader/rombios.c +++ b/tools/firmware/hvmloader/rombios.c @@ -25,7 +25,6 @@ #include "../rombios/config.h" #include "acpi/acpi2_0.h" -#include "apic_regs.h" #include "pci_regs.h" #include "util.h" #include "hypercall.h" @@ -82,21 +81,6 @@ static void rombios_setup_bios_info(uint32_t bioshigh) bios_info->bios32_entry = bioshigh; } -static void rombios_apic_setup(void) -{ - /* Set the IOAPIC ID to the static value used in the MP/ACPI tables. */ - ioapic_write(0x00, IOAPIC_ID); - - /* NMIs are delivered direct to the BSP. */ - lapic_write(APIC_SPIV, APIC_SPIV_APIC_ENABLED | 0xFF); - lapic_write(APIC_LVT0, (APIC_MODE_EXTINT << 8) | APIC_LVT_MASKED); - lapic_write(APIC_LVT1, APIC_MODE_NMI << 8); - - /* 8259A ExtInts are delivered through IOAPIC pin 0 (Virtual Wire Mode). */ - ioapic_write(0x10, APIC_DM_EXTINT); - ioapic_write(0x11, SET_APIC_ID(LAPIC_ID(0))); -} - /* * find_mp_table_start - searchs through BIOS memory for '___HVMMP' signature * @@ -167,7 +151,6 @@ struct bios_config rombios_config = { .acpi_start = ACPI_PHYSICAL_ADDRESS, - .apic_setup = rombios_apic_setup, .smp_setup = smp_initialise, .bios_high_setup = rombios_highbios_setup, diff --git a/tools/firmware/hvmloader/seabios.c b/tools/firmware/hvmloader/seabios.c index 8603136f27..1bad44f192 100644 --- a/tools/firmware/hvmloader/seabios.c +++ b/tools/firmware/hvmloader/seabios.c @@ -50,7 +50,6 @@ struct bios_config seabios_config = { .bios_info_setup = NULL, - .apic_setup = NULL, .smp_setup = NULL, .vm86_setup = NULL,