• Home
  • History
  • Annotate
  • Raw
  • Download
  • only in /netgear-R7000-V1.0.7.12_1.2.5/components/opensource/linux/linux-2.6.36/drivers/usb/gadget/

Lines Matching refs:udc

57 static const char driver_name[] = "fsl-usb2-udc";
97 struct fsl_udc *udc = NULL;
102 udc = (struct fsl_udc *)ep->udc;
119 dma_pool_free(udc->td_pool, curr_td, curr_td->td_dma);
123 dma_unmap_single(ep->udc->gadget.dev.parent,
131 dma_sync_single_for_cpu(ep->udc->gadget.dev.parent,
144 spin_unlock(&ep->udc->lock);
150 spin_lock(&ep->udc->lock);
178 static int dr_controller_setup(struct fsl_udc *udc)
190 switch (udc->phy_mode) {
221 ERR("udc reset timeout!\n");
237 tmp = udc->ep_qh_dma;
242 udc->ep_qh, (int)tmp,
267 static void dr_controller_run(struct fsl_udc *udc)
279 udc->stopped = 0;
294 static void dr_controller_stop(struct fsl_udc *udc)
302 udc->stopped = 1;
386 static void struct_ep_qh_setup(struct fsl_udc *udc, unsigned char ep_num,
391 struct ep_queue_head *p_QH = &udc->ep_qh[2 * ep_num + dir];
424 static void ep0_setup(struct fsl_udc *udc)
428 struct_ep_qh_setup(udc, 0, USB_RECV, USB_ENDPOINT_XFER_CONTROL,
430 struct_ep_qh_setup(udc, 0, USB_SEND, USB_ENDPOINT_XFER_CONTROL,
452 struct fsl_udc *udc = NULL;
466 udc = ep->udc;
468 if (!udc->driver || (udc->gadget.speed == USB_SPEED_UNKNOWN))
501 spin_lock_irqsave(&udc->lock, flags);
509 struct_ep_qh_setup(udc, (unsigned char) ep_index(ep),
523 spin_unlock_irqrestore(&udc->lock, flags);
540 struct fsl_udc *udc = NULL;
561 udc = (struct fsl_udc *)ep->udc;
562 spin_lock_irqsave(&udc->lock, flags);
569 spin_unlock_irqrestore(&udc->lock, flags);
610 struct ep_queue_head *dQH = &ep->udc->ep_qh[i];
613 VDBG("ep_qh[%d] addr is 0x%8x", i, (u32)&(ep->udc->ep_qh[i])); */
773 struct fsl_udc *udc;
793 udc = ep->udc;
794 if (!udc->driver || udc->gadget.speed == USB_SPEED_UNKNOWN)
801 req->req.dma = dma_map_single(ep->udc->gadget.dev.parent,
808 dma_sync_single_for_device(ep->udc->gadget.dev.parent,
820 spin_lock_irqsave(&udc->lock, flags);
826 spin_unlock_irqrestore(&udc->lock, flags);
832 udc->ep0_state = DATA_STATE_XMIT;
837 spin_unlock_irqrestore(&udc->lock, flags);
854 spin_lock_irqsave(&ep->udc->lock, flags);
916 spin_unlock_irqrestore(&ep->udc->lock, flags);
934 struct fsl_udc *udc = NULL;
937 udc = ep->udc;
958 spin_lock_irqsave(&ep->udc->lock, flags);
960 spin_unlock_irqrestore(&ep->udc->lock, flags);
963 udc->ep0_state = WAIT_FOR_SETUP;
964 udc->ep0_dir = 0;
1045 struct fsl_udc *udc = container_of(gadget, struct fsl_udc, gadget);
1049 if (!udc->remote_wakeup)
1062 static int can_pullup(struct fsl_udc *udc)
1064 return udc->driver && udc->softconnect && udc->vbus_active;
1071 struct fsl_udc *udc;
1074 udc = container_of(gadget, struct fsl_udc, gadget);
1075 spin_lock_irqsave(&udc->lock, flags);
1077 udc->vbus_active = (is_active != 0);
1078 if (can_pullup(udc))
1084 spin_unlock_irqrestore(&udc->lock, flags);
1097 struct fsl_udc *udc;
1099 udc = container_of(gadget, struct fsl_udc, gadget);
1100 if (udc->transceiver)
1101 return otg_set_power(udc->transceiver, mA);
1110 struct fsl_udc *udc;
1112 udc = container_of(gadget, struct fsl_udc, gadget);
1113 udc->softconnect = (is_on != 0);
1114 if (can_pullup(udc))
1136 static void ep0stall(struct fsl_udc *udc)
1144 udc->ep0_state = WAIT_FOR_SETUP;
1145 udc->ep0_dir = 0;
1149 static int ep0_prime_status(struct fsl_udc *udc, int direction)
1151 struct fsl_req *req = udc->status_req;
1155 udc->ep0_dir = USB_DIR_IN;
1157 udc->ep0_dir = USB_DIR_OUT;
1159 ep = &udc->eps[0];
1160 udc->ep0_state = WAIT_FOR_OUT_STATUS;
1179 static void udc_reset_ep_queue(struct fsl_udc *udc, u8 pipe)
1181 struct fsl_ep *ep = get_ep_by_pipe(udc, pipe);
1190 static void ch9setaddress(struct fsl_udc *udc, u16 value, u16 index, u16 length)
1193 udc->device_address = (u8) value;
1195 udc->usb_state = USB_STATE_ADDRESS;
1197 if (ep0_prime_status(udc, EP_DIR_IN))
1198 ep0stall(udc);
1204 static void ch9getstatus(struct fsl_udc *udc, u8 request_type, u16 value,
1211 ep = &udc->eps[0];
1216 tmp |= udc->remote_wakeup << USB_DEVICE_REMOTE_WAKEUP;
1219 /* We don't have interface information in udc driver */
1225 target_ep = get_ep_by_pipe(udc, get_pipe_by_windex(index));
1234 udc->ep0_dir = USB_DIR_IN;
1236 req = udc->status_req;
1253 udc->ep0_state = DATA_STATE_XMIT;
1256 ep0stall(udc);
1259 static void setup_received_irq(struct fsl_udc *udc,
1266 udc_reset_ep_queue(udc, 0);
1271 /* Data+Status phase from udc */
1275 ch9getstatus(udc, setup->bRequestType, wValue, wIndex, wLength);
1279 /* Status phase from udc */
1283 ch9setaddress(udc, wValue, wIndex, wLength);
1288 /* Status phase from udc */
1297 if (wValue != 0 || wLength != 0 || pipe > udc->max_ep)
1299 ep = get_ep_by_pipe(udc, pipe);
1301 spin_unlock(&udc->lock);
1305 spin_lock(&udc->lock);
1312 if (!gadget_is_otg(&udc->gadget))
1315 udc->gadget.b_hnp_enable = 1;
1317 udc->gadget.a_hnp_support = 1;
1320 udc->gadget.a_alt_hnp_support = 1;
1328 if (ep0_prime_status(udc, EP_DIR_IN))
1329 ep0stall(udc);
1340 /* Data phase from gadget, status phase from udc */
1341 udc->ep0_dir = (setup->bRequestType & USB_DIR_IN)
1343 spin_unlock(&udc->lock);
1344 if (udc->driver->setup(&udc->gadget,
1345 &udc->local_setup_buff) < 0)
1346 ep0stall(udc);
1347 spin_lock(&udc->lock);
1348 udc->ep0_state = (setup->bRequestType & USB_DIR_IN)
1352 udc->ep0_dir = USB_DIR_IN;
1353 spin_unlock(&udc->lock);
1354 if (udc->driver->setup(&udc->gadget,
1355 &udc->local_setup_buff) < 0)
1356 ep0stall(udc);
1357 spin_lock(&udc->lock);
1358 udc->ep0_state = WAIT_FOR_OUT_STATUS;
1364 static void ep0_req_complete(struct fsl_udc *udc, struct fsl_ep *ep0,
1367 if (udc->usb_state == USB_STATE_ADDRESS) {
1369 u32 new_address = (u32) udc->device_address;
1376 switch (udc->ep0_state) {
1379 if (ep0_prime_status(udc, EP_DIR_OUT))
1380 ep0stall(udc);
1384 if (ep0_prime_status(udc, EP_DIR_IN))
1385 ep0stall(udc);
1388 udc->ep0_state = WAIT_FOR_SETUP;
1394 ep0stall(udc);
1401 static void tripwire_handler(struct fsl_udc *udc, u8 ep_num, u8 *buffer_ptr)
1406 qh = &udc->ep_qh[ep_num * 2 + EP_DIR_OUT];
1428 static int process_ep_req(struct fsl_udc *udc, int pipe,
1435 struct ep_queue_head *curr_qh = &udc->ep_qh[pipe];
1504 static void dtd_complete_irq(struct fsl_udc *udc)
1518 for (i = 0; i < udc->max_ep * 2; i++) {
1527 curr_ep = get_ep_by_pipe(udc, i);
1538 status = process_ep_req(udc, i, curr_req);
1548 ep0_req_complete(udc, curr_ep, curr_req);
1557 static void port_change_irq(struct fsl_udc *udc)
1568 udc->gadget.speed = USB_SPEED_HIGH;
1571 udc->gadget.speed = USB_SPEED_FULL;
1574 udc->gadget.speed = USB_SPEED_LOW;
1577 udc->gadget.speed = USB_SPEED_UNKNOWN;
1583 if (!udc->resume_state)
1584 udc->usb_state = USB_STATE_DEFAULT;
1588 static void suspend_irq(struct fsl_udc *udc)
1590 udc->resume_state = udc->usb_state;
1591 udc->usb_state = USB_STATE_SUSPENDED;
1594 if (udc->driver->suspend)
1595 udc->driver->suspend(&udc->gadget);
1598 static void bus_resume(struct fsl_udc *udc)
1600 udc->usb_state = udc->resume_state;
1601 udc->resume_state = 0;
1604 if (udc->driver->resume)
1605 udc->driver->resume(&udc->gadget);
1609 static int reset_queues(struct fsl_udc *udc)
1613 for (pipe = 0; pipe < udc->max_pipes; pipe++)
1614 udc_reset_ep_queue(udc, pipe);
1617 spin_unlock(&udc->lock);
1618 udc->driver->disconnect(&udc->gadget);
1619 spin_lock(&udc->lock);
1625 static void reset_irq(struct fsl_udc *udc)
1634 udc->device_address = 0;
1637 udc->resume_state = 0;
1638 udc->ep0_dir = 0;
1639 udc->ep0_state = WAIT_FOR_SETUP;
1640 udc->remote_wakeup = 0; /* default to 0 on reset */
1641 udc->gadget.b_hnp_enable = 0;
1642 udc->gadget.a_hnp_support = 0;
1643 udc->gadget.a_alt_hnp_support = 0;
1670 reset_queues(udc);
1671 udc->usb_state = USB_STATE_DEFAULT;
1676 dr_controller_setup(udc);
1679 reset_queues(udc);
1681 ep0_setup(udc);
1683 /* Enable DR IRQ reg, Set Run bit, change udc state */
1684 dr_controller_run(udc);
1685 udc->usb_state = USB_STATE_ATTACHED;
1694 struct fsl_udc *udc = _udc;
1700 if (udc->stopped)
1702 spin_lock_irqsave(&udc->lock, flags);
1710 if (udc->usb_state == USB_STATE_SUSPENDED)
1712 bus_resume(udc);
1719 tripwire_handler(udc, 0,
1720 (u8 *) (&udc->local_setup_buff));
1721 setup_received_irq(udc, &udc->local_setup_buff);
1727 dtd_complete_irq(udc);
1739 port_change_irq(udc);
1745 reset_irq(udc);
1751 suspend_irq(udc);
1759 spin_unlock_irqrestore(&udc->lock, flags);
1793 /* bind udc driver to gadget driver */
1885 struct fsl_udc *udc = udc_controller;
1889 spin_lock_irqsave(&udc->lock, flags);
1897 udc->driver ? udc->driver->driver.name : "(none)");
2041 for (i = 0; i < udc->max_ep / 2; i++) {
2067 ep = &udc->eps[0];
2088 list_for_each_entry(ep, &udc->gadget.ep_list, ep.ep_list) {
2117 spin_unlock_irqrestore(&udc->lock, flags);
2137 /* Release udc structures */
2151 * Return the udc handle on success or NULL on failure
2153 static int __init struct_udc_setup(struct fsl_udc *udc,
2160 udc->phy_mode = pdata->phy_mode;
2162 udc->eps = kzalloc(sizeof(struct fsl_ep) * udc->max_ep, GFP_KERNEL);
2163 if (!udc->eps) {
2169 size = udc->max_ep * sizeof(struct ep_queue_head);
2176 udc->ep_qh = dma_alloc_coherent(&pdev->dev, size,
2177 &udc->ep_qh_dma, GFP_KERNEL);
2178 if (!udc->ep_qh) {
2179 ERR("malloc QHs for udc failed\n");
2180 kfree(udc->eps);
2184 udc->ep_qh_size = size;
2187 udc->status_req = container_of(fsl_alloc_request(NULL, GFP_KERNEL),
2190 udc->status_req->req.buf = kmalloc(8, GFP_KERNEL);
2191 udc->status_req->req.dma = virt_to_phys(udc->status_req->req.buf);
2193 udc->resume_state = USB_STATE_NOTATTACHED;
2194 udc->usb_state = USB_STATE_POWERED;
2195 udc->ep0_dir = 0;
2196 udc->remote_wakeup = 0; /* default to 0 on reset */
2207 static int __init struct_ep_setup(struct fsl_udc *udc, unsigned char index,
2210 struct fsl_ep *ep = &udc->eps[index];
2212 ep->udc = udc;
2229 list_add_tail(&ep->ep.ep_list, &udc->gadget.ep_list);
2230 ep->gadget = &udc->gadget;
2231 ep->qh = &udc->ep_qh[index];
2254 ERR("malloc udc failed\n");
2315 /* Initialize the udc structure including QH member and other member */
2317 ERR("Can't initialize udc data structure\n");
2347 /* setup udc->eps[] for ep0 */
2355 /* setup the udc->eps[] for non-control endpoints and link
2422 /* free udc --wait for the release() finished */
2489 MODULE_ALIAS("platform:fsl-usb2-udc");