diff cos/kernel/kernel.h @ 32:3a6a9b929db0

Added initial ramdisk and some virtual file system functions
author windel
date Fri, 13 Jan 2012 18:18:17 +0100
parents 0148f55bfe24
children 8012221dd740
line wrap: on
line diff
--- a/cos/kernel/kernel.h	Tue Jan 10 20:40:35 2012 +0100
+++ b/cos/kernel/kernel.h	Fri Jan 13 18:18:17 2012 +0100
@@ -34,7 +34,8 @@
   uint32_t strsize, addr, reserved;
 };
 
-struct multiboot_info {
+typedef struct multiboot_info_tag 
+{
   uint32_t flags; // Multiboot flags / version
   uint32_t mem_lower; // available memory from BIOS
   uint32_t mem_upper;
@@ -48,14 +49,23 @@
 
   uint32_t mmap_length;
   uint32_t mmap_addr;
-};
+} multiboot_info_t;
 
-struct memory_map {
+typedef struct memory_map_tag 
+{
   uint32_t size;
-  uint32_t baselow, basehigh;
-  uint32_t lenlow, lenhigh;
+  uint64_t base;
+  uint64_t length;
   uint32_t type;
-};
+} __attribute__((packed)) multiboot_memory_map_t;
+
+typedef struct
+{
+   uint32_t mod_start;
+   uint32_t mod_end;
+   uint32_t cmdline;
+   uint32_t pad;
+} multiboot_module_t;
 
 // Memory manager structures:
 typedef struct
@@ -195,6 +205,48 @@
   console_t *console;
 } task_t;
 
+/* Filesystem related types: */
+struct fs_node_tag;
+struct fs_dirent_tag;
+
+typedef uint64_t (*read_type_t)(struct fs_node_tag*, uint64_t, uint64_t, uint8_t*);
+typedef uint64_t (*write_type_t)(struct fs_node_tag*, uint64_t, uint64_t, uint8_t*);
+typedef void (*open_type_t)(struct fs_node_tag*);
+typedef void (*close_type_t)(struct fs_node_tag*);
+typedef struct fs_dirent_tag* (*readdir_type_t)(struct fs_node_tag*, int);
+
+typedef struct fs_node_tag
+{
+   char name[129];
+   uint64_t flags;
+   uint64_t length;
+   uint64_t inode;
+   // Accessor functions:
+   read_type_t read;
+   write_type_t write;
+   open_type_t open;
+   close_type_t close;
+   readdir_type_t readdir;
+} fs_node_t;
+
+typedef struct fs_dirent_tag
+{
+   char name[65];
+   uint64_t inode;
+} fs_dirent_t;
+
+#define FS_FILE 0x1
+#define FS_DIRECTORY 0x2
+
+uint64_t read_fs(fs_node_t *node, uint64_t offset, uint64_t size, uint8_t *buffer);
+uint64_t write_fs(fs_node_t *node, uint64_t offset, uint64_t size, uint8_t *buffer);
+void open_fs(fs_node_t *node);
+void close_fs(fs_node_t *node);
+fs_dirent_t* readdir_fs(fs_node_t *node, int i);
+
+// Initial ramdisk functions:
+fs_node_t* initialize_initrd(uint64_t location);
+
 // Variable argument list things:
 #define va_start(v,l)	__builtin_va_start(v,l)
 #define va_end(v)	__builtin_va_end(v)
@@ -261,7 +313,7 @@
 void doCPUID(int eax, int *ebx, int *ecx, int *edx);
 
 // Keyboard driver:
-void keyboardDriverUpdate(unsigned char scancode);
+void keyboardDriverUpdate(void);
 void getline(char *buffer, int len);
 
 // Timer: