aboutsummaryrefslogtreecommitdiff
path: root/include/kernel
diff options
context:
space:
mode:
authorFranklin Wei <frankhwei536@gmail.com>2015-03-01 14:20:47 -0500
committerFranklin Wei <frankhwei536@gmail.com>2015-03-01 14:20:47 -0500
commitc7252588ebb95f97631e9470778c69afa00c35b5 (patch)
tree06d760878e18f6cddbe4305cddd4d5dfa74529f8 /include/kernel
parentb8f54e63d2b8f8007c580adf2a6034c98a0f2eaa (diff)
downloadkappa-c7252588ebb95f97631e9470778c69afa00c35b5.zip
kappa-c7252588ebb95f97631e9470778c69afa00c35b5.tar.gz
kappa-c7252588ebb95f97631e9470778c69afa00c35b5.tar.bz2
kappa-c7252588ebb95f97631e9470778c69afa00c35b5.tar.xz
Huge restructure
Diffstat (limited to 'include/kernel')
-rw-r--r--include/kernel/heap.h5
-rw-r--r--include/kernel/io.h5
-rw-r--r--include/kernel/log.h3
-rw-r--r--include/kernel/multiboot.h90
-rw-r--r--include/kernel/panic.h1
-rw-r--r--include/kernel/task.c16
-rw-r--r--include/kernel/task.h10
-rw-r--r--include/kernel/version.h2
8 files changed, 132 insertions, 0 deletions
diff --git a/include/kernel/heap.h b/include/kernel/heap.h
new file mode 100644
index 0000000..dfadf36
--- /dev/null
+++ b/include/kernel/heap.h
@@ -0,0 +1,5 @@
+#include <stddef.h>
+void *kmalloc(size_t);
+void *kmalloc_a(size_t);
+void *kmalloc_p(size_t, void**);
+void *kmalloc_ap(size_t, void**);
diff --git a/include/kernel/io.h b/include/kernel/io.h
new file mode 100644
index 0000000..d1177ac
--- /dev/null
+++ b/include/kernel/io.h
@@ -0,0 +1,5 @@
+#include <stdint.h>
+void outb(uint16_t port, uint8_t val);
+void outw(uint16_t port, uint16_t val);
+uint8_t inb(uint16_t port);
+uint16_t inw(uint16_t port);
diff --git a/include/kernel/log.h b/include/kernel/log.h
new file mode 100644
index 0000000..1a28c0d
--- /dev/null
+++ b/include/kernel/log.h
@@ -0,0 +1,3 @@
+void log_putchar(int);
+void log_puts(const char*);
+void log(const char*, ...);
diff --git a/include/kernel/multiboot.h b/include/kernel/multiboot.h
new file mode 100644
index 0000000..e1f7cf0
--- /dev/null
+++ b/include/kernel/multiboot.h
@@ -0,0 +1,90 @@
+#include <stdint.h>
+
+struct multiboot_aout_symbol_table_t
+{
+ uint32_t tabsize;
+ uint32_t strsize;
+ uint32_t addr;
+ uint32_t reserved;
+} __attribute__((packed));
+
+struct multiboot_elf_section_header_table_t
+{
+ uint32_t num;
+ uint32_t size;
+ uint32_t addr;
+ uint32_t shndx;
+} __attribute__((packed));
+
+struct vbe_info_t {
+ uint16_t attributes;
+ uint8_t winA, winB;
+ uint16_t granularity;
+ uint16_t winsize;
+ uint16_t segmentA, segmentB;
+ uint32_t realFctPtr;
+ uint16_t pitch;
+ uint16_t Xres, Yres;
+ uint8_t Wchar, Ychar, planes, bpp, banks;
+ uint8_t memory_model, bank_size, image_pages;
+ uint8_t reserved0;
+ uint8_t red_mask, red_position;
+ uint8_t green_mask, green_position;
+ uint8_t blue_mask, blue_position;
+ uint8_t rsv_mask, rsv_position;
+ uint8_t directcolor_attributes;
+ uint32_t physbase;
+ uint32_t reserved1;
+ uint16_t reserved2;
+} __attribute__((packed));
+
+struct multiboot_info_t
+{
+ /* Multiboot info version number */
+ uint32_t flags;
+
+ /* Available memory from BIOS */
+ uint32_t mem_lower;
+ uint32_t mem_upper;
+
+ /* "root" partition */
+ uint32_t boot_device;
+
+ /* Kernel command line */
+ uint32_t cmdline;
+
+ /* Boot-Module list */
+ uint32_t mods_count;
+ uint32_t mods_addr;
+
+ union
+ {
+ struct multiboot_aout_symbol_table_t aout_sym;
+ struct multiboot_elf_section_header_table_t elf_sec;
+ } u;
+
+ /* Memory Mapping buffer */
+ uint32_t mmap_length;
+ uint32_t mmap_addr;
+
+ /* Drive Info buffer */
+ uint32_t drives_length;
+ uint32_t drives_addr;
+
+ /* ROM configuration table */
+ uint32_t config_table;
+
+ /* Boot Loader Name */
+ uint32_t boot_loader_name;
+
+ /* APM table */
+ uint32_t apm_table;
+
+ /* Video */
+ uint32_t vbe_control_info;
+ uint32_t vbe_mode_info;
+ uint16_t vbe_mode;
+ uint16_t vbe_interface_seg;
+ uint16_t vbe_interface_off;
+ uint16_t vbe_interface_len;
+} __attribute__((packed));
diff --git a/include/kernel/panic.h b/include/kernel/panic.h
new file mode 100644
index 0000000..db53e8e
--- /dev/null
+++ b/include/kernel/panic.h
@@ -0,0 +1 @@
+void panic(const char*, ...);
diff --git a/include/kernel/task.c b/include/kernel/task.c
new file mode 100644
index 0000000..ecc0042
--- /dev/null
+++ b/include/kernel/task.c
@@ -0,0 +1,16 @@
+#include "task.h"
+
+void task_create(struct task_t *task, void (*func)(void), uint32_t flags, uint32_t *pagedir)
+{
+ task->regs.eax = 0;
+ task->regs.ebx = 0;
+ task->regs.ecx = 0;
+ task->regs.edx = 0;
+ task->regs.esi = 0;
+ task->regs.edi = 0;
+ task->regs.eflags = flags;
+ task->regs.eip = (uint32_t)main;
+ task->regs.cr3 = (uint32_t)pagedir;
+ task->regs.esp = kmalloc(0x1000) + 0x1000;
+ task->next = NULL;
+}
diff --git a/include/kernel/task.h b/include/kernel/task.h
new file mode 100644
index 0000000..86beed3
--- /dev/null
+++ b/include/kernel/task.h
@@ -0,0 +1,10 @@
+#include <stdint.h>
+
+struct taskregs_t {
+ uint32_t eax, ebx, ecx, edx, esi, edi, esp, ebp, eip, eflags, cr3;
+};
+
+struct task_t {
+ struct taskregs_t regs;
+ struct task_t *next;
+};
diff --git a/include/kernel/version.h b/include/kernel/version.h
new file mode 100644
index 0000000..8fff367
--- /dev/null
+++ b/include/kernel/version.h
@@ -0,0 +1,2 @@
+#define KAPPA_KERNEL_VERSION "0.0.1-alpha"
+#define KAPPA_KERNEL_CODENAME "Ayatollah's Buybacks"