We define IO_APIC_ADDR in <arch/ioapic.h>, let's use it.
[coreboot.git] / src / mainboard / intel / eagleheights / acpi_tables.c
index da642b636f61e776fd98f1152c3c7cf361d47fe9..123ddbcb6b7ce8ee7c11ad27077379f74a186b88 100644 (file)
 #include <string.h>
 #include <console/console.h>
 #include <arch/acpi.h>
+#include <arch/ioapic.h>
 #include <device/device.h>
 #include <device/pci.h>
 #include <device/pci_ids.h>
 #include "ioapic.h"
 
-extern const acpi_header_t AmlCode;
+extern const unsigned char AmlCode[];
 
 unsigned long acpi_fill_mcfg(unsigned long current)
 {
@@ -50,7 +51,7 @@ unsigned long acpi_fill_mcfg(unsigned long current)
        return current;
 }
 
-void acpi_create_intel_hpet(acpi_hpet_t * hpet)
+static void acpi_create_intel_hpet(acpi_hpet_t * hpet)
 {
 #define HPET_ADDR  0xfed00000ULL
        acpi_header_t *header = &(hpet->header);
@@ -84,14 +85,11 @@ void acpi_create_intel_hpet(acpi_hpet_t * hpet)
 
 #define IO_APIC0 2
 #define IO_APIC1 3
-#define IO_APIC0_ADDR  0xfec00000UL
-#define IO_APIC1_ADDR  0xfec10000UL
 
 unsigned long acpi_fill_madt(unsigned long current)
 {
        unsigned int irq_start = 0;
        device_t dev = 0;
-       struct resource* res = NULL;
        unsigned char bus_isa;
 
        /* Local Apic */
@@ -100,9 +98,9 @@ unsigned long acpi_fill_madt(unsigned long current)
        current += acpi_create_madt_lapic((acpi_madt_lapic_t *) current, 2, 1);
 
        /* IOAPIC */
-       current += acpi_create_madt_ioapic((acpi_madt_ioapic_t *) current, IO_APIC0, IO_APIC0_ADDR, irq_start);
+       current += acpi_create_madt_ioapic((acpi_madt_ioapic_t *) current, IO_APIC0, IO_APIC_ADDR, irq_start);
        irq_start += INTEL_IOAPIC_NUM_INTERRUPTS;
-       current += acpi_create_madt_ioapic((acpi_madt_ioapic_t *) current, IO_APIC1, IO_APIC1_ADDR, irq_start);
+       current += acpi_create_madt_ioapic((acpi_madt_ioapic_t *) current, IO_APIC1, IO_APIC_ADDR + 0x10000, irq_start);
        irq_start += INTEL_IOAPIC_NUM_INTERRUPTS;
 
        dev = dev_find_slot(0, PCI_DEVFN(0x1e,0));
@@ -141,7 +139,6 @@ unsigned long acpi_fill_srat(unsigned long current)
 unsigned long write_acpi_tables(unsigned long start)
 {
        unsigned long current;
-       int i;
        acpi_rsdp_t *rsdp;
        acpi_rsdt_t *rsdt;
        acpi_hpet_t *hpet;
@@ -206,9 +203,10 @@ unsigned long write_acpi_tables(unsigned long start)
        acpi_create_facs(facs);
 
        dsdt = (acpi_header_t *) current;
-       current += AmlCode.length;
+       memcpy(dsdt, &AmlCode, sizeof(acpi_header_t));
+       current += dsdt->length;
+       memcpy(dsdt, &AmlCode, dsdt->length);
        ALIGN_CURRENT;
-       memcpy((void *) dsdt, &AmlCode, AmlCode.length);
 
        printk(BIOS_DEBUG, "ACPI:     * DSDT @ %p Length %x\n", dsdt,
                     dsdt->length);