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:
parent
ef58a9ce3f
commit
37fc469ca2
1
flash.h
1
flash.h
@ -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;
|
||||||
|
68
flashrom.c
68
flashrom.c
@ -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);
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user