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:
@@ -198,8 +198,8 @@ typedef struct cdrom {
|
|||||||
|
|
||||||
void *image;
|
void *image;
|
||||||
|
|
||||||
void (*insert)(void *p);
|
void (*insert)(void *priv);
|
||||||
void (*close)(void *p);
|
void (*close)(void *priv);
|
||||||
uint32_t (*get_volume)(void *p, int channel);
|
uint32_t (*get_volume)(void *p, int channel);
|
||||||
uint32_t (*get_channel)(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_close(cdrom_t *dev);
|
||||||
extern void cdrom_image_reset(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,
|
extern void cdrom_update_cdb(uint8_t *cdb, int lba_pos,
|
||||||
int number_of_blocks);
|
int number_of_blocks);
|
||||||
|
|
||||||
|
|||||||
@@ -1002,7 +1002,6 @@ scsi_cdrom_command_common(scsi_cdrom_t *dev)
|
|||||||
bytes_per_second *= (double) dev->drv->cur_speed;
|
bytes_per_second *= (double) dev->drv->cur_speed;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
fallthrough;
|
|
||||||
case 0xc0:
|
case 0xc0:
|
||||||
if (!strcmp(cdrom_drive_types[dev->drv->type].internal_name, "SONY_CD-ROM_CDU-541_1.0i") ||
|
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") ||
|
||||||
@@ -1013,7 +1012,6 @@ scsi_cdrom_command_common(scsi_cdrom_t *dev)
|
|||||||
bytes_per_second *= (double) dev->drv->cur_speed;
|
bytes_per_second *= (double) dev->drv->cur_speed;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
fallthrough;
|
|
||||||
case 0xc1:
|
case 0xc1:
|
||||||
if (!strcmp(cdrom_drive_types[dev->drv->type].internal_name, "SONY_CD-ROM_CDU-541_1.0i") ||
|
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") ||
|
||||||
@@ -1025,7 +1023,6 @@ scsi_cdrom_command_common(scsi_cdrom_t *dev)
|
|||||||
bytes_per_second *= (double) dev->drv->cur_speed;
|
bytes_per_second *= (double) dev->drv->cur_speed;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
fallthrough;
|
|
||||||
case 0xc2:
|
case 0xc2:
|
||||||
if (!strcmp(cdrom_drive_types[dev->drv->type].internal_name, "SONY_CD-ROM_CDU-541_1.0i") ||
|
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") ||
|
||||||
@@ -1038,7 +1035,6 @@ scsi_cdrom_command_common(scsi_cdrom_t *dev)
|
|||||||
bytes_per_second *= (double) dev->drv->cur_speed;
|
bytes_per_second *= (double) dev->drv->cur_speed;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
fallthrough;
|
|
||||||
case 0xc3:
|
case 0xc3:
|
||||||
if (!strcmp(cdrom_drive_types[dev->drv->type].internal_name, "SONY_CD-ROM_CDU-541_1.0i") ||
|
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") ||
|
||||||
@@ -1050,7 +1046,6 @@ scsi_cdrom_command_common(scsi_cdrom_t *dev)
|
|||||||
bytes_per_second *= (double) dev->drv->cur_speed;
|
bytes_per_second *= (double) dev->drv->cur_speed;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
fallthrough;
|
|
||||||
case 0xdd:
|
case 0xdd:
|
||||||
case 0xde:
|
case 0xde:
|
||||||
if (!strcmp(cdrom_drive_types[dev->drv->type].internal_name, "NEC_CD-ROM_DRIVE38_1.03") ||
|
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);
|
scsi_cdrom_command_complete(dev);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
fallthrough;
|
|
||||||
case GPCMD_SET_SPEED:
|
case GPCMD_SET_SPEED:
|
||||||
dev->drv->cur_speed = (cdb[3] | (cdb[2] << 8)) / 176;
|
dev->drv->cur_speed = (cdb[3] | (cdb[2] << 8)) / 176;
|
||||||
if (dev->drv->cur_speed < 1)
|
if (dev->drv->cur_speed < 1)
|
||||||
@@ -1957,7 +1951,6 @@ begin:
|
|||||||
dev->sony_vendor = 1;
|
dev->sony_vendor = 1;
|
||||||
goto begin;
|
goto begin;
|
||||||
} /*GPCMD_READ_DISC_INFORMATION_TOSHIBA*/
|
} /*GPCMD_READ_DISC_INFORMATION_TOSHIBA*/
|
||||||
fallthrough;
|
|
||||||
case 0xDE: /*GPCMD_READ_DISC_INFORMATION_NEC*/
|
case 0xDE: /*GPCMD_READ_DISC_INFORMATION_NEC*/
|
||||||
scsi_cdrom_set_phase(dev, SCSI_PHASE_DATA_IN);
|
scsi_cdrom_set_phase(dev, SCSI_PHASE_DATA_IN);
|
||||||
scsi_cdrom_buf_alloc(dev, 4);
|
scsi_cdrom_buf_alloc(dev, 4);
|
||||||
@@ -2494,7 +2487,6 @@ begin:
|
|||||||
scsi_cdrom_command_complete(dev);
|
scsi_cdrom_command_complete(dev);
|
||||||
break;
|
break;
|
||||||
} /*GPCMD_AUDIO_TRACK_SEARCH_TOSHIBA and GPCMD_EJECT_CHINON*/
|
} /*GPCMD_AUDIO_TRACK_SEARCH_TOSHIBA and GPCMD_EJECT_CHINON*/
|
||||||
fallthrough;
|
|
||||||
case 0xD8: /*GPCMD_AUDIO_TRACK_SEARCH_NEC*/
|
case 0xD8: /*GPCMD_AUDIO_TRACK_SEARCH_NEC*/
|
||||||
if (!strcmp(cdrom_drive_types[dev->drv->type].internal_name, "CHINON_CD-ROM_CDS-431_H42")) {
|
if (!strcmp(cdrom_drive_types[dev->drv->type].internal_name, "CHINON_CD-ROM_CDS-431_H42")) {
|
||||||
scsi_cdrom_set_phase(dev, SCSI_PHASE_STATUS);
|
scsi_cdrom_set_phase(dev, SCSI_PHASE_STATUS);
|
||||||
@@ -2572,7 +2564,6 @@ begin:
|
|||||||
scsi_cdrom_data_command_finish(dev, len, len, len, 0);
|
scsi_cdrom_data_command_finish(dev, len, len, len, 0);
|
||||||
return;
|
return;
|
||||||
} /*GPCMD_PLAY_AUDIO_TOSHIBA*/
|
} /*GPCMD_PLAY_AUDIO_TOSHIBA*/
|
||||||
fallthrough;
|
|
||||||
case 0xD9: /*GPCMD_PLAY_AUDIO_NEC*/
|
case 0xD9: /*GPCMD_PLAY_AUDIO_NEC*/
|
||||||
scsi_cdrom_set_phase(dev, SCSI_PHASE_STATUS);
|
scsi_cdrom_set_phase(dev, SCSI_PHASE_STATUS);
|
||||||
if ((dev->drv->host_drive < 1) || (dev->drv->cd_status <= CD_STATUS_DATA_ONLY)) {
|
if ((dev->drv->host_drive < 1) || (dev->drv->cd_status <= CD_STATUS_DATA_ONLY)) {
|
||||||
@@ -2759,7 +2750,6 @@ begin:
|
|||||||
scsi_cdrom_illegal_mode(dev);
|
scsi_cdrom_illegal_mode(dev);
|
||||||
break;
|
break;
|
||||||
} /*GPCMD_READ_SUBCODEQ_PLAYING_STATUS_TOSHIBA and GPCMD_STOP_CHINON*/
|
} /*GPCMD_READ_SUBCODEQ_PLAYING_STATUS_TOSHIBA and GPCMD_STOP_CHINON*/
|
||||||
fallthrough;
|
|
||||||
case 0xDD: /*GPCMD_READ_SUBCODEQ_PLAYING_STATUS_NEC*/
|
case 0xDD: /*GPCMD_READ_SUBCODEQ_PLAYING_STATUS_NEC*/
|
||||||
if (!strcmp(cdrom_drive_types[dev->drv->type].internal_name, "CHINON_CD-ROM_CDS-431_H42")) {
|
if (!strcmp(cdrom_drive_types[dev->drv->type].internal_name, "CHINON_CD-ROM_CDS-431_H42")) {
|
||||||
scsi_cdrom_set_phase(dev, SCSI_PHASE_STATUS);
|
scsi_cdrom_set_phase(dev, SCSI_PHASE_STATUS);
|
||||||
@@ -2903,7 +2893,6 @@ begin:
|
|||||||
scsi_cdrom_data_command_finish(dev, len, len, len, 0);
|
scsi_cdrom_data_command_finish(dev, len, len, len, 0);
|
||||||
break;
|
break;
|
||||||
} /*GPCMD_CADDY_EJECT_TOSHIBA and GPCMD_CADDY_EJECT_NEC*/
|
} /*GPCMD_CADDY_EJECT_TOSHIBA and GPCMD_CADDY_EJECT_NEC*/
|
||||||
fallthrough;
|
|
||||||
case 0xDC:
|
case 0xDC:
|
||||||
scsi_cdrom_set_phase(dev, SCSI_PHASE_STATUS);
|
scsi_cdrom_set_phase(dev, SCSI_PHASE_STATUS);
|
||||||
scsi_cdrom_stop(sc);
|
scsi_cdrom_stop(sc);
|
||||||
@@ -3303,7 +3292,6 @@ atapi_out:
|
|||||||
scsi_cdrom_command_complete(dev);
|
scsi_cdrom_command_complete(dev);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
fallthrough;
|
|
||||||
case 0xC8:
|
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*/
|
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;
|
cdb[0] = GPCMD_PLAY_AUDIO_TRACK_INDEX;
|
||||||
@@ -3332,8 +3320,8 @@ atapi_out:
|
|||||||
scsi_cdrom_command_complete(dev);
|
scsi_cdrom_command_complete(dev);
|
||||||
else
|
else
|
||||||
scsi_cdrom_illegal_mode(dev);
|
scsi_cdrom_illegal_mode(dev);
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
fallthrough;
|
|
||||||
case 0xC9:
|
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*/
|
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;
|
cdb[0] = GPCMD_PLAY_AUDIO_TRACK_RELATIVE_10;
|
||||||
@@ -3368,7 +3356,6 @@ atapi_out:
|
|||||||
scsi_cdrom_illegal_mode(dev);
|
scsi_cdrom_illegal_mode(dev);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
fallthrough;
|
|
||||||
case 0xCA:
|
case 0xCA:
|
||||||
if (!strcmp(cdrom_drive_types[dev->drv->type].internal_name, "PIONEER_CD-ROM_DRM-604X_2403")) { /*GPCMD_PAUSE_PIONEER*/
|
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);
|
scsi_cdrom_set_phase(dev, SCSI_PHASE_STATUS);
|
||||||
@@ -3376,7 +3363,6 @@ atapi_out:
|
|||||||
scsi_cdrom_command_complete(dev);
|
scsi_cdrom_command_complete(dev);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
fallthrough;
|
|
||||||
case 0xCB:
|
case 0xCB:
|
||||||
if (!strcmp(cdrom_drive_types[dev->drv->type].internal_name, "MATSHITA_CD-ROM_CR-501_1.0b")) { /*GPCMD_PAUSE_RESUME_MATSUSHITA*/
|
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;
|
cdb[0] = GPCMD_PAUSE_RESUME;
|
||||||
@@ -3388,7 +3374,6 @@ atapi_out:
|
|||||||
scsi_cdrom_command_complete(dev);
|
scsi_cdrom_command_complete(dev);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
fallthrough;
|
|
||||||
case 0xCC:
|
case 0xCC:
|
||||||
if (!strcmp(cdrom_drive_types[dev->drv->type].internal_name, "PIONEER_CD-ROM_DRM-604X_2403")) { /*GPCMD_PLAYBACK_STATUS_PIONEER*/
|
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);
|
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);
|
scsi_cdrom_data_command_finish(dev, len, len, len, 0);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
fallthrough;
|
|
||||||
case 0xE0:
|
case 0xE0:
|
||||||
if (!strcmp(cdrom_drive_types[dev->drv->type].internal_name, "PIONEER_CD-ROM_DRM-604X_2403")) { /*GPCMD_DRIVE_STATUS_PIONEER*/
|
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);
|
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);
|
scsi_cdrom_data_command_finish(dev, len, len, alloc_length, 0);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
fallthrough;
|
|
||||||
case 0xE5:
|
case 0xE5:
|
||||||
if (!strcmp(cdrom_drive_types[dev->drv->type].internal_name, "MATSHITA_CD-ROM_CR-501_1.0b")) { /*GPCMD_PLAY_AUDIO_12_MATSUSHITA*/
|
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;
|
cdb[0] = GPCMD_PLAY_AUDIO_12;
|
||||||
dev->current_cdb[0] = cdb[0];
|
dev->current_cdb[0] = cdb[0];
|
||||||
goto begin;
|
goto begin;
|
||||||
}
|
}
|
||||||
fallthrough;
|
|
||||||
case 0xE9:
|
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*/
|
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;
|
cdb[0] = GPCMD_PLAY_AUDIO_TRACK_RELATIVE_12;
|
||||||
|
|||||||
@@ -248,18 +248,18 @@ spock_rethink_irqs(spock_t *scsi)
|
|||||||
if (irq_pending) {
|
if (irq_pending) {
|
||||||
spock_log("IRQ issued\n");
|
spock_log("IRQ issued\n");
|
||||||
scsi->irq_inactive = 0;
|
scsi->irq_inactive = 0;
|
||||||
picintlevel(1 << scsi->irq, &scsi->irq_state);
|
picint(1 << scsi->irq);
|
||||||
} else {
|
} else {
|
||||||
/* No IRQs pending, clear IRQ state */
|
/* No IRQs pending, clear IRQ state */
|
||||||
spock_log("IRQ cleared\n");
|
spock_log("IRQ cleared\n");
|
||||||
scsi->irq_status = 0;
|
scsi->irq_status = 0;
|
||||||
scsi->irq_inactive = 1;
|
scsi->irq_inactive = 1;
|
||||||
scsi->status &= ~STATUS_IRQ;
|
scsi->status &= ~STATUS_IRQ;
|
||||||
picintclevel(1 << scsi->irq, &scsi->irq_state);
|
picintc(1 << scsi->irq);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
spock_log("IRQ disabled\n");
|
spock_log("IRQ disabled\n");
|
||||||
picintclevel(1 << scsi->irq, &scsi->irq_state);
|
picintc(1 << scsi->irq);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user