kerneltest/e32test/resourceman/resourceman_psl/rescontrol_psl.h
changeset 0 a41df078684a
child 43 c1f20ce4abcf
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/kerneltest/e32test/resourceman/resourceman_psl/rescontrol_psl.h	Mon Oct 19 15:55:17 2009 +0100
@@ -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 <drivers/resourcecontrol.h>
+#include <kernel/kernel.h>
+#include <kernel/kern_priv.h>
+#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__