summaryrefslogtreecommitdiff
path: root/include
diff options
context:
space:
mode:
Diffstat (limited to 'include')
-rw-r--r--include/kernel/fs.h46
-rw-r--r--include/kernel/hd.h7
-rw-r--r--include/kernel/sys.h33
-rw-r--r--include/sys/stat.h42
-rw-r--r--include/unistd.h18
5 files changed, 117 insertions, 29 deletions
diff --git a/include/kernel/fs.h b/include/kernel/fs.h
index 8f21110..a2b0086 100644
--- a/include/kernel/fs.h
+++ b/include/kernel/fs.h
@@ -4,10 +4,14 @@
#include <stdint.h>
#include <sys/types.h>
-#define BLOCK_SIZE 1024
+#define NRSUPER 8
#define NRFILE 128
#define NROPEN 32
+/* these shouldn't change */
+#define BLOCK_SIZE 1024
+#define SUPER_MAGIC 0x137F
+
struct file {
uint16_t f_mode;
uint16_t f_flags;
@@ -15,4 +19,44 @@ struct file {
off_t f_pos;
};
+struct super_block {
+ uint16_t s_ninodes;
+ uint16_t s_nzones;
+ uint16_t s_imap_blocks;
+ uint16_t s_zmap_blocks;
+ uint16_t s_firstdatazone;
+ uint16_t s_log_zone_size;
+ uint32_t s_max_size;
+ uint16_t s_magic;
+ /* loaded in memory only */
+ struct s_buff *s_imap[8];
+ struct s_buff *s_zmap[8];
+ uint16_t s_dev;
+ uint16_t s_dirt;
+ uint16_t s_start;
+ uint16_t s_super;
+ uint16_t s_imap_off;
+ uint16_t s_zmap_off;
+ uint16_t s_inode_off;
+} __attribute__((packed));
+
+struct m_inode {
+ uint16_t i_mode;
+ uint16_t i_uid;
+ uint32_t i_size;
+ uint32_t i_mtime;
+ uint8_t i_gid;
+ uint8_t i_nlinks;
+ uint16_t i_zone[9];
+} __attribute__((packed));
+
+extern struct super_block sblocks[NRSUPER];
+
+size_t block_read(void*, size_t , size_t);
+size_t block_write(void*, size_t , size_t);
+
+void mount_root(void);
+
+void fs_init(void);
+
#endif
diff --git a/include/kernel/hd.h b/include/kernel/hd.h
index 292b92e..2a2f3c6 100644
--- a/include/kernel/hd.h
+++ b/include/kernel/hd.h
@@ -2,8 +2,11 @@
#define _HD_H
#include <stdint.h>
+#include <sys/types.h>
-int hd_read(void*, uint32_t, uint8_t);
-int hd_write(void*, uint32_t, uint8_t);
+void hd_init(void);
+
+size_t hd_read_block(void*, size_t , size_t);
+size_t hd_write_block(void*, size_t , size_t);
#endif
diff --git a/include/kernel/sys.h b/include/kernel/sys.h
index 1b8be8e..95cfb79 100644
--- a/include/kernel/sys.h
+++ b/include/kernel/sys.h
@@ -1,31 +1,30 @@
typedef int (*syscall_t) (void);
-extern int sys_time(void);
-extern int sys_time(void);
-extern int sys_getpid(void);
-extern int sys_getpdir(void);
-extern int sys_signal(void);
extern int sys_alarm(void);
-extern int sys_pause(void);
extern int sys_ctty(void);
-extern int sys_read(void);
-extern int sys_write(void);
+extern int sys_getpdir(void);
+extern int sys_getpid(void);
extern int sys_kill(void);
extern int sys_panic(void);
+extern int sys_pause(void);
+extern int sys_read(void);
+extern int sys_signal(void);
+extern int sys_time(void);
+extern int sys_write(void);
extern int sys_dummy(void);
syscall_t call_table[256] = {
- [0] = &sys_time,
- [1] = &sys_getpid,
+ [0] = &sys_alarm,
+ [1] = &sys_ctty,
[2] = &sys_getpdir,
- [3] = &sys_signal,
- [4] = &sys_alarm,
- [5] = &sys_pause,
- [6] = &sys_ctty,
+ [3] = &sys_getpid,
+ [4] = &sys_kill,
+ [5] = &sys_panic,
+ [6] = &sys_pause,
[7] = &sys_read,
- [8] = &sys_write,
- [9] = &sys_kill,
- [10] = &sys_panic,
+ [8] = &sys_signal,
+ [9] = &sys_time,
+ [10] = &sys_write,
[11] = &sys_dummy,
[12] = &sys_dummy,
[13] = &sys_dummy,
diff --git a/include/sys/stat.h b/include/sys/stat.h
new file mode 100644
index 0000000..fab014c
--- /dev/null
+++ b/include/sys/stat.h
@@ -0,0 +1,42 @@
+#ifndef _SYS_STAT_H
+#define _SYS_STAT_H
+
+/* permission bits */
+
+#define S_IRWXU 0700
+#define S_IRUSR 0400
+#define S_IWUSR 0200
+#define S_IXUSR 0100
+
+#define S_IRWXG 0070
+#define S_IRGRP 0040
+#define S_IWGRP 0020
+#define S_IXGRP 0010
+
+#define S_IRWXO 0007
+#define S_IROTH 0004
+#define S_IWOTH 0002
+#define S_IXOTH 0001
+
+/* inode type bits */
+
+#define S_IFMT 0170000
+#define S_IFSOCK 0140000
+#define S_IFLNK 0120000
+#define S_IFREG 0100000
+#define S_IFBLK 0060000
+#define S_IFDIR 0040000
+#define S_IFCHR 0020000
+#define S_IFIFO 0010000
+
+/* inode type conditionals */
+
+#define S_ISBLK(m) (((m) & S_IFMT) == S_IFBLK)
+#define S_ISCHR(m) (((m) & S_IFMT) == S_IFCHR)
+#define S_ISDIR(m) (((m) & S_IFMT) == S_IFDIR)
+#define S_ISFIFO(m) (((m) & S_IFMT) == S_IFIFO)
+#define S_ISREG(m) (((m) & S_IFMT) == S_IFREG)
+#define S_ISLNK(m) (((m) & S_IFMT) == S_IFLNK)
+#define S_ISSOCK(m) (((m) & S_IFMT) == S_IFSOCK)
+
+#endif
diff --git a/include/unistd.h b/include/unistd.h
index cc0f766..47e1621 100644
--- a/include/unistd.h
+++ b/include/unistd.h
@@ -10,17 +10,17 @@ typedef int32_t ssize_t;
typedef int16_t pid_t;
-#define __SYS_time 0
-#define __SYS_getpid 1
+#define __SYS_alarm 0
+#define __SYS_ctty 1
#define __SYS_getpdir 2
-#define __SYS_signal 3
-#define __SYS_alarm 4
-#define __SYS_pause 5
-#define __SYS_ctty 6
+#define __SYS_getpid 3
+#define __SYS_kill 4
+#define __SYS_panic 5
+#define __SYS_pause 6
#define __SYS_read 7
-#define __SYS_write 8
-#define __SYS_kill 9
-#define __SYS_panic 10
+#define __SYS_signal 8
+#define __SYS_time 9
+#define __SYS_write 10
#define _syscall0(type, name) \
type name(void) { \