|
0
|
1 /* |
|
|
2 * YAFFS: Yet another FFS. A NAND-flash specific file system. |
|
|
3 * |
|
|
4 * yaffs_ecc.c: ECC generation/correction algorithms. |
|
|
5 * |
|
|
6 * Copyright (C) 2002 Aleph One Ltd. |
|
|
7 * |
|
|
8 * Created by Charles Manning <charles@aleph1.co.uk> |
|
|
9 * |
|
|
10 * This program is free software; you can redistribute it and/or modify |
|
|
11 * it under the terms of the GNU General Public License version 2 as |
|
|
12 * published by the Free Software Foundation. |
|
|
13 * |
|
|
14 */ |
|
75
|
15 |
|
0
|
16 /* |
|
75
|
17 * This code implements the ECC algorithm used in SmartMedia. |
|
|
18 * |
|
|
19 * The ECC comprises 22 bits of parity information and is stuffed into 3 bytes. |
|
|
20 * The two unused bit are set to 1. |
|
|
21 * The ECC can correct single bit errors in a 256-byte page of data. Thus, two such ECC |
|
|
22 * blocks are used on a 512-byte NAND page. |
|
|
23 * |
|
|
24 */ |
|
0
|
25 |
|
|
26 #ifndef __YAFFS_ECC_H__ |
|
|
27 #define __YAFFS_ECC_H__ |
|
|
28 |
|
75
|
29 typedef struct { |
|
0
|
30 unsigned char colParity; |
|
|
31 unsigned lineParity; |
|
|
32 unsigned lineParityPrime; |
|
|
33 } yaffs_ECCOther; |
|
|
34 |
|
75
|
35 void yaffs_ECCCalculate(const unsigned char *data, unsigned char *ecc); |
|
|
36 int yaffs_ECCCorrect(unsigned char *data, unsigned char *read_ecc, |
|
|
37 const unsigned char *test_ecc); |
|
0
|
38 |
|
75
|
39 void yaffs_ECCCalculateOther(const unsigned char *data, unsigned nBytes, |
|
|
40 yaffs_ECCOther * ecc); |
|
|
41 int yaffs_ECCCorrectOther(unsigned char *data, unsigned nBytes, |
|
|
42 yaffs_ECCOther * read_ecc, |
|
|
43 const yaffs_ECCOther * test_ecc); |
|
0
|
44 #endif |