#pragma src "/usr/inferno/libnandfs" typedef struct Nandfs Nandfs;typedef struct NandfsTags NandfsTags; #pragma incomplete Nandfs enum { NandfsL2PageSize = 9, NandfsPageSize = 1 << NandfsL2PageSize, NandfsAuxiliarySize = 16, NandfsFullSize = NandfsPageSize + NandfsAuxiliarySize, NandfsPathBits = 26, NandfsPathMask = ((1 << NandfsPathBits) - 1), NandfsNeraseBits = 18, NandfsNeraseMask = ((1 << NandfsNeraseBits) - 1),}; struct NandfsTags { ulong path; // 26 bits ulong nerase; // 18 bits uchar tag; // 8 bits uchar magic; // 8 bits}; char *nandfsinit(void*, long, long, char *(*)(void*, void*, long, ulong), char *(*)(void*, void*, long, ulong), char *(*)(void*, long), char *(*)(void*), LogfsLowLevel **);void nandfsfree(Nandfs*);char *nandfsreadpageauxiliary(Nandfs*, NandfsTags*, long, int, int, LogfsLowLevelReadResult*);void nandfssetmagic(Nandfs*, void*);char *nandfswritepageauxiliary(Nandfs*, NandfsTags*, long, int);char *nandfsreadpage(Nandfs*, void*, NandfsTags*, long, int, int, LogfsLowLevelReadResult*);char *nandfsreadpagerange(Nandfs*, void*, long, int, int, int, LogfsLowLevelReadResult*);char *nandfsupdatepage(Nandfs*, void*, ulong, uchar, long, int); long nandfsgetnerase(Nandfs*, long);void nandfssetnerase(Nandfs*, long, ulong);void nandfssetpartial(Nandfs*, long, int); char *nandfsmarkabsblockbad(Nandfs*, long); /* low level interface functions */ char *nandfsopen(Nandfs*, long, long, int, int, long*);short nandfsgettag(Nandfs*, long);void nandfssettag(Nandfs*, long, short);long nandfsgetpath(Nandfs*, long);void nandfssetpath(Nandfs*, long, ulong);int nandfsgetblockpartialformatstatus(Nandfs*, long);long nandfsfindfreeblock(Nandfs*, long*);char *nandfsreadblock(Nandfs*, void*, long, LogfsLowLevelReadResult*);char *nandfswriteblock(Nandfs*, void*, uchar, ulong, int, long*, long);char *nandfswritepage(Nandfs*, void*, long, int);char *nandfseraseblock(Nandfs*, long, void **, int*);char *nandfsformatblock(Nandfs*, long, uchar, ulong, long, long, int, long*, void*, int*);char *nandfsreformatblock(Nandfs*, long, uchar, ulong, int, long*, void*, int*);char *nandfsmarkblockbad(Nandfs*, long);int nandfsgetpagesize(Nandfs*);int nandfsgetpagesperblock(Nandfs*);long nandfsgetblocks(Nandfs*);long nandfsgetbaseblock(Nandfs*);int nandfsgetblocksize(Nandfs*);ulong nandfscalcrawaddress(Nandfs*, long, int);char *nandfsgetblockstatus(Nandfs*, long, int*, void **, LogfsLowLevelReadResult*);int nandfscalcformat(Nandfs*, long, long, long, long*, long*, long*);int nandfsgetopenstatus(Nandfs*);char *nandfssync(Nandfs*); /* defined in environment */void *nandfsrealloc(void*, ulong);void nandfsfreemem(void*);
#pragma src "/usr/inferno/libnandfs"
typedef struct Nandfs Nandfs;
typedef struct NandfsTags NandfsTags;
#pragma incomplete Nandfs
enum {
NandfsL2PageSize = 9,
NandfsPageSize = 1 << NandfsL2PageSize,
NandfsAuxiliarySize = 16,
NandfsFullSize = NandfsPageSize + NandfsAuxiliarySize,
NandfsPathBits = 26,
NandfsPathMask = ((1 << NandfsPathBits) - 1),
NandfsNeraseBits = 18,
NandfsNeraseMask = ((1 << NandfsNeraseBits) - 1),
};
struct NandfsTags {
ulong path; // 26 bits
ulong nerase; // 18 bits
uchar tag; // 8 bits
uchar magic; // 8 bits
};
char *nandfsinit(void*, long, long, char *(*)(void*, void*, long, ulong),
char *(*)(void*, void*, long, ulong),
char *(*)(void*, long),
char *(*)(void*),
LogfsLowLevel **);
void nandfsfree(Nandfs*);
char *nandfsreadpageauxiliary(Nandfs*, NandfsTags*, long, int, int, LogfsLowLevelReadResult*);
void nandfssetmagic(Nandfs*, void*);
char *nandfswritepageauxiliary(Nandfs*, NandfsTags*, long, int);
char *nandfsreadpage(Nandfs*, void*, NandfsTags*, long, int, int, LogfsLowLevelReadResult*);
char *nandfsreadpagerange(Nandfs*, void*, long, int, int, int, LogfsLowLevelReadResult*);
char *nandfsupdatepage(Nandfs*, void*, ulong, uchar, long, int);
long nandfsgetnerase(Nandfs*, long);
void nandfssetnerase(Nandfs*, long, ulong);
void nandfssetpartial(Nandfs*, long, int);
char *nandfsmarkabsblockbad(Nandfs*, long);
/* low level interface functions */
char *nandfsopen(Nandfs*, long, long, int, int, long*);
short nandfsgettag(Nandfs*, long);
void nandfssettag(Nandfs*, long, short);
long nandfsgetpath(Nandfs*, long);
void nandfssetpath(Nandfs*, long, ulong);
int nandfsgetblockpartialformatstatus(Nandfs*, long);
long nandfsfindfreeblock(Nandfs*, long*);
char *nandfsreadblock(Nandfs*, void*, long, LogfsLowLevelReadResult*);
char *nandfswriteblock(Nandfs*, void*, uchar, ulong, int, long*, long);
char *nandfswritepage(Nandfs*, void*, long, int);
char *nandfseraseblock(Nandfs*, long, void **, int*);
char *nandfsformatblock(Nandfs*, long, uchar, ulong, long, long, int, long*, void*, int*);
char *nandfsreformatblock(Nandfs*, long, uchar, ulong, int, long*, void*, int*);
char *nandfsmarkblockbad(Nandfs*, long);
int nandfsgetpagesize(Nandfs*);
int nandfsgetpagesperblock(Nandfs*);
long nandfsgetblocks(Nandfs*);
long nandfsgetbaseblock(Nandfs*);
int nandfsgetblocksize(Nandfs*);
ulong nandfscalcrawaddress(Nandfs*, long, int);
char *nandfsgetblockstatus(Nandfs*, long, int*, void **, LogfsLowLevelReadResult*);
int nandfscalcformat(Nandfs*, long, long, long, long*, long*, long*);
int nandfsgetopenstatus(Nandfs*);
char *nandfssync(Nandfs*);
/* defined in environment */
void *nandfsrealloc(void*, ulong);
void nandfsfreemem(void*);