From owner-svn-src-user@FreeBSD.ORG Mon Feb 9 00:58:16 2009 Return-Path: Delivered-To: svn-src-user@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id DD5FE106564A; Mon, 9 Feb 2009 00:58:16 +0000 (UTC) (envelope-from thompsa@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id CBC378FC18; Mon, 9 Feb 2009 00:58:16 +0000 (UTC) (envelope-from thompsa@FreeBSD.org) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id n190wG9N039856; Mon, 9 Feb 2009 00:58:16 GMT (envelope-from thompsa@svn.freebsd.org) Received: (from thompsa@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id n190wG6U039849; Mon, 9 Feb 2009 00:58:16 GMT (envelope-from thompsa@svn.freebsd.org) Message-Id: <200902090058.n190wG6U039849@svn.freebsd.org> From: Andrew Thompson Date: Mon, 9 Feb 2009 00:58:16 +0000 (UTC) To: src-committers@freebsd.org, svn-src-user@freebsd.org X-SVN-Group: user MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r188355 - user/thompsa/usb/sys/dev/usb2/wlan X-BeenThere: svn-src-user@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the experimental " user" src tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 09 Feb 2009 00:58:17 -0000 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;