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