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;