* [Qemu-devel] [PATCH] fdc: simplify media change handling
@ 2012-05-05 17:43 Hervé Poussineau
2012-05-07 8:20 ` Kevin Wolf
0 siblings, 1 reply; 3+ messages in thread
From: Hervé Poussineau @ 2012-05-05 17:43 UTC (permalink / raw)
To: qemu-devel; +Cc: Kevin Wolf, Hervé Poussineau
This also (partly) fixes IBM OS/2 Warp 4.0 floppy installation, where
not all floppies have the same format (2x80x18 for the first ones,
2x80x23 for the next ones).
Signed-off-by: Hervé Poussineau <hpoussin@reactos.org>
---
This patch fixes a real use case, and I didn't notice any regression.
However, as we are in bugfixes-only period, I let Kevin decide if it
is worth to include (or not) this patch in QEMU 1.1.
hw/fdc.c | 29 +++++++++++------------------
1 file changed, 11 insertions(+), 18 deletions(-)
diff --git a/hw/fdc.c b/hw/fdc.c
index a0236b7..bc0c3f6 100644
--- a/hw/fdc.c
+++ b/hw/fdc.c
@@ -702,6 +702,15 @@ static void fdctrl_raise_irq(FDCtrl *fdctrl, uint8_t status0)
qemu_set_irq(fdctrl->irq, 1);
fdctrl->sra |= FD_SRA_INTPEND;
}
+ if (status0 & FD_SR0_SEEK) {
+ FDrive *cur_drv;
+ /* A seek clears the disk change line (if a disk is inserted) */
+ cur_drv = get_cur_drv(fdctrl);
+ if (cur_drv->max_track) {
+ cur_drv->media_changed = 0;
+ }
+ }
+
fdctrl->reset_sensei = 0;
fdctrl->status0 = status0;
FLOPPY_DPRINTF("Set interrupt status to 0x%02x\n", fdctrl->status0);
@@ -933,23 +942,7 @@ static void fdctrl_write_ccr(FDCtrl *fdctrl, uint32_t value)
static int fdctrl_media_changed(FDrive *drv)
{
- int ret;
-
- if (!drv->bs)
- return 0;
- if (drv->media_changed) {
- drv->media_changed = 0;
- ret = 1;
- } else {
- ret = bdrv_media_changed(drv->bs);
- if (ret < 0) {
- ret = 0; /* we don't know, assume no */
- }
- }
- if (ret) {
- fd_revalidate(drv);
- }
- return ret;
+ return drv->media_changed;
}
/* Digital input register : 0x07 (read-only) */
@@ -1853,6 +1846,7 @@ static void fdctrl_change_cb(void *opaque, bool load)
FDrive *drive = opaque;
drive->media_changed = 1;
+ fd_revalidate(drive);
}
static const BlockDevOps fdctrl_block_ops = {
@@ -1883,7 +1877,6 @@ static int fdctrl_connect_drives(FDCtrl *fdctrl)
fd_init(drive);
fd_revalidate(drive);
if (drive->bs) {
- drive->media_changed = 1;
bdrv_set_dev_ops(drive->bs, &fdctrl_block_ops, drive);
}
}
--
1.7.9.5
^ permalink raw reply related [flat|nested] 3+ messages in thread
* Re: [Qemu-devel] [PATCH] fdc: simplify media change handling
2012-05-05 17:43 [Qemu-devel] [PATCH] fdc: simplify media change handling Hervé Poussineau
@ 2012-05-07 8:20 ` Kevin Wolf
2012-05-07 19:14 ` Hervé Poussineau
0 siblings, 1 reply; 3+ messages in thread
From: Kevin Wolf @ 2012-05-07 8:20 UTC (permalink / raw)
To: Hervé Poussineau; +Cc: qemu-devel
Am 05.05.2012 19:43, schrieb Hervé Poussineau:
> This also (partly) fixes IBM OS/2 Warp 4.0 floppy installation, where
> not all floppies have the same format (2x80x18 for the first ones,
> 2x80x23 for the next ones).
>
> Signed-off-by: Hervé Poussineau <hpoussin@reactos.org>
> ---
>
> This patch fixes a real use case, and I didn't notice any regression.
> However, as we are in bugfixes-only period, I let Kevin decide if it
> is worth to include (or not) this patch in QEMU 1.1.
>
> hw/fdc.c | 29 +++++++++++------------------
> 1 file changed, 11 insertions(+), 18 deletions(-)
I think this patch still doesn't get it entirely right (it would also
reset the bit if the head didn't actually move because it already was in
the right position, whereas real hardware wouldn't reset it there), but
it looks much better than what we have today and provided it passes my
testing I would like to include it in 1.1.
With which OSes did you already test it?
Kevin
^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: [Qemu-devel] [PATCH] fdc: simplify media change handling
2012-05-07 8:20 ` Kevin Wolf
@ 2012-05-07 19:14 ` Hervé Poussineau
0 siblings, 0 replies; 3+ messages in thread
From: Hervé Poussineau @ 2012-05-07 19:14 UTC (permalink / raw)
To: Kevin Wolf; +Cc: qemu-devel
Kevin Wolf a écrit :
> Am 05.05.2012 19:43, schrieb Hervé Poussineau:
>> This also (partly) fixes IBM OS/2 Warp 4.0 floppy installation, where
>> not all floppies have the same format (2x80x18 for the first ones,
>> 2x80x23 for the next ones).
>>
>> Signed-off-by: Hervé Poussineau <hpoussin@reactos.org>
>> ---
>>
>> This patch fixes a real use case, and I didn't notice any regression.
>> However, as we are in bugfixes-only period, I let Kevin decide if it
>> is worth to include (or not) this patch in QEMU 1.1.
>>
>> hw/fdc.c | 29 +++++++++++------------------
>> 1 file changed, 11 insertions(+), 18 deletions(-)
>
> I think this patch still doesn't get it entirely right (it would also
> reset the bit if the head didn't actually move because it already was in
> the right position, whereas real hardware wouldn't reset it there), but
> it looks much better than what we have today and provided it passes my
> testing I would like to include it in 1.1.
>
> With which OSes did you already test it?
>
I specifically tested floppy change on MSDOS 6.22, Windows 98 SE and
OS/2 4.0.
Hervé
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2012-05-07 19:14 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2012-05-05 17:43 [Qemu-devel] [PATCH] fdc: simplify media change handling Hervé Poussineau
2012-05-07 8:20 ` Kevin Wolf
2012-05-07 19:14 ` Hervé Poussineau
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).