summaryrefslogtreecommitdiff
path: root/drivers/mtd
diff options
context:
space:
mode:
authorBoris Brezillon <boris.brezillon@free-electrons.com>2016-02-04 10:16:18 +0100
committerBoris Brezillon <boris.brezillon@free-electrons.com>2016-05-05 23:51:51 +0200
commitaab616e31d1c7ec3726f7f5cbdaaec98759ebe93 (patch)
tree4e05a14a567d7db3660efcb4e08f550f24f52a2b /drivers/mtd
parent7f2b092c9eeda055ae60af194a8edacaea5f7a10 (diff)
mtd: kill the nand_ecclayout struct
Now that all MTD drivers have moved to the mtd_ooblayout_ops model we can safely remove the struct nand_ecclayout definition, and all the remaining places where it was still used. Signed-off-by: Boris Brezillon <boris.brezillon@free-electrons.com>
Diffstat (limited to 'drivers/mtd')
-rw-r--r--drivers/mtd/mtdchar.c12
-rw-r--r--drivers/mtd/mtdcore.c117
2 files changed, 6 insertions, 123 deletions
diff --git a/drivers/mtd/mtdchar.c b/drivers/mtd/mtdchar.c
index 3fad2c7425b0..2a47a3f0e730 100644
--- a/drivers/mtd/mtdchar.c
+++ b/drivers/mtd/mtdchar.c
@@ -465,12 +465,12 @@ static int mtdchar_readoob(struct file *file, struct mtd_info *mtd,
}
/*
- * Copies (and truncates, if necessary) data from the larger struct,
- * nand_ecclayout, to the smaller, deprecated layout struct,
- * nand_ecclayout_user. This is necessary only to support the deprecated
- * API ioctl ECCGETLAYOUT while allowing all new functionality to use
- * nand_ecclayout flexibly (i.e. the struct may change size in new
- * releases without requiring major rewrites).
+ * Copies (and truncates, if necessary) OOB layout information to the
+ * deprecated layout struct, nand_ecclayout_user. This is necessary only to
+ * support the deprecated API ioctl ECCGETLAYOUT while allowing all new
+ * functionality to use mtd_ooblayout_ops flexibly (i.e. mtd_ooblayout_ops
+ * can describe any kind of OOB layout with almost zero overhead from a
+ * memory usage point of view).
*/
static int shrink_ecclayout(struct mtd_info *mtd,
struct nand_ecclayout_user *to)
diff --git a/drivers/mtd/mtdcore.c b/drivers/mtd/mtdcore.c
index 134ed2f7b919..e3936b847c6b 100644
--- a/drivers/mtd/mtdcore.c
+++ b/drivers/mtd/mtdcore.c
@@ -1376,123 +1376,6 @@ int mtd_ooblayout_count_eccbytes(struct mtd_info *mtd)
}
EXPORT_SYMBOL_GPL(mtd_ooblayout_count_eccbytes);
-/**
- * mtd_ecclayout_ecc - Default ooblayout_ecc iterator implementation
- * @mtd: MTD device structure
- * @section: ECC section. Depending on the layout you may have all the ECC
- * bytes stored in a single contiguous section, or one section
- * per ECC chunk (and sometime several sections for a single ECC
- * ECC chunk)
- * @oobecc: OOB region struct filled with the appropriate ECC position
- * information
- *
- * This function is just a wrapper around the mtd->ecclayout field and is
- * here to ease the transition to the mtd_ooblayout_ops approach.
- * All it does is convert the layout->eccpos information into proper oob
- * region definitions.
- *
- * Returns zero on success, a negative error code otherwise.
- */
-static int mtd_ecclayout_ecc(struct mtd_info *mtd, int section,
- struct mtd_oob_region *oobecc)
-{
- int eccbyte = 0, cursection = 0, length = 0, eccpos = 0;
-
- if (!mtd->ecclayout)
- return -ENOTSUPP;
-
- /*
- * This logic allows us to reuse the ->ecclayout information and
- * expose them as ECC regions (as done for the OOB free regions).
- *
- * TODO: this should be dropped as soon as we get rid of the
- * ->ecclayout field.
- */
- for (eccbyte = 0; eccbyte < mtd->ecclayout->eccbytes; eccbyte++) {
- eccpos = mtd->ecclayout->eccpos[eccbyte];
-
- if (eccbyte < mtd->ecclayout->eccbytes - 1) {
- int neccpos = mtd->ecclayout->eccpos[eccbyte + 1];
-
- if (eccpos + 1 == neccpos) {
- length++;
- continue;
- }
- }
-
- if (section == cursection)
- break;
-
- length = 0;
- cursection++;
- }
-
- if (cursection != section || eccbyte >= mtd->ecclayout->eccbytes)
- return -ERANGE;
-
- oobecc->length = length + 1;
- oobecc->offset = eccpos - length;
-
- return 0;
-}
-
-/**
- * mtd_ecclayout_ecc - Default ooblayout_free iterator implementation
- * @mtd: MTD device structure
- * @section: Free section. Depending on the layout you may have all the free
- * bytes stored in a single contiguous section, or one section
- * per ECC chunk (and sometime several sections for a single ECC
- * ECC chunk)
- * @oobfree: OOB region struct filled with the appropriate free position
- * information
- *
- * This function is just a wrapper around the mtd->ecclayout field and is
- * here to ease the transition to the mtd_ooblayout_ops approach.
- * All it does is convert the layout->oobfree information into proper oob
- * region definitions.
- *
- * Returns zero on success, a negative error code otherwise.
- */
-static int mtd_ecclayout_free(struct mtd_info *mtd, int section,
- struct mtd_oob_region *oobfree)
-{
- struct nand_ecclayout *layout = mtd->ecclayout;
-
- if (!layout)
- return -ENOTSUPP;
-
- if (section >= MTD_MAX_OOBFREE_ENTRIES_LARGE ||
- !layout->oobfree[section].length)
- return -ERANGE;
-
- oobfree->offset = layout->oobfree[section].offset;
- oobfree->length = layout->oobfree[section].length;
-
- return 0;
-}
-
-static const struct mtd_ooblayout_ops mtd_ecclayout_wrapper_ops = {
- .ecc = mtd_ecclayout_ecc,
- .free = mtd_ecclayout_free,
-};
-
-/**
- * mtd_set_ecclayout - Attach an ecclayout to an MTD device
- * @mtd: MTD device structure
- * @ecclayout: The ecclayout to attach to the device
- *
- * Returns zero on success, a negative error code otherwise.
- */
-void mtd_set_ecclayout(struct mtd_info *mtd, struct nand_ecclayout *ecclayout)
-{
- if (!mtd || !ecclayout)
- return;
-
- mtd->ecclayout = ecclayout;
- mtd_set_ooblayout(mtd, &mtd_ecclayout_wrapper_ops);
-}
-EXPORT_SYMBOL_GPL(mtd_set_ecclayout);
-
/*
* Method to access the protection register area, present in some flash
* devices. The user data is one time programmable but the factory data is read