Skip to content
Snippets Groups Projects
Select Git revision
  • master default protected
  • stable
  • extraversion
  • early-display
  • variant-emmc-nvme-boot
  • 2024-07-19
  • 2024-06-30
  • 2023-10-18
  • 2023-10-10
  • 2023-07-04
  • 2023-01-25
  • v3
  • variant-emmc-nvme-boot
  • 2020-06-01
14 results

bch.h

Blame
  • bch.h 2.00 KiB
    /*
     * Generic binary BCH encoding/decoding library
     *
     * SPDX-License-Identifier:	GPL-2.0
     *
     * Copyright © 2011 Parrot S.A.
     *
     * Author: Ivan Djelic <ivan.djelic@parrot.com>
     *
     * Description:
     *
     * This library provides runtime configurable encoding/decoding of binary
     * Bose-Chaudhuri-Hocquenghem (BCH) codes.
    */
    #ifndef _BCH_H
    #define _BCH_H
    
    #include <linux/types.h>
    
    /**
     * struct bch_control - BCH control structure
     * @m:          Galois field order
     * @n:          maximum codeword size in bits (= 2^m-1)
     * @t:          error correction capability in bits
     * @ecc_bits:   ecc exact size in bits, i.e. generator polynomial degree (<=m*t)
     * @ecc_bytes:  ecc max size (m*t bits) in bytes
     * @a_pow_tab:  Galois field GF(2^m) exponentiation lookup table
     * @a_log_tab:  Galois field GF(2^m) log lookup table
     * @mod8_tab:   remainder generator polynomial lookup tables
     * @ecc_buf:    ecc parity words buffer
     * @ecc_buf2:   ecc parity words buffer
     * @xi_tab:     GF(2^m) base for solving degree 2 polynomial roots
     * @syn:        syndrome buffer
     * @cache:      log-based polynomial representation buffer
     * @elp:        error locator polynomial
     * @poly_2t:    temporary polynomials of degree 2t
     */
    struct bch_control {
    	unsigned int    m;
    	unsigned int    n;
    	unsigned int    t;
    	unsigned int    ecc_bits;
    	unsigned int    ecc_bytes;
    /* private: */
    	uint16_t       *a_pow_tab;
    	uint16_t       *a_log_tab;
    	uint32_t       *mod8_tab;
    	uint32_t       *ecc_buf;
    	uint32_t       *ecc_buf2;
    	unsigned int   *xi_tab;
    	unsigned int   *syn;
    	int            *cache;
    	struct gf_poly *elp;
    	struct gf_poly *poly_2t[4];
    };
    
    struct bch_control *init_bch(int m, int t, unsigned int prim_poly);
    
    void free_bch(struct bch_control *bch);
    
    void encode_bch(struct bch_control *bch, const uint8_t *data,
    		unsigned int len, uint8_t *ecc);
    
    int decode_bch(struct bch_control *bch, const uint8_t *data, unsigned int len,
    	       const uint8_t *recv_ecc, const uint8_t *calc_ecc,
    	       const unsigned int *syn, unsigned int *errloc);
    
    #endif /* _BCH_H */