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