1 /* 2 * Copyright © 2011 Ivan Djelic <ivan.djelic@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