14ae2d1beSRoy Oursler #include "igzip_lib.h" 24ae2d1beSRoy Oursler #include "huffman.h" 34ae2d1beSRoy Oursler #include "encode_df.h" 44ae2d1beSRoy Oursler #include "igzip_level_buf_structs.h" 54ae2d1beSRoy Oursler 655fbfabfSMarcel Cornu extern uint64_t 7*e3c2d243SMattias Ellert gen_icf_map_lh1(struct isal_zstream *, struct deflate_icf *, uint64_t); 855fbfabfSMarcel Cornu extern void 955fbfabfSMarcel Cornu set_long_icf_fg(uint8_t *, uint64_t, uint64_t, struct deflate_icf *); 1055fbfabfSMarcel Cornu extern void 1155fbfabfSMarcel Cornu isal_deflate_icf_body_lvl1(struct isal_zstream *); 1255fbfabfSMarcel Cornu extern void 1355fbfabfSMarcel Cornu isal_deflate_icf_body_lvl2(struct isal_zstream *); 1455fbfabfSMarcel Cornu extern void 1555fbfabfSMarcel Cornu isal_deflate_icf_body_lvl3(struct isal_zstream *); 164ae2d1beSRoy Oursler /* 174ae2d1beSRoy Oursler ************************************************************* 184ae2d1beSRoy Oursler * Helper functions 194ae2d1beSRoy Oursler ************************************************************ 204ae2d1beSRoy Oursler */ 2155fbfabfSMarcel Cornu static inline void 2255fbfabfSMarcel Cornu write_deflate_icf(struct deflate_icf *icf, uint32_t lit_len, uint32_t lit_dist, uint32_t extra_bits) 234ae2d1beSRoy Oursler { 244ae2d1beSRoy Oursler /* icf->lit_len = lit_len; */ 254ae2d1beSRoy Oursler /* icf->lit_dist = lit_dist; */ 264ae2d1beSRoy Oursler /* icf->dist_extra = extra_bits; */ 274ae2d1beSRoy Oursler 2855fbfabfSMarcel Cornu store_native_u32((uint8_t *) icf, 2955fbfabfSMarcel Cornu lit_len | (lit_dist << LIT_LEN_BIT_COUNT) | 3055fbfabfSMarcel Cornu (extra_bits << (LIT_LEN_BIT_COUNT + DIST_LIT_BIT_COUNT))); 314ae2d1beSRoy Oursler } 324ae2d1beSRoy Oursler 3355fbfabfSMarcel Cornu void 3455fbfabfSMarcel Cornu set_long_icf_fg_base(uint8_t *next_in, uint64_t processed, uint64_t input_size, 351fdc5941SRoy Oursler struct deflate_icf *match_lookup) 364ae2d1beSRoy Oursler { 371fdc5941SRoy Oursler uint8_t *end_processed = next_in + processed; 381fdc5941SRoy Oursler uint8_t *end_in = next_in + input_size; 394ae2d1beSRoy Oursler uint32_t dist_code, dist_extra, dist, len; 404ae2d1beSRoy Oursler uint32_t match_len; 4155fbfabfSMarcel Cornu uint32_t dist_start[] = { 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0007, 0x0009, 0x000d, 424ae2d1beSRoy Oursler 0x0011, 0x0019, 0x0021, 0x0031, 0x0041, 0x0061, 0x0081, 0x00c1, 434ae2d1beSRoy Oursler 0x0101, 0x0181, 0x0201, 0x0301, 0x0401, 0x0601, 0x0801, 0x0c01, 4455fbfabfSMarcel Cornu 0x1001, 0x1801, 0x2001, 0x3001, 0x4001, 0x6001, 0x0000, 0x0000 }; 454ae2d1beSRoy Oursler 461fdc5941SRoy Oursler if (end_in > end_processed + ISAL_LOOK_AHEAD) 471fdc5941SRoy Oursler end_in = end_processed + ISAL_LOOK_AHEAD; 481fdc5941SRoy Oursler 491fdc5941SRoy Oursler while (next_in < end_processed) { 504ae2d1beSRoy Oursler dist_code = match_lookup->lit_dist; 514ae2d1beSRoy Oursler dist_extra = match_lookup->dist_extra; 524ae2d1beSRoy Oursler dist = dist_start[dist_code] + dist_extra; 534ae2d1beSRoy Oursler len = match_lookup->lit_len; 544ae2d1beSRoy Oursler if (len >= 8 + LEN_OFFSET) { 5555fbfabfSMarcel Cornu match_len = 5655fbfabfSMarcel Cornu compare((next_in + 8) - dist, next_in + 8, end_in - (next_in + 8)) + 5755fbfabfSMarcel Cornu LEN_OFFSET + 8; 584ae2d1beSRoy Oursler 5955fbfabfSMarcel Cornu while (match_len > match_lookup->lit_len && 6055fbfabfSMarcel Cornu match_len >= LEN_OFFSET + SHORTEST_MATCH) { 61ba1a0006SRoy Oursler write_deflate_icf(match_lookup, 62ba1a0006SRoy Oursler match_len > LEN_MAX ? LEN_MAX : match_len, 63ba1a0006SRoy Oursler dist_code, dist_extra); 644ae2d1beSRoy Oursler match_lookup++; 654ae2d1beSRoy Oursler next_in++; 664ae2d1beSRoy Oursler match_len--; 674ae2d1beSRoy Oursler } 684ae2d1beSRoy Oursler } 694ae2d1beSRoy Oursler 704ae2d1beSRoy Oursler match_lookup++; 714ae2d1beSRoy Oursler next_in++; 724ae2d1beSRoy Oursler } 734ae2d1beSRoy Oursler } 744ae2d1beSRoy Oursler 754ae2d1beSRoy Oursler /* 764ae2d1beSRoy Oursler ************************************************************* 774ae2d1beSRoy Oursler * Methods for generating one pass match lookup table 784ae2d1beSRoy Oursler ************************************************************ 794ae2d1beSRoy Oursler */ 8055fbfabfSMarcel Cornu uint64_t 8155fbfabfSMarcel Cornu gen_icf_map_h1_base(struct isal_zstream *stream, struct deflate_icf *matches_icf_lookup, 8255fbfabfSMarcel Cornu uint64_t input_size) 834ae2d1beSRoy Oursler { 844ae2d1beSRoy Oursler 854ae2d1beSRoy Oursler uint32_t dist, len, extra_bits; 864ae2d1beSRoy Oursler uint8_t *next_in = stream->next_in, *end_in = stream->next_in + input_size; 8753b92e83SRoy Oursler uint8_t *file_start = (uint8_t *) ((uintptr_t) stream->next_in - stream->total_in); 884ae2d1beSRoy Oursler uint32_t hash; 894ae2d1beSRoy Oursler uint64_t next_bytes, match_bytes; 904ae2d1beSRoy Oursler uint64_t match; 914ae2d1beSRoy Oursler struct level_buf *level_buf = (struct level_buf *) stream->level_buf; 927a12bcb2SRoy Oursler uint16_t *hash_table = level_buf->hash_map.hash_table; 936317ce2bSRoy Oursler uint32_t hist_size = stream->internal_state.dist_mask; 9403bef684SRoy Oursler uint32_t hash_mask = stream->internal_state.hash_mask; 954ae2d1beSRoy Oursler 964ae2d1beSRoy Oursler if (input_size < ISAL_LOOK_AHEAD) 97cd7b70ddSRoy Oursler return 0; 984ae2d1beSRoy Oursler 99c1876a12SRoy Oursler if (stream->internal_state.has_hist == IGZIP_NO_HIST) { 1004ae2d1beSRoy Oursler matches_icf_lookup->lit_len = *next_in; 1014ae2d1beSRoy Oursler matches_icf_lookup->lit_dist = 0x1e; 1024ae2d1beSRoy Oursler matches_icf_lookup->dist_extra = 0; 1034ae2d1beSRoy Oursler 104d3cfb2fbSIlya Leoshkevich hash = compute_hash(load_le_u32(next_in)) & hash_mask; 1054ae2d1beSRoy Oursler hash_table[hash] = (uint64_t) (next_in - file_start); 1064ae2d1beSRoy Oursler 1074ae2d1beSRoy Oursler next_in++; 1084ae2d1beSRoy Oursler matches_icf_lookup++; 109c1876a12SRoy Oursler stream->internal_state.has_hist = IGZIP_HIST; 110c1876a12SRoy Oursler } 1114ae2d1beSRoy Oursler 1124ae2d1beSRoy Oursler while (next_in < end_in - ISAL_LOOK_AHEAD) { 113d3cfb2fbSIlya Leoshkevich hash = compute_hash(load_le_u32(next_in)) & hash_mask; 1144ae2d1beSRoy Oursler dist = (next_in - file_start - hash_table[hash]); 1156317ce2bSRoy Oursler dist = ((dist - 1) & hist_size) + 1; 1164ae2d1beSRoy Oursler hash_table[hash] = (uint64_t) (next_in - file_start); 1174ae2d1beSRoy Oursler 118d3cfb2fbSIlya Leoshkevich match_bytes = load_le_u64(next_in - dist); 119d3cfb2fbSIlya Leoshkevich next_bytes = load_le_u64(next_in); 1204ae2d1beSRoy Oursler match = next_bytes ^ match_bytes; 1214ae2d1beSRoy Oursler 1227faedc71SRoy Oursler len = tzbytecnt(match); 1234ae2d1beSRoy Oursler 1244ae2d1beSRoy Oursler if (len >= SHORTEST_MATCH) { 1254ae2d1beSRoy Oursler len += LEN_OFFSET; 1264ae2d1beSRoy Oursler get_dist_icf_code(dist, &dist, &extra_bits); 1274ae2d1beSRoy Oursler write_deflate_icf(matches_icf_lookup, len, dist, extra_bits); 1284ae2d1beSRoy Oursler } else { 1294ae2d1beSRoy Oursler write_deflate_icf(matches_icf_lookup, *next_in, 0x1e, 0); 1304ae2d1beSRoy Oursler } 1314ae2d1beSRoy Oursler 1324ae2d1beSRoy Oursler next_in++; 1334ae2d1beSRoy Oursler matches_icf_lookup++; 1344ae2d1beSRoy Oursler } 135cd7b70ddSRoy Oursler return next_in - stream->next_in; 1364ae2d1beSRoy Oursler } 1374ae2d1beSRoy Oursler 1384ae2d1beSRoy Oursler /* 1394ae2d1beSRoy Oursler ************************************************************* 1404ae2d1beSRoy Oursler * One pass methods for parsing provided match lookup table 1414ae2d1beSRoy Oursler ************************************************************ 1424ae2d1beSRoy Oursler */ 14355fbfabfSMarcel Cornu static struct deflate_icf * 14455fbfabfSMarcel Cornu compress_icf_map_g(struct isal_zstream *stream, struct deflate_icf *matches_next, 1454ae2d1beSRoy Oursler struct deflate_icf *matches_end) 1464ae2d1beSRoy Oursler { 1474ae2d1beSRoy Oursler uint32_t lit_len, lit_len2, dist; 1484ae2d1beSRoy Oursler uint64_t code; 1494ae2d1beSRoy Oursler struct isal_zstate *state = &stream->internal_state; 1504ae2d1beSRoy Oursler struct level_buf *level_buf = (struct level_buf *) stream->level_buf; 1514ae2d1beSRoy Oursler struct deflate_icf *matches_start = matches_next; 1524ae2d1beSRoy Oursler struct deflate_icf *icf_buf_end = 15355fbfabfSMarcel Cornu level_buf->icf_buf_next + level_buf->icf_buf_avail_out / sizeof(struct deflate_icf); 1544ae2d1beSRoy Oursler 1555b1a519fSZhaiMo while (matches_next + 1 < matches_end && level_buf->icf_buf_next + 1 < icf_buf_end) { 156d3cfb2fbSIlya Leoshkevich #if __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__ 157d3cfb2fbSIlya Leoshkevich code = load_native_u64((uint8_t *) matches_next); 158d3cfb2fbSIlya Leoshkevich #else 159d3cfb2fbSIlya Leoshkevich code = load_native_u32((uint8_t *) matches_next) | 160d3cfb2fbSIlya Leoshkevich ((uint64_t) load_native_u32((uint8_t *) (matches_next + 1)) << 32); 161d3cfb2fbSIlya Leoshkevich #endif 1624ae2d1beSRoy Oursler lit_len = code & LIT_LEN_MASK; 1634ae2d1beSRoy Oursler lit_len2 = (code >> ICF_CODE_LEN) & LIT_LEN_MASK; 164fe68f02dSRoy Oursler level_buf->hist.ll_hist[lit_len]++; 1654ae2d1beSRoy Oursler 1664ae2d1beSRoy Oursler if (lit_len >= LEN_START) { 167d3cfb2fbSIlya Leoshkevich store_native_u32((uint8_t *) level_buf->icf_buf_next, code); 1684ae2d1beSRoy Oursler level_buf->icf_buf_next++; 1694ae2d1beSRoy Oursler 1704ae2d1beSRoy Oursler dist = (code >> ICF_DIST_OFFSET) & DIST_LIT_MASK; 171fe68f02dSRoy Oursler level_buf->hist.d_hist[dist]++; 1724ae2d1beSRoy Oursler lit_len -= LEN_OFFSET; 1734ae2d1beSRoy Oursler matches_next += lit_len; 1744ae2d1beSRoy Oursler 1754ae2d1beSRoy Oursler } else if (lit_len2 >= LEN_START) { 176d3cfb2fbSIlya Leoshkevich #if __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__ 177d3cfb2fbSIlya Leoshkevich store_native_u64((uint8_t *) level_buf->icf_buf_next, code); 178d3cfb2fbSIlya Leoshkevich #else 179d3cfb2fbSIlya Leoshkevich store_native_u32((uint8_t *) level_buf->icf_buf_next, (uint32_t) code); 180d3cfb2fbSIlya Leoshkevich store_native_u32((uint8_t *) (level_buf->icf_buf_next + 1), 181d3cfb2fbSIlya Leoshkevich (uint32_t) (code >> 32)); 182d3cfb2fbSIlya Leoshkevich #endif 1834ae2d1beSRoy Oursler level_buf->icf_buf_next += 2; 1844ae2d1beSRoy Oursler 185fe68f02dSRoy Oursler level_buf->hist.ll_hist[lit_len2]++; 1864ae2d1beSRoy Oursler 1874ae2d1beSRoy Oursler dist = (code >> (ICF_CODE_LEN + ICF_DIST_OFFSET)) & DIST_LIT_MASK; 188fe68f02dSRoy Oursler level_buf->hist.d_hist[dist]++; 1894ae2d1beSRoy Oursler lit_len2 -= LEN_OFFSET - 1; 1904ae2d1beSRoy Oursler matches_next += lit_len2; 1914ae2d1beSRoy Oursler 1924ae2d1beSRoy Oursler } else { 1934ae2d1beSRoy Oursler code = ((lit_len2 + LIT_START) << ICF_DIST_OFFSET) | lit_len; 194d3cfb2fbSIlya Leoshkevich store_native_u32((uint8_t *) level_buf->icf_buf_next, code); 1954ae2d1beSRoy Oursler level_buf->icf_buf_next++; 1964ae2d1beSRoy Oursler 197fe68f02dSRoy Oursler level_buf->hist.ll_hist[lit_len2]++; 1984ae2d1beSRoy Oursler 1994ae2d1beSRoy Oursler matches_next += 2; 2004ae2d1beSRoy Oursler } 2014ae2d1beSRoy Oursler } 2024ae2d1beSRoy Oursler 2034ae2d1beSRoy Oursler while (matches_next < matches_end && level_buf->icf_buf_next < icf_buf_end) { 204d3cfb2fbSIlya Leoshkevich code = load_native_u32((uint8_t *) matches_next); 2054ae2d1beSRoy Oursler lit_len = code & LIT_LEN_MASK; 206d3cfb2fbSIlya Leoshkevich store_native_u32((uint8_t *) level_buf->icf_buf_next, code); 2074ae2d1beSRoy Oursler level_buf->icf_buf_next++; 2084ae2d1beSRoy Oursler 209fe68f02dSRoy Oursler level_buf->hist.ll_hist[lit_len]++; 2104ae2d1beSRoy Oursler if (lit_len >= LEN_START) { 2114ae2d1beSRoy Oursler dist = (code >> 10) & 0x1ff; 212fe68f02dSRoy Oursler level_buf->hist.d_hist[dist]++; 2134ae2d1beSRoy Oursler lit_len -= LEN_OFFSET; 2144ae2d1beSRoy Oursler matches_next += lit_len; 2154ae2d1beSRoy Oursler } else { 2164ae2d1beSRoy Oursler matches_next++; 2174ae2d1beSRoy Oursler } 2184ae2d1beSRoy Oursler } 2194ae2d1beSRoy Oursler 2204ae2d1beSRoy Oursler level_buf->icf_buf_avail_out = 2214ae2d1beSRoy Oursler (icf_buf_end - level_buf->icf_buf_next) * sizeof(struct deflate_icf); 2224ae2d1beSRoy Oursler 2234ae2d1beSRoy Oursler state->block_end += matches_next - matches_start; 2244ae2d1beSRoy Oursler if (matches_next > matches_end && matches_start < matches_end) { 2254ae2d1beSRoy Oursler stream->next_in += matches_next - matches_end; 2264ae2d1beSRoy Oursler stream->avail_in -= matches_next - matches_end; 2274ae2d1beSRoy Oursler stream->total_in += matches_next - matches_end; 2284ae2d1beSRoy Oursler } 2294ae2d1beSRoy Oursler 2304ae2d1beSRoy Oursler return matches_next; 2314ae2d1beSRoy Oursler } 2324ae2d1beSRoy Oursler 2334ae2d1beSRoy Oursler /* 2344ae2d1beSRoy Oursler ************************************************************* 2354ae2d1beSRoy Oursler * Compression functions combining different methods 2364ae2d1beSRoy Oursler ************************************************************ 2374ae2d1beSRoy Oursler */ 23855fbfabfSMarcel Cornu static inline void 23955fbfabfSMarcel Cornu icf_body_next_state(struct isal_zstream *stream) 2404ae2d1beSRoy Oursler { 2414ae2d1beSRoy Oursler struct level_buf *level_buf = (struct level_buf *) stream->level_buf; 2424ae2d1beSRoy Oursler struct isal_zstate *state = &stream->internal_state; 2434ae2d1beSRoy Oursler 2444ae2d1beSRoy Oursler if (level_buf->icf_buf_avail_out <= 0) 2454ae2d1beSRoy Oursler state->state = ZSTATE_CREATE_HDR; 2464ae2d1beSRoy Oursler 24755fbfabfSMarcel Cornu else if (stream->avail_in <= ISAL_LOOK_AHEAD && 24855fbfabfSMarcel Cornu (stream->end_of_stream || stream->flush != NO_FLUSH)) 2494ae2d1beSRoy Oursler state->state = ZSTATE_FLUSH_READ_BUFFER; 2504ae2d1beSRoy Oursler } 2514ae2d1beSRoy Oursler 25255fbfabfSMarcel Cornu void 25355fbfabfSMarcel Cornu icf_body_hash1_fillgreedy_lazy(struct isal_zstream *stream) 2544ae2d1beSRoy Oursler { 2554ae2d1beSRoy Oursler struct deflate_icf *matches_icf, *matches_next_icf, *matches_end_icf; 2564ae2d1beSRoy Oursler struct deflate_icf *matches_icf_lookup; 2574ae2d1beSRoy Oursler struct level_buf *level_buf = (struct level_buf *) stream->level_buf; 258cd7b70ddSRoy Oursler uint32_t input_size, processed; 2594ae2d1beSRoy Oursler 2607a12bcb2SRoy Oursler matches_icf = level_buf->hash_map.matches; 2614ae2d1beSRoy Oursler matches_icf_lookup = matches_icf; 2627a12bcb2SRoy Oursler matches_next_icf = level_buf->hash_map.matches_next; 2637a12bcb2SRoy Oursler matches_end_icf = level_buf->hash_map.matches_end; 2644ae2d1beSRoy Oursler 2654ae2d1beSRoy Oursler matches_next_icf = compress_icf_map_g(stream, matches_next_icf, matches_end_icf); 2664ae2d1beSRoy Oursler 2674ae2d1beSRoy Oursler while (matches_next_icf >= matches_end_icf) { 2684ae2d1beSRoy Oursler input_size = MATCH_BUF_SIZE; 2694ae2d1beSRoy Oursler input_size = (input_size > stream->avail_in) ? stream->avail_in : input_size; 2704ae2d1beSRoy Oursler 2714ae2d1beSRoy Oursler if (input_size <= ISAL_LOOK_AHEAD) 2724ae2d1beSRoy Oursler break; 2734ae2d1beSRoy Oursler 274cd7b70ddSRoy Oursler processed = gen_icf_map_h1_base(stream, matches_icf_lookup, input_size); 2754ae2d1beSRoy Oursler 2761fdc5941SRoy Oursler set_long_icf_fg(stream->next_in, processed, input_size, matches_icf_lookup); 2774ae2d1beSRoy Oursler 278cd7b70ddSRoy Oursler stream->next_in += processed; 279cd7b70ddSRoy Oursler stream->avail_in -= processed; 280cd7b70ddSRoy Oursler stream->total_in += processed; 2814ae2d1beSRoy Oursler 282cd7b70ddSRoy Oursler matches_end_icf = matches_icf + processed; 2834ae2d1beSRoy Oursler matches_next_icf = compress_icf_map_g(stream, matches_icf, matches_end_icf); 2844ae2d1beSRoy Oursler } 2854ae2d1beSRoy Oursler 2867a12bcb2SRoy Oursler level_buf->hash_map.matches_next = matches_next_icf; 2877a12bcb2SRoy Oursler level_buf->hash_map.matches_end = matches_end_icf; 2884ae2d1beSRoy Oursler 2894ae2d1beSRoy Oursler icf_body_next_state(stream); 2904ae2d1beSRoy Oursler } 2914ae2d1beSRoy Oursler 29255fbfabfSMarcel Cornu void 29355fbfabfSMarcel Cornu icf_body_lazyhash1_fillgreedy_greedy(struct isal_zstream *stream) 2944ae2d1beSRoy Oursler { 2954ae2d1beSRoy Oursler struct deflate_icf *matches_icf, *matches_next_icf, *matches_end_icf; 2964ae2d1beSRoy Oursler struct deflate_icf *matches_icf_lookup; 2974ae2d1beSRoy Oursler struct level_buf *level_buf = (struct level_buf *) stream->level_buf; 298cd7b70ddSRoy Oursler uint32_t input_size, processed; 2994ae2d1beSRoy Oursler 3007a12bcb2SRoy Oursler matches_icf = level_buf->hash_map.matches; 3014ae2d1beSRoy Oursler matches_icf_lookup = matches_icf; 3027a12bcb2SRoy Oursler matches_next_icf = level_buf->hash_map.matches_next; 3037a12bcb2SRoy Oursler matches_end_icf = level_buf->hash_map.matches_end; 3044ae2d1beSRoy Oursler 3054ae2d1beSRoy Oursler matches_next_icf = compress_icf_map_g(stream, matches_next_icf, matches_end_icf); 3064ae2d1beSRoy Oursler 3074ae2d1beSRoy Oursler while (matches_next_icf >= matches_end_icf) { 3084ae2d1beSRoy Oursler input_size = MATCH_BUF_SIZE; 3094ae2d1beSRoy Oursler input_size = (input_size > stream->avail_in) ? stream->avail_in : input_size; 3104ae2d1beSRoy Oursler 3114ae2d1beSRoy Oursler if (input_size <= ISAL_LOOK_AHEAD) 3124ae2d1beSRoy Oursler break; 3134ae2d1beSRoy Oursler 314cd7b70ddSRoy Oursler processed = gen_icf_map_lh1(stream, matches_icf_lookup, input_size); 3154ae2d1beSRoy Oursler 3161fdc5941SRoy Oursler set_long_icf_fg(stream->next_in, processed, input_size, matches_icf_lookup); 3174ae2d1beSRoy Oursler 318cd7b70ddSRoy Oursler stream->next_in += processed; 319cd7b70ddSRoy Oursler stream->avail_in -= processed; 320cd7b70ddSRoy Oursler stream->total_in += processed; 3214ae2d1beSRoy Oursler 322cd7b70ddSRoy Oursler matches_end_icf = matches_icf + processed; 3234ae2d1beSRoy Oursler matches_next_icf = compress_icf_map_g(stream, matches_icf, matches_end_icf); 3244ae2d1beSRoy Oursler } 3254ae2d1beSRoy Oursler 3267a12bcb2SRoy Oursler level_buf->hash_map.matches_next = matches_next_icf; 3277a12bcb2SRoy Oursler level_buf->hash_map.matches_end = matches_end_icf; 3284ae2d1beSRoy Oursler 3294ae2d1beSRoy Oursler icf_body_next_state(stream); 3304ae2d1beSRoy Oursler } 3314ae2d1beSRoy Oursler 33255fbfabfSMarcel Cornu void 33355fbfabfSMarcel Cornu isal_deflate_icf_body(struct isal_zstream *stream) 3344ae2d1beSRoy Oursler { 3354ae2d1beSRoy Oursler switch (stream->level) { 3368965584aSRoy Oursler case 3: 3374b45beffSRoy Oursler isal_deflate_icf_body_lvl3(stream); 3384ae2d1beSRoy Oursler break; 3398965584aSRoy Oursler case 2: 3408965584aSRoy Oursler isal_deflate_icf_body_lvl2(stream); 3418965584aSRoy Oursler break; 3424ae2d1beSRoy Oursler case 1: 3434ae2d1beSRoy Oursler default: 3444ae2d1beSRoy Oursler isal_deflate_icf_body_lvl1(stream); 3454ae2d1beSRoy Oursler } 3464ae2d1beSRoy Oursler } 347