Added the NCR 53c815 and 53c820, and made sure the 53c810 and the 53c820 do not have the BIOS option as real ones do not have a BIOS BAR, while the 53c815 and 53c825 do (they are basically 53c810 and 53c820, respectively, with own BIOS support);
Roughly implemented the SCSI IDENTIFY message LUN operation, fixes some SCSI controller drivers in some situations; Added an undocumented CMD640 IDE controller register required by Linux and by a DOS driver.
This commit is contained in:
@@ -133,6 +133,9 @@ cmd640_common_write(int addr, uint8_t val, cmd640_t *dev)
|
||||
case 0x57:
|
||||
dev->regs[addr] = val & 0xdc;
|
||||
break;
|
||||
case 0x5b: /* Undocumented register that Linux attempts to use! */
|
||||
dev->regs[addr] = val;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -1160,7 +1160,7 @@ mo_pre_execution_check(mo_t *dev, uint8_t *cdb)
|
||||
int ready = 0;
|
||||
|
||||
if (dev->drv->bus_type == MO_BUS_SCSI) {
|
||||
if ((cdb[0] != GPCMD_REQUEST_SENSE) && (cdb[1] & 0xe0)) {
|
||||
if ((cdb[0] != GPCMD_REQUEST_SENSE) && (dev->cur_lun == SCSI_LUN_USE_CDB) && (cdb[1] & 0xe0)) {
|
||||
mo_log("MO %i: Attempting to execute a unknown command targeted at SCSI LUN %i\n", dev->id, ((dev->request_length >> 5) & 7));
|
||||
mo_invalid_lun(dev);
|
||||
return 0;
|
||||
@@ -1260,6 +1260,7 @@ mo_reset(scsi_common_t *sc)
|
||||
dev->request_length = 0xEB14;
|
||||
dev->packet_status = PHASE_NONE;
|
||||
dev->unit_attention = 0;
|
||||
dev->cur_lun = SCSI_LUN_USE_CDB;
|
||||
}
|
||||
|
||||
|
||||
@@ -2121,6 +2122,7 @@ mo_drive_reset(int c)
|
||||
dev = (mo_t *) mo_drives[c].priv;
|
||||
|
||||
dev->id = c;
|
||||
dev->cur_lun = SCSI_LUN_USE_CDB;
|
||||
|
||||
if (mo_drives[c].bus_type == MO_BUS_SCSI) {
|
||||
/* SCSI MO, attach to the SCSI bus. */
|
||||
|
||||
@@ -1227,7 +1227,7 @@ zip_pre_execution_check(zip_t *dev, uint8_t *cdb)
|
||||
int ready = 0;
|
||||
|
||||
if (dev->drv->bus_type == ZIP_BUS_SCSI) {
|
||||
if ((cdb[0] != GPCMD_REQUEST_SENSE) && (cdb[1] & 0xe0)) {
|
||||
if ((cdb[0] != GPCMD_REQUEST_SENSE) && (dev->cur_lun == SCSI_LUN_USE_CDB) && (cdb[1] & 0xe0)) {
|
||||
zip_log("ZIP %i: Attempting to execute a unknown command targeted at SCSI LUN %i\n", dev->id, ((dev->request_length >> 5) & 7));
|
||||
zip_invalid_lun(dev);
|
||||
return 0;
|
||||
@@ -1327,6 +1327,7 @@ zip_reset(scsi_common_t *sc)
|
||||
dev->request_length = 0xEB14;
|
||||
dev->packet_status = PHASE_NONE;
|
||||
dev->unit_attention = 0;
|
||||
dev->cur_lun = SCSI_LUN_USE_CDB;
|
||||
}
|
||||
|
||||
|
||||
@@ -2338,6 +2339,7 @@ zip_drive_reset(int c)
|
||||
dev = (zip_t *) zip_drives[c].priv;
|
||||
|
||||
dev->id = c;
|
||||
dev->cur_lun = SCSI_LUN_USE_CDB;
|
||||
|
||||
if (zip_drives[c].bus_type == ZIP_BUS_SCSI) {
|
||||
/* SCSI ZIP, attach to the SCSI bus. */
|
||||
|
||||
Reference in New Issue
Block a user