firmware-utils/mksercommfw: fix build with clang/macOS
[openwrt/openwrt.git] / tools / firmware-utils / src / mkzynfw.c
index 9018ea10845bf9da59830c7b0b7486c54693cfd1..ccbabfe7f20b2bfb3155eaa053b6e1dff3b8d15a 100644 (file)
@@ -27,6 +27,7 @@
 #if defined(__CYGWIN__)
 #  include <byteswap.h>
 #endif
+#include <inttypes.h>
 
 #include "zynos.h"
 
@@ -121,6 +122,9 @@ int num_blocks = 0;
 #define ATHEROS_FLASH_BASE     0xBFC00000
 #define ATHEROS_CODE_START     0x80e00000
 
+#define AR71XX_FLASH_BASE      0xBFC00000
+#define AR71XX_CODE_START      0x81E00000
+
 #define BOARD(n, d, v, m, fb, fs, cs, fo) {            \
        .name = (n), .desc=(d),                         \
        .vendor = (v), .model = (m),                    \
@@ -141,6 +145,15 @@ int num_blocks = 0;
 #define ATHEROSBOARD1(n, d, m, fs) BOARD(n, d, ZYNOS_VENDOR_ID_ZYXEL, m, \
        ATHEROS_FLASH_BASE, fs, ATHEROS_CODE_START, 0x30000)
 
+#define AR71XXBOARD1(n, d, m, fs) {            \
+       .name = (n), .desc=(d),                         \
+       .vendor = (ZYNOS_VENDOR_ID_ZYXEL), .model = (m),                        \
+       .flash_base = (AR71XX_FLASH_BASE), .flash_size = (fs)<<20,      \
+       .code_start = (AR71XX_CODE_START), .romio_offs = (0x40000),             \
+       .bootext_size = 0x30000         \
+       }
+
+
 static struct board_info boards[] = {
        /*
         * Infineon/ADMtek ADM5120 based boards
@@ -215,6 +228,11 @@ static struct board_info boards[] = {
         */
        ATHEROSBOARD1("NBG-318S", "ZyXEL NBG-318S", ZYNOS_MODEL_NBG_318S, 4),
 
+       /*
+        * Atheros ar71xx based boards
+        */
+       AR71XXBOARD1("NBG-460N", "ZyXEL NBG-460N", ZYNOS_MODEL_NBG_460N, 4),
+
        {.name = NULL}
 };
 
@@ -670,7 +688,7 @@ write_out_file(FILE *outfile, char *name, size_t len, struct csum_state *css)
        FILE *f;
        int res;
 
-       DBG(2, "writing out file, name=%s, len=%d",
+       DBG(2, "writing out file, name=%s, len=%zu",
                name, len);
 
        errno = 0;
@@ -971,7 +989,7 @@ calc_block_offsets(int type, uint32_t *offset)
        uint32_t avail;
        int i, res;
 
-       DBG(1,"calculating block offsets, starting with %lu",
+       DBG(1,"calculating block offsets, starting with %" PRIu32,
                *offset);
 
        res = 0;
@@ -982,12 +1000,13 @@ calc_block_offsets(int type, uint32_t *offset)
                        continue;
 
                next_offs = ALIGN(*offset, block->align);
-               avail = board->flash_size - board->romio_offs - next_offs;
+               avail = board->flash_size - next_offs;
                if (block->file_size > avail) {
                        ERR("file %s is too big, offset = %u, size=%u,"
-                               " align = %u", block->file_name,
+                               " avail = %u, align = %u", block->file_name,
                                (unsigned)next_offs,
                                (unsigned)block->file_size,
+                               (unsigned)avail,
                                (unsigned)block->align);
                        res = -1;
                        break;