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