From: Rafał Miłecki <ra...@milecki.pl>

1) Be consistent and use tabs
2) Drop FIXME from boot comments - some images use these fields normally
3) Add V3 specific fields (signatures)
4) Add V3.0.0.3 region field

Signed-off-by: Rafał Miłecki <ra...@milecki.pl>
---
 tools/firmware-utils/src/mktplinkfw2.c | 75 ++++++++++++++++++++++------------
 1 file changed, 48 insertions(+), 27 deletions(-)

diff --git a/tools/firmware-utils/src/mktplinkfw2.c 
b/tools/firmware-utils/src/mktplinkfw2.c
index 3ab5c52ec2..cfedf81d3b 100644
--- a/tools/firmware-utils/src/mktplinkfw2.c
+++ b/tools/firmware-utils/src/mktplinkfw2.c
@@ -39,33 +39,54 @@ struct file_info {
 };
 
 struct fw_header {
-       uint32_t        version;        /* 0x00: header version */
-       char            fw_version[48]; /* 0x04: fw version string */
-       uint32_t        hw_id;          /* 0x34: hardware id */
-       uint32_t        hw_rev;         /* 0x38: FIXME: hardware revision? */
-       uint32_t        unk1;           /* 0x3c: 0x00000000 */
-       uint8_t         md5sum1[MD5SUM_LEN]; /* 0x40 */
-       uint32_t        unk2;           /* 0x50: 0x00000000 */
-       uint8_t         md5sum2[MD5SUM_LEN]; /* 0x54 */
-       uint32_t        unk3;           /* 0x64: 0xffffffff */
-
-       uint32_t        kernel_la;      /* 0x68: kernel load address */
-       uint32_t        kernel_ep;      /* 0x6c: kernel entry point */
-       uint32_t        fw_length;      /* 0x70: total length of the image */
-       uint32_t        kernel_ofs;     /* 0x74: kernel data offset */
-       uint32_t        kernel_len;     /* 0x78: kernel data length */
-       uint32_t        rootfs_ofs;     /* 0x7c: rootfs data offset */
-       uint32_t        rootfs_len;     /* 0x80: rootfs data length */
-       uint32_t        boot_ofs;       /* 0x84: FIXME: seems to be unused */
-       uint32_t        boot_len;       /* 0x88: FIXME: seems to be unused */
-       uint16_t        unk4;           /* 0x8c: 0x55aa */
-       uint8_t         sver_hi;        /* 0x8e */
-       uint8_t         sver_lo;        /* 0x8f */
-       uint8_t         unk5;           /* 0x90: magic: 0xa5 */
-       uint8_t         ver_hi;         /* 0x91 */
-       uint8_t         ver_mid;        /* 0x92 */
-       uint8_t         ver_lo;         /* 0x93 */
-       uint8_t         pad[364];
+       uint32_t        version;                        /* 0x00: header version 
*/
+       char            fw_version[48];                 /* 0x04: fw version 
string */
+       uint32_t        hw_id;                          /* 0x34: hardware id */
+       uint32_t        hw_rev;                         /* 0x38: FIXME: 
hardware revision? */
+       uint32_t        unk1;                           /* 0x3c: 0x00000000 */
+       uint8_t         md5sum1[MD5SUM_LEN];            /* 0x40 */
+       uint32_t        unk2;                           /* 0x50: 0x00000000 */
+       uint8_t         md5sum2[MD5SUM_LEN];            /* 0x54 */
+       uint32_t        unk3;                           /* 0x64: 0xffffffff */
+
+       uint32_t        kernel_la;                      /* 0x68: kernel load 
address */
+       uint32_t        kernel_ep;                      /* 0x6c: kernel entry 
point */
+       uint32_t        fw_length;                      /* 0x70: total length 
of the image */
+       uint32_t        kernel_ofs;                     /* 0x74: kernel data 
offset */
+       uint32_t        kernel_len;                     /* 0x78: kernel data 
length */
+       uint32_t        rootfs_ofs;                     /* 0x7c: rootfs data 
offset */
+       uint32_t        rootfs_len;                     /* 0x80: rootfs data 
length */
+       uint32_t        boot_ofs;                       /* 0x84: bootloader 
offset */
+       uint32_t        boot_len;                       /* 0x88: bootloader 
length */
+       uint16_t        unk4;                           /* 0x8c: 0x55aa */
+       uint8_t         sver_hi;                        /* 0x8e */
+       uint8_t         sver_lo;                        /* 0x8f */
+       uint8_t         unk5;                           /* 0x90: magic: 0xa5 */
+       uint8_t         ver_hi;                         /* 0x91 */
+       uint8_t         ver_mid;                        /* 0x92 */
+       uint8_t         ver_lo;                         /* 0x93 */
+       union {
+               struct {
+                       uint8_t         pad[364];
+               } v2 __attribute__ ((packed));
+
+               struct {
+                       uint32_t        unk6;           /* 0x94: FIXME: 
changing value */
+                       uint8_t         pad1[56];
+                       uint8_t         sig1[128];      /* 0xd0: signature 
(boot)+kernel+rootfs */
+                       uint8_t         sig2[128];      /* 0x150: unused: 0x00 
*/
+                       uint8_t         pad2[48];
+               } v3 __attribute__ ((packed));
+
+               struct {
+                       uint32_t        unk6;           /* 0x94: FIXME: 
changing value */
+                       char            region[4];      /* 0x98: region (e.g. 
"DE\0\0" or "US\0\0") */
+                       uint8_t         pad1[52];
+                       uint8_t         sig1[128];      /* 0xd0: signature 
(boot)+kernel+rootfs */
+                       uint8_t         sig2[128];      /* 0x150: unused: 0x00 
*/
+                       uint8_t         pad2[48];
+               } v3_0_0_3 __attribute__ ((packed));
+       } __attribute__ ((packed));
 } __attribute__ ((packed));
 
 struct flash_layout {
-- 
2.11.0


_______________________________________________
Lede-dev mailing list
Lede-dev@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/lede-dev

Reply via email to