From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([208.118.235.92]:55346) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1T9ha1-0003jJ-8k for qemu-devel@nongnu.org; Thu, 06 Sep 2012 15:17:34 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1T9hZz-0002E9-Tl for qemu-devel@nongnu.org; Thu, 06 Sep 2012 15:17:33 -0400 Received: from smtp1-g21.free.fr ([212.27.42.1]:57013) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1T9hZz-0002Do-CM for qemu-devel@nongnu.org; Thu, 06 Sep 2012 15:17:31 -0400 From: =?UTF-8?q?Herv=C3=A9=20Poussineau?= Date: Thu, 6 Sep 2012 21:17:55 +0200 Message-Id: <1346959079-8307-5-git-send-email-hpoussin@reactos.org> In-Reply-To: <1346959079-8307-1-git-send-email-hpoussin@reactos.org> References: <1346959079-8307-1-git-send-email-hpoussin@reactos.org> MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: quoted-printable Subject: [Qemu-devel] [PATCH 4/8] fdc: fix false FD_SR0_SEEK List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org Cc: Kevin Wolf , =?UTF-8?q?Herv=C3=A9=20Poussineau?= fdctrl_start/stop_transfer() used to set FD_SR0_SEEK no matter if there actually was a seek or not. This is obviously wrong. fdctrl_seek_to_next_sect() has this information because it performs the seek itself. Cc: Kevin Wolf Signed-off-by: Herv=C3=A9 Poussineau --- hw/fdc.c | 13 +++++++++---- tests/fdc-test.c | 2 +- 2 files changed, 10 insertions(+), 5 deletions(-) diff --git a/hw/fdc.c b/hw/fdc.c index d8bffb6..3c343b1 100644 --- a/hw/fdc.c +++ b/hw/fdc.c @@ -1123,11 +1123,13 @@ static int fdctrl_seek_to_next_sect(FDCtrl *fdctr= l, FDrive *cur_drv) } else { new_head =3D 0; new_track++; + fdctrl->status0 |=3D FD_SR0_SEEK; if ((cur_drv->flags & FDISK_DBL_SIDES) =3D=3D 0) { ret =3D 0; } } } else { + fdctrl->status0 |=3D FD_SR0_SEEK; new_track++; ret =3D 0; } @@ -1147,10 +1149,14 @@ static void fdctrl_stop_transfer(FDCtrl *fdctrl, = uint8_t status0, uint8_t status1, uint8_t status2) { FDrive *cur_drv; - cur_drv =3D get_cur_drv(fdctrl); - fdctrl->status0 =3D status0 | FD_SR0_SEEK | (cur_drv->head << 2) | - GET_CUR_DRV(fdctrl); + + fdctrl->status0 &=3D ~(FD_SR0_DS0 | FD_SR0_DS1 | FD_SR0_HEAD); + fdctrl->status0 |=3D GET_CUR_DRV(fdctrl); + if (cur_drv->head) { + fdctrl->status0 |=3D FD_SR0_HEAD; + } + fdctrl->status0 |=3D status0; =20 FLOPPY_DPRINTF("transfer status: %02x %02x %02x (%02x)\n", status0, status1, status2, fdctrl->status0); @@ -1284,7 +1290,6 @@ static void fdctrl_start_transfer(FDCtrl *fdctrl, i= nt direction) if (direction !=3D FD_DIR_WRITE) fdctrl->msr |=3D FD_MSR_DIO; /* IO based transfer: calculate len */ - fdctrl->status0 |=3D FD_SR0_SEEK; fdctrl_raise_irq(fdctrl); } =20 diff --git a/tests/fdc-test.c b/tests/fdc-test.c index 18051ef..b825959 100644 --- a/tests/fdc-test.c +++ b/tests/fdc-test.c @@ -153,7 +153,7 @@ static uint8_t send_read_command(void) } =20 st0 =3D floppy_recv(); - if (st0 !=3D 0x60) { + if (st0 !=3D 0x40) { ret =3D 1; } =20 --=20 1.7.10.4