123456789101112131415161718192021222324252627282930313233 |
- #include "logfsos.h"
- #include "logfs.h"
- #include "nandfs.h"
- #include "local.h"
- /*
- * update the tags in a page's auxiliary area
- * only touch the fields if they contain some zeros, and compute the hamming codes
- * as well
- */
- char *
- nandfswritepageauxiliary(Nandfs *nandfs, NandfsTags *tags, long absblock, int page)
- {
- NandfsAuxiliary hdr;
- ulong tmp;
- ushort htmp;
- memset(&hdr, 0xff, sizeof(hdr));
- if (tags->path < NandfsPathMask) {
- tmp = _nandfshamming31_26calc((tags->path << 6)) | (1 << 5);
- putbig4(hdr.parth, tmp);
- }
- if (tags->nerase < NandfsNeraseMask || tags->magic != 0xff) {
- tmp = _nandfshamming31_26calc((tags->magic << 24) | (tags->nerase << 6)) | (1 << 5);
- htmp = tmp >> 16;
- putbig2(hdr.nerasemagicmsw, htmp);
- putbig2(hdr.nerasemagiclsw, tmp);
- }
- if (tags->tag != 0xff)
- hdr.tag = tags->tag;
- return (*nandfs->write)(nandfs->magic, &hdr, sizeof(hdr), nandfs->rawblocksize * absblock + page * NandfsFullSize + NandfsPageSize);
- }
|