Lines Matching +full:gpa +full:- +full:1

1 /*-
2 * SPDX-License-Identifier: BSD-2-Clause
10 * 1. Redistributions of source code must retain the above copyright
36 #define _WANT_KERNEL_ERRNO 1
64 * Per-vCPU cache. Since most accesses from a vCPU will be to
76 if (a->mr_end < b->mr_base) in mmio_rb_range_compare()
77 return (-1); in mmio_rb_range_compare()
78 else if (a->mr_base > b->mr_end) in mmio_rb_range_compare()
79 return (1); in mmio_rb_range_compare()
112 new->mr_base, new->mr_end, in mmio_rb_add()
113 overlap->mr_base, overlap->mr_end, in mmio_rb_add()
114 new->mr_param.name, overlap->mr_param.name); in mmio_rb_add()
132 printf(" %lx:%lx, %s\n", np->mr_base, np->mr_end,
133 np->mr_param.name);
142 typedef int (mem_cb_t)(struct vcpu *vcpu, uint64_t gpa, struct mem_range *mr,
146 mem_read(struct vcpu *vcpu, uint64_t gpa, uint64_t *rval, int size, void *arg) in mem_read() argument
151 error = (*mr->handler)(vcpu, MEM_F_READ, gpa, size, rval, mr->arg1, in mem_read()
152 mr->arg2); in mem_read()
157 mem_write(struct vcpu *vcpu, uint64_t gpa, uint64_t wval, int size, void *arg) in mem_write() argument
162 error = (*mr->handler)(vcpu, MEM_F_WRITE, gpa, size, &wval, mr->arg1, in mem_write()
163 mr->arg2); in mem_write()
179 * First check the per-vCPU cache in access_memory()
182 paddr >= mmio_hint[vcpuid]->mr_base && in access_memory()
183 paddr <= mmio_hint[vcpuid]->mr_end) { in access_memory()
190 /* Update the per-vCPU cache */ in access_memory()
206 mr = &entry->mr_param; in access_memory()
220 immutable = (mr->flags & MEM_F_IMMUTABLE) != 0; in access_memory()
248 return (vmm_emulate_instruction(vcpu, paddr, ema->vie, ema->paging, in emulate_mem_cb()
275 return (mr->handler(vcpu, rma->operation, paddr, rma->size, in rw_mem_cb()
276 rma->val, mr->arg1, mr->arg2)); in rw_mem_cb()
280 read_mem(struct vcpu *vcpu, uint64_t gpa, uint64_t *rval, int size) in read_mem() argument
287 return (access_memory(vcpu, gpa, rw_mem_cb, &rma)); in read_mem()
291 write_mem(struct vcpu *vcpu, uint64_t gpa, uint64_t wval, int size) in write_mem() argument
298 return (access_memory(vcpu, gpa, rw_mem_cb, &rma)); in write_mem()
315 mrp->mr_param = *memp; in register_mem_int()
316 mrp->mr_base = memp->base; in register_mem_int()
317 mrp->mr_end = memp->base + memp->size - 1; in register_mem_int()
319 if (mmio_rb_lookup(rbt, memp->base, &entry) != 0) in register_mem_int()
352 err = mmio_rb_lookup(&mmio_rb_root, memp->base, &entry); in unregister_mem()
354 mr = &entry->mr_param; in unregister_mem()
355 assert(mr->name == memp->name); in unregister_mem()
356 assert(mr->base == memp->base && mr->size == memp->size); in unregister_mem()
357 assert((mr->flags & MEM_F_IMMUTABLE) == 0); in unregister_mem()
360 /* flush Per-vCPU cache */ in unregister_mem()