static bool memory_region_access_valid(MemoryRegion *mr,
target_phys_addr_t addr,
- unsigned size)
+ unsigned size,
+ bool is_write)
{
+ if (mr->ops->valid.accepts
+ && !mr->ops->valid.accepts(mr->opaque, addr, size, is_write)) {
+ return false;
+ }
+
if (!mr->ops->valid.unaligned && (addr & (size - 1))) {
return false;
}
MemoryRegion *mr = _mr;
uint64_t data = 0;
- if (!memory_region_access_valid(mr, addr, size)) {
+ if (!memory_region_access_valid(mr, addr, size, false)) {
return -1U; /* FIXME: better signalling */
}
{
MemoryRegion *mr = _mr;
- if (!memory_region_access_valid(mr, addr, size)) {
+ if (!memory_region_access_valid(mr, addr, size, true)) {
return; /* FIXME: better signalling */
}