[MTD] NAND Consolidate oobinfo handling
authorThomas Gleixner <tglx@cruncher.tec.linutronix.de>
Sat, 27 May 2006 18:36:12 +0000 (20:36 +0200)
committerThomas Gleixner <tglx@cruncher.tec.linutronix.de>
Mon, 29 May 2006 13:06:49 +0000 (15:06 +0200)
The info structure for out of band data was copied into
the mtd structure. Make it a pointer and remove the ability
to set it from userspace. The position of ecc bytes is
defined by the hardware and should not be changed by software.

Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
drivers/mtd/mtdchar.c
drivers/mtd/mtdconcat.c
drivers/mtd/mtdpart.c
drivers/mtd/nand/nand_base.c
drivers/mtd/onenand/onenand_base.c
fs/jffs2/wbuf.c
include/linux/mtd/mtd.h

index 7a7df85..608f7af 100644 (file)
@@ -512,16 +512,10 @@ static int mtd_ioctl(struct inode *inode, struct file *file,
                break;
        }
 
-       case MEMSETOOBSEL:
-       {
-               if (copy_from_user(&mtd->oobinfo, argp, sizeof(struct nand_oobinfo)))
-                       return -EFAULT;
-               break;
-       }
-
        case MEMGETOOBSEL:
        {
-               if (copy_to_user(argp, &(mtd->oobinfo), sizeof(struct nand_oobinfo)))
+               if (copy_to_user(argp, mtd->oobinfo,
+                                sizeof(struct nand_oobinfo)))
                        return -EFAULT;
                break;
        }
index 6d52137..699fce7 100644 (file)
@@ -766,9 +766,7 @@ struct mtd_info *mtd_concat_create(struct mtd_info *subdev[],       /* subdevices to c
 
        }
 
-       if(concat->mtd.type == MTD_NANDFLASH)
-               memcpy(&concat->mtd.oobinfo, &subdev[0]->oobinfo,
-                       sizeof(struct nand_oobinfo));
+       concat->mtd.oobinfo = subdev[0]->oobinfo;
 
        concat->num_subdev = num_devs;
        concat->mtd.name = name;
index a93550c..b6b2189 100644 (file)
@@ -316,7 +316,6 @@ int add_mtd_partitions(struct mtd_info *master,
                slave->mtd.size = parts[i].size;
                slave->mtd.writesize = master->writesize;
                slave->mtd.oobsize = master->oobsize;
-               slave->mtd.oobavail = master->oobavail;
                slave->mtd.ecctype = master->ecctype;
                slave->mtd.eccsize = master->eccsize;
 
@@ -435,8 +434,7 @@ int add_mtd_partitions(struct mtd_info *master,
                                parts[i].name);
                }
 
-               /* copy oobinfo from master */
-               memcpy(&slave->mtd.oobinfo, &master->oobinfo, sizeof(slave->mtd.oobinfo));
+               slave->mtd.oobinfo = master->oobinfo;
 
                if(parts[i].mtdp)
                {       /* store the object pointer (caller may or may not register it */
index 023224d..20f79fe 100644 (file)
@@ -2142,14 +2142,6 @@ int nand_scan(struct mtd_info *mtd, int maxchips)
                }
        }
 
-       /*
-        * The number of bytes available for the filesystem to place fs
-        * dependend oob data
-        */
-       mtd->oobavail = 0;
-       for (i = 0; chip->autooob->oobfree[i][1]; i++)
-               mtd->oobavail += chip->autooob->oobfree[i][1];
-
        /*
         * check ECC mode, default to software if 3byte/512byte hardware ECC is
         * selected and we have 256 byte pagesize fallback to software ECC
@@ -2245,7 +2237,7 @@ int nand_scan(struct mtd_info *mtd, int maxchips)
        mtd->block_markbad = nand_block_markbad;
 
        /* and make the autooob the default one */
-       memcpy(&mtd->oobinfo, chip->autooob, sizeof(mtd->oobinfo));
+       mtd->oobinfo = chip->autooob;
 
        /* Check, if we should skip the bad block table scan */
        if (chip->options & NAND_SKIP_BBTSCAN)
index 7a24191..b24bfa6 100644 (file)
@@ -1762,7 +1762,7 @@ int onenand_scan(struct mtd_info *mtd, int maxchips)
                break;
        }
 
-       memcpy(&mtd->oobinfo, this->autooob, sizeof(mtd->oobinfo));
+       mtd->oobinfo = this->autooob;
 
        /* Fill in remaining MTD driver data */
        mtd->type = MTD_NANDFLASH;
index 717fa2f..dc275ce 100644 (file)
@@ -1151,7 +1151,7 @@ static struct nand_oobinfo jffs2_oobinfo_docecc = {
 
 static int jffs2_nand_set_oobinfo(struct jffs2_sb_info *c)
 {
-       struct nand_oobinfo *oinfo = &c->mtd->oobinfo;
+       struct nand_oobinfo *oinfo = c->mtd->oobinfo;
 
        /* Do this only, if we have an oob buffer */
        if (!c->mtd->oobsize)
index 41a984d..8429da5 100644 (file)
@@ -101,9 +101,8 @@ struct mtd_info {
        char *name;
        int index;
 
-       // oobinfo is a nand_oobinfo structure, which can be set by iotcl (MEMSETOOBINFO)
-       struct nand_oobinfo oobinfo;
-       u_int32_t oobavail;  // Number of bytes in OOB area available for fs
+       /* oobinfo structure pointer - read only ! */
+       struct nand_oobinfo *oobinfo;
 
        /* Data for variable erase regions. If numeraseregions is zero,
         * it means that the whole device has erasesize as given above.