lun = busid & 7;
current_lun = scsiesp_device_find(&s->bus, 0, s->current_dev->id, lun);
+ if (!current_lun) {
+ s->rregs[ESP_RSTAT] = 0;
+ s->rregs[ESP_RINTR] = INTR_DC;
+ s->rregs[ESP_RSEQ] = SEQ_0;
+ esp_raise_irq(s);
+ return;
+ }
s->current_req = scsiesp_req_new(current_lun, 0, lun, buf, s);
datalen = scsiesp_req_enqueue(s->current_req);
s->ti_size = datalen;
return 1;
}
+void esp_fake_dma_done(void *opaque)
+{
+ ESPState *s = (ESPState*)opaque;
+ scsiesp_req_continue(s->current_req);
+}
+
void esp_command_complete(SCSIRequest *req, uint32_t status,
size_t resid)
{
if (s->ti_size == 1) {
scsiesp_req_continue(s->current_req);
}
-// esp_command_complete(s);
- //activate_debugger();
} else {
s->rregs[ESP_FIFO] = s->ti_buf[s->ti_rptr++];
}
esp_lower_irq(s);
return old_val;
+ case ESP_RES4:
+ return 0x80 | 0x20 | 0x2;
default:
//write_log("read unknown 53c94 register %02x\n", saddr);
break;
void esp_reg_write(void *s, uint32_t saddr, uint64_t val);
void esp_dma_enable(void *opaque, int level);
+void esp_fake_dma_done(void *opaque);
void esp_request_cancelled(SCSIRequest *req);
void esp_command_complete(SCSIRequest *req, uint32_t status, size_t resid);
void esp_transfer_data(SCSIRequest *req, uint32_t len);
void esp_scsi_init(DeviceState *dev, ESPDMAMemoryReadWriteFunc read, ESPDMAMemoryReadWriteFunc write);
void esp_scsi_reset(DeviceState *dev, void *privdata);
-
#endif