linux/include/linux/mtd/nand_bch.h
<<
>>
Prefs
   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
  14struct mtd_info;
  15struct nand_bch_control;
  16
  17#if defined(CONFIG_MTD_NAND_ECC_BCH)
  18
  19static inline int mtd_nand_has_bch(void) { return 1; }
  20
  21/*
  22 * Calculate BCH ecc code
  23 */
  24int 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 */
  30int 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 */
  35struct nand_bch_control *
  36nand_bch_init(struct mtd_info *mtd, unsigned int eccsize,
  37              unsigned int eccbytes, struct nand_ecclayout **ecclayout);
  38/*
  39 * Release BCH encoder/decoder resources
  40 */
  41void nand_bch_free(struct nand_bch_control *nbc);
  42
  43#else /* !CONFIG_MTD_NAND_ECC_BCH */
  44
  45static inline int mtd_nand_has_bch(void) { return 0; }
  46
  47static inline int
  48nand_bch_calculate_ecc(struct mtd_info *mtd, const u_char *dat,
  49                       u_char *ecc_code)
  50{
  51        return -1;
  52}
  53
  54static inline int
  55nand_bch_correct_data(struct mtd_info *mtd, unsigned char *buf,
  56                      unsigned char *read_ecc, unsigned char *calc_ecc)
  57{
  58        return -1;
  59}
  60
  61static inline struct nand_bch_control *
  62nand_bch_init(struct mtd_info *mtd, unsigned int eccsize,
  63              unsigned int eccbytes, struct nand_ecclayout **ecclayout)
  64{
  65        return NULL;
  66}
  67
  68static inline void nand_bch_free(struct nand_bch_control *nbc) {}
  69
  70#endif /* CONFIG_MTD_NAND_ECC_BCH */
  71
  72#endif /* __MTD_NAND_BCH_H__ */
  73