471 TInt ChannelCaps(TUint aDriverCookie, TDmacTestCaps& aChannelCaps) |
472 TInt ChannelCaps(TUint aDriverCookie, TDmacTestCaps& aChannelCaps) |
472 { |
473 { |
473 TPckg<TDmacTestCaps> package(aChannelCaps); |
474 TPckg<TDmacTestCaps> package(aChannelCaps); |
474 return DoControl(EChannelCaps, reinterpret_cast<TAny*>(aDriverCookie), &package); |
475 return DoControl(EChannelCaps, reinterpret_cast<TAny*>(aDriverCookie), &package); |
475 } |
476 } |
476 |
477 |
477 TInt Open() |
478 TInt Open() |
478 { |
479 { |
479 TInt r = KErrNone; |
480 #if defined(DMA_INVERTED_THREAD_PRIORITIES) |
480 r = DoCreate(KTestDmaLddNameHw,TestDmaLddVersion(), 0, NULL, NULL, EOwnerThread); |
481 const TInt dfcThreadPriority = 11; |
481 RDebug::Printf("RDmaSession::Open returned %d", r); |
482 #else |
|
483 const TInt dfcThreadPriority = 26; |
|
484 #endif |
|
485 const TInt r = DoCreate(KTestDmaLddNameHw, TestDmaLddVersion(), 0, NULL, |
|
486 reinterpret_cast<const TDesC8*>(dfcThreadPriority), EOwnerThread); |
|
487 if (r != KErrNone) |
|
488 { |
|
489 RDebug::Printf("RDmaSession::Open(): DoCreate() returned %d", r); |
|
490 } |
482 return r; |
491 return r; |
483 } |
492 } |
484 |
493 |
485 TInt OpenSim() |
494 TInt OpenSim() |
486 { |
495 { |
487 return DoCreate(KTestDmaLddNameSim,TestDmaLddVersion(), 0, NULL, NULL, EOwnerThread); |
496 #if defined(DMA_INVERTED_THREAD_PRIORITIES) |
|
497 const TInt dfcThreadPriority = 11; |
|
498 #else |
|
499 const TInt dfcThreadPriority = 26; |
|
500 #endif |
|
501 const TInt r = DoCreate(KTestDmaLddNameSim, TestDmaLddVersion(), 0, NULL, |
|
502 reinterpret_cast<const TDesC8*>(dfcThreadPriority), EOwnerThread); |
|
503 if (r != KErrNone) |
|
504 { |
|
505 RDebug::Printf("RDmaSession::OpenSim(): DoCreate() returned %d", r); |
|
506 } |
|
507 return r; |
488 } |
508 } |
489 |
509 |
490 TInt RequestCreateOld(TUint aChannelCookie, TUint& aRequestCookie, TUint aMaxTransferSize=0) |
510 TInt RequestCreateOld(TUint aChannelCookie, TUint& aRequestCookie, TUint aMaxTransferSize=0) |
491 { |
511 { |
492 return DoRequestCreate(aChannelCookie, EFalse, aMaxTransferSize, aRequestCookie); |
512 return DoRequestCreate(aChannelCookie, EFalse, aMaxTransferSize, aRequestCookie); |
493 } |
513 } |
494 |
514 |
495 |
515 |
496 TInt RequestCreate(TUint aChannelCookie, TUint& aRequestCookie, TUint aMaxTransferSize=0) |
516 TInt RequestCreate(TUint aChannelCookie, TUint& aRequestCookie, TUint aMaxTransferSize=0) |
497 { |
517 { |
498 return DoRequestCreate(aChannelCookie, ETrue, aMaxTransferSize, aRequestCookie); |
518 return DoRequestCreate(aChannelCookie, ETrue, aMaxTransferSize, aRequestCookie); |
499 } |
519 } |
500 |
520 |
501 TInt RequestDestroy(TUint aRequestCookie) |
521 TInt RequestDestroy(TUint aRequestCookie) |
502 { |
522 { |
503 return DoControl(ERequestClose, reinterpret_cast<TAny*>(aRequestCookie)); |
523 return DoControl(ERequestClose, reinterpret_cast<TAny*>(aRequestCookie)); |
504 } |
524 } |
505 |
525 |
506 TInt RequestFragmentCount(TUint aRequestCookie) |
526 TInt RequestFragmentCount(TUint aRequestCookie) |
507 { |
527 { |
508 return DoControl(EFragmentCount, reinterpret_cast<TAny*>(aRequestCookie)); |
528 return DoControl(EFragmentCount, reinterpret_cast<TAny*>(aRequestCookie)); |
509 } |
529 } |
510 |
530 |
511 TInt RequestEnableDstElementCounting(TUint aRequestCookie) |
531 TInt RequestEnableDstElementCounting(TUint aRequestCookie) |
512 { |
532 { |
513 return DoControl(EEnableDstElementCounting, reinterpret_cast<TAny*>(aRequestCookie)); |
533 return DoControl(EEnableDstElementCounting, reinterpret_cast<TAny*>(aRequestCookie)); |
514 } |
534 } |
515 |
535 |
516 TInt RequestEnableSrcElementCounting(TUint aRequestCookie) |
536 TInt RequestEnableSrcElementCounting(TUint aRequestCookie) |
517 { |
537 { |
518 return DoControl(EEnableSrcElementCounting, reinterpret_cast<TAny*>(aRequestCookie)); |
538 return DoControl(EEnableSrcElementCounting, reinterpret_cast<TAny*>(aRequestCookie)); |
519 } |
539 } |
520 |
540 |
521 TInt RequestDisableDstElementCounting(TUint aRequestCookie) |
541 TInt RequestDisableDstElementCounting(TUint aRequestCookie) |
522 { |
542 { |
523 return DoControl(EDisableDstElementCounting, reinterpret_cast<TAny*>(aRequestCookie)); |
543 return DoControl(EDisableDstElementCounting, reinterpret_cast<TAny*>(aRequestCookie)); |
524 } |
544 } |
525 |
545 |
526 TInt RequestDisableSrcElementCounting(TUint aRequestCookie) |
546 TInt RequestDisableSrcElementCounting(TUint aRequestCookie) |
527 { |
547 { |
528 return DoControl(EDisableSrcElementCounting, reinterpret_cast<TAny*>(aRequestCookie)); |
548 return DoControl(EDisableSrcElementCounting, reinterpret_cast<TAny*>(aRequestCookie)); |
529 } |
549 } |
530 |
550 |
531 TInt RequestTotalNumDstElementsTransferred(TUint aRequestCookie) |
551 TInt RequestTotalNumDstElementsTransferred(TUint aRequestCookie) |
532 { |
552 { |
533 return DoControl(ETotalNumDstElementsTransferred, reinterpret_cast<TAny*>(aRequestCookie)); |
553 return DoControl(ETotalNumDstElementsTransferred, reinterpret_cast<TAny*>(aRequestCookie)); |
534 } |
554 } |
535 |
555 |
536 TInt RequestTotalNumSrcElementsTransferred(TUint aRequestCookie) |
556 TInt RequestTotalNumSrcElementsTransferred(TUint aRequestCookie) |
537 { |
557 { |
538 return DoControl(ETotalNumSrcElementsTransferred, reinterpret_cast<TAny*>(aRequestCookie)); |
558 return DoControl(ETotalNumSrcElementsTransferred, reinterpret_cast<TAny*>(aRequestCookie)); |
539 } |
559 } |
540 |
560 |
541 /** |
561 /** |
542 Will fragment a DMA request using the legacy API |
562 Will fragment a DMA request using the legacy API |
543 */ |
563 */ |
544 TInt FragmentRequestOld(TUint aRequestCookie, const TDmaTransferArgs& aTransferArgs, TUint64* aDurationMicroSecs=NULL) |
564 TInt FragmentRequestOld(TUint aRequestCookie, const TDmaTransferArgs& aTransferArgs, |
|
565 TUint64* aDurationMicroSecs=NULL) |
545 { |
566 { |
546 const TFragmentArgs args(aRequestCookie, aTransferArgs, aDurationMicroSecs); |
567 const TFragmentArgs args(aRequestCookie, aTransferArgs, aDurationMicroSecs); |
547 TPckgC<TFragmentArgs> package(args); |
568 TPckgC<TFragmentArgs> package(args); |
548 return DoControl(EFragmentLegacy, &package); |
569 return DoControl(EFragmentLegacy, &package); |
549 } |
570 } |
550 |
571 |
551 /** |
572 /** |
552 Will fragment a DMA request using the new API |
573 Will fragment a DMA request using the new API |
553 */ |
574 */ |
554 TInt FragmentRequest(TUint aRequestCookie, const TDmaTransferArgs& aTransferArgs, TUint64* aDurationMicroSecs=NULL) |
575 TInt FragmentRequest(TUint aRequestCookie, const TDmaTransferArgs& aTransferArgs, |
|
576 TUint64* aDurationMicroSecs=NULL) |
555 { |
577 { |
556 const TFragmentArgs args(aRequestCookie, aTransferArgs, aDurationMicroSecs); |
578 const TFragmentArgs args(aRequestCookie, aTransferArgs, aDurationMicroSecs); |
557 TPckgC<TFragmentArgs> package(args); |
579 TPckgC<TFragmentArgs> package(args); |
558 return DoControl(EFragment, &package); |
580 return DoControl(EFragment, &package); |
559 } |
581 } |
560 |
582 |
561 TInt QueueRequest(TUint aRequestCookie, TRequestStatus& aStatus, TCallbackRecord* aRecord = NULL, TUint64* aDurationMicroSecs=NULL) |
583 TInt QueueRequest(TUint aRequestCookie, TRequestStatus& aStatus, TCallbackRecord* aRecord = NULL, |
|
584 TUint64* aDurationMicroSecs=NULL) |
562 { |
585 { |
563 //These dummy values can accept the writeback from the driver |
586 //These dummy values can accept the writeback from the driver |
564 //if the client does not want them. |
587 //if the client does not want them. |
565 //(TClientDataRequest can not be programmed with a NULL to |
588 //(TClientDataRequest can not be programmed with a NULL to |
566 //indicate that an argument is unwanted) |
589 //indicate that an argument is unwanted) |
567 TCallbackRecord dummyRec; |
590 TCallbackRecord dummyRec; |
568 TUint64 dummyTime=0; |
591 TUint64 dummyTime=0; |
569 |
592 |
570 aStatus = KRequestPending; |
593 aStatus = KRequestPending; |
571 |
594 |
572 TQueueArgs args(aRequestCookie, &aStatus, aRecord ? aRecord : &dummyRec, aDurationMicroSecs ? aDurationMicroSecs : &dummyTime); |
595 TQueueArgs args(aRequestCookie, &aStatus, aRecord ? aRecord : &dummyRec, |
|
596 aDurationMicroSecs ? aDurationMicroSecs : &dummyTime); |
573 TPckgC<TQueueArgs> package(args); |
597 TPckgC<TQueueArgs> package(args); |
574 return DoControl(EQueueRequest, &package); |
598 return DoControl(EQueueRequest, &package); |
575 } |
599 } |
576 |
600 |
577 /** |
601 /** |
578 Synchronous version of QueueRequest |
602 Synchronous version of QueueRequest |
579 */ |
603 */ |
580 TInt QueueRequest(TUint aRequestCookie, TCallbackRecord* aRecord = NULL, TUint64* aDurationMicroSecs=NULL) |
604 TInt QueueRequest(TUint aRequestCookie, TCallbackRecord* aRecord = NULL, |
|
605 TUint64* aDurationMicroSecs=NULL) |
581 { |
606 { |
582 TRequestStatus status; |
607 TRequestStatus status; |
583 TInt r = QueueRequest(aRequestCookie, status, aRecord, aDurationMicroSecs); |
608 TInt r = QueueRequest(aRequestCookie, status, aRecord, aDurationMicroSecs); |
584 User::WaitForRequest(status); |
609 User::WaitForRequest(status); |
585 return r; |
610 return r; |
590 Additional request parameters are included in iRequeueArgs, these will be |
615 Additional request parameters are included in iRequeueArgs, these will be |
591 transferred from ISR context callback using the TDmaChannel::IsrRedoRequest function |
616 transferred from ISR context callback using the TDmaChannel::IsrRedoRequest function |
592 |
617 |
593 @pre Isr callback for completion must have been requested at request fragmentation time |
618 @pre Isr callback for completion must have been requested at request fragmentation time |
594 */ |
619 */ |
595 TInt QueueRequestWithRequeue(TUint aRequestCookie, TIsrRequeArgs* aRequeueArgs, TInt aCount, TRequestStatus& aStatus, TCallbackRecord* aRecord = NULL, TUint64* aDurationMicroSecs=NULL) |
620 TInt QueueRequestWithRequeue(TUint aRequestCookie, TIsrRequeArgs* aRequeueArgs, TInt aCount, |
|
621 TRequestStatus& aStatus, TCallbackRecord* aRecord = NULL, |
|
622 TUint64* aDurationMicroSecs=NULL) |
596 { |
623 { |
597 //These dummy values can accept the writeback from the driver |
624 //These dummy values can accept the writeback from the driver |
598 //if the client does not want them. |
625 //if the client does not want them. |
599 //(TClientDataRequest can not be programmed with a NULL to |
626 //(TClientDataRequest can not be programmed with a NULL to |
600 //indicate that an argument is unwanted) |
627 //indicate that an argument is unwanted) |
601 TCallbackRecord dummyRec; |
628 TCallbackRecord dummyRec; |
602 TUint64 dummyTime=0; |
629 TUint64 dummyTime=0; |
603 |
630 |
604 aStatus = KRequestPending; |
631 aStatus = KRequestPending; |
605 |
632 |
606 TQueueArgsWithReque args(aRequeueArgs, aCount, aRequestCookie, &aStatus, aRecord ? aRecord : &dummyRec, aDurationMicroSecs ? aDurationMicroSecs : &dummyTime); |
633 TQueueArgsWithReque args(aRequeueArgs, aCount, aRequestCookie, |
|
634 &aStatus, aRecord ? aRecord : &dummyRec, |
|
635 aDurationMicroSecs ? aDurationMicroSecs : &dummyTime); |
607 TPckgC<TQueueArgsWithReque> package(args); |
636 TPckgC<TQueueArgsWithReque> package(args); |
608 return DoControl(EQueueRequestWithReque, &package); |
637 return DoControl(EQueueRequestWithReque, &package); |
609 } |
638 } |
610 |
639 |
611 /** |
640 /** |
612 Synchronous version of QueueRequestWithRequeue |
641 Synchronous version of QueueRequestWithRequeue |
613 */ |
642 */ |
614 TInt QueueRequestWithRequeue(TUint aRequestCookie, TIsrRequeArgs* aRequeueArgs, TInt aCount, TCallbackRecord* aRecord = NULL, TUint64* aDurationMicroSecs=NULL) |
643 TInt QueueRequestWithRequeue(TUint aRequestCookie, TIsrRequeArgs* aRequeueArgs, TInt aCount, |
|
644 TCallbackRecord* aRecord = NULL, TUint64* aDurationMicroSecs=NULL) |
615 { |
645 { |
616 TRequestStatus status; |
646 TRequestStatus status; |
617 TInt r = QueueRequestWithRequeue(aRequestCookie, aRequeueArgs, aCount, status, aRecord, aDurationMicroSecs); |
647 TInt r = QueueRequestWithRequeue(aRequestCookie, aRequeueArgs, aCount, status, aRecord, |
|
648 aDurationMicroSecs); |
618 User::WaitForRequest(status); |
649 User::WaitForRequest(status); |
619 return r; |
650 return r; |
620 } |
651 } |
621 |
652 |
622 TInt OpenSharedChunk(RChunk& aChunk) |
653 TInt OpenSharedChunk(RChunk& aChunk) |
659 struct TFragmentArgs |
691 struct TFragmentArgs |
660 { |
692 { |
661 TFragmentArgs() |
693 TFragmentArgs() |
662 :iRequestCookie(0), iTransferArgs(), iDurationMicroSecs(NULL) |
694 :iRequestCookie(0), iTransferArgs(), iDurationMicroSecs(NULL) |
663 {} |
695 {} |
664 TFragmentArgs(TUint aRequestCookie, const TDmaTransferArgs& aTransferArgs, TUint64* aDurationMicroSecs = NULL) |
696 TFragmentArgs(TUint aRequestCookie, const TDmaTransferArgs& aTransferArgs, |
665 :iRequestCookie(aRequestCookie), iTransferArgs(aTransferArgs), iDurationMicroSecs(aDurationMicroSecs) |
697 TUint64* aDurationMicroSecs = NULL) |
|
698 :iRequestCookie(aRequestCookie), iTransferArgs(aTransferArgs), |
|
699 iDurationMicroSecs(aDurationMicroSecs) |
666 {} |
700 {} |
667 |
701 |
668 const TUint iRequestCookie; |
702 const TUint iRequestCookie; |
669 const TDmaTransferArgs iTransferArgs; |
703 const TDmaTransferArgs iTransferArgs; |
670 TUint64* const iDurationMicroSecs; |
704 TUint64* const iDurationMicroSecs; |
671 }; |
705 }; |
672 |
706 |
673 struct TQueueArgs |
707 struct TQueueArgs |
674 { |
708 { |
675 TQueueArgs(TUint aRequestCookie=0, TRequestStatus* aStatus=NULL, TCallbackRecord* aCallbackRecord=NULL, TUint64* aDurationMicroSecs=NULL) |
709 TQueueArgs(TUint aRequestCookie=0, TRequestStatus* aStatus=NULL, |
676 :iRequestCookie(aRequestCookie), iStatus(aStatus), iCallbackRecord(aCallbackRecord), iDurationMicroSecs(aDurationMicroSecs) |
710 TCallbackRecord* aCallbackRecord=NULL, TUint64* aDurationMicroSecs=NULL) |
|
711 :iRequestCookie(aRequestCookie), iStatus(aStatus), iCallbackRecord(aCallbackRecord), |
|
712 iDurationMicroSecs(aDurationMicroSecs) |
677 {} |
713 {} |
678 TUint iRequestCookie; |
714 TUint iRequestCookie; |
679 TRequestStatus* iStatus; |
715 TRequestStatus* iStatus; |
680 TCallbackRecord* iCallbackRecord; |
716 TCallbackRecord* iCallbackRecord; |
681 TUint64* iDurationMicroSecs; |
717 TUint64* iDurationMicroSecs; |