summaryrefslogtreecommitdiffstats
path: root/common
diff options
context:
space:
mode:
authorLuigi 'Comio' Mantellini <luigi.mantellini@idf-hit.com>2008-09-08 02:46:13 +0200
committerWolfgang Denk <wd@denx.de>2008-09-13 01:59:07 +0200
commitfc9c1727b5b3483ce49c3cb668e8332fb001b8a7 (patch)
tree4225e1899157c007aebc19d150f62be9f04d11de /common
parent508eb85db7065e34948c189c83f7e348c1cfd61e (diff)
downloadtalos-obmc-uboot-fc9c1727b5b3483ce49c3cb668e8332fb001b8a7.tar.gz
talos-obmc-uboot-fc9c1727b5b3483ce49c3cb668e8332fb001b8a7.zip
Add support for LZMA uncompression algorithm.
Signed-off-by: Luigi 'Comio' Mantellini <luigi.mantellini@idf-hit.com> Signed-off-by: Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com>
Diffstat (limited to 'common')
-rw-r--r--common/cmd_bootm.c23
-rw-r--r--common/image.c1
2 files changed, 24 insertions, 0 deletions
diff --git a/common/cmd_bootm.c b/common/cmd_bootm.c
index 9c63e04f27..19257bbd4c 100644
--- a/common/cmd_bootm.c
+++ b/common/cmd_bootm.c
@@ -50,6 +50,13 @@
#include <fdt_support.h>
#endif
+#ifdef CONFIG_LZMA
+#define _7ZIP_BYTE_DEFINED /* Byte already defined by zlib */
+#include <lzma/LzmaTypes.h>
+#include <lzma/LzmaDecode.h>
+#include <lzma/LzmaTools.h>
+#endif /* CONFIG_LZMA */
+
DECLARE_GLOBAL_DATA_PTR;
extern int gunzip (void *dst, int dstlen, unsigned char *src, unsigned long *lenp);
@@ -334,6 +341,22 @@ static int bootm_load_os(image_info_t os, ulong *load_end, int boot_progress)
*load_end = load + unc_len;
break;
#endif /* CONFIG_BZIP2 */
+#ifdef CONFIG_LZMA
+ case IH_COMP_LZMA:
+ printf (" Uncompressing %s ... ", type_name);
+
+ int ret = lzmaBuffToBuffDecompress(
+ (unsigned char *)load, &unc_len,
+ (unsigned char *)image_start, image_start);
+ if (ret != LZMA_RESULT_OK) {
+ printf ("LZMA: uncompress or overwrite error %d "
+ "- must RESET board to recover\n", ret);
+ show_boot_progress (-6);
+ return BOOTM_ERR_RESET;
+ }
+ *load_end = load + unc_len;
+ break;
+#endif /* CONFIG_LZMA */
default:
printf ("Unimplemented compression type %d\n", comp);
return BOOTM_ERR_UNIMPLEMENTED;
diff --git a/common/image.c b/common/image.c
index d7fcd1db21..dc8d7dda6b 100644
--- a/common/image.c
+++ b/common/image.c
@@ -152,6 +152,7 @@ static table_entry_t uimage_comp[] = {
{ IH_COMP_NONE, "none", "uncompressed", },
{ IH_COMP_BZIP2, "bzip2", "bzip2 compressed", },
{ IH_COMP_GZIP, "gzip", "gzip compressed", },
+ { IH_COMP_LZMA, "lzma", "lzma compressed", },
{ -1, "", "", },
};
OpenPOWER on IntegriCloud