The diff below shuffles things around to make it easier to add arm64
support later.  The main thing is to avoid including
<machine/biosvar.h> in <dev/acpi/acpivar.h>, since that header file
doesn't exist on arm64.  The bulk of acpi_attach() is split out into a
new function and the current acpi_match() and acpi_attach() functions
are compiled on amd64 and i386 only.

ok?


Index: arch/amd64/amd64/acpi_machdep.c
===================================================================
RCS file: /cvs/src/sys/arch/amd64/amd64/acpi_machdep.c,v
retrieving revision 1.81
diff -u -p -r1.81 acpi_machdep.c
--- arch/amd64/amd64/acpi_machdep.c     5 Jun 2018 06:39:10 -0000       1.81
+++ arch/amd64/amd64/acpi_machdep.c     24 Jun 2018 21:58:24 -0000
@@ -95,6 +95,20 @@ acpi_unmap(struct acpi_mem_map *handle)
        uvm_km_free(kernel_map, handle->baseva, handle->vsize);
 }
 
+int
+acpi_bus_space_map(bus_space_tag_t t, bus_addr_t addr, bus_size_t size,
+    int flags, bus_space_handle_t *bshp)
+{
+       return _bus_space_map(t, addr, size, flags, bshp);
+}
+
+void
+acpi_bus_space_unmap(bus_space_tag_t t, bus_space_handle_t bsh,
+    bus_size_t size)
+{
+       _bus_space_unmap(t, bsh, size, NULL);
+}
+
 void *
 acpi_intr_establish(int irq, int flags, int level,
     int (*handler)(void *), void *arg, const char *what)
Index: arch/amd64/amd64/hibernate_machdep.c
===================================================================
RCS file: /cvs/src/sys/arch/amd64/amd64/hibernate_machdep.c,v
retrieving revision 1.42
diff -u -p -r1.42 hibernate_machdep.c
--- arch/amd64/amd64/hibernate_machdep.c        21 Jun 2018 07:33:30 -0000      
1.42
+++ arch/amd64/amd64/hibernate_machdep.c        24 Jun 2018 21:58:24 -0000
@@ -28,11 +28,10 @@
 #include <sys/kcore.h>
 #include <sys/atomic.h>
 
-#include <dev/acpi/acpivar.h>
-
 #include <uvm/uvm_extern.h>
 #include <uvm/uvm_pmemrange.h>
 
+#include <machine/biosvar.h>
 #include <machine/cpu.h>
 #include <machine/hibernate_var.h>
 #include <machine/pte.h>
@@ -41,6 +40,8 @@
 #ifdef MULTIPROCESSOR
 #include <machine/mpbiosvar.h>
 #endif /* MULTIPROCESSOR */
+
+#include <dev/acpi/acpivar.h>
 
 #include "acpi.h"
 #include "wd.h"
Index: arch/i386/i386/acpi_machdep.c
===================================================================
RCS file: /cvs/src/sys/arch/i386/i386/acpi_machdep.c,v
retrieving revision 1.65
diff -u -p -r1.65 acpi_machdep.c
--- arch/i386/i386/acpi_machdep.c       31 Mar 2018 13:45:03 -0000      1.65
+++ arch/i386/i386/acpi_machdep.c       24 Jun 2018 21:58:24 -0000
@@ -28,6 +28,7 @@
 
 #include <uvm/uvm_extern.h>
 
+#include <machine/biosvar.h>
 #include <machine/bus.h>
 #include <machine/conf.h>
 #include <machine/acpiapm.h>
@@ -102,6 +103,20 @@ acpi_unmap(struct acpi_mem_map *handle)
 {
        pmap_kremove(handle->baseva, handle->vsize);
        uvm_km_free(kernel_map, handle->baseva, handle->vsize);
+}
+
+int
+acpi_bus_space_map(bus_space_tag_t t, bus_addr_t addr, bus_size_t size,
+    int flags, bus_space_handle_t *bshp)
+{
+       return _bus_space_map(t, addr, size, flags, bshp);
+}
+
+void
+acpi_bus_space_unmap(bus_space_tag_t t, bus_space_handle_t bsh,
+    bus_size_t size)
+{
+       _bus_space_unmap(t, bsh, size, NULL);
 }
 
 u_int8_t *
Index: arch/i386/i386/hibernate_machdep.c
===================================================================
RCS file: /cvs/src/sys/arch/i386/i386/hibernate_machdep.c,v
retrieving revision 1.52
diff -u -p -r1.52 hibernate_machdep.c
--- arch/i386/i386/hibernate_machdep.c  21 Jun 2018 07:33:30 -0000      1.52
+++ arch/i386/i386/hibernate_machdep.c  24 Jun 2018 21:58:24 -0000
@@ -26,11 +26,10 @@
 #include <sys/timeout.h>
 #include <sys/malloc.h>
 
