Fix CMD640 to not reset IDE devices it does not control.
This commit is contained in:
@@ -373,17 +373,41 @@ cmd640_reset(void *priv)
|
|||||||
{
|
{
|
||||||
cmd640_t *dev = (cmd640_t *) priv;
|
cmd640_t *dev = (cmd640_t *) priv;
|
||||||
int i = 0;
|
int i = 0;
|
||||||
|
int min_channel;
|
||||||
|
int max_channel;
|
||||||
|
|
||||||
|
switch (dev->channels) {
|
||||||
|
default:
|
||||||
|
case 0x00:
|
||||||
|
min_channel = max_channel = 0;
|
||||||
|
break;
|
||||||
|
case 0x01:
|
||||||
|
min_channel = 0;
|
||||||
|
max_channel = 1;
|
||||||
|
break;
|
||||||
|
case 0x02:
|
||||||
|
min_channel = 2;
|
||||||
|
max_channel = 3;
|
||||||
|
break;
|
||||||
|
case 0x03:
|
||||||
|
min_channel = 0;
|
||||||
|
max_channel = 3;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
for (i = 0; i < CDROM_NUM; i++) {
|
for (i = 0; i < CDROM_NUM; i++) {
|
||||||
if ((cdrom[i].bus_type == CDROM_BUS_ATAPI) && (cdrom[i].ide_channel < 4) && cdrom[i].priv)
|
if ((cdrom[i].bus_type == CDROM_BUS_ATAPI) && (cdrom[i].ide_channel >= min_channel) &&
|
||||||
|
(cdrom[i].ide_channel <= max_channel) && cdrom[i].priv)
|
||||||
scsi_cdrom_reset((scsi_common_t *) cdrom[i].priv);
|
scsi_cdrom_reset((scsi_common_t *) cdrom[i].priv);
|
||||||
}
|
}
|
||||||
for (i = 0; i < ZIP_NUM; i++) {
|
for (i = 0; i < ZIP_NUM; i++) {
|
||||||
if ((zip_drives[i].bus_type == ZIP_BUS_ATAPI) && (zip_drives[i].ide_channel < 4) && zip_drives[i].priv)
|
if ((zip_drives[i].bus_type == ZIP_BUS_ATAPI) && (zip_drives[i].ide_channel >= min_channel) &&
|
||||||
|
(zip_drives[i].ide_channel <= max_channel) && zip_drives[i].priv)
|
||||||
zip_reset((scsi_common_t *) zip_drives[i].priv);
|
zip_reset((scsi_common_t *) zip_drives[i].priv);
|
||||||
}
|
}
|
||||||
for (i = 0; i < MO_NUM; i++) {
|
for (i = 0; i < MO_NUM; i++) {
|
||||||
if ((mo_drives[i].bus_type == MO_BUS_ATAPI) && (mo_drives[i].ide_channel < 4) && mo_drives[i].priv)
|
if ((mo_drives[i].bus_type == MO_BUS_ATAPI) && (mo_drives[i].ide_channel >= min_channel) &&
|
||||||
|
(mo_drives[i].ide_channel <= max_channel) && mo_drives[i].priv)
|
||||||
mo_reset((scsi_common_t *) mo_drives[i].priv);
|
mo_reset((scsi_common_t *) mo_drives[i].priv);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user