Author: hailfinger
Date: 2009-01-28 01:27:54 +0100 (Wed, 28 Jan 2009)
New Revision: 3923

Modified:
   trunk/util/flashrom/flashrom.c
Log:
Factor out read and erase functions from flashrom main().

Signed-off-by: Carl-Daniel Hailfinger <[email protected]>
Acked-by: Peter Stuge <[email protected]>


Modified: trunk/util/flashrom/flashrom.c
===================================================================
--- trunk/util/flashrom/flashrom.c      2009-01-28 00:19:49 UTC (rev 3922)
+++ trunk/util/flashrom/flashrom.c      2009-01-28 00:27:54 UTC (rev 3923)
@@ -187,6 +187,61 @@
        return 0;
 }
 
+int read_flash(struct flashchip *flash, char *filename, unsigned int 
exclude_start_position, unsigned int exclude_end_position)
+{
+       unsigned long numbytes;
+       FILE *image;
+       unsigned long size = flash->total_size * 1024;
+       unsigned char *buf = calloc(size, sizeof(char));
+       if ((image = fopen(filename, "w")) == NULL) {
+               perror(filename);
+               exit(1);
+       }
+       printf("Reading flash... ");
+       if (flash->read == NULL)
+               memcpy(buf, (const char *)flash->virtual_memory, size);
+       else
+               flash->read(flash, buf);
+
+       if (exclude_end_position - exclude_start_position > 0)
+               memset(buf + exclude_start_position, 0,
+                      exclude_end_position - exclude_start_position);
+
+       numbytes = fwrite(buf, 1, size, image);
+       fclose(image);
+       printf("%s.\n", numbytes == size ? "done" : "FAILED");
+       if (numbytes != size)
+               return 1;
+       return 0;
+}
+
+int erase_flash(struct flashchip *flash)
+{
+       uint32_t erasedbytes;
+       unsigned long size = flash->total_size * 1024;
+       unsigned char *buf = calloc(size, sizeof(char));
+       printf("Erasing flash chip... ");
+       if (NULL == flash->erase) {
+               printf("FAILED!\n");
+               fprintf(stderr, "ERROR: flashrom has no erase function for this 
flash chip.\n");
+               return 1;
+       }
+       flash->erase(flash);
+       if (NULL == flash->read)
+               memcpy(buf, (const char *)flash->virtual_memory, size);
+       else
+               flash->read(flash, buf);
+       for (erasedbytes = 0; erasedbytes < size; erasedbytes++)
+               if (0xff != buf[erasedbytes]) {
+                       printf("FAILED!\n");
+                       fprintf(stderr, "ERROR at 0x%08x: Expected=0xff, 
Read=0x%02x\n",
+                               erasedbytes, buf[erasedbytes]);
+                       return 1;
+               }
+       printf("SUCCESS.\n");
+       return 0;
+}
+
 #define MAX(a, b) ((a) > (b) ? (a) : (b))
 #define POS_PRINT(x) do { pos += strlen(x); printf(x); } while (0)
 
@@ -279,7 +334,6 @@
 {
        uint8_t *buf;
        unsigned long size, numbytes;
-       uint32_t erasedbytes;
        FILE *image;
        /* Probe for up to three flash chips. */
        struct flashchip *flash, *flashes[3];
@@ -555,45 +609,10 @@
        buf = (uint8_t *) calloc(size, sizeof(char));
 
        if (erase_it) {
-               printf("Erasing flash chip... ");
-               if (NULL == flash->erase) {
-                       printf("FAILED!\n");
-                       fprintf(stderr, "ERROR: flashrom has no erase function 
for this flash chip.\n");
+               if (erase_flash(flash))
                        return 1;
-               }
-               flash->erase(flash);
-               if (NULL == flash->read)
-                       memcpy(buf, (const char *)flash->virtual_memory, size);
-               else
-                       flash->read(flash, buf);
-               for (erasedbytes = 0; erasedbytes < size; erasedbytes++)
-                       if (0xff != buf[erasedbytes]) {
-                               printf("FAILED!\n");
-                               fprintf(stderr, "ERROR at 0x%08x: 
Expected=0xff, Read=0x%02x\n",
-                                       erasedbytes, buf[erasedbytes]);
-                               return 1;
-                       }
-               printf("SUCCESS.\n");
-               return 0;
        } else if (read_it) {
-               if ((image = fopen(filename, "w")) == NULL) {
-                       perror(filename);
-                       exit(1);
-               }
-               printf("Reading flash... ");
-               if (flash->read == NULL)
-                       memcpy(buf, (const char *)flash->virtual_memory, size);
-               else
-                       flash->read(flash, buf);
-
-               if (exclude_end_position - exclude_start_position > 0)
-                       memset(buf + exclude_start_position, 0,
-                              exclude_end_position - exclude_start_position);
-
-               numbytes = fwrite(buf, 1, size, image);
-               fclose(image);
-               printf("%s.\n", numbytes == size ? "done" : "FAILED");
-               if (numbytes != size)
+               if (read_flash(flash, filename, exclude_start_position, 
exclude_end_position))
                        return 1;
        } else {
                struct stat image_stat;


--
coreboot mailing list: [email protected]
http://www.coreboot.org/mailman/listinfo/coreboot

Reply via email to