int hvm_mmio_intercept(ioreq_t *p) { struct vcpu *v = current; int i; for ( i = 0; i < HVM_MMIO_HANDLER_NR; i++ ) { hvm_mmio_check_t check_handler = hvm_mmio_handlers[i]->check_handler; if ( check_handler(v, p->addr) ) { if ( unlikely(p->count > 1) && !check_handler(v, unlikely(p->df) ? p->addr - (p->count - 1L) * p->size : p->addr + (p->count - 1L) * p->size) ) p->count = 1; return hvm_mmio_access( v, p, hvm_mmio_handlers[i]->read_handler, hvm_mmio_handlers[i]->write_handler); } } return X86EMUL_UNHANDLEABLE; }
int hvm_mmio_intercept(ioreq_t *p) { struct vcpu *v = current; int i; for ( i = 0; i < HVM_MMIO_HANDLER_NR; i++ ) if ( hvm_mmio_handlers[i]->check_handler(v, p->addr) ) return hvm_mmio_access( v, p, hvm_mmio_handlers[i]->read_handler, hvm_mmio_handlers[i]->write_handler); return X86EMUL_UNHANDLEABLE; }