aboutsummaryrefslogtreecommitdiff
path: root/include/nandfs.h
diff options
context:
space:
mode:
authorbhgv <bhgv.empire@gmail.com>2018-03-01 16:54:45 +0200
committerbhgv <bhgv.empire@gmail.com>2018-03-01 16:54:45 +0200
commitb786f20bbab5a59046aa78a2c6c2a11536497202 (patch)
tree0851ecdec889eb9b7ba3751cc04d4f0b474e4a9e /include/nandfs.h
inferno-os tree was separated from the inferno-os-android (separated from the Android driver)
Diffstat (limited to 'include/nandfs.h')
-rw-r--r--include/nandfs.h74
1 files changed, 74 insertions, 0 deletions
diff --git a/include/nandfs.h b/include/nandfs.h
new file mode 100644
index 0000000..1b6eb54
--- /dev/null
+++ b/include/nandfs.h
@@ -0,0 +1,74 @@
+#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*);