summaryrefslogtreecommitdiff
path: root/kernel/src/arch/i686/acpi.c
diff options
context:
space:
mode:
Diffstat (limited to 'kernel/src/arch/i686/acpi.c')
-rw-r--r--kernel/src/arch/i686/acpi.c18
1 files changed, 13 insertions, 5 deletions
diff --git a/kernel/src/arch/i686/acpi.c b/kernel/src/arch/i686/acpi.c
index 7807558..17155ce 100644
--- a/kernel/src/arch/i686/acpi.c
+++ b/kernel/src/arch/i686/acpi.c
@@ -1,3 +1,5 @@
+#include "arch/i686/mboot.h"
+#include "arch/i686/paging.h"
#include <panic.h>
#include <string.h>
#include <stdbool.h>
@@ -73,20 +75,25 @@ static void read_s5_addr(void) {
}
}
-void acpi_init(void *ptr) {
-
- struct RootSystemDescriptionPointer *rsdp = ptr;
+void acpi_init(void) {
+ struct BootTag *tag;
+ if (!get_boot_tag(ID_RSDP, &tag)) {
+ panic("Could not find RSDP");
+ }
+ struct RootSystemDescriptionPointer *rsdp = tag->data.rsdp;
if (!checksum((uint8_t*) rsdp, sizeof(struct RootSystemDescriptionPointer))) {
panic("RSDP checksum failed to validate");
}
-
uintptr_t rsdt_ptr = rsdp->rsdt_address;
rsdt = (void *) rsdt_ptr;
+ ident_map_addr(rsdt, 1000);
if (!checksum((uint8_t*) &rsdt->header, rsdt->header.length)) {
panic("RSDT checksum failed to validate");
}
-
+ return;
+
fadt = find_fadt();
+
if (fadt == NULL) {
panic("Could not find FADT");
}
@@ -98,6 +105,7 @@ void acpi_init(void *ptr) {
read_s5_addr();
outb(fadt->smi_command_port,fadt->acpi_enable);
+ panic("C");
}
void acpi_poweroff(void) {