cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

pmecc.h (2221B)


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