patch-2.4.27 linux-2.4.27/arch/x86_64/kernel/acpi.c
Next file: linux-2.4.27/arch/x86_64/kernel/bluesmoke.c
Previous file: linux-2.4.27/arch/x86_64/kernel/Makefile
Back to the patch index
Back to the overall index
- Lines: 130
- Date:
2004-08-07 16:26:04.628345709 -0700
- Orig file:
linux-2.4.26/arch/x86_64/kernel/acpi.c
- Orig date:
2004-04-14 06:05:28.000000000 -0700
diff -urN linux-2.4.26/arch/x86_64/kernel/acpi.c linux-2.4.27/arch/x86_64/kernel/acpi.c
@@ -56,7 +56,10 @@
/* --------------------------------------------------------------------------
Boot-time Configuration
-------------------------------------------------------------------------- */
-
+#ifdef CONFIG_ACPI_PCI
+int acpi_noirq __initdata; /* skip ACPI IRQ initialization */
+int acpi_pci_disabled __initdata; /* skip ACPI PCI scan and IRQ initialization */
+#endif
int acpi_ht __initdata = 1; /* enable HT */
enum acpi_irq_model_id acpi_irq_model;
@@ -119,11 +122,40 @@
#endif
}
+#ifdef CONFIG_ACPI_MMCONFIG
+
+u32 pci_mmcfg_base_addr;
+
+static int __init
+acpi_parse_mcfg(unsigned long phys_addr,
+ unsigned long size)
+{
+ struct acpi_table_mcfg *mcfg = NULL;
+
+ if (!phys_addr || !size)
+ return -EINVAL;
+
+ mcfg = (struct acpi_table_mcfg *) __acpi_map_table(phys_addr, size);
+ if (!mcfg) {
+ printk(KERN_WARNING PREFIX "Unable to map MCFG\n");
+ return -ENODEV;
+ }
+
+ if (mcfg->base_reserved) {
+ printk(KERN_ERR PREFIX "MMCONFIG not in low 4GB of memory\n");
+ return -ENODEV;
+ }
+
+ pci_mmcfg_base_addr = mcfg->base_address;
+
+ return 0;
+}
+#endif /* CONFIG_ACPI_MMCONFIG */
+
#ifdef CONFIG_X86_LOCAL_APIC
static u64 acpi_lapic_addr __initdata = APIC_DEFAULT_PHYS_BASE;
-
static int __init
acpi_parse_madt (
unsigned long phys_addr,
@@ -330,7 +362,7 @@
#endif /*CONFIG_X86_IO_APIC && CONFIG_ACPI_INTERPRETER*/
-
+#ifdef CONFIG_HPET_TIMER
static int __init
acpi_parse_hpet (
unsigned long phys_addr,
@@ -351,6 +383,7 @@
return 0;
}
+#endif /* CONFIG_HPET_TIMER */
#ifdef CONFIG_ACPI_BUS
/*
@@ -457,17 +490,16 @@
return result;
}
-#ifdef CONFIG_X86_LOCAL_APIC
+#ifdef CONFIG_ACPI_MMCONFIG
+ result = acpi_table_parse(ACPI_MCFG, acpi_parse_mcfg);
+ if (result < 0) {
+ printk(KERN_ERR PREFIX "Error %d parsing MCFG\n", result);
+ } else if (result > 1) {
+ printk(KERN_WARNING PREFIX "Multiple MCFG tables exist\n");
+ }
+#endif
- /* this check should not need to be here -lenb */
- /* If "nolocalapic" is specified don't look further */
- extern int apic_disabled;
- if (apic_disabled) {
- printk(KERN_INFO PREFIX "Skipping Local/IO-APIC probe due to \"nolocalapic\"\n");
- return 0;
- }
- printk(KERN_INFO PREFIX "Parsing Local APIC info in MADT\n");
-
+#ifdef CONFIG_X86_LOCAL_APIC
/*
* MADT
@@ -573,9 +605,6 @@
return result;
}
- /* Build a default routing table for legacy (ISA) interrupts. */
- mp_config_acpi_legacy_irqs();
-
/* Record sci_int for use when looking for MADT sci_int override */
acpi_table_parse(ACPI_FADT, acpi_parse_fadt);
@@ -593,6 +622,9 @@
if (!acpi_sci_override_gsi)
acpi_sci_ioapic_setup(acpi_fadt.sci_int, 0, 0);
+ /* Fill in identity legacy mapings where no override */
+ mp_config_acpi_legacy_irqs();
+
result = acpi_table_parse_madt(ACPI_MADT_NMI_SRC, acpi_parse_nmi_src);
if (result < 0) {
printk(KERN_ERR PREFIX "Error parsing NMI SRC entry\n");
@@ -609,9 +641,11 @@
if (acpi_lapic && acpi_ioapic)
smp_found_config = 1;
+#ifdef CONFIG_HPET_TIMER
result = acpi_table_parse(ACPI_HPET, acpi_parse_hpet);
if (result < 0)
printk("ACPI: no HPET table found (%d).\n", result);
+#endif
#endif /*CONFIG_X86_IO_APIC && CONFIG_ACPI_INTERPRETER*/
FUNET's LINUX-ADM group, linux-adm@nic.funet.fi
TCL-scripts by Sam Shen (who was at: slshen@lbl.gov)