tools/firmware-utils: remove hardcoded values from mktplinkfw2.c
[openwrt/openwrt.git] / tools / firmware-utils / src / mktplinkfw2.c
index 905220538b11c0cce1ec646b517f60b86b6e6747..f1d46bddb9f5149f71908aad7792b10d267e71bc 100644 (file)
@@ -101,7 +101,6 @@ static uint32_t hdr_ver = 2;
 
 static struct board_info custom_board;
 
-static char *board_id;
 static struct board_info *board;
 static char *layout_id;
 static struct flash_layout *layout;
@@ -169,65 +168,6 @@ static struct flash_layout layouts[] = {
        }
 };
 
-static struct board_info boards[] = {
-       {
-               .id             = "TD-W8970v1",
-               .hw_id          = 0x89700001,
-               .hw_rev         = 1,
-               .layout_id      = "8Mltq",
-       }, {
-               .id             = "TD-W8980v1",
-               .hw_id          = 0x89800001,
-               .hw_rev         = 14,
-               .layout_id      = "8Mltq",
-       }, {
-               .id             = "ArcherC20i",
-               .hw_id          = 0xc2000001,
-               .hw_rev         = 58,
-               .layout_id      = "8Mmtk",
-               .hdr_ver        = 3,
-               .flags          = FLAG_LE_KERNEL_LA_EP,
-       }, {
-               .id             = "ArcherVR200V",
-               .hw_id          = 0x73b70801,
-               .hw_rev         = 0x2f,
-               .layout_id      = "16Mltq",
-               .hdr_ver        = 2,
-       }, {
-               .id             = "ArcherC50",
-               .hw_id          = 0xc7500001,
-               .hw_rev         = 69,
-               .layout_id      = "8Mmtk",
-               .hdr_ver        = 3,
-               .flags          = FLAG_LE_KERNEL_LA_EP,
-       }, {
-               .id             = "ArcherMR200",
-               .hw_id          = 0xd7500001,
-               .hw_rev         = 0x4a,
-               .layout_id      = "8MLmtk",
-               .hdr_ver        = 3,
-               .flags          = FLAG_LE_KERNEL_LA_EP,
-       }, {
-               .id             = "TL-WR840NV4",
-               .hw_id          = 0x08400004,
-               .hw_rev         = 0x1,
-               .hw_ver_add     = 0x4,
-               .layout_id      = "8Mmtk",
-               .hdr_ver        = 3,
-               .flags          = FLAG_LE_KERNEL_LA_EP,
-       }, {
-               .id             = "TL-WR841NV13",
-               .hw_id          = 0x08410013,
-               .hw_rev         = 0x268,
-               .hw_ver_add     = 0x13,
-               .layout_id      = "8Mmtk",
-               .hdr_ver        = 3,
-               .flags          = FLAG_LE_KERNEL_LA_EP,
-       }, {
-               /* terminating entry */
-       }
-};
-
 /*
  * Message macros
  */
