diff options
author | Christian Gmeiner <christian.gmeiner@gmail.com> | 2007-09-17 23:06:23 +0000 |
---|---|---|
committer | Christian Gmeiner <christian.gmeiner@gmail.com> | 2007-09-17 23:06:23 +0000 |
commit | 2077cebca00f57061b6a2c0ba41ab24cc97f3596 (patch) | |
tree | 92c085016a806e5c4e9f23b28c8e378f7de8c4e0 /firmware/drivers/usb | |
parent | 689d5fd4462c8b2069278e9c1c7ee054aae0b946 (diff) | |
download | rockbox-2077cebca00f57061b6a2c0ba41ab24cc97f3596.tar.gz rockbox-2077cebca00f57061b6a2c0ba41ab24cc97f3596.zip |
* implement strstr
* clean up usb_arcotg_dcd_enable
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@14740 a1c6a512-1295-4272-9138-f99709370657
Diffstat (limited to 'firmware/drivers/usb')
-rw-r--r-- | firmware/drivers/usb/arcotg_dcd.c | 184 |
1 files changed, 90 insertions, 94 deletions
diff --git a/firmware/drivers/usb/arcotg_dcd.c b/firmware/drivers/usb/arcotg_dcd.c index b08f7eef58..124742cf13 100644 --- a/firmware/drivers/usb/arcotg_dcd.c +++ b/firmware/drivers/usb/arcotg_dcd.c | |||
@@ -523,29 +523,83 @@ int usb_arcotg_dcd_enable(struct usb_ep* ep, | |||
523 | max = desc->wMaxPacketSize; | 523 | max = desc->wMaxPacketSize; |
524 | retval = -EINVAL; | 524 | retval = -EINVAL; |
525 | 525 | ||
526 | /* check the max package size validate for this endpoint */ | 526 | /* check the max package size validate for this endpoint |
527 | /* Refer to USB2.0 spec table 9-13. */ | 527 | * Refer to USB2.0 spec table 9-13, */ |
528 | switch (desc->bmAttributes & 0x03) { | 528 | switch (desc->bmAttributes & 0x03) { |
529 | case USB_ENDPOINT_XFER_BULK: | 529 | case USB_ENDPOINT_XFER_BULK: |
530 | if (strstr(ep->name, "-iso") || strstr(ep->name, "-int")) { | ||
531 | goto en_done; | ||
532 | } | ||
533 | mult = 0; | ||
530 | zlt = 1; | 534 | zlt = 1; |
535 | |||
536 | switch (arcotg_dcd.speed) { | ||
537 | case USB_SPEED_HIGH: | ||
538 | if ((max == 128) || (max == 256) || (max == 512)) { | ||
539 | break; | ||
540 | } | ||
541 | default: | ||
542 | switch (max) { | ||
543 | case 4: | ||
544 | case 8: | ||
545 | case 16: | ||
546 | case 32: | ||
547 | case 64: | ||
548 | break; | ||
549 | default: | ||
550 | case USB_SPEED_LOW: | ||
551 | goto en_done; | ||
552 | } | ||
553 | } | ||
531 | break; | 554 | break; |
532 | 555 | ||
533 | case USB_ENDPOINT_XFER_INT: | 556 | case USB_ENDPOINT_XFER_INT: |
557 | if (strstr(ep->name, "-iso")) { /* bulk is ok */ | ||
558 | goto en_done; | ||
559 | } | ||
560 | mult = 0; | ||
534 | zlt = 1; | 561 | zlt = 1; |
535 | break; | ||
536 | 562 | ||
537 | case USB_ENDPOINT_XFER_ISOC: | 563 | switch (arcotg_dcd.speed) { |
564 | case USB_SPEED_HIGH: | ||
565 | if (max <= 1024) { | ||
566 | break; | ||
567 | } | ||
568 | case USB_SPEED_FULL: | ||
569 | if (max <= 64) { | ||
570 | break; | ||
571 | } | ||
572 | default: | ||
573 | if (max <= 8) { | ||
574 | break; | ||
575 | } | ||
576 | goto en_done; | ||
577 | } | ||
538 | break; | 578 | break; |
539 | 579 | ||
540 | case USB_ENDPOINT_XFER_CONTROL: | 580 | case USB_ENDPOINT_XFER_ISOC: |
541 | zlt = 1; | 581 | if (strstr(ep->name, "-bulk") || strstr(ep->name, "-int")) { |
582 | goto en_done; | ||
583 | } | ||
584 | mult = (unsigned char) (1 +((desc->wMaxPacketSize >> 11) & 0x03)); | ||
585 | zlt = 0; | ||
586 | |||
587 | switch (arcotg_dcd.speed) { | ||
588 | case USB_SPEED_HIGH: | ||
589 | if (max <= 1024) { | ||
590 | break; | ||
591 | } | ||
592 | case USB_SPEED_FULL: | ||
593 | if (max <= 1023) { | ||
594 | break; | ||
595 | } | ||
596 | default: | ||
597 | goto en_done; | ||
598 | } | ||
542 | break; | 599 | break; |
543 | } | ||
544 | 600 | ||
545 | #if 0 | 601 | case USB_ENDPOINT_XFER_CONTROL: |
546 | switch (ep->desc->bmAttributes & 0x03) { | 602 | if (strstr(ep->name, "-iso") || strstr(ep->name, "-int")) { |
547 | case USB_ENDPOINT_XFER_BULK: | ||
548 | if (strstr(ep->ep.name, "-iso") || strstr(ep->ep.name, "-int")) { | ||
549 | goto en_done; | 603 | goto en_done; |
550 | } | 604 | } |
551 | mult = 0; | 605 | mult = 0; |
@@ -553,11 +607,10 @@ int usb_arcotg_dcd_enable(struct usb_ep* ep, | |||
553 | 607 | ||
554 | switch (arcotg_dcd.speed) { | 608 | switch (arcotg_dcd.speed) { |
555 | case USB_SPEED_HIGH: | 609 | case USB_SPEED_HIGH: |
556 | if ((max == 128) || (max == 256) || (max == 512)) { | 610 | case USB_SPEED_FULL: |
557 | break; | ||
558 | } | ||
559 | default: | ||
560 | switch (max) { | 611 | switch (max) { |
612 | case 1: | ||
613 | case 2: | ||
561 | case 4: | 614 | case 4: |
562 | case 8: | 615 | case 8: |
563 | case 16: | 616 | case 16: |
@@ -565,85 +618,27 @@ int usb_arcotg_dcd_enable(struct usb_ep* ep, | |||
565 | case 64: | 618 | case 64: |
566 | break; | 619 | break; |
567 | default: | 620 | default: |
568 | + case USB_SPEED_LOW: | 621 | goto en_done; |
569 | + goto en_done; | 622 | } |
570 | + } | 623 | case USB_SPEED_LOW: |
571 | + } | 624 | switch (max) { |
572 | + break; | 625 | case 1: |
573 | + case USB_ENDPOINT_XFER_INT: | 626 | case 2: |
574 | + if (strstr(ep->ep.name, "-iso")) /* bulk is ok */ | 627 | case 4: |
575 | + goto en_done; | 628 | case 8: |
576 | + mult = 0; | 629 | break; |
577 | + zlt = 1; | 630 | default: |
578 | + switch (udc->gadget.speed) { | 631 | goto en_done; |
579 | + case USB_SPEED_HIGH: | 632 | } |
580 | + if (max <= 1024) | 633 | default: |
581 | + break; | 634 | goto en_done; |
582 | + case USB_SPEED_FULL: | 635 | } |
583 | + if (max <= 64) | 636 | break; |
584 | + break; | 637 | |
585 | + default: | 638 | default: |
586 | + if (max <= 8) | 639 | goto en_done; |
587 | + break; | 640 | } |
588 | + goto en_done; | 641 | |
589 | + } | ||
590 | + break; | ||
591 | + case USB_ENDPOINT_XFER_ISOC: | ||
592 | + if (strstr(ep->ep.name, "-bulk") || strstr(ep->ep.name, "-int")) | ||
593 | + goto en_done; | ||
594 | + mult = (unsigned char) | ||
595 | + (1 + ((le16_to_cpu(desc->wMaxPacketSize) >> 11) & 0x03)); | ||
596 | + zlt = 0; | ||
597 | + switch (udc->gadget.speed) { | ||
598 | + case USB_SPEED_HIGH: | ||
599 | + if (max <= 1024) | ||
600 | + break; | ||
601 | + case USB_SPEED_FULL: | ||
602 | + if (max <= 1023) | ||
603 | + break; | ||
604 | + default: | ||
605 | + goto en_done; | ||
606 | + } | ||
607 | + break; | ||
608 | + case USB_ENDPOINT_XFER_CONTROL: | ||
609 | + if (strstr(ep->ep.name, "-iso") || strstr(ep->ep.name, "-int")) | ||
610 | + goto en_done; | ||
611 | + mult = 0; | ||
612 | + zlt = 1; | ||
613 | + switch (udc->gadget.speed) { | ||
614 | + case USB_SPEED_HIGH: | ||
615 | + case USB_SPEED_FULL: | ||
616 | + switch (max) { | ||
617 | + case 1: | ||
618 | + case 2: | ||
619 | + case 4: | ||
620 | + case 8: | ||
621 | + case 16: | ||
622 | + case 32: | ||
623 | + case 64: | ||
624 | + break; | ||
625 | + default: | ||
626 | + goto en_done; | ||
627 | + } | ||
628 | + case USB_SPEED_LOW: | ||
629 | + switch (max) { | ||
630 | + case 1: | ||
631 | + case 2: | ||
632 | + case 4: | ||
633 | + case 8: | ||
634 | + break; | ||
635 | + default: | ||
636 | + goto en_done; | ||
637 | + } | ||
638 | + default: | ||
639 | + goto en_done; | ||
640 | + } | ||
641 | + break; | ||
642 | + | ||
643 | + default: | ||
644 | + goto en_done; | ||
645 | + } | ||
646 | #endif | ||
647 | 642 | ||
648 | /* here initialize variable of ep */ | 643 | /* here initialize variable of ep */ |
649 | ep->maxpacket = max; | 644 | ep->maxpacket = max; |
@@ -690,6 +685,7 @@ int usb_arcotg_dcd_enable(struct usb_ep* ep, | |||
690 | (desc->bEndpointAddress & USB_DIR_IN) ? "in" : "out", val); | 685 | (desc->bEndpointAddress & USB_DIR_IN) ? "in" : "out", val); |
691 | logf(" maxpacket %d", max); | 686 | logf(" maxpacket %d", max); |
692 | 687 | ||
688 | en_done: | ||
693 | return retval; | 689 | return retval; |
694 | } | 690 | } |
695 | 691 | ||