summaryrefslogtreecommitdiff
path: root/kernel/acpi.c
diff options
context:
space:
mode:
authorMiguel <m.i@gmx.at>2018-09-09 17:28:59 +0200
committerMiguel <m.i@gmx.at>2018-09-09 17:28:59 +0200
commit4cda542d863839c5b0e026ccee297ca5ff3dd9cd (patch)
tree7b8f7734f8f982df82b5c784386232e35a7ced44 /kernel/acpi.c
parent9a4b35fd5a32490f8f15b48f978e7b1fbfdceb2a (diff)
switched to apic/ioapic finally
Diffstat (limited to 'kernel/acpi.c')
-rw-r--r--kernel/acpi.c19
1 files changed, 10 insertions, 9 deletions
diff --git a/kernel/acpi.c b/kernel/acpi.c
index 8b139bf..f424312 100644
--- a/kernel/acpi.c
+++ b/kernel/acpi.c
@@ -1,9 +1,9 @@
#include "kernel.h"
+#include "acpi.h"
+
#include <stdint.h>
-#include "smp.h"
#include "lib/string/string.h"
-
typedef struct acpi_rsdt_struct
{
char sig[4];
@@ -49,14 +49,14 @@ typedef struct
}acpi_madt;
-uint8_t *apci_get_next_entry(uint8_t *addr,smp_processors *procdata)
+static uint8_t *apci_get_next_entry(uint8_t *addr,acpi_information *procdata)
{
//klog("Examining MADT Entry at 0x%08X",addr);
if(*addr==0)
{
- klog("Type 0: LocalAPIC (enabled=%d)",addr[4]&1);
+ klog("Type 0: LocalAPIC (enabled=%d) (id=0x%08X)",addr[4]&1,addr[3]);
// usable
if(addr[4]&1)
{
@@ -90,11 +90,11 @@ uint8_t *apci_get_next_entry(uint8_t *addr,smp_processors *procdata)
}
-void acpi_check_madt(uint32_t *madt,smp_processors *procdata)
+static void acpi_check_madt(uint32_t *madt,acpi_information *procdata)
{
acpi_madt *table=(acpi_madt *)*madt;
-// klog("Looking for MADT Table at %08X.",table);
+// klog("Looking for MADT Table at %08X.",table);
if(!strcmp_l("APIC",table->sig,4))
{
klog("Found MADT Table at 0x%08X",table);
@@ -106,6 +106,7 @@ void acpi_check_madt(uint32_t *madt,smp_processors *procdata)
procdata->local_apic_address=table->apic_local;
klog("Local Apic Address: 0x%08X",table->apic_local);
+
procdata->flags=table->flags;
klog("Flags (Dual 8259): %d",table->flags);
@@ -116,7 +117,7 @@ void acpi_check_madt(uint32_t *madt,smp_processors *procdata)
}
}
-void acpi_read_rsdt(acpi_rsdt *rsdt,smp_processors *procdata)
+static void acpi_read_rsdt(acpi_rsdt *rsdt,acpi_information *procdata)
{
klog("Reading RSDT Table at 0x%08X",rsdt);
@@ -142,7 +143,7 @@ void acpi_read_rsdt(acpi_rsdt *rsdt,smp_processors *procdata)
// 0x7ffff - 0x9ffff (max)
// 0xe0000 - 0xfffff
-bool acpi_find(smp_processors *procdata)
+bool acpi_fill(acpi_information *procdata)
{
klog("Looking for RSDP Table");
char *search=(char *)0x9f000; //will be 16 bit aligned;
@@ -160,7 +161,7 @@ bool acpi_find(smp_processors *procdata)
if(checksum==0)
{
- klog("RSDP Table found at 0x%08X",search);
+ klog("RSD Pointer found at 0x%08X",search);
acpi_rsdp *rsdp=(acpi_rsdp *)search;
acpi_read_rsdt(rsdp->ptr_rsdt,procdata);
return true;