int spapr_vio_send_crq(VIOsPAPRDevice *dev, uint8_t *crq)

{

    int rc;

    uint8_t byte;



    if (!dev->crq.qsize) {

        fprintf(stderr, "spapr_vio_send_creq on uninitialized queue\n");

        return -1;

    }



    /* Maybe do a fast path for KVM just writing to the pages */

    rc = spapr_vio_dma_read(dev, dev->crq.qladdr + dev->crq.qnext, &byte, 1);

    if (rc) {

        return rc;

    }

    if (byte != 0) {

        return 1;

    }



    rc = spapr_vio_dma_write(dev, dev->crq.qladdr + dev->crq.qnext + 8,

                             &crq[8], 8);

    if (rc) {

        return rc;

    }



    kvmppc_eieio();



    rc = spapr_vio_dma_write(dev, dev->crq.qladdr + dev->crq.qnext, crq, 8);

    if (rc) {

        return rc;

    }



    dev->crq.qnext = (dev->crq.qnext + 16) % dev->crq.qsize;



    if (dev->signal_state & 1) {

        qemu_irq_pulse(dev->qirq);

    }



    return 0;

}

int spapr_vio_send_crq(VIOsPAPRDevice *dev, uint8_t *crq)

{

    int rc;

    uint8_t byte;



    if (!dev->crq.qsize) {

        fprintf(stderr, "spapr_vio_send_creq on uninitialized queue\n");

        return -1;

    }



    

    rc = spapr_vio_dma_read(dev, dev->crq.qladdr + dev->crq.qnext, &byte, 1);

    if (rc) {

        return rc;

    }

    if (byte != 0) {

        return 1;

    }



    rc = spapr_vio_dma_write(dev, dev->crq.qladdr + dev->crq.qnext + 8,

                             &crq[8], 8);

    if (rc) {

        return rc;

    }



    kvmppc_eieio();



    rc = spapr_vio_dma_write(dev, dev->crq.qladdr + dev->crq.qnext, crq, 8);

    if (rc) {

        return rc;

    }



    dev->crq.qnext = (dev->crq.qnext + 16) % dev->crq.qsize;



    if (dev->signal_state & 1) {

        qemu_irq_pulse(dev->qirq);

    }



    return 0;

}

int FUNC_0(VIOsPAPRDevice *VAR_0, uint8_t *VAR_1)

{

    int VAR_2;

    uint8_t byte;



    if (!VAR_0->VAR_1.qsize) {

        fprintf(stderr, "spapr_vio_send_creq on uninitialized queue\n");

        return -1;

    }



    

    VAR_2 = spapr_vio_dma_read(VAR_0, VAR_0->VAR_1.qladdr + VAR_0->VAR_1.qnext, &byte, 1);

    if (VAR_2) {

        return VAR_2;

    }

    if (byte != 0) {

        return 1;

    }



    VAR_2 = spapr_vio_dma_write(VAR_0, VAR_0->VAR_1.qladdr + VAR_0->VAR_1.qnext + 8,

                             &VAR_1[8], 8);

    if (VAR_2) {

        return VAR_2;

    }



    kvmppc_eieio();



    VAR_2 = spapr_vio_dma_write(VAR_0, VAR_0->VAR_1.qladdr + VAR_0->VAR_1.qnext, VAR_1, 8);

    if (VAR_2) {

        return VAR_2;

    }



    VAR_0->VAR_1.qnext = (VAR_0->VAR_1.qnext + 16) % VAR_0->VAR_1.qsize;



    if (VAR_0->signal_state & 1) {

        qemu_irq_pulse(VAR_0->qirq);

    }



    return 0;

}

int FUNC_0(VIOsPAPRDevice *VAR_0, uint8_t *VAR_1)
{ int VAR_2; uint8_t byte; if (!VAR_0->VAR_1.qsize) { fprintf(stderr, "spapr_vio_send_creq on uninitialized queue\n"); return -1; } VAR_2 = spapr_vio_dma_read(VAR_0, VAR_0->VAR_1.qladdr + VAR_0->VAR_1.qnext, &byte, 1); if (VAR_2) { return VAR_2; } if (byte != 0) { return 1; } VAR_2 = spapr_vio_dma_write(VAR_0, VAR_0->VAR_1.qladdr + VAR_0->VAR_1.qnext + 8,
&VAR_1[8], 8); if (VAR_2) { return VAR_2; } kvmppc_eieio(); VAR_2 = spapr_vio_dma_write(VAR_0, VAR_0->VAR_1.qladdr + VAR_0->VAR_1.qnext, VAR_1, 8); if (VAR_2) { return VAR_2; } VAR_0->VAR_1.qnext = (VAR_0->VAR_1.qnext + 16) % VAR_0->VAR_1.qsize; if (VAR_0->signal_state & 1) { qemu_irq_pulse(VAR_0->qirq); } return 0; }