blob: 2e340673c38a601dc72beb7876123b6c7f1cfe9a [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
10/**
11 * gzip_parse_header() - Parse a header from a gzip file
12 *
13 * This returns the length of the header.
14 *
15 * @src: Pointer to gzip file
16 * @len: Length of data
17 * @return length of header in bytes, or -1 if not enough data
18 */
19int gzip_parse_header(const unsigned char *src, unsigned long len);
20
21/**
22 * gunzip() - Decompress gzipped data
23 *
24 * @dst: Destination for uncompressed data
25 * @dstlen: Size of destination buffer
26 * @src: Source data to decompress
27 * @lenp: Returns length of uncompressed data
28 * @return 0 if OK, -1 on error
29 */
30int gunzip(void *dst, int dstlen, unsigned char *src, unsigned long *lenp);
31
32/**
33 * zunzip() - Uncompress blocks compressed with zlib without headers
34 *
35 * @dst: Destination for uncompressed data
36 * @dstlen: Size of destination buffer
37 * @src: Source data to decompress
38 * @lenp: On entry, length data at @src. On exit, number of bytes used from @src
39 * @stoponerr: 0 to continue when a decode error is found, 1 to stop
40 * @offset: start offset within the src buffer
41 * @return 0 if OK, -1 on error
42 */
43int zunzip(void *dst, int dstlen, unsigned char *src, unsigned long *lenp,
44 int stoponerr, int offset);
45
46/**
47 * gzwrite progress indicators: defined weak to allow board-specific
48 * overrides:
49 *
50 * gzwrite_progress_init called on startup
51 * gzwrite_progress called during decompress/write loop
52 * gzwrite_progress_finish called at end of loop to
53 * indicate success (retcode=0) or failure
54 */
55void gzwrite_progress_init(u64 expected_size);
56
57void gzwrite_progress(int iteration, u64 bytes_written, u64 total_bytes);
58
59void gzwrite_progress_finish(int retcode, u64 totalwritten, u64 totalsize,
60 u32 expected_crc, u32 calculated_crc);
61
62/**
63 * gzwrite() - decompress and write gzipped image from memory to block device
64 *
65 * @src: compressed image address
66 * @len: compressed image length in bytes
67 * @dev: block device descriptor
68 * @szwritebuf: bytes per write (pad to erase size)
69 * @startoffs: offset in bytes of first write
70 * @szexpected: expected uncompressed length, may be zero to use gzip trailer
71 * for files under 4GiB
72 * @return 0 if OK, -1 on error
73 */
74int gzwrite(unsigned char *src, int len, struct blk_desc *dev, ulong szwritebuf,
75 u64 startoffs, u64 szexpected);
76
77/**
78 * gzip()- Compress data into a buffer using the gzip algorithm
79 *
80 * @dst: Destination buffer for compressed data
81 * @lenp: On entry, space available in destination buffer (in bytes). On exit,
82 * number of bytes used in the buffer
83 * @src: Source data to compress
84 * @srclen: Size of source data
85 * @return 0 if OK, -1 on error
86 */
87int gzip(void *dst, unsigned long *lenp, unsigned char *src, ulong srclen);
88
89/**
90 * zzip() - Compress blocks with zlib
91 *
92 * @dst: Destination for compressed data
93 * @lenp: On entry, length data at @dst. On exit, number of bytes written to
94 * @dst
95 * @src: Source data to compress
96 * @srclen: Size of source data
97 * @stoponerr: 0 to continue when a decode error is found, 1 to stop
98 * @func: Some sort of function that is called to do something. !ADD DOCS HERE!
99 */
100int zzip(void *dst, ulong *lenp, unsigned char *src, ulong srclen,
101 int stoponerr, int (*func)(ulong, ulong));
102
103#endif