[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: Thomas Gleixner <tglx@linutronix.de>
This commit is contained in:
Родитель
8be834f762
Коммит
ff268fb879
|
@ -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
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
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,
|
||||||
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,
|
||||||
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)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* 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)
|
||||||
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)
|
||||||
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 = {
|
||||||
|
|
||||||
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 {
|
||||||
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.
|
||||||
|
|
Загрузка…
Ссылка в новой задаче