#include "mptable.h" // MPTABLE_SIGNATURE
#include "smbios.h" // struct smbios_entry_point
-void
+static void
copy_pir(void *pos)
{
struct pir_header *p = pos;
PirOffset = (u32)newpos - BUILD_BIOS_ADDR;
}
-void
+static void
copy_mptable(void *pos)
{
struct mptable_floating_s *p = pos;
memcpy((void*)newpos + length, (void*)p->physaddr, mpclength);
}
-void
+static void
copy_acpi_rsdp(void *pos)
{
if (RsdpAddr)
RsdpAddr = newpos;
}
-void
+static void
copy_smbios(void *pos)
{
if (SMBiosAddr)
memcpy(newpos, pos, p->length);
SMBiosAddr = newpos;
}
+
+void
+copy_table(void *pos)
+{
+ copy_pir(pos);
+ copy_mptable(pos);
+ copy_acpi_rsdp(pos);
+ copy_smbios(pos);
+}
{
void *p = (void*)ALIGN(start, 16);
void *end = (void*)start + size;
- for (; p<end; p += 16) {
- copy_pir(p);
- copy_mptable(p);
- copy_acpi_rsdp(p);
- copy_smbios(p);
- }
+ for (; p<end; p += 16)
+ copy_table(p);
}
void
void coreboot_cbfs_setup(void);
// biostable.c
-void copy_pir(void *pos);
-void copy_mptable(void *pos);
-void copy_acpi_rsdp(void *pos);
-void copy_smbios(void *pos);
+void copy_table(void *pos);
// vgahooks.c
void handle_155f(struct bregs *regs);
void xen_copy_biostables(void)
{
struct xen_seabios_info *info = (void *)INFO_PHYSICAL_ADDRESS;
- u32 *tables = (u32 *)info->tables;
+ void **tables = (void*)info->tables;
int i;
dprintf(1, "xen: copy BIOS tables...\n");
- for (i=0; i<info->tables_nr; i++) {
- void *table = (void *)tables[i];
- copy_acpi_rsdp(table);
- copy_mptable(table);
- copy_pir(table);
- copy_smbios(table);
- }
+ for (i=0; i<info->tables_nr; i++)
+ copy_table(tables[i]);
}
void xen_setup(void)