Patchwork [v2,09/10] fdc: fix seek command, which shouldn't check tracks

login
register
mail settings
Submitter Hervé Poussineau
Date Jan. 15, 2012, 7:51 a.m.
Message ID <1326613915-3282-10-git-send-email-hpoussin@reactos.org>
Download mbox | patch
Permalink /patch/136171/
State New
Headers show

Comments

Hervé Poussineau - Jan. 15, 2012, 7:51 a.m.
The seek command just sends step pulses to the drive and doesn't care if
there is a medium inserted of if it is banging the head against the drive.

Signed-off-by: Hervé Poussineau <hpoussin@reactos.org>
---
 hw/fdc.c |   13 ++++++-------
 1 files changed, 6 insertions(+), 7 deletions(-)
Kevin Wolf - Jan. 16, 2012, 10:32 a.m.
Am 15.01.2012 08:51, schrieb Hervé Poussineau:
> The seek command just sends step pulses to the drive and doesn't care if
> there is a medium inserted of if it is banging the head against the drive.
> 
> Signed-off-by: Hervé Poussineau <hpoussin@reactos.org>
> ---
>  hw/fdc.c |   13 ++++++-------
>  1 files changed, 6 insertions(+), 7 deletions(-)
> 
> diff --git a/hw/fdc.c b/hw/fdc.c
> index 685ea88..61d70eb 100644
> --- a/hw/fdc.c
> +++ b/hw/fdc.c
> @@ -1599,13 +1599,12 @@ static void fdctrl_handle_seek(FDCtrl *fdctrl, int direction)
>      SET_CUR_DRV(fdctrl, fdctrl->fifo[1] & FD_DOR_SELMASK);
>      cur_drv = get_cur_drv(fdctrl);
>      fdctrl_reset_fifo(fdctrl);
> -    if (fdctrl->fifo[2] > cur_drv->max_track) {
> -        fdctrl_raise_irq(fdctrl, FD_SR0_ABNTERM | FD_SR0_SEEK);
> -    } else {
> -        cur_drv->track = fdctrl->fifo[2];
> -        /* Raise Interrupt */
> -        fdctrl_raise_irq(fdctrl, FD_SR0_SEEK);
> -    }
> +    /* The seek command just sends step pulses to the drive and doesn't care if
> +     * there is a medium inserted of if it's banging the head against the drive.
> +     */
> +    cur_drv->track = fdctrl->fifo[2];

Do you really want to update this with an invalid value? This value is
used in other places without being checked again against max_track.

> +    /* Raise Interrupt */
> +    fdctrl_raise_irq(fdctrl, FD_SR0_SEEK);
>  }
>  
>  static void fdctrl_handle_perpendicular_mode(FDCtrl *fdctrl, int direction)

Kevin

Patch

diff --git a/hw/fdc.c b/hw/fdc.c
index 685ea88..61d70eb 100644
--- a/hw/fdc.c
+++ b/hw/fdc.c
@@ -1599,13 +1599,12 @@  static void fdctrl_handle_seek(FDCtrl *fdctrl, int direction)
     SET_CUR_DRV(fdctrl, fdctrl->fifo[1] & FD_DOR_SELMASK);
     cur_drv = get_cur_drv(fdctrl);
     fdctrl_reset_fifo(fdctrl);
-    if (fdctrl->fifo[2] > cur_drv->max_track) {
-        fdctrl_raise_irq(fdctrl, FD_SR0_ABNTERM | FD_SR0_SEEK);
-    } else {
-        cur_drv->track = fdctrl->fifo[2];
-        /* Raise Interrupt */
-        fdctrl_raise_irq(fdctrl, FD_SR0_SEEK);
-    }
+    /* The seek command just sends step pulses to the drive and doesn't care if
+     * there is a medium inserted of if it's banging the head against the drive.
+     */
+    cur_drv->track = fdctrl->fifo[2];
+    /* Raise Interrupt */
+    fdctrl_raise_irq(fdctrl, FD_SR0_SEEK);
 }
 
 static void fdctrl_handle_perpendicular_mode(FDCtrl *fdctrl, int direction)