• Home
  • History
  • Annotate
  • Raw
  • Download
  • only in /netgear-WNDR4500v2-V1.0.0.60_1.0.38/src/linux/linux-2.6/drivers/usb/gadget/

Lines Matching refs:udc

61 static const char driver_name[] = "fsl-usb2-udc";
101 struct fsl_udc *udc = NULL;
106 udc = (struct fsl_udc *)ep->udc;
123 dma_pool_free(udc->td_pool, curr_td, curr_td->td_dma);
127 dma_unmap_single(ep->udc->gadget.dev.parent,
135 dma_sync_single_for_cpu(ep->udc->gadget.dev.parent,
148 spin_unlock(&ep->udc->lock);
154 spin_lock(&ep->udc->lock);
182 static int dr_controller_setup(struct fsl_udc *udc)
189 if (!udc)
205 ERR("udc reset timeout! \n");
221 tmp = udc->ep_qh_dma;
226 (int)udc->ep_qh, (int)tmp,
232 switch (udc->phy_mode) {
270 static void dr_controller_run(struct fsl_udc *udc)
282 udc->stopped = 0;
297 static void dr_controller_stop(struct fsl_udc *udc)
305 udc->stopped = 1;
388 static void struct_ep_qh_setup(struct fsl_udc *udc, unsigned char ep_num,
393 struct ep_queue_head *p_QH = &udc->ep_qh[2 * ep_num + dir];
423 static void ep0_setup(struct fsl_udc *udc)
427 struct_ep_qh_setup(udc, 0, USB_RECV, USB_ENDPOINT_XFER_CONTROL,
429 struct_ep_qh_setup(udc, 0, USB_SEND, USB_ENDPOINT_XFER_CONTROL,
451 struct fsl_udc *udc = NULL;
465 udc = ep->udc;
467 if (!udc->driver || (udc->gadget.speed == USB_SPEED_UNKNOWN))
500 spin_lock_irqsave(&udc->lock, flags);
508 struct_ep_qh_setup(udc, (unsigned char) ep_index(ep),
522 spin_unlock_irqrestore(&udc->lock, flags);
539 struct fsl_udc *udc = NULL;
560 udc = (struct fsl_udc *)ep->udc;
561 spin_lock_irqsave(&udc->lock, flags);
568 spin_unlock_irqrestore(&udc->lock, flags);
617 return dma_alloc_coherent(ep->udc->gadget.dev.parent,
634 dma_free_coherent(ep->udc->gadget.dev.parent, bytes, buf, dma);
642 struct ep_queue_head *dQH = &ep->udc->ep_qh[i];
645 VDBG("ep_qh[%d] addr is 0x%8x", i, (u32)&(ep->udc->ep_qh[i])); */
802 struct fsl_udc *udc;
822 udc = ep->udc;
823 if (!udc->driver || udc->gadget.speed == USB_SPEED_UNKNOWN)
830 req->req.dma = dma_map_single(ep->udc->gadget.dev.parent,
837 dma_sync_single_for_device(ep->udc->gadget.dev.parent,
849 spin_lock_irqsave(&udc->lock, flags);
855 spin_unlock_irqrestore(&udc->lock, flags);
861 udc->ep0_state = DATA_STATE_XMIT;
866 spin_unlock_irqrestore(&udc->lock, flags);
883 spin_lock_irqsave(&ep->udc->lock, flags);
945 spin_unlock_irqrestore(&ep->udc->lock, flags);
963 struct fsl_udc *udc = NULL;
966 udc = ep->udc;
987 spin_lock_irqsave(&ep->udc->lock, flags);
989 spin_unlock_irqrestore(&ep->udc->lock, flags);
992 udc->ep0_state = WAIT_FOR_SETUP;
993 udc->ep0_dir = 0;
1077 struct fsl_udc *udc = container_of(gadget, struct fsl_udc, gadget);
1081 if (!udc->remote_wakeup)
1094 static int can_pullup(struct fsl_udc *udc)
1096 return udc->driver && udc->softconnect && udc->vbus_active;
1103 struct fsl_udc *udc;
1106 udc = container_of(gadget, struct fsl_udc, gadget);
1107 spin_lock_irqsave(&udc->lock, flags);
1109 udc->vbus_active = (is_active != 0);
1110 if (can_pullup(udc))
1116 spin_unlock_irqrestore(&udc->lock, flags);
1130 struct fsl_udc *udc;
1132 udc = container_of(gadget, struct fsl_udc, gadget);
1134 if (udc->transceiver)
1135 return otg_set_power(udc->transceiver, mA);
1145 struct fsl_udc *udc;
1147 udc = container_of(gadget, struct fsl_udc, gadget);
1148 udc->softconnect = (is_on != 0);
1149 if (can_pullup(udc))
1171 static void ep0stall(struct fsl_udc *udc)
1179 udc->ep0_state = WAIT_FOR_SETUP;
1180 udc->ep0_dir = 0;
1184 static int ep0_prime_status(struct fsl_udc *udc, int direction)
1186 struct fsl_req *req = udc->status_req;
1191 udc->ep0_dir = USB_DIR_IN;
1193 udc->ep0_dir = USB_DIR_OUT;
1195 ep = &udc->eps[0];
1196 udc->ep0_state = WAIT_FOR_OUT_STATUS;
1217 static inline int udc_reset_ep_queue(struct fsl_udc *udc, u8 pipe)
1219 struct fsl_ep *ep = get_ep_by_pipe(udc, pipe);
1232 static void ch9setaddress(struct fsl_udc *udc, u16 value, u16 index, u16 length)
1235 udc->device_address = (u8) value;
1237 udc->usb_state = USB_STATE_ADDRESS;
1239 if (ep0_prime_status(udc, EP_DIR_IN))
1240 ep0stall(udc);
1246 static void ch9getstatus(struct fsl_udc *udc, u8 request_type, u16 value,
1255 ep = &udc->eps[0];
1260 tmp |= udc->remote_wakeup << USB_DEVICE_REMOTE_WAKEUP;
1263 /* We don't have interface information in udc driver */
1269 target_ep = get_ep_by_pipe(udc, get_pipe_by_windex(index));
1278 udc->ep0_dir = USB_DIR_IN;
1280 req = udc->status_req;
1301 udc->ep0_state = DATA_STATE_XMIT;
1304 ep0stall(udc);
1307 static void setup_received_irq(struct fsl_udc *udc,
1314 udc_reset_ep_queue(udc, 0);
1317 /* Request that need Data+Status phase from udc */
1322 ch9getstatus(udc, setup->bRequestType, wValue, wIndex, wLength);
1325 /* Requests that need Status phase from udc */
1330 ch9setaddress(udc, wValue, wIndex, wLength);
1333 /* Handled by udc, no data, status by udc */
1344 if (wValue != 0 || wLength != 0 || pipe > udc->max_ep)
1346 ep = get_ep_by_pipe(udc, pipe);
1348 spin_unlock(&udc->lock);
1352 spin_lock(&udc->lock);
1358 if (!udc->gadget.is_otg)
1361 udc->gadget.b_hnp_enable = 1;
1363 udc->gadget.a_hnp_support = 1;
1366 udc->gadget.a_alt_hnp_support = 1;
1370 if (ep0_prime_status(udc, EP_DIR_IN))
1371 ep0stall(udc);
1378 /* Data phase from gadget, status phase from udc */
1379 udc->ep0_dir = (setup->bRequestType & USB_DIR_IN)
1381 spin_unlock(&udc->lock);
1382 if (udc->driver->setup(&udc->gadget,
1383 &udc->local_setup_buff) < 0)
1384 ep0stall(udc);
1385 spin_lock(&udc->lock);
1386 udc->ep0_state = (setup->bRequestType & USB_DIR_IN)
1391 udc->ep0_dir = USB_DIR_IN;
1392 spin_unlock(&udc->lock);
1393 if (udc->driver->setup(&udc->gadget,
1394 &udc->local_setup_buff) < 0)
1395 ep0stall(udc);
1396 spin_lock(&udc->lock);
1397 udc->ep0_state = WAIT_FOR_OUT_STATUS;
1405 static void ep0_req_complete(struct fsl_udc *udc, struct fsl_ep *ep0,
1408 if (udc->usb_state == USB_STATE_ADDRESS) {
1410 u32 new_address = (u32) udc->device_address;
1417 switch (udc->ep0_state) {
1420 if (ep0_prime_status(udc, EP_DIR_OUT))
1421 ep0stall(udc);
1425 if (ep0_prime_status(udc, EP_DIR_IN))
1426 ep0stall(udc);
1429 udc->ep0_state = WAIT_FOR_SETUP;
1435 ep0stall(udc);
1442 static void tripwire_handler(struct fsl_udc *udc, u8 ep_num, u8 *buffer_ptr)
1447 qh = &udc->ep_qh[ep_num * 2 + EP_DIR_OUT];
1469 static int process_ep_req(struct fsl_udc *udc, int pipe,
1476 struct ep_queue_head *curr_qh = &udc->ep_qh[pipe];
1545 static void dtd_complete_irq(struct fsl_udc *udc)
1559 for (i = 0; i < udc->max_ep * 2; i++) {
1568 curr_ep = get_ep_by_pipe(udc, i);
1579 status = process_ep_req(udc, i, curr_req);
1589 ep0_req_complete(udc, curr_ep, curr_req);
1598 static void port_change_irq(struct fsl_udc *udc)
1602 if (udc->bus_reset)
1603 udc->bus_reset = 0;
1612 udc->gadget.speed = USB_SPEED_HIGH;
1615 udc->gadget.speed = USB_SPEED_FULL;
1618 udc->gadget.speed = USB_SPEED_LOW;
1621 udc->gadget.speed = USB_SPEED_UNKNOWN;
1627 if (!udc->resume_state)
1628 udc->usb_state = USB_STATE_DEFAULT;
1632 static void suspend_irq(struct fsl_udc *udc)
1634 udc->resume_state = udc->usb_state;
1635 udc->usb_state = USB_STATE_SUSPENDED;
1638 if (udc->driver->suspend)
1639 udc->driver->suspend(&udc->gadget);
1642 static void bus_resume(struct fsl_udc *udc)
1644 udc->usb_state = udc->resume_state;
1645 udc->resume_state = 0;
1648 if (udc->driver->resume)
1649 udc->driver->resume(&udc->gadget);
1653 static int reset_queues(struct fsl_udc *udc)
1657 for (pipe = 0; pipe < udc->max_pipes; pipe++)
1658 udc_reset_ep_queue(udc, pipe);
1661 udc->driver->disconnect(&udc->gadget);
1667 static void reset_irq(struct fsl_udc *udc)
1676 udc->device_address = 0;
1679 udc->resume_state = 0;
1680 udc->ep0_dir = 0;
1681 udc->ep0_state = WAIT_FOR_SETUP;
1682 udc->remote_wakeup = 0; /* default to 0 on reset */
1683 udc->gadget.b_hnp_enable = 0;
1684 udc->gadget.a_hnp_support = 0;
1685 udc->gadget.a_alt_hnp_support = 0;
1711 udc->bus_reset = 1;
1714 reset_queues(udc);
1715 udc->usb_state = USB_STATE_DEFAULT;
1720 dr_controller_setup(udc);
1723 reset_queues(udc);
1725 ep0_setup(udc);
1727 /* Enable DR IRQ reg, Set Run bit, change udc state */
1728 dr_controller_run(udc);
1729 udc->usb_state = USB_STATE_ATTACHED;
1738 struct fsl_udc *udc = _udc;
1744 if (udc->stopped)
1746 spin_lock_irqsave(&udc->lock, flags);
1754 if (udc->usb_state == USB_STATE_SUSPENDED)
1756 bus_resume(udc);
1763 tripwire_handler(udc, 0,
1764 (u8 *) (&udc->local_setup_buff));
1765 setup_received_irq(udc, &udc->local_setup_buff);
1771 dtd_complete_irq(udc);
1783 port_change_irq(udc);
1789 reset_irq(udc);
1795 suspend_irq(udc);
1803 spin_unlock_irqrestore(&udc->lock, flags);
1837 /* bind udc driver to gadget driver */
1926 struct fsl_udc *udc = udc_controller;
1930 spin_lock_irqsave(&udc->lock, flags);
1938 udc->driver ? udc->driver->driver.name : "(none)");
2081 for (i = 0; i < udc->max_ep / 2; i++) {
2105 ep = &udc->eps[0];
2126 list_for_each_entry(ep, &udc->gadget.ep_list, ep.ep_list) {
2155 spin_unlock_irqrestore(&udc->lock, flags);
2175 /* Release udc structures */
2189 * Return the udc handle on success or NULL on failure
2193 struct fsl_udc *udc;
2197 udc = kzalloc(sizeof(struct fsl_udc), GFP_KERNEL);
2198 if (udc == NULL) {
2199 ERR("malloc udc failed\n");
2204 udc->phy_mode = pdata->phy_mode;
2206 udc->max_ep = pdata->max_ep_nr * 2;
2208 udc->eps = kzalloc(sizeof(struct fsl_ep) * udc->max_ep, GFP_KERNEL);
2209 if (!udc->eps) {
2215 size = udc->max_ep * sizeof(struct ep_queue_head);
2222 udc->ep_qh = dma_alloc_coherent(&pdev->dev, size,
2223 &udc->ep_qh_dma, GFP_KERNEL);
2224 if (!udc->ep_qh) {
2225 ERR("malloc QHs for udc failed\n");
2226 kfree(udc->eps);
2230 udc->ep_qh_size = size;
2233 udc->status_req = container_of(fsl_alloc_request(NULL, GFP_KERNEL),
2236 udc->status_req->req.buf = kmalloc(8, GFP_KERNEL);
2237 udc->status_req->req.dma = virt_to_phys(udc->status_req->req.buf);
2239 udc->resume_state = USB_STATE_NOTATTACHED;
2240 udc->usb_state = USB_STATE_POWERED;
2241 udc->ep0_dir = 0;
2242 udc->remote_wakeup = 0; /* default to 0 on reset */
2243 spin_lock_init(&udc->lock);
2245 return udc;
2248 kfree(udc);
2258 static int __init struct_ep_setup(struct fsl_udc *udc, unsigned char index,
2261 struct fsl_ep *ep = &udc->eps[index];
2263 ep->udc = udc;
2280 list_add_tail(&ep->ep.ep_list, &udc->gadget.ep_list);
2281 ep->gadget = &udc->gadget;
2282 ep->qh = &udc->ep_qh[index];
2303 /* Initialize the udc structure including QH member and other member */
2366 /* setup udc->eps[] for ep0 */
2374 /* setup the udc->eps[] for non-control endpoints and link
2434 /* free udc --wait for the release() finished */