]> git.lizzy.rs Git - plan9front.git/blob - sys/src/cmd/disk/kfs/portdat.h
Add Erik Quanstrom's smart tool for ATA SMART.
[plan9front.git] / sys / src / cmd / disk / kfs / portdat.h
1 /*
2  * fundamental constants
3  */
4 #define NAMELEN         28              /* size of names */
5 #define NDBLOCK         6               /* number of direct blocks in Dentry */
6 #define MAXDAT          8192            /* max allowable data message */
7 #define NTLOCK          200             /* number of active file Tlocks */
8
9 typedef struct  Fbuf    Fbuf;
10 typedef struct  Super1  Super1;
11 typedef struct  Superb  Superb;
12 // typedef struct       Qid     Qid;
13 typedef struct  Dentry  Dentry;
14 typedef struct  Tag     Tag;
15
16 typedef struct  Device  Device;
17 typedef struct  Qid9p1  Qid9p1;
18 typedef struct  File    File;
19 typedef struct  Filsys  Filsys;
20 typedef struct  Filta   Filta;
21 typedef struct  Filter  Filter;
22 typedef         ulong   Float;
23 typedef struct  Hiob    Hiob;
24 typedef struct  Iobuf   Iobuf;
25 typedef struct  P9call  P9call;
26 typedef struct  Tlock   Tlock;
27 // typedef      struct  Tm      Tm;
28 typedef struct  Uid     Uid;
29 typedef struct  Wpath   Wpath;
30 typedef struct  AuthRpc AuthRpc;
31
32 /*
33  * DONT TOUCH -- data structures stored on disk
34  */
35 /* DONT TOUCH, this is the disk structure */
36 struct  Qid9p1
37 {
38         long    path;
39         long    version;
40 };
41
42 /* DONT TOUCH, this is the disk structure */
43 struct  Dentry
44 {
45         char    name[NAMELEN];
46         short   uid;
47         short   gid;
48         ushort  mode;
49                 #define DALLOC  0x8000
50                 #define DDIR    0x4000
51                 #define DAPND   0x2000
52                 #define DLOCK   0x1000
53                 #define DREAD   0x4
54                 #define DWRITE  0x2
55                 #define DEXEC   0x1
56         Qid9p1  qid;
57         long    size;
58         long    dblock[NDBLOCK];
59         long    iblock;
60         long    diblock;
61         long    atime;
62         long    mtime;
63 };
64
65 /* DONT TOUCH, this is the disk structure */
66 struct  Tag
67 {
68         short   pad;
69         short   tag;
70         long    path;
71 };
72
73 /* DONT TOUCH, this is the disk structure */
74 struct  Super1
75 {
76         long    fstart;
77         long    fsize;
78         long    tfree;
79         long    qidgen;         /* generator for unique ids */
80
81         long    fsok;           /* file system ok */
82
83         /*
84          * garbage for WWC device
85          */
86         long    roraddr;        /* dump root addr */
87         long    last;           /* last super block addr */
88         long    next;           /* next super block addr */
89 };
90
91 /* DONT TOUCH, this is the disk structure */
92 struct  Fbuf
93 {
94         long    nfree;
95         long    free[1];                /* changes based on BUFSIZE */
96 };
97
98 /* DONT TOUCH, this is the disk structure */
99 struct  Superb
100 {
101         Super1;
102         Fbuf    fbuf;
103 };
104
105 struct  Device
106 {
107         char    type;
108         char    ctrl;
109         char    unit;
110         char    part;
111 };
112
113 /*
114  * for load stats
115  */
116 struct  Filter
117 {
118         ulong   count;                  /* count and old count kept separate */
119         ulong   oldcount;               /* so interrput can read them */
120         Float   filter[3];              /* filters for 1m 10m 100m */ 
121 };
122
123 struct  Filta
124 {
125         Filter* f;
126         int     scale;
127 };
128
129 /*
130  * array of qids that are locked
131  */
132 struct  Tlock
133 {
134         Device  dev;
135         long    time;
136         long    qpath;
137         File*   file;
138 };
139
140 struct  File
141 {
142         QLock;
143         Qid     qid;
144         Wpath*  wpath;
145         Chan*   cp;             /* null means a free slot */
146         Tlock*  tlock;          /* if file is locked */
147         File*   next;           /* in cp->flist */
148         File*   list;           /* in list of free files */
149         Filsys* fs;
150         long    addr;
151         long    slot;
152         long    lastra;         /* read ahead address */
153         ulong   fid;
154         short   uid;
155         char    open;
156                 #define FREAD   1
157                 #define FWRITE  2
158                 #define FREMOV  4
159                 #define FWSTAT  8
160         long    doffset;        /* directory reading */
161         ulong   dvers;
162         long    dslot;
163
164         /* for network authentication */
165         AuthRpc *rpc;
166         short   cuid;
167 };
168
169 struct  Filsys
170 {
171         char*   name;           /* name of filesys */
172         Device  dev;            /* device that filesys is on */
173         int     flags;
174                 #define FREAM           (1<<1)  /* mkfs */
175                 #define FRECOVER        (1<<2)  /* install last dump */
176 };
177
178 struct  Hiob
179 {
180         Iobuf*  link;
181         Lock;
182 };
183
184 struct  Iobuf
185 {
186         QLock;
187         Device  dev;
188         Iobuf   *next;          /* for hash */
189         Iobuf   *fore;          /* for lru */
190         Iobuf   *back;          /* for lru */
191         char    *iobuf;         /* only active while locked */
192         char    *xiobuf;        /* "real" buffer pointer */
193         long    addr;
194         int     flags;
195 };
196
197 struct  P9call
198 {
199         uchar   calln;
200         uchar   rxflag;
201         short   msize;
202         void    (*func)(Chan*, int);
203 };
204
205 // struct       Tm
206 // {
207 //      /* see ctime(3) */
208 //      int     sec;
209 //      int     min;
210 //      int     hour;
211 //      int     mday;
212 //      int     mon;
213 //      int     year;
214 //      int     wday;
215 //      int     yday;
216 //      int     isdst;
217 // };
218
219 struct  Uid
220 {
221         short   uid;            /* user id */
222         short   lead;           /* leader of group */
223         short   offset;         /* byte offset in uidspace */
224 };
225
226 struct  Wpath
227 {
228         Wpath   *up;            /* pointer upwards in path */
229         Wpath   *list;          /* link in free chain */
230         long    addr;           /* directory entry addr of parent */
231         long    slot;           /* directory entry slot of parent */
232         short   refs;           /* number of files using this structure */
233 };
234
235 #define MAXFDATA        8192
236
237 /*
238  * error codes generated from the file server
239  */
240 enum
241 {
242         Ebadspc = 1,
243         Efid,
244         Efidinuse,
245         Echar,
246         Eopen,
247         Ecount,
248         Ealloc,
249         Eqid,
250         Eauth,
251         Eauthmsg,
252         Eaccess,
253         Eentry,
254         Emode,
255         Edir1,
256         Edir2,
257         Ephase,
258         Eexist,
259         Edot,
260         Eempty,
261         Ebadu,
262         Enotu,
263         Enotg,
264         Ename,
265         Ewalk,
266         Eronly,
267         Efull,
268         Eoffset,
269         Elocked,
270         Ebroken,
271         Etoolong,
272         Ersc,
273         Eqidmode,
274         Econvert,
275         Enotm,
276         Enotd,
277         Enotl,
278         Enotw,
279         Esystem,
280
281         MAXERR
282 };
283
284 /*
285  * devnone block numbers
286  */
287 enum
288 {
289         Cwio1   = 1,
290         Cwio2,
291         Cwxx1,
292         Cwxx2,
293         Cwxx3,
294         Cwxx4,
295         Cwdump1,
296         Cwdump2,
297         Cuidbuf,
298 };
299
300 /*
301  * tags on block
302  */
303 enum
304 {
305         Tnone           = 0,
306         Tsuper,                 /* the super block */
307         Tdir,                   /* directory contents */
308         Tind1,                  /* points to blocks */
309         Tind2,                  /* points to Tind1 */
310         Tfile,                  /* file contents */
311         Tfree,                  /* in free list */
312         Tbuck,                  /* cache fs bucket */
313         Tvirgo,                 /* fake worm virgin bits */
314         Tcache,                 /* cw cache things */
315         MAXTAG
316 };
317
318 /*
319  * flags to getbuf
320  */
321 enum
322 {
323         Bread   = (1<<0),       /* read the block if miss */
324         Bprobe  = (1<<1),       /* return null if miss */
325         Bmod    = (1<<2),       /* set modified bit in buffer */
326         Bimm    = (1<<3),       /* set immediate bit in buffer */
327         Bres    = (1<<4),       /* reserved, never renammed */
328 };
329
330 /*
331  * open modes passed into P9 open/create
332  */
333 enum
334 {
335         MREAD   = 0,
336         MWRITE,
337         MBOTH,
338         MEXEC,
339         MTRUNC  = (1<<4),       /* truncate on open */
340         MCEXEC  = (1<<5),       /* close on exec (host) */
341         MRCLOSE = (1<<6),       /* remove on close */
342 };
343
344 /*
345  * check flags
346  */
347 enum
348 {
349         Crdall  = (1<<0),       /* read all files */
350         Ctag    = (1<<1),       /* rebuild tags */
351         Cpfile  = (1<<2),       /* print files */
352         Cpdir   = (1<<3),       /* print directories */
353         Cfree   = (1<<4),       /* rebuild free list */
354         Cream   = (1<<6),       /* clear all bad tags */
355         Cbad    = (1<<7),       /* clear all bad blocks */
356         Ctouch  = (1<<8),       /* touch old dir and indir */
357         Cquiet  = (1<<9),       /* report just nasty things */
358 };
359
360 /*
361  * buffer size variables
362  */
363 extern int      RBUFSIZE;
364 extern int      BUFSIZE;
365 extern int      DIRPERBUF;
366 extern int      INDPERBUF;
367 extern int      INDPERBUF2;
368 extern int      FEPERBUF;