userlibandfileserver/fileserver/inc/f32dbg.h
author Mike Kinghan <mikek@symbian.org>
Tue, 16 Nov 2010 14:39:21 +0000
branchGCC_SURGE
changeset 303 9b85206a602c
parent 201 43365a9b78a3
permissions -rw-r--r--
We need a way to pass flags to rombuilds in Raptor via extension flm interfaces, so that the CPP pass of the rom input files can be informed what toolchain we are building with and conditionally include or exclude files depending on whether the toolchain could build them.

// Copyright (c) 1997-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:
// f32\inc\f32dbg.h
// 
// 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
 @internalTechnology
 @released
*/
#if !defined(__F32DBG_H__)
#define __F32DBG_H__
#include <e32std.h>
#include <e32std_private.h>


/**
@publishedPartner
@released

A bit value indicating that tracing is to be active in
file system code, when set through a call to RFs::SetDebugRegister()
in _DEBUG or _DEBUG_RELEASE mode.
*/
#define KFSYS       0x0001


/**
@publishedPartner
@released

A bit value indicating that tracing is to be active in
file server code, when set through a call to RFs::SetDebugRegister()
in _DEBUG or _DEBUG_RELEASE mode.
*/
#define KFSERV      0x0002


/**
@publishedPartner
@released

A bit value indicating that tracing is to be active in
the loader code, when set through a call to RFs::SetDebugRegister()
in _DEBUG or _DEBUG_RELEASE mode.
*/
#define KFLDR       0x0004


/**
@publishedPartner
@released

A bit value indicating that the number of (simulated) allocation
failures to complete a given function is to be printed, when set
through a call to RFs::SetDebugRegister() in _DEBUG or _DEBUG_RELEASE mode.
*/
#define KALLOC		0x0008


/**
@publishedPartner
@released

A bit value indicating that tracing is to be active in
LFFS code, when set through a call to RFs::SetDebugRegister()
in _DEBUG or _DEBUG_RELEASE mode.
*/
#define KLFFS		0x0010


/**
@publishedPartner
@released

A bit value indicating that tracing is to be active in
ISO9660 code, when set through a call to RFs::SetDebugRegister()
in _DEBUG or _DEBUG_RELEASE mode.
*/
#define	KISO9660	0x0020


/**
@publishedPartner
@released

A bit value indicating that tracing is to be active in
NTFS code, when set through a call to RFs::SetDebugRegister()
in _DEBUG or _DEBUG_RELEASE mode.
*/
#define	KNTFS		0x0040


/**
@publishedPartner
@released

A bit value indicating that tracing is to be active in
ROFS code, when set through a call to the function RFs::SetDebugRegister()
in _DEBUG or _DEBUG_RELEASE mode.
*/
#define	KROFS		0x0080


/**
@publishedPartner
@released

A bit value indicating that tracing is to be active in
concurrent file system code, when set through a call to the function RFs::SetDebugRegister()
in _DEBUG or _DEBUG_RELEASE mode.
*/
#define KTHRD		0x0100

/**
@internalTechnology
*/
#define KCACHE		0x0200


/**
@internalTechnology
@prototype

A bit value indicating that tracing is to be active in
COMPFS code, when set through a call to the function RFs::SetDebugRegister()
in _DEBUG or _DEBUG_RELEASE mode.
*/
#define	KCOMPFS		0x0400


/**
@internalTechnology
@prototype

A bit value indicating that tracing is to be active in
file server plugin support code, when set through a call
to the function RFs::SetDebugRegister()
*/
#define KPLUGIN		0x0800


// #define _DEBUG_RELEASE

const TInt KAllocFailureOn=0;
const TInt KAllocFailureOff=-1;


#if defined(_DEBUG) || defined(_DEBUG_RELEASE)
const TInt KControlIoCancelNCNotifier=KMaxTInt-1;
const TInt KControlIoNCDebugNotifierOn=KMaxTInt-2;
const TInt KControlIoNCDebugNotifierOff=KMaxTInt-3;
const TInt KControlIoGetCorruptLogRecord=KMaxTInt-4;
const TInt KControlIoGetNumberOfCorruptLogRecords=KMaxTInt-5;
const TInt KControlIoGetCorruptListFile=KMaxTInt-6;
const TInt KControlIoCorruptLogRecordReset=KMaxTInt-7;
const TInt KControlIoCacheCount=KMaxTInt-8;
const TInt KControlIoGetLocalDriveNumber=KMaxTInt-9;
const TInt KControlIoCancelDeferredDismount=KMaxTInt-10;
const TInt KControlIoFileCacheFlagsWrite=KMaxTInt-11;
const TInt KControlIoFileCacheStats=KMaxTInt-12;
const TInt KControlIoFlushClosedFiles=KMaxTInt-13;
const TInt KControlIoSimulateLockFailureMode=KMaxTInt-14;
const TInt KControlIoFileCacheDump=KMaxTInt-15;
const TInt KControlIoAllocateMaxSegments=KMaxTInt-16;

const TInt KControlIoDisableFatUtilityFunctions=KMaxTInt-17;
const TInt KControlIoEnableFatUtilityFunctions=KMaxTInt-18;
const TInt KControlIoFileCacheConfig=KMaxTInt-19;
const TInt KControlIoSimulateFileCacheWriteFailure=KMaxTInt-20;

