PERFORCE change 107131 for review
Warner Losh
imp at FreeBSD.org
Mon Oct 2 17:12:46 PDT 2006
http://perforce.freebsd.org/chv.cgi?CH=107131
Change 107131 by imp at imp_lighthouse on 2006/10/03 00:12:29
Implement mmc acquire and release bus.
Affected files ...
.. //depot/projects/arm/src/sys/dev/mmc/mmc.c#15 edit
Differences ...
==== //depot/projects/arm/src/sys/dev/mmc/mmc.c#15 (text+ko) ====
@@ -45,6 +45,7 @@
device_t dev;
struct mtx sc_mtx;
struct intr_config_hook config_intrhook;
+ device_t owner;
};
/*
@@ -115,14 +116,44 @@
return (EBUSY); /* XXX */
}
-static void
-mmc_acquire_bus(struct mmc_softc *sc)
+static int
+mmc_acquire_bus(device_t busdev, device_t dev)
{
+ struct mmc_softc *sc;
+ int err;
+
+ err = MMCBR_ACQUIRE_HOST(device_get_parent(busdev), dev);
+ if (err)
+ return (err);
+ sc = device_get_softc(busdev);
+ MMC_LOCK(sc);
+ if (sc->owner)
+ panic("How did I get here?");
+ sc->owner = dev;
+ MMC_UNLOCK(sc);
+ return (0);
}
-static void
-mmc_release_bus(struct mmc_softc *sc)
+static int
+mmc_release_bus(device_t busdev, device_t dev)
{
+ struct mmc_softc *sc;
+ int err;
+
+ sc = device_get_softc(busdev);
+ MMC_LOCK(sc);
+ if (!sc->owner)
+ panic("No owner?");
+ if (sc->owner != dev)
+ panic("Wrong owner releasing?");
+ MMC_UNLOCK(sc);
+ err = MMCBR_RELEASE_HOST(device_get_parent(busdev), dev);
+ if (err)
+ return (err);
+ MMC_LOCK(sc);
+ sc->owner = NULL;
+ MMC_UNLOCK(sc);
+ return (0);
}
static int
@@ -565,7 +596,7 @@
device_t dev;
dev = sc->dev;
- mmc_acquire_bus(sc);
+ mmc_acquire_bus(dev, dev);
if (mmcbr_get_power_mode(dev) == power_on)
mmc_rescan_cards(sc);
@@ -573,7 +604,7 @@
mmcbr_set_clock(dev, mmc_calculate_clock(sc));
mmcbr_update_ios(dev);
- mmc_release_bus(sc);
+ mmc_release_bus(dev, dev);
// XXX probe/attach/detach children?
}
@@ -635,6 +666,8 @@
/* MMC Bus interface */
DEVMETHOD(mmcbus_wait_for_request, mmc_wait_for_request),
+ DEVMETHOD(mmcbus_acquire_bus, mmc_acquire_bus),
+ DEVMETHOD(mmcbus_release_bus, mmc_release_bus),
{0, 0},
};
More information about the p4-projects
mailing list