branch | RCL_3 |
changeset 43 | c1f20ce4abcf |
parent 21 | e7d2d738d3c2 |
child 44 | 3e88ff8f41d5 |
42:a179b74831c9 | 43:c1f20ce4abcf |
---|---|
1 // Copyright (c) 2000-2009 Nokia Corporation and/or its subsidiary(-ies). |
1 // Copyright (c) 2000-2010 Nokia Corporation and/or its subsidiary(-ies). |
2 // All rights reserved. |
2 // All rights reserved. |
3 // This component and the accompanying materials are made available |
3 // This component and the accompanying materials are made available |
4 // under the terms of the License "Eclipse Public License v1.0" |
4 // under the terms of the License "Eclipse Public License v1.0" |
5 // which accompanies this distribution, and is available |
5 // which accompanies this distribution, and is available |
6 // at the URL "http://www.eclipse.org/legal/epl-v10.html". |
6 // at the URL "http://www.eclipse.org/legal/epl-v10.html". |
21 @file d_usbc.cpp |
21 @file d_usbc.cpp |
22 @internalTechnology |
22 @internalTechnology |
23 */ |
23 */ |
24 |
24 |
25 #include <drivers/usbc.h> |
25 #include <drivers/usbc.h> |
26 #include "OstTraceDefinitions.h" |
|
27 #ifdef OST_TRACE_COMPILER_IN_USE |
|
28 #include "d_usbcTraces.h" |
|
29 #endif |
|
30 |
|
26 |
31 |
27 |
32 |
28 _LIT(KUsbLddName, "Usbc"); |
33 _LIT(KUsbLddName, "Usbc"); |
29 |
34 |
30 static const TInt KUsbRequestCallbackPriority = 2; |
35 static const TInt KUsbRequestCallbackPriority = 2; |
93 TInt DUsbcLogDevice::Install() |
98 TInt DUsbcLogDevice::Install() |
94 { |
99 { |
95 // Only proceed if we have the Controller underneath us |
100 // Only proceed if we have the Controller underneath us |
96 if (!DUsbClientController::UsbcControllerPointer()) |
101 if (!DUsbClientController::UsbcControllerPointer()) |
97 { |
102 { |
98 __KTRACE_OPT(KPANIC, Kern::Printf("LDD Install: USB Controller Not Present")); |
103 OstTraceDef0( OST_TRACE_CATEGORY_RND, TRACE_FATAL, DUSBCLOGDEVICE_INSTALL, |
104 "LDD Install: USB Controller Not Present" ); |
|
105 |
|
99 return KErrGeneral; |
106 return KErrGeneral; |
100 } |
107 } |
101 return SetName(&KUsbLddName); |
108 return SetName(&KUsbLddName); |
102 } |
109 } |
103 |
110 |
132 iOwnsDeviceControl(EFalse), |
139 iOwnsDeviceControl(EFalse), |
133 iAlternateSetting(0), |
140 iAlternateSetting(0), |
134 iDeviceStatusNeeded(EFalse), |
141 iDeviceStatusNeeded(EFalse), |
135 iChannelClosing(EFalse) |
142 iChannelClosing(EFalse) |
136 { |
143 { |
137 __KTRACE_OPT(KUSB, Kern::Printf("*** DLddUsbcChannel::DLddUsbcChannel CTOR")); |
144 OstTraceDef0( OST_TRACE_CATEGORY_RND, TRACE_FLOW, DLDDUSBCCHANNEL_DLDDUSBCCHANNEL_CONS, |
145 "*** DLddUsbcChannel::DLddUsbcChannel CTOR" ); |
|
146 |
|
138 iClient = &Kern::CurrentThread(); |
147 iClient = &Kern::CurrentThread(); |
139 iClient->Open(); |
148 iClient->Open(); |
140 for (TInt i = 1; i <= KMaxEndpointsPerClient; i++) |
149 for (TInt i = 1; i <= KMaxEndpointsPerClient; i++) |
141 { |
150 { |
142 iEndpoint[i] = NULL; |
151 iEndpoint[i] = NULL; |
148 } |
157 } |
149 |
158 |
150 |
159 |
151 DLddUsbcChannel::~DLddUsbcChannel() |
160 DLddUsbcChannel::~DLddUsbcChannel() |
152 { |
161 { |
153 __KTRACE_OPT(KUSB, Kern::Printf("DLddUsbcChannel::~DLddUsbcChannel()")); |
162 OstTraceDef0( OST_TRACE_CATEGORY_RND, TRACE_FLOW, DLDDUSBCCHANNEL_DLDDUSBCCHANNEL_DES, |
163 "DLddUsbcChannel::~DLddUsbcChannel()" ); |
|
164 |
|
154 if (iController) |
165 if (iController) |
155 { |
166 { |
156 iController->DeRegisterClient(this); |
167 iController->DeRegisterClient(this); |
157 iStatusCallbackInfo.Cancel(); |
168 iStatusCallbackInfo.Cancel(); |
158 iEndpointStatusCallbackInfo.Cancel(); |
169 iEndpointStatusCallbackInfo.Cancel(); |
194 // |
205 // |
195 // Create channel |
206 // Create channel |
196 // |
207 // |
197 TInt DLddUsbcChannel::DoCreate(TInt /*aUnit*/, const TDesC8* /*aInfo*/, const TVersion& aVer) |
208 TInt DLddUsbcChannel::DoCreate(TInt /*aUnit*/, const TDesC8* /*aInfo*/, const TVersion& aVer) |
198 { |
209 { |
199 __KTRACE_OPT(KUSB, Kern::Printf("LDD DoCreateL 1 Ver = %02d %02d %02d", |
210 OstTraceDefExt3( OST_TRACE_CATEGORY_RND, TRACE_NORMAL, DLDDUSBCCHANNEL_DOCREATE, |
200 aVer.iMajor, aVer.iMinor, aVer.iBuild)); |
211 "LDD DoCreateL 1 Ver = %02d %02d %02d", aVer.iMajor, aVer.iMinor, aVer.iBuild ); |
212 |
|
201 if (!Kern::CurrentThreadHasCapability(ECapabilityCommDD, |
213 if (!Kern::CurrentThreadHasCapability(ECapabilityCommDD, |
202 __PLATSEC_DIAGNOSTIC_STRING("Checked by USBC.LDD (USB Driver)"))) |
214 __PLATSEC_DIAGNOSTIC_STRING("Checked by USBC.LDD (USB Driver)"))) |
203 { |
215 { |
204 return KErrPermissionDenied; |
216 return KErrPermissionDenied; |
205 } |
217 } |
425 // |
437 // |
426 // Overriding DObject virtual |
438 // Overriding DObject virtual |
427 // |
439 // |
428 TInt DLddUsbcChannel::RequestUserHandle(DThread* aThread, TOwnerType /*aType*/) |
440 TInt DLddUsbcChannel::RequestUserHandle(DThread* aThread, TOwnerType /*aType*/) |
429 { |
441 { |
430 __KTRACE_OPT(KUSB, Kern::Printf("DLddUsbcChannel::RequestUserHandle")); |
442 OstTraceDef0( OST_TRACE_CATEGORY_RND, TRACE_NORMAL, DLDDUSBCCHANNEL_REQUESTUSERHANDLE, |
443 "DLddUsbcChannel::RequestUserHandle" ); |
|
431 // The USB client LDD is not designed for a channel to be shared between |
444 // The USB client LDD is not designed for a channel to be shared between |
432 // threads. It saves a pointer to the current thread when it is opened, and |
445 // threads. It saves a pointer to the current thread when it is opened, and |
433 // uses this to complete any asynchronous requests. |
446 // uses this to complete any asynchronous requests. |
434 // It is therefore not acceptable for the handle to be duplicated and used |
447 // It is therefore not acceptable for the handle to be duplicated and used |
435 // by another thread: |
448 // by another thread: |
448 // Asynchronous requests - overriding pure virtual |
461 // Asynchronous requests - overriding pure virtual |
449 // |
462 // |
450 void DLddUsbcChannel::DoRequest(TInt aReqNo, TRequestStatus* aStatus, TAny* a1, TAny* a2) |
463 void DLddUsbcChannel::DoRequest(TInt aReqNo, TRequestStatus* aStatus, TAny* a1, TAny* a2) |
451 { |
464 { |
452 // Check on request status |
465 // Check on request status |
453 __KTRACE_OPT(KUSB, Kern::Printf("DoRequest 0x%08x", aReqNo)); |
466 OstTraceDef1( OST_TRACE_CATEGORY_RND, TRACE_NORMAL, DLDDUSBCCHANNEL_DOREQUEST, |
467 "DoRequest 0x%08x", aReqNo ); |
|
454 TInt r = KErrNone; |
468 TInt r = KErrNone; |
455 if (iRequestStatus[aReqNo] != NULL) |
469 if (iRequestStatus[aReqNo] != NULL) |
456 { |
470 { |
457 DestroyAllInterfaces(); |
471 DestroyAllInterfaces(); |
458 PanicClientThread(ERequestAlreadyPending); |
472 PanicClientThread(ERequestAlreadyPending); |
517 |
531 |
518 switch (aReqNo) |
532 switch (aReqNo) |
519 { |
533 { |
520 case RDevUsbcClient::ERequestAlternateDeviceStatusNotify: |
534 case RDevUsbcClient::ERequestAlternateDeviceStatusNotify: |
521 { |
535 { |
522 __KTRACE_OPT(KUSB, Kern::Printf("EControlReqDeviceStatusNotify")); |
536 OstTraceDef0( OST_TRACE_CATEGORY_RND, TRACE_NORMAL, DLDDUSBCCHANNEL_DOOTHERASYNCREQ, |
537 "EControlReqDeviceStatusNotify" ); |
|
523 if (a1 != NULL) |
538 if (a1 != NULL) |
524 { |
539 { |
525 iDeviceStatusNeeded = ETrue; |
540 iDeviceStatusNeeded = ETrue; |
526 iStatusChangePtr = a1; |
541 iStatusChangePtr = a1; |
527 aNeedsCompletion = AlternateDeviceStateTestComplete(); |
542 aNeedsCompletion = AlternateDeviceStateTestComplete(); |
530 r = KErrArgument; |
545 r = KErrArgument; |
531 break; |
546 break; |
532 } |
547 } |
533 case RDevUsbcClient::ERequestReEnumerate: |
548 case RDevUsbcClient::ERequestReEnumerate: |
534 { |
549 { |
535 __KTRACE_OPT(KUSB, Kern::Printf("ERequestReEnumerate")); |
550 OstTraceDef0( OST_TRACE_CATEGORY_RND, TRACE_NORMAL, DLDDUSBCCHANNEL_DOOTHERASYNCREQ_DUP1, |
551 "ERequestReEnumerate" ); |
|
536 // If successful, this will complete via the status notification. |
552 // If successful, this will complete via the status notification. |
537 r = iController->ReEnumerate(); |
553 r = iController->ReEnumerate(); |
538 break; |
554 break; |
539 } |
555 } |
540 case RDevUsbcClient::ERequestEndpointStatusNotify: |
556 case RDevUsbcClient::ERequestEndpointStatusNotify: |
541 { |
557 { |
542 __KTRACE_OPT(KUSB, Kern::Printf("ERequestEndpointStatusNotify")); |
558 OstTraceDef0( OST_TRACE_CATEGORY_RND, TRACE_NORMAL, DLDDUSBCCHANNEL_DOOTHERASYNCREQ_DUP2, |
559 "ERequestEndpointStatusNotify" ); |
|
543 if (a1 != NULL) |
560 if (a1 != NULL) |
544 { |
561 { |
545 iEndpointStatusChangePtr = a1; |
562 iEndpointStatusChangePtr = a1; |
546 } |
563 } |
547 else |
564 else |
548 r = KErrArgument; |
565 r = KErrArgument; |
549 break; |
566 break; |
550 } |
567 } |
551 case RDevUsbcClient::ERequestOtgFeaturesNotify: |
568 case RDevUsbcClient::ERequestOtgFeaturesNotify: |
552 { |
569 { |
553 __KTRACE_OPT(KUSB, Kern::Printf("ERequestOtgFeaturesNotify")); |
570 OstTraceDef0( OST_TRACE_CATEGORY_RND, TRACE_NORMAL, DLDDUSBCCHANNEL_DOOTHERASYNCREQ_DUP3, |
571 "ERequestOtgFeaturesNotify" ); |
|
554 if (a1 != NULL) |
572 if (a1 != NULL) |
555 { |
573 { |
556 iOtgFeatureChangePtr = a1; |
574 iOtgFeatureChangePtr = a1; |
557 } |
575 } |
558 else |
576 else |
587 if (aEndpointNum == 0) |
605 if (aEndpointNum == 0) |
588 { |
606 { |
589 // ep0 requests |
607 // ep0 requests |
590 if (!(iValidInterface || iOwnsDeviceControl)) |
608 if (!(iValidInterface || iOwnsDeviceControl)) |
591 { |
609 { |
592 __KTRACE_OPT(KUSB, Kern::Printf("DoRequest rejected: not configured (Ep0)")); |
610 OstTraceDef0( OST_TRACE_CATEGORY_RND, TRACE_NORMAL, DLDDUSBCCHANNEL_DOTRANSFERASYNCREQ, |
611 "DoRequest rejected: not configured (Ep0)" ); |
|
593 r = KErrUsbInterfaceNotReady; |
612 r = KErrUsbInterfaceNotReady; |
594 goto exit; |
613 goto exit; |
595 } |
614 } |
596 } |
615 } |
597 else |
616 else |
599 // other eps |
618 // other eps |
600 if (!(iValidInterface && (iDeviceState == EUsbcDeviceStateConfigured || |
619 if (!(iValidInterface && (iDeviceState == EUsbcDeviceStateConfigured || |
601 iDeviceState == EUsbcDeviceStateSuspended)) |
620 iDeviceState == EUsbcDeviceStateSuspended)) |
602 ) |
621 ) |
603 { |
622 { |
604 __KTRACE_OPT(KUSB, Kern::Printf("DoRequest rejected not configured (Ep %d)", aEndpointNum)); |
623 OstTraceDef1( OST_TRACE_CATEGORY_RND, TRACE_NORMAL, DLDDUSBCCHANNEL_DOTRANSFERASYNCREQ_DUP1, |
624 "DoRequest rejected not configured (Ep %d)", aEndpointNum ); |
|
605 r = KErrUsbInterfaceNotReady; |
625 r = KErrUsbInterfaceNotReady; |
606 goto exit; |
626 goto exit; |
607 } |
627 } |
608 } |
628 } |
609 |
629 |
610 if (!ValidEndpoint(aEndpointNum)) |
630 if (!ValidEndpoint(aEndpointNum)) |
611 { |
631 { |
612 __KTRACE_OPT(KPANIC, Kern::Printf(" Error: DoRequest Read: in error complete")); |
632 OstTraceDef0( OST_TRACE_CATEGORY_RND, TRACE_FATAL, DLDDUSBCCHANNEL_DOTRANSFERASYNCREQ_DUP2, |
633 " Error: DoRequest Read: in error complete" ); |
|
613 r = KErrUsbEpNotInInterface; |
634 r = KErrUsbEpNotInInterface; |
614 goto exit; |
635 goto exit; |
615 } |
636 } |
616 |
637 |
617 if (a1 == NULL) |
638 if (a1 == NULL) |
627 goto exit; |
648 goto exit; |
628 } |
649 } |
629 pEndpoint = iEndpoint[aEndpointNum]; |
650 pEndpoint = iEndpoint[aEndpointNum]; |
630 if (!pEndpoint) |
651 if (!pEndpoint) |
631 { |
652 { |
632 __KTRACE_OPT(KPANIC, Kern::Printf(" Error: DoRequest Read: in error complete")); |
653 OstTraceDef0( OST_TRACE_CATEGORY_RND, TRACE_FATAL, DLDDUSBCCHANNEL_DOTRANSFERASYNCREQ_DUP3, |
654 " Error: DoRequest Read: in error complete" ); |
|
633 r = KErrUsbEpNotInInterface; |
655 r = KErrUsbEpNotInInterface; |
634 goto exit; |
656 goto exit; |
635 } |
657 } |
636 |
658 |
637 pEndpointInfo = pEndpoint->EndpointInfo(); |
659 pEndpointInfo = pEndpoint->EndpointInfo(); |
638 __KTRACE_OPT(KUSB, Kern::Printf("DoRequest %d", aEndpointNum)); |
660 OstTraceDef1( OST_TRACE_CATEGORY_RND, TRACE_NORMAL, DLDDUSBCCHANNEL_DOTRANSFERASYNCREQ_DUP4, |
661 "DoRequest %d", aEndpointNum ); |
|
639 |
662 |
640 switch (pTfr->iTransferType) |
663 switch (pTfr->iTransferType) |
641 { |
664 { |
642 |
665 |
643 case ETransferTypeReadData: |
666 case ETransferTypeReadData: |
644 case ETransferTypeReadPacket: |
667 case ETransferTypeReadPacket: |
645 case ETransferTypeReadUntilShort: |
668 case ETransferTypeReadUntilShort: |
646 case ETransferTypeReadOneOrMore: |
669 case ETransferTypeReadOneOrMore: |
647 { |
670 { |
648 __KTRACE_OPT(KUSB, Kern::Printf("DoRequest Read")); |
671 OstTraceDef0( OST_TRACE_CATEGORY_RND, TRACE_NORMAL, DLDDUSBCCHANNEL_DOTRANSFERASYNCREQ_DUP5, |
672 "DoRequest Read" ); |
|
649 if (pEndpoint->iDmaBuffers->RxIsActive()) |
673 if (pEndpoint->iDmaBuffers->RxIsActive()) |
650 { |
674 { |
651 __KTRACE_OPT(KUSB, Kern::Printf("**** ReadReq ep%d RxActive", aEndpointNum)); |
675 OstTraceDef1( OST_TRACE_CATEGORY_RND, TRACE_NORMAL, DLDDUSBCCHANNEL_DOTRANSFERASYNCREQ_DUP6, |
676 "**** ReadReq ep%d RxActive", aEndpointNum ); |
|
652 } |
677 } |
653 else |
678 else |
654 { |
679 { |
655 __KTRACE_OPT(KUSB, Kern::Printf("**** ReadReq ep%d RxInActive", aEndpointNum)); |
680 OstTraceDef1( OST_TRACE_CATEGORY_RND, TRACE_NORMAL, DLDDUSBCCHANNEL_DOTRANSFERASYNCREQ_DUP7, |
681 "**** ReadReq ep%d RxInActive", aEndpointNum ); |
|
656 } |
682 } |
657 |
683 |
658 if (pEndpointInfo->iDir != KUsbEpDirOut && |
684 if (pEndpointInfo->iDir != KUsbEpDirOut && |
659 pEndpointInfo->iDir != KUsbEpDirBidirect) |
685 pEndpointInfo->iDir != KUsbEpDirBidirect) |
660 { |
686 { |
661 // Trying to do the wrong thing |
687 // Trying to do the wrong thing |
662 __KTRACE_OPT(KPANIC, Kern::Printf(" Error: DoRequest Read: in error complete")); |
688 OstTraceDef0( OST_TRACE_CATEGORY_RND, TRACE_FATAL, DLDDUSBCCHANNEL_DOTRANSFERASYNCREQ_DUP8, |
689 " Error: DoRequest Read: in error complete" ); |
|
663 r = KErrUsbEpBadDirection; |
690 r = KErrUsbEpBadDirection; |
664 break; |
691 break; |
665 } |
692 } |
666 // Set the length of data to zero now to catch all cases |
693 // Set the length of data to zero now to catch all cases |
667 TPtrC8 pZeroDesc(NULL, 0); |
694 TPtrC8 pZeroDesc(NULL, 0); |
675 } |
702 } |
676 else |
703 else |
677 { |
704 { |
678 if (pTfr->iTransferType == ETransferTypeReadPacket) |
705 if (pTfr->iTransferType == ETransferTypeReadPacket) |
679 { |
706 { |
680 __KTRACE_OPT(KUSB, Kern::Printf("DoRequest Read packet: data available complete")); |
707 OstTraceDef0( OST_TRACE_CATEGORY_RND, TRACE_NORMAL, DLDDUSBCCHANNEL_DOTRANSFERASYNCREQ_DUP9, |
708 "DoRequest Read packet: data available complete" ); |
|
681 r = pEndpoint->CopyToClient(iClient,iClientAsynchNotify[aEndpointNum]->iClientBuffer); |
709 r = pEndpoint->CopyToClient(iClient,iClientAsynchNotify[aEndpointNum]->iClientBuffer); |
682 aNeedsCompletion = ETrue; |
710 aNeedsCompletion = ETrue; |
683 break; |
711 break; |
684 } |
712 } |
685 else if (pTfr->iTransferType == ETransferTypeReadData) |
713 else if (pTfr->iTransferType == ETransferTypeReadData) |
686 { |
714 { |
687 if (pTfr->iTransferSize <= pEndpoint->RxBytesAvailable()) |
715 if (pTfr->iTransferSize <= pEndpoint->RxBytesAvailable()) |
688 { |
716 { |
689 __KTRACE_OPT(KUSB, Kern::Printf("DoRequest Read data: data available complete")); |
717 OstTraceDef0( OST_TRACE_CATEGORY_RND, TRACE_NORMAL, DLDDUSBCCHANNEL_DOTRANSFERASYNCREQ_DUP10, |
718 "DoRequest Read data: data available complete"); |
|
690 r = pEndpoint->CopyToClient(iClient,iClientAsynchNotify[aEndpointNum]->iClientBuffer); |
719 r = pEndpoint->CopyToClient(iClient,iClientAsynchNotify[aEndpointNum]->iClientBuffer); |
691 aNeedsCompletion = ETrue; |
720 aNeedsCompletion = ETrue; |
692 break; |
721 break; |
693 } |
722 } |
694 else |
723 else |
698 } |
727 } |
699 else if (pTfr->iTransferType == ETransferTypeReadOneOrMore) |
728 else if (pTfr->iTransferType == ETransferTypeReadOneOrMore) |
700 { |
729 { |
701 if (pEndpoint->RxBytesAvailable() > 0) |
730 if (pEndpoint->RxBytesAvailable() > 0) |
702 { |
731 { |
703 __KTRACE_OPT(KUSB, Kern::Printf("DoRequest Read data: data available complete")); |
732 OstTraceDef0( OST_TRACE_CATEGORY_RND, TRACE_NORMAL, DLDDUSBCCHANNEL_DOTRANSFERASYNCREQ_DUP11, |
733 "DoRequest Read data: data available complete" ); |
|
704 r = pEndpoint->CopyToClient(iClient,iClientAsynchNotify[aEndpointNum]->iClientBuffer); |
734 r = pEndpoint->CopyToClient(iClient,iClientAsynchNotify[aEndpointNum]->iClientBuffer); |
705 aNeedsCompletion = ETrue; |
735 aNeedsCompletion = ETrue; |
706 break; |
736 break; |
707 } |
737 } |
708 else |
738 else |
716 TInt maxPacketSize = pEndpoint->EndpointInfo()->iSize; |
746 TInt maxPacketSize = pEndpoint->EndpointInfo()->iSize; |
717 if( (pTfr->iTransferSize <= nRx) || |
747 if( (pTfr->iTransferSize <= nRx) || |
718 (nRx < maxPacketSize) || |
748 (nRx < maxPacketSize) || |
719 pEndpoint->iDmaBuffers->ShortPacketExists()) |
749 pEndpoint->iDmaBuffers->ShortPacketExists()) |
720 { |
750 { |
721 __KTRACE_OPT(KUSB, Kern::Printf("DoRequest Read data: data available complete")); |
751 OstTraceDef0( OST_TRACE_CATEGORY_RND, TRACE_NORMAL, DLDDUSBCCHANNEL_DOTRANSFERASYNCREQ_DUP12, |
752 "DoRequest Read data: data available complete" ); |
|
753 |
|
722 r = pEndpoint->CopyToClient(iClient,iClientAsynchNotify[aEndpointNum]->iClientBuffer); |
754 r = pEndpoint->CopyToClient(iClient,iClientAsynchNotify[aEndpointNum]->iClientBuffer); |
723 aNeedsCompletion = ETrue; |
755 aNeedsCompletion = ETrue; |
724 } |
756 } |
725 else |
757 else |
726 { |
758 { |
729 } |
761 } |
730 } |
762 } |
731 r = pEndpoint->TryToStartRead(EFalse); |
763 r = pEndpoint->TryToStartRead(EFalse); |
732 if (r != KErrNone) |
764 if (r != KErrNone) |
733 { |
765 { |
734 __KTRACE_OPT(KUSB, Kern::Printf("DoRequest Read: couldn't start read")); |
766 OstTraceDef0( OST_TRACE_CATEGORY_RND, TRACE_NORMAL, DLDDUSBCCHANNEL_DOTRANSFERASYNCREQ_DUP13, |
767 "DoRequest Read: couldn't start read" ); |
|
768 |
|
735 r = KErrNone; // Reader full isn't a userside error; |
769 r = KErrNone; // Reader full isn't a userside error; |
736 } |
770 } |
737 break; |
771 break; |
738 } |
772 } |
739 |
773 |
740 case ETransferTypeWrite: |
774 case ETransferTypeWrite: |
741 { |
775 { |
742 __KTRACE_OPT(KUSB, Kern::Printf("DoRequest Write 1")); |
776 OstTraceDef0( OST_TRACE_CATEGORY_RND, TRACE_NORMAL, DLDDUSBCCHANNEL_DOTRANSFERASYNCREQ_DUP14, |
777 "DoRequest Write 1" ); |
|
743 if (pEndpointInfo->iDir != KUsbEpDirIn && |
778 if (pEndpointInfo->iDir != KUsbEpDirIn && |
744 pEndpointInfo->iDir != KUsbEpDirBidirect) |
779 pEndpointInfo->iDir != KUsbEpDirBidirect) |
745 { |
780 { |
746 __KTRACE_OPT(KPANIC, Kern::Printf(" Error: DoRequest Write: wrong direction complete")); |
781 OstTraceDef0( OST_TRACE_CATEGORY_RND, TRACE_FATAL, DLDDUSBCCHANNEL_DOTRANSFERASYNCREQ_DUP15, |
782 " Error: DoRequest Write: wrong direction complete" ); |
|
747 r = KErrUsbEpBadDirection; |
783 r = KErrUsbEpBadDirection; |
748 break; |
784 break; |
749 } |
785 } |
750 __KTRACE_OPT(KUSB, Kern::Printf("DoRequest Write 2")); |
786 OstTraceDef0( OST_TRACE_CATEGORY_RND, TRACE_NORMAL, DLDDUSBCCHANNEL_DOTRANSFERASYNCREQ_DUP16, |
787 "DoRequest Write 2" ); |
|
751 |
788 |
752 |
789 |
753 TInt desLength=iClientAsynchNotify[aEndpointNum]->iClientBuffer->Length(); |
790 TInt desLength=iClientAsynchNotify[aEndpointNum]->iClientBuffer->Length(); |
754 |
791 |
755 if (desLength < pTfr->iTransferSize) |
792 if (desLength < pTfr->iTransferSize) |
756 { |
793 { |
757 __KTRACE_OPT(KPANIC, Kern::Printf(" Error: DoRequest Write: user buffer too short")); |
794 OstTraceDef0( OST_TRACE_CATEGORY_RND, TRACE_FATAL, DLDDUSBCCHANNEL_DOTRANSFERASYNCREQ_DUP17, |
795 " Error: DoRequest Write: user buffer too short" ); |
|
758 r = KErrUsbTransferSize; |
796 r = KErrUsbTransferSize; |
759 break; |
797 break; |
760 } |
798 } |
761 |
799 |
762 __KTRACE_OPT(KUSB, Kern::Printf("DoRequest Write 3 length=%d maxlength=%d", |
800 OstTraceDefExt2( OST_TRACE_CATEGORY_RND, TRACE_NORMAL, DLDDUSBCCHANNEL_DOTRANSFERASYNCREQ_DUP18, |
763 pTfr->iTransferSize, desLength)); |
801 "DoRequest Write 3 length=%d maxlength=%d", pTfr->iTransferSize, desLength); |
764 // Zero length writes are acceptable |
802 // Zero length writes are acceptable |
765 pEndpoint->SetClientWritePending(ETrue); |
803 pEndpoint->SetClientWritePending(ETrue); |
766 r = pEndpoint->TryToStartWrite(pTfr); |
804 r = pEndpoint->TryToStartWrite(pTfr); |
767 if (r != KErrNone) |
805 if (r != KErrNone) |
768 { |
806 { |
769 __KTRACE_OPT(KPANIC, Kern::Printf(" Error: DoRequest Write: couldn't start write")); |
807 OstTraceDef0( OST_TRACE_CATEGORY_RND, TRACE_FATAL, DLDDUSBCCHANNEL_DOTRANSFERASYNCREQ_DUP19, |
808 " Error: DoRequest Write: couldn't start write" ); |
|
770 pEndpoint->SetClientWritePending(EFalse); |
809 pEndpoint->SetClientWritePending(EFalse); |
771 } |
810 } |
772 break; |
811 break; |
773 } |
812 } |
774 |
813 |
775 default: |
814 default: |
776 __KTRACE_OPT(KPANIC, Kern::Printf(" Error: DoTransferAsyncReq: pTfr->iTransferType = %d not supported", |
815 OstTraceDef1( OST_TRACE_CATEGORY_RND, TRACE_FATAL, DLDDUSBCCHANNEL_DOTRANSFERASYNCREQ_DUP20, |
777 pTfr->iTransferType)); |
816 " Error: DoTransferAsyncReq: pTfr->iTransferType = %d not supported", pTfr->iTransferType); |
817 |
|
778 r = KErrNotSupported; |
818 r = KErrNotSupported; |
779 break; |
819 break; |
780 } |
820 } |
781 exit: |
821 exit: |
782 aNeedsCompletion = aNeedsCompletion || (r != KErrNone); |
822 aNeedsCompletion = aNeedsCompletion || (r != KErrNone); |
788 // Cancel an outstanding request - overriding pure virtual |
828 // Cancel an outstanding request - overriding pure virtual |
789 // |
829 // |
790 TInt DLddUsbcChannel::DoCancel(TInt aReqNo) |
830 TInt DLddUsbcChannel::DoCancel(TInt aReqNo) |
791 { |
831 { |
792 TInt r = KErrNone; |
832 TInt r = KErrNone; |
793 __KTRACE_OPT(KUSB, Kern::Printf("DoCancel: 0x%x", aReqNo)); |
833 OstTraceDef1( OST_TRACE_CATEGORY_RND, TRACE_NORMAL, DLDDUSBCCHANNEL_DOCANCEL, |
834 "DoCancel: 0x%x", aReqNo ); |
|
794 if (aReqNo <= iNumberOfEndpoints) |
835 if (aReqNo <= iNumberOfEndpoints) |
795 { |
836 { |
796 __KTRACE_OPT(KUSB, Kern::Printf("DoCancel endpoint: 0x%x", aReqNo)); |
837 OstTraceDef1( OST_TRACE_CATEGORY_RND, TRACE_NORMAL, DLDDUSBCCHANNEL_DOCANCEL_DUP1, |
838 "DoCancel endpoint: 0x%x", aReqNo ); |
|
839 |
|
797 iEndpoint[aReqNo]->CancelTransfer(iClient,iClientAsynchNotify[aReqNo]->iClientBuffer); |
840 iEndpoint[aReqNo]->CancelTransfer(iClient,iClientAsynchNotify[aReqNo]->iClientBuffer); |
798 } |
841 } |
799 else if (aReqNo == RDevUsbcClient::ERequestAlternateDeviceStatusNotify) |
842 else if (aReqNo == RDevUsbcClient::ERequestAlternateDeviceStatusNotify) |
800 { |
843 { |
801 __KTRACE_OPT(KUSB, Kern::Printf("DoCancel: ERequestAlternateDeviceStatusNotify 0x%x", aReqNo)); |
844 OstTraceDef1( OST_TRACE_CATEGORY_RND, TRACE_NORMAL, DLDDUSBCCHANNEL_DOCANCEL_DUP2, |
845 "DoCancel: ERequestAlternateDeviceStatusNotify 0x%x", aReqNo ); |
|
846 |
|
802 iDeviceStatusNeeded = EFalse; |
847 iDeviceStatusNeeded = EFalse; |
803 iStatusFifo->FlushQueue(); |
848 iStatusFifo->FlushQueue(); |
804 if (iStatusChangePtr) |
849 if (iStatusChangePtr) |
805 { |
850 { |
806 iStatusChangeReq->Data()=iController->GetDeviceStatus(); |
851 iStatusChangeReq->Data()=iController->GetDeviceStatus(); |
814 return KErrNone; |
859 return KErrNone; |
815 } |
860 } |
816 } |
861 } |
817 else if (aReqNo == RDevUsbcClient::ERequestReEnumerate) |
862 else if (aReqNo == RDevUsbcClient::ERequestReEnumerate) |
818 { |
863 { |
819 __KTRACE_OPT(KUSB, Kern::Printf("DoCancel ERequestReEnumerate: 0x%x", aReqNo)); |
864 OstTraceDef1( OST_TRACE_CATEGORY_RND, TRACE_NORMAL, DLDDUSBCCHANNEL_DOCANCEL_DUP3, |
865 "DoCancel ERequestReEnumerate: 0x%x", aReqNo ); |
|
866 |
|
820 } |
867 } |
821 else if (aReqNo == RDevUsbcClient::ERequestEndpointStatusNotify) |
868 else if (aReqNo == RDevUsbcClient::ERequestEndpointStatusNotify) |
822 { |
869 { |
823 __KTRACE_OPT(KUSB, Kern::Printf("DoCancel ERequestEndpointStatusNotify: 0x%x", aReqNo)); |
870 OstTraceDef1( OST_TRACE_CATEGORY_RND, TRACE_NORMAL, DLDDUSBCCHANNEL_DOCANCEL_DUP4, |
871 "DoCancel ERequestEndpointStatusNotify: 0x%x", aReqNo ); |
|
872 |
|
824 CancelNotifyEndpointStatus(); |
873 CancelNotifyEndpointStatus(); |
825 if (iEndpointStatusChangeReq->IsReady()) |
874 if (iEndpointStatusChangeReq->IsReady()) |
826 { |
875 { |
827 iRequestStatus[aReqNo] = NULL; |
876 iRequestStatus[aReqNo] = NULL; |
828 Kern::QueueRequestComplete(iClient, iEndpointStatusChangeReq, KErrCancel); |
877 Kern::QueueRequestComplete(iClient, iEndpointStatusChangeReq, KErrCancel); |
829 } |
878 } |
830 return KErrNone; |
879 return KErrNone; |
831 } |
880 } |
832 else if (aReqNo == RDevUsbcClient::ERequestOtgFeaturesNotify) |
881 else if (aReqNo == RDevUsbcClient::ERequestOtgFeaturesNotify) |
833 { |
882 { |
834 __KTRACE_OPT(KUSB, Kern::Printf("DoCancel ERequestOtgFeaturesNotify: 0x%x", aReqNo)); |
883 OstTraceDef1( OST_TRACE_CATEGORY_RND, TRACE_NORMAL, DLDDUSBCCHANNEL_DOCANCEL_DUP5, |
884 "DoCancel ERequestOtgFeaturesNotify: 0x%x", aReqNo ); |
|
885 |
|
835 CancelNotifyOtgFeatures(); |
886 CancelNotifyOtgFeatures(); |
836 if (iOtgFeatureChangeReq->IsReady()) |
887 if (iOtgFeatureChangeReq->IsReady()) |
837 { |
888 { |
838 iRequestStatus[aReqNo] = NULL; |
889 iRequestStatus[aReqNo] = NULL; |
839 Kern::QueueRequestComplete(iClient, iOtgFeatureChangeReq, KErrCancel); |
890 Kern::QueueRequestComplete(iClient, iOtgFeatureChangeReq, KErrCancel); |
840 } |
891 } |
841 } |
892 } |
842 else |
893 else |
843 { |
894 { |
844 __KTRACE_OPT(KUSB, Kern::Printf("DoCancel Unknown! 0x%x", aReqNo)); |
895 OstTraceDef1( OST_TRACE_CATEGORY_RND, TRACE_NORMAL, DLDDUSBCCHANNEL_DOCANCEL_DUP6, |
896 "DoCancel Unknown! 0x%x", aReqNo ); |
|
897 |
|
845 } |
898 } |
846 |
899 |
847 if (r == KErrNone) |
900 if (r == KErrNone) |
848 r = KErrCancel; |
901 r = KErrCancel; |
849 |
902 |
1116 } |
1169 } |
1117 |
1170 |
1118 |
1171 |
1119 TInt DLddUsbcChannel::DoControl(TInt aFunction, TAny* a1, TAny* a2) |
1172 TInt DLddUsbcChannel::DoControl(TInt aFunction, TAny* a1, TAny* a2) |
1120 { |
1173 { |
1121 __KTRACE_OPT(KUSB, Kern::Printf("DoControl: %d", aFunction)); |
1174 OstTraceDef1( OST_TRACE_CATEGORY_RND, TRACE_NORMAL, DLDDUSBCCHANNEL_DOCONTROL, |
1175 "DoControl: %d", aFunction ); |
|
1122 |
1176 |
1123 TInt r = KErrNone; |
1177 TInt r = KErrNone; |
1124 TInt ep; |
1178 TInt ep; |
1125 TUsbcEndpoint* pEndpoint; |
1179 TUsbcEndpoint* pEndpoint; |
1126 TPtrC8 pZeroDesc(NULL, 0); |
1180 TPtrC8 pZeroDesc(NULL, 0); |
1131 TInt bandwidthPriority; |
1185 TInt bandwidthPriority; |
1132 |
1186 |
1133 switch (aFunction) |
1187 switch (aFunction) |
1134 { |
1188 { |
1135 case RDevUsbcClient::EControlEndpointZeroRequestError: |
1189 case RDevUsbcClient::EControlEndpointZeroRequestError: |
1136 __KTRACE_OPT(KUSB, Kern::Printf("EControlEndpointZeroRequestError")); |
1190 OstTraceDef0( OST_TRACE_CATEGORY_RND, TRACE_NORMAL, DLDDUSBCCHANNEL_DOCONTROL_DUP1, |
1191 "EControlEndpointZeroRequestError" ); |
|
1192 |
|
1137 r = KErrNone; |
1193 r = KErrNone; |
1138 if (iOwnsDeviceControl || (iValidInterface && iDeviceState == EUsbcDeviceStateConfigured)) |
1194 if (iOwnsDeviceControl || (iValidInterface && iDeviceState == EUsbcDeviceStateConfigured)) |
1139 { |
1195 { |
1140 iController->Ep0Stall(this); |
1196 iController->Ep0Stall(this); |
1141 } |
1197 } |
1147 r = KErrUsbInterfaceNotReady; |
1203 r = KErrUsbInterfaceNotReady; |
1148 } |
1204 } |
1149 break; |
1205 break; |
1150 |
1206 |
1151 case RDevUsbcClient::EControlGetAlternateSetting: |
1207 case RDevUsbcClient::EControlGetAlternateSetting: |
1152 __KTRACE_OPT(KUSB, Kern::Printf("EControlGetAlternateSetting")); |
1208 OstTraceDef0( OST_TRACE_CATEGORY_RND, TRACE_NORMAL, DLDDUSBCCHANNEL_DOCONTROL_DUP2, |
1209 "EControlGetAlternateSetting" ); |
|
1210 |
|
1153 if (iValidInterface && iDeviceState == EUsbcDeviceStateConfigured) |
1211 if (iValidInterface && iDeviceState == EUsbcDeviceStateConfigured) |
1154 { |
1212 { |
1155 r = iController->GetInterfaceNumber(this, *(TInt*)a1); |
1213 r = iController->GetInterfaceNumber(this, *(TInt*)a1); |
1156 } |
1214 } |
1157 else |
1215 else |
1162 r = KErrUsbInterfaceNotReady; |
1220 r = KErrUsbInterfaceNotReady; |
1163 } |
1221 } |
1164 break; |
1222 break; |
1165 |
1223 |
1166 case RDevUsbcClient::EControlDeviceStatus: |
1224 case RDevUsbcClient::EControlDeviceStatus: |
1167 __KTRACE_OPT(KUSB, Kern::Printf("EControlDeviceStatus")); |
1225 OstTraceDef0( OST_TRACE_CATEGORY_RND, TRACE_NORMAL, DLDDUSBCCHANNEL_DOCONTROL_DUP3, |
1226 "EControlDeviceStatus" ); |
|
1227 |
|
1168 *(TInt*)a1 = iController->GetDeviceStatus(); |
1228 *(TInt*)a1 = iController->GetDeviceStatus(); |
1169 break; |
1229 break; |
1170 |
1230 |
1171 case RDevUsbcClient::EControlEndpointStatus: |
1231 case RDevUsbcClient::EControlEndpointStatus: |
1172 __KTRACE_OPT(KUSB, Kern::Printf("EControlEndpointStatus")); |
1232 OstTraceDef0( OST_TRACE_CATEGORY_RND, TRACE_NORMAL, DLDDUSBCCHANNEL_DOCONTROL_DUP4, |
1233 "EControlEndpointStatus" ); |
|
1234 |
|
1173 if (iValidInterface && ValidEndpoint((TInt) a1)) |
1235 if (iValidInterface && ValidEndpoint((TInt) a1)) |
1174 { |
1236 { |
1175 pEndpoint = iEndpoint[(TInt)a1]; |
1237 pEndpoint = iEndpoint[(TInt)a1]; |
1176 if (pEndpoint == NULL) |
1238 if (pEndpoint == NULL) |
1177 r = KErrNotSupported; |
1239 r = KErrNotSupported; |
1188 r = KErrUsbInterfaceNotReady; |
1250 r = KErrUsbInterfaceNotReady; |
1189 } |
1251 } |
1190 break; |
1252 break; |
1191 |
1253 |
1192 case RDevUsbcClient::EControlQueryReceiveBuffer: |
1254 case RDevUsbcClient::EControlQueryReceiveBuffer: |
1193 __KTRACE_OPT(KUSB, Kern::Printf("EControlQueryReceiveBuffer")); |
1255 OstTraceDef0( OST_TRACE_CATEGORY_RND, TRACE_NORMAL, DLDDUSBCCHANNEL_DOCONTROL_DUP5, |
1256 "EControlQueryReceiveBuffer" ); |
|
1257 |
|
1194 if (iValidInterface && ValidEndpoint((TInt) a1)) |
1258 if (iValidInterface && ValidEndpoint((TInt) a1)) |
1195 { |
1259 { |
1196 pEndpoint=iEndpoint[(TInt) a1]; |
1260 pEndpoint=iEndpoint[(TInt) a1]; |
1197 if (pEndpoint == NULL) |
1261 if (pEndpoint == NULL) |
1198 r = KErrNotSupported; |
1262 r = KErrNotSupported; |
1199 else if (pEndpoint->EndpointInfo()->iDir != KUsbEpDirIn) |
1263 else if (pEndpoint->EndpointInfo()->iDir != KUsbEpDirIn) |
1200 { |
1264 { |
1201 __KTRACE_OPT(KUSB, Kern::Printf(" bytes = %d", pEndpoint->RxBytesAvailable())); |
1265 OstTraceDef1( OST_TRACE_CATEGORY_RND, TRACE_NORMAL, DLDDUSBCCHANNEL_DOCONTROL_DUP6, |
1266 " bytes = %d", pEndpoint->RxBytesAvailable()); |
|
1202 *(TInt*)a2 = pEndpoint->RxBytesAvailable(); |
1267 *(TInt*)a2 = pEndpoint->RxBytesAvailable(); |
1203 } |
1268 } |
1204 } |
1269 } |
1205 else |
1270 else |
1206 { |
1271 { |
1210 r = KErrUsbInterfaceNotReady; |
1275 r = KErrUsbInterfaceNotReady; |
1211 } |
1276 } |
1212 break; |
1277 break; |
1213 |
1278 |
1214 case RDevUsbcClient::EControlEndpointCaps: |
1279 case RDevUsbcClient::EControlEndpointCaps: |
1215 __KTRACE_OPT(KUSB, Kern::Printf("EControlEndpointCaps")); |
1280 OstTraceDef0( OST_TRACE_CATEGORY_RND, TRACE_NORMAL, DLDDUSBCCHANNEL_DOCONTROL_DUP7, |
1281 "EControlEndpointCaps" ); |
|
1216 r = Kern::ThreadDesWrite(iClient, a1, pZeroDesc, 0, 0, iClient); |
1282 r = Kern::ThreadDesWrite(iClient, a1, pZeroDesc, 0, 0, iClient); |
1217 if (r != KErrNone) |
1283 if (r != KErrNone) |
1218 PanicClientThread(r); |
1284 PanicClientThread(r); |
1219 iController->EndpointCaps(this, *((TDes8*) a1)); |
1285 iController->EndpointCaps(this, *((TDes8*) a1)); |
1220 break; |
1286 break; |
1221 |
1287 |
1222 case RDevUsbcClient::EControlDeviceCaps: |
1288 case RDevUsbcClient::EControlDeviceCaps: |
1223 __KTRACE_OPT(KUSB, Kern::Printf("EControlDeviceCaps")); |
1289 OstTraceDef0( OST_TRACE_CATEGORY_RND, TRACE_NORMAL, DLDDUSBCCHANNEL_DOCONTROL_DUP8, |
1290 "EControlDeviceCaps" ); |
|
1224 r = Kern::ThreadDesWrite(iClient, a1, pZeroDesc, 0, 0, iClient); |
1291 r = Kern::ThreadDesWrite(iClient, a1, pZeroDesc, 0, 0, iClient); |
1225 if (r != KErrNone) |
1292 if (r != KErrNone) |
1226 PanicClientThread(r); |
1293 PanicClientThread(r); |
1227 iController->DeviceCaps(this, *((TDes8*) a1)); |
1294 iController->DeviceCaps(this, *((TDes8*) a1)); |
1228 break; |
1295 break; |
1229 |
1296 |
1230 case RDevUsbcClient::EControlSendEp0StatusPacket: |
1297 case RDevUsbcClient::EControlSendEp0StatusPacket: |
1231 __KTRACE_OPT(KUSB, Kern::Printf("EControlSendEp0StatusPacket")); |
1298 OstTraceDef0( OST_TRACE_CATEGORY_RND, TRACE_NORMAL, DLDDUSBCCHANNEL_DOCONTROL_DUP9, |
1299 "EControlSendEp0StatusPacket" ); |
|
1232 iController->SendEp0StatusPacket(this); |
1300 iController->SendEp0StatusPacket(this); |
1233 break; |
1301 break; |
1234 |
1302 |
1235 case RDevUsbcClient::EControlHaltEndpoint: |
1303 case RDevUsbcClient::EControlHaltEndpoint: |
1236 __KTRACE_OPT(KUSB, Kern::Printf("EControlHaltEndpoint")); |
1304 OstTraceDef0( OST_TRACE_CATEGORY_RND, TRACE_NORMAL, DLDDUSBCCHANNEL_DOCONTROL_DUP10, |
1305 "EControlHaltEndpoint" ); |
|
1237 if (iValidInterface && ValidEndpoint((TInt) a1)) |
1306 if (iValidInterface && ValidEndpoint((TInt) a1)) |
1238 { |
1307 { |
1239 r = iController->HaltEndpoint(this, iEndpoint[(TInt)a1]->RealEpNumber()); |
1308 r = iController->HaltEndpoint(this, iEndpoint[(TInt)a1]->RealEpNumber()); |
1240 } |
1309 } |
1241 else |
1310 else |
1246 r = KErrUsbInterfaceNotReady; |
1315 r = KErrUsbInterfaceNotReady; |
1247 } |
1316 } |
1248 break; |
1317 break; |
1249 |
1318 |
1250 case RDevUsbcClient::EControlClearHaltEndpoint: |
1319 case RDevUsbcClient::EControlClearHaltEndpoint: |
1251 __KTRACE_OPT(KUSB, Kern::Printf("EControlClearHaltEndpoint")); |
1320 OstTraceDef0( OST_TRACE_CATEGORY_RND, TRACE_NORMAL, DLDDUSBCCHANNEL_DOCONTROL_DUP11, |
1321 "EControlClearHaltEndpoint" ); |
|
1252 if (iValidInterface && ValidEndpoint((TInt) a1)) |
1322 if (iValidInterface && ValidEndpoint((TInt) a1)) |
1253 { |
1323 { |
1254 r = iController->ClearHaltEndpoint(this, iEndpoint[(TInt)a1]->RealEpNumber()); |
1324 r = iController->ClearHaltEndpoint(this, iEndpoint[(TInt)a1]->RealEpNumber()); |
1255 } |
1325 } |
1256 else |
1326 else |
1261 r = KErrUsbInterfaceNotReady; |
1331 r = KErrUsbInterfaceNotReady; |
1262 } |
1332 } |
1263 break; |
1333 break; |
1264 |
1334 |
1265 case RDevUsbcClient::EControlDumpRegisters: |
1335 case RDevUsbcClient::EControlDumpRegisters: |
1266 __KTRACE_OPT(KUSB, Kern::Printf("EControlDumpRegisters")); |
1336 OstTraceDef0( OST_TRACE_CATEGORY_RND, TRACE_NORMAL, DLDDUSBCCHANNEL_DOCONTROL_DUP12, |
1337 "EControlDumpRegisters" ); |
|
1267 iController->DumpRegisters(); |
1338 iController->DumpRegisters(); |
1268 break; |
1339 break; |
1269 |
1340 |
1270 case RDevUsbcClient::EControlReleaseDeviceControl: |
1341 case RDevUsbcClient::EControlReleaseDeviceControl: |
1271 __KTRACE_OPT(KUSB, Kern::Printf("EControlReleaseDeviceControl")); |
1342 OstTraceDef0( OST_TRACE_CATEGORY_RND, TRACE_NORMAL, DLDDUSBCCHANNEL_DOCONTROL_DUP13, |
1343 "EControlReleaseDeviceControl" ); |
|
1272 iController->ReleaseDeviceControl(this); |
1344 iController->ReleaseDeviceControl(this); |
1273 iOwnsDeviceControl = EFalse; |
1345 iOwnsDeviceControl = EFalse; |
1274 break; |
1346 break; |
1275 |
1347 |
1276 case RDevUsbcClient::EControlEndpointZeroMaxPacketSizes: |
1348 case RDevUsbcClient::EControlEndpointZeroMaxPacketSizes: |
1277 __KTRACE_OPT(KUSB, Kern::Printf("EControlEndpointZeroMaxPacketSizes")); |
1349 OstTraceDef0( OST_TRACE_CATEGORY_RND, TRACE_NORMAL, DLDDUSBCCHANNEL_DOCONTROL_DUP14, |
1350 "EControlEndpointZeroMaxPacketSizes" ); |
|
1278 r = iController->EndpointZeroMaxPacketSizes(); |
1351 r = iController->EndpointZeroMaxPacketSizes(); |
1279 break; |
1352 break; |
1280 |
1353 |
1281 case RDevUsbcClient::EControlSetEndpointZeroMaxPacketSize: |
1354 case RDevUsbcClient::EControlSetEndpointZeroMaxPacketSize: |
1282 __KTRACE_OPT(KUSB, Kern::Printf("EControlSetEndpointZeroMaxPacketSize")); |
1355 OstTraceDef0( OST_TRACE_CATEGORY_RND, TRACE_NORMAL, DLDDUSBCCHANNEL_DOCONTROL_DUP15, |
1356 "EControlSetEndpointZeroMaxPacketSize" ); |
|
1283 r = iController->SetEndpointZeroMaxPacketSize(reinterpret_cast<TInt>(a1)); |
1357 r = iController->SetEndpointZeroMaxPacketSize(reinterpret_cast<TInt>(a1)); |
1284 break; |
1358 break; |
1285 |
1359 |
1286 case RDevUsbcClient::EControlGetEndpointZeroMaxPacketSize: |
1360 case RDevUsbcClient::EControlGetEndpointZeroMaxPacketSize: |
1287 __KTRACE_OPT(KUSB, Kern::Printf("EControlGetEndpointZeroMaxPacketSize")); |
1361 OstTraceDef0( OST_TRACE_CATEGORY_RND, TRACE_NORMAL, DLDDUSBCCHANNEL_DOCONTROL_DUP16, |
1362 "EControlGetEndpointZeroMaxPacketSize" ); |
|
1288 r = iController->Ep0PacketSize(); |
1363 r = iController->Ep0PacketSize(); |
1289 break; |
1364 break; |
1290 |
1365 |
1291 case RDevUsbcClient::EControlGetDeviceDescriptor: |
1366 case RDevUsbcClient::EControlGetDeviceDescriptor: |
1292 __KTRACE_OPT(KUSB, Kern::Printf("EControlGetDeviceDescriptor")); |
1367 OstTraceDef0( OST_TRACE_CATEGORY_RND, TRACE_NORMAL, DLDDUSBCCHANNEL_DOCONTROL_DUP17, |
1368 "EControlGetDeviceDescriptor" ); |
|
1293 r = Kern::ThreadDesWrite(iClient, a1, pZeroDesc, 0, 0, iClient); |
1369 r = Kern::ThreadDesWrite(iClient, a1, pZeroDesc, 0, 0, iClient); |
1294 if (r != KErrNone) |
1370 if (r != KErrNone) |
1295 PanicClientThread(r); |
1371 PanicClientThread(r); |
1296 r = iController->GetDeviceDescriptor(iClient, *((TDes8*) a1)); |
1372 r = iController->GetDeviceDescriptor(iClient, *((TDes8*) a1)); |
1297 break; |
1373 break; |
1298 |
1374 |
1299 case RDevUsbcClient::EControlSetDeviceDescriptor: |
1375 case RDevUsbcClient::EControlSetDeviceDescriptor: |
1300 __KTRACE_OPT(KUSB, Kern::Printf("EControlSetDeviceDescriptor")); |
1376 OstTraceDef0( OST_TRACE_CATEGORY_RND, TRACE_NORMAL, DLDDUSBCCHANNEL_DOCONTROL_DUP18, |
1377 "EControlSetDeviceDescriptor" ); |
|
1301 if (a1 != NULL) |
1378 if (a1 != NULL) |
1302 r = iController->SetDeviceDescriptor(iClient, *((TDes8*) a1)); |
1379 r = iController->SetDeviceDescriptor(iClient, *((TDes8*) a1)); |
1303 else |
1380 else |
1304 r = KErrArgument; |
1381 r = KErrArgument; |
1305 break; |
1382 break; |
1306 |
1383 |
1307 case RDevUsbcClient::EControlGetDeviceDescriptorSize: |
1384 case RDevUsbcClient::EControlGetDeviceDescriptorSize: |
1308 __KTRACE_OPT(KUSB, Kern::Printf("EControlGetDeviceDescriptorSize")); |
1385 OstTraceDef0( OST_TRACE_CATEGORY_RND, TRACE_NORMAL, DLDDUSBCCHANNEL_DOCONTROL_DUP19, |
1386 "EControlGetDeviceDescriptorSize" ); |
|
1309 if (a1 != NULL) |
1387 if (a1 != NULL) |
1310 r = iController->GetDeviceDescriptorSize(iClient, *((TDes8*) a1)); |
1388 r = iController->GetDeviceDescriptorSize(iClient, *((TDes8*) a1)); |
1311 else |
1389 else |
1312 r = KErrArgument; |
1390 r = KErrArgument; |
1313 break; |
1391 break; |
1314 |
1392 |
1315 case RDevUsbcClient::EControlGetConfigurationDescriptor: |
1393 case RDevUsbcClient::EControlGetConfigurationDescriptor: |
1316 __KTRACE_OPT(KUSB, Kern::Printf("EControlGetConfigurationDescriptor")); |
1394 OstTraceDef0( OST_TRACE_CATEGORY_RND, TRACE_NORMAL, DLDDUSBCCHANNEL_DOCONTROL_DUP20, |
1395 "EControlGetConfigurationDescriptor" ); |
|
1317 r = Kern::ThreadDesWrite(iClient, a1, pZeroDesc, 0 , 0, iClient); |
1396 r = Kern::ThreadDesWrite(iClient, a1, pZeroDesc, 0 , 0, iClient); |
1318 if (r != KErrNone) |
1397 if (r != KErrNone) |
1319 PanicClientThread(r); |
1398 PanicClientThread(r); |
1320 r = iController->GetConfigurationDescriptor(iClient, *((TDes8*) a1)); |
1399 r = iController->GetConfigurationDescriptor(iClient, *((TDes8*) a1)); |
1321 break; |
1400 break; |
1322 |
1401 |
1323 case RDevUsbcClient::EControlGetConfigurationDescriptorSize: |
1402 case RDevUsbcClient::EControlGetConfigurationDescriptorSize: |
1324 __KTRACE_OPT(KUSB, Kern::Printf("EControlGetConfigurationDescriptorSize")); |
1403 OstTraceDef0( OST_TRACE_CATEGORY_RND, TRACE_NORMAL, DLDDUSBCCHANNEL_DOCONTROL_DUP21, |
1404 "EControlGetConfigurationDescriptorSize" ); |
|
1325 if (a1 != NULL) |
1405 if (a1 != NULL) |
1326 { |
1406 { |
1327 r = iController->GetConfigurationDescriptorSize(iClient, *((TDes8*) a1)); |
1407 r = iController->GetConfigurationDescriptorSize(iClient, *((TDes8*) a1)); |
1328 } |
1408 } |
1329 else |
1409 else |
1330 r = KErrArgument; |
1410 r = KErrArgument; |
1331 break; |
1411 break; |
1332 |
1412 |
1333 case RDevUsbcClient::EControlSetConfigurationDescriptor: |
1413 case RDevUsbcClient::EControlSetConfigurationDescriptor: |
1334 __KTRACE_OPT(KUSB, Kern::Printf("EControlSetConfigurationDescriptor")); |
1414 OstTraceDef0( OST_TRACE_CATEGORY_RND, TRACE_NORMAL, DLDDUSBCCHANNEL_DOCONTROL_DUP22, |
1415 "EControlSetConfigurationDescriptor" ); |
|
1335 r = iController->SetConfigurationDescriptor(iClient, *((TDes8*) a1)); |
1416 r = iController->SetConfigurationDescriptor(iClient, *((TDes8*) a1)); |
1336 break; |
1417 break; |
1337 |
1418 |
1338 case RDevUsbcClient::EControlGetInterfaceDescriptor: |
1419 case RDevUsbcClient::EControlGetInterfaceDescriptor: |
1339 __KTRACE_OPT(KUSB, Kern::Printf("EControlGetInterfaceDescriptor")); |
1420 OstTraceDef0( OST_TRACE_CATEGORY_RND, TRACE_NORMAL, DLDDUSBCCHANNEL_DOCONTROL_DUP23, |
1421 "EControlGetInterfaceDescriptor" ); |
|
1340 r = iController->GetInterfaceDescriptor(iClient, this, (TInt) a1, *((TDes8*) a2)); |
1422 r = iController->GetInterfaceDescriptor(iClient, this, (TInt) a1, *((TDes8*) a2)); |
1341 break; |
1423 break; |
1342 |
1424 |
1343 case RDevUsbcClient::EControlGetInterfaceDescriptorSize: |
1425 case RDevUsbcClient::EControlGetInterfaceDescriptorSize: |
1344 __KTRACE_OPT(KUSB, Kern::Printf("EControlGetInterfaceDescriptorSize")); |
1426 OstTraceDef0( OST_TRACE_CATEGORY_RND, TRACE_NORMAL, DLDDUSBCCHANNEL_DOCONTROL_DUP24, |
1427 "EControlGetInterfaceDescriptorSize" ); |
|
1345 r = iController->GetInterfaceDescriptorSize(iClient, this, (TInt) a1, *(TDes8*) a2); |
1428 r = iController->GetInterfaceDescriptorSize(iClient, this, (TInt) a1, *(TDes8*) a2); |
1346 break; |
1429 break; |
1347 |
1430 |
1348 case RDevUsbcClient::EControlSetInterfaceDescriptor: |
1431 case RDevUsbcClient::EControlSetInterfaceDescriptor: |
1349 __KTRACE_OPT(KUSB, Kern::Printf("EControlSetInterfaceDescriptor")); |
1432 OstTraceDef0( OST_TRACE_CATEGORY_RND, TRACE_NORMAL, DLDDUSBCCHANNEL_DOCONTROL_DUP25, |
1433 "EControlSetInterfaceDescriptor" ); |
|
1350 r = iController->SetInterfaceDescriptor(iClient, this, (TInt) a1, *((TDes8*) a2)); |
1434 r = iController->SetInterfaceDescriptor(iClient, this, (TInt) a1, *((TDes8*) a2)); |
1351 break; |
1435 break; |
1352 |
1436 |
1353 case RDevUsbcClient::EControlGetEndpointDescriptor: |
1437 case RDevUsbcClient::EControlGetEndpointDescriptor: |
1354 __KTRACE_OPT(KUSB, Kern::Printf("EControlGetEndpointDescriptor")); |
1438 OstTraceDef0( OST_TRACE_CATEGORY_RND, TRACE_NORMAL, DLDDUSBCCHANNEL_DOCONTROL_DUP26, |
1439 "EControlGetEndpointDescriptor" ); |
|
1355 r = Kern::ThreadRawRead(iClient, a1, &epInfo, sizeof(epInfo)); |
1440 r = Kern::ThreadRawRead(iClient, a1, &epInfo, sizeof(epInfo)); |
1356 if (r != KErrNone) |
1441 if (r != KErrNone) |
1357 PanicClientThread(r); |
1442 PanicClientThread(r); |
1358 ep = EpFromAlternateSetting(epInfo.iSetting, epInfo.iEndpoint); |
1443 ep = EpFromAlternateSetting(epInfo.iSetting, epInfo.iEndpoint); |
1359 r = iController->GetEndpointDescriptor(iClient, this, epInfo.iSetting, |
1444 r = iController->GetEndpointDescriptor(iClient, this, epInfo.iSetting, |
1360 ep, *(TDes8*) epInfo.iArg); |
1445 ep, *(TDes8*) epInfo.iArg); |
1361 break; |
1446 break; |
1362 |
1447 |
1363 case RDevUsbcClient::EControlGetEndpointDescriptorSize: |
1448 case RDevUsbcClient::EControlGetEndpointDescriptorSize: |
1364 __KTRACE_OPT(KUSB, Kern::Printf("EControlGetEndpointDescriptorSize")); |
1449 OstTraceDef0( OST_TRACE_CATEGORY_RND, TRACE_NORMAL, DLDDUSBCCHANNEL_DOCONTROL_DUP27, |
1450 "EControlGetEndpointDescriptorSize" ); |
|
1365 r = Kern::ThreadRawRead(iClient, a1, &epInfo, sizeof(epInfo)); |
1451 r = Kern::ThreadRawRead(iClient, a1, &epInfo, sizeof(epInfo)); |
1366 if (r != KErrNone) |
1452 if (r != KErrNone) |
1367 PanicClientThread(r); |
1453 PanicClientThread(r); |
1368 ep = EpFromAlternateSetting(epInfo.iSetting, epInfo.iEndpoint); |
1454 ep = EpFromAlternateSetting(epInfo.iSetting, epInfo.iEndpoint); |
1369 r = iController->GetEndpointDescriptorSize(iClient, this, epInfo.iSetting, |
1455 r = iController->GetEndpointDescriptorSize(iClient, this, epInfo.iSetting, |
1370 ep, *(TDes8*) epInfo.iArg); |
1456 ep, *(TDes8*) epInfo.iArg); |
1371 break; |
1457 break; |
1372 |
1458 |
1373 case RDevUsbcClient::EControlSetEndpointDescriptor: |
1459 case RDevUsbcClient::EControlSetEndpointDescriptor: |
1374 __KTRACE_OPT(KUSB, Kern::Printf("EControlSetEndpointDescriptor")); |
1460 OstTraceDef0( OST_TRACE_CATEGORY_RND, TRACE_NORMAL, DLDDUSBCCHANNEL_DOCONTROL_DUP28, |
1461 "EControlSetEndpointDescriptor" ); |
|
1375 r = Kern::ThreadRawRead(iClient, a1, &epInfo, sizeof(epInfo)); |
1462 r = Kern::ThreadRawRead(iClient, a1, &epInfo, sizeof(epInfo)); |
1376 if (r != KErrNone) |
1463 if (r != KErrNone) |
1377 PanicClientThread(r); |
1464 PanicClientThread(r); |
1378 ep = EpFromAlternateSetting(epInfo.iSetting, epInfo.iEndpoint); |
1465 ep = EpFromAlternateSetting(epInfo.iSetting, epInfo.iEndpoint); |
1379 r = iController->SetEndpointDescriptor(iClient, this, epInfo.iSetting, |
1466 r = iController->SetEndpointDescriptor(iClient, this, epInfo.iSetting, |
1380 ep, *(TDes8*)epInfo.iArg); |
1467 ep, *(TDes8*)epInfo.iArg); |
1381 break; |
1468 break; |
1382 |
1469 |
1383 case RDevUsbcClient::EControlGetDeviceQualifierDescriptor: |
1470 case RDevUsbcClient::EControlGetDeviceQualifierDescriptor: |
1384 __KTRACE_OPT(KUSB, Kern::Printf("EControlGetDeviceQualifierDescriptor")); |
1471 OstTraceDef0( OST_TRACE_CATEGORY_RND, TRACE_NORMAL, DLDDUSBCCHANNEL_DOCONTROL_DUP29, |
1472 "EControlGetDeviceQualifierDescriptor" ); |
|
1385 r = Kern::ThreadDesWrite(iClient, a1, pZeroDesc, 0, 0, iClient); |
1473 r = Kern::ThreadDesWrite(iClient, a1, pZeroDesc, 0, 0, iClient); |
1386 if (r != KErrNone) |
1474 if (r != KErrNone) |
1387 PanicClientThread(r); |
1475 PanicClientThread(r); |
1388 r = iController->GetDeviceQualifierDescriptor(iClient, *((TDes8*) a1)); |
1476 r = iController->GetDeviceQualifierDescriptor(iClient, *((TDes8*) a1)); |
1389 break; |
1477 break; |
1390 |
1478 |
1391 case RDevUsbcClient::EControlSetDeviceQualifierDescriptor: |
1479 case RDevUsbcClient::EControlSetDeviceQualifierDescriptor: |
1392 __KTRACE_OPT(KUSB, Kern::Printf("EControlSetDeviceQualifierDescriptor")); |
1480 OstTraceDef0( OST_TRACE_CATEGORY_RND, TRACE_NORMAL, DLDDUSBCCHANNEL_DOCONTROL_DUP30, |
1481 "EControlSetDeviceQualifierDescriptor" ); |
|
1393 if (a1 != NULL) |
1482 if (a1 != NULL) |
1394 r = iController->SetDeviceQualifierDescriptor(iClient, *((TDes8*) a1)); |
1483 r = iController->SetDeviceQualifierDescriptor(iClient, *((TDes8*) a1)); |
1395 else |
1484 else |
1396 r = KErrArgument; |
1485 r = KErrArgument; |
1397 break; |
1486 break; |
1398 |
1487 |
1399 case RDevUsbcClient::EControlGetOtherSpeedConfigurationDescriptor: |
1488 case RDevUsbcClient::EControlGetOtherSpeedConfigurationDescriptor: |
1400 __KTRACE_OPT(KUSB, Kern::Printf("EControlGetOtherSpeedConfigurationDescriptor")); |
1489 OstTraceDef0( OST_TRACE_CATEGORY_RND, TRACE_NORMAL, DLDDUSBCCHANNEL_DOCONTROL_DUP31, |
1490 "EControlGetOtherSpeedConfigurationDescriptor" ); |
|
1401 r = Kern::ThreadDesWrite(iClient, a1, pZeroDesc, 0 , 0, iClient); |
1491 r = Kern::ThreadDesWrite(iClient, a1, pZeroDesc, 0 , 0, iClient); |
1402 if (r != KErrNone) |
1492 if (r != KErrNone) |
1403 PanicClientThread(r); |
1493 PanicClientThread(r); |
1404 r = iController->GetOtherSpeedConfigurationDescriptor(iClient, *((TDes8*) a1)); |
1494 r = iController->GetOtherSpeedConfigurationDescriptor(iClient, *((TDes8*) a1)); |
1405 break; |
1495 break; |
1406 |
1496 |
1407 case RDevUsbcClient::EControlSetOtherSpeedConfigurationDescriptor: |
1497 case RDevUsbcClient::EControlSetOtherSpeedConfigurationDescriptor: |
1408 __KTRACE_OPT(KUSB, Kern::Printf("EControlSetOtherSpeedConfigurationDescriptor")); |
1498 OstTraceDef0( OST_TRACE_CATEGORY_RND, TRACE_NORMAL, DLDDUSBCCHANNEL_DOCONTROL_DUP32, |
1499 "EControlSetOtherSpeedConfigurationDescriptor" ); |
|
1409 r = iController->SetOtherSpeedConfigurationDescriptor(iClient, *((TDes8*) a1)); |
1500 r = iController->SetOtherSpeedConfigurationDescriptor(iClient, *((TDes8*) a1)); |
1410 break; |
1501 break; |
1411 |
1502 |
1412 |
1503 |
1413 case RDevUsbcClient::EControlGetCSInterfaceDescriptor: |
1504 case RDevUsbcClient::EControlGetCSInterfaceDescriptor: |
1414 __KTRACE_OPT(KUSB, Kern::Printf("EControlGetCSInterfaceDescriptor")); |
1505 OstTraceDef0( OST_TRACE_CATEGORY_RND, TRACE_NORMAL, DLDDUSBCCHANNEL_DOCONTROL_DUP33, |
1506 "EControlGetCSInterfaceDescriptor" ); |
|
1415 r = iController->GetCSInterfaceDescriptorBlock(iClient, this, (TInt) a1, *((TDes8*) a2)); |
1507 r = iController->GetCSInterfaceDescriptorBlock(iClient, this, (TInt) a1, *((TDes8*) a2)); |
1416 break; |
1508 break; |
1417 |
1509 |
1418 case RDevUsbcClient::EControlGetCSInterfaceDescriptorSize: |
1510 case RDevUsbcClient::EControlGetCSInterfaceDescriptorSize: |
1419 __KTRACE_OPT(KUSB, Kern::Printf("EControlGetCSInterfaceDescriptorSize")); |
1511 OstTraceDef0( OST_TRACE_CATEGORY_RND, TRACE_NORMAL, DLDDUSBCCHANNEL_DOCONTROL_DUP34, |
1512 "EControlGetCSInterfaceDescriptorSize" ); |
|
1420 r = iController->GetCSInterfaceDescriptorBlockSize(iClient, this, (TInt) a1, *(TDes8*) a2); |
1513 r = iController->GetCSInterfaceDescriptorBlockSize(iClient, this, (TInt) a1, *(TDes8*) a2); |
1421 break; |
1514 break; |
1422 |
1515 |
1423 case RDevUsbcClient::EControlGetCSEndpointDescriptor: |
1516 case RDevUsbcClient::EControlGetCSEndpointDescriptor: |
1424 __KTRACE_OPT(KUSB, Kern::Printf("EControlGetCSEndpointDescriptor")); |
1517 OstTraceDef0( OST_TRACE_CATEGORY_RND, TRACE_NORMAL, DLDDUSBCCHANNEL_DOCONTROL_DUP35, |
1518 "EControlGetCSEndpointDescriptor" ); |
|
1425 r = Kern::ThreadRawRead(iClient, a1, &epInfo, sizeof(epInfo)); |
1519 r = Kern::ThreadRawRead(iClient, a1, &epInfo, sizeof(epInfo)); |
1426 if (r != KErrNone) |
1520 if (r != KErrNone) |
1427 PanicClientThread(r); |
1521 PanicClientThread(r); |
1428 ep = EpFromAlternateSetting(epInfo.iSetting, epInfo.iEndpoint); |
1522 ep = EpFromAlternateSetting(epInfo.iSetting, epInfo.iEndpoint); |
1429 r = iController->GetCSEndpointDescriptorBlock(iClient, this, epInfo.iSetting, |
1523 r = iController->GetCSEndpointDescriptorBlock(iClient, this, epInfo.iSetting, |
1430 ep, *(TDes8*) epInfo.iArg); |
1524 ep, *(TDes8*) epInfo.iArg); |
1431 break; |
1525 break; |
1432 |
1526 |
1433 case RDevUsbcClient::EControlGetCSEndpointDescriptorSize: |
1527 case RDevUsbcClient::EControlGetCSEndpointDescriptorSize: |
1434 __KTRACE_OPT(KUSB, Kern::Printf("EControlGetCSEndpointDescriptorSize")); |
1528 OstTraceDef0( OST_TRACE_CATEGORY_RND, TRACE_NORMAL, DLDDUSBCCHANNEL_DOCONTROL_DUP36, |
1529 "EControlGetCSEndpointDescriptorSize" ); |
|
1435 r = Kern::ThreadRawRead(iClient, a1, &epInfo, sizeof(epInfo)); |
1530 r = Kern::ThreadRawRead(iClient, a1, &epInfo, sizeof(epInfo)); |
1436 if (r != KErrNone) |
1531 if (r != KErrNone) |
1437 PanicClientThread(r); |
1532 PanicClientThread(r); |
1438 ep = EpFromAlternateSetting(epInfo.iSetting, epInfo.iEndpoint); |
1533 ep = EpFromAlternateSetting(epInfo.iSetting, epInfo.iEndpoint); |
1439 r = iController->GetCSEndpointDescriptorBlockSize(iClient, this, epInfo.iSetting, |
1534 r = iController->GetCSEndpointDescriptorBlockSize(iClient, this, epInfo.iSetting, |
1440 ep, *(TDes8*) epInfo.iArg); |
1535 ep, *(TDes8*) epInfo.iArg); |
1441 break; |
1536 break; |
1442 |
1537 |
1443 case RDevUsbcClient::EControlSignalRemoteWakeup: |
1538 case RDevUsbcClient::EControlSignalRemoteWakeup: |
1444 __KTRACE_OPT(KUSB, Kern::Printf("EControlSignalRemoteWakeup")); |
1539 OstTraceDef0( OST_TRACE_CATEGORY_RND, TRACE_NORMAL, DLDDUSBCCHANNEL_DOCONTROL_DUP37, |
1540 "EControlSignalRemoteWakeup" ); |
|
1445 r = iController->SignalRemoteWakeup(); |
1541 r = iController->SignalRemoteWakeup(); |
1446 break; |
1542 break; |
1447 |
1543 |
1448 case RDevUsbcClient::EControlDeviceDisconnectFromHost: |
1544 case RDevUsbcClient::EControlDeviceDisconnectFromHost: |
1449 __KTRACE_OPT(KUSB, Kern::Printf("EControlDeviceDisconnectFromHost")); |
1545 OstTraceDef0( OST_TRACE_CATEGORY_RND, TRACE_NORMAL, DLDDUSBCCHANNEL_DOCONTROL_DUP38, |
1546 "EControlDeviceDisconnectFromHost" ); |
|
1450 r = iController->UsbDisconnect(); |
1547 r = iController->UsbDisconnect(); |
1451 break; |
1548 break; |
1452 |
1549 |
1453 case RDevUsbcClient::EControlDeviceConnectToHost: |
1550 case RDevUsbcClient::EControlDeviceConnectToHost: |
1454 __KTRACE_OPT(KUSB, Kern::Printf("EControlDeviceConnectToHost")); |
1551 OstTraceDef0( OST_TRACE_CATEGORY_RND, TRACE_NORMAL, DLDDUSBCCHANNEL_DOCONTROL_DUP39, |
1552 "EControlDeviceConnectToHost" ); |
|
1455 r = iController->UsbConnect(); |
1553 r = iController->UsbConnect(); |
1456 break; |
1554 break; |
1457 |
1555 |
1458 case RDevUsbcClient::EControlDevicePowerUpUdc: |
1556 case RDevUsbcClient::EControlDevicePowerUpUdc: |
1459 __KTRACE_OPT(KUSB, Kern::Printf("EControlDevicePowerUpUdc")); |
1557 OstTraceDef0( OST_TRACE_CATEGORY_RND, TRACE_NORMAL, DLDDUSBCCHANNEL_DOCONTROL_DUP40, |
1558 "EControlDevicePowerUpUdc" ); |
|
1460 r = iController->PowerUpUdc(); |
1559 r = iController->PowerUpUdc(); |
1461 break; |
1560 break; |
1462 |
1561 |
1463 case RDevUsbcClient::EControlSetDeviceControl: |
1562 case RDevUsbcClient::EControlSetDeviceControl: |
1464 __KTRACE_OPT(KUSB, Kern::Printf("EControlSetDeviceControl")); |
1563 OstTraceDef0( OST_TRACE_CATEGORY_RND, TRACE_NORMAL, DLDDUSBCCHANNEL_DOCONTROL_DUP41, |
1564 "EControlSetDeviceControl" ); |
|
1465 r = iController->SetDeviceControl(this); |
1565 r = iController->SetDeviceControl(this); |
1466 if (r == KErrNone) |
1566 if (r == KErrNone) |
1467 { |
1567 { |
1468 iOwnsDeviceControl = ETrue; |
1568 iOwnsDeviceControl = ETrue; |
1469 if (iEndpoint[0] == NULL) |
1569 if (iEndpoint[0] == NULL) |
1470 { |
1570 { |
1471 __KTRACE_OPT(KUSB, Kern::Printf("EControlSetDeviceControl 11")); |
1571 OstTraceDef0( OST_TRACE_CATEGORY_RND, TRACE_NORMAL, DLDDUSBCCHANNEL_DOCONTROL_DUP42, |
1572 "EControlSetDeviceControl 11" ); |
|
1472 r = SetupEp0(); |
1573 r = SetupEp0(); |
1473 if (r != KErrNone) |
1574 if (r != KErrNone) |
1474 { |
1575 { |
1475 __KTRACE_OPT(KPANIC, Kern::Printf(" Error: SetupEp0() failed")); |
1576 OstTraceDef0( OST_TRACE_CATEGORY_RND, TRACE_FATAL, DLDDUSBCCHANNEL_DOCONTROL_DUP43, |
1577 " Error: SetupEp0() failed" ); |
|
1578 |
|
1476 iController->ReleaseDeviceControl(this); |
1579 iController->ReleaseDeviceControl(this); |
1477 DestroyEp0(); |
1580 DestroyEp0(); |
1478 iOwnsDeviceControl = EFalse; |
1581 iOwnsDeviceControl = EFalse; |
1479 } |
1582 } |
1480 iEndpoint[0]->TryToStartRead(EFalse); |
1583 iEndpoint[0]->TryToStartRead(EFalse); |
1483 else |
1586 else |
1484 r = KErrInUse; |
1587 r = KErrInUse; |
1485 break; |
1588 break; |
1486 |
1589 |
1487 case RDevUsbcClient::EControlCurrentlyUsingHighSpeed: |
1590 case RDevUsbcClient::EControlCurrentlyUsingHighSpeed: |
1488 __KTRACE_OPT(KUSB, Kern::Printf("EControlCurrentlyUsingHighSpeed")); |
1591 OstTraceDef0( OST_TRACE_CATEGORY_RND, TRACE_NORMAL, DLDDUSBCCHANNEL_DOCONTROL_DUP44, |
1592 "EControlCurrentlyUsingHighSpeed" ); |
|
1489 r = iController->CurrentlyUsingHighSpeed(); |
1593 r = iController->CurrentlyUsingHighSpeed(); |
1490 break; |
1594 break; |
1491 |
1595 |
1492 case RDevUsbcClient::EControlSetInterface: |
1596 case RDevUsbcClient::EControlSetInterface: |
1493 __KTRACE_OPT(KUSB, Kern::Printf("EControlSetInterface")); |
1597 OstTraceDef0( OST_TRACE_CATEGORY_RND, TRACE_NORMAL, DLDDUSBCCHANNEL_DOCONTROL_DUP45, |
1598 "EControlSetInterface" ); |
|
1494 r = Kern::ThreadRawRead(iClient, a2, &ifcInfo, sizeof(ifcInfo)); |
1599 r = Kern::ThreadRawRead(iClient, a2, &ifcInfo, sizeof(ifcInfo)); |
1495 if (r != KErrNone) |
1600 if (r != KErrNone) |
1496 PanicClientThread(r); |
1601 PanicClientThread(r); |
1497 if (iValidInterface && (iDeviceState == EUsbcDeviceStateConfigured)) |
1602 if (iValidInterface && (iDeviceState == EUsbcDeviceStateConfigured)) |
1498 { |
1603 { |
1514 } |
1619 } |
1515 |
1620 |
1516 break; |
1621 break; |
1517 |
1622 |
1518 case RDevUsbcClient::EControlReleaseInterface: |
1623 case RDevUsbcClient::EControlReleaseInterface: |
1519 __KTRACE_OPT(KUSB, Kern::Printf("EControlReleaseInterface")); |
1624 OstTraceDef0( OST_TRACE_CATEGORY_RND, TRACE_NORMAL, DLDDUSBCCHANNEL_DOCONTROL_DUP46, |
1625 "EControlReleaseInterface" ); |
|
1520 r = iController->ReleaseInterface(this, (TInt) a1); |
1626 r = iController->ReleaseInterface(this, (TInt) a1); |
1521 if (r == KErrNone) |
1627 if (r == KErrNone) |
1522 { |
1628 { |
1523 DestroyInterface((TUint) a1); |
1629 DestroyInterface((TUint) a1); |
1524 } |
1630 } |
1525 else |
1631 else |
1526 { |
1632 { |
1527 __KTRACE_OPT(KPANIC, Kern::Printf(" Error in PIL: LDD interface won't be released.")); |
1633 OstTraceDef0( OST_TRACE_CATEGORY_RND, TRACE_FATAL, DLDDUSBCCHANNEL_DOCONTROL_DUP47, |
1634 " Error in PIL: LDD interface won't be released." ); |
|
1528 } |
1635 } |
1529 break; |
1636 break; |
1530 |
1637 |
1531 case RDevUsbcClient::EControlSetCSInterfaceDescriptor: |
1638 case RDevUsbcClient::EControlSetCSInterfaceDescriptor: |
1532 __KTRACE_OPT(KUSB, Kern::Printf("EControlSetCSInterfaceDescriptor")); |
1639 OstTraceDef0( OST_TRACE_CATEGORY_RND, TRACE_NORMAL, DLDDUSBCCHANNEL_DOCONTROL_DUP48, |
1640 "EControlSetCSInterfaceDescriptor" ); |
|
1533 r = Kern::ThreadRawRead(iClient, a1, &desInfo, sizeof(desInfo)); |
1641 r = Kern::ThreadRawRead(iClient, a1, &desInfo, sizeof(desInfo)); |
1534 if (r != KErrNone) |
1642 if (r != KErrNone) |
1535 PanicClientThread(r); |
1643 PanicClientThread(r); |
1536 r = iController->SetCSInterfaceDescriptorBlock(iClient, this, desInfo.iSetting, |
1644 r = iController->SetCSInterfaceDescriptorBlock(iClient, this, desInfo.iSetting, |
1537 *reinterpret_cast<const TDes8*>(desInfo.iArg), |
1645 *reinterpret_cast<const TDes8*>(desInfo.iArg), |
1538 desInfo.iSize); |
1646 desInfo.iSize); |
1539 break; |
1647 break; |
1540 |
1648 |
1541 case RDevUsbcClient::EControlSetCSEndpointDescriptor: |
1649 case RDevUsbcClient::EControlSetCSEndpointDescriptor: |
1542 __KTRACE_OPT(KUSB, Kern::Printf("EControlSetCSEndpointDescriptor")); |
1650 OstTraceDef0( OST_TRACE_CATEGORY_RND, TRACE_NORMAL, DLDDUSBCCHANNEL_DOCONTROL_DUP49, |
1651 "EControlSetCSEndpointDescriptor" ); |
|
1543 r = Kern::ThreadRawRead(iClient, a1, &desInfo, sizeof(desInfo)); |
1652 r = Kern::ThreadRawRead(iClient, a1, &desInfo, sizeof(desInfo)); |
1544 if (r != KErrNone) |
1653 if (r != KErrNone) |
1545 PanicClientThread(r); |
1654 PanicClientThread(r); |
1546 ep = EpFromAlternateSetting(desInfo.iSetting, desInfo.iEndpoint); |
1655 ep = EpFromAlternateSetting(desInfo.iSetting, desInfo.iEndpoint); |
1547 r = iController->SetCSEndpointDescriptorBlock(iClient, this, desInfo.iSetting, ep, |
1656 r = iController->SetCSEndpointDescriptorBlock(iClient, this, desInfo.iSetting, ep, |
1548 *reinterpret_cast<const TDes8*>(desInfo.iArg), |
1657 *reinterpret_cast<const TDes8*>(desInfo.iArg), |
1549 desInfo.iSize); |
1658 desInfo.iSize); |
1550 break; |
1659 break; |
1551 |
1660 |
1552 case RDevUsbcClient::EControlGetStringDescriptorLangId: |
1661 case RDevUsbcClient::EControlGetStringDescriptorLangId: |
1553 __KTRACE_OPT(KUSB, Kern::Printf("EControlGetStringDescriptorLangId")); |
1662 OstTraceDef0( OST_TRACE_CATEGORY_RND, TRACE_NORMAL, DLDDUSBCCHANNEL_DOCONTROL_DUP50, |
1663 "EControlGetStringDescriptorLangId" ); |
|
1554 r = iController->GetStringDescriptorLangId(iClient, *((TDes8*) a1)); |
1664 r = iController->GetStringDescriptorLangId(iClient, *((TDes8*) a1)); |
1555 break; |
1665 break; |
1556 |
1666 |
1557 case RDevUsbcClient::EControlSetStringDescriptorLangId: |
1667 case RDevUsbcClient::EControlSetStringDescriptorLangId: |
1558 __KTRACE_OPT(KUSB, Kern::Printf("EControlSetStringDescriptorLangId")); |
1668 OstTraceDef0( OST_TRACE_CATEGORY_RND, TRACE_NORMAL, DLDDUSBCCHANNEL_DOCONTROL_DUP51, |
1669 "EControlSetStringDescriptorLangId" ); |
|
1559 r = iController->SetStringDescriptorLangId(reinterpret_cast<TUint>(a1)); |
1670 r = iController->SetStringDescriptorLangId(reinterpret_cast<TUint>(a1)); |
1560 break; |
1671 break; |
1561 |
1672 |
1562 case RDevUsbcClient::EControlGetManufacturerStringDescriptor: |
1673 case RDevUsbcClient::EControlGetManufacturerStringDescriptor: |
1563 __KTRACE_OPT(KUSB, Kern::Printf("EControlGetManufacturerStringDescriptor")); |
1674 OstTraceDef0( OST_TRACE_CATEGORY_RND, TRACE_NORMAL, DLDDUSBCCHANNEL_DOCONTROL_DUP52, |
1675 "EControlGetManufacturerStringDescriptor" ); |
|
1564 r = iController->GetManufacturerStringDescriptor(iClient, *((TPtr8*) a1)); |
1676 r = iController->GetManufacturerStringDescriptor(iClient, *((TPtr8*) a1)); |
1565 break; |
1677 break; |
1566 |
1678 |
1567 case RDevUsbcClient::EControlSetManufacturerStringDescriptor: |
1679 case RDevUsbcClient::EControlSetManufacturerStringDescriptor: |
1568 __KTRACE_OPT(KUSB, Kern::Printf("EControlSetManufacturerStringDescriptor")); |
1680 OstTraceDef0( OST_TRACE_CATEGORY_RND, TRACE_NORMAL, DLDDUSBCCHANNEL_DOCONTROL_DUP53, |
1681 "EControlSetManufacturerStringDescriptor" ); |
|
1569 r = iController->SetManufacturerStringDescriptor(iClient, *((TPtr8*) a1)); |
1682 r = iController->SetManufacturerStringDescriptor(iClient, *((TPtr8*) a1)); |
1570 break; |
1683 break; |
1571 |
1684 |
1572 case RDevUsbcClient::EControlRemoveManufacturerStringDescriptor: |
1685 case RDevUsbcClient::EControlRemoveManufacturerStringDescriptor: |
1573 __KTRACE_OPT(KUSB, Kern::Printf("EControlRemoveManufacturerStringDescriptor")); |
1686 OstTraceDef0( OST_TRACE_CATEGORY_RND, TRACE_NORMAL, DLDDUSBCCHANNEL_DOCONTROL_DUP54, |
1687 "EControlRemoveManufacturerStringDescriptor" ); |
|
1574 r = iController->RemoveManufacturerStringDescriptor(); |
1688 r = iController->RemoveManufacturerStringDescriptor(); |
1575 break; |
1689 break; |
1576 |
1690 |
1577 case RDevUsbcClient::EControlGetProductStringDescriptor: |
1691 case RDevUsbcClient::EControlGetProductStringDescriptor: |
1578 __KTRACE_OPT(KUSB, Kern::Printf("EControlGetProductStringDescriptor")); |
1692 OstTraceDef0( OST_TRACE_CATEGORY_RND, TRACE_NORMAL, DLDDUSBCCHANNEL_DOCONTROL_DUP55, |
1693 "EControlGetProductStringDescriptor" ); |
|
1579 r = iController->GetProductStringDescriptor(iClient, *((TPtr8*) a1)); |
1694 r = iController->GetProductStringDescriptor(iClient, *((TPtr8*) a1)); |
1580 break; |
1695 break; |
1581 |
1696 |
1582 case RDevUsbcClient::EControlSetProductStringDescriptor: |
1697 case RDevUsbcClient::EControlSetProductStringDescriptor: |
1583 __KTRACE_OPT(KUSB, Kern::Printf("EControlSetProductStringDescriptor")); |
1698 OstTraceDef0( OST_TRACE_CATEGORY_RND, TRACE_NORMAL, DLDDUSBCCHANNEL_DOCONTROL_DUP56, |
1699 "EControlSetProductStringDescriptor" ); |
|
1584 r = iController->SetProductStringDescriptor(iClient, *((TPtr8*) a1)); |
1700 r = iController->SetProductStringDescriptor(iClient, *((TPtr8*) a1)); |
1585 break; |
1701 break; |
1586 |
1702 |
1587 case RDevUsbcClient::EControlRemoveProductStringDescriptor: |
1703 case RDevUsbcClient::EControlRemoveProductStringDescriptor: |
1588 __KTRACE_OPT(KUSB, Kern::Printf("EControlRemoveProductStringDescriptor")); |
1704 OstTraceDef0( OST_TRACE_CATEGORY_RND, TRACE_NORMAL, DLDDUSBCCHANNEL_DOCONTROL_DUP57, |
1705 "EControlRemoveProductStringDescriptor" ); |
|
1589 r = iController->RemoveProductStringDescriptor(); |
1706 r = iController->RemoveProductStringDescriptor(); |
1590 break; |
1707 break; |
1591 |
1708 |
1592 case RDevUsbcClient::EControlGetSerialNumberStringDescriptor: |
1709 case RDevUsbcClient::EControlGetSerialNumberStringDescriptor: |
1593 __KTRACE_OPT(KUSB, Kern::Printf("EControlGetSerialNumberStringDescriptor")); |
1710 OstTraceDef0( OST_TRACE_CATEGORY_RND, TRACE_NORMAL, DLDDUSBCCHANNEL_DOCONTROL_DUP58, |
1711 "EControlGetSerialNumberStringDescriptor" ); |
|
1594 r = iController->GetSerialNumberStringDescriptor(iClient, *((TPtr8*) a1)); |
1712 r = iController->GetSerialNumberStringDescriptor(iClient, *((TPtr8*) a1)); |
1595 break; |
1713 break; |
1596 |
1714 |
1597 case RDevUsbcClient::EControlSetSerialNumberStringDescriptor: |
1715 case RDevUsbcClient::EControlSetSerialNumberStringDescriptor: |
1598 __KTRACE_OPT(KUSB, Kern::Printf("EControlSetSerialNumberStringDescriptor")); |
1716 OstTraceDef0( OST_TRACE_CATEGORY_RND, TRACE_NORMAL, DLDDUSBCCHANNEL_DOCONTROL_DUP59, |
1717 "EControlSetSerialNumberStringDescriptor" ); |
|
1599 r = iController->SetSerialNumberStringDescriptor(iClient, *((TPtr8*) a1)); |
1718 r = iController->SetSerialNumberStringDescriptor(iClient, *((TPtr8*) a1)); |
1600 break; |
1719 break; |
1601 |
1720 |
1602 case RDevUsbcClient::EControlRemoveSerialNumberStringDescriptor: |
1721 case RDevUsbcClient::EControlRemoveSerialNumberStringDescriptor: |
1603 __KTRACE_OPT(KUSB, Kern::Printf("EControlRemoveSerialNumberStringDescriptor")); |
1722 OstTraceDef0( OST_TRACE_CATEGORY_RND, TRACE_NORMAL, DLDDUSBCCHANNEL_DOCONTROL_DUP60, |
1723 "EControlRemoveSerialNumberStringDescriptor" ); |
|
1604 r = iController->RemoveSerialNumberStringDescriptor(); |
1724 r = iController->RemoveSerialNumberStringDescriptor(); |
1605 break; |
1725 break; |
1606 |
1726 |
1607 case RDevUsbcClient::EControlGetConfigurationStringDescriptor: |
1727 case RDevUsbcClient::EControlGetConfigurationStringDescriptor: |
1608 __KTRACE_OPT(KUSB, Kern::Printf("EControlGetConfigurationStringDescriptor")); |
1728 OstTraceDef0( OST_TRACE_CATEGORY_RND, TRACE_NORMAL, DLDDUSBCCHANNEL_DOCONTROL_DUP61, |
1729 "EControlGetConfigurationStringDescriptor" ); |
|
1609 r = iController->GetConfigurationStringDescriptor(iClient, *((TPtr8*) a1)); |
1730 r = iController->GetConfigurationStringDescriptor(iClient, *((TPtr8*) a1)); |
1610 break; |
1731 break; |
1611 |
1732 |
1612 case RDevUsbcClient::EControlSetConfigurationStringDescriptor: |
1733 case RDevUsbcClient::EControlSetConfigurationStringDescriptor: |
1613 __KTRACE_OPT(KUSB, Kern::Printf("EControlSetConfigurationStringDescriptor")); |
1734 OstTraceDef0( OST_TRACE_CATEGORY_RND, TRACE_NORMAL, DLDDUSBCCHANNEL_DOCONTROL_DUP62, |
1735 "EControlSetConfigurationStringDescriptor" ); |
|
1614 r = iController->SetConfigurationStringDescriptor(iClient, *((TPtr8*) a1)); |
1736 r = iController->SetConfigurationStringDescriptor(iClient, *((TPtr8*) a1)); |
1615 break; |
1737 break; |
1616 |
1738 |
1617 case RDevUsbcClient::EControlRemoveConfigurationStringDescriptor: |
1739 case RDevUsbcClient::EControlRemoveConfigurationStringDescriptor: |
1618 __KTRACE_OPT(KUSB, Kern::Printf("EControlRemoveConfigurationStringDescriptor")); |
1740 OstTraceDef0( OST_TRACE_CATEGORY_RND, TRACE_NORMAL, DLDDUSBCCHANNEL_DOCONTROL_DUP63, |
1741 "EControlRemoveConfigurationStringDescriptor" ); |
|
1619 r = iController->RemoveConfigurationStringDescriptor(); |
1742 r = iController->RemoveConfigurationStringDescriptor(); |
1620 break; |
1743 break; |
1621 |
1744 |
1622 case RDevUsbcClient::EControlGetStringDescriptor: |
1745 case RDevUsbcClient::EControlGetStringDescriptor: |
1623 __KTRACE_OPT(KUSB, Kern::Printf("EControlGetStringDescriptor")); |
1746 OstTraceDef0( OST_TRACE_CATEGORY_RND, TRACE_NORMAL, DLDDUSBCCHANNEL_DOCONTROL_DUP64, |
1747 "EControlGetStringDescriptor" ); |
|
1624 r = iController->GetStringDescriptor(iClient, (TUint8) (TInt) a1, *((TPtr8*) a2)); |
1748 r = iController->GetStringDescriptor(iClient, (TUint8) (TInt) a1, *((TPtr8*) a2)); |
1625 break; |
1749 break; |
1626 |
1750 |
1627 case RDevUsbcClient::EControlSetStringDescriptor: |
1751 case RDevUsbcClient::EControlSetStringDescriptor: |
1628 __KTRACE_OPT(KUSB, Kern::Printf("EControlSetStringDescriptor")); |
1752 OstTraceDef0( OST_TRACE_CATEGORY_RND, TRACE_NORMAL, DLDDUSBCCHANNEL_DOCONTROL_DUP65, |
1753 "EControlSetStringDescriptor" ); |
|
1629 r = iController->SetStringDescriptor(iClient, (TUint8) (TInt) a1, *((TPtr8*) a2)); |
1754 r = iController->SetStringDescriptor(iClient, (TUint8) (TInt) a1, *((TPtr8*) a2)); |
1630 break; |
1755 break; |
1631 |
1756 |
1632 case RDevUsbcClient::EControlRemoveStringDescriptor: |
1757 case RDevUsbcClient::EControlRemoveStringDescriptor: |
1633 __KTRACE_OPT(KUSB, Kern::Printf("EControlRemoveStringDescriptor")); |
1758 OstTraceDef0( OST_TRACE_CATEGORY_RND, TRACE_NORMAL, DLDDUSBCCHANNEL_DOCONTROL_DUP66, |
1759 "EControlRemoveStringDescriptor" ); |
|
1634 r = iController->RemoveStringDescriptor((TUint8) (TInt) a1); |
1760 r = iController->RemoveStringDescriptor((TUint8) (TInt) a1); |
1635 break; |
1761 break; |
1636 |
1762 |
1637 case RDevUsbcClient::EControlAllocateEndpointResource: |
1763 case RDevUsbcClient::EControlAllocateEndpointResource: |
1638 epRes = (TUsbcEndpointResource)((TInt) a2); |
1764 epRes = (TUsbcEndpointResource)((TInt) a2); |
1687 r = iController->GetOtgFeatures(iClient, *((TDes8*)a1)); |
1813 r = iController->GetOtgFeatures(iClient, *((TDes8*)a1)); |
1688 } |
1814 } |
1689 break; |
1815 break; |
1690 |
1816 |
1691 default: |
1817 default: |
1692 __KTRACE_OPT(KUSB, Kern::Printf("Function code not supported")); |
1818 OstTraceDef0( OST_TRACE_CATEGORY_RND, TRACE_NORMAL, DLDDUSBCCHANNEL_DOCONTROL_DUP67, |
1819 "Function code not supported" ); |
|
1693 r = KErrNotSupported; |
1820 r = KErrNotSupported; |
1694 } |
1821 } |
1695 |
1822 |
1696 return r; |
1823 return r; |
1697 } |
1824 } |
1702 TUsbcInterfaceInfoBuf ifc_info_buf; |
1829 TUsbcInterfaceInfoBuf ifc_info_buf; |
1703 TUsbcInterfaceInfoBuf* const ifc_info_buf_ptr = aInfoBuf->iInterfaceData; |
1830 TUsbcInterfaceInfoBuf* const ifc_info_buf_ptr = aInfoBuf->iInterfaceData; |
1704 const TInt srcLen = Kern::ThreadGetDesLength(iClient, ifc_info_buf_ptr); |
1831 const TInt srcLen = Kern::ThreadGetDesLength(iClient, ifc_info_buf_ptr); |
1705 if (srcLen < ifc_info_buf.Length()) |
1832 if (srcLen < ifc_info_buf.Length()) |
1706 { |
1833 { |
1707 __KTRACE_OPT(KUSB, Kern::Printf("SetInterface can't copy")); |
1834 OstTraceDef0( OST_TRACE_CATEGORY_RND, TRACE_NORMAL, DLDDUSBCCHANNEL_SETINTERFACE, |
1835 "SetInterface can't copy" ); |
|
1708 PanicClientThread(EDesOverflow); |
1836 PanicClientThread(EDesOverflow); |
1709 } |
1837 } |
1710 |
1838 |
1711 TInt r = Kern::ThreadDesRead(iClient, ifc_info_buf_ptr, ifc_info_buf, 0, KChunkShiftBy0); |
1839 TInt r = Kern::ThreadDesRead(iClient, ifc_info_buf_ptr, ifc_info_buf, 0, KChunkShiftBy0); |
1712 if (r != KErrNone) |
1840 if (r != KErrNone) |
1713 { |
1841 { |
1714 __KTRACE_OPT(KUSB, Kern::Printf("SetInterface Copy failed reason=%d", r)); |
1842 OstTraceDef1( OST_TRACE_CATEGORY_RND, TRACE_NORMAL, DLDDUSBCCHANNEL_SETINTERFACE_DUP1, |
1843 "SetInterface Copy failed reason=%d", r ); |
|
1715 PanicClientThread(r); |
1844 PanicClientThread(r); |
1716 } |
1845 } |
1717 |
1846 |
1718 TUsbcEndpointInfo* pEndpointData = ifc_info_buf().iEndpointData; |
1847 TUsbcEndpointInfo* pEndpointData = ifc_info_buf().iEndpointData; |
1719 |
1848 |
1720 // If an alternate interface is being asked for then do nothing, |
1849 // If an alternate interface is being asked for then do nothing, |
1721 // just pass it down to the Controller. |
1850 // just pass it down to the Controller. |
1722 const TInt num_endpoints = ifc_info_buf().iTotalEndpointsUsed; |
1851 const TInt num_endpoints = ifc_info_buf().iTotalEndpointsUsed; |
1723 __KTRACE_OPT(KUSB, Kern::Printf("SetInterface num_endpoints=%d", num_endpoints)); |
1852 OstTraceDef1( OST_TRACE_CATEGORY_RND, TRACE_NORMAL, DLDDUSBCCHANNEL_SETINTERFACE_DUP2, |
1853 "SetInterface num_endpoints=%d", num_endpoints ); |
|
1724 |
1854 |
1725 // [The next 4 variables have to be initialized here because of the goto's that follow.] |
1855 // [The next 4 variables have to be initialized here because of the goto's that follow.] |
1726 // Both IN and OUT buffers will be fully cached: |
1856 // Both IN and OUT buffers will be fully cached: |
1727 const TUint32 cacheAttribs = EMapAttrSupRw | EMapAttrCachedMax; |
1857 const TUint32 cacheAttribs = EMapAttrSupRw | EMapAttrCachedMax; |
1728 const TUint32 bandwidthPriority = aInfoBuf->iBandwidthPriority; |
1858 const TUint32 bandwidthPriority = aInfoBuf->iBandwidthPriority; |
1729 |
1859 |
1730 // Supports ep0+5 endpoints |
1860 // Supports ep0+5 endpoints |
1731 TInt real_ep_numbers[6] = {-1, -1, -1, -1, -1, -1}; |
1861 TInt real_ep_numbers[6] = {-1, -1, -1, -1, -1, -1}; |
1732 |
1862 |
1733 // See if PIL will accept this interface |
1863 // See if PIL will accept this interface |
1734 __KTRACE_OPT(KUSB, Kern::Printf("SetInterface Calling controller")); |
1864 OstTraceDef0( OST_TRACE_CATEGORY_RND, TRACE_NORMAL, DLDDUSBCCHANNEL_SETINTERFACE_DUP3, |
1865 "SetInterface Calling controller" ); |
|
1735 r = iController->SetInterface(this, |
1866 r = iController->SetInterface(this, |
1736 iClient, |
1867 iClient, |
1737 aInterfaceNumber, |
1868 aInterfaceNumber, |
1738 ifc_info_buf().iClass, |
1869 ifc_info_buf().iClass, |
1739 aInfoBuf->iString, |
1870 aInfoBuf->iString, |
1740 ifc_info_buf().iTotalEndpointsUsed, |
1871 ifc_info_buf().iTotalEndpointsUsed, |
1741 ifc_info_buf().iEndpointData, |
1872 ifc_info_buf().iEndpointData, |
1742 &real_ep_numbers, |
1873 &real_ep_numbers, |
1743 ifc_info_buf().iFeatureWord); |
1874 ifc_info_buf().iFeatureWord); |
1744 |
1875 |
1745 __KTRACE_OPT(KUSB, Kern::Printf("SetInterface controller returned %d", r)); |
1876 OstTraceDef1( OST_TRACE_CATEGORY_RND, TRACE_NORMAL, DLDDUSBCCHANNEL_SETINTERFACE_DUP4, |
1877 "SetInterface controller returned %d", r ); |
|
1746 if (r != KErrNone) |
1878 if (r != KErrNone) |
1747 { |
1879 { |
1748 __KTRACE_OPT(KPANIC, Kern::Printf("SetInterface failed reason=%d", r)); |
1880 OstTraceDef1( OST_TRACE_CATEGORY_RND, TRACE_NORMAL, DLDDUSBCCHANNEL_SETINTERFACE_DUP5, |
1881 "SetInterface failed reason=%d", r ); |
|
1749 return r; |
1882 return r; |
1750 } |
1883 } |
1751 |
1884 |
1752 // [The next variable has to be initialized here because of the goto's that follow.] |
1885 // [The next variable has to be initialized here because of the goto's that follow.] |
1753 TUsbcAlternateSettingList* alternateSettingListRec; |
1886 TUsbcAlternateSettingList* alternateSettingListRec; |
1754 |
1887 |
1755 // ep0 |
1888 // ep0 |
1756 if (iEndpoint[0] == NULL) |
1889 if (iEndpoint[0] == NULL) |
1757 { |
1890 { |
1758 __KTRACE_OPT(KUSB, Kern::Printf("SetInterface 11")); |
1891 OstTraceDef0( OST_TRACE_CATEGORY_RND, TRACE_NORMAL, DLDDUSBCCHANNEL_SETINTERFACE_DUP6, |
1892 "SetInterface 11" ); |
|
1759 r = SetupEp0(); |
1893 r = SetupEp0(); |
1760 if (r != KErrNone) |
1894 if (r != KErrNone) |
1761 { |
1895 { |
1762 __KTRACE_OPT(KPANIC, Kern::Printf(" Error: SetupEp0() failed")); |
1896 OstTraceDef0( OST_TRACE_CATEGORY_RND, TRACE_FATAL, DLDDUSBCCHANNEL_SETINTERFACE_DUP7, |
1897 " Error: SetupEp0() failed" ); |
|
1763 DestroyEp0(); |
1898 DestroyEp0(); |
1764 goto F1; |
1899 goto F1; |
1765 } |
1900 } |
1766 } |
1901 } |
1767 |
1902 |
1770 { |
1905 { |
1771 r = KErrNoMemory; |
1906 r = KErrNoMemory; |
1772 goto F1; |
1907 goto F1; |
1773 } |
1908 } |
1774 |
1909 |
1775 __KTRACE_OPT(KUSB, Kern::Printf("DLddUsbcChannel::SetInterface num_endpoints=%d", num_endpoints)); |
1910 OstTraceDef1( OST_TRACE_CATEGORY_RND, TRACE_NORMAL, DLDDUSBCCHANNEL_SETINTERFACE_DUP8, |
1911 "DLddUsbcChannel::SetInterface num_endpoints=%d", num_endpoints ); |
|
1776 |
1912 |
1777 // other endpoints |
1913 // other endpoints |
1778 // calculate the total buffer size |
1914 // calculate the total buffer size |
1779 for (TInt i = 1; i <= num_endpoints; i++, pEndpointData++) |
1915 for (TInt i = 1; i <= num_endpoints; i++, pEndpointData++) |
1780 { |
1916 { |
1781 __KTRACE_OPT(KUSB, Kern::Printf("SetInterface for ep=%d", i)); |
1917 OstTraceDef1( OST_TRACE_CATEGORY_RND, TRACE_NORMAL, DLDDUSBCCHANNEL_SETINTERFACE_DUP9, |
1918 "SetInterface for ep=%d", i ); |
|
1782 if (!ValidateEndpoint(pEndpointData)) |
1919 if (!ValidateEndpoint(pEndpointData)) |
1783 { |
1920 { |
1784 r = KErrUsbBadEndpoint; |
1921 r = KErrUsbBadEndpoint; |
1785 goto F2; |
1922 goto F2; |
1786 } |
1923 } |
1796 { |
1933 { |
1797 r = KErrNoMemory; |
1934 r = KErrNoMemory; |
1798 goto F2; |
1935 goto F2; |
1799 } |
1936 } |
1800 |
1937 |
1801 __KTRACE_OPT(KUSB, Kern::Printf("SetInterface for ep=%d rec=0x%08x ep==0x%08x", |
1938 OstTraceDefExt3( OST_TRACE_CATEGORY_RND, TRACE_NORMAL, DLDDUSBCCHANNEL_SETINTERFACE_DUP10, |
1802 i, alternateSettingListRec, ep)); |
1939 "SetInterface for ep=%d rec=0x%08x ep==0x%08x", i, |
1940 reinterpret_cast<TUint>(alternateSettingListRec), reinterpret_cast<TUint>(ep) ); |
|
1803 } |
1941 } |
1804 |
1942 |
1805 // buf size of each endpoint |
1943 // buf size of each endpoint |
1806 TInt bufSizes[KMaxEndpointsPerClient + 1]; |
1944 TInt bufSizes[KMaxEndpointsPerClient + 1]; |
1807 TInt epNum[KMaxEndpointsPerClient + 1]; |
1945 TInt epNum[KMaxEndpointsPerClient + 1]; |
1817 for( TInt i=1;i<=num_endpoints;i++ ) |
1955 for( TInt i=1;i<=num_endpoints;i++ ) |
1818 { |
1956 { |
1819 bufSizes[i] = alternateSettingListRec->iEndpoint[i]->BufferSize(); |
1957 bufSizes[i] = alternateSettingListRec->iEndpoint[i]->BufferSize(); |
1820 } |
1958 } |
1821 |
1959 |
1822 __KTRACE_OPT(KUSB, Kern::Printf("Sort the endpoints:")); |
1960 OstTraceDef0( OST_TRACE_CATEGORY_RND, TRACE_NORMAL, DLDDUSBCCHANNEL_SETINTERFACE_DUP11, |
1961 "Sort the endpoints:" ); |
|
1823 |
1962 |
1824 // sort the endpoint number by the bufsize decreasely |
1963 // sort the endpoint number by the bufsize decreasely |
1825 for( TInt i=1;i<num_endpoints;i++ ) |
1964 for( TInt i=1;i<num_endpoints;i++ ) |
1826 { |
1965 { |
1827 TInt epMaxBuf = i; |
1966 TInt epMaxBuf = i; |
1840 epNum[i] = epNum[epMaxBuf]; |
1979 epNum[i] = epNum[epMaxBuf]; |
1841 epNum[epMaxBuf] = temp; |
1980 epNum[epMaxBuf] = temp; |
1842 |
1981 |
1843 alternateSettingListRec->iEpNumDeOrderedByBufSize[i] = epNum[i]; |
1982 alternateSettingListRec->iEpNumDeOrderedByBufSize[i] = epNum[i]; |
1844 |
1983 |
1845 __KTRACE_OPT(KUSB, Kern::Printf(" %d:%d", epNum[i], bufSizes[i])); |
1984 OstTraceDefExt2( OST_TRACE_CATEGORY_RND, TRACE_NORMAL, DLDDUSBCCHANNEL_SETINTERFACE_DUP12, |
1985 " %d:%d", epNum[i], bufSizes[i] ); |
|
1846 } |
1986 } |
1847 alternateSettingListRec->iEpNumDeOrderedByBufSize[num_endpoints] = epNum[num_endpoints]; |
1987 alternateSettingListRec->iEpNumDeOrderedByBufSize[num_endpoints] = epNum[num_endpoints]; |
1848 __KTRACE_OPT(KUSB, Kern::Printf(" %d:%d", epNum[num_endpoints], bufSizes[num_endpoints])); |
1988 OstTraceDefExt2( OST_TRACE_CATEGORY_RND, TRACE_NORMAL, DLDDUSBCCHANNEL_SETINTERFACE_DUP13, |
1849 __KTRACE_OPT(KUSB, Kern::Printf("\n")); |
1989 " %d:%d", epNum[num_endpoints], bufSizes[num_endpoints] ); |
1990 OstTraceDef0( OST_TRACE_CATEGORY_RND, TRACE_NORMAL, DLDDUSBCCHANNEL_SETINTERFACE_DUP14, "\n" ); |
|
1850 |
1991 |
1851 // chain in this alternate setting |
1992 // chain in this alternate setting |
1852 alternateSettingListRec->iNext = iAlternateSettingList; |
1993 alternateSettingListRec->iNext = iAlternateSettingList; |
1853 iAlternateSettingList = alternateSettingListRec; |
1994 iAlternateSettingList = alternateSettingListRec; |
1854 alternateSettingListRec->iSetting = aInterfaceNumber; |
1995 alternateSettingListRec->iSetting = aInterfaceNumber; |
1862 } |
2003 } |
1863 |
2004 |
1864 r = SetupInterfaceMemory(iHwChunks, cacheAttribs ); |
2005 r = SetupInterfaceMemory(iHwChunks, cacheAttribs ); |
1865 if( r==KErrNone ) |
2006 if( r==KErrNone ) |
1866 { |
2007 { |
1867 __KTRACE_OPT(KUSB, Kern::Printf("SetInterface ready to exit")); |
2008 OstTraceDef0( OST_TRACE_CATEGORY_RND, TRACE_NORMAL, DLDDUSBCCHANNEL_SETINTERFACE_DUP15, |
2009 "SetInterface ready to exit" ); |
|
1868 |
2010 |
1869 if (aInterfaceNumber == 0) |
2011 if (aInterfaceNumber == 0) |
1870 { |
2012 { |
1871 // make sure we're ready to go with the main interface |
2013 // make sure we're ready to go with the main interface |
1872 iValidInterface = ETrue; |
2014 iValidInterface = ETrue; |
1873 __KTRACE_OPT(KUSB, Kern::Printf("SetInterface SelectAlternateSetting")); |
2015 OstTraceDef0( OST_TRACE_CATEGORY_RND, TRACE_NORMAL, DLDDUSBCCHANNEL_SETINTERFACE_DUP16, |
2016 "SetInterface SelectAlternateSetting" ); |
|
1874 SelectAlternateSetting(0); |
2017 SelectAlternateSetting(0); |
1875 } |
2018 } |
1876 return KErrNone; |
2019 return KErrNone; |
1877 } |
2020 } |
1878 else |
2021 else |
1879 { |
2022 { |
1880 __KTRACE_OPT(KUSB, Kern::Printf("Destroying all interfaces")); |
2023 OstTraceDef0( OST_TRACE_CATEGORY_RND, TRACE_NORMAL, DLDDUSBCCHANNEL_SETINTERFACE_DUP17, |
2024 "Destroying all interfaces" ); |
|
1881 DestroyAllInterfaces(); |
2025 DestroyAllInterfaces(); |
1882 DestroyEp0(); |
2026 DestroyEp0(); |
1883 return r; |
2027 return r; |
1884 } |
2028 } |
1885 |
2029 |
1887 delete alternateSettingListRec; |
2031 delete alternateSettingListRec; |
1888 //Fall through |
2032 //Fall through |
1889 |
2033 |
1890 F1: |
2034 F1: |
1891 #if _DEBUG |
2035 #if _DEBUG |
2036 #ifdef OST_TRACE_COMPILER_IN_USE |
|
1892 TInt r1 = iController->ReleaseInterface(this, aInterfaceNumber); |
2037 TInt r1 = iController->ReleaseInterface(this, aInterfaceNumber); |
1893 __KTRACE_OPT(KUSB, Kern::Printf("Release Interface controller returned %d", r1)); |
2038 #else |
2039 (void) iController->ReleaseInterface(this, aInterfaceNumber); |
|
2040 #endif |
|
2041 OstTraceDef1( OST_TRACE_CATEGORY_DEBUG, TRACE_NORMAL, DLDDUSBCCHANNEL_SETINTERFACE_DUP18, |
|
2042 "Release Interface controller returned %d", r1 ); |
|
1894 #else |
2043 #else |
1895 (void) iController->ReleaseInterface(this, aInterfaceNumber); |
2044 (void) iController->ReleaseInterface(this, aInterfaceNumber); |
1896 #endif |
2045 #endif |
1897 return r; |
2046 return r; |
1898 } |
2047 } |
1907 TBool chunkChanged = EFalse; |
2056 TBool chunkChanged = EFalse; |
1908 TInt numOfEp = asRec->iNumberOfEndpoints; |
2057 TInt numOfEp = asRec->iNumberOfEndpoints; |
1909 |
2058 |
1910 // 1, collect all bufs' sizes for the current interface |
2059 // 1, collect all bufs' sizes for the current interface |
1911 // to realloc all the chunks |
2060 // to realloc all the chunks |
1912 __KTRACE_OPT(KUSB, Kern::Printf("Collect all buffer sizes:")); |
2061 OstTraceDef0( OST_TRACE_CATEGORY_RND, TRACE_NORMAL, DLDDUSBCCHANNEL_SETUPINTERFACEMEMORY, |
2062 "Collect all buffer sizes:" ); |
|
1913 RArray<TInt> bufSizes; |
2063 RArray<TInt> bufSizes; |
1914 for(TInt i=1;i<=numOfEp;i++) |
2064 for(TInt i=1;i<=numOfEp;i++) |
1915 { |
2065 { |
1916 TInt nextEp = asRec->iEpNumDeOrderedByBufSize[i]; |
2066 TInt nextEp = asRec->iEpNumDeOrderedByBufSize[i]; |
1917 TInt epBufCount = asRec->iEndpoint[nextEp]->BufferNumber(); |
2067 TInt epBufCount = asRec->iEndpoint[nextEp]->BufferNumber(); |
1918 __KTRACE_OPT(KUSB, Kern::Printf(" ep %d, buf count %d", nextEp, epBufCount )); |
2068 OstTraceDefExt2( OST_TRACE_CATEGORY_RND, TRACE_NORMAL, DLDDUSBCCHANNEL_SETUPINTERFACEMEMORY_DUP1, |
2069 " ep %d, buf count %d", nextEp, epBufCount ); |
|
1919 for(TInt k=0;k<epBufCount;k++) |
2070 for(TInt k=0;k<epBufCount;k++) |
1920 { |
2071 { |
1921 TInt epBufSize = asRec->iEndpoint[nextEp]->BufferSize(); |
2072 TInt epBufSize = asRec->iEndpoint[nextEp]->BufferSize(); |
1922 TInt r = bufSizes.Append(epBufSize); |
2073 TInt r = bufSizes.Append(epBufSize); |
1923 if(r!=KErrNone) |
2074 if(r!=KErrNone) |
1924 { |
2075 { |
1925 iController->DeRegisterClient(this); |
2076 iController->DeRegisterClient(this); |
1926 bufSizes.Close(); |
2077 bufSizes.Close(); |
1927 return r; |
2078 return r; |
1928 } |
2079 } |
1929 __KTRACE_OPT(KUSB,Kern::Printf(" %d", epBufSize )); |
2080 OstTraceDef1( OST_TRACE_CATEGORY_RND, TRACE_NORMAL, DLDDUSBCCHANNEL_SETUPINTERFACEMEMORY_DUP2, |
2081 " %d", epBufSize ); |
|
1930 } |
2082 } |
1931 __KTRACE_OPT(KUSB, Kern::Printf("\n")); |
2083 OstTraceDef0( OST_TRACE_CATEGORY_RND, TRACE_NORMAL, DLDDUSBCCHANNEL_SETUPINTERFACEMEMORY_DUP3, "\n" ); |
1932 |
2084 |
1933 } |
2085 } |
1934 |
2086 |
1935 // 2, alloc the buffer decreasely, biggest-->smallest |
2087 // 2, alloc the buffer decreasely, biggest-->smallest |
1936 // 2.1 check the existing chunks |
2088 // 2.1 check the existing chunks |
1937 TInt bufCount = bufSizes.Count(); |
2089 TInt bufCount = bufSizes.Count(); |
1938 __KTRACE_OPT(KUSB, Kern::Printf(" ep buf number needed %d", bufCount )); |
2090 OstTraceDef1( OST_TRACE_CATEGORY_RND, TRACE_NORMAL, DLDDUSBCCHANNEL_SETUPINTERFACEMEMORY_DUP4, |
1939 __KTRACE_OPT(KUSB, Kern::Printf(" chunks available %d", aHwChunks.Count() )); |
2091 " ep buf number needed %d", bufCount ); |
2092 OstTraceDef1( OST_TRACE_CATEGORY_RND, TRACE_NORMAL, DLDDUSBCCHANNEL_SETUPINTERFACEMEMORY_DUP5, |
|
2093 " chunks available %d", aHwChunks.Count() ); |
|
1940 |
2094 |
1941 TInt chunkInd = 0; |
2095 TInt chunkInd = 0; |
1942 while( (chunkInd<aHwChunks.Count())&& (chunkInd<bufCount)) |
2096 while( (chunkInd<aHwChunks.Count())&& (chunkInd<bufCount)) |
1943 { |
2097 { |
1944 TUint8* oldAddr = NULL; |
2098 TUint8* oldAddr = NULL; |
1945 oldAddr = reinterpret_cast<TUint8*>(aHwChunks[chunkInd]->LinearAddress()); |
2099 oldAddr = reinterpret_cast<TUint8*>(aHwChunks[chunkInd]->LinearAddress()); |
1946 |
2100 |
1947 DPlatChunkHw* chunk = ReAllocate(bufSizes[chunkInd], aHwChunks[chunkInd], aCacheAttribs); |
2101 DPlatChunkHw* chunk = ReAllocate(bufSizes[chunkInd], aHwChunks[chunkInd], aCacheAttribs); |
1948 if (chunk == NULL) |
2102 if (chunk == NULL) |
1949 { |
2103 { |
1950 __KTRACE_OPT(KUSB, Kern::Printf("Failed to alloc chunks size %d!", bufSizes[chunkInd])); |
2104 OstTraceDef1( OST_TRACE_CATEGORY_RND, TRACE_NORMAL, DLDDUSBCCHANNEL_SETUPINTERFACEMEMORY_DUP6, |
2105 "Failed to alloc chunks size %d!", bufSizes[chunkInd] ); |
|
1951 // lost all interfaces: |
2106 // lost all interfaces: |
1952 // Tell Controller to release Interface and h/w resources associated with this |
2107 // Tell Controller to release Interface and h/w resources associated with this |
1953 iController->DeRegisterClient(this); |
2108 iController->DeRegisterClient(this); |
1954 bufSizes.Close(); |
2109 bufSizes.Close(); |
1955 return KErrNoMemory; |
2110 return KErrNoMemory; |
1956 } |
2111 } |
1957 else |
2112 else |
1958 { |
2113 { |
1959 // Parcel out the memory between endpoints |
2114 // Parcel out the memory between endpoints |
1960 TUint8* newAddr = reinterpret_cast<TUint8*>(chunk->LinearAddress()); |
2115 TUint8* newAddr = reinterpret_cast<TUint8*>(chunk->LinearAddress()); |
1961 __KTRACE_OPT(KUSB, Kern::Printf("SetupInterfaceMemory alloc new chunk=0x%x, size=%d", newAddr,bufSizes[chunkInd])); |
2116 OstTraceDefExt2( OST_TRACE_CATEGORY_RND, TRACE_NORMAL, DLDDUSBCCHANNEL_SETUPINTERFACEMEMORY_DUP7, |
2117 "SetupInterfaceMemory alloc new chunk=0x%x, size=%d", |
|
2118 reinterpret_cast<TUint>(newAddr), bufSizes[chunkInd] ); |
|
1962 // The check is important to avoid chunkChanged to be corrupted. |
2119 // The check is important to avoid chunkChanged to be corrupted. |
1963 // This code change is to fix the problem that one chunk is used by multiple interfaces. |
2120 // This code change is to fix the problem that one chunk is used by multiple interfaces. |
1964 if(!chunkChanged) |
2121 if(!chunkChanged) |
1965 { |
2122 { |
1966 chunkChanged = (newAddr != oldAddr); |
2123 chunkChanged = (newAddr != oldAddr); |
1975 { |
2132 { |
1976 DPlatChunkHw* chunk = NULL; |
2133 DPlatChunkHw* chunk = NULL; |
1977 chunk = Allocate( bufSizes[chunkInd], aCacheAttribs); |
2134 chunk = Allocate( bufSizes[chunkInd], aCacheAttribs); |
1978 if (chunk == NULL) |
2135 if (chunk == NULL) |
1979 { |
2136 { |
1980 __KTRACE_OPT(KUSB, Kern::Printf("Failed to alloc chunk, size %d!", bufSizes[chunkInd])); |
2137 OstTraceDef1( OST_TRACE_CATEGORY_RND, TRACE_NORMAL, DLDDUSBCCHANNEL_SETUPINTERFACEMEMORY_DUP8, |
2138 "Failed to alloc chunk, size %d!", bufSizes[chunkInd] ); |
|
1981 // lost all interfaces: |
2139 // lost all interfaces: |
1982 // Tell Controller to release Interface and h/w resources associated with this |
2140 // Tell Controller to release Interface and h/w resources associated with this |
1983 iController->DeRegisterClient(this); |
2141 iController->DeRegisterClient(this); |
1984 bufSizes.Close(); |
2142 bufSizes.Close(); |
1985 return KErrNoMemory; |
2143 return KErrNoMemory; |
1986 } |
2144 } |
1987 else |
2145 else |
1988 { |
2146 { |
1989 // Parcel out the memory between endpoints |
2147 // Parcel out the memory between endpoints |
1990 __KTRACE_OPT(KUSB, Kern::Printf("SetupInterfaceMemory alloc new chunk=0x%x, size=%d", |
2148 OstTraceDefExt2( OST_TRACE_CATEGORY_RND, TRACE_NORMAL, DLDDUSBCCHANNEL_SETUPINTERFACEMEMORY_DUP9, |
1991 reinterpret_cast<TUint8*>(chunk->LinearAddress()), bufSizes[chunkInd])); |
2149 "SetupInterfaceMemory alloc new chunk=0x%x, size=%d", |
2150 static_cast<TUint>(chunk->LinearAddress()), bufSizes[chunkInd]); |
|
2151 |
|
1992 TInt r = aHwChunks.Append(chunk); |
2152 TInt r = aHwChunks.Append(chunk); |
1993 if(r!=KErrNone) |
2153 if(r!=KErrNone) |
1994 { |
2154 { |
1995 ClosePhysicalChunk(chunk); |
2155 ClosePhysicalChunk(chunk); |
1996 iController->DeRegisterClient(this); |
2156 iController->DeRegisterClient(this); |
2005 |
2165 |
2006 ReSetInterfaceMemory(asRec, aHwChunks); |
2166 ReSetInterfaceMemory(asRec, aHwChunks); |
2007 |
2167 |
2008 if(chunkChanged) |
2168 if(chunkChanged) |
2009 { |
2169 { |
2010 __KTRACE_OPT(KUSB, Kern::Printf("SetupInterfaceMemory readdressing.")); |
2170 OstTraceDef0( OST_TRACE_CATEGORY_RND, TRACE_NORMAL, DLDDUSBCCHANNEL_SETUPINTERFACEMEMORY_DUP10, |
2171 "SetupInterfaceMemory readdressing." ); |
|
2011 asRec = asRec->iNext; |
2172 asRec = asRec->iNext; |
2012 while (asRec) |
2173 while (asRec) |
2013 { |
2174 { |
2014 // Interfaces are not concurrent so they can all start at the same logical address |
2175 // Interfaces are not concurrent so they can all start at the same logical address |
2015 __KTRACE_OPT(KUSB, Kern::Printf("SetupInterfaceMemory readdressing setting=%d", asRec->iSetting)); |
2176 OstTraceDef1( OST_TRACE_CATEGORY_RND, TRACE_NORMAL, DLDDUSBCCHANNEL_SETUPINTERFACEMEMORY_DUP11, |
2177 "SetupInterfaceMemory readdressing setting=%d", asRec->iSetting ); |
|
2016 ReSetInterfaceMemory(asRec, aHwChunks); |
2178 ReSetInterfaceMemory(asRec, aHwChunks); |
2017 asRec = asRec->iNext; |
2179 asRec = asRec->iNext; |
2018 } |
2180 } |
2019 } |
2181 } |
2020 return KErrNone; |
2182 return KErrNone; |
2021 } |
2183 } |
2022 |
2184 |
2023 TInt DLddUsbcChannel::SetupEp0() |
2185 TInt DLddUsbcChannel::SetupEp0() |
2024 { |
2186 { |
2025 __KTRACE_OPT(KUSB, Kern::Printf("SetupEp0 entry %x", this)); |
2187 OstTraceDef1( OST_TRACE_CATEGORY_RND, TRACE_NORMAL, DLDDUSBCCHANNEL_SETUPEP0, |
2188 "SetupEp0 entry %x", this ); |
|
2026 TInt ep0Size = iController->Ep0PacketSize(); |
2189 TInt ep0Size = iController->Ep0PacketSize(); |
2027 TUsbcEndpointInfo ep0Info = TUsbcEndpointInfo(KUsbEpTypeControl, KUsbEpDirBidirect, ep0Size); |
2190 TUsbcEndpointInfo ep0Info = TUsbcEndpointInfo(KUsbEpTypeControl, KUsbEpDirBidirect, ep0Size); |
2028 TUsbcEndpoint* ep0 = new TUsbcEndpoint(this, iController, &ep0Info, 0, 0); |
2191 TUsbcEndpoint* ep0 = new TUsbcEndpoint(this, iController, &ep0Info, 0, 0); |
2029 if (ep0 == NULL) |
2192 if (ep0 == NULL) |
2030 { |
2193 { |
2056 return r; |
2219 return r; |
2057 } |
2220 } |
2058 TUint8 * buf; |
2221 TUint8 * buf; |
2059 buf = (TUint8*) chunk->LinearAddress(); |
2222 buf = (TUint8*) chunk->LinearAddress(); |
2060 ep0->SetBufferAddr( i, buf); |
2223 ep0->SetBufferAddr( i, buf); |
2061 __KTRACE_OPT(KUSB, Kern::Printf("SetupEp0 60 buffer number %d", i)); |
2224 OstTraceDef1( OST_TRACE_CATEGORY_RND, TRACE_NORMAL, DLDDUSBCCHANNEL_SETUPEP0_DUP1, |
2062 __KTRACE_OPT(KUSB, Kern::Printf("SetupEp0 60 buffer size %d", bufferSize)); |
2225 "SetupEp0 60 buffer number %d", i ); |
2226 OstTraceDef1( OST_TRACE_CATEGORY_RND, TRACE_NORMAL, DLDDUSBCCHANNEL_SETUPEP0_DUP2, |
|
2227 "SetupEp0 60 buffer size %d", bufferSize ); |
|
2063 } |
2228 } |
2064 |
2229 |
2065 ep0->SetRealEpNumber(0); |
2230 ep0->SetRealEpNumber(0); |
2066 return KErrNone; |
2231 return KErrNone; |
2067 } |
2232 } |
2087 if (ep != NULL ) |
2252 if (ep != NULL ) |
2088 { |
2253 { |
2089 TUint8* pBuf = NULL; |
2254 TUint8* pBuf = NULL; |
2090 pBuf = reinterpret_cast<TUint8*>(aHwChunks[chunkInd]->LinearAddress()); |
2255 pBuf = reinterpret_cast<TUint8*>(aHwChunks[chunkInd]->LinearAddress()); |
2091 ep->SetBufferAddr( k, pBuf); |
2256 ep->SetBufferAddr( k, pBuf); |
2092 __KTRACE_OPT(KUSB, Kern::Printf(" ep %d, buf %d, addr 0x%x", nextEp, k, pBuf )); |
2257 OstTraceDefExt3( OST_TRACE_CATEGORY_RND, TRACE_NORMAL, DLDDUSBCCHANNEL_RESETINTERFACEMEMORY, |
2258 " ep %d, buf %d, addr 0x%x", nextEp, k, reinterpret_cast<TUint>(pBuf) ); |
|
2093 chunkInd++; |
2259 chunkInd++; |
2094 __ASSERT_DEBUG(chunkInd<=aHwChunks.Count(), |
2260 #ifdef _DEBUG |
2095 Kern::Printf(" Error: available chunks %d, run out at epInd%d, bufInd%d", |
2261 if (chunkInd > aHwChunks.Count()) |
2096 aHwChunks.Count(), i, k)); |
2262 { |
2263 OstTraceDefExt3(OST_TRACE_CATEGORY_DEBUG, TRACE_NORMAL, DLDDUSBCCHANNEL_RESETINTERFACEMEMORY_DUP1, |
|
2264 " Error: available chunks %d, run out at epInd%d, bufInd%d", |
|
2265 aHwChunks.Count(), i, k ); |
|
2266 } |
|
2267 #endif |
|
2097 __ASSERT_DEBUG(chunkInd<=aHwChunks.Count(), |
2268 __ASSERT_DEBUG(chunkInd<=aHwChunks.Count(), |
2098 Kern::Fault("usbc.ldd", __LINE__)); |
2269 Kern::Fault("usbc.ldd", __LINE__)); |
2099 } |
2270 } |
2100 } |
2271 } |
2101 } |
2272 } |
2187 } |
2358 } |
2188 |
2359 |
2189 |
2360 |
2190 void DLddUsbcChannel::EndpointStatusChangeCallback(TAny* aDLddUsbcChannel) |
2361 void DLddUsbcChannel::EndpointStatusChangeCallback(TAny* aDLddUsbcChannel) |
2191 { |
2362 { |
2192 __KTRACE_OPT(KUSB, Kern::Printf("EndpointStatusChangeCallback")); |
2363 OstTraceDef0( OST_TRACE_CATEGORY_RND, TRACE_NORMAL, DLDDUSBCCHANNEL_ENDPOINTSTATUSCHANGECALLBACK, |
2364 "EndpointStatusChangeCallback" ); |
|
2193 DLddUsbcChannel* dUsbc = (DLddUsbcChannel*) aDLddUsbcChannel; |
2365 DLddUsbcChannel* dUsbc = (DLddUsbcChannel*) aDLddUsbcChannel; |
2194 if (dUsbc->iChannelClosing) |
2366 if (dUsbc->iChannelClosing) |
2195 return; |
2367 return; |
2196 TUint endpointState = dUsbc->iEndpointStatusCallbackInfo.State(); |
2368 TUint endpointState = dUsbc->iEndpointStatusCallbackInfo.State(); |
2197 const TInt reqNo = (TInt) RDevUsbcClient::ERequestEndpointStatusNotify; |
2369 const TInt reqNo = (TInt) RDevUsbcClient::ERequestEndpointStatusNotify; |
2198 if (dUsbc->iRequestStatus[reqNo]) |
2370 if (dUsbc->iRequestStatus[reqNo]) |
2199 { |
2371 { |
2200 __KTRACE_OPT(KUSB, Kern::Printf("EndpointStatusChangeCallback Notify status")); |
2372 OstTraceDef0( OST_TRACE_CATEGORY_RND, TRACE_NORMAL, DLDDUSBCCHANNEL_ENDPOINTSTATUSCHANGECALLBACK_DUP1, |
2373 "EndpointStatusChangeCallback Notify status" ); |
|
2201 DThread* client = dUsbc->iClient; |
2374 DThread* client = dUsbc->iClient; |
2202 |
2375 |
2203 dUsbc->iEndpointStatusChangeReq->Data() = endpointState; |
2376 dUsbc->iEndpointStatusChangeReq->Data() = endpointState; |
2204 dUsbc->iRequestStatus[reqNo] = NULL; |
2377 dUsbc->iRequestStatus[reqNo] = NULL; |
2205 Kern::QueueRequestComplete(client,dUsbc->iEndpointStatusChangeReq,KErrNone); |
2378 Kern::QueueRequestComplete(client,dUsbc->iEndpointStatusChangeReq,KErrNone); |
2218 TInt i; |
2391 TInt i; |
2219 for (i = 0; |
2392 for (i = 0; |
2220 (i < KUsbcDeviceStateRequests) && ((deviceState = dUsbc->iStatusCallbackInfo.State(i)) != EUsbcNoState); |
2393 (i < KUsbcDeviceStateRequests) && ((deviceState = dUsbc->iStatusCallbackInfo.State(i)) != EUsbcNoState); |
2221 ++i) |
2394 ++i) |
2222 { |
2395 { |
2223 __KTRACE_OPT(KUSB, Kern::Printf("StatusChangeCallBack status=%d", deviceState)); |
2396 OstTraceDef1( OST_TRACE_CATEGORY_RND, TRACE_NORMAL, DLDDUSBCCHANNEL_STATUSCHANGECALLBACK, |
2397 "StatusChangeCallBack status=%d", static_cast<TInt>(deviceState) ); |
|
2224 if (deviceState & KUsbAlternateSetting) |
2398 if (deviceState & KUsbAlternateSetting) |
2225 { |
2399 { |
2226 dUsbc->ProcessAlternateSetting(deviceState); |
2400 dUsbc->ProcessAlternateSetting(deviceState); |
2227 } |
2401 } |
2228 else |
2402 else |
2248 } |
2422 } |
2249 |
2423 |
2250 |
2424 |
2251 void DLddUsbcChannel::OtgFeatureChangeCallback(TAny* aDLddUsbcChannel) |
2425 void DLddUsbcChannel::OtgFeatureChangeCallback(TAny* aDLddUsbcChannel) |
2252 { |
2426 { |
2253 __KTRACE_OPT(KUSB, Kern::Printf("OtgFeatureChangeCallback")); |
2427 OstTraceDef0( OST_TRACE_CATEGORY_RND, TRACE_NORMAL, DLDDUSBCCHANNEL_OTGFEATURECHANGECALLBACK, |
2428 "OtgFeatureChangeCallback" ); |
|
2254 DLddUsbcChannel* dUsbc = (DLddUsbcChannel*) aDLddUsbcChannel; |
2429 DLddUsbcChannel* dUsbc = (DLddUsbcChannel*) aDLddUsbcChannel; |
2255 if (dUsbc->iChannelClosing) |
2430 if (dUsbc->iChannelClosing) |
2256 return; |
2431 return; |
2257 |
2432 |
2258 TUint8 features; |
2433 TUint8 features; |
2260 dUsbc->iController->GetCurrentOtgFeatures(features); |
2435 dUsbc->iController->GetCurrentOtgFeatures(features); |
2261 |
2436 |
2262 const TInt reqNo = (TInt) RDevUsbcClient::ERequestOtgFeaturesNotify; |
2437 const TInt reqNo = (TInt) RDevUsbcClient::ERequestOtgFeaturesNotify; |
2263 if (dUsbc->iRequestStatus[reqNo]) |
2438 if (dUsbc->iRequestStatus[reqNo]) |
2264 { |
2439 { |
2265 __KTRACE_OPT(KUSB, Kern::Printf("OtgFeatureChangeCallback Notify status")); |
2440 OstTraceDef0( OST_TRACE_CATEGORY_RND, TRACE_NORMAL, DLDDUSBCCHANNEL_OTGFEATURECHANGECALLBACK_DUP1, |
2441 "OtgFeatureChangeCallback Notify status" ); |
|
2266 dUsbc->iOtgFeatureChangeReq->Data()=features; |
2442 dUsbc->iOtgFeatureChangeReq->Data()=features; |
2267 dUsbc->iRequestStatus[reqNo] = NULL; |
2443 dUsbc->iRequestStatus[reqNo] = NULL; |
2268 Kern::QueueRequestComplete(dUsbc->iClient,dUsbc->iOtgFeatureChangeReq,KErrNone); |
2444 Kern::QueueRequestComplete(dUsbc->iClient,dUsbc->iOtgFeatureChangeReq,KErrNone); |
2269 dUsbc->iOtgFeatureChangePtr = NULL; |
2445 dUsbc->iOtgFeatureChangePtr = NULL; |
2270 } |
2446 } |
2311 { |
2487 { |
2312 return alternateSettingListRec->iEndpoint[aEndpoint]->RealEpNumber(); |
2488 return alternateSettingListRec->iEndpoint[aEndpoint]->RealEpNumber(); |
2313 } |
2489 } |
2314 else |
2490 else |
2315 { |
2491 { |
2316 __KTRACE_OPT(KPANIC, Kern::Printf(" Error: aEndpoint %d wrong for aAlternateSetting %d", |
2492 OstTraceDefExt2( OST_TRACE_CATEGORY_RND, TRACE_FATAL, DLDDUSBCCHANNEL_EPFROMALTERNATESETTING, |
2317 aEndpoint, aAlternateSetting)); |
2493 " Error: aEndpoint %d wrong for aAlternateSetting %d", aEndpoint, aAlternateSetting ); |
2318 return -1; |
2494 return -1; |
2319 } |
2495 } |
2320 } |
2496 } |
2321 alternateSettingListRec = alternateSettingListRec->iNext; |
2497 alternateSettingListRec = alternateSettingListRec->iNext; |
2322 } |
2498 } |
2323 __KTRACE_OPT(KPANIC, Kern::Printf(" Error: no aAlternateSetting %d found", aAlternateSetting)); |
2499 OstTraceDef1( OST_TRACE_CATEGORY_RND, TRACE_FATAL, DLDDUSBCCHANNEL_EPFROMALTERNATESETTING_DUP1, |
2500 " Error: no aAlternateSetting %d found", aAlternateSetting ); |
|
2324 return -1; |
2501 return -1; |
2325 } |
2502 } |
2326 |
2503 |
2327 |
2504 |
2328 TInt DLddUsbcChannel::ProcessAlternateSetting(TUint aAlternateSetting) |
2505 TInt DLddUsbcChannel::ProcessAlternateSetting(TUint aAlternateSetting) |
2329 { |
2506 { |
2330 ResetInterface(KErrUsbInterfaceChange); // kill any outstanding transfers |
2507 ResetInterface(KErrUsbInterfaceChange); // kill any outstanding transfers |
2331 __KTRACE_OPT(KUSB, Kern::Printf("ProcessAlternateSetting 0x%08x", aAlternateSetting)); |
2508 OstTraceDef1( OST_TRACE_CATEGORY_RND, TRACE_NORMAL, DLDDUSBCCHANNEL_PROCESSALTERNATESETTING, |
2509 "ProcessAlternateSetting 0x%08x", aAlternateSetting ); |
|
2332 TUint newSetting = aAlternateSetting&(~KUsbAlternateSetting); |
2510 TUint newSetting = aAlternateSetting&(~KUsbAlternateSetting); |
2333 __KTRACE_OPT(KUSB, Kern::Printf("ProcessAlternateSetting selecting alternate setting 0x%08x", newSetting)); |
2511 OstTraceDef1( OST_TRACE_CATEGORY_RND, TRACE_NORMAL, DLDDUSBCCHANNEL_PROCESSALTERNATESETTING_DUP1, |
2512 "ProcessAlternateSetting selecting alternate setting 0x%08x", newSetting ); |
|
2513 |
|
2334 TInt r = SelectAlternateSetting(newSetting); |
2514 TInt r = SelectAlternateSetting(newSetting); |
2335 if (r != KErrNone) |
2515 if (r != KErrNone) |
2336 return r; |
2516 return r; |
2337 StartEpReads(); |
2517 StartEpReads(); |
2338 iAlternateSetting = newSetting; |
2518 iAlternateSetting = newSetting; |
2340 } |
2520 } |
2341 |
2521 |
2342 |
2522 |
2343 TInt DLddUsbcChannel::ProcessDeviceState(TUsbcDeviceState aDeviceState) |
2523 TInt DLddUsbcChannel::ProcessDeviceState(TUsbcDeviceState aDeviceState) |
2344 { |
2524 { |
2345 __KTRACE_OPT(KUSB, Kern::Printf("ProcessDeviceState(%d -> %d)", iDeviceState, aDeviceState)); |
2525 OstTraceDefExt2( OST_TRACE_CATEGORY_RND, TRACE_NORMAL, DLDDUSBCCHANNEL_PROCESSDEVICESTATE, |
2526 "ProcessDeviceState(%d -> %d)", iDeviceState, aDeviceState ); |
|
2346 if (iDeviceState == aDeviceState) |
2527 if (iDeviceState == aDeviceState) |
2347 { |
2528 { |
2348 __KTRACE_OPT(KUSB, Kern::Printf(" No state change => nothing to be done.")); |
2529 OstTraceDef0( OST_TRACE_CATEGORY_RND, TRACE_NORMAL, DLDDUSBCCHANNEL_PROCESSDEVICESTATE_DUP1, |
2530 " No state change => nothing to be done." ); |
|
2349 return KErrNone; |
2531 return KErrNone; |
2350 } |
2532 } |
2351 if (iDeviceState == EUsbcDeviceStateSuspended) |
2533 if (iDeviceState == EUsbcDeviceStateSuspended) |
2352 { |
2534 { |
2353 __KTRACE_OPT(KUSB, Kern::Printf(" Coming out of Suspend: old state = %d", iOldDeviceState)); |
2535 OstTraceDef1( OST_TRACE_CATEGORY_RND, TRACE_NORMAL, DLDDUSBCCHANNEL_PROCESSDEVICESTATE_DUP2, |
2536 " Coming out of Suspend: old state = %d", iOldDeviceState ); |
|
2354 iDeviceState = iOldDeviceState; |
2537 iDeviceState = iOldDeviceState; |
2355 if (iDeviceState == aDeviceState) |
2538 if (iDeviceState == aDeviceState) |
2356 { |
2539 { |
2357 __KTRACE_OPT(KUSB, Kern::Printf(" New state same as before Suspend => nothing to be done.")); |
2540 OstTraceDef0( OST_TRACE_CATEGORY_RND, TRACE_NORMAL, DLDDUSBCCHANNEL_PROCESSDEVICESTATE_DUP3, |
2541 " New state same as before Suspend => nothing to be done." ); |
|
2358 return KErrNone; |
2542 return KErrNone; |
2359 } |
2543 } |
2360 } |
2544 } |
2361 TBool renumerateState = (aDeviceState == EUsbcDeviceStateConfigured); |
2545 TBool renumerateState = (aDeviceState == EUsbcDeviceStateConfigured); |
2362 TBool deconfigured = EFalse; |
2546 TBool deconfigured = EFalse; |
2363 TInt cancellationCode = KErrNone; |
2547 TInt cancellationCode = KErrNone; |
2364 if (aDeviceState == EUsbcDeviceStateSuspended) |
2548 if (aDeviceState == EUsbcDeviceStateSuspended) |
2365 { |
2549 { |
2366 __KTRACE_OPT(KUSB, Kern::Printf(" Suspending...")); |
2550 OstTraceDef0( OST_TRACE_CATEGORY_RND, TRACE_NORMAL, DLDDUSBCCHANNEL_PROCESSDEVICESTATE_DUP4, |
2551 " Suspending..." ); |
|
2367 iOldDeviceState = iDeviceState; |
2552 iOldDeviceState = iDeviceState; |
2368 // Put PSL into low power mode here |
2553 // Put PSL into low power mode here |
2369 } |
2554 } |
2370 else |
2555 else |
2371 { |
2556 { |
2381 cancellationCode = KErrUsbDeviceBusReset; |
2566 cancellationCode = KErrUsbDeviceBusReset; |
2382 else |
2567 else |
2383 cancellationCode = KErrUsbDeviceNotConfigured; |
2568 cancellationCode = KErrUsbDeviceNotConfigured; |
2384 } |
2569 } |
2385 } |
2570 } |
2386 __KTRACE_OPT(KUSB, Kern::Printf(" %d --> %d", iDeviceState, aDeviceState)); |
2571 OstTraceDefExt2( OST_TRACE_CATEGORY_RND, TRACE_NORMAL, DLDDUSBCCHANNEL_PROCESSDEVICESTATE_DUP5, |
2572 " %d --> %d", iDeviceState, aDeviceState ); |
|
2387 iDeviceState = aDeviceState; |
2573 iDeviceState = aDeviceState; |
2388 if (iValidInterface || iOwnsDeviceControl) |
2574 if (iValidInterface || iOwnsDeviceControl) |
2389 { |
2575 { |
2390 // This LDD may not own an interface. It could be some manager reenumerating |
2576 // This LDD may not own an interface. It could be some manager reenumerating |
2391 // after its subordinate LDDs have setup their interfaces. |
2577 // after its subordinate LDDs have setup their interfaces. |
2424 while ((++i <= KMaxEndpointsPerClient) && iEndpoint[i]) |
2610 while ((++i <= KMaxEndpointsPerClient) && iEndpoint[i]) |
2425 { |
2611 { |
2426 const TInt size = iController->EndpointPacketSize(this, iEndpoint[i]->RealEpNumber()); |
2612 const TInt size = iController->EndpointPacketSize(this, iEndpoint[i]->RealEpNumber()); |
2427 if (size < 0) |
2613 if (size < 0) |
2428 { |
2614 { |
2429 __KTRACE_OPT(KPANIC, Kern::Printf(" Error: Packet size < 0 for ep %d", i)); |
2615 OstTraceDef1( OST_TRACE_CATEGORY_RND, TRACE_FATAL, DLDDUSBCCHANNEL_UPDATEENDPOINTSIZES, |
2616 " Error: Packet size < 0 for ep %d", i ); |
|
2430 continue; |
2617 continue; |
2431 } |
2618 } |
2432 iEndpoint[i]->SetMaxPacketSize(size); |
2619 iEndpoint[i]->SetMaxPacketSize(size); |
2433 } |
2620 } |
2434 __ASSERT_DEBUG(i == iNumberOfEndpoints + 1, |
2621 #ifdef _DEBUG |
2435 Kern::Printf(" Error: iNumberOfEndpoints wrong (%d)", iNumberOfEndpoints)); |
2622 if (i != iNumberOfEndpoints + 1) |
2436 } |
2623 { |
2437 |
2624 OstTraceDef1( OST_TRACE_CATEGORY_DEBUG, TRACE_FATAL, DLDDUSBCCHANNEL_UPDATEENDPOINTSIZES_DUP1, |
2438 |
2625 " Error: iNumberOfEndpoints wrong (%d)", iNumberOfEndpoints ); |
2439 DPlatChunkHw* DLddUsbcChannel::ReAllocate(TInt aBuffersize, DPlatChunkHw* aHwChunk, TUint32 aCacheAttribs) |
2626 |
2627 } |
|
2628 #endif |
|
2629 } |
|
2630 |
|
2631 |
|
2632 DPlatChunkHw* DLddUsbcChannel::ReAllocate(TInt aBuffersize, DPlatChunkHw* aHwChunk,TUint32 aCacheAttribs) |
|
2440 { |
2633 { |
2441 DPlatChunkHw* chunk = aHwChunk; |
2634 DPlatChunkHw* chunk = aHwChunk; |
2442 if ((!chunk) || (chunk->iSize < aBuffersize)) |
2635 if ((!chunk) || (chunk->iSize < aBuffersize)) |
2443 { |
2636 { |
2444 if (chunk) |
2637 if (chunk) |
2445 { |
2638 { |
2446 ClosePhysicalChunk(chunk); |
2639 ClosePhysicalChunk(chunk); |
2447 } |
2640 } |
2448 __KTRACE_OPT(KUSB, Kern::Printf("ReAllocate need to get new chunk")); |
2641 OstTraceDef0( OST_TRACE_CATEGORY_RND, TRACE_NORMAL, DLDDUSBCCHANNEL_REALLOCATE, |
2642 "ReAllocate need to get new chunk" ); |
|
2449 chunk = Allocate(aBuffersize, aCacheAttribs); |
2643 chunk = Allocate(aBuffersize, aCacheAttribs); |
2450 } |
2644 } |
2451 return chunk; |
2645 return chunk; |
2452 } |
2646 } |
2453 |
2647 |
2509 TUint32 deviceState; |
2703 TUint32 deviceState; |
2510 if (iStatusFifo->GetDeviceQueuedStatus(deviceState) == KErrNone) |
2704 if (iStatusFifo->GetDeviceQueuedStatus(deviceState) == KErrNone) |
2511 { |
2705 { |
2512 // Device state waiting to be sent userside |
2706 // Device state waiting to be sent userside |
2513 completeNow = ETrue; |
2707 completeNow = ETrue; |
2514 __KTRACE_OPT(KUSB, Kern::Printf("StatusChangeCallback Notify status")); |
2708 OstTraceDef0( OST_TRACE_CATEGORY_RND, TRACE_NORMAL, DLDDUSBCCHANNEL_ALTERNATEDEVICESTATETESTCOMPLETE, |
2709 "StatusChangeCallback Notify status" ); |
|
2515 iStatusChangeReq->Data()=deviceState; |
2710 iStatusChangeReq->Data()=deviceState; |
2516 iStatusChangePtr = NULL; |
2711 iStatusChangePtr = NULL; |
2517 } |
2712 } |
2518 } |
2713 } |
2519 return completeNow; |
2714 return completeNow; |
2526 } |
2721 } |
2527 |
2722 |
2528 |
2723 |
2529 void DLddUsbcChannel::DeConfigure(TInt aErrorCode) |
2724 void DLddUsbcChannel::DeConfigure(TInt aErrorCode) |
2530 { |
2725 { |
2531 __KTRACE_OPT(KUSB, Kern::Printf("DLddUsbcChannel::DeConfigure()")); |
2726 OstTraceDef0( OST_TRACE_CATEGORY_RND, TRACE_NORMAL, DLDDUSBCCHANNEL_DECONFIGURE, |
2727 "DLddUsbcChannel::DeConfigure()" ); |
|
2532 // Called after deconfiguration. Cancels transfers on all endpoints. |
2728 // Called after deconfiguration. Cancels transfers on all endpoints. |
2533 ResetInterface(aErrorCode); |
2729 ResetInterface(aErrorCode); |
2534 // Cancel the endpoint status notify request if it is outstanding. |
2730 // Cancel the endpoint status notify request if it is outstanding. |
2535 const TInt KEpNotReq = RDevUsbcClient::ERequestEndpointStatusNotify; |
2731 const TInt KEpNotReq = RDevUsbcClient::ERequestEndpointStatusNotify; |
2536 if (iRequestStatus[KEpNotReq]) |
2732 if (iRequestStatus[KEpNotReq]) |
2564 if (iValidInterface || iOwnsDeviceControl) |
2760 if (iValidInterface || iOwnsDeviceControl) |
2565 { |
2761 { |
2566 // Reset each endpoint except ep0 |
2762 // Reset each endpoint except ep0 |
2567 for (TInt i = 1; i <= iNumberOfEndpoints; i++) |
2763 for (TInt i = 1; i <= iNumberOfEndpoints; i++) |
2568 { |
2764 { |
2569 __KTRACE_OPT(KUSB, Kern::Printf("Cancelling transfer ep=%d", i)); |
2765 OstTraceDef1( OST_TRACE_CATEGORY_RND, TRACE_NORMAL, DLDDUSBCCHANNEL_RESETINTERFACE, |
2766 "Cancelling transfer ep=%d", i ); |
|
2570 iEndpoint[i]->CancelTransfer(iClient,iClientAsynchNotify[i]->iClientBuffer); // Copies data userside |
2767 iEndpoint[i]->CancelTransfer(iClient,iClientAsynchNotify[i]->iClientBuffer); // Copies data userside |
2571 iEndpoint[i]->AbortTransfer(); // kills any ldd->pil outstanding transfers |
2768 iEndpoint[i]->AbortTransfer(); // kills any ldd->pil outstanding transfers |
2572 iEndpoint[i]->iDmaBuffers->Flush(); |
2769 iEndpoint[i]->iDmaBuffers->Flush(); |
2573 if (iRequestStatus[i] != NULL) |
2770 if (iRequestStatus[i] != NULL) |
2574 CompleteBufferRequest(iClient, i, aErrorCode); |
2771 CompleteBufferRequest(iClient, i, aErrorCode); |
2609 } |
2806 } |
2610 |
2807 |
2611 |
2808 |
2612 TInt DLddUsbcChannel::DoEmergencyComplete() |
2809 TInt DLddUsbcChannel::DoEmergencyComplete() |
2613 { |
2810 { |
2614 __KTRACE_OPT(KUSB, Kern::Printf("TUsbcEndpoint::DoEmergencyComplete")); |
2811 OstTraceDef0( OST_TRACE_CATEGORY_RND, TRACE_NORMAL, DLDDUSBCCHANNEL_DOEMERGENCYCOMPLETE, |
2812 "TUsbcEndpoint::DoEmergencyComplete" ); |
|
2615 // cancel any pending DFCs |
2813 // cancel any pending DFCs |
2616 // complete all client requests |
2814 // complete all client requests |
2617 for (TInt i = 0; i < KUsbcMaxRequests; i++) |
2815 for (TInt i = 0; i < KUsbcMaxRequests; i++) |
2618 { |
2816 { |
2619 if (iRequestStatus[i]) |
2817 if (iRequestStatus[i]) |
2620 { |
2818 { |
2621 __KTRACE_OPT(KUSB, Kern::Printf("Complete request 0x%x", iRequestStatus[i])); |
2819 OstTraceDef1( OST_TRACE_CATEGORY_RND, TRACE_NORMAL, DLDDUSBCCHANNEL_DOEMERGENCYCOMPLETE_DUP1, |
2820 "Complete request 0x%x", iRequestStatus[i] ); |
|
2622 |
2821 |
2623 if (i == RDevUsbcClient::ERequestAlternateDeviceStatusNotify) |
2822 if (i == RDevUsbcClient::ERequestAlternateDeviceStatusNotify) |
2624 { |
2823 { |
2625 |
2824 |
2626 iDeviceStatusNeeded = EFalse; |
2825 iDeviceStatusNeeded = EFalse; |
2722 iRequestCallbackInfo(NULL), |
2921 iRequestCallbackInfo(NULL), |
2723 iBytesTransferred(0), |
2922 iBytesTransferred(0), |
2724 iBandwidthPriority(aBandwidthPriority) |
2923 iBandwidthPriority(aBandwidthPriority) |
2725 { |
2924 { |
2726 ResetTransferInfo(); |
2925 ResetTransferInfo(); |
2727 __KTRACE_OPT(KUSB, Kern::Printf("TUsbcEndpoint::TUsbcEndpoint 2")); |
2926 OstTraceDef0( OST_TRACE_CATEGORY_RND, TRACE_FLOW, TUSBCENDPOINT_TUSBCENDPOINT_CONS, |
2927 "TUsbcEndpoint::TUsbcEndpoint 2" ); |
|
2728 } |
2928 } |
2729 |
2929 |
2730 |
2930 |
2731 TInt TUsbcEndpoint::Construct() |
2931 TInt TUsbcEndpoint::Construct() |
2732 { |
2932 { |
2754 } |
2954 } |
2755 |
2955 |
2756 |
2956 |
2757 TUsbcEndpoint::~TUsbcEndpoint() |
2957 TUsbcEndpoint::~TUsbcEndpoint() |
2758 { |
2958 { |
2759 __KTRACE_OPT(KUSB, Kern::Printf("TUsbcEndpoint::~TUsbcEndpoint(%d)", iEndpointNumber)); |
2959 OstTraceDef1( OST_TRACE_CATEGORY_RND, TRACE_FLOW, TUSBCENDPOINT_TUSBCENDPOINT_DES, |
2960 "TUsbcEndpoint::~TUsbcEndpoint(%d)", iEndpointNumber ); |
|
2760 AbortTransfer(); |
2961 AbortTransfer(); |
2761 delete iRequestCallbackInfo; |
2962 delete iRequestCallbackInfo; |
2762 delete iDmaBuffers; |
2963 delete iDmaBuffers; |
2763 } |
2964 } |
2764 |
2965 |
2765 |
2966 |
2766 void TUsbcEndpoint::RequestCallback(TAny* aTUsbcEndpoint) |
2967 void TUsbcEndpoint::RequestCallback(TAny* aTUsbcEndpoint) |
2767 { |
2968 { |
2768 __KTRACE_OPT(KUSB, Kern::Printf("TUsbcEndpoint::RequestCallback")); |
2969 OstTraceDef0( OST_TRACE_CATEGORY_RND, TRACE_NORMAL, TUSBCENDPOINT_REQUESTCALLBACK, |
2970 "TUsbcEndpoint::RequestCallback" ); |
|
2769 ((TUsbcEndpoint*) aTUsbcEndpoint)->EndpointComplete(); |
2971 ((TUsbcEndpoint*) aTUsbcEndpoint)->EndpointComplete(); |
2770 } |
2972 } |
2771 |
2973 |
2772 |
2974 |
2773 void TUsbcEndpoint::SetMaxPacketSize(TInt aSize) |
2975 void TUsbcEndpoint::SetMaxPacketSize(TInt aSize) |
2777 } |
2979 } |
2778 |
2980 |
2779 |
2981 |
2780 TInt TUsbcEndpoint::EndpointComplete() |
2982 TInt TUsbcEndpoint::EndpointComplete() |
2781 { |
2983 { |
2782 __KTRACE_OPT(KUSB, Kern::Printf("TUsbcEndpoint::EndpointComplete ep=%d %d", |
2984 OstTraceDefExt2( OST_TRACE_CATEGORY_RND, TRACE_NORMAL, TUSBCENDPOINT_ENDPOINTCOMPLETE, |
2783 iEndpointNumber, iRequestCallbackInfo->iEndpointNum)); |
2985 "TUsbcEndpoint::EndpointComplete ep=%d %d", iEndpointNumber, iRequestCallbackInfo->iEndpointNum ); |
2784 |
2986 |
2785 if (iLdd->ChannelClosing()) |
2987 if (iLdd->ChannelClosing()) |
2786 { |
2988 { |
2787 __KTRACE_OPT(KUSB, Kern::Printf("We're going home -> completions no longer accepted")); |
2989 OstTraceDef0( OST_TRACE_CATEGORY_RND, TRACE_NORMAL, TUSBCENDPOINT_ENDPOINTCOMPLETE_DUP1, |
2990 "We're going home -> completions no longer accepted" ); |
|
2788 return KErrNone; |
2991 return KErrNone; |
2789 } |
2992 } |
2790 |
2993 |
2791 TTransferDirection transferDir = iRequestCallbackInfo->iTransferDir; |
2994 TTransferDirection transferDir = iRequestCallbackInfo->iTransferDir; |
2792 TInt error = iRequestCallbackInfo->iError; |
2995 TInt error = iRequestCallbackInfo->iError; |
2794 switch (transferDir) |
2997 switch (transferDir) |
2795 { |
2998 { |
2796 |
2999 |
2797 case EControllerWrite: |
3000 case EControllerWrite: |
2798 { |
3001 { |
2799 __KTRACE_OPT(KUSB, Kern::Printf("TUsbcEndpoint::EndpointComplete Write 2")); |
3002 OstTraceDef0( OST_TRACE_CATEGORY_RND, TRACE_NORMAL, TUSBCENDPOINT_ENDPOINTCOMPLETE_DUP2, |
3003 "TUsbcEndpoint::EndpointComplete Write 2" ); |
|
2800 if (!iDmaBuffers->TxIsActive()) |
3004 if (!iDmaBuffers->TxIsActive()) |
2801 { |
3005 { |
2802 __KTRACE_OPT(KUSB, Kern::Printf(" TX completion but !iDmaBuffers->TxIsActive()")); |
3006 OstTraceDef0( OST_TRACE_CATEGORY_RND, TRACE_NORMAL, TUSBCENDPOINT_ENDPOINTCOMPLETE_DUP3, |
3007 " TX completion but !iDmaBuffers->TxIsActive()" ); |
|
2803 break; |
3008 break; |
2804 } |
3009 } |
2805 |
3010 |
2806 iDmaBuffers->TxSetInActive(); |
3011 iDmaBuffers->TxSetInActive(); |
2807 TBool completeNow = EFalse; |
3012 TBool completeNow = EFalse; |
2853 // We queue the dfc if we can complete the read, i.e. if we are reading a packet, |
3058 // We queue the dfc if we can complete the read, i.e. if we are reading a packet, |
2854 // or if we have enough data to satisfy a read data request. |
3059 // or if we have enough data to satisfy a read data request. |
2855 if (iClientReadPending) |
3060 if (iClientReadPending) |
2856 { |
3061 { |
2857 //Complete outstanding read |
3062 //Complete outstanding read |
2858 __KTRACE_OPT(KUSB, Kern::Printf("TUsbcEndpoint::EndpointComplete Read 3 (bytes " |
3063 OstTraceDef1( OST_TRACE_CATEGORY_RND, TRACE_NORMAL, TUSBCENDPOINT_ENDPOINTCOMPLETE_DUP4, |
2859 "available=%d)", iDmaBuffers->RxBytesAvailable())); |
3064 "TUsbcEndpoint::EndpointComplete Read 3 (bytes available=%d)", |
3065 iDmaBuffers->RxBytesAvailable()); |
|
3066 |
|
2860 TInt bytesReqd = iTransferInfo.iTransferSize - iBytesTransferred; |
3067 TInt bytesReqd = iTransferInfo.iTransferSize - iBytesTransferred; |
2861 TBool completeNow = EFalse; |
3068 TBool completeNow = EFalse; |
2862 |
3069 |
2863 if (iTransferInfo.iTransferType == ETransferTypeReadPacket || |
3070 if (iTransferInfo.iTransferType == ETransferTypeReadPacket || |
2864 iTransferInfo.iTransferType == ETransferTypeReadOneOrMore) |
3071 iTransferInfo.iTransferType == ETransferTypeReadOneOrMore) |
2955 TInt err; |
3162 TInt err; |
2956 const TInt length = iTransferInfo.iTransferSize; |
3163 const TInt length = iTransferInfo.iTransferSize; |
2957 const TBool KReadData = EFalse; |
3164 const TBool KReadData = EFalse; |
2958 const TBool KReadUntilShort = ETrue; |
3165 const TBool KReadUntilShort = ETrue; |
2959 |
3166 |
2960 __KTRACE_OPT(KUSB, Kern::Printf("CopyToClient: length = %d", length)); |
3167 OstTraceDef1( OST_TRACE_CATEGORY_RND, TRACE_NORMAL, TUSBCENDPOINT_COPYTOCLIENT, |
3168 "CopyToClient: length = %d", length ); |
|
2961 |
3169 |
2962 if (iTransferInfo.iTransferType == ETransferTypeReadPacket) |
3170 if (iTransferInfo.iTransferType == ETransferTypeReadPacket) |
2963 { |
3171 { |
2964 err = iDmaBuffers->RxCopyPacketToClient(aClient, aTcb, length); |
3172 err = iDmaBuffers->RxCopyPacketToClient(aClient, aTcb, length); |
2965 aCompleteNow = ETrue; |
3173 aCompleteNow = ETrue; |
2991 } |
3199 } |
2992 |
3200 |
2993 |
3201 |
2994 TInt TUsbcEndpoint::TryToStartRead(TBool aReEntrant) |
3202 TInt TUsbcEndpoint::TryToStartRead(TBool aReEntrant) |
2995 { |
3203 { |
2996 __KTRACE_OPT(KUSB, Kern::Printf("TryToStartRead 1 ep=%d", iEndpointNumber)); |
3204 OstTraceDef1( OST_TRACE_CATEGORY_RND, TRACE_NORMAL, TUSBCENDPOINT_TRYTOSTARTREAD, |
3205 "TryToStartRead 1 ep=%d", iEndpointNumber ); |
|
2997 TInt r = KErrNone; |
3206 TInt r = KErrNone; |
2998 if (iEndpointInfo.iDir != KUsbEpDirOut && |
3207 if (iEndpointInfo.iDir != KUsbEpDirOut && |
2999 iEndpointInfo.iDir != KUsbEpDirBidirect) |
3208 iEndpointInfo.iDir != KUsbEpDirBidirect) |
3000 { |
3209 { |
3001 // Verify ep direction |
3210 // Verify ep direction |
3002 __KTRACE_OPT(KUSB, Kern::Printf("TryToStartRead wrong direction ep=%d", iEndpointNumber)); |
3211 OstTraceDef1( OST_TRACE_CATEGORY_RND, TRACE_NORMAL, TUSBCENDPOINT_TRYTOSTARTREAD_DUP1, |
3212 "TryToStartRead wrong direction ep=%d", iEndpointNumber ); |
|
3003 return KErrUsbEpBadDirection; |
3213 return KErrUsbEpBadDirection; |
3004 } |
3214 } |
3005 |
3215 |
3006 if (iEndpointNumber == 0) |
3216 if (iEndpointNumber == 0) |
3007 { |
3217 { |
3008 // Can't issue an Ep0 read if reader or writer is active |
3218 // Can't issue an Ep0 read if reader or writer is active |
3009 if (iDmaBuffers->TxIsActive()) |
3219 if (iDmaBuffers->TxIsActive()) |
3010 { |
3220 { |
3011 __KTRACE_OPT(KUSB, Kern::Printf("TryToStartRead ep0 Tx already active FATAL")); |
3221 OstTraceDef0( OST_TRACE_CATEGORY_RND, TRACE_NORMAL, TUSBCENDPOINT_TRYTOSTARTREAD_DUP2, |
3222 "TryToStartRead ep0 Tx already active FATAL" ); |
|
3223 |
|
3012 return KErrUsbEpNotReady; |
3224 return KErrUsbEpNotReady; |
3013 } |
3225 } |
3014 if (iDmaBuffers->RxIsActive()) |
3226 if (iDmaBuffers->RxIsActive()) |
3015 { |
3227 { |
3016 __KTRACE_OPT(KUSB, Kern::Printf("TryToStartRead ep0 Rx already active non-FATAL")); |
3228 OstTraceDef0( OST_TRACE_CATEGORY_RND, TRACE_NORMAL, TUSBCENDPOINT_TRYTOSTARTREAD_DUP3, |
3229 "TryToStartRead ep0 Rx already active non-FATAL" ); |
|
3017 } |
3230 } |
3018 } |
3231 } |
3019 |
3232 |
3020 if (!(iDmaBuffers->RxIsActive())) |
3233 if (!(iDmaBuffers->RxIsActive())) |
3021 { |
3234 { |
3027 r = iDmaBuffers->RxGetNextXfer(bufferAddr, indexArray, sizeArray, length, physAddr); |
3240 r = iDmaBuffers->RxGetNextXfer(bufferAddr, indexArray, sizeArray, length, physAddr); |
3028 if (r == KErrNone) |
3241 if (r == KErrNone) |
3029 { |
3242 { |
3030 iDmaBuffers->RxSetActive(); |
3243 iDmaBuffers->RxSetActive(); |
3031 iRequestCallbackInfo->SetRxBufferInfo(bufferAddr, physAddr, indexArray, sizeArray, length); |
3244 iRequestCallbackInfo->SetRxBufferInfo(bufferAddr, physAddr, indexArray, sizeArray, length); |
3032 |
3245 OstTraceDef1( OST_TRACE_CATEGORY_RND, TRACE_NORMAL, TUSBCENDPOINT_TRYTOSTARTREAD_DUP4, |
3033 __KTRACE_OPT(KUSB, Kern::Printf("TryToStartRead 2 bufferAddr=0x%08x", bufferAddr)); |
3246 "TryToStartRead 2 bufferAddr=0x%08x", bufferAddr ); |
3034 |
3247 |
3035 r = iController->SetupReadBuffer(*iRequestCallbackInfo); |
3248 r = iController->SetupReadBuffer(*iRequestCallbackInfo); |
3036 if (r != KErrNone) |
3249 if (r != KErrNone) |
3037 { |
3250 { |
3038 iDmaBuffers->RxSetInActive(); |
3251 iDmaBuffers->RxSetInActive(); |
3039 __KTRACE_OPT(KPANIC, Kern::Printf(" Error: TryToStartRead controller rejects read")); |
3252 OstTraceDef0( OST_TRACE_CATEGORY_RND, TRACE_NORMAL, TUSBCENDPOINT_TRYTOSTARTREAD_DUP5, |
3253 " Error: TryToStartRead controller rejects read" ); |
|
3040 } |
3254 } |
3041 } |
3255 } |
3042 else |
3256 else |
3043 { |
3257 { |
3044 if (iClientReadPending) |
3258 if (iClientReadPending) |
3060 } |
3274 } |
3061 |
3275 |
3062 |
3276 |
3063 TInt TUsbcEndpoint::TryToStartWrite(TEndpointTransferInfo* pTfr) |
3277 TInt TUsbcEndpoint::TryToStartWrite(TEndpointTransferInfo* pTfr) |
3064 { |
3278 { |
3065 __KTRACE_OPT(KUSB, Kern::Printf("TryToStartWrite 1 ep=%d", iEndpointNumber)); |
3279 OstTraceDef1( OST_TRACE_CATEGORY_RND, TRACE_NORMAL, TUSBCENDPOINT_TRYTOSTARTWRITE, |
3280 "TryToStartWrite 1 ep=%d", iEndpointNumber ); |
|
3066 if (iEndpointInfo.iDir != KUsbEpDirIn && |
3281 if (iEndpointInfo.iDir != KUsbEpDirIn && |
3067 iEndpointInfo.iDir != KUsbEpDirBidirect) |
3282 iEndpointInfo.iDir != KUsbEpDirBidirect) |
3068 { |
3283 { |
3069 // Verify ep direction |
3284 // Verify ep direction |
3070 return KErrUsbEpBadDirection; |
3285 return KErrUsbEpBadDirection; |
3089 } |
3304 } |
3090 |
3305 |
3091 |
3306 |
3092 TInt TUsbcEndpoint::ContinueWrite() |
3307 TInt TUsbcEndpoint::ContinueWrite() |
3093 { |
3308 { |
3094 __KTRACE_OPT(KUSB, Kern::Printf("ContinueWrite 2")); |
3309 OstTraceDef0( OST_TRACE_CATEGORY_RND, TRACE_NORMAL, TUSBCENDPOINT_CONTINUEWRITE, "ContinueWrite 2" ); |
3095 TUint8* bufferAddr; |
3310 TUint8* bufferAddr; |
3096 TPhysAddr physAddr; |
3311 TPhysAddr physAddr; |
3097 TInt bufferLength; |
3312 TInt bufferLength; |
3098 TInt r = iDmaBuffers->TxGetNextXfer(bufferAddr, bufferLength, physAddr); |
3313 TInt r = iDmaBuffers->TxGetNextXfer(bufferAddr, bufferLength, physAddr); |
3099 if (r != KErrNone) // probably already active |
3314 if (r != KErrNone) // probably already active |
3100 return r; |
3315 return r; |
3101 __KTRACE_OPT(KUSB, Kern::Printf("ContinueWrite 3")); |
3316 OstTraceDef0( OST_TRACE_CATEGORY_RND, TRACE_NORMAL, TUSBCENDPOINT_CONTINUEWRITE_DUP1, |
3317 "ContinueWrite 3" ); |
|
3318 |
|
3102 iDmaBuffers->TxSetActive(); |
3319 iDmaBuffers->TxSetActive(); |
3103 TBool zlpReqd = EFalse; |
3320 TBool zlpReqd = EFalse; |
3104 TUint32 transferSize = iTransferInfo.iTransferSize; |
3321 TUint32 transferSize = iTransferInfo.iTransferSize; |
3105 TInt length = Min(transferSize - iBytesTransferred, (TUint32) bufferLength); |
3322 TInt length = Min(transferSize - iBytesTransferred, (TUint32) bufferLength); |
3106 if (iBytesTransferred+length>=transferSize) |
3323 if (iBytesTransferred+length>=transferSize) |
3115 iRequestCallbackInfo->SetTxBufferInfo(bufferAddr, physAddr, length); |
3332 iRequestCallbackInfo->SetTxBufferInfo(bufferAddr, physAddr, length); |
3116 iRequestCallbackInfo->iZlpReqd = zlpReqd; |
3333 iRequestCallbackInfo->iZlpReqd = zlpReqd; |
3117 #if 0 |
3334 #if 0 |
3118 for (TInt i = 0; i < iRequestCallbackInfo->iLength; i++) |
3335 for (TInt i = 0; i < iRequestCallbackInfo->iLength; i++) |
3119 { |
3336 { |
3120 __KTRACE_OPT(KUSB, Kern::Printf("Buffer[%d] = 0x%02x", i, iRequestCallbackInfo->iBufferStart[i])); |
3337 OstTraceDefExt2( OST_TRACE_CATEGORY_RND, TRACE_NORMAL, TUSBCENDPOINT_CONTINUEWRITE_DUP2, |
3338 "Buffer[%d] = 0x%02x", i, iRequestCallbackInfo->iBufferStart[i] ); |
|
3339 |
|
3121 } |
3340 } |
3122 #endif |
3341 #endif |
3123 r = iController->SetupWriteBuffer(*iRequestCallbackInfo); |
3342 r = iController->SetupWriteBuffer(*iRequestCallbackInfo); |
3124 return r; |
3343 return r; |
3125 } |
3344 } |
3126 |
3345 |
3127 |
3346 |
3128 void TUsbcEndpoint::CancelTransfer(DThread* aThread, TClientBuffer *aTcb) |
3347 void TUsbcEndpoint::CancelTransfer(DThread* aThread, TClientBuffer *aTcb) |
3129 { |
3348 { |
3130 __KTRACE_OPT(KUSB, Kern::Printf("CancelTransfer")); |
3349 OstTraceDef0( OST_TRACE_CATEGORY_RND, TRACE_NORMAL, TUSBCENDPOINT_CANCELTRANSFER, "CancelTransfer" ); |
3131 if (iDmaBuffers != NULL) |
3350 if (iDmaBuffers != NULL) |
3132 { |
3351 { |
3133 if (iClientWritePending) |
3352 if (iClientWritePending) |
3134 { |
3353 { |
3135 __KTRACE_OPT(KUSB, Kern::Printf(" (iClientWritePending)")); |
3354 OstTraceDef0( OST_TRACE_CATEGORY_RND, TRACE_NORMAL, TUSBCENDPOINT_CANCELTRANSFER_DUP1, |
3355 " (iClientWritePending)" ); |
|
3136 iClientWritePending = EFalse; |
3356 iClientWritePending = EFalse; |
3137 iController->CancelWriteBuffer(iLdd, iRealEpNumber); |
3357 iController->CancelWriteBuffer(iLdd, iRealEpNumber); |
3138 iDmaBuffers->TxSetInActive(); |
3358 iDmaBuffers->TxSetInActive(); |
3139 } |
3359 } |
3140 if (iClientReadPending) |
3360 if (iClientReadPending) |
3141 { |
3361 { |
3142 __KTRACE_OPT(KUSB, Kern::Printf(" (iClientReadPending)")); |
3362 OstTraceDef0( OST_TRACE_CATEGORY_RND, TRACE_NORMAL, TUSBCENDPOINT_CANCELTRANSFER_DUP2, |
3363 " (iClientReadPending)" ); |
|
3143 iClientReadPending = EFalse; |
3364 iClientReadPending = EFalse; |
3144 CopyToClient(aThread,aTcb); |
3365 CopyToClient(aThread,aTcb); |
3145 } |
3366 } |
3146 } |
3367 } |
3147 } |
3368 } |
3148 |
3369 |
3149 |
3370 |
3150 void TUsbcEndpoint::AbortTransfer() |
3371 void TUsbcEndpoint::AbortTransfer() |
3151 { |
3372 { |
3152 __KTRACE_OPT(KUSB, Kern::Printf("Abort Transfer")); |
3373 OstTraceDef0( OST_TRACE_CATEGORY_RND, TRACE_NORMAL, TUSBCENDPOINT_ABORTTRANSFER, "Abort Transfer" ); |
3153 if (iDmaBuffers != NULL) |
3374 if (iDmaBuffers != NULL) |
3154 { |
3375 { |
3155 if (iDmaBuffers->TxIsActive()) |
3376 if (iDmaBuffers->TxIsActive()) |
3156 { |
3377 { |
3157 __KTRACE_OPT(KUSB, Kern::Printf(" (iClientWritePending)")); |
3378 OstTraceDef0( OST_TRACE_CATEGORY_RND, TRACE_NORMAL, TUSBCENDPOINT_ABORTTRANSFER_DUP1, |
3379 " (iClientWritePending)" ); |
|
3158 iController->CancelWriteBuffer(iLdd, iRealEpNumber); |
3380 iController->CancelWriteBuffer(iLdd, iRealEpNumber); |
3159 iDmaBuffers->TxSetInActive(); |
3381 iDmaBuffers->TxSetInActive(); |
3160 } |
3382 } |
3161 if (iDmaBuffers->RxIsActive()) |
3383 if (iDmaBuffers->RxIsActive()) |
3162 { |
3384 { |
3163 __KTRACE_OPT(KUSB, Kern::Printf(" (iClientReadPending)")); |
3385 OstTraceDef0( OST_TRACE_CATEGORY_RND, TRACE_NORMAL, TUSBCENDPOINT_ABORTTRANSFER_DUP2, |
3386 " (iClientReadPending)" ); |
|
3164 iController->CancelReadBuffer(iLdd, iRealEpNumber); |
3387 iController->CancelReadBuffer(iLdd, iRealEpNumber); |
3165 iDmaBuffers->RxSetInActive(); |
3388 iDmaBuffers->RxSetInActive(); |
3166 } |
3389 } |
3167 iRequestCallbackInfo->iDfc.Cancel(); |
3390 iRequestCallbackInfo->iDfc.Cancel(); |
3168 } |
3391 } |
3182 } |
3405 } |
3183 |
3406 |
3184 |
3407 |
3185 TUsbcAlternateSettingList::~TUsbcAlternateSettingList() |
3408 TUsbcAlternateSettingList::~TUsbcAlternateSettingList() |
3186 { |
3409 { |
3187 __KTRACE_OPT(KUSB, Kern::Printf("TUsbcAlternateSettingList::~TUsbcAlternateSettingList()")); |
3410 OstTraceDef0( OST_TRACE_CATEGORY_RND, TRACE_FLOW, TUSBCALTERNATESETTINGLIST_TUSBCALTERNATESETTINGLIST_DES, |
3411 "TUsbcAlternateSettingList::~TUsbcAlternateSettingList()" ); |
|
3188 for (TInt i = 0; i <= KMaxEndpointsPerClient; i++) |
3412 for (TInt i = 0; i <= KMaxEndpointsPerClient; i++) |
3189 { |
3413 { |
3190 delete iEndpoint[i]; |
3414 delete iEndpoint[i]; |
3191 } |
3415 } |
3192 } |
3416 } |