From owner-p4-projects@FreeBSD.ORG Sun Jun 11 08:28:58 2006 Return-Path: X-Original-To: p4-projects@freebsd.org Delivered-To: p4-projects@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 32767) id BBD3116A519; Sun, 11 Jun 2006 08:28:58 +0000 (UTC) X-Original-To: perforce@FreeBSD.org Delivered-To: perforce@FreeBSD.org Received: from mx1.FreeBSD.org (mx1.freebsd.org [216.136.204.125]) by hub.freebsd.org (Postfix) with ESMTP id 98A7216A503 for ; Sun, 11 Jun 2006 08:28:58 +0000 (UTC) (envelope-from hselasky@FreeBSD.org) Received: from repoman.freebsd.org (repoman.freebsd.org [216.136.204.115]) by mx1.FreeBSD.org (Postfix) with ESMTP id 623A043D46 for ; Sun, 11 Jun 2006 08:28:58 +0000 (GMT) (envelope-from hselasky@FreeBSD.org) Received: from repoman.freebsd.org (localhost [127.0.0.1]) by repoman.freebsd.org (8.13.6/8.13.6) with ESMTP id k5B8QnMS047492 for ; Sun, 11 Jun 2006 08:26:49 GMT (envelope-from hselasky@FreeBSD.org) Received: (from perforce@localhost) by repoman.freebsd.org (8.13.6/8.13.4/Submit) id k5B8QmdK047489 for perforce@freebsd.org; Sun, 11 Jun 2006 08:26:48 GMT (envelope-from hselasky@FreeBSD.org) Date: Sun, 11 Jun 2006 08:26:48 GMT Message-Id: <200606110826.k5B8QmdK047489@repoman.freebsd.org> X-Authentication-Warning: repoman.freebsd.org: perforce set sender to hselasky@FreeBSD.org using -f From: Hans Petter Selasky To: Perforce Change Reviews Cc: Subject: PERFORCE change 98975 for review X-BeenThere: p4-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: p4 projects tree changes List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 11 Jun 2006 08:28:59 -0000 http://perforce.freebsd.org/chv.cgi?CH=98975 Change 98975 by hselasky@hselasky_mini_itx on 2006/06/11 08:26:43 Improve "clear-stall" handling. Affected files ... .. //depot/projects/usb/src/sys/dev/usb/uhid.c#5 edit Differences ... ==== //depot/projects/usb/src/sys/dev/usb/uhid.c#5 (text+ko) ==== @@ -116,7 +116,7 @@ u_int8_t sc_wakeup_detach; u_int8_t sc_flags; #define UHID_FLAG_IMMED 0x01 /* set if read should be immediate */ -#define UHID_FLAG_INTR_STALLED 0x02 /* set if interrup transfer stalled */ +#define UHID_FLAG_INTR_STALL 0x02 /* set if interrupt transfer stalled */ #define UHID_FLAG_STATIC_DESC 0x04 /* set if report descriptors are static */ #define UHID_FLAG_COMMAND_ERR 0x08 /* set if control transfer had an error */ #define UHID_FLAG_WAIT_USB 0x10 /* set if should wait for USB */ @@ -147,17 +147,22 @@ } tr_setup: - USBD_IF_POLL(&(sc->sc_cdev.sc_rdq_free), m); + if (sc->sc_flags & UHID_FLAG_INTR_STALL) { + usbd_transfer_start(sc->sc_xfer[1]); + } else { + USBD_IF_POLL(&(sc->sc_cdev.sc_rdq_free), m); - if ((!(sc->sc_flags & (UHID_FLAG_INTR_STALLED))) && m) { - xfer->length = sc->sc_isize; - usbd_start_hardware(xfer); + if (m) { + xfer->length = sc->sc_isize; + usbd_start_hardware(xfer); + } } return; tr_error: if (xfer->error != USBD_CANCELLED) { /* try to clear stall first */ + sc->sc_flags |= UHID_FLAG_INTR_STALL; usbd_transfer_start(sc->sc_xfer[1]); } return; @@ -171,20 +176,19 @@ tr_setup: /* start clear stall */ - sc->sc_flags |= UHID_FLAG_INTR_STALLED; usbd_clear_stall_tr_setup(xfer, sc->sc_xfer[0]); return; tr_transferred: usbd_clear_stall_tr_transferred(xfer, sc->sc_xfer[0]); - sc->sc_flags &= ~UHID_FLAG_INTR_STALLED; + sc->sc_flags &= ~UHID_FLAG_INTR_STALL; usbd_transfer_start(sc->sc_xfer[0]); return; tr_error: /* bomb out */ - sc->sc_flags &= ~UHID_FLAG_INTR_STALLED; + sc->sc_flags &= ~UHID_FLAG_INTR_STALL; usb_cdev_put_data_error(&(sc->sc_cdev)); return; }