mmio
struct vm_mmio *mmio = &entry->u.mmio;
mmio->bytes = bytes;
mmio->read = 1;
mmio->gpa = gpa;
mmio->data = data;
struct vm_mmio *mmio = &entry->u.mmio;
mmio->bytes = bytes;
mmio->read = 0;
mmio->gpa = gpa;
mmio->data = 0;
struct vm_mmio mmio;
mmio = vme->u.mmio;
is_read = (mmio.read != 0);
err = emulate_mem(vcpu, &mmio);
fprintf(stderr, "Unhandled memory access to 0x%lx\n", mmio.gpa);
mmio.data = ~0UL;
vmentry_mmio_read(vcpu, mmio.gpa, mmio.bytes,
mmio.data);
vmentry_mmio_write(vcpu, mmio.gpa, mmio.bytes);
fprintf(stderr, "Unhandled mmio error to 0x%lx: %d\n", mmio.gpa, err);
struct vm_mmio *mmio;
mmio = arg;
if (mmio->read != 0) {
err = mem_read(vcpu, paddr, &mmio->data, mmio->bytes, mr);
err = mem_write(vcpu, paddr, mmio->data, mmio->bytes, mr);
emulate_mem(struct vcpu *vcpu, struct vm_mmio *mmio)
return (access_memory(vcpu, mmio->gpa, emulate_mem_cb, mmio));
int emulate_mem(struct vcpu *vcpu, struct vm_mmio *mmio);
vmexit->u.mmio.read ? "READ" : "WRITE");
printf("\tbytes\t\t%d\n", vmexit->u.mmio.bytes);
printf("\tgpa\t\t0x%08x\n", vmexit->u.mmio.gpa);
printf("\tdata\t\t0x%08x\n", vmexit->u.mmio.data);
vexit->u.mmio.bytes,
vexit->u.mmio.read == 0 ? "write" : "read",
vexit->u.mmio.gpa,
vexit->u.mmio.data);
bcopy(&vexit->u.mmio, &ventry->u.mmio, sizeof (struct vm_mmio));
if (ventry->u.mmio.read != 0) {
ventry->u.mmio.data = data;
if (vexit->u.mmio.gpa != addr ||
vexit->u.mmio.bytes != len ||
(vexit->u.mmio.read != 0) != is_read) {
*valp = vexit->u.mmio.data;
if (vexit->u.mmio.read == 0) {
if (vexit->u.mmio.gpa < MMIO_TEST_BASE ||
vexit->u.mmio.gpa >= MMIO_TEST_END) {
const uint16_t addr = vexit->u.mmio.gpa;
switch (vexit->u.mmio.bytes) {
error = mmio(uio, rw, v,
error = mmio(uio, rw, v, uio->uio_loffset & PAGEOFFSET,
unsigned long mmio = pLayerPointers->pMdl->Mem_Address;
WRITE_REG16(pLayerPointers, mmio + MIB_ADDR, MIB_RD_CMD | MIB_COUNTER);
status = READ_REG16(pLayerPointers, mmio + MIB_ADDR);
data = READ_REG32(pLayerPointers, mmio + MIB_DATA);
unsigned long mmio = pLayerPointers->pMdl->Mem_Address;
status = READ_REG16(pLayerPointers, mmio + PHY_ACCESS);
WRITE_REG32(pLayerPointers, mmio + PHY_ACCESS, data);
status = READ_REG16(pLayerPointers, mmio + PHY_ACCESS);
unsigned long mmio = pLayerPointers->pMdl->Mem_Address;
status = READ_REG16(pLayerPointers, mmio + PHY_ACCESS);
WRITE_REG32(pLayerPointers, mmio + PHY_ACCESS, data);
status = READ_REG16(pLayerPointers, mmio + PHY_ACCESS);
struct pptseg *seg = &ppt->mmio[i];
struct pptseg mmio[MAX_MMIOSEGS];
struct pptseg *seg = &ppt->mmio[i];
struct pptseg *seg = &ppt->mmio[i];
seg = &ppt->mmio[i];
err = vie_fulfill_mmio(vie, &entry->u.mmio);
vme->u.mmio.gpa = vie->mmio_req_read.gpa;
vme->u.mmio.data = 0;
vme->u.mmio.bytes = vie->mmio_req_read.bytes;
vme->u.mmio.read = 1;
vme->u.mmio.gpa = vie->mmio_req_write.gpa;
vme->u.mmio.data = vie->mmio_req_write.data &
vme->u.mmio.bytes = vie->mmio_req_write.bytes;
vme->u.mmio.read = 0;
struct vm_mmio mmio;
struct vm_mmio mmio;