The following fixes a circular depency problem between
drivers/acpi/ and arch/{i386,ia64}/kernel/acpi.c.  I think the
problem only occurs if you manually tweak the build to make
acpi.o as a module, but it still should be fixed.  This patch
also fixes the Makefiles in drivers/acpi so that they do not
blow up if you try to build drivers/acpi as a module (these
are corrections to some variable names, not a new functional
addition to the Makefiles).

        I have deliberately not included the patch to change
CONFIG_ACPI into a tristate because I wonder if there is some problem
with acpi.o as a module that I am not aware of that is the reason
that CONFIG_ACPI in the stock kernels is configured as a boolean, even
though there is module initialization code in drivers/acpi, that seems
to work just fine, at least for my purposes of deactivating the
power after a shutdown.  Does anybody know if there some known problem
with acpi.o as a module?

        I have attached my kernel patch below.  If this meets with
no obections, can somebody bless this and "send" it to Linus for
integration?

On Tue, Dec 19, 2000 at 06:00:15PM -0800, Grover, Andrew wrote:
> I'm thinking arch/i386/kernel/acpi.c should just go away, yes?
> 
> Its purpose is probably better served by an ifdef, like you mentioned.
[...]
> > From: Adam J. Richter [mailto:[EMAIL PROTECTED]]
> > 
> >     Although the stock linux-2.4.0-test13pre3 does not allow
> > one to build the acpi interpreter as a loadable module, I had
> > tweaked the Makefiles in previous kernels to do this (the supporting
> > code is there and it seemed to work, at least for shutting off the
> > power after a shutdown).  Unfortunately, in 2.4.0-test13pre3, this
> > is no harder to do, because there is a circular dependency:
> > 
> > drivers/acpi/ references acpi_get_rsdp_ptr in arch/i386/kernel/acpi.c,
> >                             and
> > arch/i386/kernel/acpi.c references acp_find_root_pointer in 
> > drivers/acpi/.
> > 
> > 
> >     I would like to recommend that the contents of
> > arch/i{386,a64}/kernel/acpi.c be merged back somewhere in 
> > drivers/acpi/,
> > and just selected with Makefile options, ifdefs, or perhaps runtime
> > options (if the ia64 code is potentionally useable to an i386 kernel
> > that find itself running on an ia64 CPU, which will probably 
> > be the case
> > with most Linux distributions initially installed on ia64 hardware).
> > 
> >     If need be, I would be willing to at least write a quick and
> > dirty #ifdef-based version of this proposed change.

-- 
Adam J. Richter     __     ______________   4880 Stevens Creek Blvd, Suite 104
[EMAIL PROTECTED]     \ /                  San Jose, California 95129-1034
+1 408 261-6630         | g g d r a s i l   United States of America
fax +1 408 261-6631      "Free Software For The Rest Of Us."
diff --new-file -r -u linux-2.4.0-test13-pre3/drivers/acpi/Makefile 
linux/drivers/acpi/Makefile
--- linux-2.4.0-test13-pre3/drivers/acpi/Makefile       Wed Dec 20 00:49:37 2000
+++ linux/drivers/acpi/Makefile Wed Dec 20 00:03:27 2000
@@ -3,6 +3,7 @@
 #
 
 O_TARGET := acpi.o
+obj-m := $(O_TARGET)
 
 export-objs := ksyms.o
 
@@ -25,13 +26,23 @@
 
 subdir-$(CONFIG_ACPI) += $(acpi-subdirs)
 
-obj-$(CONFIG_ACPI) := $(patsubst %,%.o,$(acpi-subdirs))
-obj-$(CONFIG_ACPI) += os.o ksyms.o
+obj-y := $(patsubst %,%.o,$(acpi-subdirs))
+obj-y += os.o ksyms.o
+
+$(patsubst %,%.o,$(acpi-subdirs)):
+       $(MAKE) $(MFLAGS) -C $$(basename $@ .o) ../$@
 
 ifdef CONFIG_ACPI_KERNEL_CONFIG
-  obj-$(CONFIG_ACPI) += acpiconf.o osconf.o
+  obj-y += acpiconf.o osconf.o
 else
-  obj-$(CONFIG_ACPI) += driver.o cmbatt.o cpu.o ec.o ksyms.o sys.o table.o
+  obj-y += driver.o cmbatt.o cpu.o ec.o ksyms.o sys.o table.o
+endif
+
+ifdef CONFIG_X86
+  obj-y += rsdp_x86.o
+endif
+ifdef CONFIG_IA64
+  obj-y += rsdp_ia64.o
 endif
 
 include $(TOPDIR)/Rules.make
diff --new-file -r -u linux-2.4.0-test13-pre3/drivers/acpi/common/Makefile 
linux/drivers/acpi/common/Makefile
--- linux-2.4.0-test13-pre3/drivers/acpi/common/Makefile        Wed Dec 20 00:49:37 
2000
+++ linux/drivers/acpi/common/Makefile  Tue Dec 19 08:58:42 2000
@@ -4,7 +4,7 @@
 
 O_TARGET := ../$(shell basename `pwd`).o
 
