aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/usb/gadget/goku_udc.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/usb/gadget/goku_udc.c')
-rw-r--r--drivers/usb/gadget/goku_udc.c84
1 files changed, 17 insertions, 67 deletions
diff --git a/drivers/usb/gadget/goku_udc.c b/drivers/usb/gadget/goku_udc.c
index ae931af05cef..d6c5f1150ae7 100644
--- a/drivers/usb/gadget/goku_udc.c
+++ b/drivers/usb/gadget/goku_udc.c
@@ -20,7 +20,6 @@
20 * - DMA works with ep1 (OUT transfers) and ep2 (IN transfers). 20 * - DMA works with ep1 (OUT transfers) and ep2 (IN transfers).
21 */ 21 */
22 22
23#undef DEBUG
24// #define VERBOSE /* extra debug messages (success too) */ 23// #define VERBOSE /* extra debug messages (success too) */
25// #define USB_TRACE /* packet-level success messages */ 24// #define USB_TRACE /* packet-level success messages */
26 25
@@ -296,51 +295,6 @@ goku_free_request(struct usb_ep *_ep, struct usb_request *_req)
296 295
297/*-------------------------------------------------------------------------*/ 296/*-------------------------------------------------------------------------*/
298 297
299/* allocating buffers this way eliminates dma mapping overhead, which
300 * on some platforms will mean eliminating a per-io buffer copy. with
301 * some kinds of system caches, further tweaks may still be needed.
302 */
303static void *
304goku_alloc_buffer(struct usb_ep *_ep, unsigned bytes,
305 dma_addr_t *dma, gfp_t gfp_flags)
306{
307 void *retval;
308 struct goku_ep *ep;
309
310 ep = container_of(_ep, struct goku_ep, ep);
311 if (!_ep)
312 return NULL;
313 *dma = DMA_ADDR_INVALID;
314
315 if (ep->dma) {
316 /* the main problem with this call is that it wastes memory
317 * on typical 1/N page allocations: it allocates 1-N pages.
318 */
319#warning Using dma_alloc_coherent even with buffers smaller than a page.
320 retval = dma_alloc_coherent(&ep->dev->pdev->dev,
321 bytes, dma, gfp_flags);
322 } else
323 retval = kmalloc(bytes, gfp_flags);
324 return retval;
325}
326
327static void
328goku_free_buffer(struct usb_ep *_ep, void *buf, dma_addr_t dma, unsigned bytes)
329{
330 /* free memory into the right allocator */
331 if (dma != DMA_ADDR_INVALID) {
332 struct goku_ep *ep;
333
334 ep = container_of(_ep, struct goku_ep, ep);
335 if (!_ep)
336 return;
337 dma_free_coherent(&ep->dev->pdev->dev, bytes, buf, dma);
338 } else
339 kfree (buf);
340}
341
342/*-------------------------------------------------------------------------*/
343
344static void 298static void
345done(struct goku_ep *ep, struct goku_request *req, int status) 299done(struct goku_ep *ep, struct goku_request *req, int status)
346{ 300{
@@ -485,7 +439,7 @@ top:
485 /* use ep1/ep2 double-buffering for OUT */ 439 /* use ep1/ep2 double-buffering for OUT */
486 if (!(size & PACKET_ACTIVE)) 440 if (!(size & PACKET_ACTIVE))
487 size = readl(&regs->EPxSizeLB[ep->num]); 441 size = readl(&regs->EPxSizeLB[ep->num]);
488 if (!(size & PACKET_ACTIVE)) // "can't happen" 442 if (!(size & PACKET_ACTIVE)) /* "can't happen" */
489 break; 443 break;
490 size &= DATASIZE; /* EPxSizeH == 0 */ 444 size &= DATASIZE; /* EPxSizeH == 0 */
491 445
@@ -1026,9 +980,6 @@ static struct usb_ep_ops goku_ep_ops = {
1026 .alloc_request = goku_alloc_request, 980 .alloc_request = goku_alloc_request,
1027 .free_request = goku_free_request, 981 .free_request = goku_free_request,
1028 982
1029 .alloc_buffer = goku_alloc_buffer,
1030 .free_buffer = goku_free_buffer,
1031
1032 .queue = goku_queue, 983 .queue = goku_queue,
1033 .dequeue = goku_dequeue, 984 .dequeue = goku_dequeue,
1034 985
@@ -1140,17 +1091,17 @@ udc_proc_read(char *buffer, char **start, off_t off, int count,
1140 is_usb_connected 1091 is_usb_connected
1141 ? ((tmp & PW_PULLUP) ? "full speed" : "powered") 1092 ? ((tmp & PW_PULLUP) ? "full speed" : "powered")
1142 : "disconnected", 1093 : "disconnected",
1143 ({char *tmp; 1094 ({char *state;
1144 switch(dev->ep0state){ 1095 switch(dev->ep0state){
1145 case EP0_DISCONNECT: tmp = "ep0_disconnect"; break; 1096 case EP0_DISCONNECT: state = "ep0_disconnect"; break;
1146 case EP0_IDLE: tmp = "ep0_idle"; break; 1097 case EP0_IDLE: state = "ep0_idle"; break;
1147 case EP0_IN: tmp = "ep0_in"; break; 1098 case EP0_IN: state = "ep0_in"; break;
1148 case EP0_OUT: tmp = "ep0_out"; break; 1099 case EP0_OUT: state = "ep0_out"; break;
1149 case EP0_STATUS: tmp = "ep0_status"; break; 1100 case EP0_STATUS: state = "ep0_status"; break;
1150 case EP0_STALL: tmp = "ep0_stall"; break; 1101 case EP0_STALL: state = "ep0_stall"; break;
1151 case EP0_SUSPEND: tmp = "ep0_suspend"; break; 1102 case EP0_SUSPEND: state = "ep0_suspend"; break;
1152 default: tmp = "ep0_?"; break; 1103 default: state = "ep0_?"; break;
1153 } tmp; }) 1104 } state; })
1154 ); 1105 );
1155 size -= t; 1106 size -= t;
1156 next += t; 1107 next += t;
@@ -1195,7 +1146,6 @@ udc_proc_read(char *buffer, char **start, off_t off, int count,
1195 for (i = 0; i < 4; i++) { 1146 for (i = 0; i < 4; i++) {
1196 struct goku_ep *ep = &dev->ep [i]; 1147 struct goku_ep *ep = &dev->ep [i];
1197 struct goku_request *req; 1148 struct goku_request *req;
1198 int t;
1199 1149
1200 if (i && !ep->desc) 1150 if (i && !ep->desc)
1201 continue; 1151 continue;
@@ -1283,7 +1233,7 @@ done:
1283static void udc_reinit (struct goku_udc *dev) 1233static void udc_reinit (struct goku_udc *dev)
1284{ 1234{
1285 static char *names [] = { "ep0", "ep1-bulk", "ep2-bulk", "ep3-bulk" }; 1235 static char *names [] = { "ep0", "ep1-bulk", "ep2-bulk", "ep3-bulk" };
1286 1236
1287 unsigned i; 1237 unsigned i;
1288 1238
1289 INIT_LIST_HEAD (&dev->gadget.ep_list); 1239 INIT_LIST_HEAD (&dev->gadget.ep_list);
@@ -1896,9 +1846,9 @@ static int goku_probe(struct pci_dev *pdev, const struct pci_device_id *id)
1896 1846
1897 /* done */ 1847 /* done */
1898 the_controller = dev; 1848 the_controller = dev;
1899 device_register(&dev->gadget.dev); 1849 retval = device_register(&dev->gadget.dev);
1900 1850 if (retval == 0)
1901 return 0; 1851 return 0;
1902 1852
1903done: 1853done:
1904 if (dev) 1854 if (dev)
@@ -1910,8 +1860,8 @@ done:
1910/*-------------------------------------------------------------------------*/ 1860/*-------------------------------------------------------------------------*/
1911 1861
1912static struct pci_device_id pci_ids [] = { { 1862static struct pci_device_id pci_ids [] = { {
1913 .class = ((PCI_CLASS_SERIAL_USB << 8) | 0xfe), 1863 .class = ((PCI_CLASS_SERIAL_USB << 8) | 0xfe),
1914 .class_mask = ~0, 1864 .class_mask = ~0,
1915 .vendor = 0x102f, /* Toshiba */ 1865 .vendor = 0x102f, /* Toshiba */
1916 .device = 0x0107, /* this UDC */ 1866 .device = 0x0107, /* this UDC */
1917 .subvendor = PCI_ANY_ID, 1867 .subvendor = PCI_ANY_ID,