Blame view
fs/yaffs2/yaffs_nand.c
2.94 KB
0e8cc8bd9 YAFFS2 import |
1 2 3 |
/* * YAFFS: Yet Another Flash File System. A NAND-flash specific file system. * |
753ac6108 u-boot: Update ya... |
4 |
* Copyright (C) 2002-2011 Aleph One Ltd. |
0e8cc8bd9 YAFFS2 import |
5 6 7 8 9 10 11 12 |
* for Toby Churchill Ltd and Brightstar Engineering * * Created by Charles Manning <charles@aleph1.co.uk> * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2 as * published by the Free Software Foundation. */ |
4b0708093 Coding Style clea... |
13 |
|
0e8cc8bd9 YAFFS2 import |
14 15 |
#include "yaffs_nand.h" #include "yaffs_tagscompat.h" |
0e8cc8bd9 YAFFS2 import |
16 |
|
753ac6108 u-boot: Update ya... |
17 18 |
#include "yaffs_getblockinfo.h" #include "yaffs_summary.h" |
0e8cc8bd9 YAFFS2 import |
19 |
|
753ac6108 u-boot: Update ya... |
20 21 |
int yaffs_rd_chunk_tags_nand(struct yaffs_dev *dev, int nand_chunk, u8 *buffer, struct yaffs_ext_tags *tags) |
0e8cc8bd9 YAFFS2 import |
22 23 |
{ int result; |
753ac6108 u-boot: Update ya... |
24 25 |
struct yaffs_ext_tags local_tags; int flash_chunk = nand_chunk - dev->chunk_offset; |
4b0708093 Coding Style clea... |
26 |
|
753ac6108 u-boot: Update ya... |
27 |
dev->n_page_reads++; |
4b0708093 Coding Style clea... |
28 |
|
753ac6108 u-boot: Update ya... |
29 30 31 |
/* If there are no tags provided use local tags. */ if (!tags) tags = &local_tags; |
0e8cc8bd9 YAFFS2 import |
32 |
|
753ac6108 u-boot: Update ya... |
33 34 35 36 |
if (dev->param.read_chunk_tags_fn) result = dev->param.read_chunk_tags_fn(dev, flash_chunk, buffer, tags); |
0e8cc8bd9 YAFFS2 import |
37 |
else |
753ac6108 u-boot: Update ya... |
38 39 40 41 42 43 44 45 46 |
result = yaffs_tags_compat_rd(dev, flash_chunk, buffer, tags); if (tags && tags->ecc_result > YAFFS_ECC_RESULT_NO_ERROR) { struct yaffs_block_info *bi; bi = yaffs_get_block_info(dev, nand_chunk / dev->param.chunks_per_block); yaffs_handle_chunk_error(dev, bi); |
0e8cc8bd9 YAFFS2 import |
47 |
} |
0e8cc8bd9 YAFFS2 import |
48 49 |
return result; } |
753ac6108 u-boot: Update ya... |
50 51 52 |
int yaffs_wr_chunk_tags_nand(struct yaffs_dev *dev, int nand_chunk, const u8 *buffer, struct yaffs_ext_tags *tags) |
0e8cc8bd9 YAFFS2 import |
53 |
{ |
753ac6108 u-boot: Update ya... |
54 55 |
int result; int flash_chunk = nand_chunk - dev->chunk_offset; |
0e8cc8bd9 YAFFS2 import |
56 |
|
753ac6108 u-boot: Update ya... |
57 |
dev->n_page_writes++; |
4b0708093 Coding Style clea... |
58 |
|
0e8cc8bd9 YAFFS2 import |
59 |
if (tags) { |
753ac6108 u-boot: Update ya... |
60 61 62 63 64 |
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); |
0e8cc8bd9 YAFFS2 import |
65 |
} else { |
753ac6108 u-boot: Update ya... |
66 67 68 |
yaffs_trace(YAFFS_TRACE_ERROR, "Writing with no tags"); BUG(); return YAFFS_FAIL; |
0e8cc8bd9 YAFFS2 import |
69 |
} |
753ac6108 u-boot: Update ya... |
70 71 72 |
if (dev->param.write_chunk_tags_fn) result = dev->param.write_chunk_tags_fn(dev, flash_chunk, buffer, tags); |
0e8cc8bd9 YAFFS2 import |
73 |
else |
753ac6108 u-boot: Update ya... |
74 75 76 77 78 |
result = yaffs_tags_compat_wr(dev, flash_chunk, buffer, tags); yaffs_summary_add(dev, tags, nand_chunk); return result; |
0e8cc8bd9 YAFFS2 import |
79 |
} |
753ac6108 u-boot: Update ya... |
80 |
int yaffs_mark_bad(struct yaffs_dev *dev, int block_no) |
0e8cc8bd9 YAFFS2 import |
81 |
{ |
753ac6108 u-boot: Update ya... |
82 83 84 |
block_no -= dev->block_offset; if (dev->param.bad_block_fn) return dev->param.bad_block_fn(dev, block_no); |
0e8cc8bd9 YAFFS2 import |
85 |
|
753ac6108 u-boot: Update ya... |
86 |
return yaffs_tags_compat_mark_bad(dev, block_no); |
0e8cc8bd9 YAFFS2 import |
87 |
} |
753ac6108 u-boot: Update ya... |
88 89 90 91 |
int yaffs_query_init_block_state(struct yaffs_dev *dev, int block_no, enum yaffs_block_state *state, u32 *seq_number) |
0e8cc8bd9 YAFFS2 import |
92 |
{ |
753ac6108 u-boot: Update ya... |
93 94 95 96 |
block_no -= dev->block_offset; if (dev->param.query_block_fn) return dev->param.query_block_fn(dev, block_no, state, seq_number); |
0e8cc8bd9 YAFFS2 import |
97 |
|
753ac6108 u-boot: Update ya... |
98 |
return yaffs_tags_compat_query_block(dev, block_no, state, seq_number); |
0e8cc8bd9 YAFFS2 import |
99 |
} |
753ac6108 u-boot: Update ya... |
100 |
int yaffs_erase_block(struct yaffs_dev *dev, int flash_block) |
0e8cc8bd9 YAFFS2 import |
101 102 |
{ int result; |
753ac6108 u-boot: Update ya... |
103 104 105 |
flash_block -= dev->block_offset; dev->n_erasures++; result = dev->param.erase_fn(dev, flash_block); |
0e8cc8bd9 YAFFS2 import |
106 107 |
return result; } |
753ac6108 u-boot: Update ya... |
108 |
int yaffs_init_nand(struct yaffs_dev *dev) |
0e8cc8bd9 YAFFS2 import |
109 |
{ |
753ac6108 u-boot: Update ya... |
110 111 112 |
if (dev->param.initialise_flash_fn) return dev->param.initialise_flash_fn(dev); return YAFFS_OK; |
0e8cc8bd9 YAFFS2 import |
113 |
} |