-obj-$(CONFIG_ACPI) := $(patsubst %.c,%.o,$(wildcard *.c))
+obj-y := $(patsubst %.c,%.o,$(wildcard *.c))
 
 EXTRA_CFLAGS += -I../include
 
diff --new-file -r -u linux-2.4.0-test13-pre3/drivers/acpi/dispatcher/Makefile 
linux/drivers/acpi/dispatcher/Makefile
--- linux-2.4.0-test13-pre3/drivers/acpi/dispatcher/Makefile    Wed Dec 20 00:49:37 
2000
+++ linux/drivers/acpi/dispatcher/Makefile      Tue Dec 19 08:58:42 2000
@@ -4,7 +4,7 @@
 
 O_TARGET := ../$(shell basename `pwd`).o
 
-obj-$(CONFIG_ACPI) := $(patsubst %.c,%.o,$(wildcard *.c))
+obj-y := $(patsubst %.c,%.o,$(wildcard *.c))
 
 EXTRA_CFLAGS += -I../include
 
diff --new-file -r -u linux-2.4.0-test13-pre3/drivers/acpi/events/Makefile 
linux/drivers/acpi/events/Makefile
--- linux-2.4.0-test13-pre3/drivers/acpi/events/Makefile        Wed Dec 20 00:49:37 
2000
+++ linux/drivers/acpi/events/Makefile  Tue Dec 19 08:58:42 2000
@@ -4,7 +4,7 @@
 
 O_TARGET := ../$(shell basename `pwd`).o
 
-obj-$(CONFIG_ACPI) := $(patsubst %.c,%.o,$(wildcard *.c))
+obj-y := $(patsubst %.c,%.o,$(wildcard *.c))
 
 EXTRA_CFLAGS += -I../include
 
diff --new-file -r -u linux-2.4.0-test13-pre3/drivers/acpi/hardware/Makefile 
linux/drivers/acpi/hardware/Makefile
--- linux-2.4.0-test13-pre3/drivers/acpi/hardware/Makefile      Wed Dec 20 00:49:37 
2000
+++ linux/drivers/acpi/hardware/Makefile        Tue Dec 19 08:58:42 2000
@@ -4,7 +4,7 @@
 
 O_TARGET := ../$(shell basename `pwd`).o
 
-obj-$(CONFIG_ACPI) := $(patsubst %.c,%.o,$(wildcard *.c))
+obj-y := $(patsubst %.c,%.o,$(wildcard *.c))
 
 EXTRA_CFLAGS += -I../include
 
diff --new-file -r -u linux-2.4.0-test13-pre3/drivers/acpi/interpreter/Makefile 
linux/drivers/acpi/interpreter/Makefile
--- linux-2.4.0-test13-pre3/drivers/acpi/interpreter/Makefile   Wed Dec 20 00:49:37 
2000
+++ linux/drivers/acpi/interpreter/Makefile     Tue Dec 19 08:58:42 2000
@@ -4,7 +4,7 @@
 
 O_TARGET := ../$(shell basename `pwd`).o
 
-obj-$(CONFIG_ACPI) := $(patsubst %.c,%.o,$(wildcard *.c))
+obj-y := $(patsubst %.c,%.o,$(wildcard *.c))
 
 EXTRA_CFLAGS += -I../include
 
diff --new-file -r -u linux-2.4.0-test13-pre3/drivers/acpi/ksyms.c 
linux/drivers/acpi/ksyms.c
--- linux-2.4.0-test13-pre3/drivers/acpi/ksyms.c        Wed Dec 20 00:49:37 2000
+++ linux/drivers/acpi/ksyms.c  Tue Dec 19 09:58:21 2000
@@ -90,3 +90,5 @@
 EXPORT_SYMBOL(acpi_get_processor_cx_info);
 EXPORT_SYMBOL(acpi_set_processor_sleep_state);
 EXPORT_SYMBOL(acpi_processor_sleep);
+
+EXPORT_SYMBOL(acpi_find_root_pointer);
diff --new-file -r -u linux-2.4.0-test13-pre3/drivers/acpi/namespace/Makefile 
linux/drivers/acpi/namespace/Makefile
--- linux-2.4.0-test13-pre3/drivers/acpi/namespace/Makefile     Wed Dec 20 00:49:37 
2000
+++ linux/drivers/acpi/namespace/Makefile       Tue Dec 19 08:58:42 2000
@@ -4,7 +4,7 @@
 
 O_TARGET := ../$(shell basename `pwd`).o
 
-obj-$(CONFIG_ACPI) := $(patsubst %.c,%.o,$(wildcard *.c))
+obj-y := $(patsubst %.c,%.o,$(wildcard *.c))
 
 EXTRA_CFLAGS += -I../include
 
