kerneltest/e32test/defrag/t_ramdefrag.h
author Tom Cosgrove <tom.cosgrove@nokia.com>
Fri, 28 May 2010 16:29:07 +0100
changeset 30 8aab599e3476
parent 0 a41df078684a
child 43 c1f20ce4abcf
permissions -rw-r--r--
Fix for bug 2283 (RVCT 4.0 support is missing from PDK 3.0.h) Have multiple extension sections in the bld.inf, one for each version of the compiler. The RVCT version building the tools will build the runtime libraries for its version, but make sure we extract all the other versions from zip archives. Also add the archive for RVCT4.

// Copyright (c) 2006-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\defrag\t_ramdefrag.h
// 
//

#ifndef _T_RAMDEFRAG_H_
#define _T_RAMDEFRAG_H_

#include <e32cmn.h>
#ifndef __KERNEL_MODE__
#include <e32std.h>
#endif

#define DEFRAG_TYPE_GEN 		(1)
#define DEFRAG_TYPE_EMPTY 		(2)
#define DEFRAG_TYPE_CLAIM		(3)

#define DEFRAG_VER_SYNC 		(1)
#define DEFRAG_VER_SEM	 		(2)
#define DEFRAG_VER_DFC			(3)

#define NO_FIXED_FLAG			(1)
#define NO_MOVE_FLAG			(2)
#define NO_DISCARD_FLAG			(3)
#define NO_ALLOC_FLAG			(4)
#define ONLY_DISCARD_FLAG		(5)
#define RESET_FLAG				(6)
#define ORIG_FLAG				(7)

#define FREE_ALL_FIXED			(0)
#define FILL_ALL_FIXED			(-1)

#define FREE_VALID				(0)
#define FREE_INVALID			(-1)
//#define DEBUG_VER
#ifdef DEBUG_VER
#define TESTDEBUG(a) {a;}
#else
#define TESTDEBUG(a) {}
#endif

struct SCapsPageMoveV01
	{
	TVersion	iVersion;
	};
	
struct STestRamDefragVars
	{
	TInt iRamSize;
	TInt iFreeRam;
	TInt iPageSize;
	TInt iRamUsed;
	TInt iNumFreePages;
	};

struct STestUserSidePageCount
	{
	TUint iFreePages;		/**<the number of free pages in the RAM zone*/
	TUint iFixedPages;		/**<the number of fixed pages in the RAM zone*/
	TUint iMovablePages;	/**<the number of movable pages in the RAM zone*/
	TUint iDiscardablePages;/**<the number of discardable pages in the RAM zone*/
	TUint iReserved[4];		/**<@internalAll reserved for internal use only*/
	};

struct STestPageCount
	{
	TUint iFreePages;
	TUint iUnknownPages;
	TUint iFixedPages;
	TUint iMovablePages;
	TUint iDiscardablePages;
	TUint iOtherPages;
	};

struct STestFlagParams
	{
	TUint	iZoneID;
	TUint8	iZoneFlag;
	TInt	iSetFlag;
	TUint8	iOptSetFlag;
	};


struct STestParameters
	{
	TInt iDefragVersion; 
	TInt iDefragType;
	TInt iPriority;
	TInt iMaxPages;
	TUint iID;
	TRequestStatus* iReqStat;
	TRequestStatus* iReqStat2;
	TRequestStatus* iReqStat3;
	};

// struct for passing multiple RAM zone IDs to the LDD.
struct SMultiZoneAlloc
	{
	TUint* iZoneId;			/**< An array of RAM zone IDs*/
	TUint iZoneIdSize;		/**< The number of IDs in iZoneId*/
	};

_LIT(KRamDefragFuncTestLddName,"D_RAMDEFRAG");

