From owner-freebsd-usb@FreeBSD.ORG Sat Feb 9 00:16:24 2013 Return-Path: Delivered-To: freebsd-usb@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by hub.freebsd.org (Postfix) with ESMTP id 48196968 for ; Sat, 9 Feb 2013 00:16:24 +0000 (UTC) (envelope-from aman.sawrup@bluecoat.com) Received: from synonym.bluecoat.com (synonym.bluecoat.com [199.91.133.5]) by mx1.freebsd.org (Postfix) with ESMTP id 36A38B14 for ; Sat, 9 Feb 2013 00:16:24 +0000 (UTC) Received: from [10.167.9.25] (unknown [10.167.9.25]) by synonym.bluecoat.com (Postfix) with ESMTP id 9950C7FE12C; Fri, 8 Feb 2013 16:06:48 -0800 (PST) Message-ID: <51159317.6030307@bluecoat.com> Date: Fri, 08 Feb 2013 19:06:47 -0500 From: Aman Sawrup User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:17.0) Gecko/20130106 Thunderbird/17.0.2 MIME-Version: 1.0 To: freebsd-usb@freebsd.org Subject: Re: Reading 1024 bytes from mass storage device using 3 frames gives USB_ERR_STALLED References: <1360360082956-5785167.post@n5.nabble.com> <201302090001.57258.hselasky@c2i.net> In-Reply-To: <201302090001.57258.hselasky@c2i.net> Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit X-BeenThere: freebsd-usb@freebsd.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: FreeBSD support for USB List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 09 Feb 2013 00:16:24 -0000 Hi Hans, Thanks very much for your help. This mass storage device does indeed have wMaxPacketSize of 512. (gdb) p *xfer->endpoint->edesc $6 = { bLength = 0x7, bDescriptorType = 0x5, bEndpointAddress = 0x81, bmAttributes = 0x2, wMaxPacketSize = "", bInterval = 0xff } (gdb) x /xh xfer->endpoint->edesc.wMaxPacketSize 0x6dba0616: 0x0200 Thanks again, Aman On 13-02-08 06:01 PM, Hans Petter Selasky wrote: > On Friday 08 February 2013 22:48:02 aman.sawrup wrote: >> Hello, >> >> We have ported the FreeBSD USB stack to my employers proprietary RTOS. The >> code was taken from the MAIN branch a little while after RELENG_8_BP tag >> was created. >> >> I'm trying to read data from the following mass storage device umass0: >> >> ehci0: [FILTER+ITHREAD] >> usbus0: EHCI version 1.0 >> usbus0: 480Mbps High Speed USB v2.0 >> ugen0.1: at usbus0 >> uhub0: on usbus0 >> uhub0: 2 ports with 2 removable, self powered >> ugen0.2: at usbus0 >> uhub1: on >> usbus0 >> uhub1: 8 ports with 8 removable, self powered >> ugen0.3: at usbus0 >> umass0: on >> usbus0 >> umass0: SCSI over Bulk-Only; quirks = 0x4800 >> >> Reading data one frame per transfer works. For example, if I want to read >> 512 bytes that is physically contiguous and is placed in a single frame, >> that works fine. >> >> However, when attempting to read 1024 bytes, that is not physically >> contiguous, using 3 frames for the same transfer, I get USB_ERR_STALLED. I >> have the frames setup as follows: >> frame[0] = 200 bytes >> frame[1] = 512 bytes >> frame[2] = 312 bytes > Hi, > > The frame lengths must be a multiple of the wMaxPacketSize (typically 64 or > 512). Each frame is encoded like one or more USB packets independent of the > next one. I.E. USB packet data may not cross a frame. This is not supported by > the EHCI/OHCI and UHCI hardware, and the USB stack will not make a fixup > buffer for this. The USB stack returns the device independent multiplier > length for this purpose when calling usbd_xfer_max_framelen(). Only when > (frame[n] % usbd_xfer_max_framelen() == 0) it will work like you want. > > --HPS