rev |
line source |
nuclear@88
|
1 #ifndef FS_H_
|
nuclear@88
|
2 #define FS_H_
|
nuclear@88
|
3
|
nuclear@90
|
4 #include <inttypes.h>
|
nuclear@90
|
5
|
nuclear@90
|
6 #define MAGIC 0xccf5ccf5
|
nuclear@90
|
7 #define BLKSZ 1024
|
nuclear@90
|
8
|
nuclear@90
|
9 #define SECT_TO_BLK(x) ((x) / (BLKSZ / 512))
|
nuclear@90
|
10
|
nuclear@91
|
11 #define DEVNO(maj, min) ((((maj) & 0xff) << 8) | ((min) & 0xff))
|
nuclear@90
|
12 #define DEV_MAJOR(dev) (((dev) >> 8) & 0xff)
|
nuclear@90
|
13 #define DEV_MINOR(dev) ((dev) & 0xff)
|
nuclear@90
|
14
|
nuclear@90
|
15
|
nuclear@90
|
16 typedef uint32_t dev_t;
|
nuclear@90
|
17 typedef uint32_t blkid;
|
nuclear@90
|
18
|
nuclear@90
|
19 struct superblock {
|
nuclear@90
|
20 uint32_t magic; /* magic number */
|
nuclear@90
|
21 int ver; /* filesystem version */
|
nuclear@90
|
22 int blksize; /* only BLKSZ supported at the moment */
|
nuclear@90
|
23
|
nuclear@90
|
24 /* total number of blocks */
|
nuclear@90
|
25 unsigned int num_blocks;
|
nuclear@90
|
26 /* inode allocation bitmap start and count */
|
nuclear@90
|
27 blkid ibm_start;
|
nuclear@90
|
28 unsigned int ibm_count;
|
nuclear@90
|
29 /* inode table start and count */
|
nuclear@90
|
30 blkid itbl_start;
|
nuclear@90
|
31 unsigned int itbl_count;
|
nuclear@90
|
32 /* data block allocation bitmap start and count */
|
nuclear@90
|
33 blkid dbm_start;
|
nuclear@90
|
34 unsigned int dbm_count;
|
nuclear@90
|
35 /* data blocks start and count */
|
nuclear@90
|
36 blkid data_start;
|
nuclear@90
|
37 unsigned int data_count;
|
nuclear@90
|
38
|
nuclear@90
|
39 int root_ino; /* root direcotry inode */
|
nuclear@90
|
40
|
nuclear@90
|
41 /* the following are valid only at runtime, ignored on disk */
|
nuclear@90
|
42 uint32_t *ibm; /* memory inode bitmap */
|
nuclear@90
|
43 uint32_t *dbm; /* memory datablock bitmap */
|
nuclear@90
|
44
|
nuclear@90
|
45 } __attribute__((packed));
|
nuclear@90
|
46
|
nuclear@90
|
47
|
nuclear@90
|
48 /* 20 direct blocks + 10 attributes + 2 indirect = 128 bytes per inode */
|
nuclear@90
|
49 #define NDIRBLK 20
|
nuclear@90
|
50 struct inode {
|
nuclear@90
|
51 int ino;
|
nuclear@90
|
52 int uid, gid, mode;
|
nuclear@90
|
53 int nlink;
|
nuclear@90
|
54 dev_t dev;
|
nuclear@90
|
55 uint32_t atime, ctime, mtime;
|
nuclear@90
|
56 uint32_t size;
|
nuclear@90
|
57 blkid blk[NDIRBLK]; /* direct blocks */
|
nuclear@90
|
58 blkid ind; /* indirect */
|
nuclear@90
|
59 blkid dind; /* double-indirect */
|
nuclear@90
|
60 } __attribute__((packed));
|
nuclear@90
|
61
|
nuclear@90
|
62
|
nuclear@90
|
63 int sys_mount(char *mntpt, char *devname, unsigned int flags);
|
nuclear@90
|
64 int sys_umount(char *devname);
|
nuclear@90
|
65
|
nuclear@90
|
66 int sys_open(char *pathname, int flags, unsigned int mode);
|
nuclear@90
|
67 int sys_close(int fd);
|
nuclear@90
|
68
|
nuclear@90
|
69 int sys_read(int fd, void *buf, int sz);
|
nuclear@90
|
70 int sys_write(int fd, void *buf, int sz);
|
nuclear@90
|
71 long sys_lseek(int fd, long offs, int from);
|
nuclear@90
|
72
|
nuclear@90
|
73 int lookup_path(const char *path);
|
nuclear@88
|
74
|
nuclear@89
|
75
|
nuclear@88
|
76 #endif /* FS_H_ */
|