Module Name:    src
Committed By:   isaki
Date:           Thu Apr  7 13:38:21 UTC 2011

Modified Files:
        src/sys/arch/x68k/stand/libsa: chdsk.c

Log Message:
Poll the next medium on both drive of #0 and #1.


To generate a diff of this commit:
cvs rdiff -u -r1.2 -r1.3 src/sys/arch/x68k/stand/libsa/chdsk.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/sys/arch/x68k/stand/libsa/chdsk.c
diff -u src/sys/arch/x68k/stand/libsa/chdsk.c:1.2 src/sys/arch/x68k/stand/libsa/chdsk.c:1.3
--- src/sys/arch/x68k/stand/libsa/chdsk.c:1.2	Mon Jan 12 07:56:31 2009
+++ src/sys/arch/x68k/stand/libsa/chdsk.c	Thu Apr  7 13:38:21 2011
@@ -1,4 +1,4 @@
-/*	$NetBSD: chdsk.c,v 1.2 2009/01/12 07:56:31 tsutsui Exp $	*/
+/*	$NetBSD: chdsk.c,v 1.3 2011/04/07 13:38:21 isaki Exp $	*/
 
 /*
  * Copyright (c) 2001 MINOURA Makoto.
@@ -38,20 +38,36 @@
 {
 	if (strcmp(f->f_dev->dv_name, "fd") == 0) {
 		struct fd_softc *sc = f->f_devdata;
-		int unit = (0x90 + sc->unit) << 8;
+		int drive[2];
 
-		/* unlock */
-		IOCS_B_DRVCHK(unit, 3);
-		/* eject */
-		IOCS_B_DRVCHK(unit, 1);
+		drive[0] = 0x90 << 8;
+		drive[1] = 0x91 << 8;
+
+		/* unlock current unit */
+		IOCS_B_DRVCHK(drive[sc->unit], 3);
+		/* eject current */
+		IOCS_B_DRVCHK(drive[sc->unit], 1);
 		awaitkey_1sec();
-		/* prompt */
-		IOCS_B_DRVCHK(unit, 4);
+		/* prompt both */
+		IOCS_B_DRVCHK(drive[0], 4);
+		IOCS_B_DRVCHK(drive[1], 4);
 		/* poll for medium */
-		while ((IOCS_B_DRVCHK(unit, 0) & 2) == 0)
+		for (;;) {
+			if ((IOCS_B_DRVCHK(drive[0], 0) & 2)) {
+				sc->unit = 0;
+				break;
+			}
+			if ((IOCS_B_DRVCHK(drive[1], 0) & 2)) {
+				sc->unit = 1;
+				break;
+			}
 			awaitkey_1sec();
-		/* lock */
-		IOCS_B_DRVCHK(unit, 2);
+		}
+		/* prompt off */
+		IOCS_B_DRVCHK(drive[0], 5);
+		IOCS_B_DRVCHK(drive[1], 5);
+		/* lock new unit */
+		IOCS_B_DRVCHK(drive[sc->unit], 2);
 	}
 
 	return 0;

Reply via email to