Lines Matching defs:hsep
189 * @hsep: Endpoint to which the request belongs.
193 static void s3c_hsudc_complete_request(struct s3c_hsudc_ep *hsep,
196 unsigned int stopped = hsep->stopped;
197 struct s3c_hsudc *hsudc = hsep->dev;
202 if (!ep_index(hsep)) {
204 hsep->bEndpointAddress &= ~USB_DIR_IN;
207 hsep->stopped = 1;
209 usb_gadget_giveback_request(&hsep->ep, &hsreq->req);
211 hsep->stopped = stopped;
216 * @hsep: Endpoint for which queued requests have to be terminated.
219 static void s3c_hsudc_nuke_ep(struct s3c_hsudc_ep *hsep, int status)
223 while (!list_empty(&hsep->queue)) {
224 hsreq = list_entry(hsep->queue.next,
226 s3c_hsudc_complete_request(hsep, hsreq, status);
239 struct s3c_hsudc_ep *hsep;
245 hsep = &hsudc->ep[epnum];
246 hsep->stopped = 1;
247 s3c_hsudc_nuke_ep(hsep, -ESHUTDOWN);
273 * @hsep: Endpoint to which the data is to be written.
279 static int s3c_hsudc_write_fifo(struct s3c_hsudc_ep *hsep,
283 u32 max = ep_maxpacket(hsep);
286 void __iomem *fifo = hsep->fifo;
295 writel(length, hsep->dev->regs + S3C_BWCR);
309 s3c_hsudc_complete_request(hsep, hsreq, 0);
318 * @hsep: Endpoint from which the data is to be read.
325 static int s3c_hsudc_read_fifo(struct s3c_hsudc_ep *hsep,
328 struct s3c_hsudc *hsudc = hsep->dev;
332 void __iomem *fifo = hsep->fifo;
335 offset = (ep_index(hsep)) ? S3C_ESR : S3C_EP0SR;
348 is_short = (rlen < hsep->ep.maxpacket);
363 s3c_hsudc_complete_request(hsep, hsreq, 0);
380 struct s3c_hsudc_ep *hsep = &hsudc->ep[ep_idx];
392 if (list_empty(&hsep->queue))
395 hsreq = list_entry(hsep->queue.next,
397 if ((s3c_hsudc_write_fifo(hsep, hsreq) == 0) &&
399 s3c_hsudc_write_fifo(hsep, hsreq);
413 struct s3c_hsudc_ep *hsep = &hsudc->ep[ep_idx];
429 if (list_empty(&hsep->queue))
432 hsreq = list_entry(hsep->queue.next,
434 if (((s3c_hsudc_read_fifo(hsep, hsreq)) == 0) &&
436 s3c_hsudc_read_fifo(hsep, hsreq);
450 struct s3c_hsudc_ep *hsep = our_ep(_ep);
451 struct s3c_hsudc *hsudc = hsep->dev;
457 if (value && ep_is_in(hsep) && !list_empty(&hsep->queue))
461 set_index(hsudc, ep_index(hsep));
462 offset = (ep_index(hsep)) ? S3C_ECR : S3C_EP0CR;
467 if (ep_index(hsep))
469 hsep->stopped = 1;
472 hsep->stopped = hsep->wedge = 0;
476 if (ep_is_in(hsep) && !list_empty(&hsep->queue) && !value) {
477 hsreq = list_entry(hsep->queue.next,
480 s3c_hsudc_write_fifo(hsep, hsreq);
494 struct s3c_hsudc_ep *hsep = our_ep(_ep);
496 if (!hsep)
499 hsep->wedge = 1;
512 struct s3c_hsudc_ep *hsep;
517 hsep = &hsudc->ep[ep_num];
520 if (set || !hsep->wedge)
521 s3c_hsudc_set_halt(&hsep->ep, set);
541 struct s3c_hsudc_ep *hsep;
556 hsep = &hsudc->ep[epnum];
557 reply = cpu_to_le16(hsep->stopped ? 1 : 0);
578 struct s3c_hsudc_ep *hsep = &hsudc->ep[0];
582 s3c_hsudc_nuke_ep(hsep, -EPROTO);
586 hsep->bEndpointAddress |= USB_DIR_IN;
589 hsep->bEndpointAddress &= ~USB_DIR_IN;
621 hsep->bEndpointAddress &= ~USB_DIR_IN;
628 s3c_hsudc_set_halt(&hsep->ep, 1);
630 hsep->bEndpointAddress &= ~USB_DIR_IN;
644 struct s3c_hsudc_ep *hsep = &hsudc->ep[0];
655 hsep->stopped = 0;
657 s3c_hsudc_nuke_ep(hsep, -ECONNABORTED);
659 hsep->bEndpointAddress &= ~USB_DIR_IN;
665 if (ep_is_in(hsep)) {
666 if (list_empty(&hsep->queue))
669 hsreq = list_entry(hsep->queue.next,
671 s3c_hsudc_write_fifo(hsep, hsreq);
679 if (!ep_is_in(hsep)) {
680 if (list_empty(&hsep->queue))
682 hsreq = list_entry(hsep->queue.next,
684 s3c_hsudc_read_fifo(hsep, hsreq);
702 struct s3c_hsudc_ep *hsep;
707 hsep = our_ep(_ep);
710 || hsep->bEndpointAddress != desc->bEndpointAddress
711 || ep_maxpacket(hsep) < usb_endpoint_maxp(desc))
715 && usb_endpoint_maxp(desc) != ep_maxpacket(hsep))
719 hsudc = hsep->dev;
725 set_index(hsudc, hsep->bEndpointAddress);
729 hsep->stopped = hsep->wedge = 0;
730 hsep->ep.desc = desc;
731 hsep->ep.maxpacket = usb_endpoint_maxp(desc);
734 __set_bit(ep_index(hsep), hsudc->regs + S3C_EIER);
749 struct s3c_hsudc_ep *hsep = our_ep(_ep);
750 struct s3c_hsudc *hsudc = hsep->dev;
753 if (!_ep || !hsep->ep.desc)
758 set_index(hsudc, hsep->bEndpointAddress);
759 __clear_bit(ep_index(hsep), hsudc->regs + S3C_EIER);
761 s3c_hsudc_nuke_ep(hsep, -ESHUTDOWN);
763 hsep->ep.desc = NULL;
764 hsep->stopped = 1;
818 struct s3c_hsudc_ep *hsep;
829 hsep = our_ep(_ep);
830 hsudc = hsep->dev;
835 set_index(hsudc, hsep->bEndpointAddress);
840 if (!ep_index(hsep) && _req->length == 0) {
842 s3c_hsudc_complete_request(hsep, hsreq, 0);
847 if (list_empty(&hsep->queue) && !hsep->stopped) {
848 offset = (ep_index(hsep)) ? S3C_ESR : S3C_EP0SR;
849 if (ep_is_in(hsep)) {
852 (s3c_hsudc_write_fifo(hsep, hsreq) == 1))
857 && (s3c_hsudc_read_fifo(hsep, hsreq) == 1))
863 list_add_tail(&hsreq->queue, &hsep->queue);
878 struct s3c_hsudc_ep *hsep = our_ep(_ep);
879 struct s3c_hsudc *hsudc = hsep->dev;
883 hsep = our_ep(_ep);
884 if (!_ep || hsep->ep.name == ep0name)
889 list_for_each_entry(hsreq, &hsep->queue, queue) {
898 set_index(hsudc, hsep->bEndpointAddress);
899 s3c_hsudc_complete_request(hsep, hsreq, -ECONNRESET);
919 * @hsep - Endpoint to be initialized.
925 struct s3c_hsudc_ep *hsep, int epnum)
933 hsep->bEndpointAddress = USB_DIR_IN;
936 hsep->bEndpointAddress |= epnum;
938 snprintf(hsep->name, sizeof(hsep->name), "ep%d%s", epnum, dir);
940 snprintf(hsep->name, sizeof(hsep->name), "%s", ep0name);
942 INIT_LIST_HEAD(&hsep->queue);
943 INIT_LIST_HEAD(&hsep->ep.ep_list);
945 list_add_tail(&hsep->ep.ep_list, &hsudc->gadget.ep_list);
947 hsep->dev = hsudc;
948 hsep->ep.name = hsep->name;
949 usb_ep_set_maxpacket_limit(&hsep->ep, epnum ? 512 : 64);
950 hsep->ep.ops = &s3c_hsudc_ep_ops;
951 hsep->fifo = hsudc->regs + S3C_BR(epnum);
952 hsep->ep.desc = NULL;
953 hsep->stopped = 0;
954 hsep->wedge = 0;
957 hsep->ep.caps.type_control = true;
958 hsep->ep.caps.dir_in = true;
959 hsep->ep.caps.dir_out = true;
961 hsep->ep.caps.type_iso = true;
962 hsep->ep.caps.type_bulk = true;
963 hsep->ep.caps.type_int = true;
967 hsep->ep.caps.dir_in = true;
969 hsep->ep.caps.dir_out = true;
972 writel(hsep->ep.maxpacket, hsudc->regs + S3C_MPR);
1020 struct s3c_hsudc_ep *hsep;
1065 hsep = &hsudc->ep[ep_idx];
1066 hsep->stopped = 1;
1067 s3c_hsudc_nuke_ep(hsep, -ECONNRESET);
1084 hsep = &hsudc->ep[ep_idx];
1087 if (ep_is_in(hsep))