diff --new-file -r -u linux-2.4.0-test13-pre3/drivers/acpi/parser/Makefile 
linux/drivers/acpi/parser/Makefile
--- linux-2.4.0-test13-pre3/drivers/acpi/parser/Makefile        Wed Dec 20 00:49:37 
2000
+++ linux/drivers/acpi/parser/Makefile  Tue Dec 19 08:58:43 2000
@@ -4,7 +4,7 @@
 
 O_TARGET := ../$(shell basename `pwd`).o
 
-obj-$(CONFIG_ACPI) := $(patsubst %.c,%.o,$(wildcard *.c))
+obj-y := $(patsubst %.c,%.o,$(wildcard *.c))
 
 EXTRA_CFLAGS += -I../include
 
diff --new-file -r -u linux-2.4.0-test13-pre3/drivers/acpi/resources/Makefile 
linux/drivers/acpi/resources/Makefile
--- linux-2.4.0-test13-pre3/drivers/acpi/resources/Makefile     Wed Dec 20 00:49:37 
2000
+++ linux/drivers/acpi/resources/Makefile       Tue Dec 19 08:58:43 2000
@@ -4,7 +4,7 @@
 
 O_TARGET := ../$(shell basename `pwd`).o
 
-obj-$(CONFIG_ACPI) := $(patsubst %.c,%.o,$(wildcard *.c))
+obj-y := $(patsubst %.c,%.o,$(wildcard *.c))
 
 EXTRA_CFLAGS += -I../include
 
