1
0
mirror of https://review.coreboot.org/flashrom.git synced 2025-04-28 07:23:43 +02:00

Add a new field for the names of programmers and use it to match against user input

Use programmer.name to match the --programmer parameter instead of
hardcoding the name of every single programmer in main().

-p dummyfoo won't be mistaken for -p dummy anymore.

Corresponding to flashrom svn r680.

Signed-off-by: Carl-Daniel Hailfinger <c-d.hailfinger.devel.2006@gmx.net>
Acked-by: Stefan Reinauer <stepan@coresystems.de>
This commit is contained in:
Carl-Daniel Hailfinger 2009-08-12 14:34:35 +00:00
parent ef58a9ce3f
commit 37fc469ca2
2 changed files with 39 additions and 30 deletions

View File

@ -88,6 +88,7 @@ enum programmer {
PROGRAMMER_IT87SPI, PROGRAMMER_IT87SPI,
PROGRAMMER_FT2232SPI, PROGRAMMER_FT2232SPI,
PROGRAMMER_SERPROG, PROGRAMMER_SERPROG,
PROGRAMMER_INVALID /* This must always be the last entry. */
}; };
extern enum programmer programmer; extern enum programmer programmer;

View File

@ -38,6 +38,7 @@ char *programmer_param = NULL;
const struct programmer_entry programmer_table[] = { const struct programmer_entry programmer_table[] = {
{ {
.name = "internal",
.init = internal_init, .init = internal_init,
.shutdown = internal_shutdown, .shutdown = internal_shutdown,
.map_flash_region = physmap, .map_flash_region = physmap,
@ -54,6 +55,7 @@ const struct programmer_entry programmer_table[] = {
}, },
{ {
.name = "dummy",
.init = dummy_init, .init = dummy_init,
.shutdown = dummy_shutdown, .shutdown = dummy_shutdown,
.map_flash_region = dummy_map, .map_flash_region = dummy_map,
@ -70,6 +72,7 @@ const struct programmer_entry programmer_table[] = {
}, },
{ {
.name = "nic3com",
.init = nic3com_init, .init = nic3com_init,
.shutdown = nic3com_shutdown, .shutdown = nic3com_shutdown,
.map_flash_region = fallback_map, .map_flash_region = fallback_map,
@ -86,6 +89,7 @@ const struct programmer_entry programmer_table[] = {
}, },
{ {
.name = "satasii",
.init = satasii_init, .init = satasii_init,
.shutdown = satasii_shutdown, .shutdown = satasii_shutdown,
.map_flash_region = fallback_map, .map_flash_region = fallback_map,
@ -102,6 +106,7 @@ const struct programmer_entry programmer_table[] = {
}, },
{ {
.name = "it87spi",
.init = it87spi_init, .init = it87spi_init,
.shutdown = fallback_shutdown, .shutdown = fallback_shutdown,
.map_flash_region = fallback_map, .map_flash_region = fallback_map,
@ -118,6 +123,7 @@ const struct programmer_entry programmer_table[] = {
}, },
{ {
.name = "ft2232spi",
.init = ft2232_spi_init, .init = ft2232_spi_init,
.shutdown = fallback_shutdown, .shutdown = fallback_shutdown,
.map_flash_region = fallback_map, .map_flash_region = fallback_map,
@ -134,6 +140,7 @@ const struct programmer_entry programmer_table[] = {
}, },
{ {
.name = "serprog",
.init = serprog_init, .init = serprog_init,
.shutdown = serprog_shutdown, .shutdown = serprog_shutdown,
.map_flash_region = fallback_map, .map_flash_region = fallback_map,
@ -149,7 +156,7 @@ const struct programmer_entry programmer_table[] = {
.delay = serprog_delay, .delay = serprog_delay,
}, },
{}, {}, /* This entry corresponds to PROGRAMMER_INVALID. */
}; };
int programmer_init(void) int programmer_init(void)
@ -523,6 +530,8 @@ int main(int argc, char *argv[])
FILE *image; FILE *image;
/* Probe for up to three flash chips. */ /* Probe for up to three flash chips. */
struct flashchip *flash, *flashes[3]; struct flashchip *flash, *flashes[3];
const char *name;
int namelen;
int opt; int opt;
int option_index = 0; int option_index = 0;
int force = 0; int force = 0;
@ -565,6 +574,12 @@ int main(int argc, char *argv[])
printf_debug("%s\n", argv[i]); printf_debug("%s\n", argv[i]);
} }
/* Safety check. */
if (ARRAY_SIZE(programmer_table) - 1 != PROGRAMMER_INVALID) {
fprintf(stderr, "Programmer table miscompilation!\n");
exit(1);
}
setbuf(stdout, NULL); setbuf(stdout, NULL);
while ((opt = getopt_long(argc, argv, "rRwvnVEfc:m:l:i:p:Lzh", while ((opt = getopt_long(argc, argv, "rRwvnVEfc:m:l:i:p:Lzh",
long_options, &option_index)) != EOF) { long_options, &option_index)) != EOF) {
@ -641,35 +656,28 @@ int main(int argc, char *argv[])
list_supported_wiki = 1; list_supported_wiki = 1;
break; break;
case 'p': case 'p':
if (strncmp(optarg, "internal", 8) == 0) { for (programmer = 0; programmer < PROGRAMMER_INVALID; programmer++) {
programmer = PROGRAMMER_INTERNAL; name = programmer_table[programmer].name;
if (optarg[8] == '=') namelen = strlen(name);
programmer_param = strdup(optarg + 9); if (strncmp(optarg, name, namelen) == 0) {
} else if (strncmp(optarg, "dummy", 5) == 0) { switch (optarg[namelen]) {
programmer = PROGRAMMER_DUMMY; case '=':
if (optarg[5] == '=') programmer_param = strdup(optarg + namelen + 1);
programmer_param = strdup(optarg + 6); break;
} else if (strncmp(optarg, "nic3com", 7) == 0) { case '\0':
programmer = PROGRAMMER_NIC3COM; break;
if (optarg[7] == '=') default:
programmer_param = strdup(optarg + 8); /* The continue refers to the
} else if (strncmp(optarg, "satasii", 7) == 0) { * for loop. It is here to be
programmer = PROGRAMMER_SATASII; * able to differentiate between
if (optarg[7] == '=') * foo and foobar.
programmer_param = strdup(optarg + 8); */
} else if (strncmp(optarg, "it87spi", 7) == 0) { continue;
programmer = PROGRAMMER_IT87SPI; }
if (optarg[7] == '=') break;
programmer_param = strdup(optarg + 8); }
} else if (strncmp(optarg, "ft2232spi", 9) == 0) { }
programmer = PROGRAMMER_FT2232SPI; if (programmer == PROGRAMMER_INVALID) {
if (optarg[9] == '=')
programmer_param = strdup(optarg + 10);
} else if (strncmp(optarg, "serprog", 7) == 0) {
programmer = PROGRAMMER_SERPROG;
if (optarg[7] == '=')
programmer_param = strdup(optarg + 8);
} else {
printf("Error: Unknown programmer.\n"); printf("Error: Unknown programmer.\n");
exit(1); exit(1);
} }