svn commit: r188338 - user/thompsa/usb/sys/dev/usb2/wlan
Andrew Thompson
thompsa at FreeBSD.org
Sun Feb 8 13:47:23 PST 2009
Author: thompsa
Date: Sun Feb 8 21:47:08 2009
New Revision: 188338
URL: http://svn.freebsd.org/changeset/base/188338
Log:
Add hardware command debugging.
Modified:
user/thompsa/usb/sys/dev/usb2/wlan/if_zyd2.c
Modified: user/thompsa/usb/sys/dev/usb2/wlan/if_zyd2.c
==============================================================================
--- user/thompsa/usb/sys/dev/usb2/wlan/if_zyd2.c Sun Feb 8 21:20:13 2009 (r188337)
+++ user/thompsa/usb/sys/dev/usb2/wlan/if_zyd2.c Sun Feb 8 21:47:08 2009 (r188338)
@@ -60,11 +60,12 @@ enum {
ZYD_DEBUG_STATE = 0x00000040, /* 802.11 state transitions */
ZYD_DEBUG_STAT = 0x00000080, /* statistic */
ZYD_DEBUG_FW = 0x00000100, /* firmware */
+ ZYD_DEBUG_CMD = 0x00000200, /* fw commands */
ZYD_DEBUG_ANY = 0xffffffff
};
#define DPRINTF(sc, m, fmt, ...) do { \
if (sc->sc_debug & (m)) \
- printf(fmt, __VA_ARGS__); \
+ printf("%s: " fmt, __func__, ## __VA_ARGS__); \
} while (0)
#else
#define DPRINTF(sc, m, fmt, ...) do { \
@@ -746,26 +747,31 @@ zyd_intr_read_callback(struct usb2_xfer
datalen -= 2; /* XXX: padding? */
STAILQ_FOREACH(rqp, &sc->sc_rqh, rq) {
- int i;
+ int i, cnt;
- if (sizeof(struct zyd_pair) * rqp->olen != datalen)
+ if (rqp->olen != datalen)
continue;
- for (i = 0; i < rqp->olen; i++) {
+ cnt = rqp->olen / sizeof(struct zyd_pair);
+ for (i = 0; i < cnt; i++) {
if (*(((const uint16_t *)rqp->idata) + i) !=
(((struct zyd_pair *)cmd->data) + i)->reg)
break;
}
- if (i != rqp->olen)
+ if (i != cnt)
continue;
/* copy answer into caller-supplied buffer */
- bcopy(cmd->data, rqp->odata,
- sizeof(struct zyd_pair) * rqp->olen);
+ bcopy(cmd->data, rqp->odata, rqp->olen);
+ DPRINTF(sc, ZYD_DEBUG_CMD,
+ "command %p complete, data = %*D \n",
+ rqp, rqp->olen, rqp->odata, ":");
wakeup(rqp); /* wakeup caller */
- return;
+ break;
+ }
+ if (rqp == NULL) {
+ device_printf(sc->sc_dev,
+ "unexpected IORD notification %*D\n",
+ datalen, cmd->data, ":");
}
- device_printf(sc->sc_dev,
- "unexpected IORD notification %*D\n",
- datalen, cmd->data, ":");
break;
}
default:
@@ -784,7 +790,7 @@ zyd_intr_read_callback(struct usb2_xfer
break;
default: /* Error */
- DPRINTF(sc, ZYD_DEBUG_ANY, "error = %s\n",
+ DPRINTF(sc, ZYD_DEBUG_CMD, "error = %s\n",
usb2_errstr(xfer->error));
if (xfer->error != USB_ERR_CANCELLED) {
@@ -817,8 +823,8 @@ zyd_intr_write_callback(struct usb2_xfer
switch (USB_GET_STATE(xfer)) {
case USB_ST_TRANSFERRED:
- DPRINTF(sc, ZYD_DEBUG_ANY, "length=%d\n", xfer->actlen);
rqp = xfer->priv_fifo;
+ DPRINTF(sc, ZYD_DEBUG_CMD, "command %p transferred\n", rqp);
if ((rqp->flags & ZYD_CMD_FLAG_READ) == 0)
wakeup(rqp); /* wakeup caller */
@@ -884,12 +890,14 @@ zyd_cmd(struct zyd_softc *sc, uint16_t c
cmd.code = htole16(code);
bcopy(idata, cmd.data, ilen);
+ DPRINTF(sc, ZYD_DEBUG_CMD, "sending cmd %p = %*D\n",
+ &rq, ilen, idata, ":");
rq.cmd = &cmd;
rq.idata = idata;
rq.odata = odata;
rq.ilen = sizeof(uint16_t) + ilen;
- rq.olen = olen / sizeof(struct zyd_pair);
+ rq.olen = olen;
rq.flags = flags;
STAILQ_INSERT_TAIL(&sc->sc_rqh, &rq, rq);
usb2_transfer_start(sc->sc_xfer[ZYD_INTR_DT_RD]);
@@ -900,6 +908,8 @@ zyd_cmd(struct zyd_softc *sc, uint16_t c
if (error)
device_printf(sc->sc_dev, "command timeout\n");
STAILQ_REMOVE(&sc->sc_rqh, &rq, zyd_rq, rq);
+ DPRINTF(sc, ZYD_DEBUG_CMD, "finsihed cmd %p, error = %d \n",
+ &rq, error);
return (error);
}
More information about the svn-src-user
mailing list