usb-driver: add preliminary support of ISOCHRONOUS transfer
authorGabor Juhos <juhosg@openwrt.org>
Tue, 1 Jan 2008 14:37:50 +0000 (14:37 +0000)
committerGabor Juhos <juhosg@openwrt.org>
Tue, 1 Jan 2008 14:37:50 +0000 (14:37 +0000)
SVN-Revision: 10077

target/linux/adm5120/files/drivers/usb/host/adm5120-dbg.c
target/linux/adm5120/files/drivers/usb/host/adm5120-drv.c
target/linux/adm5120/files/drivers/usb/host/adm5120-hcd.c
target/linux/adm5120/files/drivers/usb/host/adm5120-hub.c
target/linux/adm5120/files/drivers/usb/host/adm5120-mem.c
target/linux/adm5120/files/drivers/usb/host/adm5120-pm.c
target/linux/adm5120/files/drivers/usb/host/adm5120-q.c
target/linux/adm5120/files/drivers/usb/host/adm5120.h

index 5b51ea4ab9d7f76b11688dfd7f1c8c0da1ba14a1..1027e5c8cd652f43d32213c0a3dc0c6e7c66152c 100644 (file)
@@ -1,13 +1,16 @@
 /*
  * ADM5120 HCD (Host Controller Driver) for USB
  *
- * Copyright (C) 2007 Gabor Juhos <juhosg at openwrt.org>
+ * Copyright (C) 2007,2008 Gabor Juhos <juhosg at openwrt.org>
  *
  * This file was derived from: drivers/usb/host/ohci-dbg.c
  *   (C) Copyright 1999 Roman Weissgaerber <weissg@vienna.at>
  *   (C) Copyright 2000-2002 David Brownell <dbrownell@users.sourceforge.net>
  *
- * This file is licenced under the GPL.
+ *  This program is free software; you can redistribute it and/or modify it
+ *  under the terms of the GNU General Public License version 2 as published
+ *  by the Free Software Foundation.
+ *
  */
 
 /*-------------------------------------------------------------------------*/
index 04845d96409f12f9f62622e28a089cd1fe4b64fb..02c80f3fdfe2483d50b890dc9017b3188168c67f 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * ADM5120 HCD (Host Controller Driver) for USB
  *
- * Copyright (C) 2007 Gabor Juhos <juhosg at openwrt.org>
+ * Copyright (C) 2007,2008 Gabor Juhos <juhosg at openwrt.org>
  *
  * This file was derived from: drivers/usb/host/ohci-au1xxx.c
  *   (C) Copyright 1999 Roman Weissgaerber <weissg@vienna.at>
  *   Modified for AMD Alchemy Au1xxx
  *    by Matt Porter <mporter@kernel.crashing.org>
  *
- * This file is licenced under the GPL.
+ *  This program is free software; you can redistribute it and/or modify it
+ *  under the terms of the GNU General Public License version 2 as published
+ *  by the Free Software Foundation.
+ *
  */
 
 #include <linux/platform_device.h>
index 54185966145f45e810525752718efb6b6400a90f..c75b87af45404690ba17a5a4313b229d6e3285a6 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * ADM5120 HCD (Host Controller Driver) for USB
  *
- * Copyright (C) 2007 Gabor Juhos <juhosg at openwrt.org>
+ * Copyright (C) 2007,2008 Gabor Juhos <juhosg at openwrt.org>
  *
  * This file was derived from: drivers/usb/host/ohci-hcd.c
  *   (C) Copyright 1999 Roman Weissgaerber <weissg@vienna.at>
  *   [ (C) Copyright 1999 Linus Torvalds  ]
  *   [ (C) Copyright 1999 Gregory P. Smith]
  *
- * This file is licenced under the GPL.
+ *  This program is free software; you can redistribute it and/or modify it
+ *  under the terms of the GNU General Public License version 2 as published
+ *  by the Free Software Foundation.
+ *
  */
 
 #include <linux/module.h>
@@ -42,7 +45,7 @@
 #include "../core/hcd.h"
 #include "../core/hub.h"
 