diff --new-file -r -u linux-2.4.0-test13-pre3/drivers/acpi/rsdp_ia64.c 
linux/drivers/acpi/rsdp_ia64.c
--- linux-2.4.0-test13-pre3/drivers/acpi/rsdp_ia64.c    Wed Dec 31 16:00:00 1969
+++ linux/drivers/acpi/rsdp_ia64.c      Wed Dec 20 00:03:28 2000
@@ -0,0 +1,289 @@
+/*
+ * Advanced Configuration and Power Interface 
+ *
+ * Based on 'ACPI Specification 1.0b' February 2, 1999 and 
+ * 'IA-64 Extensions to ACPI Specification' Revision 0.6
+ * 
+ * Copyright (C) 1999 VA Linux Systems
+ * Copyright (C) 1999,2000 Walt Drummond <[EMAIL PROTECTED]>
+ */
+
+#include <linux/config.h>
+
+#include <linux/init.h>
+#include <linux/kernel.h>
+#include <linux/sched.h>
+#include <linux/smp.h>
+#include <linux/string.h>
+#include <linux/types.h>
+#include <linux/irq.h>
+
+#include <asm/acpi-ext.h>
+#include <asm/efi.h>
+#include <asm/io.h>
+#include <asm/iosapic.h>
+#include <asm/machvec.h>
+#include <asm/page.h>
+#ifdef CONFIG_ACPI_KERNEL_CONFIG
+# include <asm/acpikcfg.h>
+#endif
+
+#undef ACPI_DEBUG              /* Guess what this does? */
+
+/* These are ugly but will be reclaimed by the kernel */
+int __initdata available_cpus;
+int __initdata total_cpus;
+
+void (*pm_idle)(void);
+
+/*
+ * Identify usable CPU's and remember them for SMP bringup later.
+ */
+static void __init
+acpi_lsapic(char *p) 
+{
+       int add = 1;
+
+       acpi_entry_lsapic_t *lsapic = (acpi_entry_lsapic_t *) p;
+
+       if ((lsapic->flags & LSAPIC_PRESENT) == 0) 
+               return;
+
+       printk("      CPU %d (%.04x:%.04x): ", total_cpus, lsapic->eid, lsapic->id);
+
+       if ((lsapic->flags & LSAPIC_ENABLED) == 0) {
+               printk("Disabled.\n");
+               add = 0;
+       } else if (lsapic->flags & LSAPIC_PERFORMANCE_RESTRICTED) {
+               printk("Performance Restricted; ignoring.\n");
+               add = 0;
+       }
+       
+#ifdef CONFIG_SMP
+       smp_boot_data.cpu_phys_id[total_cpus] = -1;
+#endif
+       if (add) {
+               printk("Available.\n");
+               available_cpus++;
+#ifdef CONFIG_SMP
+               smp_boot_data.cpu_phys_id[total_cpus] = (lsapic->id << 8) | 
+lsapic->eid;
+#endif /* CONFIG_SMP */
+       }
+       total_cpus++;
+}
+
+/*
+ * Configure legacy IRQ information in iosapic_vector
+ */
+static void __init
+acpi_legacy_irq(char *p)
+{
+       /*
+        * This is not good.  ACPI is not necessarily limited to CONFIG_IA64_DIG, yet
+        * ACPI does not necessarily imply IOSAPIC either.  Perhaps there should be
+        * a means for platform_setup() to register ACPI handlers?
+        */
+#ifdef CONFIG_IA64_IRQ_ACPI
+       acpi_entry_int_override_t *legacy = (acpi_entry_int_override_t *) p;
+       unsigned char vector; 
+       int i;
+
+       vector = isa_irq_to_vector(legacy->isa_irq);
+
+       /*
+        * Clobber any old pin mapping.  It may be that it gets replaced later on
+        */
+       for (i = 0; i < IA64_MAX_VECTORED_IRQ; i++) {
+               if (i == vector) 
+                       continue;
+               if (iosapic_pin(i) == iosapic_pin(vector))
+                       iosapic_pin(i) = 0xff;
+        }
+
+       iosapic_pin(vector) = legacy->pin;
+       iosapic_bus(vector) = BUS_ISA;  /* This table only overrides the ISA devices */
+       iosapic_busdata(vector) = 0;
+       
+       /* 
+        * External timer tick is special... 
+        */
+       if (vector != TIMER_IRQ)
+               iosapic_dmode(vector) = IO_SAPIC_LOWEST_PRIORITY;
+       else 
+               iosapic_dmode(vector) = IO_SAPIC_FIXED;
+       
+       /* See MPS 1.4 section 4.3.4 */
+       switch (legacy->flags) {
+       case 0x5:
+               iosapic_polarity(vector) = IO_SAPIC_POL_HIGH;
+               iosapic_trigger(vector) = IO_SAPIC_EDGE;
+               break;
+       case 0x8:
+               iosapic_polarity(vector) = IO_SAPIC_POL_LOW;
+               iosapic_trigger(vector) = IO_SAPIC_EDGE;
+               break;
+       case 0xd:
+               iosapic_polarity(vector) = IO_SAPIC_POL_HIGH;
+               iosapic_trigger(vector) = IO_SAPIC_LEVEL;
+               break;
+       case 0xf:
+               iosapic_polarity(vector) = IO_SAPIC_POL_LOW;
+               iosapic_trigger(vector) = IO_SAPIC_LEVEL;
+               break;
+       default:
+               printk("    ACPI Legacy IRQ 0x%02x: Unknown flags 0x%x\n", 
+legacy->isa_irq,
+                      legacy->flags);
+               break;
+       }
+
+# ifdef ACPI_DEBUG
+       printk("Legacy ISA IRQ %x -> IA64 Vector %x IOSAPIC Pin %x Active %s %s 
+Trigger\n", 
+              legacy->isa_irq, vector, iosapic_pin(vector), 
+              ((iosapic_polarity(vector) == IO_SAPIC_POL_LOW) ? "Low" : "High"),
+              ((iosapic_trigger(vector) == IO_SAPIC_LEVEL) ? "Level" : "Edge"));
+# endif /* ACPI_DEBUG */
+#endif /* CONFIG_IA64_IRQ_ACPI */
+}
+
+/*
+ * Info on platform interrupt sources: NMI. PMI, INIT, etc.
+ */
+static void __init
+acpi_platform(char *p)
+{
+       acpi_entry_platform_src_t *plat = (acpi_entry_platform_src_t *) p;
+
+       printk("PLATFORM: IOSAPIC %x -> Vector %lx on CPU %.04u:%.04u\n",
+              plat->iosapic_vector, plat->global_vector, plat->eid, plat->id);
+}
+
+/*
+ * Parse the ACPI Multiple SAPIC Table
+ */
+static void __init
+acpi_parse_msapic(acpi_sapic_t *msapic)
+{
+       char *p, *end;
+
+       /* Base address of IPI Message Block */
+       ipi_base_addr = (unsigned long) ioremap(msapic->interrupt_block, 0);
+
+       p = (char *) (msapic + 1);
+       end = p + (msapic->header.length - sizeof(acpi_sapic_t));
+
+       while (p < end) {
+               
+               switch (*p) {
+               case ACPI_ENTRY_LOCAL_SAPIC:
+                       acpi_lsapic(p);
+                       break;
+       
+               case ACPI_ENTRY_IO_SAPIC:
+                       platform_register_iosapic((acpi_entry_iosapic_t *) p);
+                       break;
+
+               case ACPI_ENTRY_INT_SRC_OVERRIDE:
+                       acpi_legacy_irq(p);
+                       break;
+               
+               case ACPI_ENTRY_PLATFORM_INT_SOURCE:
+                       acpi_platform(p);
+                       break;
+               
+               default:
+                       break;
+               }
+
+               /* Move to next table entry. */
+#define BAD_ACPI_TABLE
+#ifdef BAD_ACPI_TABLE
+               /*
+                * Some prototype Lion's have a bad ACPI table
+                * requiring this fix.  Without this fix, those
+                * machines crash during bootup.
+                */
+               if (p[1] == 0)
+                       p = end;
+               else
+#endif
+                       p += p[1];
+       }
+
+       /* Make bootup pretty */
+       printk("      %d CPUs available, %d CPUs total\n", available_cpus, total_cpus);
+}
+
+int __init 
+acpi_parse(acpi_rsdp_t *rsdp)
+{
+       acpi_rsdt_t *rsdt;
+       acpi_desc_table_hdr_t *hdrp;
+       long tables, i;
+
+       if (!rsdp) {
+               printk("Uh-oh, no ACPI Root System Description Pointer table!\n");
+               return 0;
+       }
+
+       if (strncmp(rsdp->signature, ACPI_RSDP_SIG, ACPI_RSDP_SIG_LEN)) {
+               printk("Uh-oh, ACPI RSDP signature incorrect!\n");
+               return 0;
+       }
+
+       rsdp->rsdt = __va(rsdp->rsdt);
+       rsdt = rsdp->rsdt;
+       if (strncmp(rsdt->header.signature, ACPI_RSDT_SIG, ACPI_RSDT_SIG_LEN)) {
+               printk("Uh-oh, ACPI RDST signature incorrect!\n");
+               return 0;
+       }
+
+       printk("ACPI: %.6s %.8s %d.%d\n", rsdt->header.oem_id, 
+rsdt->header.oem_table_id, 
+              rsdt->header.oem_revision >> 16, rsdt->header.oem_revision & 0xffff);
+       
+#ifdef CONFIG_ACPI_KERNEL_CONFIG
+       acpi_cf_init(rsdp);
+#endif
+
+       tables = (rsdt->header.length - sizeof(acpi_desc_table_hdr_t)) / 8;
+       for (i = 0; i < tables; i++) {
+               hdrp = (acpi_desc_table_hdr_t *) __va(rsdt->entry_ptrs[i]);
+
+               /* Only interested int the MSAPIC table for now ... */
+               if (strncmp(hdrp->signature, ACPI_SAPIC_SIG, ACPI_SAPIC_SIG_LEN) != 0)
+                       continue;
+
+               acpi_parse_msapic((acpi_sapic_t *) hdrp);
+       }
+
+#ifdef CONFIG_ACPI_KERNEL_CONFIG
+       acpi_cf_terminate();
+#endif
+
+#ifdef CONFIG_SMP
+       if (available_cpus == 0) {
+               printk("ACPI: Found 0 CPUS; assuming 1\n");
+               available_cpus = 1; /* We've got at least one of these, no? */
+       }
+       smp_boot_data.cpu_count = available_cpus;
+#endif
+       return 1;
+}
+
+const char *
+acpi_get_sysname (void)
+{       
+       /* the following should go away once we have an ACPI parser: */
+#ifdef CONFIG_IA64_GENERIC
+       return "hpsim";
+#else
+# if defined (CONFIG_IA64_HP_SIM)
+       return "hpsim";
+# elif defined (CONFIG_IA64_SGI_SN1)
+       return "sn1";
+# elif defined (CONFIG_IA64_DIG)
+       return "dig";
+# else
+#      error Unknown platform.  Fix acpi.c.
+# endif
+#endif
+}
diff --new-file -r -u linux-2.4.0-test13-pre3/drivers/acpi/rsdp_x86.c 
linux/drivers/acpi/rsdp_x86.c
--- linux-2.4.0-test13-pre3/drivers/acpi/rsdp_x86.c     Wed Dec 31 16:00:00 1969
+++ linux/drivers/acpi/rsdp_x86.c       Wed Dec 20 00:03:28 2000
@@ -0,0 +1,53 @@
+/*
+ *  acpi.c - Linux ACPI arch-specific functions
+ *
+ *  Copyright (C) 1999-2000 Andrew Henroid
+ *
+ *  This program is free software; you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation; either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program; if not, write to the Free Software
+ *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ */
+
+/*
+ * Changes:
+ * Arnaldo Carvalho de Melo <[EMAIL PROTECTED]> - 2000/08/31
+ * - check copy*user return
+ * - get rid of check_region
+ * - get rid of verify_area
+ * Arnaldo Carvalho de Melo <[EMAIL PROTECTED]> - 2000/09/28
+ * - do proper release on failure in acpi_claim_ioports and acpi_init
+ * Andrew Grover <[EMAIL PROTECTED]> - 2000/11/13
+ * - Took out support for user-level interpreter. ACPI 2.0 changes preclude
+ *   its maintenance.
+ */
+
+#include <linux/config.h>
+#include <linux/module.h>
+#include <linux/init.h>
+#include <linux/pm.h>
+
+#define _LINUX
+#include <linux/acpi.h>
+/* Is there a better way to include this? */
+#include <../drivers/acpi/include/acpi.h>
+
+ACPI_PHYSICAL_ADDRESS
+acpi_get_rsdp_ptr()
+{
+       ACPI_PHYSICAL_ADDRESS rsdp_phys;
+
+       if(ACPI_SUCCESS(acpi_find_root_pointer(&rsdp_phys)))
+               return rsdp_phys;
+       else
+               return 0;
+}
diff --new-file -r -u linux-2.4.0-test13-pre3/drivers/acpi/tables/Makefile 
linux/drivers/acpi/tables/Makefile
--- linux-2.4.0-test13-pre3/drivers/acpi/tables/Makefile        Wed Dec 20 00:49:37 
2000
+++ linux/drivers/acpi/tables/Makefile  Tue Dec 19 08:58:43 2000
@@ -4,7 +4,7 @@
 
 O_TARGET := ../$(shell basename `pwd`).o
 
