From: David Gibson <da...@gibson.dropbear.id.au> This patch adds cpu_physical_memory_set() function. This is equivalent to calling cpu_physical_memory_write() with a buffer filled with a character, ie, a memset of target memory.
It uses a small temporary buffer on the stack. Signed-off-by: David Gibson <da...@gibson.dropbear.id.au> Signed-off-by: Benjamin Herrenschmidt <b...@kernel.crashing.org> --- cpu-common.h | 1 + exec.c | 15 +++++++++++++++ 2 files changed, 16 insertions(+) diff --git a/cpu-common.h b/cpu-common.h index dca5175..be6b9f3 100644 --- a/cpu-common.h +++ b/cpu-common.h @@ -53,6 +53,7 @@ void qemu_ram_set_idstr(ram_addr_t addr, const char *name, DeviceState *dev); void cpu_physical_memory_rw(target_phys_addr_t addr, uint8_t *buf, int len, int is_write); +void cpu_physical_memory_set(target_phys_addr_t addr, uint8_t c, int len); static inline void cpu_physical_memory_read(target_phys_addr_t addr, void *buf, int len) { diff --git a/exec.c b/exec.c index 0607c9b..40cf52d 100644 --- a/exec.c +++ b/exec.c @@ -3581,6 +3581,21 @@ void cpu_physical_memory_rw(target_phys_addr_t addr, uint8_t *buf, } } +void cpu_physical_memory_set(target_phys_addr_t addr, uint8_t c, int len) +{ +#define FILLBUF_SIZE 512 + uint8_t fillbuf[FILLBUF_SIZE]; + int l; + + memset(fillbuf, c, FILLBUF_SIZE); + while (len > 0) { + l = len < FILLBUF_SIZE ? len : FILLBUF_SIZE; + cpu_physical_memory_rw(addr, fillbuf, l, true); + len -= len; + addr += len; + } +} + /* used for ROM loading : can write in RAM and ROM */ void cpu_physical_memory_write_rom(target_phys_addr_t addr, const uint8_t *buf, int len) -- 1.7.9.5