diff -r 000000000000 -r 96e5fb8b040d kernel/eka/personality/example/personality_int.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/kernel/eka/personality/example/personality_int.h Thu Dec 17 09:24:54 2009 +0200 @@ -0,0 +1,175 @@ +/* +* Copyright (c) 2003-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: +* e32\personality\example\personality_int.h +* Internal header file for example RTOS personality. +* This will be included by the personality layer source files. +* +* WARNING: This file contains some APIs which are internal and are subject +* to change without notice. Such APIs should therefore not be used +* outside the Kernel and Hardware Services package. +* +*/ + + + +/** + @file + @internalComponent +*/ + +#ifndef __PERSONALITY_INT_H__ +#define __PERSONALITY_INT_H__ + +// NThreadBase member data +#define __INCLUDE_NTHREADBASE_DEFINES__ + +#include +#include + +// dummy constructor +inline NThreadBase::NThreadBase() + { + } + +class PThread : public NThread + { +public: + enum PThreadState + { + EWaitMsgQ = NThreadBase::ENumNStates, + EWaitSemaphore + }; +public: + static TInt Create(PThread*& aThread, const taskinfo* aInfo); + static void CreateAll(const taskinfo* aInfo); + static void MsgQIDfcFn(TAny*); + static void StateHandler(NThread* aThread, TInt aOp, TInt aParam); + static void ExceptionHandler(TAny* aContext, NThread* aThread); +public: + inline PThread() : iMsgQIDfc(0,0) {} // dummy constructor + void ISRPost(msghdr* aM); + void Post(msghdr* aFirst, msghdr* aLast); + msghdr* GetMsg(); + void HandleSuspend(); + void HandleResume(); + void HandleRelease(TInt aReturnCode); + void HandlePriorityChange(TInt aNewPriority); + void HandleTimeout(); +public: + TInt iTaskId; + TInt iSetPriority; + msghdr* iFirstMsg; + msghdr* iLastMsg; + TDfc iMsgQIDfc; + msghdr* iISRFirstMsg; + msghdr* iISRLastMsg; +public: + static TInt NumTasks; + static TInt MaxTaskId; + static PThread** TaskTable; + static const TUint8 NThreadPriorityTable[MAX_TASK_PRIORITY+1]; + static const SNThreadHandlers Handlers; + }; + +class PMemPool; +struct SMemBlock + { + PMemPool* iPool; + SMemBlock* iNext; // only if free block + }; + +class PMemPool + { +public: + TInt Create(const poolinfo* aInfo); + void* Alloc(); + void Free(void* aBlock); +public: + SMemBlock* iFirstFree; + size_t iBlockSize; + }; + +class PMemMgr + { +public: + static void Create(const poolinfo* aInfo); + static void* Alloc(size_t aSize); + static void Free(void* aBlock); +public: + TInt iPoolCount; + PMemPool iPools[1]; // extend +public: + static PMemMgr* TheMgr; + }; + + +class PTimer : public NTimer + { +public: + PTimer(); + static void CreateAll(); + static void NTimerExpired(TAny*); +public: + TInt iPeriod; // 0 if single shot + TAny* iCookie; + PThread* iThread; + TUint iExpiryCount; +public: + static TInt NumTimers; + static PTimer* TimerTable; + }; + + +class PSemaphore + { +public: + static void CreateAll(); +public: + PSemaphore(); + void WaitCancel(PThread* aThread); + void SuspendWaitingThread(PThread* aThread); + void ResumeWaitingThread(PThread* aThread); + void ChangeWaitingThreadPriority(PThread* aThread, TInt aNewPriority); + void Signal(); + void ISRSignal(); + static void IDfcFn(TAny*); +public: + TInt iCount; + TInt iISRCount; + TDfc iIDfc; + SDblQue iSuspendedQ; + TPriList iWaitQ; +public: + static TInt NumSemaphores; + static PSemaphore* SemaphoreTable; + }; + +class TPMsgQ : public TDfc + { +public: + TPMsgQ(TDfcFn aFunction, TAny* aPtr, TDfcQue* aDfcQ, TInt aPriority); + void Receive(); + msghdr* Get(); + void CancelReceive(); +public: + msghdr* iFirstMsg; + msghdr* iLastMsg; + TBool iReady; +public: + static TPMsgQ* ThePMsgQ; + }; + + +#endif