[flashrom] [PATCH 1/4] Add general programmer sanity checks.
Stefan Tauner
stefan.tauner at student.tuwien.ac.at
Tue Dec 25 12:31:07 CET 2012
And remove the completely unused vendor field.
Signed-off-by: Stefan Tauner <stefan.tauner at student.tuwien.ac.at>
---
flashrom.c | 29 ++++++++++++++++++++++++++++-
programmer.h | 4 +---
2 files changed, 29 insertions(+), 4 deletions(-)
diff --git a/flashrom.c b/flashrom.c
index e2ad170..77cae7c 100644
--- a/flashrom.c
+++ b/flashrom.c
@@ -1556,8 +1556,9 @@ void print_banner(void)
int selfcheck(void)
{
- int ret = 0;
const struct flashchip *chip;
+ int i;
+ int ret = 0;
/* Safety check. Instead of aborting after the first error, check
* if more errors exist.
@@ -1566,6 +1567,32 @@ int selfcheck(void)
msg_gerr("Programmer table miscompilation!\n");
ret = 1;
}
+ for (i = 0; i < PROGRAMMER_INVALID; i++) {
+ const struct programmer_entry p = programmer_table[i];
+ if (p.name == NULL) {
+ msg_gerr("All programmers need a valid name, but the one with index %d does not!\n", i);
+ ret = 1;
+ /* This might hide other problems with this programmer, but allows for better error
+ * messages below without jumping through hoops. */
+ continue;
+ }
+ if (p.init == NULL) {
+ msg_gerr("Programmer %s does not have a valid init function!\n", p.name);
+ ret = 1;
+ }
+ if (p.delay == NULL) {
+ msg_gerr("Programmer %s does not have a valid delay function!\n", p.name);
+ ret = 1;
+ }
+ if (p.map_flash_region == NULL) {
+ msg_gerr("Programmer %s does not have a valid map_flash_region function!\n", p.name);
+ ret = 1;
+ }
+ if (p.unmap_flash_region == NULL) {
+ msg_gerr("Programmer %s does not have a valid unmap_flash_region function!\n", p.name);
+ ret = 1;
+ }
+ }
/* It would be favorable if we could also check for correct termination
* of the following arrays, but we don't know their sizes in here...
* For 'flashchips' we check the first element to be non-null. In the
diff --git a/programmer.h b/programmer.h
index dedec67..1510e2f 100644
--- a/programmer.h
+++ b/programmer.h
@@ -91,13 +91,11 @@ enum programmer {
};
struct programmer_entry {
- const char *vendor;
const char *name;
int (*init) (void);
- void *(*map_flash_region) (const char *descr, unsigned long phys_addr,
- size_t len);
+ void *(*map_flash_region) (const char *descr, unsigned long phys_addr, size_t len);
void (*unmap_flash_region) (void *virt_addr, size_t len);
void (*delay) (int usecs);
--
Kind regards, Stefan Tauner
More information about the flashrom
mailing list