137da2899SCharles.Forsyth #pragma src "/usr/inferno/libnandfs" 237da2899SCharles.Forsyth 3*28942eadSforsyth typedef struct Nandfs Nandfs; 4*28942eadSforsyth typedef struct NandfsTags NandfsTags; 5*28942eadSforsyth 6*28942eadSforsyth #pragma incomplete Nandfs 7*28942eadSforsyth 837da2899SCharles.Forsyth enum { 937da2899SCharles.Forsyth NandfsL2PageSize = 9, 1037da2899SCharles.Forsyth NandfsPageSize = 1 << NandfsL2PageSize, 1137da2899SCharles.Forsyth NandfsAuxiliarySize = 16, 1237da2899SCharles.Forsyth NandfsFullSize = NandfsPageSize + NandfsAuxiliarySize, 1337da2899SCharles.Forsyth NandfsPathBits = 26, 1437da2899SCharles.Forsyth NandfsPathMask = ((1 << NandfsPathBits) - 1), 1537da2899SCharles.Forsyth NandfsNeraseBits = 18, 1637da2899SCharles.Forsyth NandfsNeraseMask = ((1 << NandfsNeraseBits) - 1), 1737da2899SCharles.Forsyth }; 1837da2899SCharles.Forsyth 19*28942eadSforsyth struct NandfsTags { 2037da2899SCharles.Forsyth ulong path; // 26 bits 2137da2899SCharles.Forsyth ulong nerase; // 18 bits 2237da2899SCharles.Forsyth uchar tag; // 8 bits 2337da2899SCharles.Forsyth uchar magic; // 8 bits 24*28942eadSforsyth }; 2537da2899SCharles.Forsyth 26*28942eadSforsyth char *nandfsinit(void*, long, long, char *(*)(void*, void*, long, ulong), 27*28942eadSforsyth char *(*)(void*, void*, long, ulong), 28*28942eadSforsyth char *(*)(void*, long), 29*28942eadSforsyth char *(*)(void*), 30*28942eadSforsyth LogfsLowLevel **); 31*28942eadSforsyth void nandfsfree(Nandfs*); 32*28942eadSforsyth char *nandfsreadpageauxiliary(Nandfs*, NandfsTags*, long, int, int, LogfsLowLevelReadResult*); 33*28942eadSforsyth void nandfssetmagic(Nandfs*, void*); 34*28942eadSforsyth char *nandfswritepageauxiliary(Nandfs*, NandfsTags*, long, int); 35*28942eadSforsyth char *nandfsreadpage(Nandfs*, void*, NandfsTags*, long, int, int, LogfsLowLevelReadResult*); 36*28942eadSforsyth char *nandfsreadpagerange(Nandfs*, void*, long, int, int, int, LogfsLowLevelReadResult*); 37*28942eadSforsyth char *nandfsupdatepage(Nandfs*, void*, ulong, uchar, long, int); 3837da2899SCharles.Forsyth 39*28942eadSforsyth long nandfsgetnerase(Nandfs*, long); 40*28942eadSforsyth void nandfssetnerase(Nandfs*, long, ulong); 41*28942eadSforsyth void nandfssetpartial(Nandfs*, long, int); 4237da2899SCharles.Forsyth 43*28942eadSforsyth char *nandfsmarkabsblockbad(Nandfs*, long); 4437da2899SCharles.Forsyth 4537da2899SCharles.Forsyth /* low level interface functions */ 4637da2899SCharles.Forsyth 47*28942eadSforsyth char *nandfsopen(Nandfs*, long, long, int, int, long*); 48*28942eadSforsyth short nandfsgettag(Nandfs*, long); 49*28942eadSforsyth void nandfssettag(Nandfs*, long, short); 50*28942eadSforsyth long nandfsgetpath(Nandfs*, long); 51*28942eadSforsyth void nandfssetpath(Nandfs*, long, ulong); 52*28942eadSforsyth int nandfsgetblockpartialformatstatus(Nandfs*, long); 53*28942eadSforsyth long nandfsfindfreeblock(Nandfs*, long*); 54*28942eadSforsyth char *nandfsreadblock(Nandfs*, void*, long, LogfsLowLevelReadResult*); 55*28942eadSforsyth char *nandfswriteblock(Nandfs*, void*, uchar, ulong, int, long*, long); 56*28942eadSforsyth char *nandfswritepage(Nandfs*, void*, long, int); 57*28942eadSforsyth char *nandfseraseblock(Nandfs*, long, void **, int*); 58*28942eadSforsyth char *nandfsformatblock(Nandfs*, long, uchar, ulong, long, long, int, long*, void*, int*); 59*28942eadSforsyth char *nandfsreformatblock(Nandfs*, long, uchar, ulong, int, long*, void*, int*); 60*28942eadSforsyth char *nandfsmarkblockbad(Nandfs*, long); 61*28942eadSforsyth int nandfsgetpagesize(Nandfs*); 62*28942eadSforsyth int nandfsgetpagesperblock(Nandfs*); 63*28942eadSforsyth long nandfsgetblocks(Nandfs*); 64*28942eadSforsyth long nandfsgetbaseblock(Nandfs*); 65*28942eadSforsyth int nandfsgetblocksize(Nandfs*); 66*28942eadSforsyth ulong nandfscalcrawaddress(Nandfs*, long, int); 67*28942eadSforsyth char *nandfsgetblockstatus(Nandfs*, long, int*, void **, LogfsLowLevelReadResult*); 68*28942eadSforsyth int nandfscalcformat(Nandfs*, long, long, long, long*, long*, long*); 69*28942eadSforsyth int nandfsgetopenstatus(Nandfs*); 70*28942eadSforsyth char *nandfssync(Nandfs*); 7137da2899SCharles.Forsyth 7237da2899SCharles.Forsyth /* defined in environment */ 73*28942eadSforsyth void *nandfsrealloc(void*, ulong); 74*28942eadSforsyth void nandfsfreemem(void*); 75