First public contribution.
1 // Copyright (c) 2002-2009 Nokia Corporation and/or its subsidiary(-ies).
2 // All rights reserved.
3 // This component and the accompanying materials are made available
4 // under the terms of the License "Eclipse Public License v1.0"
5 // which accompanies this distribution, and is available
6 // at the URL "http://www.eclipse.org/legal/epl-v10.html".
8 // Initial Contributors:
9 // Nokia Corporation - initial contribution.
14 // e32test\dma\d_dma.h
15 // User-side API for LDD used to test DMA framework.
28 _LIT(KTestDmaLddName, "TestDmaSim");
30 _LIT(KTestDmaLddName, "TestDma");
33 inline TVersion TestDmaLddVersion() { return TVersion(1, 0, 1); }
35 class RTestDma : public RBusLogicalChannel
48 enum { EGetInfo, EOpen } iWhat;
56 TInt iMaxTransferSize;
72 enum { KMaxChannels = 32 };
75 TInt iMaxTransferSize;
78 TUint32 iSbChannels[KMaxChannels];
80 TUint32 iDbChannels[KMaxChannels];
82 TUint32 iSgChannels[KMaxChannels];
85 #ifndef __KERNEL_MODE__
86 inline TInt GetInfo(TInfo& aInfo);
87 inline TInt Open(TUint32 aId, TInt aDesCount, TInt aMaxTransferSize);
88 inline TInt AllocBuffer(TInt aBufIdx, TInt aSize);
89 inline void FreeAllBuffers();
90 inline void FillBuffer(TInt aBufIdx, TUint8 aFillValue);
91 inline TBool CheckBuffer(TInt aBufIdx, TUint8 aValue);
92 inline TInt Fragment(TInt aRequestIdx, TInt aSrcBufIdx, TInt aDestBufIdx, TInt aSize, TRequestStatus* aRs=NULL);
93 inline TInt Execute(const TDesC8& aCmd);
94 inline TInt FailNext(TInt aFragmentCount);
95 inline TInt FragmentCount(TInt aRequestIdx);
96 inline TInt MissNextInterrupts(TInt aInterruptCount);
97 inline TBool FragmentCheck(TInt aRequestIdx, TInt aExpectedCount);
101 #ifndef __KERNEL_MODE__
103 inline TInt RTestDma::GetInfo(TInfo& aInfo)
105 TPckgBuf<TOpenInfo> infoBuf;
106 infoBuf().iWhat = TOpenInfo::EGetInfo;
107 infoBuf().U.iInfo = &aInfo;
108 return DoCreate(KTestDmaLddName, TestDmaLddVersion(), 0, NULL, &infoBuf) == KErrDied ? KErrNone : KErrGeneral;
111 inline TInt RTestDma::Open(TUint32 aId, TInt aDesCount, TInt aMaxTransferSize)
113 TPckgBuf<TOpenInfo> infoBuf;
114 infoBuf().iWhat = TOpenInfo::EOpen;
115 infoBuf().U.iOpen.iId = aId;
116 infoBuf().U.iOpen.iDesCount = aDesCount;
117 infoBuf().U.iOpen.iMaxTransferSize = aMaxTransferSize;
118 return DoCreate(KTestDmaLddName, TestDmaLddVersion(), 0, NULL, &infoBuf, EOwnerThread);
121 inline TInt RTestDma::AllocBuffer(TInt aBufIdx, TInt aSize)
123 return DoControl(EAllocBuffer, (TAny*)aBufIdx, (TAny*)aSize);
126 inline void RTestDma::FreeAllBuffers()
128 DoControl(EFreeAllBuffers, NULL, NULL);
131 inline void RTestDma::FillBuffer(TInt aBufIdx, TUint8 aFillValue)
133 DoControl(EFillBuffer, (TAny*)aBufIdx, (TAny*)(TUint)aFillValue);
136 inline TBool RTestDma::CheckBuffer(TInt aBufIdx, TUint8 aValue)
138 return DoControl(ECheckBuffer, (TAny*)aBufIdx, (TAny*)(TUint)aValue);
141 inline TInt RTestDma::Fragment(TInt aRequestIdx, TInt aSrcBufIdx, TInt aDestBufIdx, TInt aSize, TRequestStatus* aRs)
144 info.iRequestIdx = aRequestIdx;
145 info.iSrcBufIdx = aSrcBufIdx;
146 info.iDestBufIdx = aDestBufIdx;
150 *aRs = KRequestPending;
151 return DoControl(EFragment, &info, NULL);
154 inline TInt RTestDma::Execute(const TDesC8& aCmd)
156 return DoControl(EExecute, (TDesC8*)&aCmd, NULL);
159 inline TInt RTestDma::FailNext(TInt aFragmentCount)
161 return DoControl(EFailNext, (TAny*)aFragmentCount, NULL);
164 inline TInt RTestDma::FragmentCount(TInt aRequestIdx)
166 return DoControl(EFragmentCount, (TAny*)aRequestIdx, NULL);
169 inline TInt RTestDma::MissNextInterrupts(TInt aInterruptCount)
171 return DoControl(EMissInterrupts, (TAny*)aInterruptCount, NULL);
175 @param The number of fragments expected, 0 means don't check
177 inline TBool RTestDma::FragmentCheck(TInt aRequestIdx, TInt aExpectedCount)
181 TInt actualCount = FragmentCount(aRequestIdx);
182 if(actualCount == aExpectedCount)
186 RDebug::Printf("Fragment count error: expected %d, got %d", aExpectedCount, actualCount);
193 #endif // #ifndef __KERNEL_MODE__