static int pre_config_pc_core(struct guest_info * info, v3_cfg_tree_t * cfg) {
-
- info->cpu_mode = REAL;
info->mem_mode = PHYSICAL_MEM;
{
extern uint8_t v3_vgabios_start[];
extern uint8_t v3_vgabios_end[];
- addr_t vgabios_dst = 0;
+ void * vgabios_dst = 0;
- if (v3_gpa_to_hpa(&(vm->cores[0]), VGABIOS_START, &vgabios_dst) == -1) {
+ if (v3_gpa_to_hva(&(vm->cores[0]), VGABIOS_START, (addr_t *)&vgabios_dst) == -1) {
PrintError("Could not find VGABIOS destination address\n");
return -1;
}
- memcpy(V3_VAddr((void *)vgabios_dst), v3_vgabios_start,
- v3_vgabios_end - v3_vgabios_start);
+ memcpy(vgabios_dst, v3_vgabios_start, v3_vgabios_end - v3_vgabios_start);
}
/* layout rombios */
{
extern uint8_t v3_rombios_start[];
extern uint8_t v3_rombios_end[];
- addr_t rombios_dst = 0;
+ void * rombios_dst = 0;
- if (v3_gpa_to_hpa(&(vm->cores[0]), ROMBIOS_START, &rombios_dst) == -1) {
+ if (v3_gpa_to_hva(&(vm->cores[0]), ROMBIOS_START, (addr_t *)&rombios_dst) == -1) {
PrintError("Could not find ROMBIOS destination address\n");
return -1;
}
- memcpy(V3_VAddr((void *)rombios_dst), v3_rombios_start,
- v3_rombios_end - v3_rombios_start);
+ memcpy(rombios_dst, v3_rombios_start, v3_rombios_end - v3_rombios_start);
+ }
+
+
+ if (vm->num_cores > 1) {
+ if (v3_inject_mptable(vm) == -1) {
+ PrintError("Failed to inject mptable during configuration\n");
+ return -1;
+ }
}
return 0;