-obj-$(CONFIG_ACPI) := $(patsubst %.c,%.o,$(wildcard *.c))
+obj-y := $(patsubst %.c,%.o,$(wildcard *.c))
 
 EXTRA_CFLAGS += -I../include
 
--- linux-2.4.0-test13-pre3/arch/i386/kernel/Makefile   Wed Dec 20 00:49:36 2000
+++ linux/arch/i386/kernel/Makefile     Wed Dec 20 00:03:27 2000
@@ -40,6 +40,5 @@
 obj-$(CONFIG_X86_LOCAL_APIC)   += apic.o
 obj-$(CONFIG_X86_IO_APIC)      += io_apic.o mpparse.o
 obj-$(CONFIG_X86_VISWS_APIC)   += visws_apic.o
-obj-$(CONFIG_ACPI)     += acpi.o
 
 include $(TOPDIR)/Rules.make
--- linux-2.4.0-test13-pre3/arch/ia64/kernel/Makefile   Mon Oct  9 17:54:53 2000
+++ linux/arch/ia64/kernel/Makefile     Wed Dec 20 00:52:33 2000
@@ -9,7 +9,7 @@
 
 all: kernel.o head.o init_task.o
 
-obj-y := acpi.o entry.o gate.o efi.o efi_stub.o irq.o irq_ia64.o irq_sapic.o ivt.o    
         \
