diff options
| author | bhgv <bhgv.empire@gmail.com> | 2018-03-01 16:54:45 +0200 |
|---|---|---|
| committer | bhgv <bhgv.empire@gmail.com> | 2018-03-01 16:54:45 +0200 |
| commit | b786f20bbab5a59046aa78a2c6c2a11536497202 (patch) | |
| tree | 0851ecdec889eb9b7ba3751cc04d4f0b474e4a9e /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.h | 74 |
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*); |
