#include <console/console.h>
#include <arch/smp/mpspec.h>
+#include <arch/ioapic.h>
#include <device/pci.h>
#include <string.h>
#include <stdint.h>
-#include <../../../southbridge/via/vt8237r/vt8237r.h>
-
-
-#define bus_isa 2
+#include "southbridge/via/vt8237r/vt8237r.h"
static void *smp_write_config_table(void *v)
{
static const char sig[4] = "PCMP";
- static const char oem[8] = "VIA ";
+ static const char oem[8] = "COREBOOT";
static const char productid[12] = "PC2500 ";
struct mp_config_table *mc;
- int bus_num;
+ int isa_bus;
mc = (void *)(((char *)v) + SMP_FLOATING_TABLE_LEN);
memset(mc, 0, sizeof(*mc));
mc->reserved = 0;
smp_write_processors(mc);
-
-
-/* Bus: Bus ID Type*/
- /* define numbers for pci and isa bus */
- for (bus_num = 0; bus_num < bus_isa; bus_num++) {
- smp_write_bus(mc, bus_num, "PCI ");
- }
- smp_write_bus(mc, bus_isa, "ISA ");
-
+ mptable_write_buses(mc, NULL, &isa_bus);
/* I/O APICs: APIC ID Version State Address*/
- smp_write_ioapic(mc, VT8237R_APIC_ID, 0x20, VT8237R_APIC_BASE);
+ smp_write_ioapic(mc, VT8237R_APIC_ID, 0x20, IO_APIC_ADDR);
/* Now, assemble the table. */
-
- smp_write_intsrc(mc, mp_ExtINT,
- MP_IRQ_TRIGGER_EDGE | MP_IRQ_POLARITY_HIGH,
- bus_isa, 0x0, VT8237R_APIC_ID, 0x0);
-
-#define ISA_INT(intr, pin) \
- smp_write_intsrc(mc, mp_INT, MP_IRQ_TRIGGER_EDGE|MP_IRQ_POLARITY_HIGH, \
- bus_isa, (intr), VT8237R_APIC_ID, (pin))
-
- ISA_INT(1, 1);
- ISA_INT(0, 2);
- ISA_INT(3, 3);
- ISA_INT(4, 4);
-
- ISA_INT(6, 6);
- ISA_INT(7, 7);
- ISA_INT(8, 8);
- ISA_INT(9, 9);
-
- ISA_INT(0xc, 0xc);
- ISA_INT(0xd, 0xd);
- ISA_INT(0xe, 0xe);
- ISA_INT(0xf, 0xf);
+ mptable_add_isa_interrupts(mc, isa_bus, VT8237R_APIC_ID, 0);
#define PCI_INT(bus, dev, fn, pin) \
smp_write_intsrc(mc, mp_INT, MP_IRQ_TRIGGER_LEVEL|MP_IRQ_POLARITY_LOW, \