Index: sys/arch/i386/conf/files.i386
===================================================================
RCS file: /cvs/src/sys/arch/i386/conf/files.i386,v
retrieving revision 1.167
diff -u -r1.167 files.i386
--- sys/arch/i386/conf/files.i386	16 Nov 2007 21:07:01 -0000	1.167
+++ sys/arch/i386/conf/files.i386	25 Nov 2007 14:51:33 -0000
@@ -300,6 +300,8 @@
 file	arch/i386/i386/apm.c		apm needs-count
 file	arch/i386/i386/apmcall.S	apm
 
+file	arch/i386/i386/acpiapm.c	apm | acpi
+
 # Intel SMP specification 1.4
 define	mpbios
 file	arch/i386/i386/mpbios.c		mpbios needs-flag
Index: sys/arch/i386/i386/acpi_machdep.c
===================================================================
RCS file: /cvs/src/sys/arch/i386/i386/acpi_machdep.c,v
retrieving revision 1.8
diff -u -r1.8 acpi_machdep.c
--- sys/arch/i386/i386/acpi_machdep.c	16 Nov 2007 02:45:56 -0000	1.8
+++ sys/arch/i386/i386/acpi_machdep.c	25 Nov 2007 14:51:33 -0000
@@ -24,6 +24,7 @@
 #include <uvm/uvm_extern.h>
 
 #include <machine/bus.h>
+#include <machine/acpiapm.h>
 #include <i386/isa/isa_machdep.h>
 
 #include <dev/isa/isareg.h>
@@ -172,4 +173,8 @@
 {
 	sc->sc_interrupt = isa_intr_establish(NULL, sc->sc_fadt->sci_int,
 	    IST_LEVEL, IPL_TTY, acpi_interrupt, sc, sc->sc_dev.dv_xname);
+	acpiapm_open = acpiopen;
+	acpiapm_close = acpiclose;
+	acpiapm_ioctl = acpiioctl;
+	acpiapm_kqfilter = acpikqfilter;
 }
Index: sys/arch/i386/i386/apm.c
===================================================================
RCS file: /cvs/src/sys/arch/i386/i386/apm.c,v
retrieving revision 1.78
diff -u -r1.78 apm.c
--- sys/arch/i386/i386/apm.c	3 Nov 2007 03:37:08 -0000	1.78
+++ sys/arch/i386/i386/apm.c	25 Nov 2007 14:51:33 -0000
@@ -66,6 +66,7 @@
 #include <i386/isa/nvram.h>
 #include <dev/isa/isavar.h>
 
+#include <machine/acpiapm.h>
 #include <machine/biosvar.h>
 #include <machine/apmvar.h>
 
@@ -916,6 +917,10 @@
 			}
 
 			/* All is well, let the rest of the world know */
+			acpiapm_open = acpiopen;
+			acpiapm_close = acpiclose;
+			acpiapm_ioctl = acpiioctl;
+			acpiapm_kqfilter = acpikqfilter;
 			apm_attached = 1;
 		}
 	} else {
Index: sys/arch/i386/i386/conf.c
===================================================================
RCS file: /cvs/src/sys/arch/i386/i386/conf.c,v
retrieving revision 1.119
diff -u -r1.119 conf.c
--- sys/arch/i386/i386/conf.c	18 Sep 2007 18:13:06 -0000	1.119
+++ sys/arch/i386/i386/conf.c	25 Nov 2007 14:51:33 -0000
@@ -151,8 +151,6 @@
 #include "sequencer.h"
 cdev_decl(music);
 #include "joy.h"
-#include "acpi.h"
-#include "apm.h"
 #include "bthub.h"
 #include "pctr.h"
 #include "bios.h"
@@ -224,7 +222,7 @@
 	cdev_disk_init(NCCD,ccd),	/* 18: concatenated disk driver */
 	cdev_ss_init(NSS,ss),           /* 19: SCSI scanner */
 	cdev_uk_init(NUK,uk),		/* 20: unknown SCSI */
-	cdev_apm_init(NAPM,apm),	/* 21: Advanced Power Management */
+	cdev_acpiapm_init(1,acpiapm),	/* 21: Advanced Power Management */
 	cdev_fd_init(1,filedesc),	/* 22: file descriptor pseudo-device */
 	cdev_bpftun_init(NBPFILTER,bpf),/* 23: Berkeley packet filter */
 	cdev_notdef(),			/* 24 */
@@ -307,7 +305,7 @@
 	cdev_hotplug_init(NHOTPLUG,hotplug), /* 82: devices hot plugging */
 	cdev_gpio_init(NGPIO,gpio),	/* 83: GPIO interface */
 	cdev_nvram_init(NNVRAM,nvram),	/* 84: NVRAM interface */
-	cdev_acpi_init(NACPI,acpi),	/* 85: ACPI */
+	cdev_notdef(),			/* 85: ACPI (deprecated) */
 	cdev_bthub_init(NBTHUB,bthub),	/* 86: bthub */
 };
 int	nchrdev = sizeof(cdevsw) / sizeof(cdevsw[0]);
