SCSI corrections:

1. Changed the p's back to priv's.
2. Made the Spock/Tribble cards use picint instead of picintlevel.
3. Corrected fallthroughs and a minor change in the SCSI CD-ROM code core.
This commit is contained in:
TC1995
2023-09-20 23:14:00 +02:00
parent 7c6381b2ea
commit 45ecdf37de
3 changed files with 10 additions and 24 deletions

View File

@@ -198,8 +198,8 @@ typedef struct cdrom {
void *image;
void (*insert)(void *p);
void (*close)(void *p);
void (*insert)(void *priv);
void (*close)(void *priv);
uint32_t (*get_volume)(void *p, int channel);
uint32_t (*get_channel)(void *p, int channel);
@@ -254,6 +254,10 @@ extern int cdrom_image_open(cdrom_t *dev, const char *fn);
extern void cdrom_image_close(cdrom_t *dev);
extern void cdrom_image_reset(cdrom_t *dev);
extern void cdrom_ioctl_eject(void);
extern void cdrom_ioctl_load(void);
extern int cdrom_ioctl_open(cdrom_t *dev, const char d);
extern void cdrom_update_cdb(uint8_t *cdb, int lba_pos,
int number_of_blocks);

View File

@@ -1002,7 +1002,6 @@ scsi_cdrom_command_common(scsi_cdrom_t *dev)
bytes_per_second *= (double) dev->drv->cur_speed;
break;
}
fallthrough;
case 0xc0:
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") ||
@@ -1013,7 +1012,6 @@ scsi_cdrom_command_common(scsi_cdrom_t *dev)
bytes_per_second *= (double) dev->drv->cur_speed;
break;
}
fallthrough;
case 0xc1:
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") ||
@@ -1025,7 +1023,6 @@ scsi_cdrom_command_common(scsi_cdrom_t *dev)
bytes_per_second *= (double) dev->drv->cur_speed;
break;
}
fallthrough;
case 0xc2:
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") ||
@@ -1038,7 +1035,6 @@ scsi_cdrom_command_common(scsi_cdrom_t *dev)
bytes_per_second *= (double) dev->drv->cur_speed;
break;
}
fallthrough;
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") ||
@@ -1050,7 +1046,6 @@ scsi_cdrom_command_common(scsi_cdrom_t *dev)
bytes_per_second *= (double) dev->drv->cur_speed;
break;
}
fallthrough;
case 0xdd:
case 0xde:
if (!strcmp(cdrom_drive_types[dev->drv->type].internal_name, "NEC_CD-ROM_DRIVE38_1.03") ||
@@ -1861,7 +1856,6 @@ begin:
scsi_cdrom_command_complete(dev);
break;
}
fallthrough;
case GPCMD_SET_SPEED:
dev->drv->cur_speed = (cdb[3] | (cdb[2] << 8)) / 176;
if (dev->drv->cur_speed < 1)
@@ -1957,7 +1951,6 @@ begin:
dev->sony_vendor = 1;
goto begin;
} /*GPCMD_READ_DISC_INFORMATION_TOSHIBA*/
fallthrough;
case 0xDE: /*GPCMD_READ_DISC_INFORMATION_NEC*/
scsi_cdrom_set_phase(dev, SCSI_PHASE_DATA_IN);
scsi_cdrom_buf_alloc(dev, 4);
@@ -2494,7 +2487,6 @@ begin:
scsi_cdrom_command_complete(dev);
break;
} /*GPCMD_AUDIO_TRACK_SEARCH_TOSHIBA and GPCMD_EJECT_CHINON*/
fallthrough;
case 0xD8: /*GPCMD_AUDIO_TRACK_SEARCH_NEC*/
if (!strcmp(cdrom_drive_types[dev->drv->type].internal_name, "CHINON_CD-ROM_CDS-431_H42")) {
scsi_cdrom_set_phase(dev, SCSI_PHASE_STATUS);
@@ -2572,7 +2564,6 @@ begin:
scsi_cdrom_data_command_finish(dev, len, len, len, 0);
return;
} /*GPCMD_PLAY_AUDIO_TOSHIBA*/
fallthrough;
case 0xD9: /*GPCMD_PLAY_AUDIO_NEC*/
scsi_cdrom_set_phase(dev, SCSI_PHASE_STATUS);
if ((dev->drv->host_drive < 1) || (dev->drv->cd_status <= CD_STATUS_DATA_ONLY)) {
@@ -2759,7 +2750,6 @@ begin:
scsi_cdrom_illegal_mode(dev);
break;
} /*GPCMD_READ_SUBCODEQ_PLAYING_STATUS_TOSHIBA and GPCMD_STOP_CHINON*/
fallthrough;
case 0xDD: /*GPCMD_READ_SUBCODEQ_PLAYING_STATUS_NEC*/
if (!strcmp(cdrom_drive_types[dev->drv->type].internal_name, "CHINON_CD-ROM_CDS-431_H42")) {
scsi_cdrom_set_phase(dev, SCSI_PHASE_STATUS);
@@ -2903,7 +2893,6 @@ begin:
scsi_cdrom_data_command_finish(dev, len, len, len, 0);
break;
} /*GPCMD_CADDY_EJECT_TOSHIBA and GPCMD_CADDY_EJECT_NEC*/
fallthrough;
case 0xDC:
scsi_cdrom_set_phase(dev, SCSI_PHASE_STATUS);
scsi_cdrom_stop(sc);
@@ -3303,7 +3292,6 @@ atapi_out:
scsi_cdrom_command_complete(dev);
break;
}
fallthrough;
case 0xC8:
if (!strcmp(cdrom_drive_types[dev->drv->type].internal_name, "MATSHITA_CD-ROM_CR-501_1.0b")) { /*GPCMD_PLAY_AUDIO_TRACK_INDEX_MATSUSHITA*/
cdb[0] = GPCMD_PLAY_AUDIO_TRACK_INDEX;
@@ -3332,8 +3320,8 @@ atapi_out:
scsi_cdrom_command_complete(dev);
else
scsi_cdrom_illegal_mode(dev);
break;
}
fallthrough;
case 0xC9:
if (!strcmp(cdrom_drive_types[dev->drv->type].internal_name, "MATSHITA_CD-ROM_CR-501_1.0b")) { /*GPCMD_PLAY_AUDIO_TRACK_RELATIVE_10_MATSUSHITA*/
cdb[0] = GPCMD_PLAY_AUDIO_TRACK_RELATIVE_10;
@@ -3368,7 +3356,6 @@ atapi_out:
scsi_cdrom_illegal_mode(dev);
break;
}
fallthrough;
case 0xCA:
if (!strcmp(cdrom_drive_types[dev->drv->type].internal_name, "PIONEER_CD-ROM_DRM-604X_2403")) { /*GPCMD_PAUSE_PIONEER*/
scsi_cdrom_set_phase(dev, SCSI_PHASE_STATUS);
@@ -3376,7 +3363,6 @@ atapi_out:
scsi_cdrom_command_complete(dev);
break;
}
fallthrough;
case 0xCB:
if (!strcmp(cdrom_drive_types[dev->drv->type].internal_name, "MATSHITA_CD-ROM_CR-501_1.0b")) { /*GPCMD_PAUSE_RESUME_MATSUSHITA*/
cdb[0] = GPCMD_PAUSE_RESUME;
@@ -3388,7 +3374,6 @@ atapi_out:
scsi_cdrom_command_complete(dev);
break;
}
fallthrough;
case 0xCC:
if (!strcmp(cdrom_drive_types[dev->drv->type].internal_name, "PIONEER_CD-ROM_DRM-604X_2403")) { /*GPCMD_PLAYBACK_STATUS_PIONEER*/
scsi_cdrom_set_phase(dev, SCSI_PHASE_DATA_IN);
@@ -3412,7 +3397,6 @@ atapi_out:
scsi_cdrom_data_command_finish(dev, len, len, len, 0);
break;
}
fallthrough;
case 0xE0:
if (!strcmp(cdrom_drive_types[dev->drv->type].internal_name, "PIONEER_CD-ROM_DRM-604X_2403")) { /*GPCMD_DRIVE_STATUS_PIONEER*/
scsi_cdrom_set_phase(dev, SCSI_PHASE_DATA_IN);
@@ -3448,14 +3432,12 @@ atapi_out:
scsi_cdrom_data_command_finish(dev, len, len, alloc_length, 0);
return;
}
fallthrough;
case 0xE5:
if (!strcmp(cdrom_drive_types[dev->drv->type].internal_name, "MATSHITA_CD-ROM_CR-501_1.0b")) { /*GPCMD_PLAY_AUDIO_12_MATSUSHITA*/
cdb[0] = GPCMD_PLAY_AUDIO_12;
dev->current_cdb[0] = cdb[0];
goto begin;
}
fallthrough;
case 0xE9:
if (!strcmp(cdrom_drive_types[dev->drv->type].internal_name, "MATSHITA_CD-ROM_CR-501_1.0b")) { /*GPCMD_PLAY_AUDIO_TRACK_RELATIVE_12_MATSUSHITA*/
cdb[0] = GPCMD_PLAY_AUDIO_TRACK_RELATIVE_12;

View File

@@ -248,18 +248,18 @@ spock_rethink_irqs(spock_t *scsi)
if (irq_pending) {
spock_log("IRQ issued\n");
scsi->irq_inactive = 0;
picintlevel(1 << scsi->irq, &scsi->irq_state);
picint(1 << scsi->irq);
} else {
/* No IRQs pending, clear IRQ state */
spock_log("IRQ cleared\n");
scsi->irq_status = 0;
scsi->irq_inactive = 1;
scsi->status &= ~STATUS_IRQ;
picintclevel(1 << scsi->irq, &scsi->irq_state);
picintc(1 << scsi->irq);
}
} else {
spock_log("IRQ disabled\n");
picintclevel(1 << scsi->irq, &scsi->irq_state);
picintc(1 << scsi->irq);
}
}