Module Name:    src
Committed By:   phx
Date:           Tue Dec 25 17:02:35 UTC 2012

Modified Files:
        src/sys/arch/sandpoint/stand/altboot: main.c

Log Message:
Add a DEBUG function to search the Flash for byte-streams, as U-Boot usually
doesn't offer a search function.


To generate a diff of this commit:
cvs rdiff -u -r1.21 -r1.22 src/sys/arch/sandpoint/stand/altboot/main.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/sandpoint/stand/altboot/main.c
diff -u src/sys/arch/sandpoint/stand/altboot/main.c:1.21 src/sys/arch/sandpoint/stand/altboot/main.c:1.22
--- src/sys/arch/sandpoint/stand/altboot/main.c:1.21	Mon May 21 21:34:16 2012
+++ src/sys/arch/sandpoint/stand/altboot/main.c	Tue Dec 25 17:02:35 2012
@@ -1,4 +1,4 @@
-/* $NetBSD: main.c,v 1.21 2012/05/21 21:34:16 dsl Exp $ */
+/* $NetBSD: main.c,v 1.22 2012/12/25 17:02:35 phx Exp $ */
 
 /*-
  * Copyright (c) 2007 The NetBSD Foundation, Inc.
@@ -111,6 +111,7 @@ static int parse_cmdline(char **, int, c
 static int is_space(char);
 #ifdef DEBUG
 static void sat_test(void);
+static void findflash(void);
 #endif
 
 #define	BNAME_DEFAULT "wd0:"
@@ -236,12 +237,21 @@ main(int argc, char *argv[], char *boota
 			    n / 100);
 		if (tstchar()) {
 #ifdef DEBUG
-			if (toupper(getchar()) == 'C') {
+			unsigned c;
+
+			c = toupper(getchar());
+			if (c == 'C') {
 				/* controller test terminal */
 				sat_test();
 				n = 200;
 				continue;
 			}
+			else if (c == 'F') {
+				/* find strings in Flash ROM */
+				findflash();
+				n = 200;
+				continue;
+			}
 #else
 			(void)getchar();
 #endif
@@ -665,6 +675,40 @@ is_space(char c)
 
 #ifdef DEBUG
 static void
+findflash(void)
+{
+	char buf[256];
+	int i, n;
+	unsigned char c, *p;
+
+	for (;;) {
+		printf("\nfind> ");
+		gets(buf);
+		if (tolower((unsigned)buf[0]) == 'x')
+			break;
+		for (i = 0, n = 0, c = 0; buf[i]; i++) {
+			c <<= 4;
+			c |= hex2nibble(buf[i]);
+			if (i & 1)
+				buf[n++] = c;
+		}
+		printf("Searching for:");
+		for (i = 0; i < n; i++)
+			printf(" %02x", buf[i]);
+		printf("\n");
+		for (p = (unsigned char *)0xff000000;
+		     p <= (unsigned char *)(0xffffffff-n); p++) {
+			for (i = 0; i < n; i++) {
+				if (p[i] != buf[i])
+					break;
+			}
+			if (i >= n)
+				printf("Found at %08x\n", (unsigned)p);
+		}
+	}
+}
+
+static void
 sat_test(void)
 {
 	char buf[1024];

Reply via email to