blob: cb4db3d70fe9219fa64314e5ecb335467f467ef8 [file] [log] [blame]
Simon Glass1a974af2019-08-01 09:46:36 -06001/* SPDX-License-Identifier: GPL-2.0+ */
2/*
3 * (C) Copyright 2000-2009
4 * Wolfgang Denk, DENX Software Engineering, wd@denx.de.
5 */
6
7#ifndef __GZIP_H
8#define __GZIP_H
9
Simon Glass655306c2020-05-10 11:39:58 -060010struct blk_desc;
11
Simon Glass1a974af2019-08-01 09:46:36 -060012/**
13 * gzip_parse_header() - Parse a header from a gzip file
14 *
15 * This returns the length of the header.
16 *
17 * @src: Pointer to gzip file
18 * @len: Length of data
19 * @return length of header in bytes, or -1 if not enough data
20 */
21int gzip_parse_header(const unsigned char *src, unsigned long len);
22
23/**
24 * gunzip() - Decompress gzipped data
25 *
26 * @dst: Destination for uncompressed data
27 * @dstlen: Size of destination buffer
28 * @src: Source data to decompress
29 * @lenp: Returns length of uncompressed data
30 * @return 0 if OK, -1 on error
31 */
32int gunzip(void *dst, int dstlen, unsigned char *src, unsigned long *lenp);
33
34/**
35 * zunzip() - Uncompress blocks compressed with zlib without headers
36 *
37 * @dst: Destination for uncompressed data
38 * @dstlen: Size of destination buffer
39 * @src: Source data to decompress
40 * @lenp: On entry, length data at @src. On exit, number of bytes used from @src
41 * @stoponerr: 0 to continue when a decode error is found, 1 to stop
42 * @offset: start offset within the src buffer
43 * @return 0 if OK, -1 on error
44 */
45int zunzip(void *dst, int dstlen, unsigned char *src, unsigned long *lenp,
46 int stoponerr, int offset);
47
48/**
49 * gzwrite progress indicators: defined weak to allow board-specific
50 * overrides:
51 *
52 * gzwrite_progress_init called on startup
53 * gzwrite_progress called during decompress/write loop
54 * gzwrite_progress_finish called at end of loop to
55 * indicate success (retcode=0) or failure
56 */
Simon Glasse8c011d2021-09-25 07:03:13 -060057void gzwrite_progress_init(ulong expected_size);
Simon Glass1a974af2019-08-01 09:46:36 -060058
Simon Glasse8c011d2021-09-25 07:03:13 -060059void gzwrite_progress(int iteration, ulong bytes_written, ulong total_bytes);
Simon Glass1a974af2019-08-01 09:46:36 -060060
Simon Glasse8c011d2021-09-25 07:03:13 -060061void gzwrite_progress_finish(int retcode, ulong totalwritten, ulong totalsize,
Simon Glass1a974af2019-08-01 09:46:36 -060062 u32 expected_crc, u32 calculated_crc);
63
64/**
65 * gzwrite() - decompress and write gzipped image from memory to block device
66 *
67 * @src: compressed image address
68 * @len: compressed image length in bytes
69 * @dev: block device descriptor
70 * @szwritebuf: bytes per write (pad to erase size)
71 * @startoffs: offset in bytes of first write
72 * @szexpected: expected uncompressed length, may be zero to use gzip trailer
73 * for files under 4GiB
74 * @return 0 if OK, -1 on error
75 */
76int gzwrite(unsigned char *src, int len, struct blk_desc *dev, ulong szwritebuf,
Simon Glasse8c011d2021-09-25 07:03:13 -060077 ulong startoffs, ulong szexpected);
Simon Glass1a974af2019-08-01 09:46:36 -060078
79/**
80 * gzip()- Compress data into a buffer using the gzip algorithm
81 *
82 * @dst: Destination buffer for compressed data
83 * @lenp: On entry, space available in destination buffer (in bytes). On exit,
84 * number of bytes used in the buffer
85 * @src: Source data to compress
86 * @srclen: Size of source data
87 * @return 0 if OK, -1 on error
88 */
89int gzip(void *dst, unsigned long *lenp, unsigned char *src, ulong srclen);
90
91/**
92 * zzip() - Compress blocks with zlib
93 *
94 * @dst: Destination for compressed data
95 * @lenp: On entry, length data at @dst. On exit, number of bytes written to
96 * @dst
97 * @src: Source data to compress
98 * @srclen: Size of source data
99 * @stoponerr: 0 to continue when a decode error is found, 1 to stop
100 * @func: Some sort of function that is called to do something. !ADD DOCS HERE!
101 */
102int zzip(void *dst, ulong *lenp, unsigned char *src, ulong srclen,
103 int stoponerr, int (*func)(ulong, ulong));
104
105#endif