kernel/eka/include/nkern/nk_trace.h
changeset 0 a41df078684a
child 31 56f325a607ea
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/kernel/eka/include/nkern/nk_trace.h	Mon Oct 19 15:55:17 2009 +0100
@@ -0,0 +1,660 @@
+// 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
+
+/**
+@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
+
+
+/**
+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
+
+#endif // _DEBUG
+
+#endif // __KERNEL_MODE__
+
+
+#if defined(BTRACE_KERNEL_PROTOTYPE)
+// Prototype trace categories...
+#undef BTRACE_CLIENT_SERVER
+#define BTRACE_CLIENT_SERVER
+#undef BTRACE_REQUESTS
+#define BTRACE_REQUESTS
+#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