PCI and ACPI - when resetting all devices, also reset (ie. zero) all of the emulated RAM as well, fixes Windows 2000 after soft reset on later machines such as the ASUS P2B-LS.
This commit is contained in:
@@ -1025,8 +1025,10 @@ acpi_reg_write_common_regs(UNUSED(int size), uint16_t addr, uint8_t val, void *p
|
|||||||
nvr_reg_write(0x000f, 0xff, dev->nvr);
|
nvr_reg_write(0x000f, 0xff, dev->nvr);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (sus_typ & SUS_RESET_PCI)
|
if (sus_typ & SUS_RESET_PCI) {
|
||||||
device_reset_all(DEVICE_PCI);
|
device_reset_all(DEVICE_PCI);
|
||||||
|
mem_zero();
|
||||||
|
}
|
||||||
|
|
||||||
if (sus_typ & SUS_RESET_CPU)
|
if (sus_typ & SUS_RESET_CPU)
|
||||||
cpu_alt_reset = 0;
|
cpu_alt_reset = 0;
|
||||||
|
|||||||
@@ -459,6 +459,7 @@ extern void mem_a20_recalc(void);
|
|||||||
|
|
||||||
extern void mem_init(void);
|
extern void mem_init(void);
|
||||||
extern void mem_close(void);
|
extern void mem_close(void);
|
||||||
|
extern void mem_zero(void);
|
||||||
extern void mem_reset(void);
|
extern void mem_reset(void);
|
||||||
extern void mem_remap_top_ex(int kb, uint32_t start);
|
extern void mem_remap_top_ex(int kb, uint32_t start);
|
||||||
extern void mem_remap_top_ex_nomid(int kb, uint32_t start);
|
extern void mem_remap_top_ex_nomid(int kb, uint32_t start);
|
||||||
|
|||||||
@@ -2792,6 +2792,17 @@ mem_init_ram_mapping(mem_mapping_t *mapping, uint32_t base, uint32_t size)
|
|||||||
mem_add_ram_mapping(mapping, base, size);
|
mem_add_ram_mapping(mapping, base, size);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
mem_zero(void)
|
||||||
|
{
|
||||||
|
#if (!(defined __amd64__ || defined _M_X64 || defined __aarch64__ || defined _M_ARM64))
|
||||||
|
if (mem_size > 1048576)
|
||||||
|
memset(ram2, 0x00, ram2_size + 16);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
memset(ram, 0x00, ram_size + 16);
|
||||||
|
}
|
||||||
|
|
||||||
/* Reset the memory state. */
|
/* Reset the memory state. */
|
||||||
void
|
void
|
||||||
mem_reset(void)
|
mem_reset(void)
|
||||||
@@ -2867,8 +2878,10 @@ mem_reset(void)
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
memset(ram, 0x00, ram_size + 16);
|
memset(ram, 0x00, ram_size + 16);
|
||||||
|
#if (!(defined __amd64__ || defined _M_X64 || defined __aarch64__ || defined _M_ARM64))
|
||||||
if (mem_size > 1048576)
|
if (mem_size > 1048576)
|
||||||
ram2 = &(ram[1 << 30]);
|
ram2 = &(ram[1 << 30]);
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|||||||
Reference in New Issue
Block a user