Are you getting the errors when scanning empty chunks/pages? If so, these can
be safely ignored.
The "ECC turned off" does not apply to the tags ECC calculation, only to the
data ECC calculation.
-- Charles
On Wednesday 13 October 2004 03:48, Daniel Gustafsson wrote:
> Can somebody please explain the functions below. I am using yaffs/direct,
> ECC turned off.
>
> When scanning the emfile during a mount there are ecc errors.
>
>
>
> void yaffs_CalcTagsECC(yaffs_Tags *tags)
> {
> // Calculate an ecc
>
> unsigned char *b = ((yaffs_TagsUnion *)tags)->asBytes;
> unsigned i,j;
> unsigned ecc = 0;
> unsigned bit = 0;
> tags->ecc = 0;
>
> for(i = 0; i < 8; i++)
> {
> for(j = 1; j &0xff; j<<=1)
> {
> bit++;
> if(b[i] & j)
> {
> ecc ^= bit;
> }
> }
> }
>
> tags->ecc = ecc; %%%I always
> get a high value on ecc approx 64
>
>
> }
>
> int yaffs_CheckECCOnTags(yaffs_Tags *tags)
> {
> unsigned ecc = tags->ecc;
>
> yaffs_CalcTagsECC(tags);
>
> ecc ^= tags->ecc; %% Now my
> ecc increases to approx 4096.
>
> if(ecc && ecc <= 64)
> {
> // TODO: Handle the failure better. Retire?
> unsigned char *b = ((yaffs_TagsUnion *)tags)->asBytes;
>
> ecc--;
>
> b[ecc / 8] ^= (1 << (ecc & 7));
>
> // Now recvalc the ecc
> yaffs_CalcTagsECC(tags);
>
> return 1; // recovered error
> }
> else if(ecc)
> {
> // Wierd ecc failure value
> %%%% I always end up here.
> // TODO Need to do somethiong here
> return -1; //unrecovered error
> }
>
> return 0;
> }
>
>
>
> //Daniel
>
>
> _______________________________________________
> yaffs mailing list
> yaffs@stoneboat.aleph1.co.uk
> http://stoneboat.aleph1.co.uk/cgi-bin/mailman/listinfo/yaffs