Mercurial > lcfOS
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: