xref: /inferno-os/include/nandfs.h (revision 28942ead413418b56c5be78e8c4c400881fba72e)
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