static uint32_t get_cmd(ESPState *s, uint8_t *buf)

{

    uint32_t dmalen;

    int target;



    dmalen = s->rregs[ESP_TCLO] | (s->rregs[ESP_TCMID] << 8);

    target = s->wregs[ESP_WBUSID] & 7;

    DPRINTF("get_cmd: len %d target %d\n", dmalen, target);

    if (s->dma) {

        s->dma_memory_read(s->dma_opaque, buf, dmalen);

    } else {

        buf[0] = 0;

        memcpy(&buf[1], s->ti_buf, dmalen);

        dmalen++;

    }



    s->ti_size = 0;

    s->ti_rptr = 0;

    s->ti_wptr = 0;



    if (s->current_dev) {

        /* Started a new command before the old one finished.  Cancel it.  */

        s->current_dev->cancel_io(s->current_dev, 0);

        s->async_len = 0;

    }



    if (target >= ESP_MAX_DEVS || !s->scsi_dev[target]) {

        // No such drive

        s->rregs[ESP_RSTAT] = 0;

        s->rregs[ESP_RINTR] = INTR_DC;

        s->rregs[ESP_RSEQ] = SEQ_0;

        esp_raise_irq(s);

        return 0;

    }

    s->current_dev = s->scsi_dev[target];

    return dmalen;

}

static uint32_t get_cmd(ESPState *s, uint8_t *buf)

{

    uint32_t dmalen;

    int target;



    dmalen = s->rregs[ESP_TCLO] | (s->rregs[ESP_TCMID] << 8);

    target = s->wregs[ESP_WBUSID] & 7;

    DPRINTF("get_cmd: len %d target %d\n", dmalen, target);

    if (s->dma) {

        s->dma_memory_read(s->dma_opaque, buf, dmalen);

    } else {

        buf[0] = 0;

        memcpy(&buf[1], s->ti_buf, dmalen);

        dmalen++;

    }



    s->ti_size = 0;

    s->ti_rptr = 0;

    s->ti_wptr = 0;



    if (s->current_dev) {

        

        s->current_dev->cancel_io(s->current_dev, 0);

        s->async_len = 0;

    }



    if (target >= ESP_MAX_DEVS || !s->scsi_dev[target]) {

        

        s->rregs[ESP_RSTAT] = 0;

        s->rregs[ESP_RINTR] = INTR_DC;

        s->rregs[ESP_RSEQ] = SEQ_0;

        esp_raise_irq(s);

        return 0;

    }

    s->current_dev = s->scsi_dev[target];

    return dmalen;

}

    target = s->wregs[ESP_WBUSID] & 7;
static uint32_t FUNC_0(ESPState *s, uint8_t *buf)

{

    uint32_t dmalen;

    int VAR_0;



    dmalen = s->rregs[ESP_TCLO] | (s->rregs[ESP_TCMID] << 8);

    VAR_0 = s->wregs[ESP_WBUSID] & 7;

    DPRINTF("FUNC_0: len %d VAR_0 %d\n", dmalen, VAR_0);

    if (s->dma) {

        s->dma_memory_read(s->dma_opaque, buf, dmalen);

    } else {

        buf[0] = 0;

        memcpy(&buf[1], s->ti_buf, dmalen);

        dmalen++;

    }



    s->ti_size = 0;

    s->ti_rptr = 0;

    s->ti_wptr = 0;



    if (s->current_dev) {

        

        s->current_dev->cancel_io(s->current_dev, 0);

        s->async_len = 0;

    }



    if (VAR_0 >= ESP_MAX_DEVS || !s->scsi_dev[VAR_0]) {

        

        s->rregs[ESP_RSTAT] = 0;

        s->rregs[ESP_RINTR] = INTR_DC;

        s->rregs[ESP_RSEQ] = SEQ_0;

        esp_raise_irq(s);

        return 0;

    }

    s->current_dev = s->scsi_dev[VAR_0];

    return dmalen;

}

static uint32_t FUNC_0(ESPState *s, uint8_t *buf)
{ uint32_t dmalen; int VAR_0; dmalen = s->rregs[ESP_TCLO] | (s->rregs[ESP_TCMID] << 8); VAR_0 = s->wregs[ESP_WBUSID] & 7; DPRINTF("FUNC_0: len %d VAR_0 %d\n", dmalen, VAR_0); if (s->dma) { s->dma_memory_read(s->dma_opaque, buf, dmalen); } else { buf[0] = 0; memcpy(&buf[1], s->ti_buf, dmalen); dmalen++; } s->ti_size = 0; s->ti_rptr = 0; s->ti_wptr = 0; if (s->current_dev) { s->current_dev->cancel_io(s->current_dev, 0); s->async_len = 0; } if (VAR_0 >= ESP_MAX_DEVS || !s->scsi_dev[VAR_0]) { s->rregs[ESP_RSTAT] = 0; s->rregs[ESP_RINTR] = INTR_DC; s->rregs[ESP_RSEQ] = SEQ_0; esp_raise_irq(s); return 0; } s->current_dev = s->scsi_dev[VAR_0]; return dmalen; }