1 #ifndef _IPXE_DEFLATE_H 2 #define _IPXE_DEFLATE_H 25 #define DEFLATE_HEADER_BITS 3 28 #define DEFLATE_HEADER_BFINAL_BIT 0 31 #define DEFLATE_HEADER_BTYPE_LSB 1 34 #define DEFLATE_HEADER_BTYPE_MASK 0x03 37 #define DEFLATE_HEADER_BTYPE_LITERAL 0 40 #define DEFLATE_HEADER_BTYPE_STATIC 1 43 #define DEFLATE_HEADER_BTYPE_DYNAMIC 2 46 #define DEFLATE_LITERAL_LEN_BITS 16 49 #define DEFLATE_DYNAMIC_BITS 14 52 #define DEFLATE_DYNAMIC_HLIT_LSB 0 55 #define DEFLATE_DYNAMIC_HLIT_MASK 0x1f 58 #define DEFLATE_DYNAMIC_HDIST_LSB 5 61 #define DEFLATE_DYNAMIC_HDIST_MASK 0x1f 64 #define DEFLATE_DYNAMIC_HCLEN_LSB 10 67 #define DEFLATE_DYNAMIC_HCLEN_MASK 0x0f 70 #define DEFLATE_CODELEN_BITS 3 73 #define DEFLATE_HUFFMAN_BITS 15 79 #define DEFLATE_HUFFMAN_QL_BITS 7 82 #define DEFLATE_HUFFMAN_QL_SHIFT ( 16 - DEFLATE_HUFFMAN_QL_BITS ) 85 #define DEFLATE_LITLEN_END 256 88 #define DEFLATE_LITLEN_MAX_CODE 287 91 #define DEFLATE_DISTANCE_MAX_CODE 31 94 #define DEFLATE_CODELEN_MAX_CODE 18 97 #define ZLIB_HEADER_BITS 16 100 #define ZLIB_HEADER_CM_LSB 0 103 #define ZLIB_HEADER_CM_MASK 0x0f 106 #define ZLIB_HEADER_CM_DEFLATE 8 109 #define ZLIB_HEADER_FDICT_BIT 13 112 #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.
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 userptr_t size_t size_t len
uint8_t count
Repetition count.
Access to external ("user") memory.
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 userptr_t size_t offset
uint32_t accumulator
Accumulator.
size_t dup_len
Length of a duplicated string.
uint32_t userptr_t
A pointer to a user buffer.
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.
Raw DEFLATE data (no header or footer)
A static Huffman alphabet length pattern.
unsigned int litlen_count
Number of symbols in the literal/length Huffman alphabet.
int deflate_inflate(struct deflate *deflate, struct deflate_chunk *in, struct deflate_chunk *out)
Inflate compressed data.
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.