-#include <dev/acpi/acpivar.h>
-
 #include <uvm/uvm_extern.h>
 #include <uvm/uvm_pmemrange.h>
 
+#include <machine/biosvar.h>
 #include <machine/hibernate.h>
 #include <machine/hibernate_var.h>
 #include <machine/kcore.h>
@@ -39,6 +38,8 @@
 #ifdef MULTIPROCESSOR
 #include <machine/mpbiosvar.h>
 #endif /* MULTIPROCESSOR */
+
+#include <dev/acpi/acpivar.h>
 
 #include "acpi.h"
 #include "wd.h"
Index: dev/acpi/acpi.c
===================================================================
RCS file: /cvs/src/sys/dev/acpi/acpi.c,v
retrieving revision 1.344
diff -u -p -r1.344 acpi.c
--- dev/acpi/acpi.c     20 May 2018 09:12:35 -0000      1.344
+++ dev/acpi/acpi.c     24 Jun 2018 21:58:25 -0000
@@ -79,8 +79,6 @@ pcireg_t acpi_pci_min_powerstate(pci_chi
 void    acpi_pci_set_powerstate(pci_chipset_tag_t, pcitag_t, int, int);
 int    acpi_pci_notify(struct aml_node *, int, void *);
 
-int    acpi_match(struct device *, void *, void *);
-void   acpi_attach(struct device *, struct device *, void *);
 int    acpi_submatch(struct device *, void *, void *);
 int    acpi_print(void *, const char *);
 
@@ -198,21 +196,55 @@ static const char *sbtn_pnp[] = {
 int    mouse_has_softbtn;
 #endif /* SMALL_KERNEL */
 
+struct acpi_softc *acpi_softc;
+
 /* XXX move this into dsdt softc at some point */
 extern struct aml_node aml_root;
 
+struct cfdriver acpi_cd = {
+       NULL, "acpi", DV_DULL
+};
+
+#if defined(__amd64__) || defined(__i386__)
+
+#include <machine/biosvar.h>
+
+int    acpi_match(struct device *, void *, void *);
+void   acpi_attach(struct device *, struct device *, void *);
+
 struct cfattach acpi_ca = {
        sizeof(struct acpi_softc), acpi_match, acpi_attach
 };
 
-struct cfdriver acpi_cd = {
-       NULL, "acpi", DV_DULL
-};
+int
+acpi_match(struct device *parent, void *match, void *aux)
+{
+       struct bios_attach_args *ba = aux;
+       struct cfdata           *cf = match;
 
-struct acpi_softc *acpi_softc;
+       /* sanity */
+       if (strcmp(ba->ba_name, cf->cf_driver->cd_name))
+               return (0);
 
-#define acpi_bus_space_map     _bus_space_map
-#define acpi_bus_space_unmap   _bus_space_unmap
+       if (!acpi_probe(parent, cf, ba))
+               return (0);
+
+       return (1);
+}
+
+void
+acpi_attach(struct device *parent, struct device *self, void *aux)
+{
+       struct acpi_softc *sc = (struct acpi_softc *)self;
+       struct bios_attach_args *ba = aux;
+
+       sc->sc_iot = ba->ba_iot;
+       sc->sc_memt = ba->ba_memt;
+
+       acpi_attach_common(sc, ba->ba_acpipbase);
+}
+
+#endif
 
 uint8_t
 acpi_pci_conf_read_1(pci_chipset_tag_t pc, pcitag_t tag, int reg)
@@ -336,7 +368,7 @@ acpi_gasio(struct acpi_softc *sc, int io
                                }
                        }
                }
-               acpi_bus_space_unmap(iot, ioh, len, NULL);
+               acpi_bus_space_unmap(iot, ioh, len);
                break;
 
        case GAS_PCI_CFG_SPACE:
@@ -492,22 +524,6 @@ acpi_foundprt(struct aml_node *node, voi
        return 0;
 }
 
-int
-acpi_match(struct device *parent, void *match, void *aux)
-{
-       struct bios_attach_args *ba = aux;
-       struct cfdata           *cf = match;
-
-       /* sanity */
-       if (strcmp(ba->ba_name, cf->cf_driver->cd_name))
-               return (0);
-
-       if (!acpi_probe(parent, cf, ba))
-               return (0);
-
-       return (1);
-}
-
 TAILQ_HEAD(, acpi_pci) acpi_pcidevs =
     TAILQ_HEAD_INITIALIZER(acpi_pcidevs);
 TAILQ_HEAD(, acpi_pci) acpi_pcirootdevs = 
