Page MenuHomeFreeBSD

D57844.id180831.diff
No OneTemporary

D57844.id180831.diff

diff --git a/sys/dev/asmc/asmc.c b/sys/dev/asmc/asmc.c
--- a/sys/dev/asmc/asmc.c
+++ b/sys/dev/asmc/asmc.c
@@ -418,43 +418,50 @@
return (rv);
}
+/*
+ * Try PIO first; fall back to MMIO for T2 Macs.
+ */
static int
-asmc_attach(device_t dev)
+asmc_try_probe(device_t dev)
{
- int i, j;
- int ret;
- char name[2];
struct asmc_softc *sc = device_get_softc(dev);
- struct sysctl_ctx_list *sysctlctx;
- struct sysctl_oid *sysctlnode;
- /*
- * Try MMIO first (T2 Macs expose SMC via memory-mapped I/O).
- * Fall back to standard I/O port if MMIO is not available.
- */
+ sc->sc_ioport = bus_alloc_resource_any(dev, SYS_RES_IOPORT,
+ &sc->sc_rid_port, RF_ACTIVE);
+ if (sc->sc_ioport != NULL)
+ return (0);
+
sc->sc_rid_mem = 0;
sc->sc_iomem = bus_alloc_resource_any(dev, SYS_RES_MEMORY,
&sc->sc_rid_mem, RF_ACTIVE);
if (sc->sc_iomem != NULL) {
if (asmc_mmio_probe(dev) == 0) {
- sc->sc_is_mmio = 1;
+ sc->sc_is_mmio = true;
device_printf(dev, "using MMIO backend (T2)\n");
- } else {
- bus_release_resource(dev, SYS_RES_MEMORY,
- sc->sc_rid_mem, sc->sc_iomem);
- sc->sc_iomem = NULL;
+ return (0);
}
+ bus_release_resource(dev, SYS_RES_MEMORY,
+ sc->sc_rid_mem, sc->sc_iomem);
+ sc->sc_iomem = NULL;
}
- if (!sc->sc_is_mmio) {
- sc->sc_ioport = bus_alloc_resource_any(dev, SYS_RES_IOPORT,
- &sc->sc_rid_port, RF_ACTIVE);
- if (sc->sc_ioport == NULL) {
- device_printf(dev, "unable to allocate IO port\n");
- ret = ENOMEM;
- goto err;
- }
- }
+ device_printf(dev, "unable to allocate IO port\n");
+ return (ENOMEM);
+}
+
+static int
+asmc_attach(device_t dev)
+{
+ int i, j;
+ int ret;
+ char name[2];
+ struct asmc_softc *sc = device_get_softc(dev);
+ struct sysctl_ctx_list *sysctlctx;
+ struct sysctl_oid *sysctlnode;
+
+ ret = asmc_try_probe(dev);
+ if (ret != 0)
+ goto err;
sysctlctx = device_get_sysctl_ctx(dev);
sysctlnode = device_get_sysctl_tree(dev);
diff --git a/sys/dev/asmc/asmcmmio.c b/sys/dev/asmc/asmcmmio.c
--- a/sys/dev/asmc/asmcmmio.c
+++ b/sys/dev/asmc/asmcmmio.c
@@ -307,7 +307,7 @@
sc->sc_iomem);
sc->sc_iomem = NULL;
}
- sc->sc_is_mmio = 0;
+ sc->sc_is_mmio = false;
sc->sc_is_t2 = 0;
}
diff --git a/sys/dev/asmc/asmcvar.h b/sys/dev/asmc/asmcvar.h
--- a/sys/dev/asmc/asmcvar.h
+++ b/sys/dev/asmc/asmcvar.h
@@ -56,7 +56,7 @@
/* MMIO backend (T2 Macs) */
int sc_rid_mem;
struct resource *sc_iomem;
- int sc_is_mmio;
+ bool sc_is_mmio;
int sc_is_t2; /* T2 fan float + per-fan manual */
int sc_sms_intrtype;
struct taskqueue *sc_sms_tq;

File Metadata

Mime Type
text/plain
Expires
Tue, Jul 7, 12:45 PM (22 h, 41 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
34797993
Default Alt Text
D57844.id180831.diff (2 KB)

Event Timeline