mtd/drivers/mtd mtdpart.c,1.28,1.29
gleixner at infradead.org
gleixner at infradead.org
Thu Aug 29 17:46:46 EDT 2002
Update of /home/cvs/mtd/drivers/mtd
In directory phoenix.infradead.org:/tmp/cvs-serv16674
Modified Files:
mtdpart.c
Log Message:
ecc functions added
Index: mtdpart.c
===================================================================
RCS file: /home/cvs/mtd/drivers/mtd/mtdpart.c,v
retrieving revision 1.28
retrieving revision 1.29
diff -u -r1.28 -r1.29
--- mtdpart.c 10 Jul 2002 08:27:09 -0000 1.28
+++ mtdpart.c 29 Aug 2002 21:46:43 -0000 1.29
@@ -58,6 +58,18 @@
len, retlen, buf);
}
+static int part_read_ecc (struct mtd_info *mtd, loff_t from, size_t len,
+ size_t *retlen, u_char *buf, u_char *eccbuf, int oobsel)
+{
+ struct mtd_part *part = PART(mtd);
+ if (from >= mtd->size)
+ len = 0;
+ else if (from + len > mtd->size)
+ len = mtd->size - from;
+ return part->master->read_ecc (part->master, from + part->offset,
+ len, retlen, buf, eccbuf, oobsel);
+}
+
static int part_read_oob (struct mtd_info *mtd, loff_t from, size_t len,
size_t *retlen, u_char *buf)
{
@@ -100,6 +112,21 @@
len, retlen, buf);
}
+static int part_write_ecc (struct mtd_info *mtd, loff_t to, size_t len,
+ size_t *retlen, const u_char *buf,
+ u_char *eccbuf, int oobsel)
+{
+ struct mtd_part *part = PART(mtd);
+ if (!(mtd->flags & MTD_WRITEABLE))
+ return -EROFS;
+ if (to >= mtd->size)
+ len = 0;
+ else if (to + len > mtd->size)
+ len = mtd->size - to;
+ return part->master->write_ecc (part->master, to + part->offset,
+ len, retlen, buf, eccbuf, oobsel);
+}
+
static int part_write_oob (struct mtd_info *mtd, loff_t to, size_t len,
size_t *retlen, const u_char *buf)
{
@@ -140,6 +167,28 @@
from + part->offset, retlen);
}
+static int part_writev_ecc (struct mtd_info *mtd, const struct iovec *vecs,
+ unsigned long count, loff_t to, size_t *retlen,
+ u_char *eccbuf, int oobsel)
+{
+ struct mtd_part *part = PART(mtd);
+ if (!(mtd->flags & MTD_WRITEABLE))
+ return -EROFS;
+ return part->master->writev_ecc (part->master, vecs, count,
+ to + part->offset, retlen,
+ eccbuf, oobsel);
+}
+
+static int part_readv_ecc (struct mtd_info *mtd, struct iovec *vecs,
+ unsigned long count, loff_t from, size_t *retlen,
+ u_char *eccbuf, int oobsel)
+{
+ struct mtd_part *part = PART(mtd);
+ return part->master->readv_ecc (part->master, vecs, count,
+ from + part->offset, retlen,
+ eccbuf, oobsel);
+}
+
static int part_erase (struct mtd_info *mtd, struct erase_info *instr)
{
struct mtd_part *part = PART(mtd);
@@ -257,7 +306,11 @@
slave->mtd.read = part_read;
slave->mtd.write = part_write;
-
+
+ if (master->read_ecc)
+ slave->mtd.read_ecc = part_read_ecc;
+ if (master->write_ecc)
+ slave->mtd.write_ecc = part_write_ecc;
if (master->read_oob)
slave->mtd.read_oob = part_read_oob;
if (master->write_oob)
@@ -278,6 +331,10 @@
slave->mtd.writev = part_writev;
if (master->readv)
slave->mtd.readv = part_readv;
+ if (master->writev_ecc)
+ slave->mtd.writev_ecc = part_writev_ecc;
+ if (master->readv_ecc)
+ slave->mtd.readv_ecc = part_readv_ecc;
if (master->lock)
slave->mtd.lock = part_lock;
if (master->unlock)
More information about the linux-mtd-cvs
mailing list