diff options
| author | forsyth <forsyth@vitanuova.com> | 2011-12-15 16:40:16 +0000 |
|---|---|---|
| committer | forsyth <forsyth@vitanuova.com> | 2011-12-15 16:40:16 +0000 |
| commit | 28942ead413418b56c5be78e8c4c400881fba72e (patch) | |
| tree | cd646dce007974acc02e535a2c9ff800ada2b684 /include | |
| parent | 1eacf117f57c983da30e88f232fab9db7b1e300d (diff) | |
20111215-1640
Diffstat (limited to 'include')
| -rwxr-xr-x | include/logfs.h | 172 | ||||
| -rw-r--r-- | include/nandfs.h | 96 | ||||
| -rw-r--r-- | include/version.h | 2 |
3 files changed, 137 insertions, 133 deletions
diff --git a/include/logfs.h b/include/logfs.h index 7c95c27d..df0bbbf0 100755 --- a/include/logfs.h +++ b/include/logfs.h @@ -1,5 +1,21 @@ #pragma src "/usr/inferno/liblogfs" +typedef struct LogfsLowLevel LogfsLowLevel; +typedef struct LogfsBoot LogfsBoot; +typedef struct Logfs Logfs; +typedef struct LogfsServer LogfsServer; +typedef struct LogfsIdentityStore LogfsIdentityStore; + +#pragma incomplete Logfs +#pragma incomplete LogfsServer +#pragma incomplete LogfsIdentityStore +#pragma incomplete LogfsBoot + +typedef u64int Pageset; + +#define BITSPERSET (sizeof(Pageset)*8) +#define PAGETOP ((Pageset)1<<(BITSPERSET-1)) + enum { LogfsTnone = 0xff, LogfsTboot = 0x01, @@ -25,15 +41,6 @@ enum { LogfsOpenFlagWstatAllow = 2, }; -typedef struct LogfsLowLevel LogfsLowLevel; - -typedef enum LogfsLowLevelFettleAction { - LogfsLowLevelFettleActionMarkBad, - LogfsLowLevelFettleActionErase, - LogfsLowLevelFettleActionFormat, - LogfsLowLevelFettleActionEraseAndFormat, -} LogfsLowLevelFettleAction; - typedef enum LogfsLowLevelReadResult { LogfsLowLevelReadResultOk, LogfsLowLevelReadResultSoftError, @@ -42,30 +49,30 @@ typedef enum LogfsLowLevelReadResult { LogfsLowLevelReadResultAllOnes, } LogfsLowLevelReadResult; -typedef short LOGFSGETBLOCKTAGFN(LogfsLowLevel *ll, long block); -typedef void LOGFSSETBLOCKTAGFN(LogfsLowLevel *ll, long block, short tag); -typedef ulong LOGFSGETBLOCKPATHFN(LogfsLowLevel *ll, long block); -typedef void LOGFSSETBLOCKPATHFN(LogfsLowLevel *ll, long block, ulong path); -typedef long LOGFSFINDFREEBLOCKFN(LogfsLowLevel *ll, long *freeblocks); -typedef char *LOGFSREADBLOCKFN(LogfsLowLevel *ll, void *buf, long block, LogfsLowLevelReadResult *blocke); -typedef char *LOGFSWRITEBLOCKFN(LogfsLowLevel *ll, void *buf, uchar tag, ulong path, int xcount, long *xdata, long block); -typedef char *LOGFSERASEBLOCKFN(LogfsLowLevel *ll, long block, void **llsave, int *markedbad); -typedef char *LOGFSFORMATBLOCKFN(LogfsLowLevel *ll, long block, uchar tag, long path, long baseblock, long sizeinblocks, int xcount, long *xdata, void *llsave, int *markedbad); -typedef char *LOGFSREFORMATBLOCKFN(LogfsLowLevel *ll, long block, uchar tag, long path, int xcount, long *xdata, void *llsave, int *markedbad); -typedef void LOGFSMARKBLOCKBADFN(LogfsLowLevel *ll, long block); -typedef int LOGFSGETBLOCKSFN(LogfsLowLevel *ll); -typedef long LOGFSGETBASEBLOCKFN(LogfsLowLevel *ll); -typedef int LOGFSGETBLOCKSIZEFN(LogfsLowLevel *ll); -typedef int LOGFSGETBLOCKPARTIALFORMATSTATUSFN(LogfsLowLevel *ll, long block); -typedef ulong LOGFSCALCRAWADDRESSFN(LogfsLowLevel *ll, long pblock, int dataoffset); -typedef char *LOGFSOPENFN(LogfsLowLevel *ll, long base, long limit, int trace, int xcount, long *xdata); -typedef char *LOGFSGETBLOCKSTATUSFN(LogfsLowLevel *ll, long block, int *magicfound, void **llsave, LogfsLowLevelReadResult *result); -typedef int LOGFSCALCFORMATFN(LogfsLowLevel *ll, long base, long limit, long bootsize, long *baseblock, long *limitblock, long *bootblocks); -typedef int LOGFSGETOPENSTATUSFN(LogfsLowLevel *ll); -typedef void LOGFSFREEFN(LogfsLowLevel *ll); -typedef char *LOGFSREADPAGERANGEFN(LogfsLowLevel *ll, uchar *data, long block, int page, int offset, int count, LogfsLowLevelReadResult *result); -typedef char *LOGFSWRITEPAGEFN(LogfsLowLevel *ll, uchar *data, long block, int page); -typedef char *LOGFSSYNCFN(LogfsLowLevel *ll); +typedef short LOGFSGETBLOCKTAGFN(LogfsLowLevel*, long); +typedef void LOGFSSETBLOCKTAGFN(LogfsLowLevel*, long, short); +typedef ulong LOGFSGETBLOCKPATHFN(LogfsLowLevel*, long); +typedef void LOGFSSETBLOCKPATHFN(LogfsLowLevel*, long, ulong); +typedef long LOGFSFINDFREEBLOCKFN(LogfsLowLevel*, long*); +typedef char *LOGFSREADBLOCKFN(LogfsLowLevel*, void*, long, LogfsLowLevelReadResult*); +typedef char *LOGFSWRITEBLOCKFN(LogfsLowLevel*, void*, uchar, ulong, int, long*, long); +typedef char *LOGFSERASEBLOCKFN(LogfsLowLevel*, long, void **, int*); +typedef char *LOGFSFORMATBLOCKFN(LogfsLowLevel*, long, uchar, long, long, long, int, long*, void*, int*); +typedef char *LOGFSREFORMATBLOCKFN(LogfsLowLevel*, long, uchar, long, int, long*, void*, int*); +typedef void LOGFSMARKBLOCKBADFN(LogfsLowLevel*, long); +typedef int LOGFSGETBLOCKSFN(LogfsLowLevel*); +typedef long LOGFSGETBASEBLOCKFN(LogfsLowLevel*); +typedef int LOGFSGETBLOCKSIZEFN(LogfsLowLevel*); +typedef int LOGFSGETBLOCKPARTIALFORMATSTATUSFN(LogfsLowLevel*, long); +typedef ulong LOGFSCALCRAWADDRESSFN(LogfsLowLevel*, long, int); +typedef char *LOGFSOPENFN(LogfsLowLevel*, long, long, int, int, long*); +typedef char *LOGFSGETBLOCKSTATUSFN(LogfsLowLevel*, long, int*, void **, LogfsLowLevelReadResult*); +typedef int LOGFSCALCFORMATFN(LogfsLowLevel*, long, long, long, long*, long*, long*); +typedef int LOGFSGETOPENSTATUSFN(LogfsLowLevel*); +typedef void LOGFSFREEFN(LogfsLowLevel*); +typedef char *LOGFSREADPAGERANGEFN(LogfsLowLevel*, uchar*, long, int, int, int, LogfsLowLevelReadResult*); +typedef char *LOGFSWRITEPAGEFN(LogfsLowLevel*, uchar*, long, int); +typedef char *LOGFSSYNCFN(LogfsLowLevel*); struct LogfsLowLevel { int l2pagesize; @@ -97,60 +104,55 @@ struct LogfsLowLevel { LOGFSSYNCFN *sync; }; -extern char Eio[]; -extern char Ebadarg[]; -extern char Eperm[]; - -char *logfstagname(uchar tag); - -typedef struct LogfsIdentityStore LogfsIdentityStore; -char *logfsisnew(LogfsIdentityStore **isp); -void logfsisfree(LogfsIdentityStore **isp); -char *logfsisgroupcreate(LogfsIdentityStore *is, char *groupname, char *groupid); -char *logfsisgrouprename(LogfsIdentityStore *is, char *oldgroupname, char *newgroupname); -char *logfsisgroupsetleader(LogfsIdentityStore *is, char *groupname, char *leadername); -char *logfsisgroupaddmember(LogfsIdentityStore *is, char *groupname, char *membername); -char *logfsisgroupremovemember(LogfsIdentityStore *is, char *groupname, char *nonmembername); -char *logfsisusersread(LogfsIdentityStore *is, void *buf, long n, ulong offset, long *nr); - -typedef struct LogfsBoot LogfsBoot; -typedef struct Logfs Logfs; -typedef struct LogfsServer LogfsServer; - -char *logfsformat(LogfsLowLevel *ll, long base, long limit, long bootsize, int trace); -char *logfsbootopen(LogfsLowLevel *ll, long base, long limit, int trace, int printbad, LogfsBoot **lbp); -void logfsbootfree(LogfsBoot *lb); -char *logfsbootread(LogfsBoot *lb, void *buf, long n, ulong offset); -char *logfsbootwrite(LogfsBoot *lb, void *buf, long n, ulong offset); -char *logfsbootio(LogfsBoot *lb, void *buf, long n, ulong offset, int write); -char *logfsbootmap(LogfsBoot *lb, ulong laddress, ulong *lblockp, int *lboffsetp, int *lpagep, int *lpageoffsetp, ulong *pblockp, ulong *paddressp); -long logfsbootgetiosize(LogfsBoot *lb); -long logfsbootgetsize(LogfsBoot *lb); -void logfsboottrace(LogfsBoot *lb, int level); - -char *logfsserverattach(LogfsServer *s, u32int fid, char *uname, Qid *qid); -char *logfsserverclunk(LogfsServer *s, u32int fid); -char *logfsservercreate(LogfsServer *server, u32int fid, char *name, u32int perm, uchar mode, Qid *qid); -char *logfsserverflush(LogfsServer *server); -char *logfsservernew(LogfsBoot *lb, LogfsLowLevel *ll, LogfsIdentityStore *is, ulong openflags, int trace, LogfsServer **sp); -char *logfsserveropen(LogfsServer *s, u32int fid, uchar mode, Qid *qid); -char *logfsserverread(LogfsServer *s, u32int fid, u32int offset, u32int count, uchar *buf, u32int buflen, u32int *rcount); -char *logfsserverremove(LogfsServer *server, u32int fid); -char *logfsserverstat(LogfsServer *s, u32int fid, uchar *buf, u32int bufsize, ushort *count); -char *logfsserverwalk(LogfsServer *s, u32int fid, u32int newfid, ushort nwname, char **wname, ushort *nwqid, Qid *wqid); -char *logfsserverwrite(LogfsServer *server, u32int fid, u32int offset, u32int count, uchar *buf, u32int *rcount); -char *logfsserverwstat(LogfsServer *server, u32int fid, uchar *stat, ushort nstat); -void logfsserverfree(LogfsServer **sp); -char *logfsserverlogsweep(LogfsServer *server, int justone, int *didsomething); -char *logfsserverreadpathextent(LogfsServer *server, u32int path, int nth, u32int *flashaddrp, u32int *lengthp, - long *blockp, int *pagep, int *offsetp); - -char *logfsservertestcmd(LogfsServer *s, int argc, char **argv); -void logfsservertrace(LogfsServer *s, int level); +char *logfstagname(uchar); + +char *logfsisnew(LogfsIdentityStore **); +void logfsisfree(LogfsIdentityStore **); +char *logfsisgroupcreate(LogfsIdentityStore*, char*, char*); +char *logfsisgrouprename(LogfsIdentityStore*, char*, char*); +char *logfsisgroupsetleader(LogfsIdentityStore*, char*, char*); +char *logfsisgroupaddmember(LogfsIdentityStore*, char*, char*); +char *logfsisgroupremovemember(LogfsIdentityStore*, char*, char*); +char *logfsisusersread(LogfsIdentityStore*, void*, long, ulong, long*); + +char *logfsformat(LogfsLowLevel*, long, long, long, int); +char *logfsbootopen(LogfsLowLevel*, long, long, int, int, LogfsBoot**); +void logfsbootfree(LogfsBoot*); +char *logfsbootread(LogfsBoot*, void*, long, ulong); +char *logfsbootwrite(LogfsBoot*, void*, long, ulong); +char *logfsbootio(LogfsBoot*, void*, long, ulong, int); +char *logfsbootmap(LogfsBoot*, ulong, ulong*, int*, int*, int*, ulong*, ulong*); +long logfsbootgetiosize(LogfsBoot*); +long logfsbootgetsize(LogfsBoot*); +void logfsboottrace(LogfsBoot*, int); + +char *logfsserverattach(LogfsServer*, u32int, char*, Qid*); +char *logfsserverclunk(LogfsServer*, u32int); +char *logfsservercreate(LogfsServer*, u32int, char*, u32int, uchar, Qid*); +char *logfsserverflush(LogfsServer*); +char *logfsservernew(LogfsBoot*, LogfsLowLevel*, LogfsIdentityStore*, ulong, int, LogfsServer**); +char *logfsserveropen(LogfsServer*, u32int, uchar mode, Qid*); +char *logfsserverread(LogfsServer*, u32int, u32int, u32int, uchar*, u32int, u32int*); +char *logfsserverremove(LogfsServer*, u32int); +char *logfsserverstat(LogfsServer*, u32int, uchar*, u32int, ushort*); +char *logfsserverwalk(LogfsServer*, u32int, u32int, ushort, char **, ushort*, Qid*); +char *logfsserverwrite(LogfsServer*, u32int, u32int, u32int, uchar*, u32int*); +char *logfsserverwstat(LogfsServer*, u32int, uchar*, ushort nstat); +void logfsserverfree(LogfsServer **); +char *logfsserverlogsweep(LogfsServer*, int, int*); +char *logfsserverreadpathextent(LogfsServer*, u32int, int, u32int*, u32int*, long*, int*, int*); + +char *logfsservertestcmd(LogfsServer*, int, char **); +void logfsservertrace(LogfsServer*, int); /* * implemented by the environment */ ulong logfsnow(void); -void *logfsrealloc(void *p, ulong size); -void logfsfreemem(void *p); +void *logfsrealloc(void*, ulong); +void logfsfreemem(void*); +int nrand(int); + +extern char Eio[]; +extern char Ebadarg[]; +extern char Eperm[]; diff --git a/include/nandfs.h b/include/nandfs.h index 66842f6b..1b6eb54b 100644 --- a/include/nandfs.h +++ b/include/nandfs.h @@ -1,5 +1,10 @@ #pragma src "/usr/inferno/libnandfs" +typedef struct Nandfs Nandfs; +typedef struct NandfsTags NandfsTags; + +#pragma incomplete Nandfs + enum { NandfsL2PageSize = 9, NandfsPageSize = 1 << NandfsL2PageSize, @@ -11,62 +16,59 @@ enum { NandfsNeraseMask = ((1 << NandfsNeraseBits) - 1), }; -typedef struct Nandfs Nandfs; - -typedef struct NandfsTags { +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); +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 *nandfs, long block); -void nandfssetnerase(Nandfs *nandfs, long block, ulong nerase); -void nandfssetpartial(Nandfs *nandfs, long block, int partial); +long nandfsgetnerase(Nandfs*, long); +void nandfssetnerase(Nandfs*, long, ulong); +void nandfssetpartial(Nandfs*, long, int); -char *nandfsmarkabsblockbad(Nandfs *nandfs, long absblock); +char *nandfsmarkabsblockbad(Nandfs*, long); /* 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); +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 *p, ulong size); -void nandfsfreemem(void *p); +void *nandfsrealloc(void*, ulong); +void nandfsfreemem(void*); diff --git a/include/version.h b/include/version.h index 195b2c37..46317ac1 100644 --- a/include/version.h +++ b/include/version.h @@ -1 +1 @@ -#define VERSION "Fourth Edition (20111214)" +#define VERSION "Fourth Edition (20111215)" |
