int nandmtd2_WriteChunkWithTagsToNAND(yaffs_Device * dev, int chunkInNAND, const __u8 * data, const yaffs_ExtendedTags * tags) { struct mtd_info *mtd = (struct mtd_info *)(dev->genericDevice); #if (LINUX_VERSION_CODE > KERNEL_VERSION(2,6,17)) struct mtd_oob_ops ops; #else size_t dummy; #endif int retval = 0; loff_t addr = ((loff_t) chunkInNAND) * dev->nDataBytesPerChunk; yaffs_PackedTags2 pt; T(YAFFS_TRACE_MTD, (TSTR ("nandmtd2_WriteChunkWithTagsToNAND chunk %d data %p tags %p" TENDSTR), chunkInNAND, data, tags)); #if (LINUX_VERSION_CODE > KERNEL_VERSION(2,6,17)) if (tags) yaffs_PackTags2(&pt, tags); else BUG(); nandmtd2_pt2buf(dev, &pt, 1); if (data) { ops.mode = MTD_OOB_AUTO; ops.ooblen = mtd->oobsize; ops.len = dev->nDataBytesPerChunk; ops.ooboffs = 0; ops.datbuf = (__u8 *)data; ops.oobbuf = dev->spareBuffer; retval = mtd->write_oob(mtd, addr, &ops); } else BUG(); #else if (tags) { yaffs_PackTags2(&pt, tags); } if (tags) { nandmtd2_pt2buf(dev, &pt, 1); retval = mtd->write_ecc(mtd, addr, dev->nDataBytesPerChunk, &dummy, data, dev->spareBuffer, NULL); } else if (data) { retval = mtd->write(mtd, addr, dev->nDataBytesPerChunk, &dummy, data); } #endif if (retval == 0) return YAFFS_OK; else return YAFFS_FAIL; }
int nandmtd2_WriteChunkWithTagsToNAND(yaffs_Device * dev, int chunkInNAND, const __u8 * data, const yaffs_ExtendedTags * tags) { struct mtd_info *mtd = (struct mtd_info *)(dev->genericDevice); size_t dummy; int retval = 0; loff_t addr = ((loff_t) chunkInNAND) * dev->nBytesPerChunk; yaffs_PackedTags2 pt; T(YAFFS_TRACE_MTD, (TSTR ("nandmtd2_WriteChunkWithTagsToNAND chunk %d data %p tags %p" TENDSTR), chunkInNAND, data, tags)); if (tags) { yaffs_PackTags2(&pt, tags); } if (data && tags) { nandmtd2_pt2buf(dev, &pt, 0); retval = mtd->write_ecc(mtd, addr, dev->nBytesPerChunk, &dummy, data, dev->spareBuffer, NULL); } else { T(YAFFS_TRACE_ALWAYS, (TSTR ("Write chunk with null tags or data!" TENDSTR))); YBUG(); } if (retval == 0) return YAFFS_OK; else return YAFFS_FAIL; }