-#define DRIVER_VERSION "0.14.1"
+#define DRIVER_VERSION "0.16.0"
 #define DRIVER_AUTHOR  "Gabor Juhos <juhosg at openwrt.org>"
 #define DRIVER_DESC    "ADMtek USB 1.1 Host Controller Driver"
 
index c431b8e1c652408153e9cd827da4656c566d1d6a..4fd826d55df72db6688e85ba8911b6ecdc8fac4b 100644 (file)
@@ -1,13 +1,16 @@
 /*
  * ADM5120 HCD (Host Controller Driver) for USB
  *
- * Copyright (C) 2007 Gabor Juhos <juhosg at openwrt.org>
+ * Copyright (C) 2007,2008 Gabor Juhos <juhosg at openwrt.org>
  *
  * This file was derived from: drivers/usb/host/ohci-hub.c
  *   (C) Copyright 1999 Roman Weissgaerber <weissg@vienna.at>
  *   (C) Copyright 2000-2004 David Brownell <dbrownell@users.sourceforge.net>
  *
- * This file is licenced under the GPL.
+ *  This program is free software; you can redistribute it and/or modify it
+ *  under the terms of the GNU General Public License version 2 as published
+ *  by the Free Software Foundation.
+ *
  */
 
 /*-------------------------------------------------------------------------*/
index 7cfd8c13bfec26aa75fc5b5e6590fe15fe9c90b4..3e4b2d992444a31d703770d670a9555b01824cbc 100644 (file)
@@ -1,13 +1,16 @@
 /*
  * ADM5120 HCD (Host Controller Driver) for USB
  *
- * Copyright (C) 2007 Gabor Juhos <juhosg at openwrt.org>
+ * Copyright (C) 2007,2008 Gabor Juhos <juhosg at openwrt.org>
  *
  * This file was derived from: drivers/usb/host/ohci-mem.c
  *   (C) Copyright 1999 Roman Weissgaerber <weissg@vienna.at>
  *   (C) Copyright 2000-2002 David Brownell <dbrownell@users.sourceforge.net>
  *
- * This file is licenced under the GPL.
+ *  This program is free software; you can redistribute it and/or modify it
+ *  under the terms of the GNU General Public License version 2 as published
+ *  by the Free Software Foundation.
+ *
  */
 
 /*-------------------------------------------------------------------------*/
index e10a8e95d1c9f80fd90e0cf518ccfbebf6d1e2e3..ac7bf6cfcc7ef619d50fb079e65f4ea30d224ed3 100644 (file)
@@ -1,13 +1,16 @@
 /*
  * ADM5120 HCD (Host Controller Driver) for USB
  *
- * Copyright (C) 2007 Gabor Juhos <juhosg at openwrt.org>
+ * Copyright (C) 2007,2008 Gabor Juhos <juhosg at openwrt.org>
  *
  * This file was derived from fragments of the OHCI driver.
  *   (C) Copyright 1999 Roman Weissgaerber <weissg@vienna.at>
  *   (C) Copyright 2000-2004 David Brownell <dbrownell@users.sourceforge.net>
  *
- * This file is licenced under the GPL.
+ *  This program is free software; you can redistribute it and/or modify it
+ *  under the terms of the GNU General Public License version 2 as published
+ *  by the Free Software Foundation.
+ *
  */
 
 #define OHCI_SCHED_ENABLES \
index 9995d4254bcfec730b5d6ae813b4bf8b42303cb9..9d33bc31b84d03fcf8b1014822e3de28ebb8593b 100644 (file)
@@ -1,13 +1,16 @@
 /*
  * ADM5120 HCD (Host Controller Driver) for USB
  *
- * Copyright (C) 2007 Gabor Juhos <juhosg at openwrt.org>
+ * Copyright (C) 2007,2008 Gabor Juhos <juhosg at openwrt.org>
  *
  * This file was derived from: drivers/usb/host/ohci-q.c
  *   (C) Copyright 1999 Roman Weissgaerber <weissg@vienna.at>
  *   (C) Copyright 2000-2002 David Brownell <dbrownell@users.sourceforge.net>
  *
- * This file is licenced under the GPL.
+ *  This program is free software; you can redistribute it and/or modify it
+ *  under the terms of the GNU General Public License version 2 as published
+ *  by the Free Software Foundation.
+ *
  */
 
 #include <linux/irq.h>
