ESDI: fix drive status icon updating
This commit is contained in:
@@ -317,6 +317,7 @@ esdi_write(uint16_t port, uint8_t val, void *priv)
|
|||||||
esdi->command &= ~0x0f; /*mask off step rate*/
|
esdi->command &= ~0x0f; /*mask off step rate*/
|
||||||
esdi->status = STAT_BUSY;
|
esdi->status = STAT_BUSY;
|
||||||
esdi_set_callback(esdi, 200 * HDC_TIME);
|
esdi_set_callback(esdi, 200 * HDC_TIME);
|
||||||
|
ui_sb_update_icon(SB_HDD|HDD_BUS_ESDI, 1);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case CMD_SEEK:
|
case CMD_SEEK:
|
||||||
@@ -325,6 +326,7 @@ esdi_write(uint16_t port, uint8_t val, void *priv)
|
|||||||
get_sector(esdi, &addr);
|
get_sector(esdi, &addr);
|
||||||
seek_time = hdd_seek_get_time(&hdd[esdi->drives[esdi->drive_sel].hdd_num], addr, HDD_OP_SEEK, 0, 0.0);
|
seek_time = hdd_seek_get_time(&hdd[esdi->drives[esdi->drive_sel].hdd_num], addr, HDD_OP_SEEK, 0, 0.0);
|
||||||
esdi_set_callback(esdi, seek_time);
|
esdi_set_callback(esdi, seek_time);
|
||||||
|
ui_sb_update_icon(SB_HDD|HDD_BUS_ESDI, 1);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
@@ -349,6 +351,7 @@ esdi_write(uint16_t port, uint8_t val, void *priv)
|
|||||||
seek_time = hdd_timing_read(&hdd[esdi->drives[esdi->drive_sel].hdd_num], addr, 1);
|
seek_time = hdd_timing_read(&hdd[esdi->drives[esdi->drive_sel].hdd_num], addr, 1);
|
||||||
xfer_time = esdi_get_xfer_time(esdi, 1);
|
xfer_time = esdi_get_xfer_time(esdi, 1);
|
||||||
esdi_set_callback(esdi, seek_time + xfer_time);
|
esdi_set_callback(esdi, seek_time + xfer_time);
|
||||||
|
ui_sb_update_icon(SB_HDD|HDD_BUS_ESDI, 1);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case CMD_WRITE:
|
case CMD_WRITE:
|
||||||
@@ -360,6 +363,7 @@ esdi_write(uint16_t port, uint8_t val, void *priv)
|
|||||||
fatal("Write with ECC\n");
|
fatal("Write with ECC\n");
|
||||||
esdi->status = STAT_READY | STAT_DRQ | STAT_DSC;
|
esdi->status = STAT_READY | STAT_DRQ | STAT_DSC;
|
||||||
esdi->pos = 0;
|
esdi->pos = 0;
|
||||||
|
ui_sb_update_icon(SB_HDD|HDD_BUS_ESDI, 1);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case CMD_VERIFY:
|
case CMD_VERIFY:
|
||||||
@@ -370,11 +374,13 @@ esdi_write(uint16_t port, uint8_t val, void *priv)
|
|||||||
seek_time = hdd_timing_read(&hdd[esdi->drives[esdi->drive_sel].hdd_num], addr, 1);
|
seek_time = hdd_timing_read(&hdd[esdi->drives[esdi->drive_sel].hdd_num], addr, 1);
|
||||||
xfer_time = esdi_get_xfer_time(esdi, 1);
|
xfer_time = esdi_get_xfer_time(esdi, 1);
|
||||||
esdi_set_callback(esdi, seek_time + xfer_time);
|
esdi_set_callback(esdi, seek_time + xfer_time);
|
||||||
|
ui_sb_update_icon(SB_HDD|HDD_BUS_ESDI, 1);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case CMD_FORMAT:
|
case CMD_FORMAT:
|
||||||
esdi->status = STAT_DRQ;
|
esdi->status = STAT_DRQ;
|
||||||
esdi->pos = 0;
|
esdi->pos = 0;
|
||||||
|
ui_sb_update_icon(SB_HDD|HDD_BUS_ESDI, 1);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case CMD_SET_PARAMETERS: /* Initialize Drive Parameters */
|
case CMD_SET_PARAMETERS: /* Initialize Drive Parameters */
|
||||||
@@ -385,6 +391,7 @@ esdi_write(uint16_t port, uint8_t val, void *priv)
|
|||||||
case CMD_DIAGNOSE: /* Execute Drive Diagnostics */
|
case CMD_DIAGNOSE: /* Execute Drive Diagnostics */
|
||||||
esdi->status = STAT_BUSY;
|
esdi->status = STAT_BUSY;
|
||||||
esdi_set_callback(esdi, 200 * HDC_TIME);
|
esdi_set_callback(esdi, 200 * HDC_TIME);
|
||||||
|
ui_sb_update_icon(SB_HDD|HDD_BUS_ESDI, 1);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 0xe0: /*???*/
|
case 0xe0: /*???*/
|
||||||
@@ -543,6 +550,7 @@ esdi_callback(void *priv)
|
|||||||
esdi->status = STAT_READY|STAT_DSC;
|
esdi->status = STAT_READY|STAT_DSC;
|
||||||
}
|
}
|
||||||
irq_raise(esdi);
|
irq_raise(esdi);
|
||||||
|
ui_sb_update_icon(SB_HDD|HDD_BUS_ESDI, 0);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case CMD_SEEK:
|
case CMD_SEEK:
|
||||||
@@ -552,6 +560,7 @@ esdi_callback(void *priv)
|
|||||||
} else
|
} else
|
||||||
esdi->status = STAT_READY|STAT_DSC;
|
esdi->status = STAT_READY|STAT_DSC;
|
||||||
irq_raise(esdi);
|
irq_raise(esdi);
|
||||||
|
ui_sb_update_icon(SB_HDD|HDD_BUS_ESDI, 0);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case CMD_READ:
|
case CMD_READ:
|
||||||
@@ -571,7 +580,6 @@ esdi_callback(void *priv)
|
|||||||
esdi->pos = 0;
|
esdi->pos = 0;
|
||||||
esdi->status = STAT_DRQ|STAT_READY|STAT_DSC;
|
esdi->status = STAT_DRQ|STAT_READY|STAT_DSC;
|
||||||
irq_raise(esdi);
|
irq_raise(esdi);
|
||||||
ui_sb_update_icon(SB_HDD|HDD_BUS_ESDI, 1);
|
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
@@ -580,12 +588,14 @@ esdi_callback(void *priv)
|
|||||||
esdi->status = STAT_READY|STAT_ERR|STAT_DSC;
|
esdi->status = STAT_READY|STAT_ERR|STAT_DSC;
|
||||||
esdi->error = ERR_ABRT;
|
esdi->error = ERR_ABRT;
|
||||||
irq_raise(esdi);
|
irq_raise(esdi);
|
||||||
|
ui_sb_update_icon(SB_HDD|HDD_BUS_ESDI, 0);
|
||||||
break;
|
break;
|
||||||
} else {
|
} else {
|
||||||
if (get_sector(esdi, &addr)) {
|
if (get_sector(esdi, &addr)) {
|
||||||
esdi->error = ERR_ID_NOT_FOUND;
|
esdi->error = ERR_ID_NOT_FOUND;
|
||||||
esdi->status = STAT_READY|STAT_DSC|STAT_ERR;
|
esdi->status = STAT_READY|STAT_DSC|STAT_ERR;
|
||||||
irq_raise(esdi);
|
irq_raise(esdi);
|
||||||
|
ui_sb_update_icon(SB_HDD|HDD_BUS_ESDI, 0);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -596,9 +606,11 @@ esdi_callback(void *priv)
|
|||||||
esdi->status = STAT_DRQ|STAT_READY|STAT_DSC;
|
esdi->status = STAT_DRQ|STAT_READY|STAT_DSC;
|
||||||
esdi->pos = 0;
|
esdi->pos = 0;
|
||||||
next_sector(esdi);
|
next_sector(esdi);
|
||||||
} else
|
|
||||||
esdi->status = STAT_READY|STAT_DSC;
|
|
||||||
ui_sb_update_icon(SB_HDD|HDD_BUS_ESDI, 1);
|
ui_sb_update_icon(SB_HDD|HDD_BUS_ESDI, 1);
|
||||||
|
} else {
|
||||||
|
esdi->status = STAT_READY|STAT_DSC;
|
||||||
|
ui_sb_update_icon(SB_HDD|HDD_BUS_ESDI, 0);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
@@ -607,12 +619,14 @@ esdi_callback(void *priv)
|
|||||||
esdi->status = STAT_READY|STAT_ERR|STAT_DSC;
|
esdi->status = STAT_READY|STAT_ERR|STAT_DSC;
|
||||||
esdi->error = ERR_ABRT;
|
esdi->error = ERR_ABRT;
|
||||||
irq_raise(esdi);
|
irq_raise(esdi);
|
||||||
|
ui_sb_update_icon(SB_HDD|HDD_BUS_ESDI, 0);
|
||||||
break;
|
break;
|
||||||
} else {
|
} else {
|
||||||
if (get_sector(esdi, &addr)) {
|
if (get_sector(esdi, &addr)) {
|
||||||
esdi->error = ERR_ID_NOT_FOUND;
|
esdi->error = ERR_ID_NOT_FOUND;
|
||||||
esdi->status = STAT_READY|STAT_DSC|STAT_ERR;
|
esdi->status = STAT_READY|STAT_DSC|STAT_ERR;
|
||||||
irq_raise(esdi);
|
irq_raise(esdi);
|
||||||
|
ui_sb_update_icon(SB_HDD|HDD_BUS_ESDI, 0);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -628,11 +642,13 @@ esdi_callback(void *priv)
|
|||||||
esdi->pos = 0;
|
esdi->pos = 0;
|
||||||
esdi->status = STAT_READY|STAT_DSC;
|
esdi->status = STAT_READY|STAT_DSC;
|
||||||
irq_raise(esdi);
|
irq_raise(esdi);
|
||||||
|
ui_sb_update_icon(SB_HDD|HDD_BUS_ESDI, 0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case CMD_FORMAT:
|
case CMD_FORMAT:
|
||||||
|
ui_sb_update_icon(SB_HDD|HDD_BUS_ESDI, 0);
|
||||||
if (! drive->present) {
|
if (! drive->present) {
|
||||||
esdi->status = STAT_READY|STAT_ERR|STAT_DSC;
|
esdi->status = STAT_READY|STAT_ERR|STAT_DSC;
|
||||||
esdi->error = ERR_ABRT;
|
esdi->error = ERR_ABRT;
|
||||||
@@ -649,7 +665,6 @@ esdi_callback(void *priv)
|
|||||||
hdd_image_zero(drive->hdd_num, addr, esdi->secount);
|
hdd_image_zero(drive->hdd_num, addr, esdi->secount);
|
||||||
esdi->status = STAT_READY|STAT_DSC;
|
esdi->status = STAT_READY|STAT_DSC;
|
||||||
irq_raise(esdi);
|
irq_raise(esdi);
|
||||||
ui_sb_update_icon(SB_HDD|HDD_BUS_ESDI, 1);
|
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
@@ -662,9 +677,11 @@ esdi_callback(void *priv)
|
|||||||
esdi->error = 1; /*no error detected*/
|
esdi->error = 1; /*no error detected*/
|
||||||
esdi->status = STAT_READY|STAT_DSC;
|
esdi->status = STAT_READY|STAT_DSC;
|
||||||
irq_raise(esdi);
|
irq_raise(esdi);
|
||||||
|
ui_sb_update_icon(SB_HDD|HDD_BUS_ESDI, 0);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case CMD_SET_PARAMETERS: /* Initialize Drive Parameters */
|
case CMD_SET_PARAMETERS: /* Initialize Drive Parameters */
|
||||||
|
ui_sb_update_icon(SB_HDD|HDD_BUS_ESDI, 0);
|
||||||
if (! drive->present) {
|
if (! drive->present) {
|
||||||
esdi->status = STAT_READY|STAT_ERR|STAT_DSC;
|
esdi->status = STAT_READY|STAT_ERR|STAT_DSC;
|
||||||
esdi->error = ERR_ABRT;
|
esdi->error = ERR_ABRT;
|
||||||
@@ -686,9 +703,11 @@ esdi_callback(void *priv)
|
|||||||
esdi->status = STAT_READY|STAT_ERR|STAT_DSC;
|
esdi->status = STAT_READY|STAT_ERR|STAT_DSC;
|
||||||
esdi->error = ERR_ABRT;
|
esdi->error = ERR_ABRT;
|
||||||
irq_raise(esdi);
|
irq_raise(esdi);
|
||||||
|
ui_sb_update_icon(SB_HDD|HDD_BUS_ESDI, 0);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 0xe0:
|
case 0xe0:
|
||||||
|
ui_sb_update_icon(SB_HDD|HDD_BUS_ESDI, 0);
|
||||||
if (! drive->present) {
|
if (! drive->present) {
|
||||||
esdi->status = STAT_READY|STAT_ERR|STAT_DSC;
|
esdi->status = STAT_READY|STAT_ERR|STAT_DSC;
|
||||||
esdi->error = ERR_ABRT;
|
esdi->error = ERR_ABRT;
|
||||||
@@ -731,6 +750,7 @@ esdi_callback(void *priv)
|
|||||||
esdi->status = STAT_DRQ|STAT_READY|STAT_DSC;
|
esdi->status = STAT_DRQ|STAT_READY|STAT_DSC;
|
||||||
}
|
}
|
||||||
irq_raise(esdi);
|
irq_raise(esdi);
|
||||||
|
ui_sb_update_icon(SB_HDD|HDD_BUS_ESDI, 0);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case CMD_READ_PARAMETERS:
|
case CMD_READ_PARAMETERS:
|
||||||
@@ -766,6 +786,7 @@ esdi_callback(void *priv)
|
|||||||
esdi->status = STAT_DRQ|STAT_READY|STAT_DSC;
|
esdi->status = STAT_DRQ|STAT_READY|STAT_DSC;
|
||||||
irq_raise(esdi);
|
irq_raise(esdi);
|
||||||
}
|
}
|
||||||
|
ui_sb_update_icon(SB_HDD|HDD_BUS_ESDI, 0);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
@@ -776,10 +797,9 @@ esdi_callback(void *priv)
|
|||||||
esdi->status = STAT_READY|STAT_ERR|STAT_DSC;
|
esdi->status = STAT_READY|STAT_ERR|STAT_DSC;
|
||||||
esdi->error = ERR_ABRT;
|
esdi->error = ERR_ABRT;
|
||||||
irq_raise(esdi);
|
irq_raise(esdi);
|
||||||
|
ui_sb_update_icon(SB_HDD|HDD_BUS_ESDI, 0);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
ui_sb_update_icon(SB_HDD|HDD_BUS_ESDI, 0);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user