kernel/eka/include/nkern/nk_trace.h
author Tom Cosgrove <tom.cosgrove@nokia.com>
Fri, 28 May 2010 16:29:07 +0100
changeset 30 8aab599e3476
parent 4 56f325a607ea
child 20 597aaf25e343
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) 1998-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\nkern\nk_trace.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.
//

#ifndef NK_TRACE_H
#define NK_TRACE_H

/**
@internalComponent
*/
#define DEBUGPRINT	KPrintf

/**
@publishedPartner
@released
*/
#define DEBUGMASK (KDebugMask())
#define DEBUGNUM(x) (KDebugNum(x))

GLREF_C void KPrintf(const char*,...);

/**
@publishedPartner
@released
*/
IMPORT_C TInt  KDebugMask();
IMPORT_C TBool KDebugNum(TInt aBitNum);

#if defined(_DEBUG)
//#if (1)
/**
@publishedPartner
@released
*/
// __KTRACE_MASK only supports the first 32 debug trace bits
#define __KTRACE_MASK(a,p) {if((DEBUGMASK&(a)))p;}
#define __KTRACE_OPT(a,p) {if((DEBUGNUM(a)))p;}
#define __KTRACE_OPT2(a,b,p) {if( (DEBUGNUM(a)) || (DEBUGNUM(b)) )p;}

/**
@publishedPartner
@released
*/
// __KTRACE_ALL only supports the first 32 debug trace bits
#define __KTRACE_ALL(a,p) {if((DEBUGMASK&(a))==(a))p;}

/**
@publishedPartner
@released
*/
#define KHARDWARE	0 //0x00000001

/**
@publishedPartner
@released
*/
#define KBOOT		1 //0x00000002

/**
@publishedPartner
@released
*/
#define KSERVER		2 //0x00000004

/**
@publishedPartner
@released
*/
#define KMMU		3 //0x00000008

/**
@publishedPartner
@released
*/
#define KSEMAPHORE	4 //0x00000010

/**
@publishedPartner
@released
*/
#define KSCHED		5 //0x00000020

/**
@publishedPartner
@released
*/
#define KPROC		6 //0x00000040

/**
@publishedPartner
@released
*/
#define KEXEC		7 //0x00000080

/**
@publishedPartner
@released
*/
#define KDEBUGGER	8 //0x00000100  // for kernel-side debug agents

/**
@publishedPartner
@released
*/
#define KTHREAD		9 //0x00000200

/**
@publishedPartner
@released
*/
#define KDLL		10 //0x00000400

/**
@publishedPartner
@released
*/
#define KIPC		11 //0x00000800

/**
@publishedPartner
@released
*/
#define KPBUS1		12 //0x00001000

/**
@publishedPartner
@released
*/
#define KPBUS2		13 //0x00002000

/**
@publishedPartner
@released
*/
#define KPBUSDRV	14 //0x00004000

/**
@publishedPartner
@released
*/
#define KPOWER      15 //0x00008000

/**
@publishedPartner
@released
*/
#define KTIMING     16 //0x00010000

/**
@publishedPartner
@released
*/
#define KEVENT      17 //0x00020000

/**
@publishedPartner
@released
*/
#define KOBJECT		18 //0x00040000

/**
@publishedPartner
@released
*/
#define KDFC		19 //0x00080000

/**
@publishedPartner
@released
*/
#define KEXTENSION	20 //0x00100000

/**
@publishedPartner
@released
*/
#define KSCHED2		21 //0x00200000

/**
@publishedPartner
@released
*/
#define KLOCDRV		22 //0x00400000

/**
@publishedPartner
@released
*/
#define KFAIL		23 //0x00800000

/**
@publishedPartner
@released
*/
#define KTHREAD2	24 //0x01000000

/**
@publishedPartner
@released
*/
#define KDEVICE		25 //0x02000000

/**
@publishedPartner
@released
*/
#define KMEMTRACE	26 //0x04000000

/**
@publishedPartner
@released
*/
#define KDMA        27 //0x08000000

/**
@publishedPartner
@released
*/
#define KMMU2		28 //0x10000000

/**
@publishedPartner
@released
*/
#define KNKERN		29 //0x20000000

/**
@publishedPartner
@released
*/
#define KSCRATCH	30 //0x40000000	// reserved for temporary debugging

/**
@publishedPartner
@released
*/
#define KPANIC		31 //0x80000000

/**
@publishedPartner
@released
*/
#define KUSB		32 //0x00000001, index 1

/**
@publishedPartner
@released
*/
#define KUSBPSL		33 //0x00000002, index 1
 
/**
@internalComponent
@released	
*/
#define KNETWORK1	34 //0x00000004, index 1
 
/**
@internalComponent
@released
*/
#define KNETWORK2   35 //0x00000008, index 1

