X-Git-Url: http://www.aleph1.co.uk/gitweb/?p=yaffs2.git;a=blobdiff_plain;f=yaffs_ecc.c;h=9294107c150d261bbb6c90c8c78b6590ba4b97a4;hp=e95a8069a8c5bc0c754b9f41ddbc9944e0b76f98;hb=5cd357cc797ac725ca90b13cb7020ba4dd924f18;hpb=fcc9631a249a467718a7ae67c58ae1ab29e5d034 diff --git a/yaffs_ecc.c b/yaffs_ecc.c index e95a806..9294107 100644 --- a/yaffs_ecc.c +++ b/yaffs_ecc.c @@ -1,7 +1,7 @@ /* * YAFFS: Yet Another Flash File System. A NAND-flash specific file system. * - * Copyright (C) 2002-2010 Aleph One Ltd. + * Copyright (C) 2002-2011 Aleph One Ltd. * for Toby Churchill Ltd and Brightstar Engineering * * Created by Charles Manning @@ -16,22 +16,22 @@ * * The ECC comprises 22 bits of parity information and is stuffed into 3 bytes. * The two unused bit are set to 1. - * The ECC can correct single bit errors in a 256-byte page of data. Thus, two such ECC - * blocks are used on a 512-byte NAND page. + * The ECC can correct single bit errors in a 256-byte page of data. Thus, two + * such ECC blocks are used on a 512-byte NAND page. * */ +#include "yportenv.h" + +#include "yaffs_ecc.h" + /* Table generated by gen-ecc.c * Using a table means we do not have to calculate p1..p4 and p1'..p4' * for each byte of data. These are instead provided in a table in bits7..2. - * Bit 0 of each entry indicates whether the entry has an odd or even parity, and therefore - * this bytes influence on the line parity. + * Bit 0 of each entry indicates whether the entry has an odd or even parity, + * and therefore this bytes influence on the line parity. */ -#include "yportenv.h" - -#include "yaffs_ecc.h" - static const unsigned char column_parity_table[] = { 0x00, 0x55, 0x59, 0x0c, 0x65, 0x30, 0x3c, 0x69, 0x69, 0x3c, 0x30, 0x65, 0x0c, 0x59, 0x55, 0x00, @@ -69,10 +69,9 @@ static const unsigned char column_parity_table[] = { /* Calculate the ECC for a 256-byte block of data */ -void yaffs_ecc_cacl(const unsigned char *data, unsigned char *ecc) +void yaffs_ecc_calc(const unsigned char *data, unsigned char *ecc) { unsigned int i; - unsigned char col_parity = 0; unsigned char line_parity = 0; unsigned char line_parity_prime = 0; @@ -129,12 +128,6 @@ void yaffs_ecc_cacl(const unsigned char *data, unsigned char *ecc) t |= 0x01; ecc[0] = ~t; -#ifdef CONFIG_YAFFS_ECC_WRONG_ORDER - /* Swap the bytes into the wrong order */ - t = ecc[0]; - ecc[0] = ecc[1]; - ecc[1] = t; -#endif } /* Correct the ECC on a 256 byte block of data */ @@ -159,15 +152,6 @@ int yaffs_ecc_correct(unsigned char *data, unsigned char *read_ecc, unsigned byte; unsigned bit; -#ifdef CONFIG_YAFFS_ECC_WRONG_ORDER - /* swap the bytes to correct for the wrong order */ - unsigned char t; - - t = d0; - d0 = d1; - d1 = t; -#endif - bit = byte = 0; if (d1 & 0x80) @@ -222,7 +206,6 @@ void yaffs_ecc_calc_other(const unsigned char *data, unsigned n_bytes, struct yaffs_ecc_other *ecc_other) { unsigned int i; - unsigned char col_parity = 0; unsigned line_parity = 0; unsigned line_parity_prime = 0;