From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([208.118.235.92]:59954) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1TYi07-0008Kq-0s for qemu-devel@nongnu.org; Wed, 14 Nov 2012 13:47:54 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1TYi03-0000Uf-SJ for qemu-devel@nongnu.org; Wed, 14 Nov 2012 13:47:50 -0500 Received: from mx1.redhat.com ([209.132.183.28]:41440) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1TYi03-0000UV-Kx for qemu-devel@nongnu.org; Wed, 14 Nov 2012 13:47:47 -0500 From: Kevin Wolf Date: Wed, 14 Nov 2012 19:47:11 +0100 Message-Id: <1352918847-3696-11-git-send-email-kwolf@redhat.com> In-Reply-To: <1352918847-3696-1-git-send-email-kwolf@redhat.com> References: <1352918847-3696-1-git-send-email-kwolf@redhat.com> MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: quoted-printable Subject: [Qemu-devel] [PATCH 10/26] fdc: Remove status0 parameter from fdctrl_set_fifo() List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: anthony@codemonkey.ws Cc: kwolf@redhat.com, qemu-devel@nongnu.org It decided whether an interrupt is triggered. Only one caller made use of this functionality, so move the code there. In this one caller, the interrupt must actually be triggered unconditionally, like it was before commit 2fee0088. For example, a successful read without an implied seek can result in st0 =3D 0, but stil= l triggers the interrupt. Signed-off-by: Kevin Wolf Tested-by: Herv=C3=A9 Poussineau --- hw/fdc.c | 33 ++++++++++++++++----------------- 1 files changed, 16 insertions(+), 17 deletions(-) diff --git a/hw/fdc.c b/hw/fdc.c index bf8c1d9..3585220 100644 --- a/hw/fdc.c +++ b/hw/fdc.c @@ -1079,15 +1079,12 @@ static void fdctrl_reset_fifo(FDCtrl *fdctrl) } =20 /* Set FIFO status for the host to read */ -static void fdctrl_set_fifo(FDCtrl *fdctrl, int fifo_len, uint8_t status= 0) +static void fdctrl_set_fifo(FDCtrl *fdctrl, int fifo_len) { fdctrl->data_dir =3D FD_DIR_READ; fdctrl->data_len =3D fifo_len; fdctrl->data_pos =3D 0; fdctrl->msr |=3D FD_MSR_CMDBUSY | FD_MSR_RQM | FD_MSR_DIO; - if (status0) { - fdctrl_raise_irq(fdctrl, status0); - } } =20 /* Set an error: unimplemented/unknown command */ @@ -1096,7 +1093,7 @@ static void fdctrl_unimplemented(FDCtrl *fdctrl, in= t direction) qemu_log_mask(LOG_UNIMP, "fdc: unimplemented command 0x%02x\n", fdctrl->fifo[0]); fdctrl->fifo[0] =3D FD_SR0_INVCMD; - fdctrl_set_fifo(fdctrl, 1, 0); + fdctrl_set_fifo(fdctrl, 1); } =20 /* Seek to next sector @@ -1170,7 +1167,9 @@ static void fdctrl_stop_transfer(FDCtrl *fdctrl, ui= nt8_t status0, } fdctrl->msr |=3D FD_MSR_RQM | FD_MSR_DIO; fdctrl->msr &=3D ~FD_MSR_NONDMA; - fdctrl_set_fifo(fdctrl, 7, fdctrl->status0); + + fdctrl_set_fifo(fdctrl, 7); + fdctrl_raise_irq(fdctrl, fdctrl->status0); } =20 /* Prepare a data transfer (either DMA or FIFO) */ @@ -1536,7 +1535,7 @@ static void fdctrl_handle_lock(FDCtrl *fdctrl, int = direction) { fdctrl->lock =3D (fdctrl->fifo[0] & 0x80) ? 1 : 0; fdctrl->fifo[0] =3D fdctrl->lock << 4; - fdctrl_set_fifo(fdctrl, 1, 0); + fdctrl_set_fifo(fdctrl, 1); } =20 static void fdctrl_handle_dumpreg(FDCtrl *fdctrl, int direction) @@ -1561,20 +1560,20 @@ static void fdctrl_handle_dumpreg(FDCtrl *fdctrl,= int direction) (cur_drv->perpendicular << 2); fdctrl->fifo[8] =3D fdctrl->config; fdctrl->fifo[9] =3D fdctrl->precomp_trk; - fdctrl_set_fifo(fdctrl, 10, 0); + fdctrl_set_fifo(fdctrl, 10); } =20 static void fdctrl_handle_version(FDCtrl *fdctrl, int direction) { /* Controller's version */ fdctrl->fifo[0] =3D fdctrl->version; - fdctrl_set_fifo(fdctrl, 1, 0); + fdctrl_set_fifo(fdctrl, 1); } =20 static void fdctrl_handle_partid(FDCtrl *fdctrl, int direction) { fdctrl->fifo[0] =3D 0x41; /* Stepping 1 */ - fdctrl_set_fifo(fdctrl, 1, 0); + fdctrl_set_fifo(fdctrl, 1); } =20 static void fdctrl_handle_restore(FDCtrl *fdctrl, int direction) @@ -1627,7 +1626,7 @@ static void fdctrl_handle_save(FDCtrl *fdctrl, int = direction) fdctrl->fifo[12] =3D fdctrl->pwrd; fdctrl->fifo[13] =3D 0; fdctrl->fifo[14] =3D 0; - fdctrl_set_fifo(fdctrl, 15, 0); + fdctrl_set_fifo(fdctrl, 15); } =20 static void fdctrl_handle_readid(FDCtrl *fdctrl, int direction) @@ -1693,7 +1692,7 @@ static void fdctrl_handle_sense_drive_status(FDCtrl= *fdctrl, int direction) (cur_drv->head << 2) | GET_CUR_DRV(fdctrl) | 0x28; - fdctrl_set_fifo(fdctrl, 1, 0); + fdctrl_set_fifo(fdctrl, 1); } =20 static void fdctrl_handle_recalibrate(FDCtrl *fdctrl, int direction) @@ -1718,7 +1717,7 @@ static void fdctrl_handle_sense_interrupt_status(FD= Ctrl *fdctrl, int direction) fdctrl->reset_sensei--; } else if (!(fdctrl->sra & FD_SRA_INTPEND)) { fdctrl->fifo[0] =3D FD_SR0_INVCMD; - fdctrl_set_fifo(fdctrl, 1, 0); + fdctrl_set_fifo(fdctrl, 1); return; } else { fdctrl->fifo[0] =3D @@ -1727,7 +1726,7 @@ static void fdctrl_handle_sense_interrupt_status(FD= Ctrl *fdctrl, int direction) } =20 fdctrl->fifo[1] =3D cur_drv->track; - fdctrl_set_fifo(fdctrl, 2, 0); + fdctrl_set_fifo(fdctrl, 2); fdctrl_reset_irq(fdctrl); fdctrl->status0 =3D FD_SR0_RDYCHG; } @@ -1769,7 +1768,7 @@ static void fdctrl_handle_powerdown_mode(FDCtrl *fd= ctrl, int direction) { fdctrl->pwrd =3D fdctrl->fifo[1]; fdctrl->fifo[0] =3D fdctrl->fifo[1]; - fdctrl_set_fifo(fdctrl, 1, 0); + fdctrl_set_fifo(fdctrl, 1); } =20 static void fdctrl_handle_option(FDCtrl *fdctrl, int direction) @@ -1788,7 +1787,7 @@ static void fdctrl_handle_drive_specification_comma= nd(FDCtrl *fdctrl, int direct fdctrl->fifo[0] =3D fdctrl->fifo[1]; fdctrl->fifo[2] =3D 0; fdctrl->fifo[3] =3D 0; - fdctrl_set_fifo(fdctrl, 4, 0); + fdctrl_set_fifo(fdctrl, 4); } else { fdctrl_reset_fifo(fdctrl); } @@ -1796,7 +1795,7 @@ static void fdctrl_handle_drive_specification_comma= nd(FDCtrl *fdctrl, int direct /* ERROR */ fdctrl->fifo[0] =3D 0x80 | (cur_drv->head << 2) | GET_CUR_DRV(fdctrl); - fdctrl_set_fifo(fdctrl, 1, 0); + fdctrl_set_fifo(fdctrl, 1); } } =20 --=20 1.7.6.5