const TInt KControlIoSessionCount=KMaxTInt-21;
const TInt KControlIoObjectCount=KMaxTInt-22;

const TInt KControlIoIsFileSequential=KMaxTInt-23;
const TInt KControlIoGlobalCacheConfig=KMaxTInt-24;
const TInt KControlIoGlobalCacheInfo=KMaxTInt-25;
const TInt KControlIoDirCacheConfig=KMaxTInt-26;
const TInt KControlIoDirCacheInfo=KMaxTInt-27;
const TInt KControlIoSimulateMemoryLow=KMaxTInt-28;
const TInt KControlIoStopSimulateMemoryLow=KMaxTInt-29;

const TInt KNCDebugNotifierValue=-500000;	// between 0 and 1 second

GLREF_D TInt DebugNCNotifier;

class TIOCacheValues
	{ 
public:
	TInt iFreeCount;	// current number of requests on free queue
	TInt iCloseCount;	// current number of requests on close queue
	TInt iAllocated;	// no longer used
	TInt iTotalCount;	// current number of requests
	TInt iRequestCountPeak;	// peak number of requests, i.e. peak value reached by iTotalCount


	// the same again but for the OperationAllocator
	TInt iOpFreeCount;
	TInt iOpRequestCount;
	TInt iOpRequestCountPeak;
	};

class TFileCacheStats
	{ 
public:
	TInt iFreeCount;
	TInt iUsedCount;
	TInt iLockedSegmentCount;
	TInt iAllocatedSegmentCount;
	TInt iFileCount;
	TInt iFilesOnClosedQueue;
	TInt iHoleCount;

	TInt iUncachedPacketsRead;
	TInt iUncachedBytesRead;

	TInt iUncachedPacketsWritten;
	TInt iUncachedBytesWritten;

	TInt iCommitFailureCount;
	TInt iLockFailureCount;

	TInt iWriteThroughWithDirtyDataCount;
	};

class TFileCacheConfig
	{ 
public:
	TInt iDrive;
	TInt iFlags;
	TBool iFileCacheReadAsync;
	TInt32 iFairSchedulingLen;			// in bytes
	TInt32 iCacheSize;					// in bytes
	TInt32 iMaxReadAheadLen;			// in bytes
	TInt32 iClosedFileKeepAliveTime;	// in microseconds
	TInt32 iDirtyDataFlushTime;			// in microseconds
	};

struct TFsDebugCorruptLogRecord
	{
	TFileName iProcessName;
	TFileName iFileName;
	TInt iError;
	};

typedef TPckgBuf <TFsDebugCorruptLogRecord> TFsDebugCorruptLogRecordBuf;

extern TBool EnableFatUtilityFunctions;

class TGlobalCacheConfig
    {
public:
    TInt32 iGlobalCacheSizeInBytes;      		// in bytes 
    TInt32 iGlobalLowMemoryThreshold;         	// in percentage
    };

class TGlobalCacheInfo
    {
public:
    TInt32 iGlobalCacheSizeInBytes;     		// in bytes 
    TInt32 iGlobalLowMemoryThreshold;   		// in percentage
    };

class TDirCacheConfig
    {
public:
    TInt iDrive;

    TInt32 iLeafDirCacheSize;           // in number of most recently visited leaf directories
    TInt32 iDirCacheSizeMin;            // in bytes
    TInt32 iDirCacheSizeMax;            // in bytes
    };

class TDirCacheInfo
    {
public:
    TInt iDrive;

    /**
    Segment size in bytes. A memory segment is the smallest memory unit that Kernel manages through RChunk.
    */
    TInt32 iMemorySegmentSize;

    /**
    Size of memory a page occupies, in bytes.
    Note: following restrictions may result a difference between page size in memory & page size in data:
        1. page size can not be smaller than segment size
        2. one page can not contain data from two different clusters
    */
    TInt32 iPageSizeInMemory;

    /**
    Size of actual data a page contains, in bytes.
    Note: following restrictions may result a difference between page size in memory & page size in data:
        1. page size can not be smaller than segment size
        2. one page can not contain data from two different clusters
    */
    TInt32 iPageSizeInData;
    
    /**
    The minimum number of pages that the cache can contain, even under low memory conditions.
    */
    TInt32 iMinCacheSizeInPages;

    /**
    The maximum number of pages that the cache can contain, when there is enough free memory in the system.
    */
    TInt32 iMaxCacheSizeInPages;
    
    /**
    The minimum cache size in memory. In bytes.
    */
    TInt32 iMinCacheSizeInMemory;

    /**
    The maximum cache size in memroy. In bytes.
    */
    TInt32 iMaxCacheSizeInMemory;
    
    /**
    Current count of the locked pages.
    */
    TInt32 iLockedPageNumber;

    /**
    Current count of the unlocked pages.
    */
    TInt32 iUnlockedPageNumber;
    
    };

#endif

enum TLoaderDebugFunction
	{
	ELoaderDebug_SetHeapFail,
	ELoaderDebug_SetRFsFail
	};


enum TFsDebugFunction
	{
	EFsSetAllocFailure,
	EFsSetErrorCondition,
	EFsSetDebugRegister,
	EFsDebugNotify
	};

#endif