writepageauxilliary.c 963 B

123456789101112131415161718192021222324252627282930313233
  1. #include "logfsos.h"
  2. #include "logfs.h"
  3. #include "nandfs.h"
  4. #include "local.h"
  5. /*
  6. * update the tags in a page's auxiliary area
  7. * only touch the fields if they contain some zeros, and compute the hamming codes
  8. * as well
  9. */
  10. char *
  11. nandfswritepageauxiliary(Nandfs *nandfs, NandfsTags *tags, long absblock, int page)
  12. {
  13. NandfsAuxiliary hdr;
  14. ulong tmp;
  15. ushort htmp;
  16. memset(&hdr, 0xff, sizeof(hdr));
  17. if (tags->path < NandfsPathMask) {
  18. tmp = _nandfshamming31_26calc((tags->path << 6)) | (1 << 5);
  19. putbig4(hdr.parth, tmp);
  20. }
  21. if (tags->nerase < NandfsNeraseMask || tags->magic != 0xff) {
  22. tmp = _nandfshamming31_26calc((tags->magic << 24) | (tags->nerase << 6)) | (1 << 5);
  23. htmp = tmp >> 16;
  24. putbig2(hdr.nerasemagicmsw, htmp);
  25. putbig2(hdr.nerasemagiclsw, tmp);
  26. }
  27. if (tags->tag != 0xff)
  28. hdr.tag = tags->tag;
  29. return (*nandfs->write)(nandfs->magic, &hdr, sizeof(hdr), nandfs->rawblocksize * absblock + page * NandfsFullSize + NandfsPageSize);
  30. }