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