From 37da2899f40661e3e9631e497da8dc59b971cbd0 Mon Sep 17 00:00:00 2001 From: "Charles.Forsyth" Date: Fri, 22 Dec 2006 17:07:39 +0000 Subject: 20060303a --- libnandfs/writepageauxilliary.c | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) create mode 100644 libnandfs/writepageauxilliary.c (limited to 'libnandfs/writepageauxilliary.c') diff --git a/libnandfs/writepageauxilliary.c b/libnandfs/writepageauxilliary.c new file mode 100644 index 00000000..6d2d6b87 --- /dev/null +++ b/libnandfs/writepageauxilliary.c @@ -0,0 +1,33 @@ +#include "lib9.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); +} -- cgit v1.2.3