toaruos/include/system.h

118 lines
3.4 KiB
C
Raw Normal View History

2011-01-15 20:01:19 -05:00
#ifndef __SYSTEM_H
#define __SYSTEM_H
/* Types */
2011-01-17 18:22:48 -06:00
#define NULL ((void *)0UL)
typedef unsigned long uintptr_t;
typedef long size_t;
typedef unsigned int uint32_t;
/* Unimportant Kernel Strings */
#define KERNEL_UNAME "ToAruOS"
#define KERNEL_VERSION_STRING "0.0.1"
2011-01-17 18:22:48 -06:00
2011-01-15 20:01:19 -05:00
/* Kernel Main */
2011-01-17 18:22:48 -06:00
extern void *memcpy(void * restrict dest, const void * restrict src, size_t count);
extern void *memset(void *dest, int val, size_t count);
2011-01-15 20:01:19 -05:00
extern unsigned short *memsetw(unsigned short *dest, unsigned short val, int count);
extern int strlen(const char *str);
extern unsigned char inportb (unsigned short _port);
extern void outportb (unsigned short _port, unsigned char _data);
2011-01-20 19:49:35 -06:00
/* Panic */
#define HALT_AND_CATCH_FIRE(mesg) halt_and_catch_fire(mesg, __FILE__, __LINE__)
#define ASSERT(statement) ((statement) ? (void)0 : assert_failed(__FILE__, __LINE__, #statement))
void halt_and_catch_fire(char * error_message, const char * file, int line);
void assert_failed(const char *file, uint32_t line, const char *desc);
2011-01-15 20:01:19 -05:00
/* VGA driver */
extern void cls();
extern void putch(unsigned char c);
2011-01-16 11:56:44 -05:00
extern void puts(char *str);
2011-01-15 20:01:19 -05:00
extern void settextcolor(unsigned char forecolor, unsigned char backcolor);
extern void resettextcolor();
2011-01-15 20:01:19 -05:00
extern void init_video();
2011-01-15 20:59:11 -05:00
/* GDT */
extern void gdt_install();
extern void gdt_set_gate(int num, unsigned long base, unsigned long limit, unsigned char access, unsigned char gran);
2011-01-15 22:41:17 -05:00
/* IDT */
extern void idt_install();
extern void idt_set_gate(unsigned char num, unsigned long base, unsigned short sel, unsigned char flags);
/* Registers */
struct regs {
unsigned int gs, fs, es, ds;
unsigned int edi, esi, ebp, esp, ebx, edx, ecx, eax;
unsigned int int_no, err_code;
unsigned int eip, cs, eflags, useresp, ss;
};
2011-01-17 18:22:48 -06:00
typedef void (*irq_handler_t)(struct regs *);
2011-01-16 11:56:44 -05:00
/* ISRS */
extern void isrs_install();
2011-01-20 19:49:35 -06:00
extern void isrs_install_handler(int isrs, irq_handler_t);
extern void isrs_uninstall_handler(int isrs);
2011-01-16 11:56:44 -05:00
2011-01-15 23:17:42 -05:00
/* Interrupt Handlers */
extern void irq_install();
2011-01-17 18:22:48 -06:00
extern void irq_install_handler(int irq, irq_handler_t);
2011-01-15 23:17:42 -05:00
extern void irq_uninstall_handler(int irq);
2011-01-16 11:56:44 -05:00
/* Timer */
extern void timer_install();
2011-01-17 18:22:48 -06:00
extern long timer_ticks;
2011-01-16 11:56:44 -05:00
extern void timer_wait(int ticks);
2011-01-16 13:45:51 -05:00
/* Keyboard */
extern void keyboard_install();
extern void keyboard_wait();
2011-01-17 10:24:55 -06:00
/* kprintf */
extern void kprintf(const char *fmt, ...);
2011-01-20 19:49:35 -06:00
/* Memory Management */
extern uintptr_t placement_pointer;
extern uintptr_t kmalloc_real(size_t size, int align, uintptr_t * phys);
extern uintptr_t kmalloc(size_t size);
extern uintptr_t kvmalloc(size_t size);
extern uintptr_t kmalloc_p(size_t size, uintptr_t * phys);
extern uintptr_t kvmalloc_p(size_t size, uintptr_t * phys);
typedef struct page {
uint32_t present : 1;
uint32_t rw : 1;
uint32_t user : 1;
uint32_t accessed: 1;
uint32_t dirty : 1;
uint32_t unused : 7;
uint32_t frame : 20;
} page_t;
typedef struct page_table {
page_t pages[1024];
} page_table_t;
typedef struct page_directory {
page_table_t *tables[1024]; /* 1024 pointers to page tables... */
uintptr_t physical_tables[1024]; /* Physical addresses of the tables */
uintptr_t physical_address; /* The physical address of physical_tables */
} page_directory_t;
page_directory_t * kernel_directory;
page_directory_t * current_directory;
extern void paging_install(uint32_t memsize);
extern void switch_page_directory(page_directory_t *new);
extern page_t *get_page(uintptr_t address, int make, page_directory_t *dir);
extern void page_fault(struct regs *r);
2011-01-15 20:01:19 -05:00
#endif