Lines Matching +full:0 +full:deg
97 #define dbg(_fmt, args...) do {} while (0)
104 unsigned int deg; /* polynomial degree */ member
105 unsigned int c[0]; /* polynomial terms */
129 p = bch->mod8_tab + (l+1)*(((ecc[0] >> 24)^(*data++)) & 0xff); in encode_bch_unaligned()
131 for (i = 0; i < l; i++) in encode_bch_unaligned()
144 uint8_t pad[4] = {0, 0, 0, 0}; in load_ecc8()
147 for (i = 0; i < nwords; i++, src += 4) in load_ecc8()
148 dst[i] = (src[0] << 24)|(src[1] << 16)|(src[2] << 8)|src[3]; in load_ecc8()
151 dst[nwords] = (pad[0] << 24)|(pad[1] << 16)|(pad[2] << 8)|pad[3]; in load_ecc8()
163 for (i = 0; i < nwords; i++) { in store_ecc8()
165 *dst++ = (src[i] >> 16) & 0xff; in store_ecc8()
166 *dst++ = (src[i] >> 8) & 0xff; in store_ecc8()
167 *dst++ = (src[i] >> 0) & 0xff; in store_ecc8()
169 pad[0] = (src[nwords] >> 24); in store_ecc8()
170 pad[1] = (src[nwords] >> 16) & 0xff; in store_ecc8()
171 pad[2] = (src[nwords] >> 8) & 0xff; in store_ecc8()
172 pad[3] = (src[nwords] >> 0) & 0xff; in store_ecc8()
185 * @ecc_bytes of @bch, and should be initialized to 0 before the first call.
211 memset(bch->ecc_buf, 0, r_bytes); in encode_bch()
233 * 31 ...24 23 ...16 15 ... 8 7 ... 0 in encode_bch()
243 w = r[0]^cpu_to_be32(*pdata++); in encode_bch()
244 p0 = tab0 + (l+1)*((w >> 0) & 0xff); in encode_bch()
245 p1 = tab1 + (l+1)*((w >> 8) & 0xff); in encode_bch()
246 p2 = tab2 + (l+1)*((w >> 16) & 0xff); in encode_bch()
247 p3 = tab3 + (l+1)*((w >> 24) & 0xff); in encode_bch()
249 for (i = 0; i < l; i++) in encode_bch()
285 static inline int deg(unsigned int poly) in deg() function
299 x = (x & 0x11111111U) * 0x11111111U; in parity()
309 bch->a_log_tab[b])] : 0; in gf_mul()
314 return a ? bch->a_pow_tab[mod_s(bch, 2*bch->a_log_tab[a])] : 0; in gf_sqr()
321 GF_N(bch)-bch->a_log_tab[b])] : 0; in gf_div()
361 memset(syn, 0, 2*t*sizeof(*syn)); in compute_syndromes()
368 i = deg(poly); in compute_syndromes()
369 for (j = 0; j < 2*t; j += 2) in compute_syndromes()
374 } while (s > 0); in compute_syndromes()
377 for (j = 0; j < t; j++) in compute_syndromes()
383 memcpy(dst, src, GF_POLY_SZ(src->deg)); in gf_poly_copy()
391 unsigned int i, j, tmp, l, pd = 1, d = syn[0]; in compute_error_locator_polynomial()
393 struct gf_poly *pelp = bch->poly_2t[0]; in compute_error_locator_polynomial()
397 memset(pelp, 0, GF_POLY_SZ(2*t)); in compute_error_locator_polynomial()
398 memset(elp, 0, GF_POLY_SZ(2*t)); in compute_error_locator_polynomial()
400 pelp->deg = 0; in compute_error_locator_polynomial()
401 pelp->c[0] = 1; in compute_error_locator_polynomial()
402 elp->deg = 0; in compute_error_locator_polynomial()
403 elp->c[0] = 1; in compute_error_locator_polynomial()
406 for (i = 0; (i < t) && (elp->deg <= t); i++) { in compute_error_locator_polynomial()
412 for (j = 0; j <= pelp->deg; j++) { in compute_error_locator_polynomial()
419 tmp = pelp->deg+k; in compute_error_locator_polynomial()
420 if (tmp > elp->deg) { in compute_error_locator_polynomial()
421 elp->deg = tmp; in compute_error_locator_polynomial()
430 for (j = 1; j <= elp->deg; j++) in compute_error_locator_polynomial()
435 return (elp->deg > t) ? -1 : (int)elp->deg; in compute_error_locator_polynomial()
449 k = 0; in solve_linear_system()
453 for (c = 0; c < m; c++) { in solve_linear_system()
454 rem = 0; in solve_linear_system()
482 if (k > 0) { in solve_linear_system()
484 for (r = m-1; r >= 0; r--) { in solve_linear_system()
487 return 0; in solve_linear_system()
496 return 0; in solve_linear_system()
498 for (p = 0; p < nsol; p++) { in solve_linear_system()
500 for (c = 0; c < k; c++) in solve_linear_system()
504 tmp = 0; in solve_linear_system()
505 for (r = m-1; r >= 0; r--) { in solve_linear_system()
524 unsigned int mask = 0xff, t, rows[16] = {0,}; in find_affine4_roots()
528 rows[0] = c; in find_affine4_roots()
530 /* buid linear system to solve X^4+aX^2+bX+c = 0 */ in find_affine4_roots()
531 for (i = 0; i < m; i++) { in find_affine4_roots()
533 (a ? bch->a_pow_tab[mod_s(bch, k)] : 0)^ in find_affine4_roots()
534 (b ? bch->a_pow_tab[mod_s(bch, j)] : 0); in find_affine4_roots()
542 for (j = 8; j != 0; j >>= 1, mask ^= (mask << j)) { in find_affine4_roots()
543 for (k = 0; k < 16; k = (k+j+1) & ~j) { in find_affine4_roots()
558 int n = 0; in find_poly_deg1_roots()
560 if (poly->c[0]) in find_poly_deg1_roots()
561 /* poly[X] = bX+c with c!=0, root=c/b */ in find_poly_deg1_roots()
562 roots[n++] = mod_s(bch, GF_N(bch)-bch->a_log_tab[poly->c[0]]+ in find_poly_deg1_roots()
573 int n = 0, i, l0, l1, l2; in find_poly_deg2_roots()
576 if (poly->c[0] && poly->c[1]) { in find_poly_deg2_roots()
578 l0 = bch->a_log_tab[poly->c[0]]; in find_poly_deg2_roots()
585 * let u = sum(li.a^i) i=0..m-1; then compute r = sum(li.xi): in find_poly_deg2_roots()
588 * i.e. r and r+1 are roots iff Tr(u)=0 in find_poly_deg2_roots()
590 r = 0; in find_poly_deg2_roots()
593 i = deg(v); in find_poly_deg2_roots()
615 int i, n = 0; in find_poly_deg3_roots()
618 if (poly->c[0]) { in find_poly_deg3_roots()
621 c2 = gf_div(bch, poly->c[0], e3); in find_poly_deg3_roots()
633 for (i = 0; i < 4; i++) { in find_poly_deg3_roots()
648 int i, l, n = 0; in find_poly_deg4_roots()
649 unsigned int a, b, c, d, e = 0, f, a2, b2, c2, e4; in find_poly_deg4_roots()
651 if (poly->c[0] == 0) in find_poly_deg4_roots()
652 return 0; in find_poly_deg4_roots()
656 d = gf_div(bch, poly->c[0], e4); in find_poly_deg4_roots()
663 /* first, eliminate cX by using z=X+e with ae^2+c=0 */ in find_poly_deg4_roots()
668 l += (l & 1) ? GF_N(bch) : 0; in find_poly_deg4_roots()
681 if (d == 0) in find_poly_deg4_roots()
683 return 0; in find_poly_deg4_roots()
696 for (i = 0; i < 4; i++) { in find_poly_deg4_roots()
712 int i, d = a->deg, l = GF_N(bch)-a_log(bch, a->c[a->deg]); in gf_poly_logrep()
714 /* represent 0 values with -1; warning, rep[d] is not set to 1 */ in gf_poly_logrep()
715 for (i = 0; i < d; i++) in gf_poly_logrep()
727 const unsigned int d = b->deg; in gf_poly_mod()
729 if (a->deg < d) in gf_poly_mod()
738 for (j = a->deg; j >= d; j--) { in gf_poly_mod()
742 for (i = 0; i < d; i++, p++) { in gf_poly_mod()
744 if (m >= 0) in gf_poly_mod()
750 a->deg = d-1; in gf_poly_mod()
751 while (!c[a->deg] && a->deg) in gf_poly_mod()
752 a->deg--; in gf_poly_mod()
761 if (a->deg >= b->deg) { in gf_poly_div()
762 q->deg = a->deg-b->deg; in gf_poly_div()
766 memcpy(q->c, &a->c[b->deg], (1+q->deg)*sizeof(unsigned int)); in gf_poly_div()
768 q->deg = 0; in gf_poly_div()
769 q->c[0] = 0; in gf_poly_div()
783 if (a->deg < b->deg) { in gf_poly_gcd()
789 while (b->deg > 0) { in gf_poly_gcd()
813 z->deg = 1; in compute_trace_bk_mod()
814 z->c[0] = 0; in compute_trace_bk_mod()
817 out->deg = 0; in compute_trace_bk_mod()
818 memset(out, 0, GF_POLY_SZ(f->deg)); in compute_trace_bk_mod()
823 for (i = 0; i < m; i++) { in compute_trace_bk_mod()
825 for (j = z->deg; j >= 0; j--) { in compute_trace_bk_mod()
828 z->c[2*j+1] = 0; in compute_trace_bk_mod()
830 if (z->deg > out->deg) in compute_trace_bk_mod()
831 out->deg = z->deg; in compute_trace_bk_mod()
834 z->deg *= 2; in compute_trace_bk_mod()
839 while (!out->c[out->deg] && out->deg) in compute_trace_bk_mod()
840 out->deg--; in compute_trace_bk_mod()
851 struct gf_poly *f2 = bch->poly_2t[0]; in factor_polynomial()
865 if (tk->deg > 0) { in factor_polynomial()
869 if (gcd->deg < f->deg) { in factor_polynomial()
873 *h = &((struct gf_poly_deg1 *)f)[gcd->deg].poly; in factor_polynomial()
890 switch (poly->deg) { in find_poly_roots()
906 cnt = 0; in find_poly_roots()
907 if (poly->deg && (k <= GF_M(bch))) { in find_poly_roots()
928 unsigned int i, j, syn, syn0, count = 0; in chien_search()
933 bch->cache[p->deg] = 0; in chien_search()
934 syn0 = gf_div(bch, p->c[0], p->c[p->deg]); in chien_search()
938 for (j = 1, syn = syn0; j <= p->deg; j++) { in chien_search()
940 if (m >= 0) in chien_search()
943 if (syn == 0) { in chien_search()
945 if (count == p->deg) in chien_search()
949 return (count == p->deg) ? count : 0; in chien_search()
1024 for (i = 0, sum = 0; i < (int)ecc_words; i++) { in decode_bch()
1030 return 0; in decode_bch()
1037 if (err > 0) { in decode_bch()
1042 if (err > 0) { in decode_bch()
1045 for (i = 0; i < err; i++) { in decode_bch()
1054 return (err >= 0) ? err : -EBADMSG; in decode_bch()
1064 const unsigned int k = 1 << deg(poly); in build_gf_tables()
1070 for (i = 0; i < GF_N(bch); i++) { in build_gf_tables()
1074 /* polynomial is not primitive (a^i=1 with 0<i<2^m-1) */ in build_gf_tables()
1081 bch->a_log_tab[0] = 0; in build_gf_tables()
1083 return 0; in build_gf_tables()
1097 memset(bch->mod8_tab, 0, 4*256*l*sizeof(*bch->mod8_tab)); in build_mod8_tables()
1099 for (i = 0; i < 256; i++) { in build_mod8_tables()
1101 for (b = 0; b < 4; b++) { in build_mod8_tables()
1102 /* we want to compute (p(X).X^(8*b+deg(g))) mod g(X) */ in build_mod8_tables()
1106 d = deg(data); in build_mod8_tables()
1107 /* subtract X^d.g(X) from p(X).X^(8*b+deg(g)) */ in build_mod8_tables()
1108 data ^= g[0] >> (31-d); in build_mod8_tables()
1109 for (j = 0; j < ecclen; j++) { in build_mod8_tables()
1110 hi = (d < 31) ? g[j] << (d+1) : 0; in build_mod8_tables()
1112 g[j+1] >> (31-d) : 0; in build_mod8_tables()
1127 unsigned int sum, x, y, remaining, ak = 0, xi[BCH_MAX_M]; in build_deg2_base()
1129 /* find k s.t. Tr(a^k) = 1 and 0 <= k < m */ in build_deg2_base()
1130 for (i = 0; i < m; i++) { in build_deg2_base()
1131 for (j = 0, sum = 0; j < m; j++) in build_deg2_base()
1139 /* find xi, i=0..m-1 such that xi^2+xi = a^i+Tr(a^i).a^k */ in build_deg2_base()
1141 memset(xi, 0, sizeof(xi)); in build_deg2_base()
1143 for (x = 0; (x <= GF_N(bch)) && remaining; x++) { in build_deg2_base()
1145 for (i = 0; i < 2; i++) { in build_deg2_base()
1158 return remaining ? -1 : 0; in build_deg2_base()
1178 int n, err = 0; in compute_generator_polynomial()
1194 memset(roots , 0, (bch->n+1)*sizeof(*roots)); in compute_generator_polynomial()
1195 for (i = 0; i < t; i++) { in compute_generator_polynomial()
1196 for (j = 0, r = 2*i+1; j < m; j++) { in compute_generator_polynomial()
1202 g->deg = 0; in compute_generator_polynomial()
1203 g->c[0] = 1; in compute_generator_polynomial()
1204 for (i = 0; i < GF_N(bch); i++) { in compute_generator_polynomial()
1208 g->c[g->deg+1] = 1; in compute_generator_polynomial()
1209 for (j = g->deg; j > 0; j--) in compute_generator_polynomial()
1212 g->c[0] = gf_mul(bch, g->c[0], r); in compute_generator_polynomial()
1213 g->deg++; in compute_generator_polynomial()
1217 n = g->deg+1; in compute_generator_polynomial()
1218 i = 0; in compute_generator_polynomial()
1220 while (n > 0) { in compute_generator_polynomial()
1222 for (j = 0, word = 0; j < nbits; j++) { in compute_generator_polynomial()
1229 bch->ecc_bits = g->deg; in compute_generator_polynomial()
1242 * @prim_poly: user-provided primitive polynomial (or 0 to use default)
1261 int err = 0; in init_bch()
1270 0x25, 0x43, 0x83, 0x11d, 0x211, 0x409, 0x805, 0x1053, 0x201b, in init_bch()
1271 0x402b, 0x8003, in init_bch()
1303 if (prim_poly == 0) in init_bch()
1325 for (i = 0; i < ARRAY_SIZE(bch->poly_2t); i++) in init_bch()
1374 for (i = 0; i < ARRAY_SIZE(bch->poly_2t); i++) in free_bch()