CVS commit: src/sys/arch/vax/boot/boot

2019-10-28 Thread Christos Zoulas
Module Name:src
Committed By:   christos
Date:   Mon Oct 28 21:11:23 UTC 2019

Modified Files:
src/sys/arch/vax/boot/boot: mfm.c

Log Message:
Rewrite the floppy selection logic, and fix an always false condition.


To generate a diff of this commit:
cvs rdiff -u -r1.15 -r1.16 src/sys/arch/vax/boot/boot/mfm.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/vax/boot/boot/mfm.c
diff -u src/sys/arch/vax/boot/boot/mfm.c:1.15 src/sys/arch/vax/boot/boot/mfm.c:1.16
--- src/sys/arch/vax/boot/boot/mfm.c:1.15	Mon May 22 12:59:32 2017
+++ src/sys/arch/vax/boot/boot/mfm.c	Mon Oct 28 17:11:23 2019
@@ -1,4 +1,4 @@
-/*	$NetBSD: mfm.c,v 1.15 2017/05/22 16:59:32 ragge Exp $	*/
+/*	$NetBSD: mfm.c,v 1.16 2019/10/28 21:11:23 christos Exp $	*/
 /*
  * Copyright (c) 1996 Ludd, University of Lule}, Sweden.
  * All rights reserved.
@@ -139,6 +139,15 @@ mfm_rxprepare(void)
 	return error;
 }
 
+static int
+mfm_is_ready(int cnt, int error)
+{
+	if (error == 0 && (sreg.udc_dstat & UDC_DS_READY) == UDC_DS_READY)
+		return 1;
+	printf("diskette not ready(%d): %#x/%#x\n", cnt, error, sreg.udc_dstat);
+	return 0;
+}
+
 int
 mfm_rxselect(int unit)
 {
@@ -165,42 +174,40 @@ mfm_rxselect(int unit)
 	 */
 	error = mfm_command(DKC_CMD_DRSEL_RX33 | unit);
 
-	if ((error != 0) || ((sreg.udc_dstat & UDC_DS_READY) == 0)) {
-		printf("\nfloppy-drive not ready (new floppy inserted?)\n\n");
+	if (mfm_is_ready(0, error))
+		return 0;
 
-		creg.udc_rtcnt &= ~UDC_RC_INVRDY;	/* clear INVRDY-flag */
-		error = mfm_command(DKC_CMD_DRSEL_RX33 | unit);
-		if ((error != 0) || ((sreg.udc_dstat & UDC_DS_READY) == 0)) {
-			printf("diskette not ready(1): %x/%x\n",
-			   error, sreg.udc_dstat);
-			printf("floppy-drive offline?\n");
-			return (-1);
-		}
-		if (sreg.udc_dstat & UDC_DS_TRK00)
-			error = mfm_command(DKC_CMD_STEPIN_FDD);
-		else
-			error = mfm_command(DKC_CMD_STEPOUT_FDD);
+	printf("\nfloppy-drive not ready (new floppy inserted?)\n\n");
 
-		/*
-		 * now ready should be 0, cause INVRDY is not set
-		 * (retrying a command makes this fail...)
-		 */
-		if ((error != 0) || ((sreg.udc_dstat & UDC_DS_READY) == 1)) {
-			printf("diskette not ready(2): %x/%x\n",
-			   error, sreg.udc_dstat);
-		}
-		creg.udc_rtcnt |= UDC_RC_INVRDY;
-		error = mfm_command(DKC_CMD_DRSEL_RX33 | unit);
+	/* clear INVRDY-flag and try again */
+	creg.udc_rtcnt &= ~UDC_RC_INVRDY;
+	error = mfm_command(DKC_CMD_DRSEL_RX33 | unit);
 
-		if ((error != 0) || ((sreg.udc_dstat & UDC_DS_READY) == 0)) {
-			printf("diskette not ready(3): %x/%x\n",
-			   error, sreg.udc_dstat);
-			printf("no floppy inserted or floppy-door open\n");
-			return (-1);
-		}
-		printf("floppy-drive reselected.\n");
+	if (!mfm_is_ready(1, error)) {
+		printf("floppy-drive offline?\n");
+		return -1;
+   
 	}
-	return (error);
+	if (sreg.udc_dstat & UDC_DS_TRK00)
+		error = mfm_command(DKC_CMD_STEPIN_FDD);
+	else
+		error = mfm_command(DKC_CMD_STEPOUT_FDD);
+
+	/*
+	 * now ready should be 0, cause INVRDY is not set
+	 * (retrying a command makes this fail...)
+	 */
+	mfm_is_ready(2, error);
+
+	creg.udc_rtcnt |= UDC_RC_INVRDY;
+	error = mfm_command(DKC_CMD_DRSEL_RX33 | unit);
+	if (!mfm_is_ready(3, error)) {
+		printf("no floppy inserted or floppy-door open\n");
+		return -1;
+	}
+
+	printf("floppy-drive reselected.\n");
+	return error;
 }
 
 int



CVS commit: src/sys/arch/vax/boot/boot

2019-10-28 Thread Christos Zoulas
Module Name:src
Committed By:   christos
Date:   Mon Oct 28 21:11:23 UTC 2019

Modified Files:
src/sys/arch/vax/boot/boot: mfm.c

Log Message:
Rewrite the floppy selection logic, and fix an always false condition.


To generate a diff of this commit:
cvs rdiff -u -r1.15 -r1.16 src/sys/arch/vax/boot/boot/mfm.c

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