firmware-utils/mktplinkfw: add TL-WR741ND v4
[openwrt.git] / tools / firmware-utils / src / mkfwimage.c
index 0a2f74e..ff84d83 100644 (file)
@@ -34,9 +34,6 @@
 typedef struct fw_layout_data {
        char            name[PATH_MAX];
        u_int32_t       kern_start;
-       u_int32_t       kern_len;
-       u_int32_t       root_start;
-       u_int32_t       root_len;
        u_int32_t       kern_entry;
        u_int32_t       firmware_max_length;
 } fw_layout_t;
@@ -45,29 +42,44 @@ fw_layout_t fw_layout_data[] = {
        {
                .name           =       "XS2",
                .kern_start     =       0xbfc30000,
-               .kern_len       =       0x00140000,
-               .root_start     =       0xbfc30000 + 0x00140000,
-               .root_len       =       0x002C0000,
                .kern_entry     =       0x80041000,
                .firmware_max_length=   0x00390000,
        },
        {
                .name           =       "XS5",
                .kern_start     =       0xbe030000,
-               .kern_len       =       0x00140000,
-               .root_start     =       0xbe030000 + 0x00140000,
-               .root_len       =       0x002C0000,
                .kern_entry     =       0x80041000,
                .firmware_max_length=   0x00390000,
        },
        {
                .name           =       "RS",
-               .kern_start     =       0x00000000,
-               .kern_len       =       0x00140000,
-               .root_start     =       0x00000000,
-               .root_len       =       0x002C0000,
+               .kern_start     =       0xbf030000,
                .kern_entry     =       0x80060000,
-               .firmware_max_length=   0x00140000 + 0x002C0000,
+               .firmware_max_length=   0x00B00000,
+       },
+       {
+               .name           =       "RSPRO",
+               .kern_start     =       0xbf030000,
+               .kern_entry     =       0x80060000,
+               .firmware_max_length=   0x00B00000,
+       },
+       {
+               .name           =       "LS-SR71",
+               .kern_start     =       0xbf030000,
+               .kern_entry     =       0x80060000,
+               .firmware_max_length=   0x00640000,
+       },
+       {
+               .name           =       "XS2-8",
+               .kern_start     =       0xa8030000,
+               .kern_entry     =       0x80041000,
+               .firmware_max_length=   0x006C0000,
+       },
+       {
+               .name           =       "XM",
+               .kern_start     =       0x9f050000,
+               .kern_entry     =       0x80002000,
+               .firmware_max_length=   0x006A0000,
        },
        {       .name           =       "",
        },
@@ -173,7 +185,7 @@ static void usage(const char* progname)
             "\t-o <output file>\t - firmware output file, default: %s\n"
             "\t-k <kernel file>\t\t - kernel file\n"
             "\t-r <rootfs file>\t\t - rootfs file\n"
-            "\t-B <board name>\t\t - choose firmware layout for specified board (XS2, XS5, RS)\n"
+            "\t-B <board name>\t\t - choose firmware layout for specified board (XS2, XS5, RS, XM)\n"
             "\t-h\t\t\t - this help\n", VERSION,
             progname, DEFAULT_VERSION, DEFAULT_OUTPUT_FILE);
 }
@@ -243,14 +255,14 @@ static int create_image_layout(const char* kernelfile, const char* rootfsfile, c
 
        strcpy(rootfs->partition_name, "rootfs");
        rootfs->partition_index = 2;
-       rootfs->partition_baseaddr = p->root_start;
+       rootfs->partition_baseaddr = kernel->partition_baseaddr + kernel->partition_length;
        rootfs->partition_length = p->firmware_max_length - kernel->partition_length;
        rootfs->partition_memaddr = 0x00000000;
        rootfs->partition_entryaddr = 0x00000000;
        strncpy(rootfs->filename, rootfsfile, sizeof(rootfs->filename));
 
-printf("kernel: %d %d\n", kernel->partition_length, kernel->partition_baseaddr);
-printf("root: %d %d\n", rootfs->partition_length, rootfs->partition_baseaddr);
+printf("kernel: %d 0x%08x\n", kernel->partition_length, kernel->partition_baseaddr);
+printf("root: %d 0x%08x\n", rootfs->partition_length, rootfs->partition_baseaddr);
        im->part_count = 2;
 
        return 0;