@@ -248,34 +188,6 @@ static struct board_info boards[] = {
        fprintf(stderr, "[%s] " fmt "\n", progname, ## __VA_ARGS__ ); \
 } while (0)
 
-static struct board_info *find_board(char *id)
-{
-       struct board_info *ret;
-       struct board_info *board;
-
-       ret = NULL;
-       for (board = boards; board->id != NULL; board++){
-               if (strcasecmp(id, board->id) == 0) {
-                       ret = board;
-                       break;
-               }
-       };
-
-       return ret;
-}
-
-static struct board_info *find_board_by_hwid(uint32_t hw_id)
-{
-       struct board_info *board;
-
-       for (board = boards; board->id != NULL; board++) {
-               if (hw_id == board->hw_id)
-                       return board;
-       };
-
-       return NULL;
-}
-
 static struct flash_layout *find_layout(char *id)
 {
        struct flash_layout *ret;
@@ -301,7 +213,6 @@ static void usage(int status)
        fprintf(stream,
 "\n"
 "Options:\n"
-"  -B <board>      create image for the board specified with <board>\n"
 "  -c              use combined kernel image\n"
 "  -e              swap endianness in kernel load address and entry point\n"
 "  -E <ep>         overwrite kernel entry point with <ep> (hexval prefixed with 0x)\n"
@@ -398,42 +309,27 @@ static int check_options(void)
                return -1;
        }
 
-       if (board_id == NULL && opt_hw_id == NULL) {
-               ERR("either board or hardware id must be specified");
+       if (opt_hw_id == NULL) {
+               ERR("hardware id must be specified");
                return -1;
        }
 
-       if (board_id) {
-               board = find_board(board_id);
-               if (board == NULL) {
-                       ERR("unknown/unsupported board id \"%s\"", board_id);
-                       return -1;
-               }
-               if (layout_id == NULL)
-                       layout_id = board->layout_id;
+       board = &custom_board;
 
-               if (board->hdr_ver)
-                       hdr_ver = board->hdr_ver;
-       } else {
-               board = &custom_board;
-
-               if (layout_id == NULL) {
-                       ERR("flash layout is not specified");
-                       return -1;
-               }
+       if (layout_id == NULL) {
+               ERR("flash layout is not specified");
+               return -1;
+       }
 
-               board->hw_id = strtoul(opt_hw_id, NULL, 0);
+       board->hw_id = strtoul(opt_hw_id, NULL, 0);
 
-               if (opt_hw_rev)
-                       board->hw_rev = strtoul(opt_hw_rev, NULL, 0);
-               else
-                       board->hw_rev = 1;
+       board->hw_rev = 1;
+       board->hw_ver_add = 0;
 
-               if (opt_hw_ver_add)
-                       board->hw_ver_add = strtoul(opt_hw_ver_add, NULL, 0);
-               else
-                       board->hw_ver_add = 0;
-       }
+       if (opt_hw_rev)
+               board->hw_rev = strtoul(opt_hw_rev, NULL, 0);
+       if (opt_hw_ver_add)
+               board->hw_ver_add = strtoul(opt_hw_ver_add, NULL, 0);
 
        layout = find_layout(layout_id);
        if (layout == NULL) {
@@ -793,6 +689,13 @@ static int inspect_fw(void)
                goto out_free_buf;
        hdr = (struct fw_header *)buf;
 
+       board = &custom_board;
+
+       if (board->flags & FLAG_LE_KERNEL_LA_EP) {
+               hdr->kernel_la = bswap_32(hdr->kernel_la);
+               hdr->kernel_ep = bswap_32(hdr->kernel_ep);
+       }
+
        inspect_fw_pstr("File name", inspect_info.file_name);
        inspect_fw_phexdec("File size", inspect_info.file_size);
 
@@ -838,23 +741,12 @@ static int inspect_fw(void)
 
        inspect_fw_pstr("Firmware version", hdr->fw_version);
 
-       board = find_board_by_hwid(ntohl(hdr->hw_id));
-       if (board) {
-               layout = find_layout(board->layout_id);
-               inspect_fw_phexpost("Hardware ID",
-                                   ntohl(hdr->hw_id), board->id);
-               inspect_fw_phexexp("Hardware Revision",
-                                  ntohl(hdr->hw_rev), board->hw_rev);
-               inspect_fw_phexexp("Additional HW Version",
-                                  ntohl(hdr->hw_ver_add), board->hw_ver_add);
-       } else {
-               inspect_fw_phexpost("Hardware ID",
-                                   ntohl(hdr->hw_id), "unknown");
-               inspect_fw_phex("Hardware Revision",
-                               ntohl(hdr->hw_rev));
-               inspect_fw_phex("Additional HW Version",
-                               ntohl(hdr->hw_ver_add));
-       }
+       inspect_fw_phexpost("Hardware ID",
+                           ntohl(hdr->hw_id), "unknown");
+       inspect_fw_phex("Hardware Revision",
+                       ntohl(hdr->hw_rev));
+       inspect_fw_phex("Additional HW Version",
+                       ntohl(hdr->hw_ver_add));
 
        printf("%-23s: %d.%d.%d-%d.%d\n", "Software version",
               hdr->ver_hi, hdr->ver_mid, hdr->ver_lo,
@@ -866,24 +758,12 @@ static int inspect_fw(void)
                           ntohl(hdr->kernel_ofs));
        inspect_fw_phexdec("Kernel data length",
                           ntohl(hdr->kernel_len));
-       if (board) {
-               inspect_fw_phexdef("Kernel load address",
-                                  ntohl(hdr->kernel_la),
-                                  layout ? layout->kernel_la : 0xffffffff);
-               inspect_fw_phexdef("Kernel entry point",
-                                  ntohl(hdr->kernel_ep),
-                                  layout ? layout->kernel_ep : 0xffffffff);
-               inspect_fw_phexdecdef("Rootfs data offset",
-                                     ntohl(hdr->rootfs_ofs),
-                                     layout ? layout->rootfs_ofs : 0xffffffff);
-       } else {
-               inspect_fw_phex("Kernel load address",
-                               ntohl(hdr->kernel_la));
-               inspect_fw_phex("Kernel entry point",
-                               ntohl(hdr->kernel_ep));
-               inspect_fw_phexdec("Rootfs data offset",
-                                  ntohl(hdr->rootfs_ofs));
-       }
+       inspect_fw_phex("Kernel load address",
+                       ntohl(hdr->kernel_la));
+       inspect_fw_phex("Kernel entry point",
+                       ntohl(hdr->kernel_ep));
+       inspect_fw_phexdec("Rootfs data offset",
+                          ntohl(hdr->rootfs_ofs));
        inspect_fw_phexdec("Rootfs data length",
                           ntohl(hdr->rootfs_len));
        inspect_fw_phexdec("Boot loader data offset",
@@ -948,7 +828,7 @@ int main(int argc, char *argv[])
        while ( 1 ) {
                int c;
 
-               c = getopt(argc, argv, "a:B:H:E:F:L:V:N:W:w:ci:k:r:R:o:xhsjv:y:T:e");
+               c = getopt(argc, argv, "a:H:E:F:L:V:N:W:w:ci:k:r:R:o:xhsjv:y:T:e");
                if (c == -1)
                        break;
 
@@ -956,9 +836,6 @@ int main(int argc, char *argv[])
                case 'a':
                        sscanf(optarg, "0x%x", &rootfs_align);
                        break;
-               case 'B':
-                       board_id = optarg;
-                       break;
                case 'H':
                        opt_hw_id = optarg;
                        break;