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