[coreboot] r3803 - trunk/util/flashrom

svn at coreboot.org svn at coreboot.org
Sat Dec 6 02:37:09 CET 2008


Author: stuge
Date: 2008-12-06 02:37:09 +0100 (Sat, 06 Dec 2008)
New Revision: 3803

Modified:
   trunk/util/flashrom/flashrom.c
Log:
flashrom: Display test status in -L chip listing

Looks like this:

Supported flash chips:          Tested OK operations:   Known BAD operations:

AMD Am29F002(N)BB                                       
AMD Am29F002(N)BT               PROBE READ ERASE WRITE  
AMD Am29F016D                                           
AMD Am29F040B                   PROBE READ ERASE WRITE  
AMD Am29LV040B                                          
Atmel AT45CS1282                                        READ 

Signed-off-by: Peter Stuge <peter at stuge.se>
Acked-by: Uwe Hermann <uwe at hermann-uwe.de>


Modified: trunk/util/flashrom/flashrom.c
===================================================================
--- trunk/util/flashrom/flashrom.c	2008-12-05 22:38:18 UTC (rev 3802)
+++ trunk/util/flashrom/flashrom.c	2008-12-06 01:37:09 UTC (rev 3803)
@@ -205,14 +205,61 @@
 	return 0;
 }
 
+#define MAX(a, b) ((a) > (b) ? (a) : (b))
+#define POS_PRINT(x) do { pos += strlen(x); printf(x); } while (0)
+
 void print_supported_chips(void)
 {
-	int i;
+	int okcol = 0, pos = 0;
+	struct flashchip *f;
 
-	printf("Supported ROM chips:\n\n");
+	for (f = flashchips; f->name != NULL; f++) {
+		if (GENERIC_DEVICE_ID == f->model_id)
+			continue;
+		okcol = MAX(okcol, strlen(f->vendor) + 1 + strlen(f->name));
+	}
+	okcol = (okcol + 7) & ~7;
 
-	for (i = 0; flashchips[i].name != NULL; i++)
-		printf("%s %s\n", flashchips[i].vendor, flashchips[i].name);
+	POS_PRINT("Supported flash chips:");
+	while (pos < okcol) {
+		printf("\t");
+		pos += 8 - (pos % 8);
+	}
+	printf("Tested OK operations:\tKnown BAD operations:\n\n");
+
+	for (f = flashchips; f->name != NULL; f++) {
+		printf("%s %s", f->vendor, f->name);
+		pos = strlen(f->vendor) + 1 + strlen(f->name);
+		while (pos < okcol) {
+			printf("\t");
+			pos += 8 - (pos % 8);
+		}
+		if ((f->tested & TEST_OK_MASK)) {
+			if ((f->tested & TEST_OK_PROBE))
+				POS_PRINT("PROBE ");
+			if ((f->tested & TEST_OK_READ))
+				POS_PRINT("READ ");
+			if ((f->tested & TEST_OK_ERASE))
+				POS_PRINT("ERASE ");
+			if ((f->tested & TEST_OK_WRITE))
+				POS_PRINT("WRITE");
+		}
+		while (pos < okcol + 24) {
+			printf("\t");
+			pos += 8 - (pos % 8);
+		}
+		if ((f->tested & TEST_BAD_MASK)) {
+			if ((f->tested & TEST_BAD_PROBE))
+				printf("PROBE ");
+			if ((f->tested & TEST_BAD_READ))
+				printf("READ ");
+			if ((f->tested & TEST_BAD_ERASE))
+				printf("ERASE ");
+			if ((f->tested & TEST_BAD_WRITE))
+				printf("WRITE");
+		}
+		printf("\n");
+	}
 }
 
 void usage(const char *name)





More information about the coreboot mailing list