Charles.Forsyth20060303a828770d19 years agoHistory
72 lines · 3.5 KB · C
RawDownload
#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);