From b786f20bbab5a59046aa78a2c6c2a11536497202 Mon Sep 17 00:00:00 2001 From: bhgv Date: Thu, 1 Mar 2018 16:54:45 +0200 Subject: inferno-os tree was separated from the inferno-os-android (separated from the Android driver) --- include/nandfs.h | 74 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 74 insertions(+) create mode 100644 include/nandfs.h (limited to 'include/nandfs.h') 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*); -- cgit v1.2.3