From 6daab888d046e7e9ea526be6afa9341ba1c7c379 Mon Sep 17 00:00:00 2001 From: OBattler Date: Thu, 26 Sep 2019 10:16:09 +0200 Subject: [PATCH] Removed the SCSI_CHINON stuff from scsi/scsi.c that I forgot to remove before. --- src/scsi/scsi_cdrom.c | 107 ++++++++++++++--------------------------- src/scsi/scsi_device.h | 9 ++-- 2 files changed, 40 insertions(+), 76 deletions(-) diff --git a/src/scsi/scsi_cdrom.c b/src/scsi/scsi_cdrom.c index c1b312100..846ef8ef7 100644 --- a/src/scsi/scsi_cdrom.c +++ b/src/scsi/scsi_cdrom.c @@ -9,7 +9,7 @@ * Implementation of the CD-ROM drive with SCSI(-like) * commands, for both ATAPI and SCSI usage. * - * Version: @(#)scsi_cdrom.c 1.0.70 2019/03/11 + * Version: @(#)scsi_cdrom.c 1.0.71 2019/09/26 * * Author: Miran Grca, * @@ -83,8 +83,7 @@ const uint8_t scsi_cdrom_command_flags[0x100] = IMPLEMENTED | CHECK_READY, /* 0x1E */ 0, 0, 0, 0, 0, 0, /* 0x1F-0x24 */ IMPLEMENTED | CHECK_READY, /* 0x25 */ - 0 /*IMPLEMENTED | CHECK_READY | SCSI_ONLY*/, - 0, /* 0x26-0x27 */ + 0, 0, /* 0x26-0x27 */ IMPLEMENTED | CHECK_READY, /* 0x28 */ 0, 0, /* 0x29-0x2A */ IMPLEMENTED | CHECK_READY | NONDATA, /* 0x2B */ @@ -140,12 +139,9 @@ const uint8_t scsi_cdrom_command_flags[0x100] = IMPLEMENTED, /* 0xBD */ IMPLEMENTED | CHECK_READY, /* 0xBE */ IMPLEMENTED | CHECK_READY, /* 0xBF */ - IMPLEMENTED | CHECK_READY | SCSI_ONLY, /* 0xC0 */ - 0, /* 0xC1 */ - IMPLEMENTED | CHECK_READY | SCSI_ONLY, /* 0xC2 */ - 0, 0, 0, /* 0xC3-0xC5 */ - IMPLEMENTED | CHECK_READY | SCSI_ONLY, /* 0xC6 */ - 0, 0, 0, 0, 0, 0, /* 0xC7-0xCC */ + 0, 0, /* 0xC0-0xC1 */ + IMPLEMENTED | CHECK_READY | SCSI_ONLY, /* 0xC2 */ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0xC3-0xCC */ IMPLEMENTED | CHECK_READY | SCSI_ONLY, /* 0xCD */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0xCE-0xD9 */ IMPLEMENTED | SCSI_ONLY, /* 0xDA */ @@ -335,7 +331,7 @@ scsi_cdrom_log(const char *format, ...) static void scsi_cdrom_set_callback(scsi_cdrom_t *dev) { - if (dev && dev->drv && (dev->drv->bus_type != CDROM_BUS_SCSI && dev->drv->bus_type != CDROM_BUS_SCSI_CHINON)) + if (dev && dev->drv && (dev->drv->bus_type != CDROM_BUS_SCSI)) ide_set_callback(dev->drv->ide_channel >> 1, dev->callback); } @@ -374,7 +370,7 @@ scsi_cdrom_init(scsi_cdrom_t *dev) static int scsi_cdrom_current_mode(scsi_cdrom_t *dev) { - if (dev->drv->bus_type == CDROM_BUS_SCSI || dev->drv->bus_type == CDROM_BUS_SCSI_CHINON) + if (dev->drv->bus_type == CDROM_BUS_SCSI) return 2; else if (dev->drv->bus_type == CDROM_BUS_ATAPI) { scsi_cdrom_log("CD-ROM %i: ATAPI drive, setting to %s\n", dev->id, @@ -448,7 +444,7 @@ scsi_cdrom_mode_sense_load(scsi_cdrom_t *dev) memcpy(&dev->ms_pages_saved, &scsi_cdrom_mode_sense_pages_default, sizeof(mode_sense_pages_t)); memset(file_name, 0, 512 * sizeof(wchar_t)); - if (dev->drv->bus_type == CDROM_BUS_SCSI || dev->drv->bus_type == CDROM_BUS_SCSI_CHINON) + if (dev->drv->bus_type == CDROM_BUS_SCSI) swprintf(file_name, 512, L"scsi_cdrom_%02i_mode_sense_bin", dev->id); else swprintf(file_name, 512, L"cdrom_%02i_mode_sense_bin", dev->id); @@ -608,7 +604,7 @@ scsi_cdrom_update_request_length(scsi_cdrom_t *dev, int len, int block_len) static double scsi_cdrom_bus_speed(scsi_cdrom_t *dev) { - if (dev->drv->bus_type == CDROM_BUS_SCSI || dev->drv->bus_type == CDROM_BUS_SCSI_CHINON) { + if (dev->drv->bus_type == CDROM_BUS_SCSI) { dev->callback = -1.0; /* Speed depends on SCSI controller */ return 0.0; } else { @@ -746,13 +742,13 @@ static void scsi_cdrom_data_command_finish(scsi_cdrom_t *dev, int len, int block len = alloc_len; } if ((len == 0) || (scsi_cdrom_current_mode(dev) == 0)) { - if (dev->drv->bus_type != CDROM_BUS_SCSI && dev->drv->bus_type != CDROM_BUS_SCSI_CHINON) + if (dev->drv->bus_type != CDROM_BUS_SCSI) dev->packet_len = 0; scsi_cdrom_command_complete(dev); } else { if (scsi_cdrom_current_mode(dev) == 2) { - if (dev->drv->bus_type != CDROM_BUS_SCSI && dev->drv->bus_type != CDROM_BUS_SCSI_CHINON) + if (dev->drv->bus_type != CDROM_BUS_SCSI) dev->packet_len = alloc_len; if (direction == 0) @@ -785,7 +781,7 @@ scsi_cdrom_set_phase(scsi_cdrom_t *dev, uint8_t phase) { uint8_t scsi_id = dev->drv->scsi_device_id; - if (dev->drv->bus_type != CDROM_BUS_SCSI && dev->drv->bus_type != CDROM_BUS_SCSI_CHINON) + if (dev->drv->bus_type != CDROM_BUS_SCSI) return; scsi_devices[scsi_id].phase = phase; @@ -1185,7 +1181,7 @@ scsi_cdrom_pre_execution_check(scsi_cdrom_t *dev, uint8_t *cdb) { int ready = 0; - if (dev->drv->bus_type == CDROM_BUS_SCSI || dev->drv->bus_type == CDROM_BUS_SCSI_CHINON) { + if (dev->drv->bus_type == CDROM_BUS_SCSI) { if ((cdb[0] != GPCMD_REQUEST_SENSE) && (cdb[1] & 0xe0)) { scsi_cdrom_log("CD-ROM %i: Attempting to execute a unknown command targeted at SCSI LUN %i\n", dev->id, ((dev->request_length >> 5) & 7)); @@ -1196,7 +1192,7 @@ scsi_cdrom_pre_execution_check(scsi_cdrom_t *dev, uint8_t *cdb) if (!(scsi_cdrom_command_flags[cdb[0]] & IMPLEMENTED)) { scsi_cdrom_log("CD-ROM %i: Attempting to execute unknown command %02X over %s\n", dev->id, cdb[0], - (dev->drv->bus_type == CDROM_BUS_SCSI || dev->drv->bus_type == CDROM_BUS_SCSI_CHINON) ? "SCSI" : "ATAPI"); + (dev->drv->bus_type == CDROM_BUS_SCSI) ? "SCSI" : "ATAPI"); scsi_cdrom_illegal_opcode(dev); return 0; @@ -1208,7 +1204,7 @@ scsi_cdrom_pre_execution_check(scsi_cdrom_t *dev, uint8_t *cdb) return 0; } - if ((dev->drv->bus_type == CDROM_BUS_SCSI || dev->drv->bus_type == CDROM_BUS_SCSI_CHINON) && (scsi_cdrom_command_flags[cdb[0]] & ATAPI_ONLY)) { + if ((dev->drv->bus_type == CDROM_BUS_SCSI) && (scsi_cdrom_command_flags[cdb[0]] & ATAPI_ONLY)) { scsi_cdrom_log("CD-ROM %i: Attempting to execute ATAPI-only command %02X over SCSI\n", dev->id, cdb[0]); scsi_cdrom_illegal_opcode(dev); return 0; @@ -1362,7 +1358,7 @@ scsi_cdrom_request_sense_for_scsi(scsi_common_t *sc, uint8_t *buffer, uint8_t al static void scsi_cdrom_set_buf_len(scsi_cdrom_t *dev, int32_t *BufLen, int32_t *src_len) { - if (dev->drv->bus_type == CDROM_BUS_SCSI || dev->drv->bus_type == CDROM_BUS_SCSI_CHINON) { + if (dev->drv->bus_type == CDROM_BUS_SCSI) { if (*BufLen == -1) *BufLen = *src_len; else { @@ -1396,13 +1392,11 @@ scsi_cdrom_command(scsi_common_t *sc, uint8_t *cdb) int real_pos, track = 0; char device_identify[9] = { '8', '6', 'B', '_', 'C', 'D', '0', '0', 0 }; char device_identify_ex[15] = { '8', '6', 'B', '_', 'C', 'D', '0', '0', ' ', 'v', '1', '.', '0', '0', 0 }; - char device_identify_chinon[9] = { 'C', 'D', 'S', '-', '4', '3', '1', ' ', 0 }; - char device_identify_ex_chinon[15] = { 'C', 'D', 'S', '-', '4', '3', '1', ' ', ' ', 'H', '4', '2', ' ', ' ', 0 }; - int32_t blen = 0, *BufLen; + int32_t blen = 0, *BufLen; uint8_t *b; uint32_t profiles[2] = { MMC_PROFILE_CD_ROM, MMC_PROFILE_DVD_ROM }; - if (dev->drv->bus_type == CDROM_BUS_SCSI || dev->drv->bus_type == CDROM_BUS_SCSI_CHINON) { + if (dev->drv->bus_type == CDROM_BUS_SCSI) { BufLen = &scsi_devices[dev->drv->scsi_device_id].buffer_length; dev->status &= ~ERR_STAT; } else { @@ -1419,9 +1413,6 @@ scsi_cdrom_command(scsi_common_t *sc, uint8_t *cdb) device_identify_ex[10] = EMU_VERSION[0]; device_identify_ex[12] = EMU_VERSION[2]; device_identify_ex[13] = EMU_VERSION[3]; - - device_identify_chinon[7] = dev->id + 0x30; - device_identify_ex_chinon[7] = dev->id + 0x30; memcpy(dev->current_cdb, cdb, 12); @@ -1664,7 +1655,7 @@ scsi_cdrom_command(scsi_common_t *sc, uint8_t *cdb) case GPCMD_MODE_SENSE_10: scsi_cdrom_set_phase(dev, SCSI_PHASE_DATA_IN); - if (dev->drv->bus_type == CDROM_BUS_SCSI || dev->drv->bus_type == CDROM_BUS_SCSI_CHINON) + if (dev->drv->bus_type == CDROM_BUS_SCSI) block_desc = ((cdb[1] >> 3) & 1) ? 0 : 1; else block_desc = 0; @@ -1811,7 +1802,7 @@ scsi_cdrom_command(scsi_common_t *sc, uint8_t *cdb) b[2] = (2 << 2) | 0x02 | 0x01; /* persistent and current */ b[3] = 8; - if (dev->drv->bus_type == CDROM_BUS_SCSI || dev->drv->bus_type == CDROM_BUS_SCSI_CHINON) + if (dev->drv->bus_type == CDROM_BUS_SCSI) b[7] = 1; else b[7] = 2; @@ -2062,8 +2053,7 @@ scsi_cdrom_command(scsi_common_t *sc, uint8_t *cdb) else switch(cdb[3]) { case 0: /* SCSI-2: Q-type subchannel, ATAPI: reserved */ - alloc_length = (dev->drv->bus_type == CDROM_BUS_SCSI || - dev->drv->bus_type == CDROM_BUS_SCSI_CHINON) ? 48 : 4; + alloc_length = (dev->drv->bus_type == CDROM_BUS_SCSI) ? 48 : 4; break; case 1: alloc_length = 16; @@ -2092,13 +2082,13 @@ scsi_cdrom_command(scsi_common_t *sc, uint8_t *cdb) dev->buffer[1] = 0x11; break; case CD_STATUS_PAUSED: - dev->buffer[1] = dev->drv->bus_type == CDROM_BUS_SCSI_CHINON ? 0x15 : 0x12; + dev->buffer[1] = 0x12; break; case CD_STATUS_DATA_ONLY: - dev->buffer[1] = dev->drv->bus_type == CDROM_BUS_SCSI_CHINON ? 0x00 : 0x15; + dev->buffer[1] = 0x15; break; default: - dev->buffer[1] = dev->drv->bus_type == CDROM_BUS_SCSI_CHINON ? 0x00 : 0x13; + dev->buffer[1] = 0x13; break; } @@ -2144,13 +2134,6 @@ scsi_cdrom_command(scsi_common_t *sc, uint8_t *cdb) } break; - case GPCMD_CHINON_STOP: - case 0x26: - scsi_cdrom_set_phase(dev, SCSI_PHASE_STATUS); - scsi_cdrom_stop(sc); - scsi_cdrom_command_complete(dev); - break; - case GPCMD_START_STOP_UNIT: scsi_cdrom_set_phase(dev, SCSI_PHASE_STATUS); @@ -2174,13 +2157,6 @@ scsi_cdrom_command(scsi_common_t *sc, uint8_t *cdb) scsi_cdrom_command_complete(dev); break; - case GPCMD_CHINON_EJECT: - scsi_cdrom_set_phase(dev, SCSI_PHASE_STATUS); - scsi_cdrom_stop(sc); - cdrom_eject(dev->id); - scsi_cdrom_command_complete(dev); - break; - case GPCMD_INQUIRY: scsi_cdrom_set_phase(dev, SCSI_PHASE_DATA_IN); @@ -2225,15 +2201,9 @@ scsi_cdrom_command(scsi_common_t *sc, uint8_t *cdb) dev->buffer[idx++] = 0x01; dev->buffer[idx++] = 0x00; dev->buffer[idx++] = 68; - if (dev->drv->bus_type == CDROM_BUS_SCSI_CHINON) - ide_padstr8(dev->buffer + idx, 8, "CHINON"); /* Vendor */ - else - ide_padstr8(dev->buffer + idx, 8, EMU_NAME); /* Vendor */ + ide_padstr8(dev->buffer + idx, 8, EMU_NAME); /* Vendor */ idx += 8; - if (dev->drv->bus_type == CDROM_BUS_SCSI_CHINON) - ide_padstr8(dev->buffer + idx, 40, device_identify_ex_chinon); /* Product */ - else - ide_padstr8(dev->buffer + idx, 40, device_identify_ex); /* Product */ + ide_padstr8(dev->buffer + idx, 40, device_identify_ex); /* Product */ idx += 40; ide_padstr8(dev->buffer + idx, 20, "53R141"); /* Product */ @@ -2253,7 +2223,7 @@ scsi_cdrom_command(scsi_common_t *sc, uint8_t *cdb) dev->buffer[0] = 5; /*CD-ROM*/ dev->buffer[1] = 0x80; /*Removable*/ - if (dev->drv->bus_type == CDROM_BUS_SCSI || dev->drv->bus_type == CDROM_BUS_SCSI_CHINON) { + if (dev->drv->bus_type == CDROM_BUS_SCSI) { dev->buffer[2] = 0x02; dev->buffer[3] = 0x02; } @@ -2263,21 +2233,14 @@ scsi_cdrom_command(scsi_common_t *sc, uint8_t *cdb) } dev->buffer[4] = 31; - if (dev->drv->bus_type == CDROM_BUS_SCSI || dev->drv->bus_type == CDROM_BUS_SCSI_CHINON) { + if (dev->drv->bus_type == CDROM_BUS_SCSI) { dev->buffer[6] = 1; /* 16-bit transfers supported */ dev->buffer[7] = 0x20; /* Wide bus supported */ } - if (dev->drv->bus_type == CDROM_BUS_SCSI_CHINON) { - ide_padstr8(dev->buffer + 8, 8, "CHINON"); /* Vendor */ - ide_padstr8(dev->buffer + 16, 16, device_identify_chinon); /* Product */ - ide_padstr8(dev->buffer + 32, 4, "H42 "); /* Revision */ - } - else { - ide_padstr8(dev->buffer + 8, 8, EMU_NAME); /* Vendor */ - ide_padstr8(dev->buffer + 16, 16, device_identify); /* Product */ - ide_padstr8(dev->buffer + 32, 4, EMU_VERSION); /* Revision */ - } + ide_padstr8(dev->buffer + 8, 8, EMU_NAME); /* Vendor */ + ide_padstr8(dev->buffer + 16, 16, device_identify); /* Product */ + ide_padstr8(dev->buffer + 32, 4, EMU_VERSION); /* Revision */ idx = 36; @@ -2398,7 +2361,7 @@ scsi_cdrom_phase_data_out(scsi_common_t *sc) else hdr_len = 4; - if (dev->drv->bus_type == CDROM_BUS_SCSI || dev->drv->bus_type == CDROM_BUS_SCSI_CHINON) { + if (dev->drv->bus_type == CDROM_BUS_SCSI) { if (dev->current_cdb[0] == GPCMD_MODE_SELECT_6) { block_desc_len = dev->buffer[2]; block_desc_len <<= 8; @@ -2445,7 +2408,7 @@ scsi_cdrom_phase_data_out(scsi_common_t *sc) pos += page_len; - if (dev->drv->bus_type == CDROM_BUS_SCSI || dev->drv->bus_type == CDROM_BUS_SCSI_CHINON) + if (dev->drv->bus_type == CDROM_BUS_SCSI) val = scsi_cdrom_mode_sense_pages_default_scsi.pages[page][0] & 0x80; else val = scsi_cdrom_mode_sense_pages_default.pages[page][0] & 0x80; @@ -2575,7 +2538,7 @@ scsi_cdrom_drive_reset(int c) ide_t *id; /* Make sure to ignore any SCSI CD-ROM drive that has an out of range ID. */ - if ((drv->bus_type == CDROM_BUS_SCSI || drv->bus_type == CDROM_BUS_SCSI_CHINON) && (drv->scsi_device_id > SCSI_ID_MAX)) + if ((drv->bus_type == CDROM_BUS_SCSI) && (drv->scsi_device_id > SCSI_ID_MAX)) return; /* Make sure to ignore any ATAPI CD-ROM drive that has an out of range IDE channel. */ @@ -2598,7 +2561,7 @@ scsi_cdrom_drive_reset(int c) scsi_cdrom_init(dev); - if (drv->bus_type == CDROM_BUS_SCSI || drv->bus_type == CDROM_BUS_SCSI_CHINON) { + if (drv->bus_type == CDROM_BUS_SCSI) { /* SCSI CD-ROM, attach to the SCSI bus. */ sd = &scsi_devices[drv->scsi_device_id]; diff --git a/src/scsi/scsi_device.h b/src/scsi/scsi_device.h index 883d9efc2..f989d7423 100644 --- a/src/scsi/scsi_device.h +++ b/src/scsi/scsi_device.h @@ -8,10 +8,13 @@ * * Definitions for the generic SCSI device command handler. * - * Version: @(#)scsi_device.h 1.0.16 2018/10/31 + * Version: @(#)scsi_device.h 1.0.17 2019/09/26 * * Authors: Miran Grca, * Fred N. van Kempen, + * + * Copyright 2016-2019 Miran Grca. + * Copyright 2017-2019 Fred N. van Kempen. */ #ifndef SCSI_DEVICE_H # define SCSI_DEVICE_H @@ -100,9 +103,7 @@ #define GPCMD_MECHANISM_STATUS 0xbd #define GPCMD_READ_CD 0xbe #define GPCMD_SEND_DVD_STRUCTURE 0xbf /* This is for writing only, irrelevant to PCem. */ -#define GPCMD_CHINON_EJECT 0xc0 /*Vendor Unique*/ -#define GPCMD_PAUSE_RESUME_ALT 0xc2 -#define GPCMD_CHINON_STOP 0xc6 /*Vendor Unique*/ +#define GPCMD_PAUSE_RESUME_ALT 0xc2 #define GPCMD_SCAN_ALT 0xcd /* Should be equivalent to 0xba */ #define GPCMD_SET_SPEED_ALT 0xda /* Should be equivalent to 0xbb */