aboutsummaryrefslogtreecommitdiff
path: root/libnandfs/local.h
diff options
context:
space:
mode:
Diffstat (limited to 'libnandfs/local.h')
-rw-r--r--libnandfs/local.h54
1 files changed, 54 insertions, 0 deletions
diff --git a/libnandfs/local.h b/libnandfs/local.h
new file mode 100644
index 0000000..5c3df45
--- /dev/null
+++ b/libnandfs/local.h
@@ -0,0 +1,54 @@
+typedef struct NandfsBlockData NandfsBlockData;
+typedef struct NandfsAuxiliary NandfsAuxiliary;
+
+struct NandfsBlockData {
+ ulong path;
+ short tag;
+ ulong nerase;
+ int partial;
+};
+
+struct Nandfs {
+ LogfsLowLevel ll;
+ char *(*read)(void*, void*, long, ulong);
+ char *(*write)(void*, void*, long, ulong);
+ char *(*erase)(void*, long blockaddr);
+ char *(*sync)(void*);
+ void *magic;
+ long rawblocksize;
+ long baseblock;
+ long limitblock;
+ NandfsBlockData *blockdata;
+ int trace;
+ int worseblocks;
+ int printbad;
+};
+
+struct NandfsAuxiliary {
+ uchar parth[4]; // ggpppppp pppppppp pppppppp pp1hhhhh (bigendian) self-protected
+ uchar tag; // self-protecting
+ uchar blockstatus; // self-protecting
+ uchar nerasemagicmsw[2]; // see nerasemagiclsw
+ uchar ecc2[3]; // self-protecting
+ uchar nerasemagiclsw[2]; // mmmmmm mmeeeeee eeeeeeeeee ee1hhhhh (bigendian) self-protected
+ uchar ecc1[3]; // self-protecting
+};
+
+#define getbig2(p) (((p)[0] << 8) | (p)[1])
+#define getbig4(p) (((p)[0] << 24) | ((p)[1] << 16) | ((p)[2] << 8) | (p)[3])
+#define getlittle3(p) (((p)[2] << 16) | ((p)[1] << 8) | (p)[0])
+#define putlittle3(p, q) ((p)[0] = (q), (p)[1] = (q) >> 8, (p)[2] = (q) >> 16)
+#define putbig2(p, q) ((p)[0] = (q) >> 8, (p)[1] = (q))
+#define putbig4(p, q) ((p)[0] = (q) >> 24, (p)[1] = (q) >> 16, (p)[2] = (q) >> 8, (p)[3] = (q))
+
+LogfsLowLevelReadResult _nandfscorrectauxiliary(NandfsAuxiliary*);
+
+extern uchar _nandfsvalidtags[];
+extern int _nandfsvalidtagscount;
+
+ulong _nandfshamming31_26calc(ulong in);
+int _nandfshamming31_26correct(ulong *in);
+
+void _nandfsextracttags(NandfsAuxiliary*, NandfsTags*);
+
+extern char Enomem[], Eperm[], Eio[];