Mercurial > yaffs-ecoscentric
changeset 325:8e1210f7946a
Update ecos yaffs layer for the preceding merge
| author | Ross Younger <wry@ecoscentric.com> |
|---|---|
| date | Fri, 30 Oct 2009 17:18:05 +0000 |
| parents | fd6ccfd7d352 |
| children | 1c56b1df53d8 |
| files | packages/fs/yaffs/current/src/ecos-yaffs-nand.c packages/fs/yaffs/current/src/ecos-yaffs-nand.h packages/fs/yaffs/current/src/ecos-yaffs.c |
| diffstat | 3 files changed, 11 insertions(+), 7 deletions(-) [+] |
line wrap: on
line diff
--- a/packages/fs/yaffs/current/src/ecos-yaffs-nand.c +++ b/packages/fs/yaffs/current/src/ecos-yaffs-nand.c @@ -118,8 +118,9 @@ int eyaffs_writeChunkWithTagsToNAND (str rv = cyg_nand_write_page(part, chunkInNAND, data, dev->totalBytesPerChunk, 0, 0); } else { yaffs_PackedTags2 pt; - yaffs_PackTags2(&pt, tags); - rv = cyg_nand_write_page(part, chunkInNAND, data, dev->nDataBytesPerChunk, &pt, PACKEDTAGS2_OOBSIZE); + void *packed_tags_ptr = dev->noTagsECC ? (void*) &pt.t : (void*) &pt; + yaffs_PackTags2(dev, &pt, tags); + rv = cyg_nand_write_page(part, chunkInNAND, data, dev->nDataBytesPerChunk, packed_tags_ptr, PACKEDTAGS2_OOBSIZE(dev)); } #endif } @@ -202,9 +203,10 @@ int eyaffs_readChunkWithTagsFromNAND (st } } else { yaffs_PackedTags2 pt; - rv = cyg_nand_read_page(part, chunkInNAND, data, data ? dev->nDataBytesPerChunk : 0, &pt, tags ? PACKEDTAGS2_OOBSIZE : 0); + void *packed_tags_ptr = dev->noTagsECC ? (void*) &pt.t : (void*) &pt; + rv = cyg_nand_read_page(part, chunkInNAND, data, data ? dev->nDataBytesPerChunk : 0, packed_tags_ptr, tags ? PACKEDTAGS2_OOBSIZE(dev) : 0); if (tags) - yaffs_UnpackTags2(tags, &pt); + yaffs_UnpackTags2(dev, tags, &pt); } #endif }
--- a/packages/fs/yaffs/current/src/ecos-yaffs-nand.h +++ b/packages/fs/yaffs/current/src/ecos-yaffs-nand.h @@ -53,7 +53,9 @@ // If writing a yaffs_PackedTags1, we store only its eight meaningful bytes #define PACKEDTAGS1_OOBSIZE 8 -#define PACKEDTAGS2_OOBSIZE ((unsigned)sizeof(yaffs_PackedTags2)) +#define PACKEDTAGS2_OOBSIZE(dev) (dev->noTagsECC ? \ + (unsigned)sizeof(yaffs_PackedTags2TagsPart) : \ + (unsigned)sizeof(yaffs_PackedTags2)) int eyaffs_eraseBlockInNAND (struct yaffs_DeviceStruct * dev, int blockInNAND); int eyaffs_initialiseNAND (struct yaffs_DeviceStruct * dev);
--- a/packages/fs/yaffs/current/src/ecos-yaffs.c +++ b/packages/fs/yaffs/current/src/ecos-yaffs.c @@ -603,10 +603,10 @@ static int eyaffs_mount ( cyg_fstab_e #endif } else { y->isYaffs2 = 1; - if (NAND_APPSPARE_PER_PAGE(nand) < PACKEDTAGS2_OOBSIZE) { + if (NAND_APPSPARE_PER_PAGE(nand) < PACKEDTAGS2_OOBSIZE(y)) { NAND_ERROR(nand, "Device has %d spare per page but YAFFS2 needs %u\n", - NAND_APPSPARE_PER_PAGE(nand), PACKEDTAGS2_OOBSIZE); + NAND_APPSPARE_PER_PAGE(nand), PACKEDTAGS2_OOBSIZE(y)); EG(EINVAL); } }
