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';