1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
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
97
98
99
100
101
102
103
104
105
|
/* SPDX-License-Identifier: GPL-2.0+ */
/*
* (C) Copyright 2000-2009
* Wolfgang Denk, DENX Software Engineering, wd@denx.de.
*/
#ifndef __GZIP_H
#define __GZIP_H
struct blk_desc;
/**
* gzip_parse_header() - Parse a header from a gzip file
*
* This returns the length of the header.
*
* @src: Pointer to gzip file
* @len: Length of data
* Return: length of header in bytes, or -1 if not enough data
*/
int gzip_parse_header(const unsigned char *src, unsigned long len);
/**
* gunzip() - Decompress gzipped data
*
* @dst: Destination for uncompressed data
* @dstlen: Size of destination buffer
* @src: Source data to decompress
* @lenp: Returns length of uncompressed data
* Return: 0 if OK, -1 on error
*/
int gunzip(void *dst, int dstlen, unsigned char *src, unsigned long *lenp);
/**
* zunzip() - Uncompress blocks compressed with zlib without headers
*
* @dst: Destination for uncompressed data
* @dstlen: Size of destination buffer
* @src: Source data to decompress
* @lenp: On entry, length data at @src. On exit, number of bytes used from @src
* @stoponerr: 0 to continue when a decode error is found, 1 to stop
* @offset: start offset within the src buffer
* Return: 0 if OK, -1 on error
*/
int zunzip(void *dst, int dstlen, unsigned char *src, unsigned long *lenp,
int stoponerr, int offset);
/**
* gzwrite progress indicators: defined weak to allow board-specific
* overrides:
*
* gzwrite_progress_init called on startup
* gzwrite_progress called during decompress/write loop
* gzwrite_progress_finish called at end of loop to
* indicate success (retcode=0) or failure
*/
void gzwrite_progress_init(ulong expected_size);
void gzwrite_progress(int iteration, ulong bytes_written, ulong total_bytes);
void gzwrite_progress_finish(int retcode, ulong totalwritten, ulong totalsize,
u32 expected_crc, u32 calculated_crc);
/**
* gzwrite() - decompress and write gzipped image from memory to block device
*
* @src: compressed image address
* @len: compressed image length in bytes
* @dev: block device descriptor
* @szwritebuf: bytes per write (pad to erase size)
* @startoffs: offset in bytes of first write
* @szexpected: expected uncompressed length, may be zero to use gzip trailer
* for files under 4GiB
* Return: 0 if OK, -1 on error
*/
int gzwrite(unsigned char *src, int len, struct blk_desc *dev, ulong szwritebuf,
ulong startoffs, ulong szexpected);
/**
* gzip()- Compress data into a buffer using the gzip algorithm
*
* @dst: Destination buffer for compressed data
* @lenp: On entry, space available in destination buffer (in bytes). On exit,
* number of bytes used in the buffer
* @src: Source data to compress
* @srclen: Size of source data
* Return: 0 if OK, -1 on error
*/
int gzip(void *dst, unsigned long *lenp, unsigned char *src, ulong srclen);
/**
* zzip() - Compress blocks with zlib
*
* @dst: Destination for compressed data
* @lenp: On entry, length data at @dst. On exit, number of bytes written to
* @dst
* @src: Source data to compress
* @srclen: Size of source data
* @stoponerr: 0 to continue when a decode error is found, 1 to stop
* @func: Some sort of function that is called to do something. !ADD DOCS HERE!
*/
int zzip(void *dst, ulong *lenp, unsigned char *src, ulong srclen,
int stoponerr, int (*func)(ulong, ulong));
#endif
|