diff options
Diffstat (limited to 'common/image.c')
-rw-r--r-- | common/image.c | 100 |
1 files changed, 32 insertions, 68 deletions
diff --git a/common/image.c b/common/image.c index d218f2f..4a024d4 100644 --- a/common/image.c +++ b/common/image.c @@ -155,7 +155,8 @@ static table_entry_t uimage_comp[] = { { -1, "", "", }, }; -unsigned long crc32 (unsigned long, const unsigned char *, unsigned int); +uint32_t crc32 (uint32_t, const unsigned char *, uint); +uint32_t crc32_wd (uint32_t, const unsigned char *, uint, uint); static void genimg_print_size (uint32_t size); #if defined(CONFIG_TIMESTAMP) || defined(CONFIG_CMD_DATE) || defined(USE_HOSTCC) static void genimg_print_time (time_t timestamp); @@ -183,39 +184,11 @@ int image_check_dcrc (image_header_t *hdr) { ulong data = image_get_data (hdr); ulong len = image_get_data_size (hdr); - ulong dcrc = crc32 (0, (unsigned char *)data, len); + ulong dcrc = crc32_wd (0, (unsigned char *)data, len, CHUNKSZ_CRC32); return (dcrc == image_get_dcrc (hdr)); } -#ifndef USE_HOSTCC -int image_check_dcrc_wd (image_header_t *hdr, ulong chunksz) -{ - ulong dcrc = 0; - ulong len = image_get_data_size (hdr); - ulong data = image_get_data (hdr); - -#if defined(CONFIG_HW_WATCHDOG) || defined(CONFIG_WATCHDOG) - ulong cdata = data; - ulong edata = cdata + len; - - while (cdata < edata) { - ulong chunk = edata - cdata; - - if (chunk > chunksz) - chunk = chunksz; - dcrc = crc32 (dcrc, (unsigned char *)cdata, chunk); - cdata += chunk; - - WATCHDOG_RESET (); - } -#else - dcrc = crc32 (0, (unsigned char *)data, len); -#endif - - return (dcrc == image_get_dcrc (hdr)); -} -#endif /* !USE_HOSTCC */ /** * image_multi_count - get component (sub-image) count @@ -316,19 +289,27 @@ static void image_print_type (image_header_t *hdr) } /** - * __image_print_contents - prints out the contents of the legacy format image + * image_print_contents - prints out the contents of the legacy format image * @hdr: pointer to the legacy format image header * @p: pointer to prefix string * - * __image_print_contents() formats a multi line legacy image contents description. + * image_print_contents() formats a multi line legacy image contents description. * The routine prints out all header fields followed by the size/offset data * for MULTI/SCRIPT images. * * returns: * no returned results */ -static void __image_print_contents (image_header_t *hdr, const char *p) +void image_print_contents (image_header_t *hdr) { + const char *p; + +#ifdef USE_HOSTCC + p = ""; +#else + p = " "; +#endif + printf ("%sImage Name: %.*s\n", p, IH_NMLEN, image_get_name (hdr)); #if defined(CONFIG_TIMESTAMP) || defined(CONFIG_CMD_DATE) || defined(USE_HOSTCC) printf ("%sCreated: ", p); @@ -366,15 +347,6 @@ static void __image_print_contents (image_header_t *hdr, const char *p) } } -inline void image_print_contents (image_header_t *hdr) -{ - __image_print_contents (hdr, " "); -} - -inline void image_print_contents_noindent (image_header_t *hdr) -{ - __image_print_contents (hdr, ""); -} #ifndef USE_HOSTCC /** @@ -417,7 +389,7 @@ static image_header_t* image_get_ramdisk (ulong rd_addr, uint8_t arch, if (verify) { puts(" Verifying Checksum ... "); - if (!image_check_dcrc_wd (rd_hdr, CHUNKSZ)) { + if (!image_check_dcrc (rd_hdr)) { puts ("Bad Data CRC\n"); show_boot_progress (-12); return NULL; @@ -444,15 +416,9 @@ static image_header_t* image_get_ramdisk (ulong rd_addr, uint8_t arch, /* Shared dual-format routines */ /*****************************************************************************/ #ifndef USE_HOSTCC -int getenv_verify (void) -{ - char *s = getenv ("verify"); - return (s && (*s == 'n')) ? 0 : 1; -} - -int getenv_autostart (void) +int getenv_yesno (char *var) { - char *s = getenv ("autostart"); + char *s = getenv (var); return (s && (*s == 'n')) ? 0 : 1; } @@ -1265,18 +1231,18 @@ static void fit_get_debug (const void *fit, int noffset, } /** - * __fit_print_contents - prints out the contents of the FIT format image + * fit_print_contents - prints out the contents of the FIT format image * @fit: pointer to the FIT format image header * @p: pointer to prefix string * - * __fit_print_contents() formats a multi line FIT image contents description. + * fit_print_contents() formats a multi line FIT image contents description. * The routine prints out FIT image properties (root node level) follwed by * the details of each component image. * * returns: * no returned results */ -static void __fit_print_contents (const void *fit, const char *p) +void fit_print_contents (const void *fit) { char *desc; char *uname; @@ -1286,10 +1252,17 @@ static void __fit_print_contents (const void *fit, const char *p) int ndepth; int count = 0; int ret; + const char *p; #if defined(CONFIG_TIMESTAMP) || defined(CONFIG_CMD_DATE) || defined(USE_HOSTCC) time_t timestamp; #endif +#ifdef USE_HOSTCC + p = ""; +#else + p = " "; +#endif + /* Root node properties */ ret = fit_get_desc (fit, 0, &desc); printf ("%sFIT description: ", p); @@ -1361,16 +1334,6 @@ static void __fit_print_contents (const void *fit, const char *p) } } -inline void fit_print_contents (const void *fit) -{ - __fit_print_contents (fit, " "); -} - -inline void fit_print_contents_noindent (const void *fit) -{ - __fit_print_contents (fit, ""); -} - /** * fit_image_print - prints out the FIT component image details * @fit: pointer to the FIT format image header @@ -1933,15 +1896,16 @@ static int calculate_hash (const void *data, int data_len, const char *algo, uint8_t *value, int *value_len) { if (strcmp (algo, "crc32") == 0 ) { - *((uint32_t *)value) = crc32 (0, data, data_len); + *((uint32_t *)value) = crc32_wd (0, data, data_len, + CHUNKSZ_CRC32); *((uint32_t *)value) = cpu_to_uimage (*((uint32_t *)value)); *value_len = 4; } else if (strcmp (algo, "sha1") == 0 ) { - sha1_csum ((unsigned char *) data, data_len, - (unsigned char *) value); + sha1_csum_wd ((unsigned char *) data, data_len, + (unsigned char *) value, CHUNKSZ_SHA1); *value_len = 20; } else if (strcmp (algo, "md5") == 0 ) { - md5 ((unsigned char *)data, data_len, value); + md5_wd ((unsigned char *)data, data_len, value, CHUNKSZ_MD5); *value_len = 16; } else { debug ("Unsupported hash alogrithm\n"); |