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@93
|
7 #define FS_VER 1
|
nuclear@90
|
8 #define BLKSZ 1024
|
nuclear@90
|
9
|
nuclear@90
|
10 #define SECT_TO_BLK(x) ((x) / (BLKSZ / 512))
|
nuclear@90
|
11
|
nuclear@91
|
12 #define DEVNO(maj, min) ((((maj) & 0xff) << 8) | ((min) & 0xff))
|
nuclear@90
|
13 #define DEV_MAJOR(dev) (((dev) >> 8) & 0xff)
|
nuclear@90
|
14 #define DEV_MINOR(dev) ((dev) & 0xff)
|
nuclear@90
|
15
|
nuclear@90
|
16
|
nuclear@90
|
17 typedef uint32_t dev_t;
|
nuclear@90
|
18 typedef uint32_t blkid;
|
nuclear@90
|
19
|
nuclear@94
|
20
|
nuclear@94
|
21 /* 20 direct blocks + 10 attributes + 2 indirect = 128 bytes per inode */
|
nuclear@94
|
22 #define NDIRBLK 20
|
nuclear@94
|
23 struct inode {
|
nuclear@94
|
24 int ino;
|
nuclear@94
|
25 int uid, gid, mode;
|
nuclear@94
|
26 int nlink;
|
nuclear@94
|
27 dev_t dev;
|
nuclear@94
|
28 uint32_t atime, ctime, mtime;
|
nuclear@94
|
29 uint32_t size;
|
nuclear@94
|
30 blkid blk[NDIRBLK]; /* direct blocks */
|
nuclear@94
|
31 blkid ind; /* indirect */
|
nuclear@94
|
32 blkid dind; /* double-indirect */
|
nuclear@94
|
33 } __attribute__((packed));
|
nuclear@94
|
34
|
nuclear@94
|
35
|
nuclear@90
|
36 struct superblock {
|
nuclear@90
|
37 uint32_t magic; /* magic number */
|
nuclear@90
|
38 int ver; /* filesystem version */
|
nuclear@90
|
39 int blksize; /* only BLKSZ supported at the moment */
|
nuclear@90
|
40
|
nuclear@90
|
41 /* total number of blocks */
|
nuclear@90
|
42 unsigned int num_blocks;
|
nuclear@90
|
43 /* inode allocation bitmap start and count */
|
nuclear@90
|
44 blkid ibm_start;
|
nuclear@90
|
45 unsigned int ibm_count;
|
nuclear@90
|
46 /* inode table start and count */
|
nuclear@90
|
47 blkid itbl_start;
|
nuclear@90
|
48 unsigned int itbl_count;
|
nuclear@93
|
49 /* block allocation bitmap start and count */
|
nuclear@93
|
50 blkid bm_start;
|
nuclear@93
|
51 unsigned int bm_count;
|
nuclear@90
|
52
|
nuclear@94
|
53 int root_ino; /* root direcotry inode number */
|
nuclear@90
|
54
|
nuclear@90
|
55 /* the following are valid only at runtime, ignored on disk */
|
nuclear@93
|
56 uint32_t *ibm; /* in-memory inode bitmap */
|
nuclear@93
|
57 uint32_t *bm; /* in-memory block bitmap */
|
nuclear@94
|
58 struct inode *root; /* in-memory root inode */
|
nuclear@90
|
59
|
nuclear@90
|
60 } __attribute__((packed));
|
nuclear@90
|
61
|
nuclear@90
|
62
|
nuclear@90
|
63
|
nuclear@93
|
64 struct filesys {
|
nuclear@93
|
65 struct block_device *bdev;
|
nuclear@93
|
66
|
nuclear@93
|
67 struct superblock *sb;
|
nuclear@93
|
68
|
nuclear@93
|
69 struct filesys *next;
|
nuclear@93
|
70 };
|
nuclear@93
|
71
|
nuclear@93
|
72 /* defined in fs.c */
|
nuclear@93
|
73 int openfs(struct filesys *fs, dev_t dev);
|
nuclear@94
|
74 void closefs(struct filesys *fs);
|
nuclear@93
|
75 int find_inode(const char *path);
|
nuclear@93
|
76
|
nuclear@93
|
77 /* defined in fs_sys.c */
|
nuclear@90
|
78 int sys_mount(char *mntpt, char *devname, unsigned int flags);
|
nuclear@90
|
79 int sys_umount(char *devname);
|
nuclear@90
|
80
|
nuclear@90
|
81 int sys_open(char *pathname, int flags, unsigned int mode);
|
nuclear@90
|
82 int sys_close(int fd);
|
nuclear@90
|
83
|
nuclear@90
|
84 int sys_read(int fd, void *buf, int sz);
|
nuclear@90
|
85 int sys_write(int fd, void *buf, int sz);
|
nuclear@90
|
86 long sys_lseek(int fd, long offs, int from);
|
nuclear@90
|
87
|
nuclear@89
|
88
|
nuclear@88
|
89 #endif /* FS_H_ */
|