Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 7 Nov 2006 23:36:54 GMT
From:      Sam Leffler <sam@FreeBSD.org>
To:        Perforce Change Reviews <perforce@freebsd.org>
Subject:   PERFORCE change 109494 for review
Message-ID:  <200611072336.kA7Nas5m081769@repoman.freebsd.org>

next in thread | raw e-mail | index | archive | help
http://perforce.freebsd.org/chv.cgi?CH=109494

Change 109494 by sam@sam_ebb on 2006/11/07 23:36:53

	Add ixpnpe_sendmsg and ixpnpe_recvmsg to allow callers to
	split transaction w/o sleeping.  This is unsafe and still
	problematic (caller could conceivably sleep on internal
	mtx) but is good enough for now.
	
	Also fix mtx type so witness doesn't bitch about duplication
	with the npe network driver.

Affected files ...

.. //depot/projects/arm/src/sys/arm/xscale/ixp425/ixp425_npe.c#7 edit
.. //depot/projects/arm/src/sys/arm/xscale/ixp425/ixp425_npevar.h#6 edit

Differences ...

==== //depot/projects/arm/src/sys/arm/xscale/ixp425/ixp425_npe.c#7 (text+ko) ====

@@ -257,7 +257,7 @@
     sc = malloc(sizeof(struct ixpnpe_softc), M_TEMP, M_WAITOK | M_ZERO);
     sc->sc_dev = dev;
     sc->sc_iot = sa->sc_iot;
-    mtx_init(&sc->sc_mtx, device_get_nameunit(dev), MTX_NETWORK_LOCK, MTX_DEF);
+    mtx_init(&sc->sc_mtx, device_get_nameunit(dev), "npe driver", MTX_DEF);
 
     if (device_get_unit(dev) == 0) {
 	base = IXP425_NPE_B_HWBASE;
@@ -1365,3 +1365,32 @@
 
     return error;
 }
+
+/* XXX temporary, not reliable */
+
+int
+ixpnpe_sendmsg(struct ixpnpe_softc *sc, const uint32_t msg[2])
+{
+    int error;
+
+    mtx_lock(&sc->sc_mtx);
+    error = ixpnpe_sendmsg_locked(sc, msg);
+    mtx_unlock(&sc->sc_mtx);
+
+    return error;
+}
+
+int
+ixpnpe_recvmsg(struct ixpnpe_softc *sc, uint32_t msg[2])
+{
+    int error;
+
+    mtx_lock(&sc->sc_mtx);
+    if (sc->sc_msgwaiting)
+	bcopy(sc->sc_msg, msg, sizeof(sc->sc_msg));
+    /* NB: sc_msgwaiting != 1 means the ack fetch failed */
+    error = sc->sc_msgwaiting != 1 ? EIO : 0;
+    mtx_unlock(&sc->sc_mtx);
+
+    return error;
+}

==== //depot/projects/arm/src/sys/arm/xscale/ixp425/ixp425_npevar.h#6 (text+ko) ====

@@ -87,6 +87,8 @@
 		const char *imageName, uint32_t imageId);
 int	ixpnpe_getfunctionality(struct ixpnpe_softc *sc);
 
+int	ixpnpe_sendmsg(struct ixpnpe_softc *, const uint32_t msg[2]);
+int	ixpnpe_recvmsg(struct ixpnpe_softc *, uint32_t msg[2]);
 int	ixpnpe_sendandrecvmsg(struct ixpnpe_softc *, const uint32_t send[2],
 		uint32_t recv[2]);
 #endif /* _IXP425_NPEVAR_H_ */



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200611072336.kA7Nas5m081769>