kern

view src/fs.h @ 95:ec62cbe00b55

whatever
author John Tsiombikas <nuclear@member.fsf.org>
date Sun, 11 Dec 2011 21:15:35 +0200
parents b3351d018ac6
children 07fe6a614185
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;
21 /* 20 direct blocks + 10 attributes + 2 indirect = 128 bytes per inode */
22 #define NDIRBLK 20
23 struct inode {
24 int ino;
25 int uid, gid, mode;
26 int nlink;
27 dev_t dev;
28 uint32_t atime, ctime, mtime;
29 uint32_t size;
30 blkid blk[NDIRBLK]; /* direct blocks */
31 blkid ind; /* indirect */
32 blkid dind; /* double-indirect */
33 } __attribute__((packed));
36 struct superblock {
37 uint32_t magic; /* magic number */
38 int ver; /* filesystem version */
39 int blksize; /* only BLKSZ supported at the moment */
41 /* total number of blocks */
42 unsigned int num_blocks;
43 /* total number of inodes */
44 unsigned int num_inodes;
46 /* inode allocation bitmap start and count */
47 blkid ibm_start;
48 unsigned int ibm_count;
49 /* inode table start and count */
50 blkid itbl_start;
51 unsigned int itbl_count;
52 /* block allocation bitmap start and count */
53 blkid bm_start;
54 unsigned int bm_count;
56 int root_ino; /* root direcotry inode number */
58 /* the following are valid only at runtime, ignored on disk */
59 uint32_t *ibm; /* in-memory inode bitmap */
60 uint32_t *bm; /* in-memory block bitmap */
61 struct inode *root; /* in-memory root inode */
63 } __attribute__((packed));
67 struct filesys {
68 struct block_device *bdev;
70 struct superblock *sb;
72 struct filesys *next;
73 };
75 /* defined in fs.c */
76 int openfs(struct filesys *fs, dev_t dev);
77 void closefs(struct filesys *fs);
78 int find_inode(const char *path);
80 /* defined in fs_sys.c */
81 int sys_mount(char *mntpt, char *devname, unsigned int flags);
82 int sys_umount(char *devname);
84 int sys_open(char *pathname, int flags, unsigned int mode);
85 int sys_close(int fd);
87 int sys_read(int fd, void *buf, int sz);
88 int sys_write(int fd, void *buf, int sz);
89 long sys_lseek(int fd, long offs, int from);
92 #endif /* FS_H_ */