@@ -571,51 +574,52 @@ static void td_submit_urb(struct admhcd *ahcd, struct urb *urb)
 static int td_done(struct admhcd *ahcd, struct urb *urb, struct td *td)
 {
        struct urb_priv *urb_priv = urb->hcpriv;
-       u32     info = hc32_to_cpup(ahcd, &td->hwINFO);
+       u32     info;
+       u32     bl;
+       u32     tdDBP;
        int     type = usb_pipetype(urb->pipe);
        int     cc;
 
+       info = hc32_to_cpup(ahcd, &td->hwINFO);
+       tdDBP = hc32_to_cpup(ahcd, &td->hwDBP);
+       bl = TD_BL_GET(hc32_to_cpup(ahcd, &td->hwCBL));
        cc = TD_CC_GET(info);
 
        /* ISO ... drivers see per-TD length/status */
        if (type == PIPE_ISOCHRONOUS) {
-#if 0
                /* TODO */
                int     dlen = 0;
 
                /* NOTE:  assumes FC in tdINFO == 0, and that
                 * only the first of 0..MAXPSW psws is used.
                 */
-
-               cc = TD_CC_GET(td);
+#if 0
                if (tdINFO & TD_CC)     /* hc didn't touch? */
                        return;
-
-               if (usb_pipeout (urb->pipe))
-                       dlen = urb->iso_frame_desc [td->index].length;
+#endif
+               if (usb_pipeout(urb->pipe))
+                       dlen = urb->iso_frame_desc[td->index].length;
                else {
                        /* short reads are always OK for ISO */
-                       if (cc == TD_DATAUNDERRUN)
+                       if (cc == TD_CC_DATAUNDERRUN)
                                cc = TD_CC_NOERROR;
-                       dlen = tdPSW & 0x3ff;
+                       dlen = tdDBP - td->data_dma + bl;
                }
+
                urb->actual_length += dlen;
-               urb->iso_frame_desc [td->index].actual_length = dlen;
-               urb->iso_frame_desc [td->index].status = cc_to_error [cc];
+               urb->iso_frame_desc[td->index].actual_length = dlen;
+               urb->iso_frame_desc[td->index].status = cc_to_error[cc];
 
                if (cc != TD_CC_NOERROR)
                        admhc_vdbg (ahcd,
                                "urb %p iso td %p (%d) len %d cc %d\n",
                                urb, td, 1 + td->index, dlen, cc);
-#endif
+
        /* BULK, INT, CONTROL ... drivers see aggregate length/status,
         * except that "setup" bytes aren't counted and "short" transfers
         * might not be reported as errors.
         */
        } else {
-               u32     bl = TD_BL_GET(hc32_to_cpup(ahcd, &td->hwCBL));
-               u32     tdDBP = hc32_to_cpup(ahcd, &td->hwDBP);
-
                /* update packet status if needed (short is normally ok) */
                if (cc == TD_CC_DATAUNDERRUN
                                && !(urb->transfer_flags & URB_SHORT_NOT_OK))
index 6152764c17fdf7973f8f01e9f944da5d4d303431..a3acfe53b597134d709a63acf97cde9ca742518f 100644 (file)
@@ -1,13 +1,16 @@
 /*
  * ADM5120 HCD (Host Controller Driver) for USB
  *
- * Copyright (C) 2007 Gabor Juhos <juhosg at openwrt.org>
+ * Copyright (C) 2007,2008 Gabor Juhos <juhosg at openwrt.org>
  *
  * This file was derived from: drivers/usb/host/ohci.h
  *   (C) Copyright 1999 Roman Weissgaerber <weissg@vienna.at>
  *   (C) Copyright 2000-2002 David Brownell <dbrownell@users.sourceforge.net>
  *
- * This file is licenced under the GPL.
+ *  This program is free software; you can redistribute it and/or modify it
+ *  under the terms of the GNU General Public License version 2 as published
+ *  by the Free Software Foundation.
+ *
  */
 
 /*