Add --list-supported option which lists the supported ROM chips, chipsets, and mainboards

Corresponding to flashrom svn r199 and coreboot v2 svn r3133.

Signed-off-by: Uwe Hermann <uwe@hermann-uwe.de>
Acked-by: Ward Vandewege <ward@gnu.org>
diff --git a/flashrom.c b/flashrom.c
index 59196bc..a176319 100644
--- a/flashrom.c
+++ b/flashrom.c
@@ -193,9 +193,19 @@
 	return 0;
 }
 
+void print_supported_chips(void)
+{
+	int i;
+
+	printf("Supported ROM chips:\n\n");
+
+	for (i = 0; flashchips[i].name != NULL; i++)
+		printf("%s\n", flashchips[i].name);
+}
+
 void usage(const char *name)
 {
-	printf("usage: %s [-rwvEVfhR] [-c chipname] [-s exclude_start]\n", name);
+	printf("usage: %s [-rwvEVfLhR] [-c chipname] [-s exclude_start]\n", name);
 	printf("       [-e exclude_end] [-m [vendor:]part] [-l file.layout] [-i imagename] [file]\n");
 	printf
 	    ("   -r | --read:                      read flash and save into file\n"
@@ -210,8 +220,10 @@
 	     "   -f | --force:                     force write without checking image\n"
 	     "   -l | --layout <file.layout>:      read rom layout from file\n"
 	     "   -i | --image <name>:              only flash image name from flash layout\n"
+	     "   -L | --list-supported:            print supported devices\n"
+	     "   -h | --help:                      print this help text\n"
 	     "   -R | --version:                   print the version (release)\n"
-            "\n" " If no file is specified, then all that happens"
+	     "\n" " If no file is specified, then all that happens"
 	     " is that flash info is dumped.\n\n");
 	exit(1);
 }
@@ -245,6 +257,7 @@
 		{"force", 0, 0, 'f'},
 		{"layout", 1, 0, 'l'},
 		{"image", 1, 0, 'i'},
+		{"list-supported", 0, 0, 'L'},
 		{"help", 0, 0, 'h'},
 		{"version", 0, 0, 'R'},
 		{0, 0, 0, 0}
@@ -264,7 +277,7 @@
 	}
 
 	setbuf(stdout, NULL);
-	while ((opt = getopt_long(argc, argv, "rRwvVEfc:s:e:m:l:i:h",
+	while ((opt = getopt_long(argc, argv, "rRwvVEfc:s:e:m:l:i:Lh",
 				  long_options, &option_index)) != EOF) {
 		switch (opt) {
 		case 'r':
@@ -317,6 +330,12 @@
 			tempstr = strdup(optarg);
 			find_romentry(tempstr);
 			break;
+		case 'L':
+			print_supported_chips();
+			print_supported_chipsets();
+			print_supported_boards();
+			exit(0);
+			break;
 		case 'R':
 			print_version();
 			exit(0);