Skip site navigation (1)Skip section navigation (2)
Date:      Sat, 24 Aug 2013 21:04:55 +0000 (UTC)
From:      Joerg Wunsch <joerg@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   svn commit: r254809 - head/sys/dev/fdc
Message-ID:  <201308242104.r7OL4tUf068823@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: joerg
Date: Sat Aug 24 21:04:54 2013
New Revision: 254809
URL: http://svnweb.freebsd.org/changeset/base/254809

Log:
  Do not use "Enable Implied Seek" on enhanced floppy controllers.  This
  breaks the "2step" feature of the driver, e.g. in order to read 360
  KiB media on a 1200 KiB drive.
  
  As the only potential advantage of implied (vs. explicit) seeks is to
  minimize the software effort, yet our driver always contained the
  logic needed for explicit seeks, simply dropping implied seeks is the
  best solution without introducing risks for new bugs.  There is no
  performance penalty, reading a 1440 KiB medium takes exactly the same
  time with both, implied or explicit seeks.
  
  MFC after:	1 week

Modified:
  head/sys/dev/fdc/fdc.c

Modified: head/sys/dev/fdc/fdc.c
==============================================================================
--- head/sys/dev/fdc/fdc.c	Sat Aug 24 21:00:39 2013	(r254808)
+++ head/sys/dev/fdc/fdc.c	Sat Aug 24 21:04:54 2013	(r254809)
@@ -528,7 +528,8 @@ fdc_reset(struct fdc_data *fdc)
 		if (fdc_cmd(fdc, 4,
 		    I8207X_CONFIG,
 		    0,
-		    0x40 |			/* Enable Implied Seek */
+		    /* 0x40 | */		/* Enable Implied Seek -
+						 * breaks 2step! */
 		    0x10 |			/* Polling disabled */
 		    (fifo_threshold - 1),	/* Fifo threshold */
 		    0x00,			/* Precomp track */
@@ -922,14 +923,8 @@ fdc_worker(struct fdc_data *fdc)
 
 	/*
 	 * SEEK to where we want to be
-	 *
-	 * Enhanced controllers do implied seeks for read&write as long as
-	 * we do not need multiple steps per track.
 	 */
-	if (cylinder != fd->track && (
-	    fdc->fdct != FDC_ENHANCED ||
-	    descyl != cylinder ||
-	    (bp->bio_cmd & (BIO_RDID|BIO_FMT)))) {
+	if (cylinder != fd->track) {
 		retry_line = __LINE__;
 		if (fdc_cmd(fdc, 3, NE7CMD_SEEK, fd->fdsu, descyl, 0))
 			return (1);



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201308242104.r7OL4tUf068823>