/**
@publishedPartner
@released
*/
#define KSOUND1		36 //0x00000010, index 1
 
/**
@publishedPartner
@released
*/
#define KUSBHOST	37 //0x00000020, index 1

/**
@publishedPartner
@released
*/
#define KUSBOTG		38 //0x00000040, index 1

/**
@publishedPartner
@released
*/
#define KUSBJOURNAL	39 //0x00000080, index 1

/**
@publishedPartner
@released
*/
#define KUSBHO		40 //0x00000100, index 1

/**
@publishedPartner
@released
*/
#define KRESMANAGER 41 //0x00000200, index 1

/**
@publishedPartner
@prototype
*/
#define KIIC 42 //0x00000400, index 1

/**
@publishedPartner
@prototype
*/
#define KHCR 43 //0x00000800, index 1

/**
@internalComponent
@released
*/
#define KREALTIME	63 //0x80000000, index 1

/**
@internalComponent
@released
*/
#define KPAGING		62 //0x40000000, index 1

/**
@internalComponent
@released
*/
#define KLOCDPAGING		61 //0x20000000, index 1

/**
@internalComponent
@released
*/
#define KDATAPAGEWARN	60 //0x10000000, index 1

/**
@internalComponent
@prototype
*/
#define KPCI	59 //0x08000000, index 1

/**
@internalComponent
@prototype
*/
#define KPIPE	58 //0x04000000, index 1

// RESERVED: Trace bits 192 - 255 are reserved for licensee partners


/**
@publishedPartner
@released
*/
#define KALWAYS		-1     //0xffffffff
#define KMAXTRACE   (KNumTraceMaskWords*32-1)    // the maximum debug trace bit
#else
#define __KTRACE_OPT(a,p)
#define __KTRACE_ALL(a,p)
#define __KTRACE_OPT2(a,b,p)
#define KALWAYS		-1
#define KMAXTRACE   (KNumTraceMaskWords*32-1)
#endif


/**
@publishedPartner
@released
*/
#define DEBUGMASKWORD2	2

/*
words 0 & 1 of debug mask should be used for kernel debugging
word  2     of debug mask should be used to configure the ways the kernel behaves
word  3     of debug mask should be used to configure the ways the user library behaves
words 4 & 5 of debug mask should be used for file system debugging
words 6 & 7 of debug mask are reserved for licensees
*/

/**
@publishedPartner
@released
*/
#define KALLTHREADSSYSTEM	64 //0x00000001, index 2

/**
Suppresses console output (in EWSRV) for faster automated tests.
@publishedPartner
@released
*/
#define KTESTFAST			65 //0x00000002, index 2

/**
Suppresses anything which might disturb latency testing,
for example platsec diagnostics emitted with the system lock held.
@publishedPartner
@released
*/
#define KTESTLATENCY		66 //0x00000004, index 2

/**
When a crash occurs this flag determines whether the debugger executes.
If set the crash debugger will NOT operate (even if it's in rom).
If clear the crash debugger will run.
@publishedPartner
@released
 */
#define KDEBUGMONITORDISABLE	67 //0x00000008, index 2

/**
When a crash occurs this flag determines whether the logger executes.
If set the crash logger will NOT operate (even if it's in rom).
If clear the crash logger will run.
@publishedPartner
@released
 */
#define KCRASHLOGGERDISABLE	68 //0x00000010, index 2

/**
Delay scheduling of newly unblocked threads until the next timer tick
occurs, to check for thread priority dependencies. Part of the crazy
scheduler functionality.
@publishedPartner
@released
 */
#define KCRAZYSCHEDDELAY 69 //0x00000020, index 2



/* Word 3 of debug mask : configures user library behaviour */

/**
@publishedPartner
@released
*/
#define KUSERHEAPTRACE		96 //0x00000001, index 3



#ifdef KFAIL

/**
@publishedPartner
@released
*/
#define __KTRACE_FAIL(r,p) {if ((r)!=KErrNone && (DEBUGNUM(KFAIL))) p;}

#else
#define __KTRACE_FAIL(r,p)
#endif

#include <e32btrace.h>

#ifdef __KERNEL_MODE__


class DBTraceFilter2;

/**
@internalComponent
*/
struct SBTraceData
	{
	TUint8 iFilter[256];
	BTrace::THandler iHandler;
	BTrace::TControlFunction iControl;
	DBTraceFilter2*volatile iFilter2;

	TBool CheckFilter2(TUint32 aUid);
	};

/**
@internalComponent
*/
extern SBTraceData BTraceData;

#if defined(_DEBUG) || defined(BTRACE_KERNEL_ALL)

