/*
* YAFFS: Yet Another Flash File System. A NAND-flash specific file system.
*
- * Copyright (C) 2002-2007 Aleph One Ltd.
+ * Copyright (C) 2002-2010 Aleph One Ltd.
* for Toby Churchill Ltd and Brightstar Engineering
*
* Created by Charles Manning <charles@aleph1.co.uk>
/* mtd interface for YAFFS2 */
-const char *yaffs_mtdif2_c_version =
- "$Id: yaffs_mtdif2.c,v 1.27 2010-02-18 01:18:04 charles Exp $";
-
#include "yportenv.h"
#include "yaffs_trace.h"
const __u8 *data,
const yaffs_ExtendedTags *tags)
{
- struct mtd_info *mtd = yaffs_DeviceToContext(dev)->mtd;
+ struct mtd_info *mtd = yaffs_DeviceToMtd(dev);
#if (MTD_VERSION_CODE > MTD_VERSION(2, 6, 17))
struct mtd_oob_ops ops;
#else
int nandmtd2_ReadChunkWithTagsFromNAND(yaffs_Device *dev, int chunkInNAND,
__u8 *data, yaffs_ExtendedTags *tags)
{
- struct mtd_info *mtd = yaffs_DeviceToContext(dev)->mtd;
+ struct mtd_info *mtd = yaffs_DeviceToMtd(dev);
#if (MTD_VERSION_CODE > MTD_VERSION(2, 6, 17))
struct mtd_oob_ops ops;
#endif
ops.len = data ? dev->nDataBytesPerChunk : packed_tags_size;
ops.ooboffs = 0;
ops.datbuf = data;
- ops.oobbuf = yaffs_DeviceToContext(dev)->spareBuffer;
+ ops.oobbuf = yaffs_DeviceToLC(dev)->spareBuffer;
retval = mtd->read_oob(mtd, addr, &ops);
}
#else
}
} else {
if (tags) {
- memcpy(packed_tags_ptr, yaffs_DeviceToContext(dev)->spareBuffer, packed_tags_size);
+ memcpy(packed_tags_ptr, yaffs_DeviceToLC(dev)->spareBuffer, packed_tags_size);
yaffs_UnpackTags2(tags, &pt, !dev->param.noTagsECC);
}
}
if (localData)
yaffs_ReleaseTempBuffer(dev, data, __LINE__);
- if (tags && retval == -EBADMSG && tags->eccResult == YAFFS_ECC_RESULT_NO_ERROR)
+ if (tags && retval == -EBADMSG && tags->eccResult == YAFFS_ECC_RESULT_NO_ERROR) {
tags->eccResult = YAFFS_ECC_RESULT_UNFIXED;
+ dev->eccUnfixed++;
+ }
+ if(tags && retval == -EUCLEAN && tags->eccResult == YAFFS_ECC_RESULT_NO_ERROR) {
+ tags->eccResult = YAFFS_ECC_RESULT_FIXED;
+ dev->eccFixed++;
+ }
if (retval == 0)
return YAFFS_OK;
else
int nandmtd2_MarkNANDBlockBad(struct yaffs_DeviceStruct *dev, int blockNo)
{
- struct mtd_info *mtd = yaffs_DeviceToContext(dev)->mtd;
+ struct mtd_info *mtd = yaffs_DeviceToMtd(dev);
int retval;
T(YAFFS_TRACE_MTD,
(TSTR("nandmtd2_MarkNANDBlockBad %d" TENDSTR), blockNo));
int nandmtd2_QueryNANDBlock(struct yaffs_DeviceStruct *dev, int blockNo,
yaffs_BlockState *state, __u32 *sequenceNumber)
{
- struct mtd_info *mtd = yaffs_DeviceToContext(dev)->mtd;
+ struct mtd_info *mtd = yaffs_DeviceToMtd(dev);
int retval;
T(YAFFS_TRACE_MTD,