aboutsummaryrefslogtreecommitdiffstats
path: root/tools
diff options
context:
space:
mode:
authorKeir Fraser <keir.fraser@citrix.com>2009-01-23 14:32:41 +0000
committerKeir Fraser <keir.fraser@citrix.com>2009-01-23 14:32:41 +0000
commit83833d973b14318d04e0740c8557ffb683679fa1 (patch)
tree8b8b3b9ce4b3a6ea914ef73424be2e7993c8f308 /tools
parentb08c16ec2fb2b84deb8dc72359526f7dc92a699e (diff)
downloadxen-83833d973b14318d04e0740c8557ffb683679fa1.tar.gz
xen-83833d973b14318d04e0740c8557ffb683679fa1.tar.bz2
xen-83833d973b14318d04e0740c8557ffb683679fa1.zip
rombios: Indirect through 32-bit jump table from within the 32-bit bios.
This gets rid of shenanigans with relocating the jump table around the place. Also clean up bios_info table while we are updating it. Signed-off-by: Keir Fraser <keir.fraser@citrix.com>
Diffstat (limited to 'tools')
-rw-r--r--tools/firmware/hvmloader/32bitbios_support.c30
-rw-r--r--tools/firmware/hvmloader/acpi/build.c41
-rw-r--r--tools/firmware/hvmloader/acpi/dsdt.asl2
-rw-r--r--tools/firmware/hvmloader/acpi/dsdt.c8
-rw-r--r--tools/firmware/hvmloader/config.h17
-rw-r--r--tools/firmware/hvmloader/hvmloader.c34
-rw-r--r--tools/firmware/hvmloader/util.c21
-rw-r--r--tools/firmware/hvmloader/util.h6
-rw-r--r--tools/firmware/rombios/32bit/32bitbios.c17
-rw-r--r--tools/firmware/rombios/32bit/Makefile11
-rw-r--r--tools/firmware/rombios/32bit/tcgbios/Makefile11
-rw-r--r--tools/firmware/rombios/32bitgateway.c11
-rw-r--r--tools/firmware/rombios/rombios.c28
13 files changed, 92 insertions, 145 deletions
diff --git a/tools/firmware/hvmloader/32bitbios_support.c b/tools/firmware/hvmloader/32bitbios_support.c
index e83c4184c8..fa62ccb3ee 100644
--- a/tools/firmware/hvmloader/32bitbios_support.c
+++ b/tools/firmware/hvmloader/32bitbios_support.c
@@ -32,15 +32,13 @@
#include "../rombios/32bit/32bitbios_flat.h"
-static void relocate_32bitbios(char *elfarray, uint32_t elfarraysize)
+static uint32_t relocate_32bitbios(char *elfarray, uint32_t elfarraysize)
{
Elf32_Ehdr *ehdr = (Elf32_Ehdr *)elfarray;
Elf32_Shdr *shdr = (Elf32_Shdr *)&elfarray[ehdr->e_shoff];
- char *secstrings = &elfarray[shdr[ehdr->e_shstrndx].sh_offset];
- char *jump_table;
uint32_t reloc_off, reloc_size;
char *highbiosarea;
- int i, jump_sec_idx = 0;
+ int i;
/*
* Step 1. General elf cleanup, and compute total relocation size.
@@ -51,13 +49,6 @@ static void relocate_32bitbios(char *elfarray, uint32_t elfarraysize)
/* By default all section data points into elf image data array. */
shdr[i].sh_addr = (Elf32_Addr)&elfarray[shdr[i].sh_offset];
- if ( !strcmp(".biosjumptable", secstrings + shdr[i].sh_name) )
- {
- /* We do not relocate the BIOS jump table to high memory. */
- shdr[i].sh_flags &= ~SHF_ALLOC;
- jump_sec_idx = i;
- }
-
/* Fix up a corner case of address alignment. */
if ( shdr[i].sh_addralign == 0 )
shdr[i].sh_addralign = 1;
@@ -148,21 +139,12 @@ static void relocate_32bitbios(char *elfarray, uint32_t elfarraysize)
}
}
- /* Step 5. Find the ROMBIOS jump-table stub and copy in the real table. */
- for ( jump_table = (char *)ROMBIOS_BEGIN;
- jump_table != (char *)ROMBIOS_END;
- jump_table++ )
- if ( !strncmp(jump_table, "___JMPT", 7) )
- break;
- BUG_ON(jump_table == NULL);
- BUG_ON(jump_sec_idx == 0);
- memcpy(jump_table, (char *)shdr[jump_sec_idx].sh_addr,
- shdr[jump_sec_idx].sh_size);
-
printf("done\n");
+
+ return (uint32_t)highbiosarea;
}
-void highbios_setup(void)
+uint32_t highbios_setup(void)
{
- relocate_32bitbios((char *)highbios_array, sizeof(highbios_array));
+ return relocate_32bitbios((char *)highbios_array, sizeof(highbios_array));
}
diff --git a/tools/firmware/hvmloader/acpi/build.c b/tools/firmware/hvmloader/acpi/build.c
index 7fc006aa4a..82510fc25d 100644
--- a/tools/firmware/hvmloader/acpi/build.c
+++ b/tools/firmware/hvmloader/acpi/build.c
@@ -48,50 +48,11 @@ static void set_checksum(
p[checksum_offset] = -sum;
}
-static int uart_exists(uint16_t uart_base)
-{
- uint16_t ier = uart_base + 1;
- uint8_t a, b, c;
-
- a = inb(ier);
- outb(ier, 0);
- b = inb(ier);
- outb(ier, 0xf);
- c = inb(ier);
- outb(ier, a);
-
- return ((b == 0) && (c == 0xf));
-}
-
-static int hpet_exists(unsigned long hpet_base)
-{
- uint32_t hpet_id = *(uint32_t *)hpet_base;
- return ((hpet_id >> 16) == 0x8086);
-}
-
static uint8_t battery_port_exists(void)
{
return (inb(0x88) == 0x1F);
}
-static int construct_bios_info_table(uint8_t *buf)
-{
- struct bios_info *bios_info = (struct bios_info *)buf;
-
- memset(bios_info, 0, sizeof(*bios_info));
-
- bios_info->com1_present = uart_exists(0x3f8);
- bios_info->com2_present = uart_exists(0x2f8);
-
- bios_info->hpet_present = hpet_exists(ACPI_HPET_ADDRESS);
-
- bios_info->pci_min = pci_mem_start;
- bios_info->pci_len = pci_mem_end - pci_mem_start;
- bios_info->xen_pfiob = 0xdead;
-
- return align16(sizeof(*bios_info));
-}
-
static int construct_madt(struct acpi_20_madt *madt)
{
struct acpi_20_madt_intsrcovr *intsrcovr;
@@ -349,9 +310,7 @@ static void __acpi_build_tables(uint8_t *buf, int *low_sz, int *high_sz)
buf = (uint8_t *)ACPI_PHYSICAL_ADDRESS;
offset = 0;
- offset += construct_bios_info_table(&buf[offset]);
rsdp = (struct acpi_20_rsdp *)&buf[offset];
-
memcpy(rsdp, &Rsdp, sizeof(struct acpi_20_rsdp));
offset += align16(sizeof(struct acpi_20_rsdp));
rsdp->rsdt_address = (unsigned long)rsdt;
diff --git a/tools/firmware/hvmloader/acpi/dsdt.asl b/tools/firmware/hvmloader/acpi/dsdt.asl
index 33164586e0..23c5d8645f 100644
--- a/tools/firmware/hvmloader/acpi/dsdt.asl
+++ b/tools/firmware/hvmloader/acpi/dsdt.asl
@@ -86,7 +86,7 @@ DefinitionBlock ("DSDT.aml", "DSDT", 2, "Xen", "HVM", 0)
Scope (\_SB)
{
- /* ACPI_PHYSICAL_ADDRESS == 0xEA000 */
+ /* BIOS_INFO_PHYSICAL_ADDRESS == 0xEA000 */
OperationRegion(BIOS, SystemMemory, 0xEA000, 16)
Field(BIOS, ByteAcc, NoLock, Preserve) {
UAR1, 1,
diff --git a/tools/firmware/hvmloader/acpi/dsdt.c b/tools/firmware/hvmloader/acpi/dsdt.c
index a8ee27e665..7e9d1eee9f 100644
--- a/tools/firmware/hvmloader/acpi/dsdt.c
+++ b/tools/firmware/hvmloader/acpi/dsdt.c
@@ -1,11 +1,11 @@
/*
*
* Intel ACPI Component Architecture
- * ASL Optimizing Compiler version 20080729 [Dec 25 2008]
+ * ASL Optimizing Compiler version 20081204 [Jan 23 2009]
* Copyright (C) 2000 - 2008 Intel Corporation
* Supports ACPI Specification Revision 3.0a
*
- * Compilation of "dsdt.asl" - Thu Dec 25 17:00:32 2008
+ * Compilation of "dsdt.asl" - Fri Jan 23 14:30:29 2009
*
* C source code output
*
@@ -13,10 +13,10 @@
unsigned char AmlCode[] =
{
0x44,0x53,0x44,0x54,0x5E,0x11,0x00,0x00, /* 00000000 "DSDT^..." */
- 0x02,0xD1,0x58,0x65,0x6E,0x00,0x00,0x00, /* 00000008 "..Xen..." */
+ 0x02,0xEB,0x58,0x65,0x6E,0x00,0x00,0x00, /* 00000008 "..Xen..." */
0x48,0x56,0x4D,0x00,0x00,0x00,0x00,0x00, /* 00000010 "HVM....." */
0x00,0x00,0x00,0x00,0x49,0x4E,0x54,0x4C, /* 00000018 "....INTL" */
- 0x29,0x07,0x08,0x20,0x08,0x50,0x4D,0x42, /* 00000020 ").. .PMB" */
+ 0x04,0x12,0x08,0x20,0x08,0x50,0x4D,0x42, /* 00000020 "... .PMB" */
0x53,0x0B,0x00,0x0C,0x08,0x50,0x4D,0x4C, /* 00000028 "S....PML" */
0x4E,0x0A,0x08,0x08,0x49,0x4F,0x42,0x31, /* 00000030 "N...IOB1" */
0x00,0x08,0x49,0x4F,0x4C,0x31,0x00,0x08, /* 00000038 "..IOL1.." */
diff --git a/tools/firmware/hvmloader/config.h b/tools/firmware/hvmloader/config.h
index 660190be77..3da5526394 100644
--- a/tools/firmware/hvmloader/config.h
+++ b/tools/firmware/hvmloader/config.h
@@ -35,7 +35,8 @@ extern unsigned long pci_mem_start, pci_mem_end;
#define VGABIOS_PHYSICAL_ADDRESS 0x000C0000
#define OPTIONROM_PHYSICAL_ADDRESS 0x000C8000
#define OPTIONROM_PHYSICAL_END 0x000EA000
-#define ACPI_PHYSICAL_ADDRESS 0x000EA000
+#define BIOS_INFO_PHYSICAL_ADDRESS 0x000EA000
+#define ACPI_PHYSICAL_ADDRESS 0x000EA020
#define E820_PHYSICAL_ADDRESS 0x000EA100
#define SMBIOS_PHYSICAL_ADDRESS 0x000EB000
#define SMBIOS_MAXIMUM_SIZE 0x00005000
@@ -48,12 +49,16 @@ extern unsigned long pci_mem_start, pci_mem_end;
/* Xen Platform Device */
#define PFFLAG_ROM_LOCK 1 /* Sets whether ROM memory area is RW or RO */
+/* Located at BIOS_INFO_PHYSICAL_ADDRESS. */
struct bios_info {
- uint8_t com1_present:1;
- uint8_t com2_present:1;
- uint8_t hpet_present:1;
- uint32_t pci_min, pci_len;
- uint16_t xen_pfiob;
+ uint8_t com1_present:1; /* 0[0] - System has COM1? */
+ uint8_t com2_present:1; /* 0[1] - System has COM2? */
+ uint8_t hpet_present:1; /* 0[2] - System has HPET? */
+ uint32_t pci_min, pci_len; /* 4, 8 - PCI I/O hole boundaries */
+ uint32_t bios32_entry; /* 12 - Entry point for 32-bit BIOS */
+ uint16_t xen_pfiob; /* 16 - Xen platform device I/O ports */
};
+#define BIOSINFO_OFF_bios32_entry 12
+#define BIOSINFO_OFF_xen_pfiob 16
#endif /* __HVMLOADER_CONFIG_H__ */
diff --git a/tools/firmware/hvmloader/hvmloader.c b/tools/firmware/hvmloader/hvmloader.c
index cfc225bf7c..28774607b7 100644
--- a/tools/firmware/hvmloader/hvmloader.c
+++ b/tools/firmware/hvmloader/hvmloader.c
@@ -539,25 +539,23 @@ static void cmos_write_memory_size(void)
cmos_outb(0x35, (uint8_t)( alt_mem >> 8));
}
-static uint16_t init_xen_platform_io_base(void)
+static uint16_t xen_platform_io_base(void)
{
- struct bios_info *bios_info = (struct bios_info *)ACPI_PHYSICAL_ADDRESS;
uint32_t devfn, bar_data;
uint16_t vendor_id, device_id;
- bios_info->xen_pfiob = 0;
-
for ( devfn = 0; devfn < 128; devfn++ )
{
vendor_id = pci_readw(devfn, PCI_VENDOR_ID);
device_id = pci_readw(devfn, PCI_DEVICE_ID);
- if ( (vendor_id != 0x5853) || (device_id != 0x0001) )
- continue;
- bar_data = pci_readl(devfn, PCI_BASE_ADDRESS_0);
- bios_info->xen_pfiob = bar_data & PCI_BASE_ADDRESS_IO_MASK;
+ if ( (vendor_id == 0x5853) && (device_id == 0x0001) )
+ {
+ bar_data = pci_readl(devfn, PCI_BASE_ADDRESS_0);
+ return bar_data & PCI_BASE_ADDRESS_IO_MASK;
+ }
}
- return bios_info->xen_pfiob;
+ return 0;
}
/*
@@ -648,8 +646,8 @@ int main(void)
{
int option_rom_sz = 0, vgabios_sz = 0, etherboot_sz = 0;
int rombios_sz, smbios_sz;
- uint32_t etherboot_phys_addr, option_rom_phys_addr;
- uint16_t xen_pfiob;
+ uint32_t etherboot_phys_addr, option_rom_phys_addr, bios32_addr;
+ struct bios_info *bios_info;
printf("HVM Loader\n");
@@ -672,7 +670,7 @@ int main(void)
if ( rombios_sz > 0x10000 )
rombios_sz = 0x10000;
memcpy((void *)ROMBIOS_PHYSICAL_ADDRESS, rombios, rombios_sz);
- highbios_setup();
+ bios32_addr = highbios_setup();
if ( (hvm_info->nr_vcpus > 1) || hvm_info->apic_mode )
create_mp_tables();
@@ -736,10 +734,18 @@ int main(void)
ROMBIOS_PHYSICAL_ADDRESS,
ROMBIOS_PHYSICAL_ADDRESS + rombios_sz - 1);
- xen_pfiob = init_xen_platform_io_base();
-
build_e820_table();
+ bios_info = (struct bios_info *)BIOS_INFO_PHYSICAL_ADDRESS;
+ memset(bios_info, 0, sizeof(*bios_info));
+ bios_info->com1_present = uart_exists(0x3f8);
+ bios_info->com2_present = uart_exists(0x2f8);
+ bios_info->hpet_present = hpet_exists(ACPI_HPET_ADDRESS);
+ bios_info->pci_min = pci_mem_start;
+ bios_info->pci_len = pci_mem_end - pci_mem_start;
+ bios_info->bios32_entry = bios32_addr;
+ bios_info->xen_pfiob = xen_platform_io_base();
+
printf("Invoking ROMBIOS ...\n");
return 0;
}
diff --git a/tools/firmware/hvmloader/util.c b/tools/firmware/hvmloader/util.c
index bd247fc65b..ccf9bf94d3 100644
--- a/tools/firmware/hvmloader/util.c
+++ b/tools/firmware/hvmloader/util.c
@@ -629,6 +629,27 @@ uint16_t get_cpu_mhz(void)
return cpu_mhz;
}
+int uart_exists(uint16_t uart_base)
+{
+ uint16_t ier = uart_base + 1;
+ uint8_t a, b, c;
+
+ a = inb(ier);
+ outb(ier, 0);
+ b = inb(ier);
+ outb(ier, 0xf);
+ c = inb(ier);
+ outb(ier, a);
+
+ return ((b == 0) && (c == 0xf));
+}
+
+int hpet_exists(unsigned long hpet_base)
+{
+ uint32_t hpet_id = *(uint32_t *)hpet_base;
+ return ((hpet_id >> 16) == 0x8086);
+}
+
/*
* Local variables:
* mode: C
diff --git a/tools/firmware/hvmloader/util.h b/tools/firmware/hvmloader/util.h
index 069043c04b..e9e0dfd072 100644
--- a/tools/firmware/hvmloader/util.h
+++ b/tools/firmware/hvmloader/util.h
@@ -57,6 +57,10 @@ void pci_write(uint32_t devfn, uint32_t reg, uint32_t len, uint32_t val);
/* Get CPU speed in MHz. */
uint16_t get_cpu_mhz(void);
+/* Hardware detection. */
+int uart_exists(uint16_t uart_base);
+int hpet_exists(unsigned long hpet_base);
+
/* Do cpuid instruction, with operation 'idx' */
void cpuid(uint32_t idx, uint32_t *eax, uint32_t *ebx,
uint32_t *ecx, uint32_t *edx);
@@ -136,7 +140,7 @@ void *mem_alloc(uint32_t size, uint32_t align);
#define virt_to_phys(v) ((unsigned long)(v))
/* Prepare the 32bit BIOS */
-void highbios_setup(void);
+uint32_t highbios_setup(void);
/* Miscellaneous. */
void cacheattr_init(void);
diff --git a/tools/firmware/rombios/32bit/32bitbios.c b/tools/firmware/rombios/32bit/32bitbios.c
index e2f72605dd..22f83f4cf0 100644
--- a/tools/firmware/rombios/32bit/32bitbios.c
+++ b/tools/firmware/rombios/32bit/32bitbios.c
@@ -22,14 +22,13 @@
#include "rombios_compat.h"
-/*
- the jumptable that will be copied into the rombios in the 0xf000 segment
- for every function that is to be called from the lower BIOS, make an entry
- here.
- */
-uint32_t jumptable[] __attribute__((section (".biosjumptable"))) =
-{
-#define X(idx, ret, fn, args...) [idx] = (uint32_t)fn,
+asm (
+ " .text \n"
+ " movzwl %bx,%eax \n"
+ " jmp *jumptable(,%eax,4) \n"
+ " .data \n"
+ "jumptable: \n"
+#define X(idx, ret, fn, args...) " .long "#fn"\n"
#include "32bitprotos.h"
#undef X
-};
+ );
diff --git a/tools/firmware/rombios/32bit/Makefile b/tools/firmware/rombios/32bit/Makefile
index bba71524b4..407faff956 100644
--- a/tools/firmware/rombios/32bit/Makefile
+++ b/tools/firmware/rombios/32bit/Makefile
@@ -1,15 +1,12 @@
XEN_ROOT = ../../../..
include $(XEN_ROOT)/tools/firmware/Rules.mk
-SOURCES = util.c
TARGET = 32bitbios_flat.h
-CFLAGS += $(CFLAGS_include) -I.. -DGCC_PROTOS
+CFLAGS += $(CFLAGS_include) -I..
SUBDIRS = tcgbios
-MODULES = tcgbios/tcgbiosext.o
-
.PHONY: all
all: subdirs-all
$(MAKE) $(TARGET)
@@ -18,7 +15,10 @@ all: subdirs-all
clean: subdirs-clean
rm -rf *.o $(TARGET) $(DEPS)
-$(TARGET): 32bitbios.o $(MODULES) util.o pmm.o
+$(TARGET): 32bitbios_all.o
+ sh mkhex highbios_array 32bitbios_all.o > $@
+
+32bitbios_all.o: 32bitbios.o tcgbios/tcgbiosext.o util.o pmm.o
$(LD) $(LDFLAGS_DIRECT) -s -r $^ -o 32bitbios_all.o
@nm 32bitbios_all.o | \
egrep '^ +U ' >/dev/null && { \
@@ -26,6 +26,5 @@ $(TARGET): 32bitbios.o $(MODULES) util.o pmm.o
nm -u 32bitbios_all.o; \
exit 11; \
} || :
- sh mkhex highbios_array 32bitbios_all.o > $@
-include $(DEPS)
diff --git a/tools/firmware/rombios/32bit/tcgbios/Makefile b/tools/firmware/rombios/32bit/tcgbios/Makefile
index 68509c7f02..8ce1d77e35 100644
--- a/tools/firmware/rombios/32bit/tcgbios/Makefile
+++ b/tools/firmware/rombios/32bit/tcgbios/Makefile
@@ -2,20 +2,17 @@ XEN_ROOT = ../../../../..
include $(XEN_ROOT)/tools/firmware/Rules.mk
TARGET = tcgbiosext.o
-FILES = tcgbios tpm_drivers
-OBJECTS = $(foreach f,$(FILES),$(f).o)
-CFLAGS += $(CFLAGS_include) -I.. -I../.. -DGCC_PROTOS
-
-.PHONY: all clean
+CFLAGS += $(CFLAGS_include) -I.. -I../..
+.PHONY: all
all: $(TARGET)
+.PHONY: clean
clean:
rm -rf *.o $(TARGET) $(DEPS)
-$(TARGET): $(OBJECTS)
+$(TARGET): tcgbios.o tpm_drivers.o
$(LD) $(LDFLAGS_DIRECT) -r $^ -o $@
-include $(DEPS)
-
diff --git a/tools/firmware/rombios/32bitgateway.c b/tools/firmware/rombios/32bitgateway.c
index f5125ec7a3..06d812d4a6 100644
--- a/tools/firmware/rombios/32bitgateway.c
+++ b/tools/firmware/rombios/32bitgateway.c
@@ -96,15 +96,6 @@ Upcall:
push ss
push esp
- ; Find the 32-bit function address via a table lookup
- push si
- rol bx, #2
- mov si, #jmptable
- seg cs
- mov eax, dword ptr [si+bx]
- pop si
- push eax
-
; Calculate protected-mode esp from ss:sp
and esp, #0xffff
xor eax, eax
@@ -127,11 +118,11 @@ upcall1:
mov ss, ax
; Marshal arguments and call 32-bit function
- pop eax
mov ecx, #MAX_ARG_BYTES/4
upcall2:
push MAX_ARG_BYTES-4+args_off[esp]
loop upcall2
+ mov eax, [BIOS_INFO_PHYSICAL_ADDRESS + BIOSINFO_OFF_bios32_entry]
call eax
add esp, #MAX_ARG_BYTES
mov ecx, eax ; Result in ecx
diff --git a/tools/firmware/rombios/rombios.c b/tools/firmware/rombios/rombios.c
index 5d40e54a95..9350eca9b0 100644
--- a/tools/firmware/rombios/rombios.c
+++ b/tools/firmware/rombios/rombios.c
@@ -1418,31 +1418,24 @@ fixup_base_mem_in_k()
write_word(0x40, 0x13, base_mem >> 10);
}
-void
-set_rom_write_access(action)
- Bit16u action;
-{
- Bit16u off = (Bit16u)&((struct bios_info *)0)->xen_pfiob;
ASM_START
- mov si,.set_rom_write_access.off[bp]
+_rom_write_access_control:
push ds
- mov ax,#(ACPI_PHYSICAL_ADDRESS >> 4)
+ mov ax,#(BIOS_INFO_PHYSICAL_ADDRESS >> 4)
mov ds,ax
- mov dx,[si]
+ mov ax,[BIOSINFO_OFF_xen_pfiob]
pop ds
- mov ax,.set_rom_write_access.action[bp]
- out dx,al
+ ret
ASM_END
-}
void enable_rom_write_access()
{
- set_rom_write_access(0);
+ outb(rom_write_access_control(), 0);
}
void disable_rom_write_access()
{
- set_rom_write_access(PFFLAG_ROM_LOCK);
+ outb(rom_write_access_control(), PFFLAG_ROM_LOCK);
}
#endif /* HVMASSIST */
@@ -11824,15 +11817,6 @@ static Bit8u vgafont8[128*8]=
#ifdef HVMASSIST
ASM_START
-// space for addresses in 32bit BIOS area; currently 256/4 entries
-// are allocated
-.org 0xcb00
-jmptable:
-db 0x5F, 0x5F, 0x5F, 0x4A, 0x4D, 0x50, 0x54 ;; ___JMPT
-dw 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ;; 64 bytes
-dw 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ;; 128 bytes
-dw 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ;; 192 bytes
-
//
// MP Tables
// just carve out some blank space for HVMLOADER to write the MP tables to