linux/drivers/mtd/nand/atmel/pmecc.h
<<
>>
Prefs
   1/*
   2 * © Copyright 2016 ATMEL
   3 * © Copyright 2016 Free Electrons
   4 *
   5 * Author: Boris Brezillon <boris.brezillon@free-electrons.com>
   6 *
   7 * Derived from the atmel_nand.c driver which contained the following
   8 * copyrights:
   9 *
  10 *    Copyright © 2003 Rick Bronson
  11 *
  12 *    Derived from drivers/mtd/nand/autcpu12.c
  13 *        Copyright © 2001 Thomas Gleixner (gleixner@autronix.de)
  14 *
  15 *    Derived from drivers/mtd/spia.c
  16 *        Copyright © 2000 Steven J. Hill (sjhill@cotw.com)
  17 *
  18 *
  19 *    Add Hardware ECC support for AT91SAM9260 / AT91SAM9263
  20 *        Richard Genoud (richard.genoud@gmail.com), Adeneo Copyright © 2007
  21 *
  22 *        Derived from Das U-Boot source code
  23 *              (u-boot-1.1.5/board/atmel/at91sam9263ek/nand.c)
  24 *        © Copyright 2006 ATMEL Rousset, Lacressonniere Nicolas
  25 *
  26 *    Add Programmable Multibit ECC support for various AT91 SoC
  27 *        © Copyright 2012 ATMEL, Hong Xu
  28 *
  29 *    Add Nand Flash Controller support for SAMA5 SoC
  30 *        © Copyright 2013 ATMEL, Josh Wu (josh.wu@atmel.com)
  31 *
  32 * This program is free software; you can redistribute it and/or modify
  33 * it under the terms of the GNU General Public License version 2 as
  34 * published by the Free Software Foundation.
  35 *
  36 */
  37
  38#ifndef ATMEL_PMECC_H
  39#define ATMEL_PMECC_H
  40
  41#define ATMEL_PMECC_MAXIMIZE_ECC_STRENGTH       0
  42#define ATMEL_PMECC_SECTOR_SIZE_AUTO            0
  43#define ATMEL_PMECC_OOBOFFSET_AUTO              -1
  44
  45struct atmel_pmecc_user_req {
  46        int pagesize;
  47        int oobsize;
  48        struct {
  49                int strength;
  50                int bytes;
  51                int sectorsize;
  52                int nsectors;
  53                int ooboffset;
  54        } ecc;
  55};
  56
  57struct atmel_pmecc *devm_atmel_pmecc_get(struct device *dev);
  58
  59struct atmel_pmecc_user *
  60atmel_pmecc_create_user(struct atmel_pmecc *pmecc,
  61                        struct atmel_pmecc_user_req *req);
  62void atmel_pmecc_destroy_user(struct atmel_pmecc_user *user);
  63
  64int atmel_pmecc_enable(struct atmel_pmecc_user *user, int op);
  65void atmel_pmecc_disable(struct atmel_pmecc_user *user);
  66int atmel_pmecc_wait_rdy(struct atmel_pmecc_user *user);
  67int atmel_pmecc_correct_sector(struct atmel_pmecc_user *user, int sector,
  68                               void *data, void *ecc);
  69bool atmel_pmecc_correct_erased_chunks(struct atmel_pmecc_user *user);
  70void atmel_pmecc_get_generated_eccbytes(struct atmel_pmecc_user *user,
  71                                        int sector, void *ecc);
  72
  73#endif /* ATMEL_PMECC_H */
  74