diff options
author | Frank Haverkamp <haver@vnet.ibm.com> | 2008-01-07 14:05:00 +0100 |
---|---|---|
committer | Artem Bityutskiy <Artem.Bityutskiy@nokia.com> | 2008-01-15 12:47:00 +0200 |
commit | 4bf037f3a2aea4328e10422379f751370d288d46 (patch) | |
tree | 68a24f007e8b89609d14d44165a8bcd669629e7a /ubi-utils/src/ecclayouts.h | |
parent | 07e6203fd3078d6855e7d33597bdbbae10e555fd (diff) |
ubi-utils: bin2nand, nand2bin add support of different ecc layouts
Both tools were lacking support of alternate ECC layouts. Only our intitial
format was supported. With this change, it should be very easy to add more
layouts in addtion to the already supported ones, which are: IBM (our format),
and the MTD default layout. NAND OOB sizes of 512 and 2048 are currently
supported.
In contrast to the old version of bin2nand, the holes inbetween the ECC data
is now not filled with 0x00 anymore but instead 0xff (like deleted flash) is
used. This should not cause any difference. The testcase reflects the different
layouts too.
Signed-off-by: Frank Haverkamp <haver@vnet.ibm.com>
Diffstat (limited to 'ubi-utils/src/ecclayouts.h')
-rw-r--r-- | ubi-utils/src/ecclayouts.h | 66 |
1 files changed, 66 insertions, 0 deletions
diff --git a/ubi-utils/src/ecclayouts.h b/ubi-utils/src/ecclayouts.h new file mode 100644 index 0000000..a1c7823 --- /dev/null +++ b/ubi-utils/src/ecclayouts.h @@ -0,0 +1,66 @@ +#ifndef __ECCLAYOUTS_H__ +#define __ECCLAYOUTS_H__ +/* + * Copyright (c) International Business Machines Corp., 2007 + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See + * the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + */ + +#include <stdint.h> +#include <mtd/mtd-abi.h> + +/* Define default oob placement schemes for large and small page devices */ +static struct nand_ecclayout mtd_nand_oob_16 = { + .eccbytes = 6, + .eccpos = { 0, 1, 2, 3, 6, 7 }, + .oobfree = {{ .offset = 8, .length = 8 }} +}; + +static struct nand_ecclayout mtd_nand_oob_64 = { + .eccbytes = 24, + .eccpos = { 40, 41, 42, 43, 44, 45, 46, 47, + 48, 49, 50, 51, 52, 53, 54, 55, + 56, 57, 58, 59, 60, 61, 62, 63 }, + .oobfree = {{ .offset = 2, .length = 38 }} +}; + +/* Define IBM oob placement schemes */ +static struct nand_ecclayout ibm_nand_oob_16 = { + .eccbytes = 6, + .eccpos = { 9, 10, 11, 13, 14, 15 }, + .oobfree = {{ .offset = 8, .length = 8 }} +}; + +static struct nand_ecclayout ibm_nand_oob_64 = { + .eccbytes = 24, + .eccpos = { 33, 34, 35, 37, 38, 39, 41, 42, + 43, 45, 46, 47, 49, 50, 51, 53, + 54, 55, 57, 58, 59, 61, 62, 63 }, + .oobfree = {{ .offset = 2, .length = 30 }} +}; + +struct oob_placement { + const char *name; + struct nand_ecclayout *nand_oob[2]; +}; + +static struct oob_placement oob_placement[] = { + { .name = "IBM", + .nand_oob = { &ibm_nand_oob_16, &ibm_nand_oob_64 }}, + { .name = "MTD", + .nand_oob = { &mtd_nand_oob_16, &mtd_nand_oob_64 }}, +}; + +#endif |