From 37da2899f40661e3e9631e497da8dc59b971cbd0 Mon Sep 17 00:00:00 2001 From: "Charles.Forsyth" Date: Fri, 22 Dec 2006 17:07:39 +0000 Subject: 20060303a --- include/nandfs.h | 72 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 72 insertions(+) create mode 100644 include/nandfs.h (limited to 'include/nandfs.h') diff --git a/include/nandfs.h b/include/nandfs.h new file mode 100644 index 00000000..66842f6b --- /dev/null +++ b/include/nandfs.h @@ -0,0 +1,72 @@ +#pragma src "/usr/inferno/libnandfs" + +enum { + NandfsL2PageSize = 9, + NandfsPageSize = 1 << NandfsL2PageSize, + NandfsAuxiliarySize = 16, + NandfsFullSize = NandfsPageSize + NandfsAuxiliarySize, + NandfsPathBits = 26, + NandfsPathMask = ((1 << NandfsPathBits) - 1), + NandfsNeraseBits = 18, + NandfsNeraseMask = ((1 << NandfsNeraseBits) - 1), +}; + +typedef struct Nandfs Nandfs; + +typedef struct NandfsTags { + ulong path; // 26 bits + ulong nerase; // 18 bits + uchar tag; // 8 bits + uchar magic; // 8 bits +} NandfsTags; + +char *nandfsinit(void *magic, long rawsize, long rawblocksize, + char *(*read)(void *magic, void *buf, long nbytes, ulong offset), + char *(*write)(void *magic, void *buf, long nbytes, ulong offset), + char *(*erase)(void *magic, long blockaddr), + char *(*sync)(void *magic), + LogfsLowLevel **llp); +void nandfsfree(Nandfs *nandfs); +char *nandfsreadpageauxiliary(Nandfs *nandfs, NandfsTags *tags, long block, int page, int correct, LogfsLowLevelReadResult *result); +void nandfssetmagic(Nandfs *nandfs, void *magic); +char *nandfswritepageauxiliary(Nandfs *nandfs, NandfsTags *tags, long absblock, int page); +char *nandfsreadpage(Nandfs *nandfs, void *buf, NandfsTags *tags, long block, int page, int reportbad, LogfsLowLevelReadResult *result); +char *nandfsreadpagerange(Nandfs *nandfs, void *buf, long block, int page, int offset, int count, LogfsLowLevelReadResult *result); +char *nandfsupdatepage(Nandfs *nandfs, void *buf, ulong path, uchar tag, long block, int page); + +long nandfsgetnerase(Nandfs *nandfs, long block); +void nandfssetnerase(Nandfs *nandfs, long block, ulong nerase); +void nandfssetpartial(Nandfs *nandfs, long block, int partial); + +char *nandfsmarkabsblockbad(Nandfs *nandfs, long absblock); + +/* low level interface functions */ + +char *nandfsopen(Nandfs *nandfs, long base, long limit, int trace, int xcount, long *data); +short nandfsgettag(Nandfs *nandfs, long block); +void nandfssettag(Nandfs *nandfs, long block, short tag); +long nandfsgetpath(Nandfs *nandfs, long block); +void nandfssetpath(Nandfs *nandfs, long block, ulong path); +int nandfsgetblockpartialformatstatus(Nandfs *nandfs, long block); +long nandfsfindfreeblock(Nandfs *nandfs, long *freeblocksp); +char *nandfsreadblock(Nandfs *nandfs, void *buf, long block, LogfsLowLevelReadResult *blocke); +char *nandfswriteblock(Nandfs *nandfs, void *buf, uchar tag, ulong path, int xcount, long *data, long block); +char *nandfswritepage(Nandfs *nandfs, void *buf, long block, int page); +char *nandfseraseblock(Nandfs *nandfs, long block, void **llsavep, int *markedbad); +char *nandfsformatblock(Nandfs *nandfs, long block, uchar tag, ulong path, long baseblock, long sizeinblocks, int xcount, long *xdata, void *llsave, int *markedbad); +char *nandfsreformatblock(Nandfs *nandfs, long block, uchar tag, ulong path, int xcount, long *xdata, void *llsave, int *markedbad); +char *nandfsmarkblockbad(Nandfs *nandfs, long block); +int nandfsgetpagesize(Nandfs *nandfs); +int nandfsgetpagesperblock(Nandfs *nandfs); +long nandfsgetblocks(Nandfs *nandfs); +long nandfsgetbaseblock(Nandfs *nandfs); +int nandfsgetblocksize(Nandfs *nandfs); +ulong nandfscalcrawaddress(Nandfs *nandfs, long pblock, int dataoffset); +char *nandfsgetblockstatus(Nandfs *nandfs, long block, int *magicfound, void **llsave, LogfsLowLevelReadResult *result); +int nandfscalcformat(Nandfs *nandfs, long base, long limit, long bootsize, long *baseblock, long *limitblock, long *bootblocks); +int nandfsgetopenstatus(Nandfs *nandfs); +char *nandfssync(Nandfs *nandfs); + +/* defined in environment */ +void *nandfsrealloc(void *p, ulong size); +void nandfsfreemem(void *p); -- cgit v1.2.3