On Tue, Nov 04, 2008 at 05:46:34PM +0530, Ajay Kumar Gupta wrote: > Currently qh list for control, bulkin and bulkout are > part of musb structure as musb->control, musb->in_bulk > and musb->out_bulk.This patch makes it generic across > hw_ep by removing them from musb and mapping them to > in_list and out_list of hw_ep structure. applied, thanks > > Signed-off-by: Ravi Babu <ravibabu@xxxxxx> > Signed-off-by: Swaminathan S <swami.iyer@xxxxxx> > Signed-off-by: Thomas Abraham <t-abraham@xxxxxx> > Signed-off-by: Ajay Kumar Gupta <ajay.gupta@xxxxxx> > --- > drivers/usb/musb/musb_core.c | 6 +++--- > drivers/usb/musb/musb_core.h | 9 ++++++--- > drivers/usb/musb/musb_host.c | 36 ++++++++++++++++++------------------ > 3 files changed, 27 insertions(+), 24 deletions(-) > > diff --git a/drivers/usb/musb/musb_core.c b/drivers/usb/musb/musb_core.c > index ebe0828..dbf8861 100644 > --- a/drivers/usb/musb/musb_core.c > +++ b/drivers/usb/musb/musb_core.c > @@ -1445,6 +1445,9 @@ static int __init musb_core_init(u16 musb_type, struct musb *musb) > > hw_ep->regs = MUSB_EP_OFFSET(i, 0) + mbase; > #ifdef CONFIG_USB_MUSB_HDRC_HCD > + /* init list of in and out qhs */ > + INIT_LIST_HEAD(&hw_ep->in_list); > + INIT_LIST_HEAD(&hw_ep->out_list); > hw_ep->target_regs = MUSB_BUSCTL_OFFSET(i, 0) + mbase; > hw_ep->rx_reinit = 1; > hw_ep->tx_reinit = 1; > @@ -1790,9 +1793,6 @@ allocate_instance(struct device *dev, > /* usbcore sets dev->driver_data to hcd, and sometimes uses that... */ > > musb = hcd_to_musb(hcd); > - INIT_LIST_HEAD(&musb->control); > - INIT_LIST_HEAD(&musb->in_bulk); > - INIT_LIST_HEAD(&musb->out_bulk); > > hcd->uses_new_polling = 1; > > diff --git a/drivers/usb/musb/musb_core.h b/drivers/usb/musb/musb_core.h > index 4972a3b..92b7c47 100644 > --- a/drivers/usb/musb/musb_core.h > +++ b/drivers/usb/musb/musb_core.h > @@ -271,6 +271,12 @@ struct musb_hw_ep { > struct musb_qh *in_qh; > struct musb_qh *out_qh; > > + /* list of rx and tx qhs, control transfer needs only > + * one list thus only in_list is used for control. > + */ > + struct list_head in_list; > + struct list_head out_list; > + > u8 rx_reinit; > u8 tx_reinit; > #endif > @@ -328,9 +334,6 @@ struct musb { > */ > struct musb_hw_ep *bulk_ep; > > - struct list_head control; /* of musb_qh */ > - struct list_head in_bulk; /* of musb_qh */ > - struct list_head out_bulk; /* of musb_qh */ > struct musb_qh *in[16]; > struct musb_qh *out[16]; > #endif > diff --git a/drivers/usb/musb/musb_host.c b/drivers/usb/musb/musb_host.c > index 0b40a00..f276229 100644 > --- a/drivers/usb/musb/musb_host.c > +++ b/drivers/usb/musb/musb_host.c > @@ -1219,7 +1219,7 @@ void musb_host_tx(struct musb *musb, u8 epnum) > * transfer, if there's some other (nonperiodic) tx urb > * that could use this fifo. (dma complicates it...) > * > - * if (bulk && qh->ring.next != &musb->out_bulk), then > + * if (bulk && qh->ring.next != &hw_ep->out_list), then > * we have a candidate... NAKing is *NOT* an error > */ > musb_ep_select(mbase, epnum); > @@ -1378,7 +1378,7 @@ finish: > > #endif > > -/* Schedule next qh from musb->in_bulk and add the current qh at tail > +/* Schedule next qh from ep->in_list and add the current qh at tail > * to avoid endpoint starvation. > */ > static void musb_bulk_nak_timeout(struct musb *musb, struct musb_hw_ep *ep) > @@ -1398,7 +1398,7 @@ static void musb_bulk_nak_timeout(struct musb *musb, struct musb_hw_ep *ep) > rx_csr &= ~MUSB_RXCSR_DATAERROR; > musb_writew(epio, MUSB_RXCSR, rx_csr); > > - cur_qh = first_qh(&musb->in_bulk); > + cur_qh = first_qh(&ep->in_list); > if (cur_qh) { > urb = next_urb(cur_qh); > if (dma_channel_status(dma) == MUSB_DMA_STATUS_BUSY) { > @@ -1409,12 +1409,12 @@ static void musb_bulk_nak_timeout(struct musb *musb, struct musb_hw_ep *ep) > } > musb_save_toggle(ep, 1, urb); > > - /* delete cur_qh and add to tail to musb->in_bulk */ > + /* delete cur_qh and add to tail to ep->in_list */ > list_del(&cur_qh->ring); > - list_add_tail(&cur_qh->ring, &musb->in_bulk); > + list_add_tail(&cur_qh->ring, &ep->in_list); > > - /* get the next qh from musb->in_bulk */ > - next_qh = first_qh(&musb->in_bulk); > + /* get the next qh from ep->in_list */ > + next_qh = first_qh(&ep->in_list); > > /* set rx_reinit and schedule the next qh */ > ep->rx_reinit = 1; > @@ -1489,12 +1489,12 @@ void musb_host_rx(struct musb *musb, u8 epnum) > * transfer, if there's some other (nonperiodic) rx urb > * that could use this fifo. (dma complicates it...) > * > - * if (bulk && qh->ring.next != &musb->in_bulk), then > + * if (bulk && qh->ring.next != &hw_ep->in_list), then > * we have a candidate... NAKing is *NOT* an error > */ > DBG(6, "RX end %d NAK timeout\n", epnum); > if (usb_pipebulk(urb->pipe) && qh->mux == 1 && > - !list_is_singular(&musb->in_bulk)) { > + !list_is_singular(&hw_ep->in_list)) { > musb_bulk_nak_timeout(musb, hw_ep); > return; > } > @@ -1783,8 +1783,8 @@ static int musb_schedule( > > /* use fixed hardware for control and bulk */ > if (qh->type == USB_ENDPOINT_XFER_CONTROL) { > - head = &musb->control; > hw_ep = musb->control_ep; > + head = &hw_ep->in_list; > goto success; > } > > @@ -1840,9 +1840,9 @@ static int musb_schedule( > if (best_end > 0 && qh->type == USB_ENDPOINT_XFER_BULK) { > hw_ep = musb->bulk_ep; > if (is_in) > - head = &musb->in_bulk; > + head = &hw_ep->in_list; > else > - head = &musb->out_bulk; > + head = &hw_ep->out_list; > /* Enable bulk NAK time out scheme when bulk requests are > * multiplxed.This scheme doen't work in high speed to full > * speed scenario as NAK interrupts are not coming from a > @@ -2136,14 +2136,14 @@ static int musb_urb_dequeue(struct usb_hcd *hcd, struct urb *urb, int status) > else { > switch (qh->type) { > case USB_ENDPOINT_XFER_CONTROL: > - sched = &musb->control; > + sched = &musb->control_ep->in_list; > break; > case USB_ENDPOINT_XFER_BULK: > if (qh->mux == 1) { > if (usb_pipein(urb->pipe)) > - sched = &musb->in_bulk; > + sched = &musb->bulk_ep->in_list; > else > - sched = &musb->out_bulk; > + sched = &musb->bulk_ep->out_list; > break; > } > default: > @@ -2207,14 +2207,14 @@ musb_h_disable(struct usb_hcd *hcd, struct usb_host_endpoint *hep) > > switch (qh->type) { > case USB_ENDPOINT_XFER_CONTROL: > - sched = &musb->control; > + sched = &musb->control_ep->in_list; > break; > case USB_ENDPOINT_XFER_BULK: > if (qh->mux == 1) { > if (is_in) > - sched = &musb->in_bulk; > + sched = &musb->bulk_ep->in_list; > else > - sched = &musb->out_bulk; > + sched = &musb->bulk_ep->out_list; > break; > } > case USB_ENDPOINT_XFER_ISOC: > -- > 1.5.6 -- balbi -- To unsubscribe from this list: send the line "unsubscribe linux-omap" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html