diff options
Diffstat (limited to 'src/aplos.h')
-rw-r--r-- | src/aplos.h | 47 |
1 files changed, 44 insertions, 3 deletions
diff --git a/src/aplos.h b/src/aplos.h index ad9109b..bed0d7a 100644 --- a/src/aplos.h +++ b/src/aplos.h @@ -3,6 +3,8 @@ #include <stdarg.h> #include <uchar.h> +#define PAGE_SIZE 4096 + #define nelem(arr) (sizeof(arr)/sizeof(*(arr))) struct framebuffer @@ -19,14 +21,20 @@ struct memmap uint64_t size; }; +struct ioapic_info +{ + uint32_t base; + uint32_t interrupt_base; +}; + struct boot_info { struct framebuffer framebuffer; - + struct ioapic_info ioapic; uint64_t memmap_count; struct memmap *memmaps; - uint64_t physbase; + uint64_t rsdp; }; struct cpu_regs @@ -63,8 +71,33 @@ struct cpu_regs uint16_t gs; }; +struct ioapic_redirection +{ + uint8_t vector; + uint8_t delivery_mode; + uint8_t destination_mode; + uint8_t delivery_status; + uint8_t pin_polarity; + uint8_t remote_irr; + uint8_t trigger_mode; + uint8_t mask; + uint8_t destination; + + uint64_t reserved; +}; + +/* acpi.c */ +void setup_acpi(uint64_t, struct ioapic_info *); + +/* apic.c */ +void setup_apic(struct ioapic_info *); +void apic_end_of_interrupt(void); +struct ioapic_redirection read_redirection(uint8_t); +void write_redirection(uint8_t, struct ioapic_redirection); + /* boot.c */ uint64_t cpu_count(void); +uint8_t boot_apic_id(void); /* descriptors */ void setup_descriptors(void); @@ -76,6 +109,10 @@ void assert(bool); void font_init(void); void font_draw(char8_t *, uint32_t, uint32_t, uint32_t, uint32_t); +/* keyboard.c */ +void setup_keyboard(void); +bool keyboard_interrupt_handler(uint32_t); + /* main.c */ void main(struct boot_info *); @@ -88,12 +125,15 @@ void set_gdt(struct table_reg *, uint64_t, uint64_t, uint64_t); void set_idt(struct table_reg *); uint64_t get_cr2(void); uint64_t get_cr3(void); -extern void (*isr_stubs[32])(void); +extern void (*isr_stubs[33])(void); void dump_regs(struct cpu_regs *); +uint64_t get_msr(uint32_t); +uint8_t in_uint8(uint8_t); /* paging.c */ void setup_paging(struct boot_info *); bool page_fault_handler(uint32_t); +uint64_t map_page(uint64_t, uint64_t, bool); /* panic.c */ [[noreturn]] void panic(void); @@ -117,3 +157,4 @@ void write_uint32_le(uint8_t *, uint32_t); void write_uint64_le(uint8_t *, uint64_t); int memcmp(const void *, const void *, size_t); void memset(void *, uint8_t, size_t); +void memcpy(void *, void *, size_t); |