u32		dmacount; 
__le32		dmacount; 
static void restart_dma (struct net2280_ep *ep){	struct net2280_request	*req;	u32			dmactl = dmactl_default;	if (ep->stopped)		return;	req = list_entry (ep->queue.next, struct net2280_request, queue);	if (!use_dma_chaining) {		start_dma (ep, req);		return;	}	/* the 2280 will be processing the queue unless queue hiccups after	 * the previous transfer:	 *  IN:   wanted automagic zlp, head doesn't (or vice versa)	 *        DMA_FIFO_VALIDATE doesn't init from dma descriptors.	 *  OUT:  was "usb-short", we must restart.	 */	if (ep->is_in && !req->valid) {		struct net2280_request	*entry, *prev = NULL;		int			reqmode, done = 0;		DEBUG (ep->dev, "%s dma hiccup td %p\n", ep->ep.name, req->td);		ep->in_fifo_validate = likely (req->req.zero			|| (req->req.length % ep->ep.maxpacket) != 0);		if (ep->in_fifo_validate)			dmactl |= (1 << DMA_FIFO_VALIDATE);		list_for_each_entry (entry, &ep->queue, queue) {			u32		dmacount;			if (entry == req)				continue;			dmacount = entry->td->dmacount;			if (!done) {				reqmode = likely (entry->req.zero					|| (entry->req.length						% ep->ep.maxpacket) != 0);				if (reqmode == ep->in_fifo_validate) {					entry->valid = 1;					dmacount |= valid_bit;					entry->td->dmacount = dmacount;					prev = entry;					continue;				} else {					/* force a hiccup */					prev->td->dmacount |= dma_done_ie;					done = 1;				}			}			/* walk the rest of the queue so unlinks behave */			entry->valid = 0;			dmacount &= ~valid_bit;			entry->td->dmacount = dmacount;			prev = entry;		}	}	writel (0, &ep->dma->dmactl);	start_queue (ep, dmactl, req->td_dma);}
10457	/local/tlutelli/issta_data/temp/c/2005_temp/2005/10457/320f34595c3cf37d180a087a935c050e4ac0e4d5/net2280.c/clean/drivers/usb/gadget/net2280.c