Ejemplo n.º 1
0
Archivo: intercept.c Proyecto: CPFL/xen
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;
}
Ejemplo n.º 2
0
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;
}