From 45ecdf37de7228c9f96ea0875a8cf66e52d59e74 Mon Sep 17 00:00:00 2001 From: TC1995 Date: Wed, 20 Sep 2023 23:14:00 +0200 Subject: [PATCH] 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. --- src/include/86box/cdrom.h | 8 ++++++-- src/scsi/scsi_cdrom.c | 20 +------------------- src/scsi/scsi_spock.c | 6 +++--- 3 files changed, 10 insertions(+), 24 deletions(-) diff --git a/src/include/86box/cdrom.h b/src/include/86box/cdrom.h index 5c9b9fc4f..761c9e13e 100644 --- a/src/include/86box/cdrom.h +++ b/src/include/86box/cdrom.h @@ -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); diff --git a/src/scsi/scsi_cdrom.c b/src/scsi/scsi_cdrom.c index cca446a7a..142df587c 100644 --- a/src/scsi/scsi_cdrom.c +++ b/src/scsi/scsi_cdrom.c @@ -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; diff --git a/src/scsi/scsi_spock.c b/src/scsi/scsi_spock.c index 6ce79f097..57a39a8d3 100644 --- a/src/scsi/scsi_spock.c +++ b/src/scsi/scsi_spock.c @@ -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); } }