Add support for human-friendly component string types for the cbfstool add
authorWard Vandewege <ward@gnu.org>
Wed, 13 May 2009 20:08:28 +0000 (20:08 +0000)
committerMyles Watson <mylesgw@gmail.com>
Wed, 13 May 2009 20:08:28 +0000 (20:08 +0000)
command.

Make use of it in config.g (Myles)

Signed-off-by: Ward Vandewege <ward@gnu.org>
Acked-by: Myles Watson <mylesgw@gmail.com>
git-svn-id: svn://svn.coreboot.org/coreboot/trunk@4282 2b7e53f0-3cfb-0310-b3e9-8179ed1497e1

util/cbfstool/add.c
util/newconfig/config.g

index 83f8d29462b93e68b498f568e6bcbb6bba00985e..a62a15857b15e42efbf034540be21e5294ada218 100644 (file)
@@ -219,6 +219,22 @@ void add_payload_usage(void)
            ("add-payload FILE NAME [OPTIONS]\tAdd a payload to the ROM\n");
 }
 
+int select_component_type(char *s)
+{
+       int i = 0;
+       char *accepted_strings[] = {
+               "stage",
+               "payload",
+               "optionrom",
+               "deleted",
+               "free",
+       };
+       for (i=0; i < 5; i++)
+               if (!strcmp(s, accepted_strings[i]))
+                       return i;
+       return -1;
+}
+
 int add_handler(struct rom *rom, int argc, char **argv)
 {
        unsigned int type = CBFS_COMPONENT_NULL;
@@ -233,13 +249,33 @@ int add_handler(struct rom *rom, int argc, char **argv)
                return -1;
        }
 
+       int component_type;
+
        /* There are two ways to specify the type - a string or a number */
 
        if (isdigit(*(argv[2])))
                type = strtoul(argv[2], 0, 0);
        else {
-               ERROR("String types (%s) aren't implemented yet.\n", argv[2]);
-               return -1;
+               switch( component_type = select_component_type(argv[2])) {
+                       case 0:
+                               type = CBFS_COMPONENT_STAGE;
+                               break;
+                       case 1:
+                               type = CBFS_COMPONENT_PAYLOAD;
+                               break;
+                       case 2:
+                               type = CBFS_COMPONENT_OPTIONROM;
+                               break;
+                       case 3:
+                               type = CBFS_COMPONENT_DELETED;
+                               break;
+                       case 4:
+                               type = CBFS_COMPONENT_NULL;
+                               break;
+                       default:
+                               ERROR("Unrecognized component type %s.\nValid options are: stage, payload, optionrom, deleted, free.\n", argv[2]);
+                               return -1;
+               }
        }
 
        return add_blob(rom, argv[0], argv[1], type);
index 853f0dcc45ccddab99af93206f9f4d8f229fa038..f2b8df17a99490cbcce84e23e8d963e374a0bf7d 100644 (file)
@@ -2298,7 +2298,7 @@ def writemakefile(path):
                file.write("\t./cbfstool %s create %s %s %s.bootblock\n"
                           %(i.name, romsize, bootblocksize, i.name))
                for j in pciroms:
-                       file.write("\t./cbfstool %s add %s pci%04x,%04x.rom 48\n" % (i.name, j.name, j.pci_vid, j.pci_did))
+                       file.write("\t./cbfstool %s add %s pci%04x,%04x.rom optionrom\n" % (i.name, j.name, j.pci_vid, j.pci_did))
                for j in i.roms:
                        #failover is a hack that will go away soon. 
                        if (j != "failover") and (rommapping[j] != "/dev/null"):