From owner-p4-projects@FreeBSD.ORG Wed Dec 19 01:52:28 2007 Return-Path: Delivered-To: p4-projects@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 32767) id D70B616A418; Wed, 19 Dec 2007 01:52:27 +0000 (UTC) Delivered-To: perforce@FreeBSD.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 748E616A46C for ; Wed, 19 Dec 2007 01:52:27 +0000 (UTC) (envelope-from hselasky@FreeBSD.org) Received: from repoman.freebsd.org (repoman.freebsd.org [IPv6:2001:4f8:fff6::29]) by mx1.freebsd.org (Postfix) with ESMTP id 6A08F13C465 for ; Wed, 19 Dec 2007 01:52:27 +0000 (UTC) (envelope-from hselasky@FreeBSD.org) Received: from repoman.freebsd.org (localhost [127.0.0.1]) by repoman.freebsd.org (8.14.1/8.14.1) with ESMTP id lBJ1qRfW008862 for ; Wed, 19 Dec 2007 01:52:27 GMT (envelope-from hselasky@FreeBSD.org) Received: (from perforce@localhost) by repoman.freebsd.org (8.14.1/8.14.1/Submit) id lBJ1qRI9008859 for perforce@freebsd.org; Wed, 19 Dec 2007 01:52:27 GMT (envelope-from hselasky@FreeBSD.org) Date: Wed, 19 Dec 2007 01:52:27 GMT Message-Id: <200712190152.lBJ1qRI9008859@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 131197 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: Wed, 19 Dec 2007 01:52:28 -0000 http://perforce.freebsd.org/chv.cgi?CH=131197 Change 131197 by hselasky@hselasky_laptop001 on 2007/12/19 01:52:23 Add new control request flag, "USBD_DELAY_STATUS_STAGE", that can be used for USB testing and verification. Affected files ... .. //depot/projects/usb/src/sys/dev/usb/usb.h#27 edit .. //depot/projects/usb/src/sys/dev/usb/usb_transfer.c#77 edit Differences ... ==== //depot/projects/usb/src/sys/dev/usb/usb.h#27 (text+ko) ==== @@ -577,6 +577,7 @@ int ucr_flags; #define USBD_USE_POLLING 0x0001 /* internal flag */ #define USBD_SHORT_XFER_OK 0x0004 /* allow short reads */ +#define USBD_DELAY_STATUS_STAGE 0x0010 /* insert delay before STATUS stage */ int ucr_actlen; /* actual length transferred */ }; ==== //depot/projects/usb/src/sys/dev/usb/usb_transfer.c#77 (text+ko) ==== @@ -3420,6 +3420,12 @@ xfer->flags.use_polling = 0; } + if (flags & USBD_DELAY_STATUS_STAGE) { + xfer->flags.manual_status = 1; + } else { + xfer->flags.manual_status = 0; + } + xfer->timeout = timeout; start_ticks = ticks; @@ -3445,7 +3451,17 @@ xfer->nframes = 2; } else { if (xfer->frlengths[0] == 0) { - break; + if (xfer->flags.manual_status) { + /* + * Delay 70 milliseconds + * before doing the status + * stage: + */ + usbd_pause_mtx(xfer->priv_mtx, 70); + xfer->flags.manual_status = 0; + } else { + break; + } } xfer->nframes = 1; }