Home | History | Annotate | Download | only in mtd
      1 /*
      2  * Copyright  2011 Ivan Djelic <ivan.djelic (at) parrot.com>
      3  *
      4  * This program is free software; you can redistribute it and/or modify
      5  * it under the terms of the GNU General Public License version 2 as
      6  * published by the Free Software Foundation.
      7  *
      8  * This file is the header for the NAND BCH ECC implementation.
      9  */
     10 
     11 #ifndef __MTD_NAND_BCH_H__
     12 #define __MTD_NAND_BCH_H__
     13 
     14 struct mtd_info;
     15 struct nand_bch_control;
     16 
     17 #if defined(CONFIG_NAND_ECC_BCH)
     18 
     19 static inline int mtd_nand_has_bch(void) { return 1; }
     20 
     21 /*
     22  * Calculate BCH ecc code
     23  */
     24 int nand_bch_calculate_ecc(struct mtd_info *mtd, const u_char *dat,
     25 			   u_char *ecc_code);
     26 
     27 /*
     28  * Detect and correct bit errors
     29  */
     30 int nand_bch_correct_data(struct mtd_info *mtd, u_char *dat, u_char *read_ecc,
     31 			  u_char *calc_ecc);
     32 /*
     33  * Initialize BCH encoder/decoder
     34  */
     35 struct nand_bch_control *nand_bch_init(struct mtd_info *mtd);
     36 /*
     37  * Release BCH encoder/decoder resources
     38  */
     39 void nand_bch_free(struct nand_bch_control *nbc);
     40 
     41 #else /* !CONFIG_NAND_ECC_BCH */
     42 
     43 static inline int mtd_nand_has_bch(void) { return 0; }
     44 
     45 static inline int
     46 nand_bch_calculate_ecc(struct mtd_info *mtd, const u_char *dat,
     47 		       u_char *ecc_code)
     48 {
     49 	return -1;
     50 }
     51 
     52 static inline int
     53 nand_bch_correct_data(struct mtd_info *mtd, unsigned char *buf,
     54 		      unsigned char *read_ecc, unsigned char *calc_ecc)
     55 {
     56 	return -ENOTSUPP;
     57 }
     58 
     59 static inline struct nand_bch_control *nand_bch_init(struct mtd_info *mtd)
     60 {
     61 	return NULL;
     62 }
     63 
     64 static inline void nand_bch_free(struct nand_bch_control *nbc) {}
     65 
     66 #endif /* CONFIG_NAND_ECC_BCH */
     67 
     68 #endif /* __MTD_NAND_BCH_H__ */
     69