summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPeter Stuge <peter@stuge.se>2008-12-06 01:37:09 +0000
committerPeter Stuge <peter@stuge.se>2008-12-06 01:37:09 +0000
commitf0ef27bc5af918581ee4087854c25b54c0d145b6 (patch)
tree86c0c65dd3a1c07610ed189be197e2fac2bca0ad
parentf63c0dcba949ff8a50f1670282d16d25eb8df782 (diff)
downloadast2050-flashrom-f0ef27bc5af918581ee4087854c25b54c0d145b6.zip
ast2050-flashrom-f0ef27bc5af918581ee4087854c25b54c0d145b6.tar.gz
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 Corresponding to flashrom svn r362 and coreboot v2 svn r3803. Signed-off-by: Peter Stuge <peter@stuge.se> Acked-by: Uwe Hermann <uwe@hermann-uwe.de>
-rw-r--r--flashrom.c55
1 files changed, 51 insertions, 4 deletions
diff --git a/flashrom.c b/flashrom.c
index de3fab5..623ce7f 100644
--- a/flashrom.c
+++ b/flashrom.c
@@ -205,14 +205,61 @@ int verify_flash(struct flashchip *flash, uint8_t *buf)
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)
OpenPOWER on IntegriCloud