kernel/eka/include/drivers/resourceman.inl
changeset 0 a41df078684a
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/kernel/eka/include/drivers/resourceman.inl	Mon Oct 19 15:55:17 2009 +0100
@@ -0,0 +1,242 @@
+// 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:
+// e32\include\drivers\resourceman.inl
+// 
+// WARNING: This file contains some APIs which are internal and are subject
+//          to change without noticed. Such APIs should therefore not be used
+//          outside the Kernel and Hardware Services package.
+//
+
+/**
+ 
+ @publishedPartner
+ @released 9.5
+ 
+ Request to get the resource controller version
+ 
+ @param aClientId	ID of the client which is requesting the resource controller version.
+ @param aVersion		On Success, returns the version of PRM
+ 
+ @return KErrNone			if successful
+ KErrAccessDenied	if the client ID could not be found in the list of registered clients or
+ if the client was registered to be thread relative and this API is not 
+ called from the same thread.
+ 
+ @pre Interrupts must be enabled
+ @pre Kernel must be unlocked
+ @pre No fast mutex can be held
+ @pre Call in a thread context but not from null thread or DFC thread1
+ @pre Can be used in a device driver.
+*/
+inline TInt PowerResourceManager::GetResourceControllerVersion(TUint aClientId, TUint& aVersion)
+	{
+	__KTRACE_OPT(KRESMANAGER, Kern::Printf(">PowerResourceManager::ResourceControllerVersion"));
+	return ControlIO(aClientId, KResManControlIoGetVersion, (TAny*)&aVersion, NULL);
+	}
+#ifdef PRM_ENABLE_EXTENDED_VERSION
+
+/**
+@publishedPartner
+@released 9.5
+
+Request to register dynamic resource. This is also used to register dynamic resource with dependency
+
+@param aClientId	ID of the client which is requesting the dynamic resource registration.
+@param aResource	Dynamic resource to register.
+@param aResourceId	On success, updates with resource id corresponding to this resource
+
+@return KErrNone			if successful
+		KErrAccessDenied	if the client ID could not be found in the list of registered clients or
+							if the client was registered to be thread relative and this API is not 
+							called from the same thread or if ID is user side client id.
+		KErrNotSupported	if this API is called before PRM is fully intialised or if the resource ID does not
+		                    correspond to dynamic resource or dynamic resource which support depedency
+		KErrAlreadyExists	if resource is already registered.
+
+
+@pre Interrupts must be enabled
+@pre Kernel must be unlocked
+@pre No fast mutex can be held
+@pre Call in a thread context but not from null thread or DFC thread1
+@pre Can be used in a device driver.
+*/
+inline TInt PowerResourceManager::RegisterDynamicResource(TUint aClientId, DDynamicPowerResource* aResource, 
+																						TUint& aResourceId)
+	{
+	__KTRACE_OPT(KRESMANAGER, Kern::Printf(">PowerResourceManager::RegisterDynamicResource"));
+	return ControlIO(aClientId, KResManControlIoRegisterDynamicResource, (TAny*)aResource, (TAny*)&aResourceId);
+	}
+
+/**
+@publishedPartner
+@released 9.5
+
+Request to deregister dynamic resource. This is also used to deregister dynamic resource with dependency
+
+@param aClientId	ID of the client which is requesting the dynamic resource deregistration.
+@param aResourceId	Id of dynamic resource to deregister.
+@param aState		Pointer to the required final state. This is optional and if left NULL, resource
+					will be moved to its default state.
+
+@return KErrNone			if successful
+		KErrAccessDenied	if the client ID could not be found in the list of registered clients or
+							if the client was registered to be thread relative and this API is not 
+							called from the same thread or if ID is user side client id or if the client
+							is not the same that registered the resource.
+		KErrNotSupported	if this API is called before PRM is fully intialised or if the resource ID does not 
+		                    correspond to dynamic resource or dynamic resource which support depedency
+		KErrNotFound		if the resource could not found in the resource list. 
+		KErrInUse			if the some other operation is in progress or if the resource is shared and
+							another client holds requirement on this resource
+
+
+@pre Interrupts must be enabled
+@pre Kernel must be unlocked
+@pre No fast mutex can be held
+@pre Call in a thread context but not from null thread or DFC thread1
+@pre Can be used in a device driver.
+*/
+inline TInt PowerResourceManager::DeRegisterDynamicResource(TUint aClientId, TUint aResourceId, TInt* aState)
+	{
+	__KTRACE_OPT(KRESMANAGER, Kern::Printf(">PowerResourceManager::DeRegisterDynamicResource"));
+	return ControlIO(aClientId, KResManControlIoDeregisterDynamicResource, (TAny*)aResourceId, (TAny*)aState);
+	}
+
+/**
+@publishedPartner
+@released 9.5
+
+Request to register resource dependency. This could be between 2 dynamic resource or between
+dynamic and static resource.
+
+@param aClientId	ID of the client which is requesting the resource dependency registration.
+@param aResDependencyInfo1 Dependency information about the first resource in the dependency link.
+@param aResDependencyInfo2 Dependency information about the second resource in the dependency link.
+
+@return KErrNone			if successful
+		KErrAccessDenied	if the client ID could not be found in the list of registered clients or
+							if the client was registered to be thread relative and this API is not 
+							called from the same thread or if ID is user side client id 
+		KErrNotSupported	if any of the specified resource is not dynamic resource with depedency or 
+		                    is not dependency resource or is instantaneous
+		KErrNotFound		if any of the specified resource could not found in the resource list. 
+
+
+@pre Interrupts must be enabled
+@pre Kernel must be unlocked
+@pre No fast mutex can be held
+@pre Call in a thread context but not from null thread or DFC thread1
+@pre Can be used in a device driver.
+*/
+inline TInt PowerResourceManager::RegisterResourceDependency(TUint aClientId, SResourceDependencyInfo* aResDependencyInfo1, 
+																			SResourceDependencyInfo* aResDependencyInfo2)
+	{
+	__KTRACE_OPT(KRESMANAGER, Kern::Printf(">PowerResourceManager::RegisterResourceDependency"));
+	return ControlIO(aClientId, KResManControlIoRegisterDependency, (TAny*)aResDependencyInfo1, (TAny*)aResDependencyInfo2);
+	}
+
+/**
+@publishedPartner
+@released 9.5
+
+Request to deregister resource dependency.
+ 
+@param aClientId	ID of the client which is requesting the resource dependency deregistration.
+@param aResId1 Id of the first resource in the dependency link that is being deregistered.
+@param aResId2 Id of the second resource in the dependency link that is being deregistered.
+
+@return KErrNone			if successful
+		KErrAccessDenied	if the client ID could not be found in the list of registered clients or
+							if the client was registered to be thread relative and this API is not 
+							called from the same thread or if ID is user side client id 
+							or if any of the specified resource does not support dependency.
+		KErrNotFound		if any of the specified resource could not found in the resource list or 
+		                    dependency link does not exist between the specified resources.
+
+@pre Interrupts must be enabled
+@pre Kernel must be unlocked
+@pre No fast mutex can be held
+@pre Call in a thread context but not from null thread or DFC thread1
+@pre Can be used in a device driver.
+*/
+inline TInt PowerResourceManager::DeRegisterResourceDependency(TUint aClientId, TUint aResourceId1, TUint aResourceId2)
+	{
+	__KTRACE_OPT(KRESMANAGER, Kern::Printf(">PowerResourceManager::DeRegisterResourceDependency"));
+	return ControlIO(aClientId, KResManControlIoDeregisterDependency, (TAny*)aResourceId1, (TAny*)aResourceId2);
+	}
+
+/**
+@internalComponent
+@released 9.5
+
+Request to update with number of dependent resources for the specified resource. 
+
+@param aResourceId Id of the resource whose number of dependents is requested
+@param aNumDepResources On success will be updated with number of dependent resources.
+
+@return KErrNone			if successful
+		KErrAccessDenied	if the client ID could not be found in the list of registered clients or
+							if the client was registered to be thread relative and this API is not 
+							called from the same thread or if ID is user side client id 
+		KErrNotSupported	if this API is called before PRM is fully intialised or if the resource ID 
+		                    does not correspond to dependency resource 
+		KErrNotFound		if the resource could not be found in the resource list. 
+
+@pre Interrupts must be enabled
+@pre Kernel must be unlocked
+@pre No fast mutex can be held
+@pre Call in a thread context but not from null thread or DFC thread1
+@pre Can be used in a device driver.
+*/
+inline TInt PowerResourceManager::GetNumDependentsForResource(TUint aClientId, TUint aResourceId, TUint& aNumDepResource)
+	{
+	__KTRACE_OPT(KRESMANAGER, Kern::Printf(">PowerResourceManager::GetNumDependentsForResource"));
+	return ControlIO(aClientId, KResManControlIoGetNumDependents, (TAny*)aResourceId, (TAny*)&aNumDepResource);
+	}
+
+/**
+@internalComponent
+@released 9.5
+
+Request to update the specified array with dependent resource Id's of the specified resource. 
+
+@param aResourceId Id of the resource whose dependent resource Id's are requested.
+@param aResIdArray On success array will be updated with the dependent resource information. Client need to 
+					create the array in kernel heap or data space.
+@param aNumDepResources Specifies the size of array. On success, updated with actual number of dependent resources.
+
+@return KErrNone			if successful
+		KErrAccessDenied	if the client ID could not be found in the list of registered clients or
+							if the client was registered to be thread relative and this API is not 
+							called from the same thread or if ID is user side client id 
+		KErrNotSupported	if this API is called before PRM is fully initialised or if the resource ID 
+		                    does not correspond to dependency resource 
+		KErrNotFound		if the resource could not be found in the resource list. 
+		KErrArgument		if passed array is null or pass dependent resource number is 0.
+
+@pre Interrupts must be enabled
+@pre Kernel must be unlocked
+@pre No fast mutex can be held
+@pre Call in a thread context but not from null thread or DFC thread1
+@pre Can be used in a device driver.
+*/
+inline TInt PowerResourceManager::GetDependentsIdForResource(TUint aClientId, TUint aResourceId, TAny* aResIdArray, 
+																							TUint& aNumDepResources)
+	{
+	__KTRACE_OPT(KRESMANAGER, Kern::Printf(">PowerResourceManager::GetDependentsIdForResource"));
+	return ControlIO(aClientId, KResManControlIoGetDependentsId, (TAny*)aResourceId, (TAny*)aResIdArray, 
+																							(TAny*)&aNumDepResources);
+	}
+
+#endif