1 #pragma src "/usr/inferno/libnandfs" 2 3 typedef struct Nandfs Nandfs; 4 typedef struct NandfsTags NandfsTags; 5 6 #pragma incomplete Nandfs 7 8 enum { 9 NandfsL2PageSize = 9, 10 NandfsPageSize = 1 << NandfsL2PageSize, 11 NandfsAuxiliarySize = 16, 12 NandfsFullSize = NandfsPageSize + NandfsAuxiliarySize, 13 NandfsPathBits = 26, 14 NandfsPathMask = ((1 << NandfsPathBits) - 1), 15 NandfsNeraseBits = 18, 16 NandfsNeraseMask = ((1 << NandfsNeraseBits) - 1), 17 }; 18 19 struct NandfsTags { 20 ulong path; // 26 bits 21 ulong nerase; // 18 bits 22 uchar tag; // 8 bits 23 uchar magic; // 8 bits 24 }; 25 26 char *nandfsinit(void*, long, long, char *(*)(void*, void*, long, ulong), 27 char *(*)(void*, void*, long, ulong), 28 char *(*)(void*, long), 29 char *(*)(void*), 30 LogfsLowLevel **); 31 void nandfsfree(Nandfs*); 32 char *nandfsreadpageauxiliary(Nandfs*, NandfsTags*, long, int, int, LogfsLowLevelReadResult*); 33 void nandfssetmagic(Nandfs*, void*); 34 char *nandfswritepageauxiliary(Nandfs*, NandfsTags*, long, int); 35 char *nandfsreadpage(Nandfs*, void*, NandfsTags*, long, int, int, LogfsLowLevelReadResult*); 36 char *nandfsreadpagerange(Nandfs*, void*, long, int, int, int, LogfsLowLevelReadResult*); 37 char *nandfsupdatepage(Nandfs*, void*, ulong, uchar, long, int); 38 39 long nandfsgetnerase(Nandfs*, long); 40 void nandfssetnerase(Nandfs*, long, ulong); 41 void nandfssetpartial(Nandfs*, long, int); 42 43 char *nandfsmarkabsblockbad(Nandfs*, long); 44 45 /* low level interface functions */ 46 47 char *nandfsopen(Nandfs*, long, long, int, int, long*); 48 short nandfsgettag(Nandfs*, long); 49 void nandfssettag(Nandfs*, long, short); 50 long nandfsgetpath(Nandfs*, long); 51 void nandfssetpath(Nandfs*, long, ulong); 52 int nandfsgetblockpartialformatstatus(Nandfs*, long); 53 long nandfsfindfreeblock(Nandfs*, long*); 54 char *nandfsreadblock(Nandfs*, void*, long, LogfsLowLevelReadResult*); 55 char *nandfswriteblock(Nandfs*, void*, uchar, ulong, int, long*, long); 56 char *nandfswritepage(Nandfs*, void*, long, int); 57 char *nandfseraseblock(Nandfs*, long, void **, int*); 58 char *nandfsformatblock(Nandfs*, long, uchar, ulong, long, long, int, long*, void*, int*); 59 char *nandfsreformatblock(Nandfs*, long, uchar, ulong, int, long*, void*, int*); 60 char *nandfsmarkblockbad(Nandfs*, long); 61 int nandfsgetpagesize(Nandfs*); 62 int nandfsgetpagesperblock(Nandfs*); 63 long nandfsgetblocks(Nandfs*); 64 long nandfsgetbaseblock(Nandfs*); 65 int nandfsgetblocksize(Nandfs*); 66 ulong nandfscalcrawaddress(Nandfs*, long, int); 67 char *nandfsgetblockstatus(Nandfs*, long, int*, void **, LogfsLowLevelReadResult*); 68 int nandfscalcformat(Nandfs*, long, long, long, long*, long*, long*); 69 int nandfsgetopenstatus(Nandfs*); 70 char *nandfssync(Nandfs*); 71 72 /* defined in environment */ 73 void *nandfsrealloc(void*, ulong); 74 void nandfsfreemem(void*); 75