svn commit: r188355 - user/thompsa/usb/sys/dev/usb2/wlan
Andrew Thompson
thompsa at FreeBSD.org
Sun Feb 8 16:58:17 PST 2009
Author: thompsa
Date: Mon Feb 9 00:58:16 2009
New Revision: 188355
URL: http://svn.freebsd.org/changeset/base/188355
Log:
Use usb2_clear_endpoint_stall() to clear the stalls.
Modified:
user/thompsa/usb/sys/dev/usb2/wlan/if_rum2.c
user/thompsa/usb/sys/dev/usb2/wlan/if_rumvar.h
user/thompsa/usb/sys/dev/usb2/wlan/if_ural2.c
user/thompsa/usb/sys/dev/usb2/wlan/if_uralvar.h
user/thompsa/usb/sys/dev/usb2/wlan/if_zyd2.c
user/thompsa/usb/sys/dev/usb2/wlan/if_zydreg.h
Modified: user/thompsa/usb/sys/dev/usb2/wlan/if_rum2.c
==============================================================================
--- user/thompsa/usb/sys/dev/usb2/wlan/if_rum2.c Sun Feb 8 23:51:44 2009 (r188354)
+++ user/thompsa/usb/sys/dev/usb2/wlan/if_rum2.c Mon Feb 9 00:58:16 2009 (r188355)
@@ -114,9 +114,7 @@ static device_attach_t rum_attach;
static device_detach_t rum_detach;
static usb2_callback_t rum_bulk_read_callback;
-static usb2_callback_t rum_bulk_read_clear_stall_callback;
static usb2_callback_t rum_bulk_write_callback;
-static usb2_callback_t rum_bulk_write_clear_stall_callback;
static usb2_task_fn_t rum_task;
static usb2_task_fn_t rum_scantask;
@@ -351,7 +349,7 @@ static const struct rfprog {
};
static const struct usb2_config rum_config[RUM_N_TRANSFER] = {
- [RUM_BULK_DT_WR] = {
+ [RUM_BULK_WR] = {
.type = UE_BULK,
.endpoint = UE_ADDR_ANY,
.direction = UE_DIR_OUT,
@@ -360,8 +358,7 @@ static const struct usb2_config rum_conf
.mh.callback = rum_bulk_write_callback,
.mh.timeout = 5000, /* ms */
},
-
- [RUM_BULK_DT_RD] = {
+ [RUM_BULK_RD] = {
.type = UE_BULK,
.endpoint = UE_ADDR_ANY,
.direction = UE_DIR_IN,
@@ -369,26 +366,6 @@ static const struct usb2_config rum_conf
.mh.flags = {.pipe_bof = 1,.short_xfer_ok = 1,},
.mh.callback = rum_bulk_read_callback,
},
-
- [RUM_BULK_CS_WR] = {
- .type = UE_CONTROL,
- .endpoint = 0x00, /* Control pipe */
- .direction = UE_DIR_ANY,
- .mh.bufsize = sizeof(struct usb2_device_request),
- .mh.callback = rum_bulk_write_clear_stall_callback,
- .mh.timeout = 1000, /* 1 second */
- .mh.interval = 50, /* 50ms */
- },
-
- [RUM_BULK_CS_RD] = {
- .type = UE_CONTROL,
- .endpoint = 0x00, /* Control pipe */
- .direction = UE_DIR_ANY,
- .mh.bufsize = sizeof(struct usb2_device_request),
- .mh.callback = rum_bulk_read_clear_stall_callback,
- .mh.timeout = 1000, /* 1 second */
- .mh.interval = 50, /* 50ms */
- },
};
static int
@@ -809,10 +786,6 @@ rum_bulk_write_callback(struct usb2_xfer
/* FALLTHROUGH */
case USB_ST_SETUP:
- if (sc->sc_flags & RUM_FLAG_WRITE_STALL) {
- usb2_transfer_start(sc->sc_xfer[RUM_BULK_CS_WR]);
- break;
- }
#if 0
if (sc->sc_flags & RUM_FLAG_WAIT_COMMAND) {
/*
@@ -870,8 +843,7 @@ rum_bulk_write_callback(struct usb2_xfer
if (xfer->error == USB_ERR_STALLED) {
/* try to clear stall first */
- sc->sc_flags |= RUM_FLAG_WRITE_STALL;
- usb2_transfer_start(sc->sc_xfer[RUM_BULK_CS_WR]);
+ usb2_clear_endpoint_stall(xfer);
return;
}
if (xfer->error == USB_ERR_TIMEOUT)
@@ -888,19 +860,6 @@ rum_bulk_write_callback(struct usb2_xfer
}
static void
-rum_bulk_write_clear_stall_callback(struct usb2_xfer *xfer)
-{
- struct rum_softc *sc = xfer->priv_sc;
- struct usb2_xfer *xfer_other = sc->sc_xfer[RUM_BULK_DT_WR];
-
- if (usb2_clear_stall_callback(xfer, xfer_other)) {
- DPRINTF("stall cleared\n");
- sc->sc_flags &= ~RUM_FLAG_WRITE_STALL;
- usb2_transfer_start(xfer_other);
- }
-}
-
-static void
rum_bulk_read_callback(struct usb2_xfer *xfer)
{
struct rum_softc *sc = xfer->priv_sc;
@@ -972,12 +931,8 @@ rum_bulk_read_callback(struct usb2_xfer
/* FALLTHROUGH */
case USB_ST_SETUP:
tr_setup:
- if (sc->sc_flags & RUM_FLAG_READ_STALL) {
- usb2_transfer_start(sc->sc_xfer[RUM_BULK_CS_RD]);
- } else {
- xfer->frlengths[0] = xfer->max_data_length;
- usb2_start_hardware(xfer);
- }
+ xfer->frlengths[0] = xfer->max_data_length;
+ usb2_start_hardware(xfer);
/*
* At the end of a USB callback it is always safe to unlock
@@ -1002,27 +957,14 @@ tr_setup:
default: /* Error */
if (xfer->error != USB_ERR_CANCELLED) {
/* try to clear stall first */
- sc->sc_flags |= RUM_FLAG_READ_STALL;
- usb2_transfer_start(sc->sc_xfer[RUM_BULK_CS_RD]);
+ usb2_clear_endpoint_stall(xfer);
+ return;
}
return;
}
}
-static void
-rum_bulk_read_clear_stall_callback(struct usb2_xfer *xfer)
-{
- struct rum_softc *sc = xfer->priv_sc;
- struct usb2_xfer *xfer_other = sc->sc_xfer[RUM_BULK_DT_RD];
-
- if (usb2_clear_stall_callback(xfer, xfer_other)) {
- DPRINTF("stall cleared\n");
- sc->sc_flags &= ~RUM_FLAG_READ_STALL;
- usb2_transfer_start(xfer_other);
- }
-}
-
static uint8_t
rum_plcp_signal(int rate)
{
@@ -1139,7 +1081,7 @@ rum_sendprot(struct rum_softc *sc,
rum_setup_tx_desc(sc, &data->desc, flags, 0, mprot->m_pkthdr.len, protrate);
STAILQ_INSERT_TAIL(&sc->tx_q, data, next);
- usb2_transfer_start(sc->sc_xfer[RUM_BULK_DT_WR]);
+ usb2_transfer_start(sc->sc_xfer[RUM_BULK_WR]);
return 0;
}
@@ -1199,7 +1141,7 @@ rum_tx_mgt(struct rum_softc *sc, struct
m0->m_pkthdr.len + (int)RT2573_TX_DESC_SIZE, tp->mgmtrate);
STAILQ_INSERT_TAIL(&sc->tx_q, data, next);
- usb2_transfer_start(sc->sc_xfer[RUM_BULK_DT_WR]);
+ usb2_transfer_start(sc->sc_xfer[RUM_BULK_WR]);
return 0;
}
@@ -1251,7 +1193,7 @@ rum_tx_raw(struct rum_softc *sc, struct
m0->m_pkthdr.len, rate);
STAILQ_INSERT_TAIL(&sc->tx_q, data, next);
- usb2_transfer_start(sc->sc_xfer[RUM_BULK_DT_WR]);
+ usb2_transfer_start(sc->sc_xfer[RUM_BULK_WR]);
return 0;
}
@@ -1333,7 +1275,7 @@ rum_tx_data(struct rum_softc *sc, struct
m0->m_pkthdr.len + (int)RT2573_TX_DESC_SIZE, rate);
STAILQ_INSERT_TAIL(&sc->tx_q, data, next);
- usb2_transfer_start(sc->sc_xfer[RUM_BULK_DT_WR]);
+ usb2_transfer_start(sc->sc_xfer[RUM_BULK_WR]);
return 0;
}
@@ -2064,7 +2006,7 @@ rum_init_locked(struct rum_softc *sc)
ifp->if_drv_flags &= ~IFF_DRV_OACTIVE;
ifp->if_drv_flags |= IFF_DRV_RUNNING;
- usb2_transfer_start(sc->sc_xfer[RUM_BULK_DT_RD]);
+ usb2_transfer_start(sc->sc_xfer[RUM_BULK_RD]);
return;
fail: rum_stop(sc);
@@ -2100,10 +2042,8 @@ rum_stop(void *priv)
/*
* stop all the transfers, if not already stopped:
*/
- usb2_transfer_stop(sc->sc_xfer[RUM_BULK_DT_WR]);
- usb2_transfer_stop(sc->sc_xfer[RUM_BULK_DT_RD]);
- usb2_transfer_stop(sc->sc_xfer[RUM_BULK_CS_WR]);
- usb2_transfer_stop(sc->sc_xfer[RUM_BULK_CS_RD]);
+ usb2_transfer_stop(sc->sc_xfer[RUM_BULK_WR]);
+ usb2_transfer_stop(sc->sc_xfer[RUM_BULK_RD]);
rum_free_tx_list(sc);
Modified: user/thompsa/usb/sys/dev/usb2/wlan/if_rumvar.h
==============================================================================
--- user/thompsa/usb/sys/dev/usb2/wlan/if_rumvar.h Sun Feb 8 23:51:44 2009 (r188354)
+++ user/thompsa/usb/sys/dev/usb2/wlan/if_rumvar.h Mon Feb 9 00:58:16 2009 (r188355)
@@ -83,11 +83,9 @@ struct rum_vap {
#define RUM_VAP(vap) ((struct rum_vap *)(vap))
enum {
- RUM_BULK_DT_WR,
- RUM_BULK_DT_RD,
- RUM_BULK_CS_WR,
- RUM_BULK_CS_RD,
- RUM_N_TRANSFER = 4,
+ RUM_BULK_WR,
+ RUM_BULK_RD,
+ RUM_N_TRANSFER = 2,
};
struct rum_softc {
@@ -122,9 +120,7 @@ struct rum_softc {
struct mtx sc_mtx;
int sc_flags;
-#define RUM_FLAG_READ_STALL 0x0001
-#define RUM_FLAG_WRITE_STALL 0x0002
-#define RUM_FLAG_DETACH 0x0004
+#define RUM_FLAG_DETACH 0x0001
uint32_t sta[6];
uint32_t rf_regs[4];
Modified: user/thompsa/usb/sys/dev/usb2/wlan/if_ural2.c
==============================================================================
--- user/thompsa/usb/sys/dev/usb2/wlan/if_ural2.c Sun Feb 8 23:51:44 2009 (r188354)
+++ user/thompsa/usb/sys/dev/usb2/wlan/if_ural2.c Mon Feb 9 00:58:16 2009 (r188355)
@@ -93,9 +93,7 @@ static const struct usb2_device_id ural_
};
static usb2_callback_t ural_bulk_read_callback;
-static usb2_callback_t ural_bulk_read_clear_stall_callback;
static usb2_callback_t ural_bulk_write_callback;
-static usb2_callback_t ural_bulk_write_clear_stall_callback;
static usb2_task_fn_t ural_task;
static usb2_task_fn_t ural_scantask;
@@ -327,7 +325,7 @@ static const struct {
};
static const struct usb2_config ural_config[URAL_N_TRANSFER] = {
- [URAL_BULK_DT_WR] = {
+ [URAL_BULK_WR] = {
.type = UE_BULK,
.endpoint = UE_ADDR_ANY,
.direction = UE_DIR_OUT,
@@ -336,8 +334,7 @@ static const struct usb2_config ural_con
.mh.callback = ural_bulk_write_callback,
.mh.timeout = 5000, /* ms */
},
-
- [URAL_BULK_DT_RD] = {
+ [URAL_BULK_RD] = {
.type = UE_BULK,
.endpoint = UE_ADDR_ANY,
.direction = UE_DIR_IN,
@@ -345,26 +342,6 @@ static const struct usb2_config ural_con
.mh.flags = {.pipe_bof = 1,.short_xfer_ok = 1,},
.mh.callback = ural_bulk_read_callback,
},
-
- [URAL_BULK_CS_WR] = {
- .type = UE_CONTROL,
- .endpoint = 0x00, /* Control pipe */
- .direction = UE_DIR_ANY,
- .mh.bufsize = sizeof(struct usb2_device_request),
- .mh.callback = ural_bulk_write_clear_stall_callback,
- .mh.timeout = 1000, /* 1 second */
- .mh.interval = 50, /* 50ms */
- },
-
- [URAL_BULK_CS_RD] = {
- .type = UE_CONTROL,
- .endpoint = 0x00, /* Control pipe */
- .direction = UE_DIR_ANY,
- .mh.bufsize = sizeof(struct usb2_device_request),
- .mh.callback = ural_bulk_read_clear_stall_callback,
- .mh.timeout = 1000, /* 1 second */
- .mh.interval = 50, /* 50ms */
- },
};
static device_probe_t ural_match;
@@ -841,10 +818,6 @@ ural_bulk_write_callback(struct usb2_xfe
/* FALLTHROUGH */
case USB_ST_SETUP:
- if (sc->sc_flags & URAL_FLAG_WRITE_STALL) {
- usb2_transfer_start(sc->sc_xfer[URAL_BULK_CS_WR]);
- break;
- }
#if 0
if (sc->sc_flags & URAL_FLAG_WAIT_COMMAND) {
/*
@@ -902,8 +875,7 @@ ural_bulk_write_callback(struct usb2_xfe
if (xfer->error == USB_ERR_STALLED) {
/* try to clear stall first */
- sc->sc_flags |= URAL_FLAG_WRITE_STALL;
- usb2_transfer_start(sc->sc_xfer[URAL_BULK_CS_WR]);
+ usb2_clear_endpoint_stall(xfer);
return;
}
if (xfer->error == USB_ERR_TIMEOUT)
@@ -920,19 +892,6 @@ ural_bulk_write_callback(struct usb2_xfe
}
static void
-ural_bulk_write_clear_stall_callback(struct usb2_xfer *xfer)
-{
- struct ural_softc *sc = xfer->priv_sc;
- struct usb2_xfer *xfer_other = sc->sc_xfer[URAL_BULK_DT_WR];
-
- if (usb2_clear_stall_callback(xfer, xfer_other)) {
- DPRINTF("stall cleared\n");
- sc->sc_flags &= ~URAL_FLAG_WRITE_STALL;
- usb2_transfer_start(xfer_other);
- }
-}
-
-static void
ural_bulk_read_callback(struct usb2_xfer *xfer)
{
struct ural_softc *sc = xfer->priv_sc;
@@ -1007,12 +966,8 @@ ural_bulk_read_callback(struct usb2_xfer
/* FALLTHROUGH */
case USB_ST_SETUP:
tr_setup:
- if (sc->sc_flags & URAL_FLAG_READ_STALL) {
- usb2_transfer_start(sc->sc_xfer[URAL_BULK_CS_RD]);
- } else {
- xfer->frlengths[0] = xfer->max_data_length;
- usb2_start_hardware(xfer);
- }
+ xfer->frlengths[0] = xfer->max_data_length;
+ usb2_start_hardware(xfer);
/*
* At the end of a USB callback it is always safe to unlock
@@ -1037,27 +992,14 @@ tr_setup:
default: /* Error */
if (xfer->error != USB_ERR_CANCELLED) {
/* try to clear stall first */
- sc->sc_flags |= URAL_FLAG_READ_STALL;
- usb2_transfer_start(sc->sc_xfer[URAL_BULK_CS_RD]);
+ usb2_clear_endpoint_stall(xfer);
+ return;
}
return;
}
}
-static void
-ural_bulk_read_clear_stall_callback(struct usb2_xfer *xfer)
-{
- struct ural_softc *sc = xfer->priv_sc;
- struct usb2_xfer *xfer_other = sc->sc_xfer[URAL_BULK_DT_RD];
-
- if (usb2_clear_stall_callback(xfer, xfer_other)) {
- DPRINTF("stall cleared\n");
- sc->sc_flags &= ~URAL_FLAG_READ_STALL;
- usb2_transfer_start(xfer_other);
- }
-}
-
static uint8_t
ural_plcp_signal(int rate)
{
@@ -1160,7 +1102,7 @@ ural_tx_bcn(struct ural_softc *sc, struc
m0->m_pkthdr.len, tp->mgmtrate);
STAILQ_INSERT_TAIL(&sc->tx_q, data, next);
- usb2_transfer_start(sc->sc_xfer[URAL_BULK_DT_WR]);
+ usb2_transfer_start(sc->sc_xfer[URAL_BULK_WR]);
return (0);
}
@@ -1221,7 +1163,7 @@ ural_tx_mgt(struct ural_softc *sc, struc
m0->m_pkthdr.len, tp->mgmtrate);
STAILQ_INSERT_TAIL(&sc->tx_q, data, next);
- usb2_transfer_start(sc->sc_xfer[URAL_BULK_DT_WR]);
+ usb2_transfer_start(sc->sc_xfer[URAL_BULK_WR]);
return 0;
}
@@ -1272,7 +1214,7 @@ ural_sendprot(struct ural_softc *sc,
ural_setup_tx_desc(sc, &data->desc, flags, mprot->m_pkthdr.len, protrate);
STAILQ_INSERT_TAIL(&sc->tx_q, data, next);
- usb2_transfer_start(sc->sc_xfer[URAL_BULK_DT_WR]);
+ usb2_transfer_start(sc->sc_xfer[URAL_BULK_WR]);
return 0;
}
@@ -1325,7 +1267,7 @@ ural_tx_raw(struct ural_softc *sc, struc
m0->m_pkthdr.len, rate);
STAILQ_INSERT_TAIL(&sc->tx_q, data, next);
- usb2_transfer_start(sc->sc_xfer[URAL_BULK_DT_WR]);
+ usb2_transfer_start(sc->sc_xfer[URAL_BULK_WR]);
return 0;
}
@@ -1405,7 +1347,7 @@ ural_tx_data(struct ural_softc *sc, stru
m0->m_pkthdr.len, rate);
STAILQ_INSERT_TAIL(&sc->tx_q, data, next);
- usb2_transfer_start(sc->sc_xfer[URAL_BULK_DT_WR]);
+ usb2_transfer_start(sc->sc_xfer[URAL_BULK_WR]);
return 0;
}
@@ -2204,7 +2146,7 @@ ural_init_locked(struct ural_softc *sc)
ifp->if_drv_flags &= ~IFF_DRV_OACTIVE;
ifp->if_drv_flags |= IFF_DRV_RUNNING;
- usb2_transfer_start(sc->sc_xfer[URAL_BULK_DT_RD]);
+ usb2_transfer_start(sc->sc_xfer[URAL_BULK_RD]);
return;
fail: ural_stop(sc);
@@ -2239,10 +2181,8 @@ ural_stop(void *priv)
/*
* stop all the transfers, if not already stopped:
*/
- usb2_transfer_stop(sc->sc_xfer[URAL_BULK_DT_WR]);
- usb2_transfer_stop(sc->sc_xfer[URAL_BULK_DT_RD]);
- usb2_transfer_stop(sc->sc_xfer[URAL_BULK_CS_WR]);
- usb2_transfer_stop(sc->sc_xfer[URAL_BULK_CS_RD]);
+ usb2_transfer_stop(sc->sc_xfer[URAL_BULK_WR]);
+ usb2_transfer_stop(sc->sc_xfer[URAL_BULK_RD]);
ural_free_tx_list(sc);
Modified: user/thompsa/usb/sys/dev/usb2/wlan/if_uralvar.h
==============================================================================
--- user/thompsa/usb/sys/dev/usb2/wlan/if_uralvar.h Sun Feb 8 23:51:44 2009 (r188354)
+++ user/thompsa/usb/sys/dev/usb2/wlan/if_uralvar.h Mon Feb 9 00:58:16 2009 (r188355)
@@ -88,11 +88,9 @@ struct ural_vap {
#define URAL_VAP(vap) ((struct ural_vap *)(vap))
enum {
- URAL_BULK_DT_WR,
- URAL_BULK_DT_RD,
- URAL_BULK_CS_WR,
- URAL_BULK_CS_RD,
- URAL_N_TRANSFER = 4,
+ URAL_BULK_WR,
+ URAL_BULK_RD,
+ URAL_N_TRANSFER = 2,
};
struct ural_softc {
@@ -124,9 +122,7 @@ struct ural_softc {
struct mtx sc_mtx;
int sc_flags;
-#define URAL_FLAG_READ_STALL 0x0001
-#define URAL_FLAG_WRITE_STALL 0x0002
-#define URAL_FLAG_DETACH 0x0004
+#define URAL_FLAG_DETACH 0x0001
uint16_t sta[11];
uint32_t rf_regs[4];
Modified: user/thompsa/usb/sys/dev/usb2/wlan/if_zyd2.c
==============================================================================
--- user/thompsa/usb/sys/dev/usb2/wlan/if_zyd2.c Sun Feb 8 23:51:44 2009 (r188354)
+++ user/thompsa/usb/sys/dev/usb2/wlan/if_zyd2.c Mon Feb 9 00:58:16 2009 (r188355)
@@ -77,13 +77,9 @@ static device_probe_t zyd_match;
static device_attach_t zyd_attach;
static device_detach_t zyd_detach;
-static usb2_callback_t zyd_intr_read_clear_stall_callback;
static usb2_callback_t zyd_intr_read_callback;
-static usb2_callback_t zyd_intr_write_clear_stall_callback;
static usb2_callback_t zyd_intr_write_callback;
-static usb2_callback_t zyd_bulk_read_clear_stall_callback;
static usb2_callback_t zyd_bulk_read_callback;
-static usb2_callback_t zyd_bulk_write_clear_stall_callback;
static usb2_callback_t zyd_bulk_write_callback;
static usb2_task_fn_t zyd_task;
@@ -226,7 +222,7 @@ static const struct usb2_device_id zyd_d
};
static const struct usb2_config zyd_config[ZYD_N_TRANSFER] = {
- [ZYD_BULK_DT_WR] = {
+ [ZYD_BULK_WR] = {
.type = UE_BULK,
.endpoint = UE_ADDR_ANY,
.direction = UE_DIR_OUT,
@@ -236,8 +232,7 @@ static const struct usb2_config zyd_conf
.ep_index = 0,
.mh.timeout = 10000, /* 10 seconds */
},
-
- [ZYD_BULK_DT_RD] = {
+ [ZYD_BULK_RD] = {
.type = UE_BULK,
.endpoint = UE_ADDR_ANY,
.direction = UE_DIR_IN,
@@ -246,30 +241,7 @@ static const struct usb2_config zyd_conf
.mh.callback = zyd_bulk_read_callback,
.ep_index = 0,
},
-
- [ZYD_BULK_CS_WR] = {
- .type = UE_CONTROL,
- .endpoint = 0x00, /* Control pipe */
- .direction = UE_DIR_ANY,
- .mh.bufsize = sizeof(struct usb2_device_request),
- .mh.flags = {},
- .mh.callback = zyd_bulk_write_clear_stall_callback,
- .mh.timeout = 1000, /* 1 second */
- .mh.interval = 50, /* 50ms */
- },
-
- [ZYD_BULK_CS_RD] = {
- .type = UE_CONTROL,
- .endpoint = 0x00, /* Control pipe */
- .direction = UE_DIR_ANY,
- .mh.bufsize = sizeof(struct usb2_device_request),
- .mh.flags = {},
- .mh.callback = zyd_bulk_read_clear_stall_callback,
- .mh.timeout = 1000, /* 1 second */
- .mh.interval = 50, /* 50ms */
- },
-
- [ZYD_INTR_DT_WR] = {
+ [ZYD_INTR_WR] = {
.type = UE_BULK_INTR,
.endpoint = UE_ADDR_ANY,
.direction = UE_DIR_OUT,
@@ -279,8 +251,7 @@ static const struct usb2_config zyd_conf
.mh.timeout = 1000, /* 1 second */
.ep_index = 1,
},
-
- [ZYD_INTR_DT_RD] = {
+ [ZYD_INTR_RD] = {
.type = UE_INTERRUPT,
.endpoint = UE_ADDR_ANY,
.direction = UE_DIR_IN,
@@ -288,28 +259,6 @@ static const struct usb2_config zyd_conf
.mh.flags = {.pipe_bof = 1,.short_xfer_ok = 1,},
.mh.callback = zyd_intr_read_callback,
},
-
- [ZYD_INTR_CS_WR] = {
- .type = UE_CONTROL,
- .endpoint = 0x00, /* Control pipe */
- .direction = UE_DIR_ANY,
- .mh.bufsize = sizeof(struct usb2_device_request),
- .mh.flags = {},
- .mh.callback = zyd_intr_write_clear_stall_callback,
- .mh.timeout = 1000, /* 1 second */
- .mh.interval = 50, /* 50ms */
- },
-
- [ZYD_INTR_CS_RD] = {
- .type = UE_CONTROL,
- .endpoint = 0x00, /* Control pipe */
- .direction = UE_DIR_ANY,
- .mh.bufsize = sizeof(struct usb2_device_request),
- .mh.flags = {},
- .mh.callback = zyd_intr_read_clear_stall_callback,
- .mh.timeout = 1000, /* 1 second */
- .mh.interval = 50, /* 50ms */
- },
};
#define zyd_read16_m(sc, val, data) do { \
error = zyd_read16(sc, val, data); \
@@ -780,10 +729,6 @@ zyd_intr_read_callback(struct usb2_xfer
/* FALLTHROUGH */
case USB_ST_SETUP:
- if (sc->sc_flags & ZYD_FLAG_INTR_READ_STALL) {
- usb2_transfer_start(sc->sc_xfer[ZYD_INTR_CS_RD]);
- break;
- }
xfer->frlengths[0] = xfer->max_data_length;
usb2_start_hardware(xfer);
break;
@@ -794,27 +739,14 @@ zyd_intr_read_callback(struct usb2_xfer
if (xfer->error != USB_ERR_CANCELLED) {
/* try to clear stall first */
- sc->sc_flags |= ZYD_FLAG_INTR_READ_STALL;
- usb2_transfer_start(sc->sc_xfer[ZYD_INTR_CS_RD]);
+ usb2_clear_endpoint_stall(xfer);
+ return;
}
break;
}
}
static void
-zyd_intr_read_clear_stall_callback(struct usb2_xfer *xfer)
-{
- struct zyd_softc *sc = xfer->priv_sc;
- struct usb2_xfer *xfer_other = sc->sc_xfer[ZYD_INTR_DT_RD];
-
- if (usb2_clear_stall_callback(xfer, xfer_other)) {
- DPRINTF(sc, ZYD_DEBUG_ANY, "%s\n", "stall cleared");
- sc->sc_flags &= ~ZYD_FLAG_INTR_READ_STALL;
- usb2_transfer_start(xfer_other);
- }
-}
-
-static void
zyd_intr_write_callback(struct usb2_xfer *xfer)
{
struct zyd_softc *sc = xfer->priv_sc;
@@ -829,11 +761,6 @@ zyd_intr_write_callback(struct usb2_xfer
/* FALLTHROUGH */
case USB_ST_SETUP:
-
- if (sc->sc_flags & ZYD_FLAG_INTR_WRITE_STALL) {
- usb2_transfer_start(sc->sc_xfer[ZYD_INTR_CS_WR]);
- break;
- }
STAILQ_FOREACH(rqp, &sc->sc_rqh, rq) {
if (rqp->flags & ZYD_CMD_FLAG_SENT)
continue;
@@ -854,26 +781,13 @@ zyd_intr_write_callback(struct usb2_xfer
if (xfer->error != USB_ERR_CANCELLED) {
/* try to clear stall first */
- sc->sc_flags |= ZYD_FLAG_INTR_WRITE_STALL;
- usb2_transfer_start(sc->sc_xfer[ZYD_INTR_CS_WR]);
+ usb2_clear_endpoint_stall(xfer);
+ return;
}
break;
}
}
-static void
-zyd_intr_write_clear_stall_callback(struct usb2_xfer *xfer)
-{
- struct zyd_softc *sc = xfer->priv_sc;
- struct usb2_xfer *xfer_other = sc->sc_xfer[ZYD_INTR_DT_WR];
-
- if (usb2_clear_stall_callback(xfer, xfer_other)) {
- DPRINTF(sc, ZYD_DEBUG_ANY, "%s\n", "stall cleared");
- sc->sc_flags &= ~ZYD_FLAG_INTR_WRITE_STALL;
- usb2_transfer_start(xfer_other);
- }
-}
-
static int
zyd_cmd(struct zyd_softc *sc, uint16_t code, const void *idata, int ilen,
void *odata, int olen, u_int flags)
@@ -899,8 +813,8 @@ zyd_cmd(struct zyd_softc *sc, uint16_t c
rq.olen = olen;
rq.flags = flags;
STAILQ_INSERT_TAIL(&sc->sc_rqh, &rq, rq);
- usb2_transfer_start(sc->sc_xfer[ZYD_INTR_DT_RD]);
- usb2_transfer_start(sc->sc_xfer[ZYD_INTR_DT_WR]);
+ usb2_transfer_start(sc->sc_xfer[ZYD_INTR_RD]);
+ usb2_transfer_start(sc->sc_xfer[ZYD_INTR_WR]);
/* wait at most one second for command reply */
error = mtx_sleep(&rq, &sc->sc_mtx, 0 , "zydcmd", hz);
@@ -2352,12 +2266,8 @@ zyd_bulk_read_callback(struct usb2_xfer
}
/* FALLTHROUGH */
case USB_ST_SETUP:
- if (sc->sc_flags & ZYD_FLAG_BULK_READ_STALL) {
- usb2_transfer_start(sc->sc_xfer[ZYD_BULK_CS_RD]);
- } else {
- xfer->frlengths[0] = xfer->max_data_length;
- usb2_start_hardware(xfer);
- }
+ xfer->frlengths[0] = xfer->max_data_length;
+ usb2_start_hardware(xfer);
/*
* At the end of a USB callback it is always safe to unlock
@@ -2388,26 +2298,13 @@ zyd_bulk_read_callback(struct usb2_xfer
if (xfer->error != USB_ERR_CANCELLED) {
/* try to clear stall first */
- sc->sc_flags |= ZYD_FLAG_BULK_READ_STALL;
- usb2_transfer_start(sc->sc_xfer[ZYD_BULK_CS_RD]);
+ usb2_clear_endpoint_stall(xfer);
+ return;
}
break;
}
}
-static void
-zyd_bulk_read_clear_stall_callback(struct usb2_xfer *xfer)
-{
- struct zyd_softc *sc = xfer->priv_sc;
- struct usb2_xfer *xfer_other = sc->sc_xfer[ZYD_BULK_DT_RD];
-
- if (usb2_clear_stall_callback(xfer, xfer_other)) {
- DPRINTF(sc, ZYD_DEBUG_ANY, "%s\n", "stall cleared");
- sc->sc_flags &= ~ZYD_FLAG_BULK_READ_STALL;
- usb2_transfer_start(xfer_other);
- }
-}
-
static uint8_t
zyd_plcp_signal(int rate)
{
@@ -2540,7 +2437,7 @@ zyd_tx_mgt(struct zyd_softc *sc, struct
rate);
STAILQ_INSERT_TAIL(&sc->tx_q, data, next);
- usb2_transfer_start(sc->sc_xfer[ZYD_BULK_DT_WR]);
+ usb2_transfer_start(sc->sc_xfer[ZYD_BULK_WR]);
return (0);
}
@@ -2570,11 +2467,6 @@ zyd_bulk_write_callback(struct usb2_xfer
/* FALLTHROUGH */
case USB_ST_SETUP:
- if (sc->sc_flags & ZYD_FLAG_BULK_WRITE_STALL) {
- usb2_transfer_start(sc->sc_xfer[ZYD_BULK_CS_WR]);
- DPRINTF(sc, ZYD_DEBUG_ANY, "%s\n", "write stalled");
- break;
- }
#if 0
if (sc->sc_flags & ZYD_FLAG_WAIT_COMMAND) {
/*
@@ -2623,8 +2515,7 @@ zyd_bulk_write_callback(struct usb2_xfer
if (xfer->error == USB_ERR_STALLED) {
/* try to clear stall first */
- sc->sc_flags |= ZYD_FLAG_BULK_WRITE_STALL;
- usb2_transfer_start(sc->sc_xfer[ZYD_BULK_CS_WR]);
+ usb2_clear_endpoint_stall(xfer);
return;
}
if (xfer->error == USB_ERR_TIMEOUT)
@@ -2639,19 +2530,6 @@ zyd_bulk_write_callback(struct usb2_xfer
}
}
-static void
-zyd_bulk_write_clear_stall_callback(struct usb2_xfer *xfer)
-{
- struct zyd_softc *sc = xfer->priv_sc;
- struct usb2_xfer *xfer_other = sc->sc_xfer[ZYD_BULK_DT_WR];
-
- if (usb2_clear_stall_callback(xfer, xfer_other)) {
- DPRINTF(sc, ZYD_DEBUG_ANY, "%s\n", "stall cleared");
- sc->sc_flags &= ~ZYD_FLAG_BULK_WRITE_STALL;
- usb2_transfer_start(xfer_other);
- }
-}
-
static int
zyd_tx_data(struct zyd_softc *sc, struct mbuf *m0, struct ieee80211_node *ni)
{
@@ -2747,7 +2625,7 @@ zyd_tx_data(struct zyd_softc *sc, struct
rate);
STAILQ_INSERT_TAIL(&sc->tx_q, data, next);
- usb2_transfer_start(sc->sc_xfer[ZYD_BULK_DT_WR]);
+ usb2_transfer_start(sc->sc_xfer[ZYD_BULK_WR]);
return (0);
}
@@ -2972,8 +2850,8 @@ zyd_init_locked(struct zyd_softc *sc)
ifp->if_drv_flags &= ~IFF_DRV_OACTIVE;
ifp->if_drv_flags |= IFF_DRV_RUNNING;
- usb2_transfer_start(sc->sc_xfer[ZYD_BULK_DT_RD]);
- usb2_transfer_start(sc->sc_xfer[ZYD_INTR_DT_RD]);
+ usb2_transfer_start(sc->sc_xfer[ZYD_BULK_RD]);
+ usb2_transfer_start(sc->sc_xfer[ZYD_INTR_RD]);
return;
@@ -3009,10 +2887,8 @@ zyd_stop(struct zyd_softc *sc)
/*
* stop all the transfers, if not already stopped:
*/
- usb2_transfer_stop(sc->sc_xfer[ZYD_BULK_DT_WR]);
- usb2_transfer_stop(sc->sc_xfer[ZYD_BULK_DT_RD]);
- usb2_transfer_stop(sc->sc_xfer[ZYD_BULK_CS_WR]);
- usb2_transfer_stop(sc->sc_xfer[ZYD_BULK_CS_RD]);
+ usb2_transfer_stop(sc->sc_xfer[ZYD_BULK_WR]);
+ usb2_transfer_stop(sc->sc_xfer[ZYD_BULK_RD]);
zyd_free_tx_list(sc);
Modified: user/thompsa/usb/sys/dev/usb2/wlan/if_zydreg.h
==============================================================================
--- user/thompsa/usb/sys/dev/usb2/wlan/if_zydreg.h Sun Feb 8 23:51:44 2009 (r188354)
+++ user/thompsa/usb/sys/dev/usb2/wlan/if_zydreg.h Mon Feb 9 00:58:16 2009 (r188355)
@@ -1247,15 +1247,11 @@ struct zyd_vap {
#define ZYD_VAP(vap) ((struct zyd_vap *)(vap))
enum {
- ZYD_BULK_DT_WR,
- ZYD_BULK_DT_RD,
- ZYD_BULK_CS_WR,
- ZYD_BULK_CS_RD,
- ZYD_INTR_DT_WR,
- ZYD_INTR_DT_RD,
- ZYD_INTR_CS_WR,
- ZYD_INTR_CS_RD,
- ZYD_N_TRANSFER = 8,
+ ZYD_BULK_WR,
+ ZYD_BULK_RD,
+ ZYD_INTR_WR,
+ ZYD_INTR_RD,
+ ZYD_N_TRANSFER = 4,
};
struct zyd_softc {
@@ -1273,10 +1269,6 @@ struct zyd_softc {
#define ZYD_FLAG_DETACHING (1 << 1)
#define ZYD_FLAG_INITONCE (1 << 2)
#define ZYD_FLAG_INITDONE (1 << 3)
-#define ZYD_FLAG_INTR_READ_STALL (1 << 4)
-#define ZYD_FLAG_INTR_WRITE_STALL (1 << 5)
-#define ZYD_FLAG_BULK_READ_STALL (1 << 6)
-#define ZYD_FLAG_BULK_WRITE_STALL (1 << 7)
int sc_if_flags;
uint32_t sc_debug;
More information about the svn-src-user
mailing list