Lines Matching refs:bdc

60 	struct bdc *bdc = ep->bdc;  in ep_bd_list_free()  local
64 dev_dbg(bdc->dev, "%s ep:%s num_tabs:%d\n", in ep_bd_list_free()
68 dev_dbg(bdc->dev, "%s already freed\n", ep->name); in ep_bd_list_free()
78 dev_dbg(bdc->dev, "bd_table:%p index:%d\n", bd_table, index); in ep_bd_list_free()
80 dev_dbg(bdc->dev, "bd_table not allocated\n"); in ep_bd_list_free()
84 dev_dbg(bdc->dev, "bd dma pool not allocted\n"); in ep_bd_list_free()
88 dev_dbg(bdc->dev, in ep_bd_list_free()
93 dma_pool_free(bdc->bd_table_pool, in ep_bd_list_free()
130 struct bdc *bdc = ep->bdc; in ep_bd_list_alloc() local
141 dev_dbg(bdc->dev, in ep_bd_list_alloc()
159 bd_table->start_bd = dma_pool_alloc(bdc->bd_table_pool, in ep_bd_list_alloc()
169 dev_dbg(bdc->dev, in ep_bd_list_alloc()
225 struct bdc *bdc = ep->bdc; in bd_add_to_bdi() local
231 dev_dbg(bdc->dev, "%s %llx\n", in bd_add_to_bdi()
244 dev_dbg(bdc->dev, "dma_first_bd:%llx dma_last_bd:%llx\n", in bd_add_to_bdi()
253 dev_err(bdc->dev, "%s FATAL err, bd not found\n", __func__); in bd_add_to_bdi()
269 dev_vdbg(ep->bdc->dev, in bdi_to_tbi()
298 struct bdc *bdc = ep->bdc; in bd_available_ep() local
317 dev_vdbg(bdc->dev, "chain_bd1:%d chain_bd2:%d\n", in bd_available_ep()
341 dev_vdbg(bdc->dev, "available_bd:%d\n", available_bd); in bd_available_ep()
347 void bdc_notify_xfr(struct bdc *bdc, u32 epnum) in bdc_notify_xfr() argument
349 struct bdc_ep *ep = bdc->bdc_ep_array[epnum]; in bdc_notify_xfr()
351 dev_vdbg(bdc->dev, "%s epnum:%d\n", __func__, epnum); in bdc_notify_xfr()
359 bdc_writel(bdc->regs, BDC_XSFNTF, epnum); in bdc_notify_xfr()
369 dev_vdbg(ep->bdc->dev, in bdi_to_bd()
390 static int setup_first_bd_ep0(struct bdc *bdc, struct bdc_req *req, u32 *dword3) in setup_first_bd_ep0() argument
397 switch (bdc->ep0_state) { in setup_first_bd_ep0()
400 if (bdc->setup_pkt.bRequestType & USB_DIR_IN) in setup_first_bd_ep0()
404 wValue = le16_to_cpu(bdc->setup_pkt.wValue); in setup_first_bd_ep0()
406 (req_len % bdc->gadget.ep0->maxpacket == 0)) { in setup_first_bd_ep0()
407 dev_dbg(bdc->dev, "ZLP needed wVal:%d len:%d MaxP:%d\n", in setup_first_bd_ep0()
409 bdc->gadget.ep0->maxpacket); in setup_first_bd_ep0()
410 bdc->zlp_needed = true; in setup_first_bd_ep0()
416 if (!le16_to_cpu(bdc->setup_pkt.wLength) || in setup_first_bd_ep0()
417 !(bdc->setup_pkt.bRequestType & USB_DIR_IN)) in setup_first_bd_ep0()
421 dev_err(bdc->dev, in setup_first_bd_ep0()
423 ep0_state_string[bdc->ep0_state]); in setup_first_bd_ep0()
431 static int setup_bd_list_xfr(struct bdc *bdc, struct bdc_req *req, int num_bds) in setup_bd_list_xfr() argument
452 dev_vdbg(bdc->dev, "%s ep:%s num_bds:%d tfs:%d r_len:%d bd:%p\n", in setup_bd_list_xfr()
463 ret = setup_first_bd_ep0(bdc, req, &dword3); in setup_bd_list_xfr()
484 dev_err(bdc->dev, "Err bd pointing to wrong addr\n"); in setup_bd_list_xfr()
496 dev_vdbg(bdc->dev, "buf_add:%08llx req_len:%d bd:%p eqp:%d\n", in setup_bd_list_xfr()
515 static int bdc_queue_xfr(struct bdc *bdc, struct bdc_req *req) in bdc_queue_xfr() argument
522 dev_dbg(bdc->dev, "%s req:%p\n", __func__, req); in bdc_queue_xfr()
523 dev_dbg(bdc->dev, "eqp_bdi:%d hwd_bdi:%d\n", in bdc_queue_xfr()
533 ret = setup_bd_list_xfr(bdc, req, num_bds); in bdc_queue_xfr()
537 bdc_dbg_bd_list(bdc, ep); in bdc_queue_xfr()
538 bdc_notify_xfr(bdc, ep->ep_num); in bdc_queue_xfr()
547 struct bdc *bdc = ep->bdc; in bdc_req_complete() local
552 dev_dbg(bdc->dev, "%s ep:%s status:%d\n", __func__, ep->name, status); in bdc_req_complete()
555 usb_gadget_unmap_request(&bdc->gadget, &req->usb_req, ep->dir); in bdc_req_complete()
557 spin_unlock(&bdc->lock); in bdc_req_complete()
559 spin_lock(&bdc->lock); in bdc_req_complete()
567 struct bdc *bdc; in bdc_ep_disable() local
571 bdc = ep->bdc; in bdc_ep_disable()
572 dev_dbg(bdc->dev, "%s() ep->ep_num=%d\n", __func__, ep->ep_num); in bdc_ep_disable()
574 ret = bdc_stop_ep(bdc, ep->ep_num); in bdc_ep_disable()
587 ret = bdc_dconfig_ep(bdc, ep); in bdc_ep_disable()
589 dev_warn(bdc->dev, in bdc_ep_disable()
610 struct bdc *bdc; in bdc_ep_enable() local
613 bdc = ep->bdc; in bdc_ep_enable()
614 dev_dbg(bdc->dev, "%s NUM_TABLES:%d %d\n", in bdc_ep_enable()
619 dev_err(bdc->dev, "ep bd list allocation failed:%d\n", ret); in bdc_ep_enable()
622 bdc_dbg_bd_list(bdc, ep); in bdc_ep_enable()
629 ret = bdc_config_ep(bdc, ep); in bdc_ep_enable()
645 static int ep0_queue_status_stage(struct bdc *bdc) in ep0_queue_status_stage() argument
650 status_req = &bdc->status_req; in ep0_queue_status_stage()
651 ep = bdc->bdc_ep_array[1]; in ep0_queue_status_stage()
657 bdc_queue_xfr(bdc, status_req); in ep0_queue_status_stage()
665 struct bdc *bdc; in ep0_queue() local
668 bdc = ep->bdc; in ep0_queue()
669 dev_dbg(bdc->dev, "%s()\n", __func__); in ep0_queue()
674 if (bdc->delayed_status) { in ep0_queue()
675 bdc->delayed_status = false; in ep0_queue()
677 if (bdc->ep0_state == WAIT_FOR_STATUS_START) { in ep0_queue()
679 ep0_queue_status_stage(bdc); in ep0_queue()
680 bdc->ep0_state = WAIT_FOR_STATUS_XMIT; in ep0_queue()
693 ret = usb_gadget_map_request(&bdc->gadget, &req->usb_req, ep->dir); in ep0_queue()
695 dev_err(bdc->dev, "dma mapping failed %s\n", ep->name); in ep0_queue()
699 return bdc_queue_xfr(bdc, req); in ep0_queue()
703 static int ep0_queue_data_stage(struct bdc *bdc) in ep0_queue_data_stage() argument
708 dev_dbg(bdc->dev, "%s\n", __func__); in ep0_queue_data_stage()
709 ep0_usb_req = &bdc->ep0_req.usb_req; in ep0_queue_data_stage()
710 ep = bdc->bdc_ep_array[1]; in ep0_queue_data_stage()
711 bdc->ep0_req.ep = ep; in ep0_queue_data_stage()
712 bdc->ep0_req.usb_req.complete = NULL; in ep0_queue_data_stage()
714 return ep0_queue(ep, &bdc->ep0_req); in ep0_queue_data_stage()
720 struct bdc *bdc; in ep_queue() local
726 bdc = ep->bdc; in ep_queue()
732 ret = usb_gadget_map_request(&bdc->gadget, &req->usb_req, ep->dir); in ep_queue()
734 dev_err(bdc->dev, "dma mapping failed\n"); in ep_queue()
738 return bdc_queue_xfr(bdc, req); in ep_queue()
752 struct bdc *bdc; in ep_dequeue() local
756 bdc = ep->bdc; in ep_dequeue()
766 dev_dbg(bdc->dev, "%s ep:%s start:%d end:%d\n", in ep_dequeue()
768 dev_dbg(bdc->dev, "ep_dequeue ep=%p ep->desc=%p\n", in ep_dequeue()
771 ret = bdc_stop_ep(bdc, ep->ep_num); in ep_dequeue()
782 tmp_32 = bdc_readl(bdc->regs, BDC_EPSTS0(0)); in ep_dequeue()
784 tmp_32 = bdc_readl(bdc->regs, BDC_EPSTS1(0)); in ep_dequeue()
814 dev_dbg(bdc->dev, in ep_dequeue()
816 start_pending, end_pending, bdc->gadget.speed); in ep_dequeue()
826 if (bdc->gadget.speed == USB_SPEED_UNKNOWN) in ep_dequeue()
855 bdc_dbg_bd_list(bdc, ep); in ep_dequeue()
861 ret = bdc_ep_bla(bdc, ep, next_bd_dma); in ep_dequeue()
863 dev_err(bdc->dev, "error in ep_bla:%d\n", ret); in ep_dequeue()
874 struct bdc *bdc; in ep_set_halt() local
877 bdc = ep->bdc; in ep_set_halt()
878 dev_dbg(bdc->dev, "%s ep:%s value=%d\n", __func__, ep->name, value); in ep_set_halt()
881 dev_dbg(bdc->dev, "Halt\n"); in ep_set_halt()
883 bdc->ep0_state = WAIT_FOR_SETUP; in ep_set_halt()
885 ret = bdc_ep_set_stall(bdc, ep->ep_num); in ep_set_halt()
887 dev_err(bdc->dev, "failed to set STALL on %s\n", in ep_set_halt()
893 dev_dbg(bdc->dev, "Before Clear\n"); in ep_set_halt()
894 ret = bdc_ep_clear_stall(bdc, ep->ep_num); in ep_set_halt()
896 dev_err(bdc->dev, "failed to clear STALL on %s\n", in ep_set_halt()
900 dev_dbg(bdc->dev, "After Clear\n"); in ep_set_halt()
907 void bdc_free_ep(struct bdc *bdc) in bdc_free_ep() argument
912 dev_dbg(bdc->dev, "%s\n", __func__); in bdc_free_ep()
913 for (epnum = 1; epnum < bdc->num_eps; epnum++) { in bdc_free_ep()
914 ep = bdc->bdc_ep_array[epnum]; in bdc_free_ep()
930 static int bdc_set_test_mode(struct bdc *bdc) in bdc_set_test_mode() argument
934 usb2_pm = bdc_readl(bdc->regs, BDC_USPPM2); in bdc_set_test_mode()
936 dev_dbg(bdc->dev, "%s\n", __func__); in bdc_set_test_mode()
937 switch (bdc->test_mode) { in bdc_set_test_mode()
943 usb2_pm |= bdc->test_mode << 28; in bdc_set_test_mode()
948 dev_dbg(bdc->dev, "usb2_pm=%08x", usb2_pm); in bdc_set_test_mode()
949 bdc_writel(bdc->regs, BDC_USPPM2, usb2_pm); in bdc_set_test_mode()
958 static void handle_xsr_succ_status(struct bdc *bdc, struct bdc_ep *ep, in handle_xsr_succ_status() argument
972 dev_dbg(bdc->dev, "%s ep:%p\n", __func__, ep); in handle_xsr_succ_status()
973 bdc_dbg_srr(bdc, 0); in handle_xsr_succ_status()
981 dev_warn(bdc->dev, "xfr srr with no BD's queued\n"); in handle_xsr_succ_status()
1006 dev_warn(bdc->dev, "bd doesn't exist?\n"); in handle_xsr_succ_status()
1048 dev_dbg(bdc->dev, in handle_xsr_succ_status()
1057 dev_dbg(bdc->dev, "short xfr on %d\n", ep->ep_num); in handle_xsr_succ_status()
1070 void bdc_xsf_ep0_setup_recv(struct bdc *bdc, struct bdc_sr *sreport) in bdc_xsf_ep0_setup_recv() argument
1075 dev_dbg(bdc->dev, in bdc_xsf_ep0_setup_recv()
1077 __func__, ep0_state_string[bdc->ep0_state]); in bdc_xsf_ep0_setup_recv()
1079 setup_pkt = &bdc->setup_pkt; in bdc_xsf_ep0_setup_recv()
1083 bdc->ep0_state = WAIT_FOR_STATUS_START; in bdc_xsf_ep0_setup_recv()
1085 bdc->ep0_state = WAIT_FOR_DATA_START; in bdc_xsf_ep0_setup_recv()
1088 dev_dbg(bdc->dev, in bdc_xsf_ep0_setup_recv()
1090 __func__, ep0_state_string[bdc->ep0_state]); in bdc_xsf_ep0_setup_recv()
1094 static void ep0_stall(struct bdc *bdc) in ep0_stall() argument
1096 struct bdc_ep *ep = bdc->bdc_ep_array[1]; in ep0_stall()
1099 dev_dbg(bdc->dev, "%s\n", __func__); in ep0_stall()
1100 bdc->delayed_status = false; in ep0_stall()
1112 static int ep0_set_address(struct bdc *bdc, struct usb_ctrlrequest *ctrl) in ep0_set_address() argument
1114 enum usb_device_state state = bdc->gadget.state; in ep0_set_address()
1119 dev_dbg(bdc->dev, in ep0_set_address()
1130 ret = bdc_address_device(bdc, addr); in ep0_set_address()
1135 usb_gadget_set_state(&bdc->gadget, USB_STATE_ADDRESS); in ep0_set_address()
1137 usb_gadget_set_state(&bdc->gadget, USB_STATE_DEFAULT); in ep0_set_address()
1139 bdc->dev_addr = addr; in ep0_set_address()
1142 dev_warn(bdc->dev, in ep0_set_address()
1152 static int ep0_handle_feature_dev(struct bdc *bdc, u16 wValue, in ep0_handle_feature_dev() argument
1155 enum usb_device_state state = bdc->gadget.state; in ep0_handle_feature_dev()
1158 dev_dbg(bdc->dev, "%s set:%d dev state:%d\n", in ep0_handle_feature_dev()
1162 dev_dbg(bdc->dev, "USB_DEVICE_REMOTE_WAKEUP\n"); in ep0_handle_feature_dev()
1164 bdc->devstatus |= REMOTE_WAKE_ENABLE; in ep0_handle_feature_dev()
1166 bdc->devstatus &= ~REMOTE_WAKE_ENABLE; in ep0_handle_feature_dev()
1170 dev_dbg(bdc->dev, "USB_DEVICE_TEST_MODE\n"); in ep0_handle_feature_dev()
1172 (bdc->gadget.speed != USB_SPEED_HIGH) || !set) in ep0_handle_feature_dev()
1175 bdc->test_mode = wIndex >> 8; in ep0_handle_feature_dev()
1179 dev_dbg(bdc->dev, "USB_DEVICE_U1_ENABLE\n"); in ep0_handle_feature_dev()
1181 if (bdc->gadget.speed != USB_SPEED_SUPER || in ep0_handle_feature_dev()
1185 usppms = bdc_readl(bdc->regs, BDC_USPPMS); in ep0_handle_feature_dev()
1191 bdc->devstatus |= (1 << USB_DEV_STAT_U1_ENABLED); in ep0_handle_feature_dev()
1195 bdc->devstatus &= ~(1 << USB_DEV_STAT_U1_ENABLED); in ep0_handle_feature_dev()
1197 bdc_writel(bdc->regs, BDC_USPPMS, usppms); in ep0_handle_feature_dev()
1201 dev_dbg(bdc->dev, "USB_DEVICE_U2_ENABLE\n"); in ep0_handle_feature_dev()
1203 if (bdc->gadget.speed != USB_SPEED_SUPER || in ep0_handle_feature_dev()
1207 usppms = bdc_readl(bdc->regs, BDC_USPPMS); in ep0_handle_feature_dev()
1211 bdc->devstatus |= (1 << USB_DEV_STAT_U2_ENABLED); in ep0_handle_feature_dev()
1215 bdc->devstatus &= ~(1 << USB_DEV_STAT_U2_ENABLED); in ep0_handle_feature_dev()
1217 bdc_writel(bdc->regs, BDC_USPPMS, usppms); in ep0_handle_feature_dev()
1221 dev_dbg(bdc->dev, "USB_DEVICE_LTM_ENABLE?\n"); in ep0_handle_feature_dev()
1222 if (bdc->gadget.speed != USB_SPEED_SUPER || in ep0_handle_feature_dev()
1227 dev_err(bdc->dev, "Unknown wValue:%d\n", wValue); in ep0_handle_feature_dev()
1235 static int ep0_handle_feature(struct bdc *bdc, in ep0_handle_feature() argument
1238 enum usb_device_state state = bdc->gadget.state; in ep0_handle_feature()
1247 dev_dbg(bdc->dev, in ep0_handle_feature()
1250 bdc->gadget.speed, set); in ep0_handle_feature()
1254 return ep0_handle_feature_dev(bdc, wValue, wIndex, set); in ep0_handle_feature()
1256 dev_dbg(bdc->dev, "USB_RECIP_INTERFACE\n"); in ep0_handle_feature()
1263 dev_dbg(bdc->dev, "SET REMOTE_WAKEUP\n"); in ep0_handle_feature()
1264 bdc->devstatus |= REMOTE_WAKE_ENABLE; in ep0_handle_feature()
1266 dev_dbg(bdc->dev, "CLEAR REMOTE_WAKEUP\n"); in ep0_handle_feature()
1267 bdc->devstatus &= ~REMOTE_WAKE_ENABLE; in ep0_handle_feature()
1273 dev_dbg(bdc->dev, "USB_RECIP_ENDPOINT\n"); in ep0_handle_feature()
1292 dev_dbg(bdc->dev, "ep0 stall already cleared\n"); in ep0_handle_feature()
1295 dev_dbg(bdc->dev, "epnum=%d\n", epnum); in ep0_handle_feature()
1296 ep = bdc->bdc_ep_array[epnum]; in ep0_handle_feature()
1302 dev_err(bdc->dev, "Unknown recipient\n"); in ep0_handle_feature()
1310 static int ep0_handle_status(struct bdc *bdc, in ep0_handle_status() argument
1313 enum usb_device_state state = bdc->gadget.state; in ep0_handle_status()
1323 dev_dbg(bdc->dev, "%s\n", __func__); in ep0_handle_status()
1324 usb_status = bdc->devstatus; in ep0_handle_status()
1327 dev_dbg(bdc->dev, in ep0_handle_status()
1329 bdc->devstatus); in ep0_handle_status()
1331 if (bdc->gadget.speed == USB_SPEED_SUPER) in ep0_handle_status()
1336 dev_dbg(bdc->dev, "USB_RECIP_INTERFACE\n"); in ep0_handle_status()
1337 if (bdc->gadget.speed == USB_SPEED_SUPER) { in ep0_handle_status()
1342 if (bdc->devstatus & REMOTE_WAKE_ENABLE) in ep0_handle_status()
1351 dev_dbg(bdc->dev, "USB_RECIP_ENDPOINT\n"); in ep0_handle_status()
1362 ep = bdc->bdc_ep_array[epnum]; in ep0_handle_status()
1364 dev_err(bdc->dev, "ISSUE, GET_STATUS for invalid EP ?"); in ep0_handle_status()
1372 dev_err(bdc->dev, "Unknown recipient for get_status\n"); in ep0_handle_status()
1376 dev_dbg(bdc->dev, "usb_status=%08x\n", usb_status); in ep0_handle_status()
1377 *(__le16 *)bdc->ep0_response_buff = cpu_to_le16(usb_status); in ep0_handle_status()
1378 bdc->ep0_req.usb_req.length = 2; in ep0_handle_status()
1379 bdc->ep0_req.usb_req.buf = &bdc->ep0_response_buff; in ep0_handle_status()
1380 ep0_queue_data_stage(bdc); in ep0_handle_status()
1391 static int ep0_set_sel(struct bdc *bdc, in ep0_set_sel() argument
1398 dev_dbg(bdc->dev, "%s\n", __func__); in ep0_set_sel()
1402 dev_err(bdc->dev, "%s Wrong wLength:%d\n", __func__, wLength); in ep0_set_sel()
1405 ep = bdc->bdc_ep_array[1]; in ep0_set_sel()
1406 bdc->ep0_req.ep = ep; in ep0_set_sel()
1407 bdc->ep0_req.usb_req.length = 6; in ep0_set_sel()
1408 bdc->ep0_req.usb_req.buf = bdc->ep0_response_buff; in ep0_set_sel()
1409 bdc->ep0_req.usb_req.complete = ep0_set_sel_cmpl; in ep0_set_sel()
1410 ep0_queue_data_stage(bdc); in ep0_set_sel()
1419 static int ep0_queue_zlp(struct bdc *bdc) in ep0_queue_zlp() argument
1423 dev_dbg(bdc->dev, "%s\n", __func__); in ep0_queue_zlp()
1424 bdc->ep0_req.ep = bdc->bdc_ep_array[1]; in ep0_queue_zlp()
1425 bdc->ep0_req.usb_req.length = 0; in ep0_queue_zlp()
1426 bdc->ep0_req.usb_req.complete = NULL; in ep0_queue_zlp()
1427 bdc->ep0_state = WAIT_FOR_DATA_START; in ep0_queue_zlp()
1428 ret = bdc_queue_xfr(bdc, &bdc->ep0_req); in ep0_queue_zlp()
1430 dev_err(bdc->dev, "err queueing zlp :%d\n", ret); in ep0_queue_zlp()
1433 bdc->ep0_state = WAIT_FOR_DATA_XMIT; in ep0_queue_zlp()
1439 static int handle_control_request(struct bdc *bdc) in handle_control_request() argument
1441 enum usb_device_state state = bdc->gadget.state; in handle_control_request()
1447 setup_pkt = &bdc->setup_pkt; in handle_control_request()
1448 dev_dbg(bdc->dev, "%s\n", __func__); in handle_control_request()
1452 dev_dbg(bdc->dev, "USB_REQ_SET_ADDRESS\n"); in handle_control_request()
1453 ret = ep0_set_address(bdc, setup_pkt); in handle_control_request()
1454 bdc->devstatus &= DEVSTATUS_CLEAR; in handle_control_request()
1458 dev_dbg(bdc->dev, "USB_REQ_SET_CONFIGURATION\n"); in handle_control_request()
1460 usb_gadget_set_state(&bdc->gadget, in handle_control_request()
1470 &bdc->gadget, in handle_control_request()
1477 dev_dbg(bdc->dev, "USB_REQ_SET_FEATURE\n"); in handle_control_request()
1478 ret = ep0_handle_feature(bdc, setup_pkt, 1); in handle_control_request()
1482 dev_dbg(bdc->dev, "USB_REQ_CLEAR_FEATURE\n"); in handle_control_request()
1483 ret = ep0_handle_feature(bdc, setup_pkt, 0); in handle_control_request()
1487 dev_dbg(bdc->dev, "USB_REQ_GET_STATUS\n"); in handle_control_request()
1488 ret = ep0_handle_status(bdc, setup_pkt); in handle_control_request()
1492 dev_dbg(bdc->dev, "USB_REQ_SET_SEL\n"); in handle_control_request()
1493 ret = ep0_set_sel(bdc, setup_pkt); in handle_control_request()
1497 dev_warn(bdc->dev, in handle_control_request()
1509 spin_unlock(&bdc->lock); in handle_control_request()
1510 ret = bdc->gadget_driver->setup(&bdc->gadget, setup_pkt); in handle_control_request()
1511 spin_lock(&bdc->lock); in handle_control_request()
1518 void bdc_xsf_ep0_data_start(struct bdc *bdc, struct bdc_sr *sreport) in bdc_xsf_ep0_data_start() argument
1523 dev_dbg(bdc->dev, "%s\n", __func__); in bdc_xsf_ep0_data_start()
1524 ep = bdc->bdc_ep_array[1]; in bdc_xsf_ep0_data_start()
1531 if (bdc->ep0_state != WAIT_FOR_DATA_START) in bdc_xsf_ep0_data_start()
1532 dev_warn(bdc->dev, in bdc_xsf_ep0_data_start()
1534 ep0_state_string[bdc->ep0_state]); in bdc_xsf_ep0_data_start()
1536 ret = handle_control_request(bdc); in bdc_xsf_ep0_data_start()
1542 bdc->delayed_status = true; in bdc_xsf_ep0_data_start()
1546 bdc->ep0_state = WAIT_FOR_DATA_XMIT; in bdc_xsf_ep0_data_start()
1547 dev_dbg(bdc->dev, in bdc_xsf_ep0_data_start()
1548 "ep0_state:%s", ep0_state_string[bdc->ep0_state]); in bdc_xsf_ep0_data_start()
1552 ep0_stall(bdc); in bdc_xsf_ep0_data_start()
1556 void bdc_xsf_ep0_status_start(struct bdc *bdc, struct bdc_sr *sreport) in bdc_xsf_ep0_status_start() argument
1562 dev_dbg(bdc->dev, in bdc_xsf_ep0_status_start()
1564 __func__, ep0_state_string[bdc->ep0_state]); in bdc_xsf_ep0_status_start()
1565 ep = bdc->bdc_ep_array[1]; in bdc_xsf_ep0_status_start()
1568 if (bdc->zlp_needed) in bdc_xsf_ep0_status_start()
1569 bdc->zlp_needed = false; in bdc_xsf_ep0_status_start()
1577 if ((bdc->ep0_state != WAIT_FOR_STATUS_START) && in bdc_xsf_ep0_status_start()
1578 (bdc->ep0_state != WAIT_FOR_DATA_XMIT)) in bdc_xsf_ep0_status_start()
1579 dev_err(bdc->dev, in bdc_xsf_ep0_status_start()
1581 ep0_state_string[bdc->ep0_state]); in bdc_xsf_ep0_status_start()
1584 if (bdc->ep0_state == WAIT_FOR_DATA_XMIT) { in bdc_xsf_ep0_status_start()
1585 bdc->ep0_state = STATUS_PENDING; in bdc_xsf_ep0_status_start()
1587 dev_dbg(bdc->dev, in bdc_xsf_ep0_status_start()
1591 setup_pkt = &bdc->setup_pkt; in bdc_xsf_ep0_status_start()
1598 ret = handle_control_request(bdc); in bdc_xsf_ep0_status_start()
1600 bdc->delayed_status = true; in bdc_xsf_ep0_status_start()
1607 ep0_queue_status_stage(bdc); in bdc_xsf_ep0_status_start()
1608 bdc->ep0_state = WAIT_FOR_STATUS_XMIT; in bdc_xsf_ep0_status_start()
1609 dev_dbg(bdc->dev, in bdc_xsf_ep0_status_start()
1610 "ep0_state:%s", ep0_state_string[bdc->ep0_state]); in bdc_xsf_ep0_status_start()
1614 ep0_stall(bdc); in bdc_xsf_ep0_status_start()
1618 static void ep0_xsf_complete(struct bdc *bdc, struct bdc_sr *sreport) in ep0_xsf_complete() argument
1620 dev_dbg(bdc->dev, "%s\n", __func__); in ep0_xsf_complete()
1621 switch (bdc->ep0_state) { in ep0_xsf_complete()
1623 bdc->ep0_state = WAIT_FOR_STATUS_START; in ep0_xsf_complete()
1626 bdc->ep0_state = WAIT_FOR_SETUP; in ep0_xsf_complete()
1627 if (bdc->test_mode) { in ep0_xsf_complete()
1630 dev_dbg(bdc->dev, "test_mode:%d\n", bdc->test_mode); in ep0_xsf_complete()
1631 ret = bdc_set_test_mode(bdc); in ep0_xsf_complete()
1633 dev_err(bdc->dev, "Err in setting Test mode\n"); in ep0_xsf_complete()
1636 bdc->test_mode = 0; in ep0_xsf_complete()
1640 bdc_xsf_ep0_status_start(bdc, sreport); in ep0_xsf_complete()
1644 dev_err(bdc->dev, in ep0_xsf_complete()
1646 ep0_state_string[bdc->ep0_state]); in ep0_xsf_complete()
1652 void bdc_sr_xsf(struct bdc *bdc, struct bdc_sr *sreport) in bdc_sr_xsf() argument
1659 ep = bdc->bdc_ep_array[ep_num]; in bdc_sr_xsf()
1661 dev_err(bdc->dev, "xsf for ep not enabled\n"); in bdc_sr_xsf()
1668 if (bdc->devstatus & FUNC_WAKE_ISSUED) { in bdc_sr_xsf()
1669 bdc->devstatus &= ~(FUNC_WAKE_ISSUED); in bdc_sr_xsf()
1670 dev_dbg(bdc->dev, "%s clearing FUNC_WAKE_ISSUED flag\n", in bdc_sr_xsf()
1674 dev_dbg_ratelimited(bdc->dev, "%s sr_status=%d ep:%s\n", in bdc_sr_xsf()
1680 handle_xsr_succ_status(bdc, ep, sreport); in bdc_sr_xsf()
1682 ep0_xsf_complete(bdc, sreport); in bdc_sr_xsf()
1689 dev_err(bdc->dev, in bdc_sr_xsf()
1693 bdc->sr_xsf_ep0[sr_status - XSF_SETUP_RECV](bdc, sreport); in bdc_sr_xsf()
1698 dev_dbg(bdc->dev, "Babble on ep0 zlp_need:%d\n", in bdc_sr_xsf()
1699 bdc->zlp_needed); in bdc_sr_xsf()
1704 if (bdc->zlp_needed) { in bdc_sr_xsf()
1706 ep0_queue_zlp(bdc); in bdc_sr_xsf()
1710 dev_warn(bdc->dev, "Babble on ep not handled\n"); in bdc_sr_xsf()
1713 dev_warn(bdc->dev, "sr status not handled:%x\n", sr_status); in bdc_sr_xsf()
1724 struct bdc *bdc; in bdc_gadget_ep_queue() local
1735 bdc = ep->bdc; in bdc_gadget_ep_queue()
1736 dev_dbg(bdc->dev, "%s ep:%p req:%p\n", __func__, ep, req); in bdc_gadget_ep_queue()
1737 dev_dbg(bdc->dev, "queuing request %p to %s length %d zero:%d\n", in bdc_gadget_ep_queue()
1741 dev_warn(bdc->dev, in bdc_gadget_ep_queue()
1748 dev_warn(bdc->dev, in bdc_gadget_ep_queue()
1753 spin_lock_irqsave(&bdc->lock, flags); in bdc_gadget_ep_queue()
1754 if (ep == bdc->bdc_ep_array[1]) in bdc_gadget_ep_queue()
1759 spin_unlock_irqrestore(&bdc->lock, flags); in bdc_gadget_ep_queue()
1770 struct bdc *bdc; in bdc_gadget_ep_dequeue() local
1778 bdc = ep->bdc; in bdc_gadget_ep_dequeue()
1779 dev_dbg(bdc->dev, "%s ep:%s req:%p\n", __func__, ep->name, req); in bdc_gadget_ep_dequeue()
1780 bdc_dbg_bd_list(bdc, ep); in bdc_gadget_ep_dequeue()
1781 spin_lock_irqsave(&bdc->lock, flags); in bdc_gadget_ep_dequeue()
1788 spin_unlock_irqrestore(&bdc->lock, flags); in bdc_gadget_ep_dequeue()
1789 dev_err(bdc->dev, "usb_req !=req n"); in bdc_gadget_ep_dequeue()
1800 bdc_dbg_bd_list(bdc, ep); in bdc_gadget_ep_dequeue()
1801 spin_unlock_irqrestore(&bdc->lock, flags); in bdc_gadget_ep_dequeue()
1810 struct bdc *bdc; in bdc_gadget_ep_set_halt() local
1814 bdc = ep->bdc; in bdc_gadget_ep_set_halt()
1815 dev_dbg(bdc->dev, "%s ep:%s value=%d\n", __func__, ep->name, value); in bdc_gadget_ep_set_halt()
1816 spin_lock_irqsave(&bdc->lock, flags); in bdc_gadget_ep_set_halt()
1824 spin_unlock_irqrestore(&bdc->lock, flags); in bdc_gadget_ep_set_halt()
1843 dev_dbg(ep->bdc->dev, "%s ep:%s req:%p\n", __func__, ep->name, req); in bdc_gadget_alloc_request()
1865 struct bdc *bdc; in bdc_gadget_ep_enable() local
1879 bdc = ep->bdc; in bdc_gadget_ep_enable()
1882 if (ep == bdc->bdc_ep_array[1]) in bdc_gadget_ep_enable()
1885 if (!bdc->gadget_driver in bdc_gadget_ep_enable()
1886 || bdc->gadget.speed == USB_SPEED_UNKNOWN) { in bdc_gadget_ep_enable()
1890 dev_dbg(bdc->dev, "%s Enabling %s\n", __func__, ep->name); in bdc_gadget_ep_enable()
1891 spin_lock_irqsave(&bdc->lock, flags); in bdc_gadget_ep_enable()
1895 spin_unlock_irqrestore(&bdc->lock, flags); in bdc_gadget_ep_enable()
1904 struct bdc *bdc; in bdc_gadget_ep_disable() local
1912 bdc = ep->bdc; in bdc_gadget_ep_disable()
1915 if (ep == bdc->bdc_ep_array[1]) { in bdc_gadget_ep_disable()
1916 dev_warn(bdc->dev, "%s called for ep0\n", __func__); in bdc_gadget_ep_disable()
1919 dev_dbg(bdc->dev, in bdc_gadget_ep_disable()
1924 dev_warn(bdc->dev, "%s is already disabled\n", ep->name); in bdc_gadget_ep_disable()
1927 spin_lock_irqsave(&bdc->lock, flags); in bdc_gadget_ep_disable()
1929 spin_unlock_irqrestore(&bdc->lock, flags); in bdc_gadget_ep_disable()
1945 static int init_ep(struct bdc *bdc, u32 epnum, u32 dir) in init_ep() argument
1949 dev_dbg(bdc->dev, "%s epnum=%d dir=%d\n", __func__, epnum, dir); in init_ep()
1954 ep->bdc = bdc; in init_ep()
1965 bdc->bdc_ep_array[ep->ep_num] = ep; in init_ep()
1970 bdc->gadget.ep0 = &ep->usb_ep; in init_ep()
1977 bdc->bdc_ep_array[ep->ep_num] = ep; in init_ep()
1986 list_add_tail(&ep->usb_ep.ep_list, &bdc->gadget.ep_list); in init_ep()
1992 dev_dbg(bdc->dev, "ep=%p ep->usb_ep.name=%s epnum=%d ep->epnum=%d\n", in init_ep()
2001 int bdc_init_ep(struct bdc *bdc) in bdc_init_ep() argument
2006 dev_dbg(bdc->dev, "%s()\n", __func__); in bdc_init_ep()
2007 INIT_LIST_HEAD(&bdc->gadget.ep_list); in bdc_init_ep()
2009 ret = init_ep(bdc, 1, 0); in bdc_init_ep()
2011 dev_err(bdc->dev, "init ep ep0 fail %d\n", ret); in bdc_init_ep()
2015 for (epnum = 2; epnum <= bdc->num_eps / 2; epnum++) { in bdc_init_ep()
2017 ret = init_ep(bdc, epnum, 0); in bdc_init_ep()
2019 dev_err(bdc->dev, in bdc_init_ep()
2026 ret = init_ep(bdc, epnum, 1); in bdc_init_ep()
2028 dev_err(bdc->dev, in bdc_init_ep()