Merge pull request #3463 from 86Box/tc1995
SCSI card and CD-ROM fixes (below).
This commit is contained in:
@@ -976,7 +976,9 @@ scsi_cdrom_command_common(scsi_cdrom_t *dev)
|
||||
break;
|
||||
case 0xc6:
|
||||
case 0xc7:
|
||||
if ((!strcmp(cdrom_drive_types[dev->drv->type].internal_name, "TOSHIBA_CD-ROM_DRIVEXM_3433"))) {
|
||||
if (!strcmp(cdrom_drive_types[dev->drv->type].internal_name, "TOSHIBA_CD-ROM_DRIVEXM_3433") ||
|
||||
!strcmp(cdrom_drive_types[dev->drv->type].internal_name, "TOSHIBA_CD-ROM_XM-3301TA_0272") ||
|
||||
!strcmp(cdrom_drive_types[dev->drv->type].internal_name, "TOSHIBA_CD-ROM_XM-5701TA_3136")) {
|
||||
bytes_per_second = 176.0 * 1024.0;
|
||||
bytes_per_second *= (double) dev->drv->cur_speed;
|
||||
}
|
||||
@@ -1000,7 +1002,15 @@ scsi_cdrom_command_common(scsi_cdrom_t *dev)
|
||||
break;
|
||||
case 0xc3:
|
||||
if (!strcmp(cdrom_drive_types[dev->drv->type].internal_name, "SONY_CD-ROM_CDU-541_1.0i") ||
|
||||
!strcmp(cdrom_drive_types[dev->drv->type].internal_name, "SONY_CD-ROM_CDU-76S_1.00")) {
|
||||
!strcmp(cdrom_drive_types[dev->drv->type].internal_name, "SONY_CD-ROM_CDU-76S_1.00") ||
|
||||
!strcmp(cdrom_drive_types[dev->drv->type].internal_name, "PIONEER_CD-ROM_DRM-604X_2403")) {
|
||||
bytes_per_second = 176.0 * 1024.0;
|
||||
bytes_per_second *= (double) dev->drv->cur_speed;
|
||||
}
|
||||
break;
|
||||
case 0xde:
|
||||
if (!strcmp(cdrom_drive_types[dev->drv->type].internal_name, "NEC_CD-ROM_DRIVE74_1.00") ||
|
||||
!strcmp(cdrom_drive_types[dev->drv->type].internal_name, "NEC_CD-ROM_DRIVE464_1.05")) {
|
||||
bytes_per_second = 176.0 * 1024.0;
|
||||
bytes_per_second *= (double) dev->drv->cur_speed;
|
||||
}
|
||||
|
@@ -379,9 +379,9 @@ esp_get_cmd(esp_t *dev, uint32_t maxlen)
|
||||
dma_set_drq(dev->DmaChannel, 0);
|
||||
} else {
|
||||
esp_pci_dma_memory_rw(dev, buf, dmalen, WRITE_TO_DEVICE);
|
||||
dmalen = MIN(fifo8_num_free(&dev->cmdfifo), dmalen);
|
||||
fifo8_push_all(&dev->cmdfifo, buf, dmalen);
|
||||
}
|
||||
dmalen = MIN(fifo8_num_free(&dev->cmdfifo), dmalen);
|
||||
fifo8_push_all(&dev->cmdfifo, buf, dmalen);
|
||||
} else {
|
||||
dmalen = MIN(fifo8_num_used(&dev->fifo), maxlen);
|
||||
esp_log("ESP Get command, dmalen = %i\n", dmalen);
|
||||
@@ -545,6 +545,8 @@ esp_hard_reset(esp_t *dev)
|
||||
dev->do_cmd = 0;
|
||||
dev->rregs[ESP_CFG1] = dev->mca ? dev->HostID : 7;
|
||||
esp_log("ESP Reset\n");
|
||||
for (uint8_t i = 0; i < 16; i++)
|
||||
scsi_device_reset(&scsi_devices[dev->bus][i]);
|
||||
timer_stop(&dev->timer);
|
||||
}
|
||||
|
||||
@@ -569,7 +571,6 @@ esp_do_nodma(esp_t *dev, scsi_device_t *sd)
|
||||
esp_do_cmd(dev);
|
||||
} else {
|
||||
dev->cmdfifo_cdb_offset = fifo8_num_used(&dev->cmdfifo);
|
||||
;
|
||||
esp_log("CDB offset = %i used\n", dev->cmdfifo_cdb_offset);
|
||||
|
||||
dev->rregs[ESP_RSTAT] = STAT_TC | STAT_CD;
|
||||
@@ -665,7 +666,7 @@ esp_do_dma(esp_t *dev, scsi_device_t *sd)
|
||||
|
||||
count = tdbc = esp_get_tc(dev);
|
||||
|
||||
if (dev->mca) { /*See the comment in the esp_do_busid_cmd() function.*/
|
||||
if (dev->mca) {
|
||||
if (sd->buffer_length < 0) {
|
||||
if (dev->dma_enabled)
|
||||
goto done;
|
||||
@@ -713,7 +714,7 @@ esp_do_dma(esp_t *dev, scsi_device_t *sd)
|
||||
return;
|
||||
}
|
||||
|
||||
esp_log("ESP SCSI dmaleft = %d, async_len = %i, buffer length = %d\n", esp_get_tc(dev), sd->buffer_length);
|
||||
esp_log("ESP SCSI dmaleft = %d, buffer length = %d\n", esp_get_tc(dev), sd->buffer_length);
|
||||
|
||||
/* Make sure count is never bigger than buffer_length. */
|
||||
if (count > dev->xfer_counter)
|
||||
@@ -1082,6 +1083,9 @@ esp_reg_write(esp_t *dev, uint32_t saddr, uint32_t val)
|
||||
esp_pci_soft_reset(dev);
|
||||
break;
|
||||
case CMD_BUSRESET:
|
||||
for (uint8_t i = 0; i < 16; i++)
|
||||
scsi_device_reset(&scsi_devices[dev->bus][i]);
|
||||
|
||||
if (!(dev->wregs[ESP_CFG1] & CFG1_RESREPT)) {
|
||||
dev->rregs[ESP_RINTR] |= INTR_RST;
|
||||
esp_log("ESP Bus Reset with IRQ\n");
|
||||
|
Reference in New Issue
Block a user