diff -r 000000000000 -r 96e5fb8b040d kerneltest/e32test/resourceman/resourceman_psl/rescontrol_psl.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/kerneltest/e32test/resourceman/resourceman_psl/rescontrol_psl.h Thu Dec 17 09:24:54 2009 +0200 @@ -0,0 +1,395 @@ +// Copyright (c) 2007-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\resourceman\resourceman_psl\rescontrol_psl.h +// +// + +#ifndef __RESCONTROL_PSL_H__ +#define __RESCONTROL_PSL_H__ +#include +#include +#include +#define E_ON 0x1 +#define E_OFF 0x0 + +//Specifies the number of pre-allocate the PIL data structures. +#define KERNEL_CLIENTS 0x32 +#define USER_CLIENTS 0x10 +#define CLIENT_LEVELS 0x32 +#define REQUESTS 0x19 + +#define MAX_RESOURCE_COUNT 30 +#define MAX_DEPENDENT_RESOURCE_COUNT 10 + +#define MAX_BLOCK_TIME 200 //Maximum block time +#define MIN_BLOCK_TIME 50 //Guaranteed minimum block + +#define CLEAN_AND_RETURN(resCount, resArray, error) \ + { \ + for(TUint count = 0; count < resCount; count++) \ + delete resArray[count]; \ + delete resArray; \ + return error; \ + } + +const TUint KBinary = 0x0; +const TUint KMultiLevel = 0x1; + +_LIT(KResmanName, "DSimulatedResMan"); +/** Simulated resource controller class */ +NONSHARABLE_CLASS(DSimulatedPowerResourceController): public DPowerResourceController + { +public: + DSimulatedPowerResourceController(); + ~DSimulatedPowerResourceController(); + TInt DoInitController(); + TInt DoInitResources(); + TInt DoRegisterStaticResources(DStaticPowerResource**& aStaticResourceArray, TUint16& aStaticResourceCount); + // Function to process instantaneous resources + TInt ProcessInstantaneousResources(TPowerRequest& req, TInt& aClientLevel, TInt aMaxLevel, TInt aMinLevel, TInt aDefaultLevel); + // Function to procces polled resources + TInt ProcessPolledResources(TPowerRequest& req, TInt& aClientLevel, TInt aMaxLevel, TInt aMinLevel, TInt aDefaultLevel, TInt aBlockTime = 0); + // Function to change the state of the resource + TInt ChangeResource(TPowerRequest& req, TInt& aClientLevel, TInt aMaxLevel, TInt aMinLevel); + // Function to process event driven resources + TInt ProcessEventResources(TPowerRequest& req, TInt& aClientLevel, TInt aMaxLevel, TInt aMinLevel, TInt aDefaultLevel, TInt aBlockTime = 0); + IMPORT_C static TInt CaptureIdleResourcesInfo(TUint aControllerId, TUint aNumResources, TPtr* aPtr); + IMPORT_C static TInt CompleteResourceControllerInitialisation(); +#ifdef PRM_ENABLE_EXTENDED_VERSION + TInt DoRegisterStaticResourcesDependency(DStaticPowerResourceD**& aStaticResourceDArray, TUint16& aStaticResourceDCount); + TInt CreateResourceDependency(DStaticPowerResourceD** pResArray); +#endif +private: + static void TimerIsrFunc(TAny* ptr); //ISR Function called when specfied timer expires. This is for even driven resources + static void EventDfcFunc(TAny* ptr); //Function to wakeup the fast semphore. This is called from timer ISR. + DStaticPowerResource** iResources; + TUint16 iStaticResourceCount; + NFastSemaphore iEventFastSem; //Semphore to block the PIL of resource controller for event driven resource operations. + TDfc iEventDfc; //Dfc to run to signal the event semaphore when the timer expires. Queued from timer ISR +#ifdef PRM_ENABLE_EXTENDED_VERSION + DStaticPowerResourceD** iDependencyResources; + TUint16 iStaticResDependencyCount; + SNode* iNodeArray; + TUint16 iNodeCount; +#endif + }; + +#ifdef PRM_ENABLE_EXTENDED_VERSION +DSimulatedPowerResourceController* GetControllerPtr(); +#endif +//class definition for Binary Single Instantaneous Positive resource +NONSHARABLE_CLASS(DBSIGISPResource) : public DStaticPowerResource + { +public: + DBSIGISPResource(); + TInt DoRequest(TPowerRequest &req); + TInt GetInfo(TDes8* aInfo) const; +private: + TInt iMinLevel; + TInt iMaxLevel; + TInt iCurrentLevel; + }; + +//class definition for multilevel single instantaneous positive resource +NONSHARABLE_CLASS(DMLSIGISPResource) : public DStaticPowerResource + { +public: + DMLSIGISPResource(); + TInt DoRequest(TPowerRequest &req); + TInt GetInfo(TDes8* aInfo) const; +private: + TInt iMinLevel; + TInt iMaxLevel; + TInt iCurrentLevel; + }; + +//class definition for binary single instantaneous negative resource +NONSHARABLE_CLASS(DBSIGISNResource) : public DStaticPowerResource + { +public: + DBSIGISNResource(); + TInt DoRequest(TPowerRequest &req); + TInt GetInfo(TDes8* aInfo) const; +private: + TInt iMinLevel; + TInt iMaxLevel; + TInt iCurrentLevel; + }; + +//class definition for multilevel single instantaneous negative resource +NONSHARABLE_CLASS(DMLSIGISNResource) : public DStaticPowerResource + { +public: + DMLSIGISNResource(); + TInt DoRequest(TPowerRequest &req); + TInt GetInfo(TDes8* aInfo) const; +private: + TInt iMinLevel; + TInt iMaxLevel; + TInt iCurrentLevel; + }; + +//class definition for binary single long latency positive resource +NONSHARABLE_CLASS(DBSLGLSPResource) : public DStaticPowerResource + { +public: + DBSLGLSPResource(); + TInt DoRequest(TPowerRequest &req); + TInt GetInfo(TDes8* aInfo) const; +private: + TInt iMinLevel; + TInt iMaxLevel; + TInt iCurrentLevel; + TBool iPolled; + TInt iBlockTime; //Time duration the thread will be blocked. + }; + +//class definition for multilevel single long latency positive resource +NONSHARABLE_CLASS(DMLSLGLSPResource) : public DStaticPowerResource + { +public: + DMLSLGLSPResource(); + TInt DoRequest(TPowerRequest &req); + TInt GetInfo(TDes8* aInfo) const; +private: + TInt iMinLevel; + TInt iMaxLevel; + TInt iCurrentLevel; + TBool iPolled; + TInt iBlockTime; //Time duration the thread will be blocked. + }; + +//class definition for binary single long latency get & instantaneous set negative resource +NONSHARABLE_CLASS(DBSLGISNResource) : public DStaticPowerResource + { +public: + DBSLGISNResource(); + TInt DoRequest(TPowerRequest &req); + TInt GetInfo(TDes8* aInfo) const; +private: + TInt iMinLevel; + TInt iMaxLevel; + TInt iCurrentLevel; + TBool iPolled; + TInt iBlockTime; //Time duration the thread will be blocked. + }; + +//class definition for multilevel single long latency get & instantaneous set negative resource +NONSHARABLE_CLASS(DMLSLGISNResource) : public DStaticPowerResource + { +public: + DMLSLGISNResource(); + TInt DoRequest(TPowerRequest &req); + TInt GetInfo(TDes8* aInfo) const; +private: + TInt iMinLevel; + TInt iMaxLevel; + TInt iCurrentLevel; + TBool iPolled; + TInt iBlockTime; //Time duration the thread will be blocked. + }; + +//class definition for binary single instantaneous get & long latency set positive resource +NONSHARABLE_CLASS(DBSIGLSPResource) : public DStaticPowerResource + { +public: + DBSIGLSPResource(); + TInt DoRequest(TPowerRequest &req); + TInt GetInfo(TDes8* aInfo) const; +private: + TInt iMinLevel; + TInt iMaxLevel; + TInt iCurrentLevel; + TBool iPolled; + TInt iBlockTime; //Time duration the thread will be blocked. + }; + +//class definition for multilevel single instantaneous get & long latency get positive resource +NONSHARABLE_CLASS(DMLSIGLSPResource) : public DStaticPowerResource + { +public: + DMLSIGLSPResource(); + TInt DoRequest(TPowerRequest &req); + TInt GetInfo(TDes8* aInfo) const; +private: + TInt iMinLevel; + TInt iMaxLevel; + TInt iCurrentLevel; + TBool iPolled; + TInt iBlockTime; //Time duration the thread will be blocked. + }; + +//class definition for Binary Shared Instantaneous Positive resource +NONSHARABLE_CLASS(DBSHIGISPResource) : public DStaticPowerResource + { +public: + DBSHIGISPResource(); + TInt DoRequest(TPowerRequest &req); + TInt GetInfo(TDes8* aInfo) const; +private: + TInt iMinLevel; + TInt iMaxLevel; + TInt iCurrentLevel; + }; + +//class definition for multilevel shared instantaneous positive resource +NONSHARABLE_CLASS(DMLSHIGISPResource) : public DStaticPowerResource + { +public: + DMLSHIGISPResource(); + TInt DoRequest(TPowerRequest &req); + TInt GetInfo(TDes8* aInfo) const; +private: + TInt iMinLevel; + TInt iMaxLevel; + TInt iCurrentLevel; + }; + +//class definition for binary shared instantaneous negative resource +NONSHARABLE_CLASS(DBSHIGISNResource) : public DStaticPowerResource + { +public: + DBSHIGISNResource(); + TInt DoRequest(TPowerRequest &req); + TInt GetInfo(TDes8* aInfo) const; +private: + TInt iMinLevel; + TInt iMaxLevel; + TInt iCurrentLevel; + }; + +//class definition for multilevel shared instantaneous negative resource +NONSHARABLE_CLASS(DMLSHIGISNResource) : public DStaticPowerResource + { +public: + DMLSHIGISNResource(); + TInt DoRequest(TPowerRequest &req); + TInt GetInfo(TDes8* aInfo) const; +private: + TInt iMinLevel; + TInt iMaxLevel; + TInt iCurrentLevel; + }; + +//class definition for binary shared long latency positive resource +NONSHARABLE_CLASS(DBSHLGLSPResource) : public DStaticPowerResource + { +public: + DBSHLGLSPResource(); + TInt DoRequest(TPowerRequest &req); + TInt GetInfo(TDes8* aInfo) const; +private: + TInt iMinLevel; + TInt iMaxLevel; + TInt iCurrentLevel; + TBool iPolled; //ETrue if this is a polled resource, otherwise event driven type + TInt iBlockTime; //Time duration the thread will be blocked. + }; + +//class definition for multilevel shared long latency positive resource +NONSHARABLE_CLASS(DMLSHLGLSPResource) : public DStaticPowerResource + { +public: + DMLSHLGLSPResource(); + TInt DoRequest(TPowerRequest &req); + TInt GetInfo(TDes8* aInfo) const; +private: + TInt iMinLevel; + TInt iMaxLevel; + TInt iCurrentLevel; + TBool iPolled; //ETrue if this is a polled resource, otherwise event driven type + TInt iBlockTime; //Time duration the thread will be blocked. + }; + +//class definition for binary shared long latency get & instantaneous set negative resource +NONSHARABLE_CLASS(DBSHLGISNResource) : public DStaticPowerResource + { +public: + DBSHLGISNResource(); + TInt DoRequest(TPowerRequest &req); + TInt GetInfo(TDes8* aInfo) const; +private: + TInt iMinLevel; + TInt iMaxLevel; + TInt iCurrentLevel; + TBool iPolled; //ETrue if this is a polled resource, otherwise event driven type + TInt iBlockTime; //Time duration the thread will be blocked. + }; + +//class definition for multilevel shared long latency get & instantaneous set negative resource +NONSHARABLE_CLASS(DMLSHLGISNResource) : public DStaticPowerResource + { +public: + DMLSHLGISNResource(); + TInt DoRequest(TPowerRequest &req); + TInt GetInfo(TDes8* aInfo) const; +private: + TInt iMinLevel; + TInt iMaxLevel; + TInt iCurrentLevel; + TBool iPolled; //ETrue if this is a polled resource, otherwise event driven type + TInt iBlockTime; //Time duration the thread will be blocked. + }; + +//class definition for binary shared instantaneous get & long latency set positive resource +NONSHARABLE_CLASS(DBSHIGLSPResource) : public DStaticPowerResource + { +public: + DBSHIGLSPResource(); + TInt DoRequest(TPowerRequest &req); + TInt GetInfo(TDes8* aInfo) const; +private: + TInt iMinLevel; + TInt iMaxLevel; + TInt iCurrentLevel; + TBool iPolled; //ETrue if this is a polled resource, otherwise event driven type + TInt iBlockTime; //Time duration the thread will be blocked. + }; + +//class definition for multilevel shared instantaneous get & long latency get positive resource +NONSHARABLE_CLASS(DMLSHIGLSPResource) : public DStaticPowerResource + { +public: + DMLSHIGLSPResource(); + TInt DoRequest(TPowerRequest &req); + TInt GetInfo(TDes8* aInfo) const; +private: + TInt iMinLevel; + TInt iMaxLevel; + TInt iCurrentLevel; + TBool iPolled; //ETrue if this is a polled resource, otherwise event driven type + TInt iBlockTime; //Time duration the thread will be blocked. + }; + +//class definition for binary shared long latency get & set custom resource +NONSHARABLE_CLASS(DBSHLGLSCResource) : public DStaticPowerResource + { +public: + DBSHLGLSCResource(); + TInt DoRequest(TPowerRequest &req); + TInt GetInfo(TDes8* aInfo) const; + static TBool CustomFunction(TInt &aClientId, const TDesC8& aClientName, + TUint aResourceId, + TCustomOperation aCustomOperation, TInt &aLevel, + TAny* aLevelList, TAny* aReserved); + +private: + TInt iMinLevel; + TInt iMaxLevel; + TInt iCurrentLevel; + TBool iPolled; //ETrue if this is a polled resource, otherwise event driven type + TInt iBlockTime; //Time duration the thread will be blocked. + }; + +#endif //__RESCONTROL_PSL_H__