#include "hypercall.h"
static int
-write_smbios_tables(void *start,
+write_smbios_tables(void *start, unsigned long phys,
uint32_t vcpus, uint64_t memsize,
uint8_t uuid[16], char *xen_version,
uint32_t xen_major_version, uint32_t xen_minor_version);
}
static int
-write_smbios_tables(void *start,
+write_smbios_tables(void *start, unsigned long phys,
uint32_t vcpus, uint64_t memsize,
uint8_t uuid[16], char *xen_version,
uint32_t xen_major_version, uint32_t xen_minor_version)
smbios_entry_point_init(
start, max_struct_size,
(p - (char *)start) - sizeof(struct smbios_entry_point),
- SMBIOS_PHYSICAL_ADDRESS + sizeof(struct smbios_entry_point),
+ phys + sizeof(struct smbios_entry_point),
nr_structs);
return ((char *)p - (char *)start);
}
int
-hvm_write_smbios_tables(void)
+hvm_write_smbios_tables(unsigned long scratch, unsigned long smbios_start, unsigned long smbios_end)
{
xen_domain_handle_t uuid;
uint16_t xen_major_version, xen_minor_version;
xen_version_str[sizeof(xen_version_str)-1] = '\0';
/* SCRATCH_PHYSICAL_ADDRESS is a safe large memory area for scratch. */
- len = write_smbios_tables((void *)SCRATCH_PHYSICAL_ADDRESS,
+ len = write_smbios_tables((void *)scratch, smbios_start,
hvm_info->nr_vcpus, get_memsize(),
uuid, xen_version_str,
xen_major_version, xen_minor_version);
- if ( len > SMBIOS_MAXIMUM_SIZE )
+ if ( smbios_start + len > smbios_end )
goto error_out;
/* Okay, not too large: copy out of scratch to final location. */
- memcpy((void *)SMBIOS_PHYSICAL_ADDRESS,
- (void *)SCRATCH_PHYSICAL_ADDRESS, len);
+ memcpy((void *)smbios_start, (void *)scratch, len);
return len;