X-Git-Url: http://www.aleph1.co.uk/gitweb/?p=yaffs2.git;a=blobdiff_plain;f=yaffs_nand.c;h=4c1993bb7d2eed23c54e38ded284c062f93dc29e;hp=165d01004d6efde447d4b88a42f38c74dafa5fed;hb=e81a96058aa89f6812e3c5224e26b4b44da3c143;hpb=c4e8d85455d0acf2a3da23c20cd2db66d30caf1b diff --git a/yaffs_nand.c b/yaffs_nand.c index 165d010..4c1993b 100644 --- a/yaffs_nand.c +++ b/yaffs_nand.c @@ -17,12 +17,17 @@ #include "yaffs_getblockinfo.h" #include "yaffs_summary.h" +static int apply_chunk_offset(struct yaffs_dev *dev, int chunk) +{ + return chunk - dev->chunk_offset; +} + int yaffs_rd_chunk_tags_nand(struct yaffs_dev *dev, int nand_chunk, u8 *buffer, struct yaffs_ext_tags *tags) { int result; struct yaffs_ext_tags local_tags; - int flash_chunk = nand_chunk - dev->chunk_offset; + int flash_chunk = apply_chunk_offset(dev, nand_chunk); dev->n_page_reads++; @@ -30,13 +35,7 @@ int yaffs_rd_chunk_tags_nand(struct yaffs_dev *dev, int nand_chunk, if (!tags) tags = &local_tags; - if (dev->param.read_chunk_tags_fn) - result = - dev->param.read_chunk_tags_fn(dev, flash_chunk, buffer, - tags); - else - result = yaffs_tags_compat_rd(dev, - flash_chunk, buffer, tags); + result = dev->param.read_chunk_tags_fn(dev, flash_chunk, buffer, tags); if (tags && tags->ecc_result > YAFFS_ECC_RESULT_NO_ERROR) { struct yaffs_block_info *bi; @@ -53,27 +52,24 @@ int yaffs_wr_chunk_tags_nand(struct yaffs_dev *dev, const u8 *buffer, struct yaffs_ext_tags *tags) { int result; - int flash_chunk = nand_chunk - dev->chunk_offset; + int flash_chunk = apply_chunk_offset(dev, nand_chunk); dev->n_page_writes++; - if (tags) { - tags->seq_number = dev->seq_number; - tags->chunk_used = 1; - yaffs_trace(YAFFS_TRACE_WRITE, - "Writing chunk %d tags %d %d", - nand_chunk, tags->obj_id, tags->chunk_id); - } else { + if (!tags) { yaffs_trace(YAFFS_TRACE_ERROR, "Writing with no tags"); BUG(); return YAFFS_FAIL; } - if (dev->param.write_chunk_tags_fn) - result = dev->param.write_chunk_tags_fn(dev, flash_chunk, + tags->seq_number = dev->seq_number; + tags->chunk_used = 1; + yaffs_trace(YAFFS_TRACE_WRITE, + "Writing chunk %d tags %d %d", + nand_chunk, tags->obj_id, tags->chunk_id); + + result = dev->param.write_chunk_tags_fn(dev, flash_chunk, buffer, tags); - else - result = yaffs_tags_compat_wr(dev, flash_chunk, buffer, tags); yaffs_summary_add(dev, tags, nand_chunk); @@ -83,38 +79,33 @@ int yaffs_wr_chunk_tags_nand(struct yaffs_dev *dev, int yaffs_mark_bad(struct yaffs_dev *dev, int block_no) { block_no -= dev->block_offset; - if (dev->param.bad_block_fn) - return dev->param.bad_block_fn(dev, block_no); - - return yaffs_tags_compat_mark_bad(dev, block_no); + dev->n_bad_markings++; + return dev->param.mark_bad_fn(dev, block_no); } + int yaffs_query_init_block_state(struct yaffs_dev *dev, int block_no, enum yaffs_block_state *state, u32 *seq_number) { block_no -= dev->block_offset; - if (dev->param.query_block_fn) - return dev->param.query_block_fn(dev, block_no, state, - seq_number); - - return yaffs_tags_compat_query_block(dev, block_no, state, seq_number); + return dev->param.query_block_fn(dev, block_no, state, seq_number); } -int yaffs_erase_block(struct yaffs_dev *dev, int flash_block) +int yaffs_erase_block(struct yaffs_dev *dev, int block_no) { int result; - flash_block -= dev->block_offset; + block_no -= dev->block_offset; dev->n_erasures++; - result = dev->param.erase_fn(dev, flash_block); + result = dev->param.drv_erase_fn(dev, block_no); return result; } int yaffs_init_nand(struct yaffs_dev *dev) { - if (dev->param.initialise_flash_fn) - return dev->param.initialise_flash_fn(dev); + if (dev->param.drv_initialise_fn) + return dev->param.drv_initialise_fn(dev); return YAFFS_OK; }