Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 9 Feb 2009 00:58:16 +0000 (UTC)
From:      Andrew Thompson <thompsa@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-user@freebsd.org
Subject:   svn commit: r188355 - user/thompsa/usb/sys/dev/usb2/wlan
Message-ID:  <200902090058.n190wG6U039849@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
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;
 



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