Mercurial > yaffs-ecoscentric
comparison packages/fs/yaffs/current/src/ecos-yaffs-nand.c @ 311:16de60f90faa
ecos-yaffs-nand.c: Correctly use ECC on YAFFS tags in yaffs2
| author | wry |
|---|---|
| date | Fri, 18 Sep 2009 11:13:00 +0000 |
| parents | 9c8ff034abb0 |
| children | 8e1210f7946a |
comparison
equal
deleted
inserted
replaced
| 310:a097a8d2aa15 | 311:16de60f90faa |
|---|---|
| 71 cyg_nand_partition *part = (cyg_nand_partition*) dev->genericDevice; | 71 cyg_nand_partition *part = (cyg_nand_partition*) dev->genericDevice; |
| 72 int rv = cyg_nand_erase_block(part, blockInNAND); | 72 int rv = cyg_nand_erase_block(part, blockInNAND); |
| 73 return rv==0 ? YAFFS_OK : YAFFS_FAIL; | 73 return rv==0 ? YAFFS_OK : YAFFS_FAIL; |
| 74 } | 74 } |
| 75 | 75 |
| 76 // If writing a yaffs_PackedTags1, we store only its eight meaningful bytes | |
| 77 #define PACKEDTAGS1_OOBSIZE 8 | |
| 78 | |
| 79 int eyaffs_writeChunkWithTagsToNAND (struct yaffs_DeviceStruct * dev, | 76 int eyaffs_writeChunkWithTagsToNAND (struct yaffs_DeviceStruct * dev, |
| 80 int chunkInNAND, const __u8 * data, | 77 int chunkInNAND, const __u8 * data, |
| 81 const yaffs_ExtendedTags * tags) | 78 const yaffs_ExtendedTags * tags) |
| 82 { | 79 { |
| 83 cyg_nand_partition *part = (cyg_nand_partition*) dev->genericDevice; | 80 cyg_nand_partition *part = (cyg_nand_partition*) dev->genericDevice; |
| 118 yaffs_PackedTags2TagsPart *pt2tp; | 115 yaffs_PackedTags2TagsPart *pt2tp; |
| 119 pt2tp = (yaffs_PackedTags2TagsPart *)(data + dev->nDataBytesPerChunk); | 116 pt2tp = (yaffs_PackedTags2TagsPart *)(data + dev->nDataBytesPerChunk); |
| 120 yaffs_PackTags2TagsPart(pt2tp, tags); | 117 yaffs_PackTags2TagsPart(pt2tp, tags); |
| 121 rv = cyg_nand_write_page(part, chunkInNAND, data, dev->totalBytesPerChunk, 0, 0); | 118 rv = cyg_nand_write_page(part, chunkInNAND, data, dev->totalBytesPerChunk, 0, 0); |
| 122 } else { | 119 } else { |
| 123 yaffs_PackedTags2TagsPart pt; | 120 yaffs_PackedTags2 pt; |
| 124 yaffs_PackTags2TagsPart(&pt, tags); | 121 yaffs_PackTags2(&pt, tags); |
| 125 rv = cyg_nand_write_page(part, chunkInNAND, data, dev->nDataBytesPerChunk, &pt, sizeof(yaffs_PackedTags2TagsPart)); | 122 rv = cyg_nand_write_page(part, chunkInNAND, data, dev->nDataBytesPerChunk, &pt, PACKEDTAGS2_OOBSIZE); |
| 126 } | 123 } |
| 127 #endif | 124 #endif |
| 128 } | 125 } |
| 129 | 126 |
| 130 // all done: | 127 // all done: |
| 202 yaffs_PackedTags2TagsPart *pt2tp; | 199 yaffs_PackedTags2TagsPart *pt2tp; |
| 203 pt2tp = (yaffs_PackedTags2TagsPart *)&data[dev->nDataBytesPerChunk]; | 200 pt2tp = (yaffs_PackedTags2TagsPart *)&data[dev->nDataBytesPerChunk]; |
| 204 yaffs_UnpackTags2TagsPart(tags, pt2tp); | 201 yaffs_UnpackTags2TagsPart(tags, pt2tp); |
| 205 } | 202 } |
| 206 } else { | 203 } else { |
| 207 yaffs_PackedTags2TagsPart pt; | 204 yaffs_PackedTags2 pt; |
| 208 rv = cyg_nand_read_page(part, chunkInNAND, data, data ? dev->nDataBytesPerChunk : 0, &pt, sizeof(yaffs_PackedTags2TagsPart)); | 205 rv = cyg_nand_read_page(part, chunkInNAND, data, data ? dev->nDataBytesPerChunk : 0, &pt, tags ? PACKEDTAGS2_OOBSIZE : 0); |
| 209 if (tags) | 206 if (tags) |
| 210 yaffs_UnpackTags2TagsPart(tags, &pt); | 207 yaffs_UnpackTags2(tags, &pt); |
| 211 } | 208 } |
| 212 #endif | 209 #endif |
| 213 } | 210 } |
| 214 | 211 |
| 215 // all done: | 212 // all done: |
