1 #ifndef _IPXE_DEFLATE_H 2 #define _IPXE_DEFLATE_H 24 #define DEFLATE_HEADER_BITS 3 27 #define DEFLATE_HEADER_BFINAL_BIT 0 30 #define DEFLATE_HEADER_BTYPE_LSB 1 33 #define DEFLATE_HEADER_BTYPE_MASK 0x03 36 #define DEFLATE_HEADER_BTYPE_LITERAL 0 39 #define DEFLATE_HEADER_BTYPE_STATIC 1 42 #define DEFLATE_HEADER_BTYPE_DYNAMIC 2 45 #define DEFLATE_LITERAL_LEN_BITS 16 48 #define DEFLATE_DYNAMIC_BITS 14 51 #define DEFLATE_DYNAMIC_HLIT_LSB 0 54 #define DEFLATE_DYNAMIC_HLIT_MASK 0x1f 57 #define DEFLATE_DYNAMIC_HDIST_LSB 5 60 #define DEFLATE_DYNAMIC_HDIST_MASK 0x1f 63 #define DEFLATE_DYNAMIC_HCLEN_LSB 10 66 #define DEFLATE_DYNAMIC_HCLEN_MASK 0x0f 69 #define DEFLATE_CODELEN_BITS 3 72 #define DEFLATE_HUFFMAN_BITS 15 78 #define DEFLATE_HUFFMAN_QL_BITS 7 81 #define DEFLATE_HUFFMAN_QL_SHIFT ( 16 - DEFLATE_HUFFMAN_QL_BITS ) 84 #define DEFLATE_LITLEN_END 256 87 #define DEFLATE_LITLEN_MAX_CODE 287 90 #define DEFLATE_DISTANCE_MAX_CODE 31 93 #define DEFLATE_CODELEN_MAX_CODE 18 96 #define ZLIB_HEADER_BITS 16 99 #define ZLIB_HEADER_CM_LSB 0 102 #define ZLIB_HEADER_CM_MASK 0x0f 105 #define ZLIB_HEADER_CM_DEFLATE 8 108 #define ZLIB_HEADER_FDICT_BIT 13 111 #define ZLIB_ADLER32_BITS 32
unsigned int length_index
Current length index within a set of code lengths.
struct deflate_alphabet distance_codelen
Distance and code length Huffman alphabet.
#define DEFLATE_LITLEN_MAX_CODE
Maximum value of a literal/length code.
unsigned int length_target
Target length index within a set of code lengths.
int deflate_inflate(struct deflate *deflate, const void *data, size_t len, struct deflate_chunk *out)
Inflate compressed data.
unsigned int extra_bits
Number of extra bits required.
#define DEFLATE_HUFFMAN_BITS
Maximum length of a Huffman symbol (in bits)
size_t dup_distance
Distance of a duplicated string.
unsigned int header
Current block header.
uint16_t raw[0]
Raw symbols.
enum deflate_format format
Format.
unsigned int length
Current length within a set of code lengths.
A Huffman-coded set of symbols of a given length.
uint32_t start
First symbol of this length (normalised to 16 bits)
A Huffman-coded alphabet.
static void size_t size_t len
uint8_t count
Repetition count.
unsigned int bits
Number of bits within the accumulator.
uint16_t distance_codelen_raw[DEFLATE_DISTANCE_MAX_CODE+1]
Distance and code length raw symbols.
static void size_t offset
uint32_t accumulator
Accumulator.
size_t dup_len
Length of a duplicated string.
void * resume
Resume point.
static int deflate_finished(struct deflate *deflate)
Check if decompression has finished.
#define DEFLATE_HUFFMAN_QL_BITS
Quick lookup length for a Huffman symbol (in bits)
uint8_t lookup[1<< DEFLATE_HUFFMAN_QL_BITS]
Quick lookup table.
struct deflate_huf_symbols huf[DEFLATE_HUFFMAN_BITS]
Huffman-coded symbol set for each length.
uint16_t freq
Number of Huffman-coded symbols having this length.
deflate_format
Compression formats.
struct deflate __attribute__
uint32_t rotalumucca
Bit-reversed accumulator.
unsigned int distance_count
Number of symbols in the distance Huffman alphabet.
size_t offset
Current offset.
FILE_LICENCE(GPL2_OR_LATER_OR_UBDL)
struct deflate_alphabet litlen
Literal/length Huffman alphabet.
uint16_t * raw
Raw symbols having this length.
#define DEFLATE_DISTANCE_MAX_CODE
Maximum value of a distance code.
const uint8_t * in
Current input data pointer.
Raw DEFLATE data (no header or footer)
A static Huffman alphabet length pattern.
const uint8_t * end
End of input data pointer.
unsigned int litlen_count
Number of symbols in the literal/length Huffman alphabet.
uint8_t lengths[((DEFLATE_LITLEN_MAX_CODE+1)+(DEFLATE_DISTANCE_MAX_CODE+1)+1)/2]
Huffman code lengths.
uint8_t shift
Shift to normalise symbols of this length to 16 bits.
uint16_t litlen_raw[DEFLATE_LITLEN_MAX_CODE+1]
Literal/length raw symbols.
#define NULL
NULL pointer (VOID *)
size_t len
Length of data.
uint8_t bits
Length of Huffman-coded symbols.
size_t remaining
Remaining length of data (e.g.
void deflate_init(struct deflate *deflate, enum deflate_format format)
Initialise decompressor.