
This is second step towards cleaning mkimage code for kwbimage support in clean way. In this patch- 1. The image_get_header_size function call is replaced by sizeof(image_header_t) in default_image.c 2. image header code moved form mkimage.c to default_image .c
Signed-off-by: Prafulla Wadaskar prafulla@marvell.com --- tools/default_image.c | 22 ++++++++++++++++++---- tools/default_image.h | 1 + tools/mkimage.c | 24 ++++++++++++------------ tools/mkimage.h | 8 ++++++++ 4 files changed, 39 insertions(+), 16 deletions(-)
diff --git a/tools/default_image.c b/tools/default_image.c index 45afde1..e1a9bc7 100644 --- a/tools/default_image.c +++ b/tools/default_image.c @@ -29,6 +29,20 @@ #include <image.h> #include "default_image.h"
+image_header_t header; + +/* + * Default image parameters + */ +struct image_type_params defimage_params = { + .header_size = sizeof(image_header_t), + .hdr = (void*)&header, +}; + +void *image_get_tparams (void){ + return (void *)&defimage_params; +} + int image_check_params (struct mkimage_params *params) { return ((params->dflag && (params->fflag || params->lflag)) || @@ -100,13 +114,13 @@ void image_set_header (char *ptr, struct stat *sbuf, image_header_t * hdr = (image_header_t *)ptr;
checksum = crc32 (0, - (const char *)(ptr + image_get_header_size ()), - sbuf->st_size - image_get_header_size ()); + (const char *)(ptr + sizeof(image_header_t)), + sbuf->st_size - sizeof(image_header_t));
/* Build new header */ image_set_magic (hdr, IH_MAGIC); image_set_time (hdr, sbuf->st_mtime); - image_set_size (hdr, sbuf->st_size - image_get_header_size ()); + image_set_size (hdr, sbuf->st_size - sizeof(image_header_t)); image_set_load (hdr, params->addr); image_set_ep (hdr, params->ep); image_set_dcrc (hdr, checksum); @@ -117,7 +131,7 @@ void image_set_header (char *ptr, struct stat *sbuf,
image_set_name (hdr, params->imagename);
- checksum = crc32 (0, (const char *)hdr, image_get_header_size ()); + checksum = crc32 (0, (const char *)hdr, sizeof(image_header_t));
image_set_hcrc (hdr, checksum); } diff --git a/tools/default_image.h b/tools/default_image.h index 6ebc689..2311ede 100644 --- a/tools/default_image.h +++ b/tools/default_image.h @@ -25,6 +25,7 @@ #ifndef _DEFAULT_IMAGE_H_ #define _DEFAULT_IMAGE_H_
+void *image_get_tparams (void); int image_check_params (struct mkimage_params *params); int image_verify_header (char *ptr, int image_size, struct mkimage_params *params); diff --git a/tools/mkimage.c b/tools/mkimage.c index 66d6c8e..d1636d8 100644 --- a/tools/mkimage.c +++ b/tools/mkimage.c @@ -49,9 +49,6 @@ struct mkimage_params params = { .cmdname = "", };
-image_header_t header; -image_header_t *hdr = &header; - int main (int argc, char **argv) { @@ -59,6 +56,7 @@ main (int argc, char **argv) struct stat sbuf; unsigned char *ptr; int retval; + struct image_type_params *tparams = image_get_tparams ();
params.cmdname = *argv;
@@ -163,7 +161,7 @@ NXTARG: ; params.ep = params.addr; /* If XIP, entry point must be after the U-Boot header */ if (params.xflag) - params.ep += image_get_header_size (); + params.ep += tparams->header_size; }
/* @@ -171,11 +169,11 @@ NXTARG: ; * the size of the U-Boot header. */ if (params.xflag) { - if (params.ep != params.addr + image_get_header_size ()) { + if (params.ep != params.addr + tparams->header_size) { fprintf (stderr, "%s: For XIP, the entry point must be the load addr + %lu\n", params.cmdname, - (unsigned long)image_get_header_size ()); + (unsigned long)tparams->header_size); exit (EXIT_FAILURE); } } @@ -209,7 +207,7 @@ NXTARG: ; exit (EXIT_FAILURE); }
- if ((unsigned)sbuf.st_size < image_get_header_size ()) { + if ((unsigned)sbuf.st_size < tparams->header_size) { fprintf (stderr, "%s: Bad size: "%s" is no valid image\n", params.cmdname, params.imagefile); @@ -247,9 +245,10 @@ NXTARG: ; * * write dummy header, to be fixed later */ - memset (hdr, 0, image_get_header_size ()); + memset (tparams->hdr, 0, tparams->header_size);
- if (write(ifd, hdr, image_get_header_size ()) != image_get_header_size ()) { + if (write(ifd, tparams->hdr, tparams->header_size) + != tparams->header_size) { fprintf (stderr, "%s: Write error on %s: %s\n", params.cmdname, params.imagefile, strerror(errno)); exit (EXIT_FAILURE); @@ -366,6 +365,7 @@ copy_file (int ifd, const char *datafile, int pad) int zero = 0; int offset = 0; int size; + struct image_type_params *tparams = image_get_tparams ();
if (params.vflag) { fprintf (stderr, "Adding Image %s\n", datafile); @@ -398,14 +398,14 @@ copy_file (int ifd, const char *datafile, int pad) * reserved for it. */
- if ((unsigned)sbuf.st_size < image_get_header_size ()) { + if ((unsigned)sbuf.st_size < tparams->header_size) { fprintf (stderr, "%s: Bad size: "%s" is too small for XIP\n", params.cmdname, datafile); exit (EXIT_FAILURE); }
- for (p = ptr; p < ptr + image_get_header_size (); p++) { + for (p = ptr; p < ptr + tparams->header_size; p++) { if ( *p != 0xff ) { fprintf (stderr, "%s: Bad file: "%s" has invalid buffer for XIP\n", @@ -414,7 +414,7 @@ copy_file (int ifd, const char *datafile, int pad) } }
- offset = image_get_header_size (); + offset = tparams->header_size; }
size = sbuf.st_size - offset; diff --git a/tools/mkimage.h b/tools/mkimage.h index 0418644..3e94911 100644 --- a/tools/mkimage.h +++ b/tools/mkimage.h @@ -69,4 +69,12 @@ struct mkimage_params { char *cmdname; };
+/* + * These are image type specific variables + */ +struct image_type_params { + uint32_t header_size; + void *hdr; +}; + #endif /* _MKIIMAGE_H_ */