• Home
  • Raw
  • Download

Lines Matching refs:p

118 #define get_input_data(p, o, b)						\  argument
119 be##b##_to_cpu(get_unaligned((__be##b *)((p)->in + (o))))
121 #define init_hashtable_nodes(p, b) do { \ argument
123 hash_init((p)->htable##b); \
124 for (_i = 0; _i < ARRAY_SIZE((p)->node##b); _i++) { \
125 (p)->node##b[_i].index = _i; \
126 (p)->node##b[_i].data = 0; \
127 INIT_HLIST_NODE(&(p)->node##b[_i].node); \
131 #define find_index(p, b, n) ({ \ argument
133 p->index##b[n] = INDEX_NOT_FOUND; \
134 hash_for_each_possible(p->htable##b, _n, node, p->data##b[n]) { \
135 if (p->data##b[n] == _n->data) { \
136 p->index##b[n] = _n->index; \
140 p->index##b[n] >= 0; \
143 #define check_index(p, b, n) \ argument
144 ((p)->index##b[n] == INDEX_NOT_CHECKED \
145 ? find_index(p, b, n) \
146 : (p)->index##b[n] >= 0)
148 #define replace_hash(p, b, i, d) do { \ argument
149 struct sw842_hlist_node##b *_n = &(p)->node##b[(i)+(d)]; \
151 _n->data = (p)->data##b[d]; \
154 (unsigned int)((p)->in - (p)->instart), \
156 hash_add((p)->htable##b, &_n->node, _n->data); \
161 static int add_bits(struct sw842_param *p, u64 d, u8 n);
163 static int __split_add_bits(struct sw842_param *p, u64 d, u8 n, u8 s) in __split_add_bits() argument
170 ret = add_bits(p, d >> s, n - s); in __split_add_bits()
173 return add_bits(p, d & GENMASK_ULL(s - 1, 0), s); in __split_add_bits()
176 static int add_bits(struct sw842_param *p, u64 d, u8 n) in add_bits() argument
178 int b = p->bit, bits = b + n, s = round_up(bits, 8) - bits; in add_bits()
180 u8 *out = p->out; in add_bits()
191 return __split_add_bits(p, d, n, 32); in add_bits()
192 else if (p->olen < 8 && bits > 32 && bits <= 56) in add_bits()
193 return __split_add_bits(p, d, n, 16); in add_bits()
194 else if (p->olen < 4 && bits > 16 && bits <= 24) in add_bits()
195 return __split_add_bits(p, d, n, 8); in add_bits()
197 if (DIV_ROUND_UP(bits, 8) > p->olen) in add_bits()
220 p->bit += n; in add_bits()
222 if (p->bit > 7) { in add_bits()
223 p->out += p->bit / 8; in add_bits()
224 p->olen -= p->bit / 8; in add_bits()
225 p->bit %= 8; in add_bits()
231 static int add_template(struct sw842_param *p, u8 c) in add_template() argument
242 ret = add_bits(p, t[4], OP_BITS); in add_template()
254 ret = add_bits(p, p->index8[0], I8_BITS); in add_template()
256 ret = add_bits(p, p->data8[0], 64); in add_template()
262 ret = add_bits(p, get_input_data(p, 2, 32), 32); in add_template()
266 ret = add_bits(p, p->index4[b >> 2], I4_BITS); in add_template()
268 ret = add_bits(p, p->data4[b >> 2], 32); in add_template()
276 ret = add_bits(p, p->index2[b >> 1], I2_BITS); in add_template()
278 ret = add_bits(p, p->data2[b >> 1], 16); in add_template()
314 static int add_repeat_template(struct sw842_param *p, u8 r) in add_repeat_template() argument
322 ret = add_bits(p, OP_REPEAT, OP_BITS); in add_repeat_template()
326 ret = add_bits(p, r, REPEAT_BITS); in add_repeat_template()
336 static int add_short_data_template(struct sw842_param *p, u8 b) in add_short_data_template() argument
343 ret = add_bits(p, OP_SHORT_DATA, OP_BITS); in add_short_data_template()
347 ret = add_bits(p, b, SHORT_DATA_BITS); in add_short_data_template()
352 ret = add_bits(p, p->in[i], 8); in add_short_data_template()
363 static int add_zeros_template(struct sw842_param *p) in add_zeros_template() argument
365 int ret = add_bits(p, OP_ZEROS, OP_BITS); in add_zeros_template()
376 static int add_end_template(struct sw842_param *p) in add_end_template() argument
378 int ret = add_bits(p, OP_END, OP_BITS); in add_end_template()
389 static bool check_template(struct sw842_param *p, u8 c) in check_template() argument
400 match = check_index(p, 2, b >> 1); in check_template()
402 match = check_index(p, 4, b >> 2); in check_template()
404 match = check_index(p, 8, 0); in check_template()
417 static void get_next_data(struct sw842_param *p) in get_next_data() argument
419 p->data8[0] = get_input_data(p, 0, 64); in get_next_data()
420 p->data4[0] = get_input_data(p, 0, 32); in get_next_data()
421 p->data4[1] = get_input_data(p, 4, 32); in get_next_data()
422 p->data2[0] = get_input_data(p, 0, 16); in get_next_data()
423 p->data2[1] = get_input_data(p, 2, 16); in get_next_data()
424 p->data2[2] = get_input_data(p, 4, 16); in get_next_data()
425 p->data2[3] = get_input_data(p, 6, 16); in get_next_data()
432 static void update_hashtables(struct sw842_param *p) in update_hashtables() argument
434 u64 pos = p->in - p->instart; in update_hashtables()
439 replace_hash(p, 8, n8, 0); in update_hashtables()
440 replace_hash(p, 4, n4, 0); in update_hashtables()
441 replace_hash(p, 4, n4, 1); in update_hashtables()
442 replace_hash(p, 2, n2, 0); in update_hashtables()
443 replace_hash(p, 2, n2, 1); in update_hashtables()
444 replace_hash(p, 2, n2, 2); in update_hashtables()
445 replace_hash(p, 2, n2, 3); in update_hashtables()
451 static int process_next(struct sw842_param *p) in process_next() argument
455 p->index8[0] = INDEX_NOT_CHECKED; in process_next()
456 p->index4[0] = INDEX_NOT_CHECKED; in process_next()
457 p->index4[1] = INDEX_NOT_CHECKED; in process_next()
458 p->index2[0] = INDEX_NOT_CHECKED; in process_next()
459 p->index2[1] = INDEX_NOT_CHECKED; in process_next()
460 p->index2[2] = INDEX_NOT_CHECKED; in process_next()
461 p->index2[3] = INDEX_NOT_CHECKED; in process_next()
465 if (check_template(p, i)) in process_next()
469 ret = add_template(p, i); in process_next()
489 struct sw842_param *p = (struct sw842_param *)wmem; in sw842_compress() local
495 BUILD_BUG_ON(sizeof(*p) > SW842_MEM_COMPRESS); in sw842_compress()
497 init_hashtable_nodes(p, 8); in sw842_compress()
498 init_hashtable_nodes(p, 4); in sw842_compress()
499 init_hashtable_nodes(p, 2); in sw842_compress()
501 p->in = (u8 *)in; in sw842_compress()
502 p->instart = p->in; in sw842_compress()
503 p->ilen = ilen; in sw842_compress()
504 p->out = out; in sw842_compress()
505 p->olen = *olen; in sw842_compress()
506 p->bit = 0; in sw842_compress()
508 total = p->olen; in sw842_compress()
523 last = ~get_unaligned((u64 *)p->in); in sw842_compress()
525 while (p->ilen > 7) { in sw842_compress()
526 next = get_unaligned((u64 *)p->in); in sw842_compress()
531 get_next_data(p); in sw842_compress()
543 ret = add_repeat_template(p, repeat_count); in sw842_compress()
550 ret = add_zeros_template(p); in sw842_compress()
552 ret = process_next(p); in sw842_compress()
559 update_hashtables(p); in sw842_compress()
560 p->in += 8; in sw842_compress()
561 p->ilen -= 8; in sw842_compress()
565 ret = add_repeat_template(p, repeat_count); in sw842_compress()
571 if (p->ilen > 0) { in sw842_compress()
572 ret = add_short_data_template(p, p->ilen); in sw842_compress()
576 p->in += p->ilen; in sw842_compress()
577 p->ilen = 0; in sw842_compress()
580 ret = add_end_template(p); in sw842_compress()
592 ret = add_bits(p, crc, CRC_BITS); in sw842_compress()
596 if (p->bit) { in sw842_compress()
597 p->out++; in sw842_compress()
598 p->olen--; in sw842_compress()
599 p->bit = 0; in sw842_compress()
603 pad = (8 - ((total - p->olen) % 8)) % 8; in sw842_compress()
605 if (pad > p->olen) /* we were so close! */ in sw842_compress()
607 memset(p->out, 0, pad); in sw842_compress()
608 p->out += pad; in sw842_compress()
609 p->olen -= pad; in sw842_compress()
612 if (unlikely((total - p->olen) > UINT_MAX)) in sw842_compress()
615 *olen = total - p->olen; in sw842_compress()