summaryrefslogtreecommitdiff
path: root/src/aplos.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/aplos.h')
-rw-r--r--src/aplos.h47
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);