#undef BTRACE_THREAD_IDENTIFICATION
#undef BTRACE_CPU_USAGE
#undef BTRACE_CHUNKS
#undef BTRACE_CODESEGS
#undef BTRACE_PAGING
#undef BTRACE_PAGING_MEDIA
#undef BTRACE_KERNEL_MEMORY
#undef BTRACE_RAM_ALLOCATOR
#undef BTRACE_FAST_MUTEX
#undef BTRACE_RESOURCE_MANAGER
#undef BTRACE_RESMANUS
#undef BTRACE_TRAWEVENT
#undef BTRACE_SYMBIAN_KERNEL_SYNC
#undef BTRACE_FLEXIBLE_MEM_MODEL
#undef BTRACE_CLIENT_SERVER
#undef BTRACE_REQUESTS


/**
If defined, code for BTrace category BTrace::EThreadIdentification
is compiled into the kernel.
@publishedPartner
@released
*/
#define BTRACE_THREAD_IDENTIFICATION

/**
If defined, code for BTrace category BTrace::ECpuUsage
is compiled into the kernel.
@publishedPartner
@released
*/
#define BTRACE_CPU_USAGE

/**
If defined, code for BTrace category BTrace::EChunks is compiled into the
kernel.
@publishedPartner
@released
*/
#define BTRACE_CHUNKS

/**
If defined, code for BTrace category BTrace::ECodeSegs is compiled into the
kernel.
@publishedPartner
@released
*/
#define BTRACE_CODESEGS

/**
If defined, code for BTrace category BTrace::EPaging is compiled into the
kernel.
@publishedPartner
@released 9.3
*/
#define BTRACE_PAGING

/**
If defined, code for BTrace category BTrace::EPagingMedia is compiled into the
Local Media Subsystem and relevant paging media drivers.
@publishedPartner
@released 9.3
*/
#define BTRACE_PAGING_MEDIA

/**
If defined, code for BTrace category BTrace::EKernelMemory is compiled into the
kernel.
@publishedPartner
@released 9.4
*/
#define BTRACE_KERNEL_MEMORY

/**
If defined, code for BTrace category BTrace::ERamAllocator is compiled into the
kernel.

This BTrace category is only supported on the multiple and moving memory models.

@publishedPartner
@released 9.4
*/
#if defined(__MEMMODEL_MOVING__) || defined (__MEMMODEL_MULTIPLE__)
#define BTRACE_RAM_ALLOCATOR
#endif

/**
If defined, code for BTrace category BTrace::EFastMutex is compiled into the
kernel.
*/
#define BTRACE_FAST_MUTEX

/**
If defined, code for BTrace category BTrace::EResourceManager is compiled into the
Resource Manager Subsystem.
@publishedPartner
@released 9.5
*/
#define BTRACE_RESOURCE_MANAGER

/**
If defined, code for BTrace category BTrace::EResourceManagerUs is compiled into the
Resource Manager Subsystem's User-Side API.
@publishedPartner
@released 9.5
*/
#define BTRACE_RESMANUS

/**
If defined, code for BTrace category BTrace::ERawEvent is compiled into the
kernel.
@publishedPartner
@released 9.5
*/
#define BTRACE_TRAWEVENT

/**
If defined, code for BTrace category BTrace::ESymbianKernelSync is compiled into
the kernel.
*/
#define BTRACE_SYMBIAN_KERNEL_SYNC

/**
If defined, code for BTrace category BTrace::EFlexibleMemModel is compiled into
the kernel.

This BTrace category is only supported on the flexible memory model.
*/
#define BTRACE_FLEXIBLE_MEM_MODEL

/**
If defined, code for BTrace category BTrace::EIic is compiled into the
IIC Subsystem.
*/
#define BTRACE_IIC

/**
If defined, code for BTrace category BTrace::EClientServer is compiled into the
kernel.
*/
#define BTRACE_CLIENT_SERVER

/**
If defined, code for BTrace category BTrace::ERequest is compiled into the
kernel.
*/
#define BTRACE_REQUESTS

#endif // _DEBUG

#endif // __KERNEL_MODE__


#if defined(BTRACE_KERNEL_PROTOTYPE)
// Prototype trace categories...
#undef BTRACE_THREAD_PRIORITY
#define BTRACE_THREAD_PRIORITY
#endif

#if defined(BTRACE_KERNEL_VERBOSE)
// Verbose trace options

#ifdef BTRACE_PAGING
/**
If defined, verbose code for BTrace category BTrace::EPaging is compiled into the
kernel.
@publishedPartner
@released 9.3
*/
#define BTRACE_PAGING_VERBOSE
#endif

#endif //BTRACE_KERNEL_VERBOSE

#if defined(_DEBUG) && !defined(__SMP__)
/**
@internalComponent
*/
TInt KCrazySchedulerEnabled();
#endif

#endif // NK_TRACE_H