diff -r 000000000000 -r a41df078684a kerneltest/e32test/mmu/d_shbuf.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/kerneltest/e32test/mmu/d_shbuf.h Mon Oct 19 15:55:17 2009 +0100 @@ -0,0 +1,135 @@ +// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +// All rights reserved. +// This component and the accompanying materials are made available +// under the terms of the License "Eclipse Public License v1.0" +// which accompanies this distribution, and is available +// at the URL "http://www.eclipse.org/legal/epl-v10.html". +// +// Initial Contributors: +// Nokia Corporation - initial contribution. +// +// Contributors: +// +// Description: +// e32test/mmu/d_shbuf.h +// +// + +#ifndef D_SHBUF_H +#define D_SHBUF_H + +#include +#include +#include + +class TShPoolInfo; +class TShPoolCreateInfo; + +// Device driver names +_LIT(KTestShBufClient, "d_shbuf_client"); // Driver 0 +_LIT(KTestShBufOwn, "d_shbuf_own"); // Driver 1 + +// Some test data +_LIT8(KTestData1, "QTWHEIRSTTYEUSITOAPPAPSIDSFAGFHUJCKKLIZNXGCPVIBLNEMOQFWCERRATPEA"); +_LIT8(KTestData2, "8297382917319823712893719824737644563284328746372468732643287463"); + +const TInt KTestMinimumAlignmentLog2 = 5; +const TInt KTestPoolSizeInBufs = 10; +const TInt KDefaultPoolHandleFlags = EShPoolWriteable | EShPoolAllocate; + +class RShBufTestChannel : public RBusLogicalChannel + { +public: + enum TTestControl + { + ETestOpenUserPool, + ETestOpenKernelPool, + ETestCloseUserPool, + ETestCloseKernelPool, + ETestManipulateUserBuffer, + ETestAllocateKernelBuffer, + ETestCreatePoolPhysAddrCont, + ETestCreatePoolPhysAddrNonCont, + ETestAllocateMax, + ETestBufferAlignmentKernel, + ETestNegativeTestsKernel, + ETestCreatePoolContiguousPool, + ETestPinBuffer, + // Performance tests + EFromRShBufProcessAndReturn = 100, + EFromRShBufProcessAndRelease, + EFromTPtr8ProcessAndReturn, + EFromTPtr8ProcessAndRelease + }; + + enum { EClientThread = 0, EOwnThread = 1 }; + +#ifndef __KERNEL_MODE__ + inline TInt Open(TInt aDriverNo); // driver 0 executes in client thread, driver 1 has its own thread + inline TInt OpenUserPool(TInt aHandle, const TShPoolInfo& aPoolInfo); + inline TInt OpenKernelPool(TShPoolCreateInfo& aInfo, TInt& aHandle); + inline TInt CloseUserPool(); + inline TInt CloseKernelPool(); + inline TInt ManipulateUserBuffer(TInt aHandle); + inline TInt AllocateKernelBuffer(TInt aPoolIndex, TInt& aHandle); + inline TInt CreatePoolPhysAddrCont(TInt aBufSize); + inline TInt CreatePoolPhysAddrNonCont(TInt aBufSize); + inline TInt AllocateMax(TInt aPoolIndex, TInt& aAllocated); + inline TInt BufferAlignmentKernel(TInt aBufSize, TInt aAlignment); + inline TInt NegativeTestsKernel(); + inline TInt ContiguousPoolKernel(TShPoolCreateInfo& aInfo); + inline TInt PinBuffer(TInt aPoolHandle, TInt aBufferHandle); + // Performance tests + inline TInt FromRShBufProcessAndReturn(TUint aBufSize); + inline TInt FromRShBufProcessAndRelease(TInt aHandle); + inline TInt FromTPtr8ProcessAndReturn(TDes8& aBuf, TUint bufferSize); + inline TInt FromTPtr8ProcessAndRelease(TDes8& aBuf); +#endif // __KERNEL_MODE__ + }; + +#ifndef __KERNEL_MODE__ +inline TInt RShBufTestChannel::Open(TInt aDriverNo) + { + if (aDriverNo!=0&&aDriverNo!=1) + { + return KErrArgument; + } + return (DoCreate((aDriverNo)?(KTestShBufOwn()):(KTestShBufClient()),TVersion(1,0,KE32BuildVersionNumber),KNullUnit,NULL,NULL,EOwnerThread)); + } +inline TInt RShBufTestChannel::OpenUserPool(TInt aHandle, const TShPoolInfo& aPoolInfo) + {return DoControl(ETestOpenUserPool, (TAny*) aHandle, (TAny*) &aPoolInfo);} +inline TInt RShBufTestChannel::OpenKernelPool(TShPoolCreateInfo& aInfo, TInt& aHandle) + {return DoControl(ETestOpenKernelPool, (TAny*) &aInfo, (TAny*) &aHandle);} +inline TInt RShBufTestChannel::CloseUserPool() + {return DoControl(ETestCloseUserPool);} +inline TInt RShBufTestChannel::CloseKernelPool() + {return DoControl(ETestCloseKernelPool);} +inline TInt RShBufTestChannel::ManipulateUserBuffer(TInt aHandle) + {return DoControl(ETestManipulateUserBuffer, (TAny*) aHandle);} +inline TInt RShBufTestChannel::AllocateKernelBuffer(TInt aPoolIndex, TInt& aHandle) + {return DoControl(ETestAllocateKernelBuffer, (TAny*) aPoolIndex, (TAny*) &aHandle);} +inline TInt RShBufTestChannel::CreatePoolPhysAddrCont(TInt aBufSize) + {return DoControl(ETestCreatePoolPhysAddrCont, (TAny*) aBufSize);} +inline TInt RShBufTestChannel::CreatePoolPhysAddrNonCont(TInt aBufSize) + {return DoControl(ETestCreatePoolPhysAddrNonCont, (TAny*) aBufSize);} +inline TInt RShBufTestChannel::AllocateMax(TInt aPoolIndex, TInt& aAllocated) + {return DoControl(ETestAllocateMax, (TAny*) aPoolIndex, (TAny*) &aAllocated);} +inline TInt RShBufTestChannel::BufferAlignmentKernel(TInt aBufSize, TInt aAlignment) + {return DoControl(ETestBufferAlignmentKernel, (TAny*) aBufSize, (TAny*) aAlignment);} +inline TInt RShBufTestChannel::NegativeTestsKernel() + {return DoControl(ETestNegativeTestsKernel);} +inline TInt RShBufTestChannel::ContiguousPoolKernel(TShPoolCreateInfo& aInfo) + {return DoControl(ETestCreatePoolContiguousPool, (TAny*)&aInfo);} +inline TInt RShBufTestChannel::PinBuffer(TInt aPoolHandle, TInt aBufferHandle) + {return DoControl(ETestPinBuffer, (TAny*) aPoolHandle, (TAny*) aBufferHandle);} +// Performance tests +inline TInt RShBufTestChannel::FromRShBufProcessAndReturn(TUint aBufSize) + {return DoControl(EFromRShBufProcessAndReturn, (TAny*) aBufSize);} +inline TInt RShBufTestChannel::FromRShBufProcessAndRelease(TInt aHandle) + {return DoControl(EFromRShBufProcessAndRelease,(TAny*)aHandle);} +inline TInt RShBufTestChannel::FromTPtr8ProcessAndReturn(TDes8& aBuf, TUint aBufSize) + {return DoControl(EFromTPtr8ProcessAndReturn,(TAny*)&aBuf, (TAny*) aBufSize);} +inline TInt RShBufTestChannel::FromTPtr8ProcessAndRelease(TDes8& aBuf) + {return DoControl(EFromTPtr8ProcessAndRelease,(TAny*)&aBuf);} +#endif // __KERNEL_MODE__ +#endif // D_SHBUF_H