kern

annotate src/fs.h @ 91:f83f50c17c3b

continuing with the fs added strtol and strstr to klibc
author John Tsiombikas <nuclear@member.fsf.org>
date Fri, 09 Dec 2011 15:29:54 +0200
parents 7ff2b4971216
children 083849df660b
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_ */