int nandmtd2_QueryNANDBlock(struct yaffs_DeviceStruct *dev, int blockNo, yaffs_BlockState * state, __u32 *sequenceNumber) { #if NAND_DRIVER_BBM #else struct mtd_info *mtd = (struct mtd_info *)(dev->genericDevice); #endif int retval; T(YAFFS_TRACE_MTD, (TSTR("nandmtd2_QueryNANDBlock %d" TENDSTR), blockNo)); #if NAND_DRIVER_BBM retval = 0; #else retval = mtd->block_isbad(mtd, blockNo * dev->nChunksPerBlock * dev->totalBytesPerChunk); #endif if (retval) { T(YAFFS_TRACE_MTD, (TSTR("block is bad" TENDSTR))); *state = YAFFS_BLOCK_STATE_DEAD; *sequenceNumber = 0; } else { yaffs_ExtendedTags t; nandmtd2_ReadChunkWithTagsFromNAND(dev, blockNo * dev->nChunksPerBlock, NULL, &t); if (t.chunkUsed) { *sequenceNumber = t.sequenceNumber; *state = YAFFS_BLOCK_STATE_NEEDS_SCANNING; } else { *sequenceNumber = 0; *state = YAFFS_BLOCK_STATE_EMPTY; } } T(YAFFS_TRACE_MTD, (TSTR("block is bad seq %d state %d" TENDSTR), *sequenceNumber, *state)); if (retval == 0) return YAFFS_OK; else return YAFFS_FAIL; }
int nandmtd2_QueryNANDBlock(struct yaffs_dev_s *dev, int block_no, yaffs_block_state_t *state, __u32 *seq_number) { struct mtd_info *mtd = yaffs_dev_to_mtd(dev); int retval; T(YAFFS_TRACE_MTD, (TSTR("nandmtd2_QueryNANDBlock %d" TENDSTR), block_no)); retval = mtd->block_isbad(mtd, block_no * dev->param.chunks_per_block * dev->param.total_bytes_per_chunk); if (retval) { T(YAFFS_TRACE_MTD, (TSTR("block is bad" TENDSTR))); *state = YAFFS_BLOCK_STATE_DEAD; *seq_number = 0; } else { yaffs_ext_tags t; nandmtd2_ReadChunkWithTagsFromNAND(dev, block_no * dev->param.chunks_per_block, NULL, &t); if (t.chunk_used) { *seq_number = t.seq_number; *state = YAFFS_BLOCK_STATE_NEEDS_SCANNING; } else { *seq_number = 0; *state = YAFFS_BLOCK_STATE_EMPTY; } } T(YAFFS_TRACE_MTD, (TSTR("block is bad seq %d state %d" TENDSTR), *seq_number, *state)); if (retval == 0) return YAFFS_OK; else return YAFFS_FAIL; }