Commit 7723de7e authored by Sergei Shtylyov's avatar Sergei Shtylyov Committed by Greg Kroah-Hartman

USB: musb_gadget: remove pointless loop

Remove the pointless 'do () while (0)' loop from musb_g_tx() -- it
makes this function symmetric to musb_g_rx()...
Signed-off-by: default avatarSergei Shtylyov <sshtylyov@ru.mvista.com>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@suse.de>
parent 46034dca
...@@ -429,112 +429,102 @@ void musb_g_tx(struct musb *musb, u8 epnum) ...@@ -429,112 +429,102 @@ void musb_g_tx(struct musb *musb, u8 epnum)
DBG(4, "<== %s, txcsr %04x\n", musb_ep->end_point.name, csr); DBG(4, "<== %s, txcsr %04x\n", musb_ep->end_point.name, csr);
dma = is_dma_capable() ? musb_ep->dma : NULL; dma = is_dma_capable() ? musb_ep->dma : NULL;
do {
/* REVISIT for high bandwidth, MUSB_TXCSR_P_INCOMPTX /*
* probably rates reporting as a host error * REVISIT: for high bandwidth, MUSB_TXCSR_P_INCOMPTX
* probably rates reporting as a host error.
*/
if (csr & MUSB_TXCSR_P_SENTSTALL) {
csr |= MUSB_TXCSR_P_WZC_BITS;
csr &= ~MUSB_TXCSR_P_SENTSTALL;
musb_writew(epio, MUSB_TXCSR, csr);
return;
}
if (csr & MUSB_TXCSR_P_UNDERRUN) {
/* We NAKed, no big deal... little reason to care. */
csr |= MUSB_TXCSR_P_WZC_BITS;
csr &= ~(MUSB_TXCSR_P_UNDERRUN | MUSB_TXCSR_TXPKTRDY);
musb_writew(epio, MUSB_TXCSR, csr);
DBG(20, "underrun on ep%d, req %p\n", epnum, request);
}
if (dma_channel_status(dma) == MUSB_DMA_STATUS_BUSY) {
/*
* SHOULD NOT HAPPEN... has with CPPI though, after
* changing SENDSTALL (and other cases); harmless?
*/ */
if (csr & MUSB_TXCSR_P_SENTSTALL) { DBG(5, "%s dma still busy?\n", musb_ep->end_point.name);
csr |= MUSB_TXCSR_P_WZC_BITS; return;
csr &= ~MUSB_TXCSR_P_SENTSTALL; }
musb_writew(epio, MUSB_TXCSR, csr);
break;
}
if (csr & MUSB_TXCSR_P_UNDERRUN) { if (request) {
/* we NAKed, no big deal ... little reason to care */ u8 is_dma = 0;
if (dma && (csr & MUSB_TXCSR_DMAENAB)) {
is_dma = 1;
csr |= MUSB_TXCSR_P_WZC_BITS; csr |= MUSB_TXCSR_P_WZC_BITS;
csr &= ~(MUSB_TXCSR_P_UNDERRUN csr &= ~(MUSB_TXCSR_DMAENAB | MUSB_TXCSR_P_UNDERRUN |
| MUSB_TXCSR_TXPKTRDY); MUSB_TXCSR_TXPKTRDY);
musb_writew(epio, MUSB_TXCSR, csr); musb_writew(epio, MUSB_TXCSR, csr);
DBG(20, "underrun on ep%d, req %p\n", epnum, request); /* Ensure writebuffer is empty. */
csr = musb_readw(epio, MUSB_TXCSR);
request->actual += musb_ep->dma->actual_len;
DBG(4, "TXCSR%d %04x, DMA off, len %zu, req %p\n",
epnum, csr, musb_ep->dma->actual_len, request);
} }
if (dma_channel_status(dma) == MUSB_DMA_STATUS_BUSY) { if (is_dma || request->actual == request->length) {
/* SHOULD NOT HAPPEN ... has with cppi though, after /*
* changing SENDSTALL (and other cases); harmless? * First, maybe a terminating short packet. Some DMA
* engines might handle this by themselves.
*/ */
DBG(5, "%s dma still busy?\n", musb_ep->end_point.name); if ((request->zero && request->length
break; && request->length % musb_ep->packet_sz == 0)
}
if (request) {
u8 is_dma = 0;
if (dma && (csr & MUSB_TXCSR_DMAENAB)) {
is_dma = 1;
csr |= MUSB_TXCSR_P_WZC_BITS;
csr &= ~(MUSB_TXCSR_DMAENAB
| MUSB_TXCSR_P_UNDERRUN
| MUSB_TXCSR_TXPKTRDY);
musb_writew(epio, MUSB_TXCSR, csr);
/* ensure writebuffer is empty */
csr = musb_readw(epio, MUSB_TXCSR);
request->actual += musb_ep->dma->actual_len;
DBG(4, "TXCSR%d %04x, dma off, "
"len %zu, req %p\n",
epnum, csr,
musb_ep->dma->actual_len,
request);
}
if (is_dma || request->actual == request->length) {
/* First, maybe a terminating short packet.
* Some DMA engines might handle this by
* themselves.
*/
if ((request->zero
&& request->length
&& (request->length
% musb_ep->packet_sz)
== 0)
#ifdef CONFIG_USB_INVENTRA_DMA #ifdef CONFIG_USB_INVENTRA_DMA
|| (is_dma && || (is_dma && (!dma->desired_mode ||
((!dma->desired_mode) || (request->actual &
(request->actual & (musb_ep->packet_sz - 1))))
(musb_ep->packet_sz - 1))))
#endif #endif
) { ) {
/* on dma completion, fifo may not /*
* be available yet ... * On DMA completion, FIFO may not be
*/ * available yet...
if (csr & MUSB_TXCSR_TXPKTRDY)
break;
DBG(4, "sending zero pkt\n");
musb_writew(epio, MUSB_TXCSR,
MUSB_TXCSR_MODE
| MUSB_TXCSR_TXPKTRDY);
request->zero = 0;
}
/* ... or if not, then complete it */
musb_g_giveback(musb_ep, request, 0);
/* kickstart next transfer if appropriate;
* the packet that just completed might not
* be transmitted for hours or days.
* REVISIT for double buffering...
* FIXME revisit for stalls too...
*/ */
musb_ep_select(mbase, epnum); if (csr & MUSB_TXCSR_TXPKTRDY)
csr = musb_readw(epio, MUSB_TXCSR); return;
if (csr & MUSB_TXCSR_FIFONOTEMPTY)
break; DBG(4, "sending zero pkt\n");
request = musb_ep->desc musb_writew(epio, MUSB_TXCSR, MUSB_TXCSR_MODE
? next_request(musb_ep) | MUSB_TXCSR_TXPKTRDY);
: NULL; request->zero = 0;
if (!request) {
DBG(4, "%s idle now\n",
musb_ep->end_point.name);
break;
}
} }
txstate(musb, to_musb_request(request)); /* ... or if not, then complete it. */
musb_g_giveback(musb_ep, request, 0);
/*
* Kickstart next transfer if appropriate;
* the packet that just completed might not
* be transmitted for hours or days.
* REVISIT for double buffering...
* FIXME revisit for stalls too...
*/
musb_ep_select(mbase, epnum);
csr = musb_readw(epio, MUSB_TXCSR);
if (csr & MUSB_TXCSR_FIFONOTEMPTY)
return;
if (!musb_ep->desc) {
DBG(4, "%s idle now\n",
musb_ep->end_point.name);
return;
} else
request = next_request(musb_ep);
} }
} while (0); txstate(musb, to_musb_request(request));
}
} }
/* ------------------------------------------------------------ */ /* ------------------------------------------------------------ */
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment