Fixed ESDI hung-up issue when ctrl+alt+del reset

This commit is contained in:
Akamaki
2024-08-16 23:07:24 +09:00
committed by GitHub
parent 935c8b6ed8
commit 6aec2f04dd

View File

@@ -1259,9 +1259,12 @@ esdi_mca_feedb(void *priv)
static void esdi_reset(void* priv)
{
esdi_t* dev = (esdi_t*)priv;
dev->in_reset = 1;
esdi_mca_set_callback(dev, ESDI_TIME * 50);
dev->status = STATUS_BUSY;
pclog("esdi reset %d %x\n", dev->in_reset, dev->status);
if (!dev->in_reset) {
dev->in_reset = 1;
esdi_mca_set_callback(dev, ESDI_TIME * 50);
dev->status = STATUS_BUSY;
}
}
static void *
@@ -1272,6 +1275,7 @@ esdi_init(UNUSED(const device_t *info))
uint8_t c;
uint8_t i;
pclog("esdi init\n");
dev = malloc(sizeof(esdi_t));
if (dev == NULL)
return (NULL);
@@ -1334,9 +1338,9 @@ esdi_init(UNUSED(const device_t *info))
/* The slot number of this controller is fixed by the planar. IBM PS/55 5551-T assigns it #5. */
int slotno = device_get_config_int("in_esdi_slot");
if (slotno)
mca_add_to_slot(esdi_mca_read, esdi_integrated_mca_write, esdi_mca_feedb, NULL, dev, slotno - 1);
mca_add_to_slot(esdi_mca_read, esdi_integrated_mca_write, esdi_mca_feedb, esdi_reset, dev, slotno - 1);
else
mca_add(esdi_mca_read, esdi_integrated_mca_write, esdi_mca_feedb, NULL, dev);
mca_add(esdi_mca_read, esdi_integrated_mca_write, esdi_mca_feedb, esdi_reset, dev);
}
else
mca_add(esdi_mca_read, esdi_mca_write, esdi_mca_feedb, NULL, dev);
@@ -1348,6 +1352,7 @@ esdi_init(UNUSED(const device_t *info))
/* Set the reply timer. */
timer_add(&dev->timer, esdi_callback, dev, 0);
pclog("esdi init finish\n");
return dev;
}