annotate yaffs_ecc.h @ 75:a99f66adbe4f

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