+obj-y := entry.o gate.o efi.o efi_stub.o irq.o irq_ia64.o irq_sapic.o ivt.o           
+ \
         machvec.o pal.o pci-dma.o process.o perfmon.o ptrace.o sal.o semaphore.o 
setup.o       \
         signal.o sys_ia64.o traps.o time.o unaligned.o unwind.o
 
--- linux-2.4.0-test13-pre3/arch/i386/kernel/acpi.c     Wed Dec 20 00:49:36 2000
+++ /dev/null   Wed Dec 31 16:00:00 1969
@@ -1,53 +0,0 @@
-/*
- *  acpi.c - Linux ACPI arch-specific functions
- *
- *  Copyright (C) 1999-2000 Andrew Henroid
- *
- *  This program is free software; you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation; either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program; if not, write to the Free Software
- *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
- */
-
-/*
- * Changes:
- * Arnaldo Carvalho de Melo <[EMAIL PROTECTED]> - 2000/08/31
- * - check copy*user return
- * - get rid of check_region
- * - get rid of verify_area
- * Arnaldo Carvalho de Melo <[EMAIL PROTECTED]> - 2000/09/28
- * - do proper release on failure in acpi_claim_ioports and acpi_init
- * Andrew Grover <[EMAIL PROTECTED]> - 2000/11/13
- * - Took out support for user-level interpreter. ACPI 2.0 changes preclude
- *   its maintenance.
- */
-
-#include <linux/config.h>
-#include <linux/module.h>
-#include <linux/init.h>
-#include <linux/pm.h>
-
-#define _LINUX
-#include <linux/acpi.h>
-/* Is there a better way to include this? */
-#include <../drivers/acpi/include/acpi.h>
-
-ACPI_PHYSICAL_ADDRESS
-acpi_get_rsdp_ptr()
-{
-       ACPI_PHYSICAL_ADDRESS rsdp_phys;
-
-       if(ACPI_SUCCESS(acpi_find_root_pointer(&rsdp_phys)))
-               return rsdp_phys;
-       else
-               return 0;
-}
--- linux-2.4.0-test13-pre3/arch/ia64/kernel/acpi.c     Mon Oct  9 17:54:53 2000
+++ /dev/null   Wed Dec 31 16:00:00 1969
@@ -1,289 +0,0 @@
-/*
- * Advanced Configuration and Power Interface 
- *
- * Based on 'ACPI Specification 1.0b' February 2, 1999 and 
- * 'IA-64 Extensions to ACPI Specification' Revision 0.6
- * 
- * Copyright (C) 1999 VA Linux Systems
- * Copyright (C) 1999,2000 Walt Drummond <[EMAIL PROTECTED]>
- */
-
-#include <linux/config.h>
-
-#include <linux/init.h>
-#include <linux/kernel.h>
-#include <linux/sched.h>
-#include <linux/smp.h>
-#include <linux/string.h>
-#include <linux/types.h>
-#include <linux/irq.h>
-
-#include <asm/acpi-ext.h>
-#include <asm/efi.h>
-#include <asm/io.h>
-#include <asm/iosapic.h>
-#include <asm/machvec.h>
-#include <asm/page.h>
-#ifdef CONFIG_ACPI_KERNEL_CONFIG
-# include <asm/acpikcfg.h>
-#endif
-
-#undef ACPI_DEBUG              /* Guess what this does? */
-
-/* These are ugly but will be reclaimed by the kernel */
-int __initdata available_cpus;
-int __initdata total_cpus;
-
-void (*pm_idle)(void);
-
-/*
- * Identify usable CPU's and remember them for SMP bringup later.
- */
-static void __init
-acpi_lsapic(char *p) 
-{
-       int add = 1;
-
-       acpi_entry_lsapic_t *lsapic = (acpi_entry_lsapic_t *) p;
-
-       if ((lsapic->flags & LSAPIC_PRESENT) == 0) 
-               return;
-
-       printk("      CPU %d (%.04x:%.04x): ", total_cpus, lsapic->eid, lsapic->id);
-
-       if ((lsapic->flags & LSAPIC_ENABLED) == 0) {
-               printk("Disabled.\n");
-               add = 0;
-       } else if (lsapic->flags & LSAPIC_PERFORMANCE_RESTRICTED) {
-               printk("Performance Restricted; ignoring.\n");
-               add = 0;
-       }
-       
-#ifdef CONFIG_SMP
-       smp_boot_data.cpu_phys_id[total_cpus] = -1;
-#endif
-       if (add) {
-               printk("Available.\n");
-               available_cpus++;
-#ifdef CONFIG_SMP
-               smp_boot_data.cpu_phys_id[total_cpus] = (lsapic->id << 8) | 
lsapic->eid;
-#endif /* CONFIG_SMP */
-       }
-       total_cpus++;
-}
-
-/*
- * Configure legacy IRQ information in iosapic_vector
- */
-static void __init
-acpi_legacy_irq(char *p)
-{
-       /*
-        * This is not good.  ACPI is not necessarily limited to CONFIG_IA64_DIG, yet
-        * ACPI does not necessarily imply IOSAPIC either.  Perhaps there should be
-        * a means for platform_setup() to register ACPI handlers?
-        */
-#ifdef CONFIG_IA64_IRQ_ACPI
-       acpi_entry_int_override_t *legacy = (acpi_entry_int_override_t *) p;
-       unsigned char vector; 
-       int i;
-
-       vector = isa_irq_to_vector(legacy->isa_irq);
-
-       /*
-        * Clobber any old pin mapping.  It may be that it gets replaced later on
-        */
-       for (i = 0; i < IA64_MAX_VECTORED_IRQ; i++) {
-               if (i == vector) 
-                       continue;
-               if (iosapic_pin(i) == iosapic_pin(vector))
-                       iosapic_pin(i) = 0xff;
-        }
-
-       iosapic_pin(vector) = legacy->pin;
-       iosapic_bus(vector) = BUS_ISA;  /* This table only overrides the ISA devices */
-       iosapic_busdata(vector) = 0;
-       
-       /* 
-        * External timer tick is special... 
-        */
-       if (vector != TIMER_IRQ)
-               iosapic_dmode(vector) = IO_SAPIC_LOWEST_PRIORITY;
-       else 
-               iosapic_dmode(vector) = IO_SAPIC_FIXED;
-       
-       /* See MPS 1.4 section 4.3.4 */
-       switch (legacy->flags) {
-       case 0x5:
-               iosapic_polarity(vector) = IO_SAPIC_POL_HIGH;
-               iosapic_trigger(vector) = IO_SAPIC_EDGE;
-               break;
-       case 0x8:
-               iosapic_polarity(vector) = IO_SAPIC_POL_LOW;
-               iosapic_trigger(vector) = IO_SAPIC_EDGE;
-               break;
-       case 0xd:
-               iosapic_polarity(vector) = IO_SAPIC_POL_HIGH;
-               iosapic_trigger(vector) = IO_SAPIC_LEVEL;
-               break;
-       case 0xf:
-               iosapic_polarity(vector) = IO_SAPIC_POL_LOW;
-               iosapic_trigger(vector) = IO_SAPIC_LEVEL;
-               break;
-       default:
-               printk("    ACPI Legacy IRQ 0x%02x: Unknown flags 0x%x\n", 
legacy->isa_irq,
-                      legacy->flags);
-               break;
-       }
-
-# ifdef ACPI_DEBUG
-       printk("Legacy ISA IRQ %x -> IA64 Vector %x IOSAPIC Pin %x Active %s %s 
Trigger\n", 
-              legacy->isa_irq, vector, iosapic_pin(vector), 
-              ((iosapic_polarity(vector) == IO_SAPIC_POL_LOW) ? "Low" : "High"),
-              ((iosapic_trigger(vector) == IO_SAPIC_LEVEL) ? "Level" : "Edge"));
-# endif /* ACPI_DEBUG */
-#endif /* CONFIG_IA64_IRQ_ACPI */
-}
-
-/*
- * Info on platform interrupt sources: NMI. PMI, INIT, etc.
- */
-static void __init
-acpi_platform(char *p)
-{
-       acpi_entry_platform_src_t *plat = (acpi_entry_platform_src_t *) p;
-
-       printk("PLATFORM: IOSAPIC %x -> Vector %lx on CPU %.04u:%.04u\n",
-              plat->iosapic_vector, plat->global_vector, plat->eid, plat->id);
-}
-
-/*
- * Parse the ACPI Multiple SAPIC Table
- */
-static void __init
-acpi_parse_msapic(acpi_sapic_t *msapic)
-{
-       char *p, *end;
-
-       /* Base address of IPI Message Block */
-       ipi_base_addr = (unsigned long) ioremap(msapic->interrupt_block, 0);
-
-       p = (char *) (msapic + 1);
-       end = p + (msapic->header.length - sizeof(acpi_sapic_t));
-
-       while (p < end) {
-               
-               switch (*p) {
-               case ACPI_ENTRY_LOCAL_SAPIC:
-                       acpi_lsapic(p);
-                       break;
-       
-               case ACPI_ENTRY_IO_SAPIC:
-                       platform_register_iosapic((acpi_entry_iosapic_t *) p);
-                       break;
-
-               case ACPI_ENTRY_INT_SRC_OVERRIDE:
-                       acpi_legacy_irq(p);
-                       break;
-               
-               case ACPI_ENTRY_PLATFORM_INT_SOURCE:
-                       acpi_platform(p);
-                       break;
-               
-               default:
-                       break;
-               }
-
-               /* Move to next table entry. */
-#define BAD_ACPI_TABLE
-#ifdef BAD_ACPI_TABLE
-               /*
-                * Some prototype Lion's have a bad ACPI table
-                * requiring this fix.  Without this fix, those
-                * machines crash during bootup.
-                */
-               if (p[1] == 0)
-                       p = end;
-               else
-#endif
-                       p += p[1];
-       }
-
-       /* Make bootup pretty */
-       printk("      %d CPUs available, %d CPUs total\n", available_cpus, total_cpus);
-}
-
-int __init 
-acpi_parse(acpi_rsdp_t *rsdp)
-{
-       acpi_rsdt_t *rsdt;
-       acpi_desc_table_hdr_t *hdrp;
-       long tables, i;
-
-       if (!rsdp) {
-               printk("Uh-oh, no ACPI Root System Description Pointer table!\n");
-               return 0;
-       }
-
-       if (strncmp(rsdp->signature, ACPI_RSDP_SIG, ACPI_RSDP_SIG_LEN)) {
-               printk("Uh-oh, ACPI RSDP signature incorrect!\n");
-               return 0;
-       }
-
-       rsdp->rsdt = __va(rsdp->rsdt);
-       rsdt = rsdp->rsdt;
-       if (strncmp(rsdt->header.signature, ACPI_RSDT_SIG, ACPI_RSDT_SIG_LEN)) {
-               printk("Uh-oh, ACPI RDST signature incorrect!\n");
-               return 0;
-       }
-
-       printk("ACPI: %.6s %.8s %d.%d\n", rsdt->header.oem_id, 
rsdt->header.oem_table_id, 
-              rsdt->header.oem_revision >> 16, rsdt->header.oem_revision & 0xffff);
-       
-#ifdef CONFIG_ACPI_KERNEL_CONFIG
-       acpi_cf_init(rsdp);
-#endif
-
-       tables = (rsdt->header.length - sizeof(acpi_desc_table_hdr_t)) / 8;
-       for (i = 0; i < tables; i++) {
-               hdrp = (acpi_desc_table_hdr_t *) __va(rsdt->entry_ptrs[i]);
-
-               /* Only interested int the MSAPIC table for now ... */
-               if (strncmp(hdrp->signature, ACPI_SAPIC_SIG, ACPI_SAPIC_SIG_LEN) != 0)
-                       continue;
-
-               acpi_parse_msapic((acpi_sapic_t *) hdrp);
-       }
-
-#ifdef CONFIG_ACPI_KERNEL_CONFIG
-       acpi_cf_terminate();
-#endif
-
-#ifdef CONFIG_SMP
-       if (available_cpus == 0) {
-               printk("ACPI: Found 0 CPUS; assuming 1\n");
-               available_cpus = 1; /* We've got at least one of these, no? */
-       }
-       smp_boot_data.cpu_count = available_cpus;
-#endif
-       return 1;
-}
-
-const char *
-acpi_get_sysname (void)
-{       
-       /* the following should go away once we have an ACPI parser: */
-#ifdef CONFIG_IA64_GENERIC
-       return "hpsim";
-#else
-# if defined (CONFIG_IA64_HP_SIM)
-       return "hpsim";
-# elif defined (CONFIG_IA64_SGI_SN1)
-       return "sn1";
-# elif defined (CONFIG_IA64_DIG)
-       return "dig";
-# else
-#      error Unknown platform.  Fix acpi.c.
-# endif
-#endif
-}

Reply via email to