From mboxrd@z Thu Jan 1 00:00:00 1970 From: Hans de Goede Date: Sun, 21 Sep 2014 19:53:35 +0200 Subject: [U-Boot] [PATCH 2/7] usb: ehci: Move interrupt packet length check to create_int_queue In-Reply-To: References: <1411225272-13793-1-git-send-email-hdegoede@redhat.com> <1411225272-13793-3-git-send-email-hdegoede@redhat.com> Message-ID: <541F109F.9050707@redhat.com> List-Id: MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit To: u-boot@lists.denx.de Hi, On 09/20/2014 07:42 PM, Michael Trimarchi wrote: > Hi > > On Sat, Sep 20, 2014 at 5:01 PM, Hans de Goede wrote: >> Preperation patch to use create_int_queue outside of ehci-hcd.c . >> >> Signed-off-by: Hans de Goede >> --- >> drivers/usb/host/ehci-hcd.c | 36 +++++++++++++++++++----------------- >> 1 file changed, 19 insertions(+), 17 deletions(-) >> >> diff --git a/drivers/usb/host/ehci-hcd.c b/drivers/usb/host/ehci-hcd.c >> index 20830d7..cf3e3c0 100644 >> --- a/drivers/usb/host/ehci-hcd.c >> +++ b/drivers/usb/host/ehci-hcd.c >> @@ -1163,6 +1163,23 @@ create_int_queue(struct usb_device *dev, unsigned long pipe, int queuesize, >> struct int_queue *result = NULL; >> int i; >> >> + /* >> + * Interrupt transfers requiring several transactions are not supported >> + * because bInterval is ignored. >> + * >> + * Also, ehci_submit_async() relies on wMaxPacketSize being a power of 2 >> + * <= PKT_ALIGN if several qTDs are required, while the USB >> + * specification does not constrain this for interrupt transfers. That >> + * means that ehci_submit_async() would support interrupt transfers >> + * requiring several transactions only as long as the transfer size does >> + * not require more than a single qTD. >> + */ >> + if (elementsize > usb_maxpacket(dev, pipe)) { >> + printf("%s: xfers requiring several transactions are not supported.\n", >> + __func__); >> + return NULL; >> + } >> + >> debug("Enter create_int_queue\n"); >> if (usb_pipetype(pipe) != PIPE_INTERRUPT) { >> debug("non-interrupt pipe (type=%lu)", usb_pipetype(pipe)); >> @@ -1384,24 +1401,9 @@ submit_int_msg(struct usb_device *dev, unsigned long pipe, void *buffer, >> debug("dev=%p, pipe=%lu, buffer=%p, length=%d, interval=%d", >> dev, pipe, buffer, length, interval); >> >> - /* >> - * Interrupt transfers requiring several transactions are not supported >> - * because bInterval is ignored. >> - * >> - * Also, ehci_submit_async() relies on wMaxPacketSize being a power of 2 >> - * <= PKT_ALIGN if several qTDs are required, while the USB >> - * specification does not constrain this for interrupt transfers. That >> - * means that ehci_submit_async() would support interrupt transfers >> - * requiring several transactions only as long as the transfer size does >> - * not require more than a single qTD. >> - */ >> - if (length > usb_maxpacket(dev, pipe)) { >> - printf("%s: Interrupt transfers requiring several " >> - "transactions are not supported.\n", __func__); >> - return -1; >> - } >> - >> queue = create_int_queue(dev, pipe, 1, length, buffer); >> + if (!queue) >> + return -1; > > Can you return a more consistent error code? I'm just moving code around, and returning the same error code as before. Surely changing the error code belongs in another patch ? Regards, Hans