| xj | b04a402 | 2021-11-25 15:01:52 +0800 | [diff] [blame] | 1 | /* | 
 | 2 |  * YAFFS: Yet another Flash File System . A NAND-flash specific file system. | 
 | 3 |  * | 
 | 4 |  * Copyright (C) 2002-2018 Aleph One Ltd. | 
 | 5 |  * | 
 | 6 |  * Created by Charles Manning <charles@aleph1.co.uk> | 
 | 7 |  * | 
 | 8 |  * This program is free software; you can redistribute it and/or modify | 
 | 9 |  * it under the terms of the GNU Lesser General Public License version 2.1 as | 
 | 10 |  * published by the Free Software Foundation. | 
 | 11 |  * | 
 | 12 |  * Note: Only YAFFS headers are LGPL, YAFFS C code is covered by GPL. | 
 | 13 |  */ | 
 | 14 |  | 
 | 15 | /* | 
 | 16 |  * This code implements the ECC algorithm used in SmartMedia. | 
 | 17 |  * | 
 | 18 |  * The ECC comprises 22 bits of parity information and is stuffed into 3 bytes. | 
 | 19 |  * The two unused bit are set to 1. | 
 | 20 |  * The ECC can correct single bit errors in a 256-byte page of data. | 
 | 21 |  * Thus, two such ECC blocks are used on a 512-byte NAND page. | 
 | 22 |  * | 
 | 23 |  */ | 
 | 24 |  | 
 | 25 | #ifndef __YAFFS_ECC_H__ | 
 | 26 | #define __YAFFS_ECC_H__ | 
 | 27 |  | 
 | 28 | struct yaffs_ecc_other { | 
 | 29 | 	unsigned char col_parity; | 
 | 30 | 	unsigned line_parity; | 
 | 31 | 	unsigned line_parity_prime; | 
 | 32 | }; | 
 | 33 |  | 
 | 34 | void yaffs_ecc_calc(const unsigned char *data, unsigned char *ecc); | 
 | 35 | int yaffs_ecc_correct(unsigned char *data, unsigned char *read_ecc, | 
 | 36 | 		      const unsigned char *test_ecc); | 
 | 37 |  | 
 | 38 | void yaffs_ecc_calc_other(const unsigned char *data, unsigned n_bytes, | 
 | 39 | 			  struct yaffs_ecc_other *ecc); | 
 | 40 | int yaffs_ecc_correct_other(unsigned char *data, unsigned n_bytes, | 
 | 41 | 			    struct yaffs_ecc_other *read_ecc, | 
 | 42 | 			    const struct yaffs_ecc_other *test_ecc); | 
 | 43 | #endif |