aboutsummaryrefslogtreecommitdiffstats
path: root/tools/firmware
diff options
context:
space:
mode:
authorIan Campbell <ian.campbell@citrix.com>2011-06-01 16:43:29 +0100
committerIan Campbell <ian.campbell@citrix.com>2011-06-01 16:43:29 +0100
commit2e65685119c40ab1eebf4d139e6c7d00cf49dcc8 (patch)
tree3bbd4e8ad9a9c90e92a23ef7c1f0d04e032f4427 /tools/firmware
parentf769c6e64f1bbda45fbe7965d7adf60afd479a3d (diff)
downloadxen-2e65685119c40ab1eebf4d139e6c7d00cf49dcc8.tar.gz
xen-2e65685119c40ab1eebf4d139e6c7d00cf49dcc8.tar.bz2
xen-2e65685119c40ab1eebf4d139e6c7d00cf49dcc8.zip
hvmloader: setup APICs in a common function again.
Previous refactoring was premature. Signed-off-by: Ian Campbell <ian.campbell@citrix.com>
Diffstat (limited to 'tools/firmware')
-rw-r--r--tools/firmware/hvmloader/config.h1
-rw-r--r--tools/firmware/hvmloader/hvmloader.c19
-rw-r--r--tools/firmware/hvmloader/rombios.c17
-rw-r--r--tools/firmware/hvmloader/seabios.c1
4 files changed, 17 insertions, 21 deletions
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 <xen/version.h>
#include <xen/hvm/params.h>
@@ -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,