1 /* 2 * (C) Copyright 2013 Patrice Bouchand <pbfwdlist_gmail_com> 3 * lzma uncompress command in Uboot 4 * 5 * made from existing cmd_unzip.c file of Uboot 6 * 7 * (C) Copyright 2000 8 * Wolfgang Denk, DENX Software Engineering, wd@denx.de. 9 * 10 * SPDX-License-Identifier: GPL-2.0+ 11 */ 12 13 #include <common.h> 14 #include <command.h> 15 #include <mapmem.h> 16 #include <asm/io.h> 17 18 #include <lzma/LzmaTools.h> 19 20 static int do_lzmadec(cmd_tbl_t *cmdtp, int flag, int argc, char *const argv[]) 21 { 22 unsigned long src, dst; 23 SizeT src_len = ~0UL, dst_len = ~0UL; 24 int ret; 25 26 switch (argc) { 27 case 4: 28 dst_len = simple_strtoul(argv[3], NULL, 16); 29 /* fall through */ 30 case 3: 31 src = simple_strtoul(argv[1], NULL, 16); 32 dst = simple_strtoul(argv[2], NULL, 16); 33 break; 34 default: 35 return CMD_RET_USAGE; 36 } 37 38 ret = lzmaBuffToBuffDecompress(map_sysmem(dst, dst_len), &src_len, 39 map_sysmem(src, 0), dst_len); 40 41 if (ret != SZ_OK) 42 return 1; 43 printf("Uncompressed size: %ld = %#lX\n", (ulong)src_len, 44 (ulong)src_len); 45 setenv_hex("filesize", src_len); 46 47 return 0; 48 } 49 50 U_BOOT_CMD( 51 lzmadec, 4, 1, do_lzmadec, 52 "lzma uncompress a memory region", 53 "srcaddr dstaddr [dstsize]" 54 ); 55