Lines Matching refs:ep
175 #define PCH_UDC_CSR(ep) (UDC_CSR_ADDR + ep*4) argument
182 #define UDC_EPIN_IDX(ep) (ep * 2) argument
183 #define UDC_EPOUT_IDX(ep) (ep * 2 + 1) argument
286 struct usb_ep ep; member
343 struct pch_udc_ep ep[PCH_UDC_EP_NUM]; member
431 static inline u32 pch_udc_ep_readl(struct pch_udc_ep *ep, unsigned long reg) in pch_udc_ep_readl() argument
433 return ioread32(ep->dev->base_addr + ep->offset_addr + reg); in pch_udc_ep_readl()
436 static inline void pch_udc_ep_writel(struct pch_udc_ep *ep, in pch_udc_ep_writel() argument
439 iowrite32(val, ep->dev->base_addr + ep->offset_addr + reg); in pch_udc_ep_writel()
442 static inline void pch_udc_ep_bit_set(struct pch_udc_ep *ep, in pch_udc_ep_bit_set() argument
446 pch_udc_ep_writel(ep, pch_udc_ep_readl(ep, reg) | bitmask, reg); in pch_udc_ep_bit_set()
449 static inline void pch_udc_ep_bit_clr(struct pch_udc_ep *ep, in pch_udc_ep_bit_clr() argument
453 pch_udc_ep_writel(ep, pch_udc_ep_readl(ep, reg) & ~(bitmask), reg); in pch_udc_ep_bit_clr()
479 unsigned int ep) in pch_udc_write_csr() argument
481 unsigned long reg = PCH_UDC_CSR(ep); in pch_udc_write_csr()
495 static u32 pch_udc_read_csr(struct pch_udc_dev *dev, unsigned int ep) in pch_udc_read_csr() argument
497 unsigned long reg = PCH_UDC_CSR(ep); in pch_udc_read_csr()
623 static void pch_udc_ep_set_stall(struct pch_udc_ep *ep) in pch_udc_ep_set_stall() argument
625 if (ep->in) { in pch_udc_ep_set_stall()
626 pch_udc_ep_bit_set(ep, UDC_EPCTL_ADDR, UDC_EPCTL_F); in pch_udc_ep_set_stall()
627 pch_udc_ep_bit_set(ep, UDC_EPCTL_ADDR, UDC_EPCTL_S); in pch_udc_ep_set_stall()
629 pch_udc_ep_bit_set(ep, UDC_EPCTL_ADDR, UDC_EPCTL_S); in pch_udc_ep_set_stall()
637 static inline void pch_udc_ep_clear_stall(struct pch_udc_ep *ep) in pch_udc_ep_clear_stall() argument
640 pch_udc_ep_bit_clr(ep, UDC_EPCTL_ADDR, UDC_EPCTL_S); in pch_udc_ep_clear_stall()
642 pch_udc_ep_bit_set(ep, UDC_EPCTL_ADDR, UDC_EPCTL_CNAK); in pch_udc_ep_clear_stall()
650 static inline void pch_udc_ep_set_trfr_type(struct pch_udc_ep *ep, in pch_udc_ep_set_trfr_type() argument
653 pch_udc_ep_writel(ep, ((type << UDC_EPCTL_ET_SHIFT) & in pch_udc_ep_set_trfr_type()
663 static void pch_udc_ep_set_bufsz(struct pch_udc_ep *ep, in pch_udc_ep_set_bufsz() argument
668 data = pch_udc_ep_readl(ep, UDC_BUFIN_FRAMENUM_ADDR); in pch_udc_ep_set_bufsz()
670 pch_udc_ep_writel(ep, data, UDC_BUFIN_FRAMENUM_ADDR); in pch_udc_ep_set_bufsz()
672 data = pch_udc_ep_readl(ep, UDC_BUFOUT_MAXPKT_ADDR); in pch_udc_ep_set_bufsz()
674 pch_udc_ep_writel(ep, data, UDC_BUFOUT_MAXPKT_ADDR); in pch_udc_ep_set_bufsz()
683 static void pch_udc_ep_set_maxpkt(struct pch_udc_ep *ep, u32 pkt_size) in pch_udc_ep_set_maxpkt() argument
685 u32 data = pch_udc_ep_readl(ep, UDC_BUFOUT_MAXPKT_ADDR); in pch_udc_ep_set_maxpkt()
687 pch_udc_ep_writel(ep, data, UDC_BUFOUT_MAXPKT_ADDR); in pch_udc_ep_set_maxpkt()
695 static inline void pch_udc_ep_set_subptr(struct pch_udc_ep *ep, u32 addr) in pch_udc_ep_set_subptr() argument
697 pch_udc_ep_writel(ep, addr, UDC_SUBPTR_ADDR); in pch_udc_ep_set_subptr()
705 static inline void pch_udc_ep_set_ddptr(struct pch_udc_ep *ep, u32 addr) in pch_udc_ep_set_ddptr() argument
707 pch_udc_ep_writel(ep, addr, UDC_DESPTR_ADDR); in pch_udc_ep_set_ddptr()
714 static inline void pch_udc_ep_set_pd(struct pch_udc_ep *ep) in pch_udc_ep_set_pd() argument
716 pch_udc_ep_bit_set(ep, UDC_EPCTL_ADDR, UDC_EPCTL_P); in pch_udc_ep_set_pd()
723 static inline void pch_udc_ep_set_rrdy(struct pch_udc_ep *ep) in pch_udc_ep_set_rrdy() argument
725 pch_udc_ep_bit_set(ep, UDC_EPCTL_ADDR, UDC_EPCTL_RRDY); in pch_udc_ep_set_rrdy()
732 static inline void pch_udc_ep_clear_rrdy(struct pch_udc_ep *ep) in pch_udc_ep_clear_rrdy() argument
734 pch_udc_ep_bit_clr(ep, UDC_EPCTL_ADDR, UDC_EPCTL_RRDY); in pch_udc_ep_clear_rrdy()
880 static inline u32 pch_udc_read_ep_control(struct pch_udc_ep *ep) in pch_udc_read_ep_control() argument
882 return pch_udc_ep_readl(ep, UDC_EPCTL_ADDR); in pch_udc_read_ep_control()
890 static inline void pch_udc_clear_ep_control(struct pch_udc_ep *ep) in pch_udc_clear_ep_control() argument
892 return pch_udc_ep_writel(ep, 0, UDC_EPCTL_ADDR); in pch_udc_clear_ep_control()
900 static inline u32 pch_udc_read_ep_status(struct pch_udc_ep *ep) in pch_udc_read_ep_status() argument
902 return pch_udc_ep_readl(ep, UDC_EPSTS_ADDR); in pch_udc_read_ep_status()
910 static inline void pch_udc_clear_ep_status(struct pch_udc_ep *ep, in pch_udc_clear_ep_status() argument
913 return pch_udc_ep_writel(ep, stat, UDC_EPSTS_ADDR); in pch_udc_clear_ep_status()
921 static inline void pch_udc_ep_set_nak(struct pch_udc_ep *ep) in pch_udc_ep_set_nak() argument
923 pch_udc_ep_bit_set(ep, UDC_EPCTL_ADDR, UDC_EPCTL_SNAK); in pch_udc_ep_set_nak()
931 static void pch_udc_ep_clear_nak(struct pch_udc_ep *ep) in pch_udc_ep_clear_nak() argument
934 struct pch_udc_dev *dev = ep->dev; in pch_udc_ep_clear_nak()
936 if (!(pch_udc_ep_readl(ep, UDC_EPCTL_ADDR) & UDC_EPCTL_NAK)) in pch_udc_ep_clear_nak()
938 if (!ep->in) { in pch_udc_ep_clear_nak()
940 while (!(pch_udc_read_ep_status(ep) & UDC_EPSTS_MRXFIFO_EMP) && in pch_udc_ep_clear_nak()
948 while ((pch_udc_read_ep_control(ep) & UDC_EPCTL_NAK) && --loopcnt) { in pch_udc_ep_clear_nak()
949 pch_udc_ep_bit_set(ep, UDC_EPCTL_ADDR, UDC_EPCTL_CNAK); in pch_udc_ep_clear_nak()
954 __func__, ep->num, (ep->in ? "in" : "out")); in pch_udc_ep_clear_nak()
964 static void pch_udc_ep_fifo_flush(struct pch_udc_ep *ep, int dir) in pch_udc_ep_fifo_flush() argument
967 pch_udc_ep_bit_set(ep, UDC_EPCTL_ADDR, UDC_EPCTL_F); in pch_udc_ep_fifo_flush()
978 static void pch_udc_ep_enable(struct pch_udc_ep *ep, in pch_udc_ep_enable() argument
985 pch_udc_ep_set_trfr_type(ep, desc->bmAttributes); in pch_udc_ep_enable()
986 if (ep->in) in pch_udc_ep_enable()
990 pch_udc_ep_set_bufsz(ep, buff_size, ep->in); in pch_udc_ep_enable()
991 pch_udc_ep_set_maxpkt(ep, usb_endpoint_maxp(desc)); in pch_udc_ep_enable()
992 pch_udc_ep_set_nak(ep); in pch_udc_ep_enable()
993 pch_udc_ep_fifo_flush(ep, ep->in); in pch_udc_ep_enable()
995 val = ep->num << UDC_CSR_NE_NUM_SHIFT | ep->in << UDC_CSR_NE_DIR_SHIFT | in pch_udc_ep_enable()
1003 if (ep->in) in pch_udc_ep_enable()
1004 pch_udc_write_csr(ep->dev, val, UDC_EPIN_IDX(ep->num)); in pch_udc_ep_enable()
1006 pch_udc_write_csr(ep->dev, val, UDC_EPOUT_IDX(ep->num)); in pch_udc_ep_enable()
1013 static void pch_udc_ep_disable(struct pch_udc_ep *ep) in pch_udc_ep_disable() argument
1015 if (ep->in) { in pch_udc_ep_disable()
1017 pch_udc_ep_writel(ep, UDC_EPCTL_F, UDC_EPCTL_ADDR); in pch_udc_ep_disable()
1019 pch_udc_ep_writel(ep, UDC_EPCTL_SNAK, UDC_EPCTL_ADDR); in pch_udc_ep_disable()
1020 pch_udc_ep_bit_set(ep, UDC_EPSTS_ADDR, UDC_EPSTS_IN); in pch_udc_ep_disable()
1023 pch_udc_ep_writel(ep, UDC_EPCTL_SNAK, UDC_EPCTL_ADDR); in pch_udc_ep_disable()
1026 pch_udc_ep_writel(ep, 0, UDC_DESPTR_ADDR); in pch_udc_ep_disable()
1033 static void pch_udc_wait_ep_stall(struct pch_udc_ep *ep) in pch_udc_wait_ep_stall() argument
1038 while ((pch_udc_read_ep_control(ep) & UDC_EPCTL_S) && --count) in pch_udc_wait_ep_stall()
1041 dev_err(&ep->dev->pdev->dev, "%s: wait error\n", __func__); in pch_udc_wait_ep_stall()
1467 static void complete_req(struct pch_udc_ep *ep, struct pch_udc_request *req, in complete_req() argument
1473 unsigned halted = ep->halted; in complete_req()
1483 dev = ep->dev; in complete_req()
1486 if (ep->in) in complete_req()
1496 if (ep->in) in complete_req()
1511 ep->halted = 1; in complete_req()
1513 if (!ep->in) in complete_req()
1514 pch_udc_ep_clear_rrdy(ep); in complete_req()
1515 usb_gadget_giveback_request(&ep->ep, &req->req); in complete_req()
1517 ep->halted = halted; in complete_req()
1524 static void empty_req_queue(struct pch_udc_ep *ep) in empty_req_queue() argument
1528 ep->halted = 1; in empty_req_queue()
1529 while (!list_empty(&ep->queue)) { in empty_req_queue()
1530 req = list_entry(ep->queue.next, struct pch_udc_request, queue); in empty_req_queue()
1531 complete_req(ep, req, -ESHUTDOWN); /* Remove from list */ in empty_req_queue()
1575 static int pch_udc_create_dma_chain(struct pch_udc_ep *ep, in pch_udc_create_dma_chain() argument
1586 pch_udc_free_dma_chain(ep->dev, req); in pch_udc_create_dma_chain()
1599 td = dma_pool_alloc(ep->dev->data_requests, gfp_flags, in pch_udc_create_dma_chain()
1617 pch_udc_free_dma_chain(ep->dev, req); in pch_udc_create_dma_chain()
1634 static int prepare_dma(struct pch_udc_ep *ep, struct pch_udc_request *req, in prepare_dma() argument
1640 retval = pch_udc_create_dma_chain(ep, req, ep->ep.maxpacket, gfp); in prepare_dma()
1645 if (ep->in) in prepare_dma()
1657 static void process_zlp(struct pch_udc_ep *ep, struct pch_udc_request *req) in process_zlp() argument
1659 struct pch_udc_dev *dev = ep->dev; in process_zlp()
1662 complete_req(ep, req, 0); in process_zlp()
1673 pch_udc_ep_clear_nak(&(dev->ep[UDC_EP0IN_IDX])); in process_zlp()
1683 static void pch_udc_start_rxrequest(struct pch_udc_ep *ep, in pch_udc_start_rxrequest() argument
1688 pch_udc_clear_dma(ep->dev, DMA_DIR_RX); in pch_udc_start_rxrequest()
1699 pch_udc_ep_set_ddptr(ep, req->td_data_phys); in pch_udc_start_rxrequest()
1701 pch_udc_enable_ep_interrupts(ep->dev, UDC_EPINT_OUT_EP0 << ep->num); in pch_udc_start_rxrequest()
1702 pch_udc_set_dma(ep->dev, DMA_DIR_RX); in pch_udc_start_rxrequest()
1703 pch_udc_ep_clear_nak(ep); in pch_udc_start_rxrequest()
1704 pch_udc_ep_set_rrdy(ep); in pch_udc_start_rxrequest()
1721 struct pch_udc_ep *ep; in pch_udc_pcd_ep_enable() local
1729 ep = container_of(usbep, struct pch_udc_ep, ep); in pch_udc_pcd_ep_enable()
1730 dev = ep->dev; in pch_udc_pcd_ep_enable()
1734 ep->ep.desc = desc; in pch_udc_pcd_ep_enable()
1735 ep->halted = 0; in pch_udc_pcd_ep_enable()
1736 pch_udc_ep_enable(ep, &ep->dev->cfg_data, desc); in pch_udc_pcd_ep_enable()
1737 ep->ep.maxpacket = usb_endpoint_maxp(desc); in pch_udc_pcd_ep_enable()
1738 pch_udc_enable_ep_interrupts(ep->dev, PCH_UDC_EPINT(ep->in, ep->num)); in pch_udc_pcd_ep_enable()
1754 struct pch_udc_ep *ep; in pch_udc_pcd_ep_disable() local
1760 ep = container_of(usbep, struct pch_udc_ep, ep); in pch_udc_pcd_ep_disable()
1761 if ((usbep->name == ep0_string) || !ep->ep.desc) in pch_udc_pcd_ep_disable()
1764 spin_lock_irqsave(&ep->dev->lock, iflags); in pch_udc_pcd_ep_disable()
1765 empty_req_queue(ep); in pch_udc_pcd_ep_disable()
1766 ep->halted = 1; in pch_udc_pcd_ep_disable()
1767 pch_udc_ep_disable(ep); in pch_udc_pcd_ep_disable()
1768 pch_udc_disable_ep_interrupts(ep->dev, PCH_UDC_EPINT(ep->in, ep->num)); in pch_udc_pcd_ep_disable()
1769 ep->ep.desc = NULL; in pch_udc_pcd_ep_disable()
1770 INIT_LIST_HEAD(&ep->queue); in pch_udc_pcd_ep_disable()
1771 spin_unlock_irqrestore(&ep->dev->lock, iflags); in pch_udc_pcd_ep_disable()
1789 struct pch_udc_ep *ep; in pch_udc_alloc_request() local
1794 ep = container_of(usbep, struct pch_udc_ep, ep); in pch_udc_alloc_request()
1801 if (!ep->dev->dma_addr) in pch_udc_alloc_request()
1804 dma_desc = dma_pool_alloc(ep->dev->data_requests, gfp, in pch_udc_alloc_request()
1828 struct pch_udc_ep *ep; in pch_udc_free_request() local
1834 ep = container_of(usbep, struct pch_udc_ep, ep); in pch_udc_free_request()
1836 dev = ep->dev; in pch_udc_free_request()
1842 pch_udc_free_dma_chain(ep->dev, req); in pch_udc_free_request()
1843 dma_pool_free(ep->dev->data_requests, req->td_data, in pch_udc_free_request()
1864 struct pch_udc_ep *ep; in pch_udc_pcd_queue() local
1871 ep = container_of(usbep, struct pch_udc_ep, ep); in pch_udc_pcd_queue()
1872 dev = ep->dev; in pch_udc_pcd_queue()
1873 if (!ep->ep.desc && ep->num) in pch_udc_pcd_queue()
1885 if (ep->in) in pch_udc_pcd_queue()
1901 if (ep->in) { in pch_udc_pcd_queue()
1916 retval = prepare_dma(ep, req, GFP_ATOMIC); in pch_udc_pcd_queue()
1923 if (list_empty(&ep->queue) && !ep->halted) { in pch_udc_pcd_queue()
1926 process_zlp(ep, req); in pch_udc_pcd_queue()
1930 if (!ep->in) { in pch_udc_pcd_queue()
1931 pch_udc_start_rxrequest(ep, req); in pch_udc_pcd_queue()
1938 pch_udc_wait_ep_stall(ep); in pch_udc_pcd_queue()
1939 pch_udc_ep_clear_nak(ep); in pch_udc_pcd_queue()
1940 pch_udc_enable_ep_interrupts(ep->dev, (1 << ep->num)); in pch_udc_pcd_queue()
1945 list_add_tail(&req->queue, &ep->queue); in pch_udc_pcd_queue()
1965 struct pch_udc_ep *ep; in pch_udc_pcd_dequeue() local
1970 ep = container_of(usbep, struct pch_udc_ep, ep); in pch_udc_pcd_dequeue()
1971 if (!usbep || !usbreq || (!ep->ep.desc && ep->num)) in pch_udc_pcd_dequeue()
1974 spin_lock_irqsave(&ep->dev->lock, flags); in pch_udc_pcd_dequeue()
1976 list_for_each_entry(req, &ep->queue, queue) { in pch_udc_pcd_dequeue()
1978 pch_udc_ep_set_nak(ep); in pch_udc_pcd_dequeue()
1980 complete_req(ep, req, -ECONNRESET); in pch_udc_pcd_dequeue()
1985 spin_unlock_irqrestore(&ep->dev->lock, flags); in pch_udc_pcd_dequeue()
2001 struct pch_udc_ep *ep; in pch_udc_pcd_set_halt() local
2007 ep = container_of(usbep, struct pch_udc_ep, ep); in pch_udc_pcd_set_halt()
2008 if (!ep->ep.desc && !ep->num) in pch_udc_pcd_set_halt()
2010 if (!ep->dev->driver || (ep->dev->gadget.speed == USB_SPEED_UNKNOWN)) in pch_udc_pcd_set_halt()
2013 if (list_empty(&ep->queue)) { in pch_udc_pcd_set_halt()
2015 if (ep->num == PCH_UDC_EP0) in pch_udc_pcd_set_halt()
2016 ep->dev->stall = 1; in pch_udc_pcd_set_halt()
2017 pch_udc_ep_set_stall(ep); in pch_udc_pcd_set_halt()
2019 ep->dev, PCH_UDC_EPINT(ep->in, ep->num)); in pch_udc_pcd_set_halt()
2021 pch_udc_ep_clear_stall(ep); in pch_udc_pcd_set_halt()
2042 struct pch_udc_ep *ep; in pch_udc_pcd_set_wedge() local
2048 ep = container_of(usbep, struct pch_udc_ep, ep); in pch_udc_pcd_set_wedge()
2049 if (!ep->ep.desc && !ep->num) in pch_udc_pcd_set_wedge()
2051 if (!ep->dev->driver || (ep->dev->gadget.speed == USB_SPEED_UNKNOWN)) in pch_udc_pcd_set_wedge()
2054 if (!list_empty(&ep->queue)) { in pch_udc_pcd_set_wedge()
2057 if (ep->num == PCH_UDC_EP0) in pch_udc_pcd_set_wedge()
2058 ep->dev->stall = 1; in pch_udc_pcd_set_wedge()
2059 pch_udc_ep_set_stall(ep); in pch_udc_pcd_set_wedge()
2060 pch_udc_enable_ep_interrupts(ep->dev, in pch_udc_pcd_set_wedge()
2061 PCH_UDC_EPINT(ep->in, ep->num)); in pch_udc_pcd_set_wedge()
2062 ep->dev->prot_stall = 1; in pch_udc_pcd_set_wedge()
2075 struct pch_udc_ep *ep; in pch_udc_pcd_fifo_flush() local
2080 ep = container_of(usbep, struct pch_udc_ep, ep); in pch_udc_pcd_fifo_flush()
2081 if (ep->ep.desc || !ep->num) in pch_udc_pcd_fifo_flush()
2082 pch_udc_ep_fifo_flush(ep, ep->in); in pch_udc_pcd_fifo_flush()
2118 static void pch_udc_start_next_txrequest(struct pch_udc_ep *ep) in pch_udc_start_next_txrequest() argument
2123 if (pch_udc_read_ep_control(ep) & UDC_EPCTL_P) in pch_udc_start_next_txrequest()
2126 if (list_empty(&ep->queue)) in pch_udc_start_next_txrequest()
2130 req = list_entry(ep->queue.next, struct pch_udc_request, queue); in pch_udc_start_next_txrequest()
2135 pch_udc_wait_ep_stall(ep); in pch_udc_start_next_txrequest()
2137 pch_udc_ep_set_ddptr(ep, 0); in pch_udc_start_next_txrequest()
2146 pch_udc_ep_set_ddptr(ep, req->td_data_phys); in pch_udc_start_next_txrequest()
2147 pch_udc_set_dma(ep->dev, DMA_DIR_TX); in pch_udc_start_next_txrequest()
2148 pch_udc_ep_set_pd(ep); in pch_udc_start_next_txrequest()
2149 pch_udc_enable_ep_interrupts(ep->dev, PCH_UDC_EPINT(ep->in, ep->num)); in pch_udc_start_next_txrequest()
2150 pch_udc_ep_clear_nak(ep); in pch_udc_start_next_txrequest()
2157 static void pch_udc_complete_transfer(struct pch_udc_ep *ep) in pch_udc_complete_transfer() argument
2160 struct pch_udc_dev *dev = ep->dev; in pch_udc_complete_transfer()
2162 if (list_empty(&ep->queue)) in pch_udc_complete_transfer()
2164 req = list_entry(ep->queue.next, struct pch_udc_request, queue); in pch_udc_complete_transfer()
2173 (int)(ep->epsts)); in pch_udc_complete_transfer()
2180 complete_req(ep, req, 0); in pch_udc_complete_transfer()
2182 if (!list_empty(&ep->queue)) { in pch_udc_complete_transfer()
2183 pch_udc_wait_ep_stall(ep); in pch_udc_complete_transfer()
2184 pch_udc_ep_clear_nak(ep); in pch_udc_complete_transfer()
2185 pch_udc_enable_ep_interrupts(ep->dev, in pch_udc_complete_transfer()
2186 PCH_UDC_EPINT(ep->in, ep->num)); in pch_udc_complete_transfer()
2188 pch_udc_disable_ep_interrupts(ep->dev, in pch_udc_complete_transfer()
2189 PCH_UDC_EPINT(ep->in, ep->num)); in pch_udc_complete_transfer()
2197 static void pch_udc_complete_receiver(struct pch_udc_ep *ep) in pch_udc_complete_receiver() argument
2200 struct pch_udc_dev *dev = ep->dev; in pch_udc_complete_receiver()
2205 if (list_empty(&ep->queue)) in pch_udc_complete_receiver()
2208 req = list_entry(ep->queue.next, struct pch_udc_request, queue); in pch_udc_complete_receiver()
2209 pch_udc_clear_dma(ep->dev, DMA_DIR_RX); in pch_udc_complete_receiver()
2210 pch_udc_ep_set_ddptr(ep, 0); in pch_udc_complete_receiver()
2222 (int)(ep->epsts)); in pch_udc_complete_receiver()
2245 complete_req(ep, req, 0); in pch_udc_complete_receiver()
2247 if (!list_empty(&ep->queue)) { in pch_udc_complete_receiver()
2248 req = list_entry(ep->queue.next, struct pch_udc_request, queue); in pch_udc_complete_receiver()
2249 pch_udc_start_rxrequest(ep, req); in pch_udc_complete_receiver()
2262 struct pch_udc_ep *ep; in pch_udc_svc_data_in() local
2264 ep = &dev->ep[UDC_EPIN_IDX(ep_num)]; in pch_udc_svc_data_in()
2265 epsts = ep->epsts; in pch_udc_svc_data_in()
2266 ep->epsts = 0; in pch_udc_svc_data_in()
2277 pch_udc_ep_set_stall(ep); in pch_udc_svc_data_in()
2278 pch_udc_enable_ep_interrupts(ep->dev, in pch_udc_svc_data_in()
2279 PCH_UDC_EPINT(ep->in, ep->num)); in pch_udc_svc_data_in()
2283 pch_udc_ep_clear_stall(ep); in pch_udc_svc_data_in()
2285 pch_udc_ep_set_stall(ep); in pch_udc_svc_data_in()
2286 pch_udc_enable_ep_interrupts(ep->dev, in pch_udc_svc_data_in()
2287 PCH_UDC_EPINT(ep->in, ep->num)); in pch_udc_svc_data_in()
2291 pch_udc_complete_transfer(ep); in pch_udc_svc_data_in()
2295 pch_udc_start_next_txrequest(ep); in pch_udc_svc_data_in()
2306 struct pch_udc_ep *ep; in pch_udc_svc_data_out() local
2309 ep = &dev->ep[UDC_EPOUT_IDX(ep_num)]; in pch_udc_svc_data_out()
2310 epsts = ep->epsts; in pch_udc_svc_data_out()
2311 ep->epsts = 0; in pch_udc_svc_data_out()
2313 if ((epsts & UDC_EPSTS_BNA) && (!list_empty(&ep->queue))) { in pch_udc_svc_data_out()
2315 req = list_entry(ep->queue.next, struct pch_udc_request, in pch_udc_svc_data_out()
2320 pch_udc_start_rxrequest(ep, req); in pch_udc_svc_data_out()
2327 pch_udc_ep_set_stall(ep); in pch_udc_svc_data_out()
2328 pch_udc_enable_ep_interrupts(ep->dev, in pch_udc_svc_data_out()
2329 PCH_UDC_EPINT(ep->in, ep->num)); in pch_udc_svc_data_out()
2333 pch_udc_ep_clear_stall(ep); in pch_udc_svc_data_out()
2335 pch_udc_ep_set_stall(ep); in pch_udc_svc_data_out()
2336 pch_udc_enable_ep_interrupts(ep->dev, in pch_udc_svc_data_out()
2337 PCH_UDC_EPINT(ep->in, ep->num)); in pch_udc_svc_data_out()
2342 if (ep->dev->prot_stall == 1) { in pch_udc_svc_data_out()
2343 pch_udc_ep_set_stall(ep); in pch_udc_svc_data_out()
2344 pch_udc_enable_ep_interrupts(ep->dev, in pch_udc_svc_data_out()
2345 PCH_UDC_EPINT(ep->in, ep->num)); in pch_udc_svc_data_out()
2347 pch_udc_complete_receiver(ep); in pch_udc_svc_data_out()
2350 if (list_empty(&ep->queue)) in pch_udc_svc_data_out()
2376 struct pch_udc_ep *ep; in pch_udc_svc_control_in() local
2379 ep = &dev->ep[UDC_EP0IN_IDX]; in pch_udc_svc_control_in()
2380 ep_out = &dev->ep[UDC_EP0OUT_IDX]; in pch_udc_svc_control_in()
2381 epsts = ep->epsts; in pch_udc_svc_control_in()
2382 ep->epsts = 0; in pch_udc_svc_control_in()
2393 pch_udc_complete_transfer(ep); in pch_udc_svc_control_in()
2405 pch_udc_start_next_txrequest(ep); in pch_udc_svc_control_in()
2419 struct pch_udc_ep *ep; in pch_udc_svc_control_out() local
2421 ep = &dev->ep[UDC_EP0OUT_IDX]; in pch_udc_svc_control_out()
2422 stat = ep->epsts; in pch_udc_svc_control_out()
2423 ep->epsts = 0; in pch_udc_svc_control_out()
2429 dev->ep[UDC_EP0IN_IDX].halted = 0; in pch_udc_svc_control_out()
2430 dev->ep[UDC_EP0OUT_IDX].halted = 0; in pch_udc_svc_control_out()
2431 dev->setup_data = ep->td_stp->request; in pch_udc_svc_control_out()
2432 pch_udc_init_setup_buff(ep->td_stp); in pch_udc_svc_control_out()
2434 pch_udc_ep_fifo_flush(&(dev->ep[UDC_EP0IN_IDX]), in pch_udc_svc_control_out()
2435 dev->ep[UDC_EP0IN_IDX].in); in pch_udc_svc_control_out()
2437 dev->gadget.ep0 = &dev->ep[UDC_EP0IN_IDX].ep; in pch_udc_svc_control_out()
2439 dev->gadget.ep0 = &ep->ep; in pch_udc_svc_control_out()
2448 ep->td_data->status = (ep->td_data->status & in pch_udc_svc_control_out()
2451 pch_udc_ep_set_ddptr(ep, ep->td_data_phys); in pch_udc_svc_control_out()
2456 pch_udc_ep_clear_nak(&(dev->ep[UDC_EP0IN_IDX])); in pch_udc_svc_control_out()
2461 pch_udc_ep_clear_nak(ep); in pch_udc_svc_control_out()
2465 pch_udc_ep_set_stall(&(dev->ep[UDC_EP0IN_IDX])); in pch_udc_svc_control_out()
2466 pch_udc_enable_ep_interrupts(ep->dev, in pch_udc_svc_control_out()
2467 PCH_UDC_EPINT(ep->in, ep->num)); in pch_udc_svc_control_out()
2476 pch_udc_ep_set_ddptr(ep, 0); in pch_udc_svc_control_out()
2477 if (!list_empty(&ep->queue)) { in pch_udc_svc_control_out()
2478 ep->epsts = stat; in pch_udc_svc_control_out()
2483 pch_udc_ep_set_rrdy(ep); in pch_udc_svc_control_out()
2495 struct pch_udc_ep *ep = &dev->ep[UDC_EPIN_IDX(ep_num)]; in pch_udc_postsvc_epinters() local
2496 if (list_empty(&ep->queue)) in pch_udc_postsvc_epinters()
2498 pch_udc_enable_ep_interrupts(ep->dev, PCH_UDC_EPINT(ep->in, ep->num)); in pch_udc_postsvc_epinters()
2499 pch_udc_ep_clear_nak(ep); in pch_udc_postsvc_epinters()
2510 struct pch_udc_ep *ep; in pch_udc_read_all_epstatus() local
2515 ep = &dev->ep[UDC_EPIN_IDX(i)]; in pch_udc_read_all_epstatus()
2516 ep->epsts = pch_udc_read_ep_status(ep); in pch_udc_read_all_epstatus()
2517 pch_udc_clear_ep_status(ep, ep->epsts); in pch_udc_read_all_epstatus()
2521 ep = &dev->ep[UDC_EPOUT_IDX(i)]; in pch_udc_read_all_epstatus()
2522 ep->epsts = pch_udc_read_ep_status(ep); in pch_udc_read_all_epstatus()
2523 pch_udc_clear_ep_status(ep, ep->epsts); in pch_udc_read_all_epstatus()
2535 struct pch_udc_ep *ep; in pch_udc_activate_control_ep() local
2539 ep = &dev->ep[UDC_EP0IN_IDX]; in pch_udc_activate_control_ep()
2540 pch_udc_clear_ep_control(ep); in pch_udc_activate_control_ep()
2541 pch_udc_ep_fifo_flush(ep, ep->in); in pch_udc_activate_control_ep()
2542 pch_udc_ep_set_bufsz(ep, UDC_EP0IN_BUFF_SIZE, ep->in); in pch_udc_activate_control_ep()
2543 pch_udc_ep_set_maxpkt(ep, UDC_EP0IN_MAX_PKT_SIZE); in pch_udc_activate_control_ep()
2545 ep->td_data = NULL; in pch_udc_activate_control_ep()
2546 ep->td_stp = NULL; in pch_udc_activate_control_ep()
2547 ep->td_data_phys = 0; in pch_udc_activate_control_ep()
2548 ep->td_stp_phys = 0; in pch_udc_activate_control_ep()
2551 ep = &dev->ep[UDC_EP0OUT_IDX]; in pch_udc_activate_control_ep()
2552 pch_udc_clear_ep_control(ep); in pch_udc_activate_control_ep()
2553 pch_udc_ep_fifo_flush(ep, ep->in); in pch_udc_activate_control_ep()
2554 pch_udc_ep_set_bufsz(ep, UDC_EP0OUT_BUFF_SIZE, ep->in); in pch_udc_activate_control_ep()
2555 pch_udc_ep_set_maxpkt(ep, UDC_EP0OUT_MAX_PKT_SIZE); in pch_udc_activate_control_ep()
2557 pch_udc_write_csr(ep->dev, val, UDC_EP0OUT_IDX); in pch_udc_activate_control_ep()
2560 pch_udc_init_setup_buff(ep->td_stp); in pch_udc_activate_control_ep()
2562 pch_udc_ep_set_subptr(ep, ep->td_stp_phys); in pch_udc_activate_control_ep()
2564 pch_udc_ep_set_ddptr(ep, ep->td_data_phys); in pch_udc_activate_control_ep()
2567 ep->td_data->status = PCH_UDC_DMA_LAST; in pch_udc_activate_control_ep()
2568 ep->td_data->dataptr = dev->dma_addr; in pch_udc_activate_control_ep()
2569 ep->td_data->next = ep->td_data_phys; in pch_udc_activate_control_ep()
2571 pch_udc_ep_clear_nak(ep); in pch_udc_activate_control_ep()
2581 struct pch_udc_ep *ep; in pch_udc_svc_ur_interrupt() local
2592 ep = &dev->ep[i]; in pch_udc_svc_ur_interrupt()
2593 pch_udc_clear_ep_status(ep, UDC_EPSTS_ALL_CLR_MASK); in pch_udc_svc_ur_interrupt()
2594 pch_udc_clear_ep_control(ep); in pch_udc_svc_ur_interrupt()
2595 pch_udc_ep_set_ddptr(ep, 0); in pch_udc_svc_ur_interrupt()
2596 pch_udc_write_csr(ep->dev, 0x00, i); in pch_udc_svc_ur_interrupt()
2605 ep = &dev->ep[i]; in pch_udc_svc_ur_interrupt()
2606 pch_udc_ep_set_nak(ep); in pch_udc_svc_ur_interrupt()
2607 pch_udc_ep_fifo_flush(ep, ep->in); in pch_udc_svc_ur_interrupt()
2609 empty_req_queue(ep); in pch_udc_svc_ur_interrupt()
2649 pch_udc_ep_set_rrdy(&(dev->ep[UDC_EP0OUT_IDX])); in pch_udc_svc_enum_interrupt()
2689 pch_udc_ep_clear_stall(&(dev->ep[i])); in pch_udc_svc_intf_interrupt()
2690 dev->ep[i].halted = 0; in pch_udc_svc_intf_interrupt()
2722 pch_udc_ep_clear_stall(&(dev->ep[i])); in pch_udc_svc_cfg_interrupt()
2723 dev->ep[i].halted = 0; in pch_udc_svc_cfg_interrupt()
2889 memset(dev->ep, 0, sizeof dev->ep); in pch_udc_pcd_reinit()
2891 struct pch_udc_ep *ep = &dev->ep[i]; in pch_udc_pcd_reinit() local
2892 ep->dev = dev; in pch_udc_pcd_reinit()
2893 ep->halted = 1; in pch_udc_pcd_reinit()
2894 ep->num = i / 2; in pch_udc_pcd_reinit()
2895 ep->in = ~i & 1; in pch_udc_pcd_reinit()
2896 ep->ep.name = ep_string[i]; in pch_udc_pcd_reinit()
2897 ep->ep.ops = &pch_udc_ep_ops; in pch_udc_pcd_reinit()
2898 if (ep->in) { in pch_udc_pcd_reinit()
2899 ep->offset_addr = ep->num * UDC_EP_REG_SHIFT; in pch_udc_pcd_reinit()
2900 ep->ep.caps.dir_in = true; in pch_udc_pcd_reinit()
2902 ep->offset_addr = (UDC_EPINT_OUT_SHIFT + ep->num) * in pch_udc_pcd_reinit()
2904 ep->ep.caps.dir_out = true; in pch_udc_pcd_reinit()
2907 ep->ep.caps.type_control = true; in pch_udc_pcd_reinit()
2909 ep->ep.caps.type_iso = true; in pch_udc_pcd_reinit()
2910 ep->ep.caps.type_bulk = true; in pch_udc_pcd_reinit()
2911 ep->ep.caps.type_int = true; in pch_udc_pcd_reinit()
2914 usb_ep_set_maxpacket_limit(&ep->ep, UDC_BULK_MAX_PKT_SIZE); in pch_udc_pcd_reinit()
2915 list_add_tail(&ep->ep.ep_list, &dev->gadget.ep_list); in pch_udc_pcd_reinit()
2916 INIT_LIST_HEAD(&ep->queue); in pch_udc_pcd_reinit()
2918 usb_ep_set_maxpacket_limit(&dev->ep[UDC_EP0IN_IDX].ep, UDC_EP0IN_MAX_PKT_SIZE); in pch_udc_pcd_reinit()
2919 usb_ep_set_maxpacket_limit(&dev->ep[UDC_EP0OUT_IDX].ep, UDC_EP0OUT_MAX_PKT_SIZE); in pch_udc_pcd_reinit()
2922 list_del_init(&dev->ep[UDC_EP0IN_IDX].ep.ep_list); in pch_udc_pcd_reinit()
2923 list_del_init(&dev->ep[UDC_EP0OUT_IDX].ep.ep_list); in pch_udc_pcd_reinit()
2925 dev->gadget.ep0 = &dev->ep[UDC_EP0IN_IDX].ep; in pch_udc_pcd_reinit()
2979 &dev->ep[UDC_EP0OUT_IDX].td_stp_phys); in init_dma_pools()
2985 dev->ep[UDC_EP0OUT_IDX].td_stp = td_stp; in init_dma_pools()
2989 &dev->ep[UDC_EP0OUT_IDX].td_data_phys); in init_dma_pools()
2995 dev->ep[UDC_EP0OUT_IDX].td_data = td_data; in init_dma_pools()
2996 dev->ep[UDC_EP0IN_IDX].td_stp = NULL; in init_dma_pools()
2997 dev->ep[UDC_EP0IN_IDX].td_stp_phys = 0; in init_dma_pools()
2998 dev->ep[UDC_EP0IN_IDX].td_data = NULL; in init_dma_pools()
2999 dev->ep[UDC_EP0IN_IDX].td_data_phys = 0; in init_dma_pools()
3072 if (dev->ep[UDC_EP0OUT_IDX].td_stp) { in pch_udc_remove()
3074 dev->ep[UDC_EP0OUT_IDX].td_stp, in pch_udc_remove()
3075 dev->ep[UDC_EP0OUT_IDX].td_stp_phys); in pch_udc_remove()
3077 if (dev->ep[UDC_EP0OUT_IDX].td_data) { in pch_udc_remove()
3079 dev->ep[UDC_EP0OUT_IDX].td_data, in pch_udc_remove()
3080 dev->ep[UDC_EP0OUT_IDX].td_data_phys); in pch_udc_remove()