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