Module Name:    src
Committed By:   christos
Date:           Tue Jul 19 16:58:06 UTC 2016

Modified Files:
        src/sys/dev/tc: tc.c

Log Message:
PR/50849: Felix Deichmann: Relax TC option ROM header check for ROM widths < 4


To generate a diff of this commit:
cvs rdiff -u -r1.51 -r1.52 src/sys/dev/tc/tc.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/dev/tc/tc.c
diff -u src/sys/dev/tc/tc.c:1.51 src/sys/dev/tc/tc.c:1.52
--- src/sys/dev/tc/tc.c:1.51	Fri Jun  3 21:57:34 2011
+++ src/sys/dev/tc/tc.c	Tue Jul 19 12:58:05 2016
@@ -1,4 +1,4 @@
-/*	$NetBSD: tc.c,v 1.51 2011/06/04 01:57:34 tsutsui Exp $	*/
+/*	$NetBSD: tc.c,v 1.52 2016/07/19 16:58:05 christos Exp $	*/
 
 /*
  * Copyright (c) 1994, 1995 Carnegie-Mellon University.
@@ -28,7 +28,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: tc.c,v 1.51 2011/06/04 01:57:34 tsutsui Exp $");
+__KERNEL_RCSID(0, "$NetBSD: tc.c,v 1.52 2016/07/19 16:58:05 christos Exp $");
 
 #include "opt_tcverbose.h"
 
@@ -206,6 +206,22 @@ static const tc_offset_t tc_slot_romoffs
 #endif
 };
 
+static int
+tc_check_romp(const struct tc_rommap *romp)
+{
+	if (romp->tcr_stride.v != 4)
+		return 0;
+
+	for (size_t j = 0; j < 4; j++) {
+		if (romp->tcr_test[j + 0 * romp->tcr_stride.v] != 0x55 ||
+		    romp->tcr_test[j + 1 * romp->tcr_stride.v] != 0x00 ||
+		    romp->tcr_test[j + 2 * romp->tcr_stride.v] != 0xaa ||
+		    romp->tcr_test[j + 3 * romp->tcr_stride.v] != 0xff)
+			return 0;
+	}
+	return 1;
+}
+
 int
 tc_checkslot(tc_addr_t slotbase, char *namep)
 {
@@ -226,16 +242,9 @@ tc_checkslot(tc_addr_t slotbase, char *n
 			continue;
 		}
 
-		if (romp->tcr_stride.v != 4)
+		if (!tc_check_romp(romp))
 			continue;
 
-		for (j = 0; j < 4; j++)
-			if (romp->tcr_test[j+0*romp->tcr_stride.v] != 0x55 ||
-			    romp->tcr_test[j+1*romp->tcr_stride.v] != 0x00 ||
-			    romp->tcr_test[j+2*romp->tcr_stride.v] != 0xaa ||
-			    romp->tcr_test[j+3*romp->tcr_stride.v] != 0xff)
-				continue;
-
 		for (j = 0; j < TC_ROM_LLEN; j++)
 			namep[j] = romp->tcr_modname[j].v;
 		namep[j] = '\0';

Reply via email to