1 /* 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 
10 struct blk_desc;
11 
12 /**
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  */
21 int 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  */
32 int 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  */
45 int 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  */
57 void gzwrite_progress_init(u64 expected_size);
58 
59 void gzwrite_progress(int iteration, u64 bytes_written, u64 total_bytes);
60 
61 void gzwrite_progress_finish(int retcode, u64 totalwritten, u64 totalsize,
62 			     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  */
76 int gzwrite(unsigned char *src, int len, struct blk_desc *dev, ulong szwritebuf,
77 	    u64 startoffs, u64 szexpected);
78 
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  */
89 int 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  */
102 int zzip(void *dst, ulong *lenp, unsigned char *src, ulong srclen,
103 	 int stoponerr, int (*func)(ulong, ulong));
104 
105 #endif
106