@@ -942,10 +958,8 @@ acpi_register_gsb(struct acpi_softc *sc,
 #endif
 
 void
-acpi_attach(struct device *parent, struct device *self, void *aux)
+acpi_attach_common(struct acpi_softc *sc, paddr_t base)
 {
-       struct bios_attach_args *ba = aux;
-       struct acpi_softc *sc = (struct acpi_softc *)self;
        struct acpi_mem_map handle;
        struct acpi_rsdp *rsdp;
        struct acpi_q *entry;
@@ -959,14 +973,11 @@ acpi_attach(struct device *parent, struc
        uint16_t pm1;
        int s;
 
-       sc->sc_iot = ba->ba_iot;
-       sc->sc_memt = ba->ba_memt;
-
        rw_init(&sc->sc_lck, "acpilk");
 
        acpi_softc = sc;
 
-       if (acpi_map(ba->ba_acpipbase, sizeof(struct acpi_rsdp), &handle)) {
+       if (acpi_map(base, sizeof(struct acpi_rsdp), &handle)) {
                printf(": can't map memory\n");
                return;
        }
@@ -1150,11 +1161,7 @@ acpi_attach(struct device *parent, struc
                aaa.aaa_name = "acpitimer";
                aaa.aaa_iot = sc->sc_iot;
                aaa.aaa_memt = sc->sc_memt;
-#if 0
-               aaa.aaa_pcit = sc->sc_pcit;
-               aaa.aaa_smbust = sc->sc_smbust;
-#endif
-               config_found(self, &aaa, acpi_print);
+               config_found(&sc->sc_dev, &aaa, acpi_print);
        }
 #endif /* SMALL_KERNEL */
 
@@ -1167,12 +1174,8 @@ acpi_attach(struct device *parent, struc
                memset(&aaa, 0, sizeof(aaa));
                aaa.aaa_iot = sc->sc_iot;
                aaa.aaa_memt = sc->sc_memt;
-       #if 0
-               aaa.aaa_pcit = sc->sc_pcit;
-               aaa.aaa_smbust = sc->sc_smbust;
-       #endif
                aaa.aaa_table = entry->q_table;
-               config_found_sm(self, &aaa, acpi_print, acpi_submatch);
+               config_found_sm(&sc->sc_dev, &aaa, acpi_print, acpi_submatch);
        }
 
        /* initialize runtime environment */
@@ -3402,4 +3405,5 @@ acpikqfilter(dev_t dev, struct knote *kn
 {
        return (ENXIO);
 }
+
 #endif /* SMALL_KERNEL */
Index: dev/acpi/acpivar.h
===================================================================
RCS file: /cvs/src/sys/dev/acpi/acpivar.h,v
retrieving revision 1.90
diff -u -p -r1.90 acpivar.h
--- dev/acpi/acpivar.h  17 May 2018 20:21:15 -0000      1.90
+++ dev/acpi/acpivar.h  24 Jun 2018 21:58:25 -0000
@@ -25,7 +25,8 @@
 
 #include <sys/timeout.h>
 #include <sys/rwlock.h>
-#include <machine/biosvar.h>
+
+#include <machine/bus.h>
 
 #include "acpipwrres.h"
 
@@ -296,14 +297,22 @@ struct acpi_dev_rank {
 #define ACPI_IOC_SETSLEEPSTATE _IOW('A', 2, int)
 
 #if defined(_KERNEL)
+
 struct   acpi_gas;
-int     acpi_map_address(struct acpi_softc *, struct acpi_gas *, bus_addr_t, 
bus_size_t,
-                         bus_space_handle_t *, bus_space_tag_t *);
+int     acpi_map_address(struct acpi_softc *, struct acpi_gas *, bus_addr_t,
+            bus_size_t, bus_space_handle_t *, bus_space_tag_t *);
 
 int     acpi_map(paddr_t, size_t, struct acpi_mem_map *);
 void    acpi_unmap(struct acpi_mem_map *);
+
+int     acpi_bus_space_map(bus_space_tag_t, bus_addr_t, bus_size_t, int,
+            bus_space_handle_t *);
+void    acpi_bus_space_unmap(bus_space_tag_t, bus_space_handle_t, bus_size_t);
+
+struct  bios_attach_args;
 int     acpi_probe(struct device *, struct cfdata *, struct bios_attach_args 
*);
 u_int   acpi_checksum(const void *, size_t);
+void    acpi_attach_common(struct acpi_softc *, paddr_t);
 void    acpi_attach_machdep(struct acpi_softc *);
 int     acpi_interrupt(void *);
 void    acpi_powerdown(void);

Reply via email to