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 10struct 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 */ 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 */ 57void gzwrite_progress_init(u64 expected_size); 58 59void gzwrite_progress(int iteration, u64 bytes_written, u64 total_bytes); 60 61void 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 */ 76int 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 */ 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 106