mirror of
				git://git.openwrt.org/openwrt/openwrt.git
				synced 2025-11-03 14:34:27 -05:00 
			
		
		
		
	usb-driver: add preliminary support of ISOCHRONOUS transfer
SVN-Revision: 10077
This commit is contained in:
		
							parent
							
								
									552743fe07
								
							
						
					
					
						commit
						92be73b5cd
					
				@ -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.
 | 
			
		||||
 *
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
/*-------------------------------------------------------------------------*/
 | 
			
		||||
 | 
			
		||||
@ -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>
 | 
			
		||||
@ -16,7 +16,10 @@
 | 
			
		||||
 *   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>
 | 
			
		||||
 | 
			
		||||
@ -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>
 | 
			
		||||
@ -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"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -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.
 | 
			
		||||
 *
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
/*-------------------------------------------------------------------------*/
 | 
			
		||||
 | 
			
		||||
@ -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.
 | 
			
		||||
 *
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
/*-------------------------------------------------------------------------*/
 | 
			
		||||
 | 
			
		||||
@ -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 \
 | 
			
		||||
 | 
			
		||||
@ -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))
 | 
			
		||||
 | 
			
		||||
@ -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.
 | 
			
		||||
 *
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 | 
			
		||||
		Loading…
	
		Reference in New Issue
	
	Block a user