Index: sys/arch/i386/i386/acpiapm.c
===================================================================
RCS file: sys/arch/i386/i386/acpiapm.c
diff -N sys/arch/i386/i386/acpiapm.c
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ sys/arch/i386/i386/acpiapm.c	25 Nov 2007 14:51:33 -0000
@@ -0,0 +1,58 @@
+/*	$OpenBSD$ */
+/*
+ * Copyright (c) 2007 Ted Unangst <tedu@openbsd.org>
+ *
+ * Permission to use, copy, modify, and distribute this software for any
+ * purpose with or without fee is hereby granted, provided that the above
+ * copyright notice and this permission notice appear in all copies.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+ * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+ * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+ */
+
+#include <sys/param.h>
+#include <machine/conf.h>
+#include <sys/event.h>
+
+
+int (*acpiapm_open)(dev_t, int, int, struct proc *);
+int (*acpiapm_close)(dev_t, int, int, struct proc *);
+int (*acpiapm_ioctl)(dev_t, u_long, caddr_t, int, struct proc *);
+int (*acpiapm_kqfilter)(dev_t, struct knote *);
+
+int
+acpiapmopen(dev_t dev, int flag, int mode, struct proc *p)
+{
+	if (!acpiapm_open)
+		return ENODEV;
+	return acpiapm_open(dev, flag, mode, p);
+}
+
+int
+acpiapmclose(dev_t dev, int flag, int mode, struct proc *p)
+{
+	if (!acpiapm_close)
+		return ENODEV;
+	return acpiapm_close(dev, flag, mode, p);
+}
+
+int
+acpiapmioctl(dev_t dev, u_long cmd, caddr_t data, int flag, struct proc *p)
+{
+	if (!acpiapm_ioctl)
+		return ENODEV;
+	return acpiapm_ioctl(dev, cmd, data, flag, p);
+}
+
+int
+acpiapmkqfilter(dev_t dev, struct knote *kn)
+{
+	if (!acpiapm_kqfilter)
+		return ENODEV;
+	return acpiapm_kqfilter(dev, kn);
+}
Index: sys/arch/i386/include/conf.h
===================================================================
RCS file: /cvs/src/sys/arch/i386/include/conf.h,v
retrieving revision 1.12
diff -u -r1.12 conf.h
--- sys/arch/i386/include/conf.h	31 Dec 2005 21:22:34 -0000	1.12
+++ sys/arch/i386/include/conf.h	25 Nov 2007 14:51:33 -0000
@@ -49,13 +49,7 @@
 cdev_decl(pc);
 
 
-#define	cdev_apm_init(c,n) {\
-	dev_init(c,n,open), dev_init(c,n,close), (dev_type_read((*))) enodev, \
-	(dev_type_write((*))) enodev, dev_init(c,n,ioctl), \
-	(dev_type_stop((*))) enodev, 0, (dev_type_poll((*))) enodev, \
-	(dev_type_mmap((*))) enodev, 0, D_KQFILTER, dev_init(c,n,kqfilter) }
-
-#define	cdev_acpi_init(c,n) {\
+#define	cdev_acpiapm_init(c,n) {\
 	dev_init(c,n,open), dev_init(c,n,close), (dev_type_read((*))) enodev, \
 	(dev_type_write((*))) enodev, dev_init(c,n,ioctl), \
 	(dev_type_stop((*))) enodev, 0, (dev_type_poll((*))) enodev, \
@@ -77,6 +71,8 @@
 cdev_decl(acpi);
 
 cdev_decl(apm);
+
+cdev_decl(acpiapm);
 
 #define pctrpoll seltrue
 cdev_decl(pctr);
Index: sys/arch/i386/include/acpiapm.h
===================================================================
RCS file: sys/arch/i386/include/acpiapm.h
diff -N sys/arch/i386/include/acpiapm.h
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ sys/arch/i386/include/acpiapm.h	25 Nov 2007 14:51:33 -0000
@@ -0,0 +1,30 @@
+/*	$OpenBSD$ */
+/*
+ * Copyright (c) 2007 Ted Unangst <tedu@openbsd.org>
+ *
+ * Permission to use, copy, modify, and distribute this software for any
+ * purpose with or without fee is hereby granted, provided that the above
+ * copyright notice and this permission notice appear in all copies.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+ * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+ * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+ */
+#ifndef _I386_ACPIAPM_H_
+#define _I386_ACPIAPM_H_
+
+extern int (*acpiapm_open)(dev_t, int, int, struct proc *);
+extern int (*acpiapm_close)(dev_t, int, int, struct proc *);
+extern int (*acpiapm_ioctl)(dev_t, u_long, caddr_t, int, struct proc *);
+extern int (*acpiapm_kqfilter)(dev_t, struct knote *);
+
+extern int acpiopen(dev_t dev, int flag, int mode, struct proc *p);
+extern int acpiclose(dev_t dev, int flag, int mode, struct proc *p);
+extern int acpiioctl(dev_t dev, u_long cmd, caddr_t data, int flag, struct proc *p); 
+extern int acpikqfilter(dev_t dev, struct knote *kn);
+
+#endif /* _I386_ACPIAPM_H_ */
