Handle mapping a buffer to extram

This commit is contained in:
Toby Jaffey 2025-12-12 14:24:34 +00:00
parent 238b4c5fcf
commit 9836500503

View file

@ -127,6 +127,23 @@ bool get_safeptr_null_terminated(uvm32_state_t *vmst, uint32_t addr, uvm32_evt_s
}
bool get_safeptr(uvm32_state_t *vmst, uint32_t addr, uint32_t len, uvm32_evt_syscall_buf_t *buf) {
uint32_t ptrstart;
if (MINIRV32_MMIO_RANGE(addr)) {
if (vmst->extram == NULL) {
return false;
} else {
uint32_t ptrstart = addr - UVM32_EXTRAM_BASE;
if ((ptrstart > vmst->extramLen) || (ptrstart + len >= vmst->extramLen)) {
setStatusErr(vmst, UVM32_ERR_MEM_RD);
buf->ptr = (uint8_t *)NULL;
buf->len = 0;
return false;
}
buf->ptr = (uint8_t *)&vmst->extram[ptrstart/4]; // extram is uint32_t*
buf->len = len;
return true;
}
} else {
uint32_t ptrstart = addr - MINIRV32_RAM_IMAGE_OFFSET;
if ((ptrstart > UVM32_MEMORY_SIZE) || (ptrstart + len >= UVM32_MEMORY_SIZE)) {
setStatusErr(vmst, UVM32_ERR_MEM_RD);
@ -137,6 +154,7 @@ bool get_safeptr(uvm32_state_t *vmst, uint32_t addr, uint32_t len, uvm32_evt_sys
buf->ptr = &vmst->memory[ptrstart];
buf->len = len;
return true;
}
}
void uvm32_clearError(uvm32_state_t *vmst) {