Просмотр исходного кода

usb-driver: add preliminary support of ISOCHRONOUS transfer

SVN-Revision: 10077
Gabor Juhos 18 лет назад
Родитель
Сommit
92be73b5cd

+ 5 - 2
target/linux/adm5120/files/drivers/usb/host/adm5120-dbg.c

@@ -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 <[email protected]>
  *   (C) Copyright 2000-2002 David Brownell <[email protected]>
  *
- * 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.
+ *
  */
 
 /*-------------------------------------------------------------------------*/

+ 5 - 2
target/linux/adm5120/files/drivers/usb/host/adm5120-drv.c

@@ -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 <[email protected]>
@@ -16,7 +16,10 @@
  *   Modified for AMD Alchemy Au1xxx
  *    by Matt Porter <[email protected]>
  *
- * 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>

+ 6 - 3
target/linux/adm5120/files/drivers/usb/host/adm5120-hcd.c

@@ -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 <[email protected]>
@@ -12,7 +12,10 @@
  *   [ (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"
 

+ 5 - 2
target/linux/adm5120/files/drivers/usb/host/adm5120-hub.c

@@ -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 <[email protected]>
  *   (C) Copyright 2000-2004 David Brownell <[email protected]>
  *
- * 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.
+ *
  */
 
 /*-------------------------------------------------------------------------*/

+ 5 - 2
target/linux/adm5120/files/drivers/usb/host/adm5120-mem.c

@@ -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 <[email protected]>
  *   (C) Copyright 2000-2002 David Brownell <[email protected]>
  *
- * 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.
+ *
  */
 
 /*-------------------------------------------------------------------------*/

+ 5 - 2
target/linux/adm5120/files/drivers/usb/host/adm5120-pm.c

@@ -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 <[email protected]>
  *   (C) Copyright 2000-2004 David Brownell <[email protected]>
  *
- * 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 \

+ 21 - 17
target/linux/adm5120/files/drivers/usb/host/adm5120-q.c

@@ -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 <[email protected]>
  *   (C) Copyright 2000-2002 David Brownell <[email protected]>
  *
- * 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))

+ 5 - 2
target/linux/adm5120/files/drivers/usb/host/adm5120.h

@@ -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 <[email protected]>
  *   (C) Copyright 2000-2002 David Brownell <[email protected]>
  *
- * 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.
+ *
  */
 
 /*