aboutsummaryrefslogtreecommitdiff
path: root/include/logfs.h
diff options
context:
space:
mode:
Diffstat (limited to 'include/logfs.h')
-rw-r--r--include/logfs.h158
1 files changed, 158 insertions, 0 deletions
diff --git a/include/logfs.h b/include/logfs.h
new file mode 100644
index 0000000..df0bbbf
--- /dev/null
+++ b/include/logfs.h
@@ -0,0 +1,158 @@
+#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,
+ LogfsTlog = 0x06,
+ LogfsTdata = 0x18,
+ LogfsTbad = -1,
+ LogfsTworse = -2,
+ LogfsMagic = 'V',
+};
+
+enum {
+ LogfsLogTstart = 's',
+ LogfsLogTcreate = 'c',
+ LogfsLogTtrunc = 't',
+ LogfsLogTremove = 'r',
+ LogfsLogTwrite = 'w',
+ LogfsLogTwstat = 'W',
+ LogfsLogTend = 'e',
+};
+
+enum {
+ LogfsOpenFlagNoPerm = 1,
+ LogfsOpenFlagWstatAllow = 2,
+};
+
+typedef enum LogfsLowLevelReadResult {
+ LogfsLowLevelReadResultOk,
+ LogfsLowLevelReadResultSoftError,
+ LogfsLowLevelReadResultHardError,
+ LogfsLowLevelReadResultBad,
+ LogfsLowLevelReadResultAllOnes,
+} LogfsLowLevelReadResult;
+
+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;
+ int l2pagesperblock;
+ long blocks;
+ int pathbits;
+ LOGFSOPENFN *open;
+ LOGFSGETBLOCKTAGFN *getblocktag;
+ LOGFSSETBLOCKTAGFN *setblocktag;
+ LOGFSGETBLOCKPATHFN *getblockpath;
+ LOGFSSETBLOCKPATHFN *setblockpath;
+ LOGFSREADPAGERANGEFN *readpagerange;
+ LOGFSWRITEPAGEFN *writepage;
+ LOGFSFINDFREEBLOCKFN *findfreeblock;
+ LOGFSREADBLOCKFN *readblock;
+ LOGFSWRITEBLOCKFN *writeblock;
+ LOGFSERASEBLOCKFN *eraseblock;
+ LOGFSFORMATBLOCKFN *formatblock;
+ LOGFSREFORMATBLOCKFN *reformatblock;
+ LOGFSMARKBLOCKBADFN *markblockbad;
+ LOGFSGETBASEBLOCKFN *getbaseblock;
+ LOGFSGETBLOCKSIZEFN *getblocksize;
+ LOGFSGETBLOCKPARTIALFORMATSTATUSFN *getblockpartialformatstatus;
+ LOGFSCALCRAWADDRESSFN *calcrawaddress;
+ LOGFSGETBLOCKSTATUSFN *getblockstatus;
+ LOGFSCALCFORMATFN *calcformat;
+ LOGFSGETOPENSTATUSFN *getopenstatus;
+ LOGFSFREEFN *free;
+ LOGFSSYNCFN *sync;
+};
+
+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*, ulong);
+void logfsfreemem(void*);
+int nrand(int);
+
+extern char Eio[];
+extern char Ebadarg[];
+extern char Eperm[];