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()
167 dev_dbg(bdc->dev, in ep_bd_list_alloc()
223 struct bdc *bdc = ep->bdc; in bd_add_to_bdi() local
229 dev_dbg(bdc->dev, "%s %llx\n", in bd_add_to_bdi()
242 dev_dbg(bdc->dev, "dma_first_bd:%llx dma_last_bd:%llx\n", in bd_add_to_bdi()
251 dev_err(bdc->dev, "%s FATAL err, bd not found\n", __func__); in bd_add_to_bdi()
267 dev_vdbg(ep->bdc->dev, in bdi_to_tbi()
296 struct bdc *bdc = ep->bdc; in bd_available_ep() local
315 dev_vdbg(bdc->dev, "chain_bd1:%d chain_bd2:%d\n", in bd_available_ep()
339 dev_vdbg(bdc->dev, "available_bd:%d\n", available_bd); in bd_available_ep()
345 void bdc_notify_xfr(struct bdc *bdc, u32 epnum) in bdc_notify_xfr() argument
347 struct bdc_ep *ep = bdc->bdc_ep_array[epnum]; in bdc_notify_xfr()
349 dev_vdbg(bdc->dev, "%s epnum:%d\n", __func__, epnum); in bdc_notify_xfr()
357 bdc_writel(bdc->regs, BDC_XSFNTF, epnum); in bdc_notify_xfr()
367 dev_vdbg(ep->bdc->dev, in bdi_to_bd()
388 static int setup_first_bd_ep0(struct bdc *bdc, struct bdc_req *req, u32 *dword3) in setup_first_bd_ep0() argument
395 switch (bdc->ep0_state) { in setup_first_bd_ep0()
398 if (bdc->setup_pkt.bRequestType & USB_DIR_IN) in setup_first_bd_ep0()
402 wValue = le16_to_cpu(bdc->setup_pkt.wValue); in setup_first_bd_ep0()
404 (req_len % bdc->gadget.ep0->maxpacket == 0)) { in setup_first_bd_ep0()
405 dev_dbg(bdc->dev, "ZLP needed wVal:%d len:%d MaxP:%d\n", in setup_first_bd_ep0()
407 bdc->gadget.ep0->maxpacket); in setup_first_bd_ep0()
408 bdc->zlp_needed = true; in setup_first_bd_ep0()
414 if (!le16_to_cpu(bdc->setup_pkt.wLength) || in setup_first_bd_ep0()
415 !(bdc->setup_pkt.bRequestType & USB_DIR_IN)) in setup_first_bd_ep0()
419 dev_err(bdc->dev, in setup_first_bd_ep0()
421 ep0_state_string[bdc->ep0_state]); in setup_first_bd_ep0()
429 static int setup_bd_list_xfr(struct bdc *bdc, struct bdc_req *req, int num_bds) in setup_bd_list_xfr() argument
450 dev_vdbg(bdc->dev, "%s ep:%s num_bds:%d tfs:%d r_len:%d bd:%p\n", in setup_bd_list_xfr()
461 ret = setup_first_bd_ep0(bdc, req, &dword3); in setup_bd_list_xfr()
482 dev_err(bdc->dev, "Err bd pointing to wrong addr\n"); in setup_bd_list_xfr()
494 dev_vdbg(bdc->dev, "buf_add:%08llx req_len:%d bd:%p eqp:%d\n", in setup_bd_list_xfr()
513 static int bdc_queue_xfr(struct bdc *bdc, struct bdc_req *req) in bdc_queue_xfr() argument
520 dev_dbg(bdc->dev, "%s req:%p\n", __func__, req); in bdc_queue_xfr()
521 dev_dbg(bdc->dev, "eqp_bdi:%d hwd_bdi:%d\n", in bdc_queue_xfr()
531 ret = setup_bd_list_xfr(bdc, req, num_bds); in bdc_queue_xfr()
535 bdc_dbg_bd_list(bdc, ep); in bdc_queue_xfr()
536 bdc_notify_xfr(bdc, ep->ep_num); in bdc_queue_xfr()
545 struct bdc *bdc = ep->bdc; in bdc_req_complete() local
550 dev_dbg(bdc->dev, "%s ep:%s status:%d\n", __func__, ep->name, status); in bdc_req_complete()
553 usb_gadget_unmap_request(&bdc->gadget, &req->usb_req, ep->dir); in bdc_req_complete()
555 spin_unlock(&bdc->lock); in bdc_req_complete()
557 spin_lock(&bdc->lock); in bdc_req_complete()
565 struct bdc *bdc; in bdc_ep_disable() local
569 bdc = ep->bdc; in bdc_ep_disable()
570 dev_dbg(bdc->dev, "%s() ep->ep_num=%d\n", __func__, ep->ep_num); in bdc_ep_disable()
572 ret = bdc_stop_ep(bdc, ep->ep_num); in bdc_ep_disable()
585 ret = bdc_dconfig_ep(bdc, ep); in bdc_ep_disable()
587 dev_warn(bdc->dev, in bdc_ep_disable()
608 struct bdc *bdc; in bdc_ep_enable() local
611 bdc = ep->bdc; in bdc_ep_enable()
612 dev_dbg(bdc->dev, "%s NUM_TABLES:%d %d\n", in bdc_ep_enable()
617 dev_err(bdc->dev, "ep bd list allocation failed:%d\n", ret); in bdc_ep_enable()
620 bdc_dbg_bd_list(bdc, ep); in bdc_ep_enable()
627 ret = bdc_config_ep(bdc, ep); in bdc_ep_enable()
643 static int ep0_queue_status_stage(struct bdc *bdc) in ep0_queue_status_stage() argument
648 status_req = &bdc->status_req; in ep0_queue_status_stage()
649 ep = bdc->bdc_ep_array[1]; in ep0_queue_status_stage()
655 bdc_queue_xfr(bdc, status_req); in ep0_queue_status_stage()
663 struct bdc *bdc; in ep0_queue() local
666 bdc = ep->bdc; in ep0_queue()
667 dev_dbg(bdc->dev, "%s()\n", __func__); in ep0_queue()
672 if (bdc->delayed_status) { in ep0_queue()
673 bdc->delayed_status = false; in ep0_queue()
675 if (bdc->ep0_state == WAIT_FOR_STATUS_START) { in ep0_queue()
677 ep0_queue_status_stage(bdc); in ep0_queue()
678 bdc->ep0_state = WAIT_FOR_STATUS_XMIT; in ep0_queue()
691 ret = usb_gadget_map_request(&bdc->gadget, &req->usb_req, ep->dir); in ep0_queue()
693 dev_err(bdc->dev, "dma mapping failed %s\n", ep->name); in ep0_queue()
697 return bdc_queue_xfr(bdc, req); in ep0_queue()
701 static int ep0_queue_data_stage(struct bdc *bdc) in ep0_queue_data_stage() argument
706 dev_dbg(bdc->dev, "%s\n", __func__); in ep0_queue_data_stage()
707 ep0_usb_req = &bdc->ep0_req.usb_req; in ep0_queue_data_stage()
708 ep = bdc->bdc_ep_array[1]; in ep0_queue_data_stage()
709 bdc->ep0_req.ep = ep; in ep0_queue_data_stage()
710 bdc->ep0_req.usb_req.complete = NULL; in ep0_queue_data_stage()
712 return ep0_queue(ep, &bdc->ep0_req); in ep0_queue_data_stage()
718 struct bdc *bdc; in ep_queue() local
724 bdc = ep->bdc; in ep_queue()
730 ret = usb_gadget_map_request(&bdc->gadget, &req->usb_req, ep->dir); in ep_queue()
732 dev_err(bdc->dev, "dma mapping failed\n"); in ep_queue()
736 return bdc_queue_xfr(bdc, req); in ep_queue()
750 struct bdc *bdc; in ep_dequeue() local
754 bdc = ep->bdc; in ep_dequeue()
764 dev_dbg(bdc->dev, "%s ep:%s start:%d end:%d\n", in ep_dequeue()
766 dev_dbg(bdc->dev, "ep_dequeue ep=%p ep->desc=%p\n", in ep_dequeue()
769 ret = bdc_stop_ep(bdc, ep->ep_num); in ep_dequeue()
780 tmp_32 = bdc_readl(bdc->regs, BDC_EPSTS0(0)); in ep_dequeue()
782 tmp_32 = bdc_readl(bdc->regs, BDC_EPSTS0(1)); in ep_dequeue()
812 dev_dbg(bdc->dev, in ep_dequeue()
814 start_pending, end_pending, bdc->gadget.speed); in ep_dequeue()
824 if (bdc->gadget.speed == USB_SPEED_UNKNOWN) in ep_dequeue()
853 bdc_dbg_bd_list(bdc, ep); in ep_dequeue()
859 ret = bdc_ep_bla(bdc, ep, next_bd_dma); in ep_dequeue()
861 dev_err(bdc->dev, "error in ep_bla:%d\n", ret); in ep_dequeue()
872 struct bdc *bdc; in ep_set_halt() local
875 bdc = ep->bdc; in ep_set_halt()
876 dev_dbg(bdc->dev, "%s ep:%s value=%d\n", __func__, ep->name, value); in ep_set_halt()
879 dev_dbg(bdc->dev, "Halt\n"); in ep_set_halt()
881 bdc->ep0_state = WAIT_FOR_SETUP; in ep_set_halt()
883 ret = bdc_ep_set_stall(bdc, ep->ep_num); in ep_set_halt()
885 dev_err(bdc->dev, "failed to set STALL on %s\n", in ep_set_halt()
891 dev_dbg(bdc->dev, "Before Clear\n"); in ep_set_halt()
892 ret = bdc_ep_clear_stall(bdc, ep->ep_num); in ep_set_halt()
894 dev_err(bdc->dev, "failed to clear STALL on %s\n", in ep_set_halt()
898 dev_dbg(bdc->dev, "After Clear\n"); in ep_set_halt()
905 void bdc_free_ep(struct bdc *bdc) in bdc_free_ep() argument
910 dev_dbg(bdc->dev, "%s\n", __func__); in bdc_free_ep()
911 for (epnum = 1; epnum < bdc->num_eps; epnum++) { in bdc_free_ep()
912 ep = bdc->bdc_ep_array[epnum]; in bdc_free_ep()
928 static int bdc_set_test_mode(struct bdc *bdc) in bdc_set_test_mode() argument
932 usb2_pm = bdc_readl(bdc->regs, BDC_USPPM2); in bdc_set_test_mode()
934 dev_dbg(bdc->dev, "%s\n", __func__); in bdc_set_test_mode()
935 switch (bdc->test_mode) { in bdc_set_test_mode()
941 usb2_pm |= bdc->test_mode << 28; in bdc_set_test_mode()
946 dev_dbg(bdc->dev, "usb2_pm=%08x", usb2_pm); in bdc_set_test_mode()
947 bdc_writel(bdc->regs, BDC_USPPM2, usb2_pm); in bdc_set_test_mode()
956 static void handle_xsr_succ_status(struct bdc *bdc, struct bdc_ep *ep, in handle_xsr_succ_status() argument
970 dev_dbg(bdc->dev, "%s ep:%p\n", __func__, ep); in handle_xsr_succ_status()
971 bdc_dbg_srr(bdc, 0); in handle_xsr_succ_status()
979 dev_warn(bdc->dev, "xfr srr with no BD's queued\n"); in handle_xsr_succ_status()
1004 dev_warn(bdc->dev, "bd doesn't exist?\n"); in handle_xsr_succ_status()
1046 dev_dbg(bdc->dev, in handle_xsr_succ_status()
1055 dev_dbg(bdc->dev, "short xfr on %d\n", ep->ep_num); in handle_xsr_succ_status()
1068 void bdc_xsf_ep0_setup_recv(struct bdc *bdc, struct bdc_sr *sreport) in bdc_xsf_ep0_setup_recv() argument
1073 dev_dbg(bdc->dev, in bdc_xsf_ep0_setup_recv()
1075 __func__, ep0_state_string[bdc->ep0_state]); in bdc_xsf_ep0_setup_recv()
1077 setup_pkt = &bdc->setup_pkt; in bdc_xsf_ep0_setup_recv()
1081 bdc->ep0_state = WAIT_FOR_STATUS_START; in bdc_xsf_ep0_setup_recv()
1083 bdc->ep0_state = WAIT_FOR_DATA_START; in bdc_xsf_ep0_setup_recv()
1086 dev_dbg(bdc->dev, in bdc_xsf_ep0_setup_recv()
1088 __func__, ep0_state_string[bdc->ep0_state]); in bdc_xsf_ep0_setup_recv()
1092 static void ep0_stall(struct bdc *bdc) in ep0_stall() argument
1094 struct bdc_ep *ep = bdc->bdc_ep_array[1]; in ep0_stall()
1097 dev_dbg(bdc->dev, "%s\n", __func__); in ep0_stall()
1098 bdc->delayed_status = false; in ep0_stall()
1110 static int ep0_set_address(struct bdc *bdc, struct usb_ctrlrequest *ctrl) in ep0_set_address() argument
1112 enum usb_device_state state = bdc->gadget.state; in ep0_set_address()
1117 dev_dbg(bdc->dev, in ep0_set_address()
1128 ret = bdc_address_device(bdc, addr); in ep0_set_address()
1133 usb_gadget_set_state(&bdc->gadget, USB_STATE_ADDRESS); in ep0_set_address()
1135 usb_gadget_set_state(&bdc->gadget, USB_STATE_DEFAULT); in ep0_set_address()
1137 bdc->dev_addr = addr; in ep0_set_address()
1140 dev_warn(bdc->dev, in ep0_set_address()
1150 static int ep0_handle_feature_dev(struct bdc *bdc, u16 wValue, in ep0_handle_feature_dev() argument
1153 enum usb_device_state state = bdc->gadget.state; in ep0_handle_feature_dev()
1156 dev_dbg(bdc->dev, "%s set:%d dev state:%d\n", in ep0_handle_feature_dev()
1160 dev_dbg(bdc->dev, "USB_DEVICE_REMOTE_WAKEUP\n"); in ep0_handle_feature_dev()
1162 bdc->devstatus |= REMOTE_WAKE_ENABLE; in ep0_handle_feature_dev()
1164 bdc->devstatus &= ~REMOTE_WAKE_ENABLE; in ep0_handle_feature_dev()
1168 dev_dbg(bdc->dev, "USB_DEVICE_TEST_MODE\n"); in ep0_handle_feature_dev()
1170 (bdc->gadget.speed != USB_SPEED_HIGH) || !set) in ep0_handle_feature_dev()
1173 bdc->test_mode = wIndex >> 8; in ep0_handle_feature_dev()
1177 dev_dbg(bdc->dev, "USB_DEVICE_U1_ENABLE\n"); in ep0_handle_feature_dev()
1179 if (bdc->gadget.speed != USB_SPEED_SUPER || in ep0_handle_feature_dev()
1183 usppms = bdc_readl(bdc->regs, BDC_USPPMS); in ep0_handle_feature_dev()
1189 bdc->devstatus |= (1 << USB_DEV_STAT_U1_ENABLED); in ep0_handle_feature_dev()
1193 bdc->devstatus &= ~(1 << USB_DEV_STAT_U1_ENABLED); in ep0_handle_feature_dev()
1195 bdc_writel(bdc->regs, BDC_USPPMS, usppms); in ep0_handle_feature_dev()
1199 dev_dbg(bdc->dev, "USB_DEVICE_U2_ENABLE\n"); in ep0_handle_feature_dev()
1201 if (bdc->gadget.speed != USB_SPEED_SUPER || in ep0_handle_feature_dev()
1205 usppms = bdc_readl(bdc->regs, BDC_USPPMS); in ep0_handle_feature_dev()
1209 bdc->devstatus |= (1 << USB_DEV_STAT_U2_ENABLED); in ep0_handle_feature_dev()
1213 bdc->devstatus &= ~(1 << USB_DEV_STAT_U2_ENABLED); in ep0_handle_feature_dev()
1215 bdc_writel(bdc->regs, BDC_USPPMS, usppms); in ep0_handle_feature_dev()
1219 dev_dbg(bdc->dev, "USB_DEVICE_LTM_ENABLE?\n"); in ep0_handle_feature_dev()
1220 if (bdc->gadget.speed != USB_SPEED_SUPER || in ep0_handle_feature_dev()
1225 dev_err(bdc->dev, "Unknown wValue:%d\n", wValue); in ep0_handle_feature_dev()
1233 static int ep0_handle_feature(struct bdc *bdc, in ep0_handle_feature() argument
1236 enum usb_device_state state = bdc->gadget.state; in ep0_handle_feature()
1245 dev_dbg(bdc->dev, in ep0_handle_feature()
1248 bdc->gadget.speed, set); in ep0_handle_feature()
1252 return ep0_handle_feature_dev(bdc, wValue, wIndex, set); in ep0_handle_feature()
1254 dev_dbg(bdc->dev, "USB_RECIP_INTERFACE\n"); in ep0_handle_feature()
1261 dev_dbg(bdc->dev, "SET REMOTE_WAKEUP\n"); in ep0_handle_feature()
1262 bdc->devstatus |= REMOTE_WAKE_ENABLE; in ep0_handle_feature()
1264 dev_dbg(bdc->dev, "CLEAR REMOTE_WAKEUP\n"); in ep0_handle_feature()
1265 bdc->devstatus &= ~REMOTE_WAKE_ENABLE; in ep0_handle_feature()
1271 dev_dbg(bdc->dev, "USB_RECIP_ENDPOINT\n"); in ep0_handle_feature()
1290 dev_dbg(bdc->dev, "ep0 stall already cleared\n"); in ep0_handle_feature()
1293 dev_dbg(bdc->dev, "epnum=%d\n", epnum); in ep0_handle_feature()
1294 ep = bdc->bdc_ep_array[epnum]; in ep0_handle_feature()
1300 dev_err(bdc->dev, "Unknown recipient\n"); in ep0_handle_feature()
1308 static int ep0_handle_status(struct bdc *bdc, in ep0_handle_status() argument
1311 enum usb_device_state state = bdc->gadget.state; in ep0_handle_status()
1321 dev_dbg(bdc->dev, "%s\n", __func__); in ep0_handle_status()
1322 usb_status = bdc->devstatus; in ep0_handle_status()
1325 dev_dbg(bdc->dev, in ep0_handle_status()
1327 bdc->devstatus); in ep0_handle_status()
1329 if (bdc->gadget.speed == USB_SPEED_SUPER) in ep0_handle_status()
1334 dev_dbg(bdc->dev, "USB_RECIP_INTERFACE\n"); in ep0_handle_status()
1335 if (bdc->gadget.speed == USB_SPEED_SUPER) { in ep0_handle_status()
1340 if (bdc->devstatus & REMOTE_WAKE_ENABLE) in ep0_handle_status()
1349 dev_dbg(bdc->dev, "USB_RECIP_ENDPOINT\n"); in ep0_handle_status()
1360 ep = bdc->bdc_ep_array[epnum]; in ep0_handle_status()
1362 dev_err(bdc->dev, "ISSUE, GET_STATUS for invalid EP ?"); in ep0_handle_status()
1370 dev_err(bdc->dev, "Unknown recipient for get_status\n"); in ep0_handle_status()
1374 dev_dbg(bdc->dev, "usb_status=%08x\n", usb_status); in ep0_handle_status()
1375 *(__le16 *)bdc->ep0_response_buff = cpu_to_le16(usb_status); in ep0_handle_status()
1376 bdc->ep0_req.usb_req.length = 2; in ep0_handle_status()
1377 bdc->ep0_req.usb_req.buf = &bdc->ep0_response_buff; in ep0_handle_status()
1378 ep0_queue_data_stage(bdc); in ep0_handle_status()
1389 static int ep0_set_sel(struct bdc *bdc, in ep0_set_sel() argument
1396 dev_dbg(bdc->dev, "%s\n", __func__); in ep0_set_sel()
1400 dev_err(bdc->dev, "%s Wrong wLength:%d\n", __func__, wLength); in ep0_set_sel()
1403 ep = bdc->bdc_ep_array[1]; in ep0_set_sel()
1404 bdc->ep0_req.ep = ep; in ep0_set_sel()
1405 bdc->ep0_req.usb_req.length = 6; in ep0_set_sel()
1406 bdc->ep0_req.usb_req.buf = bdc->ep0_response_buff; in ep0_set_sel()
1407 bdc->ep0_req.usb_req.complete = ep0_set_sel_cmpl; in ep0_set_sel()
1408 ep0_queue_data_stage(bdc); in ep0_set_sel()
1417 static int ep0_queue_zlp(struct bdc *bdc) in ep0_queue_zlp() argument
1421 dev_dbg(bdc->dev, "%s\n", __func__); in ep0_queue_zlp()
1422 bdc->ep0_req.ep = bdc->bdc_ep_array[1]; in ep0_queue_zlp()
1423 bdc->ep0_req.usb_req.length = 0; in ep0_queue_zlp()
1424 bdc->ep0_req.usb_req.complete = NULL; in ep0_queue_zlp()
1425 bdc->ep0_state = WAIT_FOR_DATA_START; in ep0_queue_zlp()
1426 ret = bdc_queue_xfr(bdc, &bdc->ep0_req); in ep0_queue_zlp()
1428 dev_err(bdc->dev, "err queueing zlp :%d\n", ret); in ep0_queue_zlp()
1431 bdc->ep0_state = WAIT_FOR_DATA_XMIT; in ep0_queue_zlp()
1437 static int handle_control_request(struct bdc *bdc) in handle_control_request() argument
1439 enum usb_device_state state = bdc->gadget.state; in handle_control_request()
1445 setup_pkt = &bdc->setup_pkt; in handle_control_request()
1446 dev_dbg(bdc->dev, "%s\n", __func__); in handle_control_request()
1450 dev_dbg(bdc->dev, "USB_REQ_SET_ADDRESS\n"); in handle_control_request()
1451 ret = ep0_set_address(bdc, setup_pkt); in handle_control_request()
1452 bdc->devstatus &= DEVSTATUS_CLEAR; in handle_control_request()
1456 dev_dbg(bdc->dev, "USB_REQ_SET_CONFIGURATION\n"); in handle_control_request()
1458 usb_gadget_set_state(&bdc->gadget, in handle_control_request()
1468 &bdc->gadget, in handle_control_request()
1475 dev_dbg(bdc->dev, "USB_REQ_SET_FEATURE\n"); in handle_control_request()
1476 ret = ep0_handle_feature(bdc, setup_pkt, 1); in handle_control_request()
1480 dev_dbg(bdc->dev, "USB_REQ_CLEAR_FEATURE\n"); in handle_control_request()
1481 ret = ep0_handle_feature(bdc, setup_pkt, 0); in handle_control_request()
1485 dev_dbg(bdc->dev, "USB_REQ_GET_STATUS\n"); in handle_control_request()
1486 ret = ep0_handle_status(bdc, setup_pkt); in handle_control_request()
1490 dev_dbg(bdc->dev, "USB_REQ_SET_SEL\n"); in handle_control_request()
1491 ret = ep0_set_sel(bdc, setup_pkt); in handle_control_request()
1495 dev_warn(bdc->dev, in handle_control_request()
1507 spin_unlock(&bdc->lock); in handle_control_request()
1508 ret = bdc->gadget_driver->setup(&bdc->gadget, setup_pkt); in handle_control_request()
1509 spin_lock(&bdc->lock); in handle_control_request()
1516 void bdc_xsf_ep0_data_start(struct bdc *bdc, struct bdc_sr *sreport) in bdc_xsf_ep0_data_start() argument
1521 dev_dbg(bdc->dev, "%s\n", __func__); in bdc_xsf_ep0_data_start()
1522 ep = bdc->bdc_ep_array[1]; in bdc_xsf_ep0_data_start()
1529 if (bdc->ep0_state != WAIT_FOR_DATA_START) in bdc_xsf_ep0_data_start()
1530 dev_warn(bdc->dev, in bdc_xsf_ep0_data_start()
1532 ep0_state_string[bdc->ep0_state]); in bdc_xsf_ep0_data_start()
1534 ret = handle_control_request(bdc); in bdc_xsf_ep0_data_start()
1540 bdc->delayed_status = true; in bdc_xsf_ep0_data_start()
1544 bdc->ep0_state = WAIT_FOR_DATA_XMIT; in bdc_xsf_ep0_data_start()
1545 dev_dbg(bdc->dev, in bdc_xsf_ep0_data_start()
1546 "ep0_state:%s", ep0_state_string[bdc->ep0_state]); in bdc_xsf_ep0_data_start()
1550 ep0_stall(bdc); in bdc_xsf_ep0_data_start()
1554 void bdc_xsf_ep0_status_start(struct bdc *bdc, struct bdc_sr *sreport) in bdc_xsf_ep0_status_start() argument
1560 dev_dbg(bdc->dev, in bdc_xsf_ep0_status_start()
1562 __func__, ep0_state_string[bdc->ep0_state]); in bdc_xsf_ep0_status_start()
1563 ep = bdc->bdc_ep_array[1]; in bdc_xsf_ep0_status_start()
1566 if (bdc->zlp_needed) in bdc_xsf_ep0_status_start()
1567 bdc->zlp_needed = false; in bdc_xsf_ep0_status_start()
1575 if ((bdc->ep0_state != WAIT_FOR_STATUS_START) && in bdc_xsf_ep0_status_start()
1576 (bdc->ep0_state != WAIT_FOR_DATA_XMIT)) in bdc_xsf_ep0_status_start()
1577 dev_err(bdc->dev, in bdc_xsf_ep0_status_start()
1579 ep0_state_string[bdc->ep0_state]); in bdc_xsf_ep0_status_start()
1582 if (bdc->ep0_state == WAIT_FOR_DATA_XMIT) { in bdc_xsf_ep0_status_start()
1583 bdc->ep0_state = STATUS_PENDING; in bdc_xsf_ep0_status_start()
1585 dev_dbg(bdc->dev, in bdc_xsf_ep0_status_start()
1589 setup_pkt = &bdc->setup_pkt; in bdc_xsf_ep0_status_start()
1596 ret = handle_control_request(bdc); in bdc_xsf_ep0_status_start()
1598 bdc->delayed_status = true; in bdc_xsf_ep0_status_start()
1605 ep0_queue_status_stage(bdc); in bdc_xsf_ep0_status_start()
1606 bdc->ep0_state = WAIT_FOR_STATUS_XMIT; in bdc_xsf_ep0_status_start()
1607 dev_dbg(bdc->dev, in bdc_xsf_ep0_status_start()
1608 "ep0_state:%s", ep0_state_string[bdc->ep0_state]); in bdc_xsf_ep0_status_start()
1612 ep0_stall(bdc); in bdc_xsf_ep0_status_start()
1616 static void ep0_xsf_complete(struct bdc *bdc, struct bdc_sr *sreport) in ep0_xsf_complete() argument
1618 dev_dbg(bdc->dev, "%s\n", __func__); in ep0_xsf_complete()
1619 switch (bdc->ep0_state) { in ep0_xsf_complete()
1621 bdc->ep0_state = WAIT_FOR_STATUS_START; in ep0_xsf_complete()
1624 bdc->ep0_state = WAIT_FOR_SETUP; in ep0_xsf_complete()
1625 if (bdc->test_mode) { in ep0_xsf_complete()
1628 dev_dbg(bdc->dev, "test_mode:%d\n", bdc->test_mode); in ep0_xsf_complete()
1629 ret = bdc_set_test_mode(bdc); in ep0_xsf_complete()
1631 dev_err(bdc->dev, "Err in setting Test mode\n"); in ep0_xsf_complete()
1634 bdc->test_mode = 0; in ep0_xsf_complete()
1638 bdc_xsf_ep0_status_start(bdc, sreport); in ep0_xsf_complete()
1642 dev_err(bdc->dev, in ep0_xsf_complete()
1644 ep0_state_string[bdc->ep0_state]); in ep0_xsf_complete()
1650 void bdc_sr_xsf(struct bdc *bdc, struct bdc_sr *sreport) in bdc_sr_xsf() argument
1657 ep = bdc->bdc_ep_array[ep_num]; in bdc_sr_xsf()
1659 dev_err(bdc->dev, "xsf for ep not enabled\n"); in bdc_sr_xsf()
1666 if (bdc->devstatus & FUNC_WAKE_ISSUED) { in bdc_sr_xsf()
1667 bdc->devstatus &= ~(FUNC_WAKE_ISSUED); in bdc_sr_xsf()
1668 dev_dbg(bdc->dev, "%s clearing FUNC_WAKE_ISSUED flag\n", in bdc_sr_xsf()
1672 dev_dbg_ratelimited(bdc->dev, "%s sr_status=%d ep:%s\n", in bdc_sr_xsf()
1678 handle_xsr_succ_status(bdc, ep, sreport); in bdc_sr_xsf()
1680 ep0_xsf_complete(bdc, sreport); in bdc_sr_xsf()
1687 dev_err(bdc->dev, in bdc_sr_xsf()
1691 bdc->sr_xsf_ep0[sr_status - XSF_SETUP_RECV](bdc, sreport); in bdc_sr_xsf()
1696 dev_dbg(bdc->dev, "Babble on ep0 zlp_need:%d\n", in bdc_sr_xsf()
1697 bdc->zlp_needed); in bdc_sr_xsf()
1702 if (bdc->zlp_needed) { in bdc_sr_xsf()
1704 ep0_queue_zlp(bdc); in bdc_sr_xsf()
1708 dev_warn(bdc->dev, "Babble on ep not handled\n"); in bdc_sr_xsf()
1711 dev_warn(bdc->dev, "sr status not handled:%x\n", sr_status); in bdc_sr_xsf()
1722 struct bdc *bdc; in bdc_gadget_ep_queue() local
1733 bdc = ep->bdc; in bdc_gadget_ep_queue()
1734 dev_dbg(bdc->dev, "%s ep:%p req:%p\n", __func__, ep, req); in bdc_gadget_ep_queue()
1735 dev_dbg(bdc->dev, "queuing request %p to %s length %d zero:%d\n", in bdc_gadget_ep_queue()
1739 dev_warn(bdc->dev, in bdc_gadget_ep_queue()
1746 dev_warn(bdc->dev, in bdc_gadget_ep_queue()
1751 spin_lock_irqsave(&bdc->lock, flags); in bdc_gadget_ep_queue()
1752 if (ep == bdc->bdc_ep_array[1]) in bdc_gadget_ep_queue()
1757 spin_unlock_irqrestore(&bdc->lock, flags); in bdc_gadget_ep_queue()
1768 struct bdc *bdc; in bdc_gadget_ep_dequeue() local
1776 bdc = ep->bdc; in bdc_gadget_ep_dequeue()
1777 dev_dbg(bdc->dev, "%s ep:%s req:%p\n", __func__, ep->name, req); in bdc_gadget_ep_dequeue()
1778 bdc_dbg_bd_list(bdc, ep); in bdc_gadget_ep_dequeue()
1779 spin_lock_irqsave(&bdc->lock, flags); in bdc_gadget_ep_dequeue()
1786 spin_unlock_irqrestore(&bdc->lock, flags); in bdc_gadget_ep_dequeue()
1787 dev_err(bdc->dev, "usb_req !=req n"); in bdc_gadget_ep_dequeue()
1798 bdc_dbg_bd_list(bdc, ep); in bdc_gadget_ep_dequeue()
1799 spin_unlock_irqrestore(&bdc->lock, flags); in bdc_gadget_ep_dequeue()
1808 struct bdc *bdc; in bdc_gadget_ep_set_halt() local
1812 bdc = ep->bdc; in bdc_gadget_ep_set_halt()
1813 dev_dbg(bdc->dev, "%s ep:%s value=%d\n", __func__, ep->name, value); in bdc_gadget_ep_set_halt()
1814 spin_lock_irqsave(&bdc->lock, flags); in bdc_gadget_ep_set_halt()
1822 spin_unlock_irqrestore(&bdc->lock, flags); in bdc_gadget_ep_set_halt()
1841 dev_dbg(ep->bdc->dev, "%s ep:%s req:%p\n", __func__, ep->name, req); in bdc_gadget_alloc_request()
1863 struct bdc *bdc; in bdc_gadget_ep_enable() local
1877 bdc = ep->bdc; in bdc_gadget_ep_enable()
1880 if (ep == bdc->bdc_ep_array[1]) in bdc_gadget_ep_enable()
1883 if (!bdc->gadget_driver in bdc_gadget_ep_enable()
1884 || bdc->gadget.speed == USB_SPEED_UNKNOWN) { in bdc_gadget_ep_enable()
1888 dev_dbg(bdc->dev, "%s Enabling %s\n", __func__, ep->name); in bdc_gadget_ep_enable()
1889 spin_lock_irqsave(&bdc->lock, flags); in bdc_gadget_ep_enable()
1893 spin_unlock_irqrestore(&bdc->lock, flags); in bdc_gadget_ep_enable()
1902 struct bdc *bdc; in bdc_gadget_ep_disable() local
1910 bdc = ep->bdc; in bdc_gadget_ep_disable()
1913 if (ep == bdc->bdc_ep_array[1]) { in bdc_gadget_ep_disable()
1914 dev_warn(bdc->dev, "%s called for ep0\n", __func__); in bdc_gadget_ep_disable()
1917 dev_dbg(bdc->dev, in bdc_gadget_ep_disable()
1922 dev_warn(bdc->dev, "%s is already disabled\n", ep->name); in bdc_gadget_ep_disable()
1925 spin_lock_irqsave(&bdc->lock, flags); in bdc_gadget_ep_disable()
1927 spin_unlock_irqrestore(&bdc->lock, flags); in bdc_gadget_ep_disable()
1943 static int init_ep(struct bdc *bdc, u32 epnum, u32 dir) in init_ep() argument
1947 dev_dbg(bdc->dev, "%s epnum=%d dir=%d\n", __func__, epnum, dir); in init_ep()
1952 ep->bdc = bdc; in init_ep()
1958 bdc->bdc_ep_array[ep->ep_num] = ep; in init_ep()
1962 bdc->gadget.ep0 = &ep->usb_ep; in init_ep()
1969 bdc->bdc_ep_array[ep->ep_num] = ep; in init_ep()
1975 list_add_tail(&ep->usb_ep.ep_list, &bdc->gadget.ep_list); in init_ep()
1981 dev_dbg(bdc->dev, "ep=%p ep->usb_ep.name=%s epnum=%d ep->epnum=%d\n", in init_ep()
1990 int bdc_init_ep(struct bdc *bdc) in bdc_init_ep() argument
1995 dev_dbg(bdc->dev, "%s()\n", __func__); in bdc_init_ep()
1996 INIT_LIST_HEAD(&bdc->gadget.ep_list); in bdc_init_ep()
1998 ret = init_ep(bdc, 1, 0); in bdc_init_ep()
2000 dev_err(bdc->dev, "init ep ep0 fail %d\n", ret); in bdc_init_ep()
2004 for (epnum = 2; epnum <= bdc->num_eps / 2; epnum++) { in bdc_init_ep()
2006 ret = init_ep(bdc, epnum, 0); in bdc_init_ep()
2008 dev_err(bdc->dev, in bdc_init_ep()
2015 ret = init_ep(bdc, epnum, 1); in bdc_init_ep()
2017 dev_err(bdc->dev, in bdc_init_ep()