diff -r 000000000000 -r dfb7c4ff071f commsfwutils/commsbufs/inc/commsbufskern.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/commsfwutils/commsbufs/inc/commsbufskern.h Thu Dec 17 09:22:25 2009 +0200 @@ -0,0 +1,118 @@ +// Copyright (c) 1999-2009 Nokia Corporation and/or its subsidiary(-ies). +// All rights reserved. +// This component and the accompanying materials are made available +// under the terms of "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: +// + +#ifndef __COMMSBUFS_KERNEL_LIBRARY_H__ +#define __COMMSBUFS_KERNEL_LIBRARY_H__ + + +#include + +#include +#include + +class TShBuf; + +/** +Kernel side representation of commsbuf metadata. Maps on top of fields that user side and kernel side share an interest in. +@publishedPartner +*/ +class DCommsBuf : public TCommsBuf + { + friend class DCommsPond; + +public: + DCommsBuf() + {}; + + IMPORT_C static TInt AcceptFromClient(DThread* aClient, TInt aHandle, DCommsBuf* aSanitised); + IMPORT_C TInt TransferToClient(DThread* aClient); + IMPORT_C void Free(); + + inline TInt Length() const; + inline void SetLength(TInt aLength); + + inline TInt Offset() const; + inline void SetOffset(TInt aOffset); + + inline TUint8* Ptr() const; + +private: + DCommsBuf(TShBuf* aShBuf, TInt aCommsPoolHandle, TInt aBufSize); + DCommsBuf(TShBuf* aShBuf, TInt aCommsPoolHandle, TInt aBufSize, TInt aLength); + + inline TAny* operator new(TUint aSize, const TUint8* aPtr); + inline void operator delete(TAny* aPtr, const TUint8*); + }; + + +class TCommsPond; +class TPoolRecord; + +/** +Kernel side representation of an RCommsPond. A collection of shared buffer pools. +@publishedPartner +*/ +class DCommsPond + { +public: + IMPORT_C static DCommsPond* New(); + ~DCommsPond(); + + IMPORT_C TInt Load(TPondTransferBuf& aPondStore, DThread* aClient); + IMPORT_C void Unload(); + + IMPORT_C TInt SetDefaultAllocPool(TInt aRequiredBufferSize); + + IMPORT_C TInt Alloc(DCommsBuf& aBuf); + IMPORT_C void Free(DCommsBuf& aBuf); + +private: + DCommsPond() : iInitialised(EFalse), iDefaultAllocPool(NULL) {} + + TBool iInitialised; + TCommsPond* iPond; + TPoolRecord* iDefaultAllocPool; + }; + + +/** +Panic codes associated with kernel side commsbufs operations +@publishedPartner +*/ +enum TKernCommsBufsPanicCodes + { + EPondNotReady = 0, + EPondAlreadyLoaded = 1, + EPondCorrupt = 2, + ECommsBufDimensionsOutOfBounds = 3, + ECommsBufMetadataCorrupt = 4 + }; + +/** +Standard panic operations. Encapsulates panic catgory. +@publishedPartner +*/ +class KernCommsBuf + { +public: + IMPORT_C static void PanicClient(DThread* aClient, TInt aReason); + IMPORT_C static void Fault(TInt aReason); + }; + + +#include + +#endif // __COMMSBUFS_KERNEL_LIBRARY_H__ +