class RRamDefragFuncTestLdd : public RBusLogicalChannel
	{
public:
	enum TControl
		{
		EDoConsumeRamFinish,
		EDoSetDebugFlag,
		EAllocateFixed,
		EAllocFixedArray, 
		EAllocateFixed2,
		EGetAllocDiff,
		EFreeAllFixed,
		EAllocateFixedWrite,
		EFreeAllFixedRead,
		EPageCount,
		EZoneAllocContiguous,
		EMultiZoneAllocContiguous,
		EZoneAllocDiscontiguous,
		EMultiZoneAllocDiscontiguous,
		EZoneAllocDiscontiguous2,
		EZoneAllocToMany,
		EZoneAllocToManyArray,
		EZoneAllocToMany2,
		EAllocContiguous,
		EFreeZone,
		EFreeFromAllZones,
		EFreeFromAddr, 
		ECheckCancel,
		ECheckPriorities,
		ECallDefrag,
		ESetZoneFlag,
		EGetDefragOrder,
		EResetDriver,
		};

#ifndef __KERNEL_MODE__
public:
	inline TInt Open()
		{ return DoCreate(KRamDefragFuncTestLddName,TVersion(),KNullUnit,NULL,NULL,EOwnerProcess,ETrue); }

	inline TInt ResetDriver()
		{ return DoControl(EResetDriver,(TAny*)NULL, (TAny*)NULL); }

	inline TInt DoSetDebugFlag(TInt aState)
		{ return DoControl(EDoSetDebugFlag,(TAny*)aState, (TAny*)NULL); }

	inline TInt AllocateFixed(TInt aNumOfPages)
		{ return DoControl(EAllocateFixed,(TAny*)aNumOfPages, (TAny*)NULL); }

	inline TInt AllocFixedArray(TInt aNumOfPages)
		{ return DoControl(EAllocFixedArray,(TAny*)aNumOfPages, (TAny*)NULL); }

	inline TInt AllocateFixed2(TInt aNumOfPages)
		{ return DoControl(EAllocateFixed2,(TAny*)aNumOfPages, (TAny*)NULL); }

	inline TInt GetAllocDiff(TInt aNumOfPages)
		{ return DoControl(EGetAllocDiff,(TAny*)aNumOfPages, (TAny*)NULL); }

	inline TInt FreeAllFixedPages()
		{ return DoControl(EFreeAllFixed); }

	inline TInt AllocateFixedWrite(TInt aNumOfPages)
		{ return DoControl(EAllocateFixedWrite,(TAny*)aNumOfPages, (TAny*)NULL); }

	inline TInt FreeAllFixedPagesRead()
		{ return DoControl(EFreeAllFixedRead,(TAny*)NULL, (TAny*)NULL); }

	inline TInt ZoneAllocContiguous(TUint aZoneID, TInt aSize)
		{ return DoControl(EZoneAllocContiguous,(TAny*)aZoneID, (TAny*)aSize); }

	inline TInt MultiZoneAllocContiguous(TUint* aZoneId, TUint aZoneIdSize, TInt aSize)
		{ 
		SMultiZoneAlloc multiZoneAlloc;
		multiZoneAlloc.iZoneId = aZoneId;
		multiZoneAlloc.iZoneIdSize = aZoneIdSize;
		return DoControl(EMultiZoneAllocContiguous,(TAny*)&multiZoneAlloc, (TAny*)aSize); 
		}

	inline TInt ZoneAllocDiscontiguous(TUint aZoneID, TInt aNumPages)
		{ return DoControl(EZoneAllocDiscontiguous,(TAny*)aZoneID, (TAny*)aNumPages); }

	inline TInt MultiZoneAllocDiscontiguous(TUint* aZoneId, TUint aZoneIdSize, TInt aNumPages)
		{ 
		SMultiZoneAlloc multiZoneAlloc;
		multiZoneAlloc.iZoneId = aZoneId;
		multiZoneAlloc.iZoneIdSize = aZoneIdSize;
		return DoControl(EMultiZoneAllocDiscontiguous,(TAny*)&multiZoneAlloc, (TAny*)aNumPages);
		}

	inline TInt ZoneAllocDiscontiguous2(TUint aZoneID, TInt aNumPages)
		{ return DoControl(EZoneAllocDiscontiguous2,(TAny*)aZoneID, (TAny*)aNumPages); }

	inline TInt ZoneAllocToMany(TInt aZoneIndex, TInt aNumPages)
		{ return DoControl(EZoneAllocToMany,(TAny*)aZoneIndex, (TAny*)aNumPages); }

	inline TInt ZoneAllocToManyArray(TInt aZoneIndex, TInt aNumPages)
		{ return DoControl(EZoneAllocToManyArray,(TAny*)aZoneIndex, (TAny*)aNumPages); }

	inline TInt ZoneAllocToMany2(TInt aZoneIndex, TInt aNumPages)
		{ return DoControl(EZoneAllocToMany2,(TAny*)aZoneIndex, (TAny*)aNumPages); }
	
	inline TInt AllocContiguous(TInt aSize)
		{ return DoControl(EAllocContiguous,(TAny*)aSize, (TAny*)NULL); }

	inline TInt FreeZone(TInt aNumPages)
		{ return DoControl(EFreeZone,(TAny*)aNumPages, (TAny*)NULL); }

	inline TInt FreeFromAllZones()
		{ return DoControl(EFreeFromAllZones,(TAny*)NULL, (TAny*)NULL); }


	inline TInt CheckCancel(TInt aDefragType, TUint aID = 0)
		{ 
		STestParameters params;
		
		params.iDefragType = aDefragType;
		params.iDefragVersion = 0;
		params.iID = aID;
		params.iPriority = 0;
		params.iMaxPages = 0;
		params.iReqStat = NULL; 
		params.iReqStat2 = NULL; 
		params.iReqStat3 = NULL; 
		return DoControl(ECheckCancel,(TAny*)&params); 
		}

	inline TInt FreeFromAddr(TInt aNumPages, TUint32 aAddr)
		{ return DoControl(EFreeFromAddr,(TAny*)aNumPages, (TAny*)aAddr); }

	inline TInt PageCount(TUint aID, STestUserSidePageCount* aPageData)
		{ return DoControl(EPageCount,(TAny*)aID, (TAny*)aPageData); }

	inline TInt CallDefrag(TInt aDefragType, TInt aDefragVersion, TUint aID = 0, TInt aMaxPages = 0, TInt aPriority = -1, TRequestStatus* aReqStat = NULL)
		{ 
		STestParameters params;
		
		params.iDefragType = aDefragType;
		params.iDefragVersion = aDefragVersion;
		params.iID = aID;
		params.iPriority = aPriority;
		params.iMaxPages = aMaxPages;
		params.iReqStat = aReqStat;
		if (aReqStat)
			{
			*aReqStat = KRequestPending;
			}
		params.iReqStat2 = NULL; 
		params.iReqStat3 = NULL; 
		TInt ret = DoControl(ECallDefrag,(TAny*)&params); 
		return ret;
		}

	/**
	@param aZoneID		The ID of the RAM zone to modify
	@param aZoneFlag	The flags to clear, if want only aSetFlags to be enabled after this then
						aZoneFlag should be the current flags sets on the RAM zone.
	@param aSetFlag		The flags to set
	@param aOptSetFlag	If aSetFlag==ORIG_FLAG then aOptSetFlag will be the flags to set 
						on the RAM zone.
	*/
	inline TInt SetZoneFlag(TUint aZoneID, TUint8 aZoneFlag, TInt aSetFlag, TUint8 aOptSetFlag = 0x00)
		{ 
		STestFlagParams flagParams;
		
		flagParams.iZoneID = aZoneID;
		flagParams.iZoneFlag = aZoneFlag;
		flagParams.iSetFlag = aSetFlag;
		flagParams.iOptSetFlag = aOptSetFlag;
		
		return DoControl(ESetZoneFlag,(TAny*)&flagParams, (TAny*)NULL); 
		}

	inline TInt CheckPriorities(TInt aDefragType, TUint aID = 0, TRequestStatus* aReqStat = NULL, TRequestStatus* aReqStat2 = NULL, TRequestStatus* aReqStat3 = NULL)
		{ 
		STestParameters params;
		
		params.iDefragType = aDefragType;
		params.iDefragVersion = 0;
		params.iID = aID;
		params.iPriority = 0;
		params.iMaxPages = 0;
		params.iReqStat = aReqStat;
		if (aReqStat)
			{
			*aReqStat = KRequestPending;
			}
		params.iReqStat2 = aReqStat2; 
		if (aReqStat2)
			{
			*aReqStat2 = KRequestPending;
			}
		params.iReqStat3 = aReqStat3;  
		if (aReqStat3)
			{
			*aReqStat3 = KRequestPending;
			}

		return DoControl(ECheckPriorities,(TAny*)&params); 
		}

	inline TInt GetDefragOrder()
		{ return DoControl(EGetDefragOrder,(TAny*)NULL, (TAny*)NULL); }


#endif
	};


#endif //_T_RAMDEFRAG_H_