Commit ff268fb8 authored by Thomas Gleixner's avatar Thomas Gleixner

[MTD] NAND Consolidate oobinfo handling

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: default avatarThomas Gleixner <tglx@linutronix.de>
parent 8be834f7
...@@ -512,16 +512,10 @@ static int mtd_ioctl(struct inode *inode, struct file *file, ...@@ -512,16 +512,10 @@ static int mtd_ioctl(struct inode *inode, struct file *file,
break; break;
} }
case MEMSETOOBSEL:
{
if (copy_from_user(&mtd->oobinfo, argp, sizeof(struct nand_oobinfo)))
return -EFAULT;
break;
}
case MEMGETOOBSEL: 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; return -EFAULT;
break; break;
} }
......
...@@ -766,9 +766,7 @@ struct mtd_info *mtd_concat_create(struct mtd_info *subdev[], /* subdevices to c ...@@ -766,9 +766,7 @@ struct mtd_info *mtd_concat_create(struct mtd_info *subdev[], /* subdevices to c
} }
if(concat->mtd.type == MTD_NANDFLASH) concat->mtd.oobinfo = subdev[0]->oobinfo;
memcpy(&concat->mtd.oobinfo, &subdev[0]->oobinfo,
sizeof(struct nand_oobinfo));
concat->num_subdev = num_devs; concat->num_subdev = num_devs;
concat->mtd.name = name; concat->mtd.name = name;
......
...@@ -316,7 +316,6 @@ int add_mtd_partitions(struct mtd_info *master, ...@@ -316,7 +316,6 @@ int add_mtd_partitions(struct mtd_info *master,
slave->mtd.size = parts[i].size; slave->mtd.size = parts[i].size;
slave->mtd.writesize = master->writesize; slave->mtd.writesize = master->writesize;
slave->mtd.oobsize = master->oobsize; slave->mtd.oobsize = master->oobsize;
slave->mtd.oobavail = master->oobavail;
slave->mtd.ecctype = master->ecctype; slave->mtd.ecctype = master->ecctype;
slave->mtd.eccsize = master->eccsize; slave->mtd.eccsize = master->eccsize;
...@@ -435,8 +434,7 @@ int add_mtd_partitions(struct mtd_info *master, ...@@ -435,8 +434,7 @@ int add_mtd_partitions(struct mtd_info *master,
parts[i].name); parts[i].name);
} }
/* copy oobinfo from master */ slave->mtd.oobinfo = master->oobinfo;
memcpy(&slave->mtd.oobinfo, &master->oobinfo, sizeof(slave->mtd.oobinfo));
if(parts[i].mtdp) if(parts[i].mtdp)
{ /* store the object pointer (caller may or may not register it */ { /* store the object pointer (caller may or may not register it */
......
...@@ -2142,14 +2142,6 @@ int nand_scan(struct mtd_info *mtd, int maxchips) ...@@ -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 * check ECC mode, default to software if 3byte/512byte hardware ECC is
* selected and we have 256 byte pagesize fallback to software ECC * selected and we have 256 byte pagesize fallback to software ECC
...@@ -2245,7 +2237,7 @@ int nand_scan(struct mtd_info *mtd, int maxchips) ...@@ -2245,7 +2237,7 @@ int nand_scan(struct mtd_info *mtd, int maxchips)
mtd->block_markbad = nand_block_markbad; mtd->block_markbad = nand_block_markbad;
/* and make the autooob the default one */ /* 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 */ /* Check, if we should skip the bad block table scan */
if (chip->options & NAND_SKIP_BBTSCAN) if (chip->options & NAND_SKIP_BBTSCAN)
......
...@@ -1762,7 +1762,7 @@ int onenand_scan(struct mtd_info *mtd, int maxchips) ...@@ -1762,7 +1762,7 @@ int onenand_scan(struct mtd_info *mtd, int maxchips)
break; break;
} }
memcpy(&mtd->oobinfo, this->autooob, sizeof(mtd->oobinfo)); mtd->oobinfo = this->autooob;
/* Fill in remaining MTD driver data */ /* Fill in remaining MTD driver data */
mtd->type = MTD_NANDFLASH; mtd->type = MTD_NANDFLASH;
......
...@@ -1151,7 +1151,7 @@ static struct nand_oobinfo jffs2_oobinfo_docecc = { ...@@ -1151,7 +1151,7 @@ static struct nand_oobinfo jffs2_oobinfo_docecc = {
static int jffs2_nand_set_oobinfo(struct jffs2_sb_info *c) 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 */ /* Do this only, if we have an oob buffer */
if (!c->mtd->oobsize) if (!c->mtd->oobsize)
......
...@@ -101,9 +101,8 @@ struct mtd_info { ...@@ -101,9 +101,8 @@ struct mtd_info {
char *name; char *name;
int index; int index;
// oobinfo is a nand_oobinfo structure, which can be set by iotcl (MEMSETOOBINFO) /* oobinfo structure pointer - read only ! */
struct nand_oobinfo oobinfo; struct nand_oobinfo *oobinfo;
u_int32_t oobavail; // Number of bytes in OOB area available for fs
/* Data for variable erase regions. If numeraseregions is zero, /* Data for variable erase regions. If numeraseregions is zero,
* it means that the whole device has erasesize as given above. * it means that the whole device has erasesize as given above.
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment