kern

view src/fs.h @ 93:083849df660b

split the system call implementations out of fs.c into fs_sys.c
author John Tsiombikas <nuclear@member.fsf.org>
date Sun, 11 Dec 2011 10:17:58 +0200
parents f83f50c17c3b
children b3351d018ac6
line source
1 #ifndef FS_H_
2 #define FS_H_
4 #include <inttypes.h>
6 #define MAGIC 0xccf5ccf5
7 #define FS_VER 1
8 #define BLKSZ 1024
10 #define SECT_TO_BLK(x) ((x) / (BLKSZ / 512))
12 #define DEVNO(maj, min) ((((maj) & 0xff) << 8) | ((min) & 0xff))
13 #define DEV_MAJOR(dev) (((dev) >> 8) & 0xff)
14 #define DEV_MINOR(dev) ((dev) & 0xff)
17 typedef uint32_t dev_t;
18 typedef uint32_t blkid;
20 struct superblock {
21 uint32_t magic; /* magic number */
22 int ver; /* filesystem version */
23 int blksize; /* only BLKSZ supported at the moment */
25 /* total number of blocks */
26 unsigned int num_blocks;
27 /* inode allocation bitmap start and count */
28 blkid ibm_start;
29 unsigned int ibm_count;
30 /* inode table start and count */
31 blkid itbl_start;
32 unsigned int itbl_count;
33 /* block allocation bitmap start and count */
34 blkid bm_start;
35 unsigned int bm_count;
37 int root_ino; /* root direcotry inode */
39 /* the following are valid only at runtime, ignored on disk */
40 uint32_t *ibm; /* in-memory inode bitmap */
41 uint32_t *bm; /* in-memory block bitmap */
43 } __attribute__((packed));
46 /* 20 direct blocks + 10 attributes + 2 indirect = 128 bytes per inode */
47 #define NDIRBLK 20
48 struct inode {
49 int ino;
50 int uid, gid, mode;
51 int nlink;
52 dev_t dev;
53 uint32_t atime, ctime, mtime;
54 uint32_t size;
55 blkid blk[NDIRBLK]; /* direct blocks */
56 blkid ind; /* indirect */
57 blkid dind; /* double-indirect */
58 } __attribute__((packed));
61 struct filesys {
62 struct block_device *bdev;
63 struct partition part;
65 struct superblock *sb;
67 struct filesys *next;
68 };
70 /* defined in fs.c */
71 int openfs(struct filesys *fs, dev_t dev);
72 int find_inode(const char *path);
74 /* defined in fs_sys.c */
75 int sys_mount(char *mntpt, char *devname, unsigned int flags);
76 int sys_umount(char *devname);
78 int sys_open(char *pathname, int flags, unsigned int mode);
79 int sys_close(int fd);
81 int sys_read(int fd, void *buf, int sz);
82 int sys_write(int fd, void *buf, int sz);
83 long sys_lseek(int fd, long offs, int from);
86 #endif /* FS_H_ */