Module Name:    src
Committed By:   christos
Date:           Wed Aug 25 18:11:54 UTC 2010

Modified Files:
        src/sys/arch/sparc/stand/boot: boot.c
        src/sys/arch/sparc/stand/common: promdev.c promdev.h

Log Message:
Don't LOAD_BACKWARDS for floppies.


To generate a diff of this commit:
cvs rdiff -u -r1.24 -r1.25 src/sys/arch/sparc/stand/boot/boot.c
cvs rdiff -u -r1.23 -r1.24 src/sys/arch/sparc/stand/common/promdev.c
cvs rdiff -u -r1.14 -r1.15 src/sys/arch/sparc/stand/common/promdev.h

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/sparc/stand/boot/boot.c
diff -u src/sys/arch/sparc/stand/boot/boot.c:1.24 src/sys/arch/sparc/stand/boot/boot.c:1.25
--- src/sys/arch/sparc/stand/boot/boot.c:1.24	Sun Mar  4 01:00:47 2007
+++ src/sys/arch/sparc/stand/boot/boot.c	Wed Aug 25 14:11:54 2010
@@ -1,4 +1,4 @@
-/*	$NetBSD: boot.c,v 1.24 2007/03/04 06:00:47 christos Exp $ */
+/*	$NetBSD: boot.c,v 1.25 2010/08/25 18:11:54 christos Exp $ */
 
 /*-
  * Copyright (c) 1982, 1986, 1990, 1993
@@ -170,6 +170,7 @@
 	vaddr_t va;
 	paddr_t pa;
 	u_long size;
+	int flags = LOAD_KERNEL;
 
 	if ((fd = open(kernel, 0)) < 0)
 		return (errno ? errno : ENOENT);
@@ -224,8 +225,11 @@
 		loadaddrmask = 0x07ffffffUL;
 	}
 
+	if (promdev_isfloppy())
+		flags &= ~LOAD_BACKWARDS;
+
 	marks[MARK_START] = 0;
-	error = fdloadfile(fd, marks, LOAD_KERNEL);
+	error = fdloadfile(fd, marks, flags);
 out:
 	close(fd);
 	return (error);

Index: src/sys/arch/sparc/stand/common/promdev.c
diff -u src/sys/arch/sparc/stand/common/promdev.c:1.23 src/sys/arch/sparc/stand/common/promdev.c:1.24
--- src/sys/arch/sparc/stand/common/promdev.c:1.23	Sun Oct 18 02:24:21 2009
+++ src/sys/arch/sparc/stand/common/promdev.c	Wed Aug 25 14:11:54 2010
@@ -1,4 +1,4 @@
-/*	$NetBSD: promdev.c,v 1.23 2009/10/18 06:24:21 tsutsui Exp $ */
+/*	$NetBSD: promdev.c,v 1.24 2010/08/25 18:11:54 christos Exp $ */
 
 /*
  * Copyright (c) 1993 Paul Kranenburg
@@ -106,6 +106,14 @@
 #endif
 
 
+int
+bootdev_isfloppy(void)
+{
+	return strncmp(prom_bootdevice, "fd", 2) == 0 ||
+		strstr(prom_bootdevice, "SUNW,fdtwo") != NULL ||
+		strstr(prom_bootdevice, "fdthree") != NULL;
+}
+
 void
 putchar(int c)
 {
@@ -219,9 +227,7 @@
 		 * Don't check disklabel on floppy boot since
 		 * reopening it could cause Data Access Exception later.
 		 */
-		if (strncmp(prom_bootdevice, "fd", 2) == 0 ||
-		    strstr(prom_bootdevice, "SUNW,fdtwo") != NULL ||
-		    strstr(prom_bootdevice, "fdthree") != NULL)
+		if (bootdev_isfloppy())
 			return 0;
 
 		/*

Index: src/sys/arch/sparc/stand/common/promdev.h
diff -u src/sys/arch/sparc/stand/common/promdev.h:1.14 src/sys/arch/sparc/stand/common/promdev.h:1.15
--- src/sys/arch/sparc/stand/common/promdev.h:1.14	Mon Jan 12 06:32:44 2009
+++ src/sys/arch/sparc/stand/common/promdev.h	Wed Aug 25 14:11:54 2010
@@ -1,4 +1,4 @@
-/*	$NetBSD: promdev.h,v 1.14 2009/01/12 11:32:44 tsutsui Exp $ */
+/*	$NetBSD: promdev.h,v 1.15 2010/08/25 18:11:54 christos Exp $ */
 
 /*-
  * Copyright (c) 1998 The NetBSD Foundation, Inc.
@@ -70,6 +70,9 @@
 extern int	(*pmap_map)(vaddr_t, paddr_t, psize_t);
 extern int	(*pmap_extract)(vaddr_t, paddr_t *);
 
+/* In promdev.c */
+extern int	bootdev_isfloppy(void);
+
 /* In str0.S: */
 extern void	sparc_noop(void);
 extern void	*romp;

Reply via email to