- struct mtd_info *mtd = (struct mtd_info *)(dev->genericDevice);
- size_t dummy;
- int retval = 0;
-
- loff_t addr = ((loff_t)chunkInNAND) * dev->nBytesPerChunk;
-
- __u8 *spareAsBytes = (__u8 *)spare;
-
- if(data && spare)
- {
- if(dev->useNANDECC)
- mtd->write_ecc(mtd,addr,dev->nBytesPerChunk,&dummy,data,spareAsBytes,&yaffs_oobinfo);
- else
- mtd->write_ecc(mtd,addr,dev->nBytesPerChunk,&dummy,data,spareAsBytes,&yaffs_noeccinfo);
- }
- else
- {
- if(data)
- retval = mtd->write(mtd,addr,dev->nBytesPerChunk,&dummy,data);
- if(spare)
- retval = mtd->write_oob(mtd,addr,YAFFS_BYTES_PER_SPARE,&dummy,spareAsBytes);
- }
-
- if (retval == 0)
- return YAFFS_OK;
- else
- return YAFFS_FAIL;
-}
-
-int nandmtd_ReadChunkFromNAND(yaffs_Device *dev,int chunkInNAND, __u8 *data, yaffs_Spare *spare)
-{
- struct mtd_info *mtd = (struct mtd_info *)(dev->genericDevice);
- size_t dummy;
- int retval = 0;
-
- loff_t addr = ((loff_t)chunkInNAND) * dev->nBytesPerChunk;
-
- __u8 *spareAsBytes = (__u8 *)spare;
-
- if(data && spare)
- {
- if(dev->useNANDECC)
- { // Careful, this call adds 2 ints to the end of the spare data. Calling function should
- // allocate enough memory for spare, i.e. [YAFFS_BYTES_PER_SPARE+2*sizeof(int)].
- retval = mtd->read_ecc(mtd,addr,dev->nBytesPerChunk,&dummy,data,spareAsBytes,&yaffs_oobinfo);
- }
- else
- {
- retval = mtd->read_ecc(mtd,addr,dev->nBytesPerChunk,&dummy,data,spareAsBytes,&yaffs_noeccinfo);
- }
- }
- else
- {
- if(data)
- retval = mtd->read(mtd,addr,dev->nBytesPerChunk,&dummy,data);
- if(spare)
- retval = mtd->read_oob(mtd,addr,YAFFS_BYTES_PER_SPARE,&dummy,spareAsBytes);
- }
-
- if (retval == 0)
- return YAFFS_OK;
- else
- return YAFFS_FAIL;
-}
-
-// Callback not needed for NAND
-#if 0
-static void nandmtd_EraseCallback(struct erase_info *ei)
-{
- yaffs_Device *dev = (yaffs_Device *)ei->priv;
- up(&dev->sem);
-}
-#endif
-
-
-int nandmtd_EraseBlockInNAND(yaffs_Device *dev, int blockNumber)
-{
- struct mtd_info *mtd = (struct mtd_info *)(dev->genericDevice);
- __u32 addr = ((loff_t) blockNumber) * dev->nBytesPerChunk * dev->nChunksPerBlock;