rtc: Add support for the rtc found in the MC13892 PMIC
[sfrench/cifs-2.6.git] / firmware / ihex2fw.c
index 5a03ba8c8364e9cc4dde9655871d4a13b6ff2463..ba0cf0b601bb925fc3ce514d1f1dd55569feac91 100644 (file)
@@ -55,6 +55,7 @@ static int output_records(int outfd);
 
 static int sort_records = 0;
 static int wide_records = 0;
+static int include_jump = 0;
 
 static int usage(void)
 {
@@ -63,6 +64,7 @@ static int usage(void)
        fprintf(stderr, "usage: ihex2fw [<options>] <src.HEX> <dst.fw>\n");
        fprintf(stderr, "       -w: wide records (16-bit length)\n");
        fprintf(stderr, "       -s: sort records by address\n");
+       fprintf(stderr, "       -j: include records for CS:IP/EIP address\n");
        return 1;
 }
 
@@ -73,7 +75,7 @@ int main(int argc, char **argv)
        uint8_t *data;
        int opt;
 
-       while ((opt = getopt(argc, argv, "ws")) != -1) {
+       while ((opt = getopt(argc, argv, "wsj")) != -1) {
                switch (opt) {
                case 'w':
                        wide_records = 1;
@@ -81,7 +83,9 @@ int main(int argc, char **argv)
                case 's':
                        sort_records = 1;
                        break;
-               default:
+               case 'j':
+                       include_jump = 1;
+                       break;
                        return usage();
                }
        }
@@ -128,6 +132,7 @@ static int process_ihex(uint8_t *data, ssize_t size)
 {
        struct ihex_binrec *record;
        uint32_t offset = 0;
+       uint32_t data32;
        uint8_t type, crc = 0, crcbyte = 0;
        int i, j;
        int line = 1;
@@ -223,8 +228,14 @@ next_record:
                        return -EINVAL;
                }
 
+               memcpy(&data32, &record->data[0], sizeof(data32));
+               data32 = htonl(data32);
+               memcpy(&record->data[0], &data32, sizeof(data32));
+
                /* These records contain the CS/IP or EIP where execution
-                * starts. Don't really know what to do with them. */
+                * starts. If requested output this as a record. */
+               if (include_jump)
+                       file_record(record);
                goto next_record;
 
        default: