Blame view

cmd/unzip.c 2.1 KB
c3d2a17c1   Mike Frysinger   md5sum/sha1sum/un...
1
2
3
4
  /*
   * (C) Copyright 2000
   * Wolfgang Denk, DENX Software Engineering, wd@denx.de.
   *
1a4596601   Wolfgang Denk   Add GPL-2.0+ SPDX...
5
   * SPDX-License-Identifier:	GPL-2.0+
c3d2a17c1   Mike Frysinger   md5sum/sha1sum/un...
6
7
8
9
10
11
12
13
14
   */
  
  #include <common.h>
  #include <command.h>
  
  static int do_unzip(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
  {
  	unsigned long src, dst;
  	unsigned long src_len = ~0UL, dst_len = ~0UL;
c3d2a17c1   Mike Frysinger   md5sum/sha1sum/un...
15
16
17
18
19
20
21
22
23
24
  
  	switch (argc) {
  		case 4:
  			dst_len = simple_strtoul(argv[3], NULL, 16);
  			/* fall through */
  		case 3:
  			src = simple_strtoul(argv[1], NULL, 16);
  			dst = simple_strtoul(argv[2], NULL, 16);
  			break;
  		default:
4c12eeb8b   Simon Glass   Convert cmd_usage...
25
  			return CMD_RET_USAGE;
c3d2a17c1   Mike Frysinger   md5sum/sha1sum/un...
26
27
28
29
30
31
32
  	}
  
  	if (gunzip((void *) dst, dst_len, (void *) src, &src_len) != 0)
  		return 1;
  
  	printf("Uncompressed size: %ld = 0x%lX
  ", src_len, src_len);
018f53032   Simon Glass   env: Rename commo...
33
  	env_set_hex("filesize", src_len);
c3d2a17c1   Mike Frysinger   md5sum/sha1sum/un...
34
35
36
37
38
39
40
41
42
  
  	return 0;
  }
  
  U_BOOT_CMD(
  	unzip,	4,	1,	do_unzip,
  	"unzip a memory region",
  	"srcaddr dstaddr [dstsize]"
  );
5d27223ea   Eric Nelson   unzip: add gzwrit...
43
44
45
46
  
  static int do_gzwrite(cmd_tbl_t *cmdtp, int flag,
  		      int argc, char * const argv[])
  {
4101f6879   Simon Glass   dm: Drop the bloc...
47
  	struct blk_desc *bdev;
5d27223ea   Eric Nelson   unzip: add gzwrit...
48
49
50
51
52
53
54
55
56
  	int ret;
  	unsigned char *addr;
  	unsigned long length;
  	unsigned long writebuf = 1<<20;
  	u64 startoffs = 0;
  	u64 szexpected = 0;
  
  	if (argc < 5)
  		return CMD_RET_USAGE;
ebac37cfb   Simon Glass   dm: blk: Rename g...
57
  	ret = blk_get_device_by_str(argv[1], argv[2], &bdev);
5d27223ea   Eric Nelson   unzip: add gzwrit...
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
  	if (ret < 0)
  		return CMD_RET_FAILURE;
  
  	addr = (unsigned char *)simple_strtoul(argv[3], NULL, 16);
  	length = simple_strtoul(argv[4], NULL, 16);
  
  	if (5 < argc) {
  		writebuf = simple_strtoul(argv[5], NULL, 16);
  		if (6 < argc) {
  			startoffs = simple_strtoull(argv[6], NULL, 16);
  			if (7 < argc)
  				szexpected = simple_strtoull(argv[7],
  							     NULL, 16);
  		}
  	}
  
  	ret = gzwrite(addr, length, bdev, writebuf, startoffs, szexpected);
  
  	return ret ? CMD_RET_FAILURE : CMD_RET_SUCCESS;
  }
  
  U_BOOT_CMD(
  	gzwrite, 8, 0, do_gzwrite,
  	"unzip and write memory to block device",
  	"<interface> <dev> <addr> length [wbuf=1M [offs=0 [outsize=0]]]
  "
  	"\twbuf is the size in bytes (hex) of write buffer
  "
  	"\t\tand should be padded to erase size for SSDs
  "
  	"\toffs is the output start offset in bytes (hex)
  "
  	"\toutsize is the size of the expected output (hex bytes)
  "
  	"\t\tand is required for files with uncompressed lengths
  "
  	"\t\t4 GiB or larger
  "
  );