kernel/eka/include/e32btrace.h
changeset 0 a41df078684a
child 31 56f325a607ea
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/kernel/eka/include/e32btrace.h	Mon Oct 19 15:55:17 2009 +0100
@@ -0,0 +1,4997 @@
+// Copyright (c) 2005-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\e32btrace.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 E32BTRACE_H
+#define E32BTRACE_H
+
+#ifdef __KERNEL_MODE__
+class TSpinLock;
+#endif
+
+/**
+Class for handling fast tracing.
+
+A trace record consists of three parts: a header, header extensions,
+and the trace data itself.
+
+The header consists of four bytes containing:
+
+-#	Size of the record in bytes. (Maximum value is KMaxBTraceRecordSize.)
+-#	Flags. See enum TFlags.
+-#	Category. Category value from enum BTrace::TCategory.
+-#	Sub-category. The meaning of this is dependent on the value of Category.
+
+When trace records are stored in memory they are stored word (32 bit) aligned.
+Therefore the size must be rounded up to a multiple of four when calculating
+the address of the next record. E.g.
+@code
+	TUint8* record; // pointer to trace record
+	TInt size = record[BTrace::ESizeIndex];
+	record += (size+3)&~3; // move record pointer on to next record.
+@endcode
+The NextRecord() method is provided to do this operation.
+
+Following the header are optionally a number of 32 bit 'header extension' values.
+These are present in the order shown below but only exist if the appropriate flag bit
+is set in the Header.
+
+-#	Header2.		Contains flag values from enum Flags2.
+					This value is only present if the EHeader2Present flag is set.
+-#	Timestamp.		A timestamp value indicating when the trace was generated.
+					The format and resolution of this value are platform-dependent, but
+					typically will contain the same values as would be returned by
+					User::FastCounter() or NKern::FastCounter().
+					This value is only present if the ETimestampPresent flag is set.
+-#	Timestamp2.		Additional timestamp information. E.g. the most significant
+					half of a 64bit timestamp value. Note, it is valid for a Timestamp2 value
+					to be present even if the previous Timestamp is absent.
+					This value is only present if the ETimestamp2Present flag is set.
+-#	Context ID.		This value indicates the context in which the trace was generated.
+					The meaning of the id is dependent on the contents of the two
+					least significant bits:
+					-	00	indicates the value is the address of the NThread object for
+							the currently executing thread.
+					-	01	indicates Fast Interrupt (FIQ) context.
+							Other bits of the value are currently reserved for future use.
+					-	10	indicates Interrupt (IRQ) context. Other bits of the value
+							are currently reserved for future use.
+					-	11	indicates Immediate Delayed Function Call (IDFC) context.
+							Other bits of the value are currently reserved for future use.
+					.
+					This value is only present if the EContextIdPresent flag is set.
+-#	Program Counter. This is the memory address of the instruction after the location
+					the trace was output.
+					This value is only present if the EPcPresent flag is set.
+-#	Extra.			An extra value used for different purposes depending on the trace type.
+					This value is only present if the EExtraPresent flag is set.
+
+Following the header extensions are 0 or more bytes of trace data specified when the trace
+was output.
+
+To output a trace, the following macros can be used:
+- BTrace0
+- BTrace4
+- BTrace8
+- BTrace12
+- BTraceN
+- BTraceBig
+- BTracePc0
+- BTracePc4
+- BTracePc8
+- BTracePc12
+- BTracePcN
+- BTracePcBig
+- BTraceContext0
+- BTraceContext4
+- BTraceContext8
+- BTraceContext12
+- BTraceContextN
+- BTraceContextBig
+- BTraceContextPc0
+- BTraceContextPc4
+- BTraceContextPc8
+- BTraceContextPc12
+- BTraceContextPcN
+- BTraceContextPcBig
+
+Whenever a trace is output, the trace handler is called with the arguments specified.
+See typedef THandler and SetHandler().
+
+Each tracing category has a filter bit, which if set to zero means that traces in that category
+are discarded, see SetFilter(). This filtering is performed before the trace handler is
+called. This filter may also be initialised from boot time by using the 'btrace' keyword in
+an OBY file used to build a ROM image.
+
+Traces may also be additionally sent through a second level of filtering. This examines the
+first 32 bits of data in the trace and if this value isn't present in the list maintained
+in the secondary filter, the trace is discarded. The contents of the secondary filter are
+set using the SetFilter2 methods.
+
+Values used for secondary filtering must be Symbian Unique Identifiers (UIDs) allocated
+using the normal UID allocation process. Note, the following non-valid UID value ranges
+are reserved.
+- 0x00000000..0x007fffff	Reserved for platform specific use.
+- 0x00800000..0x00ffffff	Reserved for use by Symbian.
+
+To generate traces which are to be processed by the secondary filter, the following
+macros can be used:
+
+- BTraceFiltered4
+- BTraceFiltered8
+- BTraceFiltered12
+- BTraceFilteredN
+- BTraceFilteredBig
+- BTraceFilteredPc4
+- BTraceFilteredPc8
+- BTraceFilteredPc12
+- BTraceFilteredPcN
+- BTraceFilteredPcBig
+- BTraceFilteredContext4
+- BTraceFilteredContext8
+- BTraceFilteredContext12
+- BTraceFilteredContextN
+- BTraceFilteredContextBig
+- BTraceFilteredContextPc4
+- BTraceFilteredContextPc8
+- BTraceFilteredContextPc12
+- BTraceFilteredContextPcN
+- BTraceFilteredContextPcBig
+
+Traces generated using the above methods will be filtered twice; once using the primary
+filter which checks the trace's category, and once using the secondary filter which checks
+the 32 bit UID value at the start of the trace data. Therefore the trace must pass both filter
+checks for it to be sent to the trace handler for output.
+
+@publishedPartner
+@released
+*/
+class BTrace
+	{
+public:
+	/**
+	Byte indices into the trace header for specific fields.
+	*/
+	enum THeaderStructure
+		{
+		/**
+		Size of record in bytes.
+		*/
+		ESizeIndex = 0,
+
+		/**
+		Bitfield of flags from enum TFlags. E.g. to detect if a timestamp is present in
+		the record, code like this could be used.
+		@code
+			TUint8* record; // pointer to trace record
+			if(record[BTrace::EFlagsIndex]&BTrace::ETimestampPresent)
+				TimestampPresent();
+			else
+				TimestampNotPresent();
+		@endcode
+		*/
+		EFlagsIndex = 1,
+
+		/**
+		Category value from enum BTrace::TCategory.
+		*/
+		ECategoryIndex = 2,
+
+		/**
+		Sub-category value. The meaning of this is dependent on the Category.
+		*/
+		ESubCategoryIndex = 3,
+		};
+
+	/**
+	Bit flags which indicate state of a trace record.
+	*/
+	enum TFlags
+		{
+		/**
+		Header2 is present in the trace record.
+		*/
+		EHeader2Present		= 1<<0,
+
+		/**
+		A timestamp value is present in the trace record.
+		*/
+		ETimestampPresent	= 1<<1,
+
+		/**
+		A second timestamp value is present in the trace record.
+		*/
+		ETimestamp2Present	= 1<<2,
+
+		/**
+		A context ID is present in the trace record.
+		*/
+		EContextIdPresent	= 1<<3,
+
+		/**
+		A CPU program counter (PC) value is present in the trace record.
+		*/
+		EPcPresent			= 1<<4,
+
+		/**
+		An 'extra' value is present in the trace record.
+		*/
+		EExtraPresent		= 1<<5,
+
+		/**
+		Indicates that the data in this trace record was truncated to keep the size
+		within the maximum permissible.
+		*/
+		ERecordTruncated	= 1<<6,
+
+		/**
+		Indicates that trace record(s) before this one are missing.
+		This can happen if the trace buffer was full when a trace output was attempted.
+		*/
+		EMissingRecord		= 1<<7
+		};
+
+	/**
+	Bit flags present in the Flags2 value of the header extension.
+	*/
+	enum TFlags2
+		{
+		/**
+		Masks out the bits for the multipart trace type. (See enum TMultiPart.)
+		*/
+		EMultipartFlagMask		= 3<<0,
+
+		/**
+		Masks out the bits for the CPU ID for SMP systems (zero if present on non SMP systems)
+		*/
+		ECpuIdMask			= 0xfff<<20,
+		};
+
+	/**
+	Values for multipart trace indicator. These values are stored in Flags2 an
+	are obtained by ANDing with the value EMultipartFlagMask.
+
+	If a 'Big' trace is generated which doesn't fit into a single trace record
+	then its data is split into several separate trace records; a multipart trace.
+
+	In multipart traces the 'extra' trace value is present in the header extension.
+	(EExtraPresent is set.) This extra value contains a unique trace identifier
+	which is the same is all parts of the trace.
+
+	The structure of the data part of each trace record in a multipart trace is described
+	below. In this description, the following labels are used.
+	-	A is the initial 4 bytes of data; the a1 argument of BTraceBig.
+	-	D is the array of bytes of additional data; the aData argument of BTraceBig.
+	-	N is the size of D; the aDataSize argument of BTraceBig
+	-	X is the maximum number of additional bytes which will fit into a trace record.
+		This is usually KMaxBTraceDataArray but this should not be assumed, instead
+		the size and other information present in each trace record should be examined.
+
+	For the first part of a multipart trace, the data in a trace record has the following
+	structure:
+
+	-	4 bytes containing N.
+	-	4 bytes containing A.
+	-	X bytes containing D[0..X-1]
+
+	If the parts are numbered 0 through to 'j', then a middle part of a multipart trace
+	is numbered 'i' where 0<i<j. The data in these parts has the structure:
+
+	-	4 bytes containing N.
+	-	4 bytes containing X*i. I.e. the offset within D for the data in this trace record.
+	-	X bytes containing D[X*i..X*i+X-1]
+
+	For the last part of a multipart trace, the data has the structure:
+
+	-	4 bytes containing N.
+	-	4 bytes containing X*j. I.e. the offset within D for the data in this trace record.
+	-	N modulo X bytes containing D[X*j..N-1]. I.e. the final bytes of the trace data.
+	*/
+	enum TMultiPart
+		{
+		/**
+		Indicates that this trace is the first part of a multipart trace.
+		*/
+		EMultipartFirst			= 1,
+
+		/**
+		Indicates that this trace is a middle part of a multipart trace.
+		I.e. it is not the first or last part.
+		*/
+		EMultipartMiddle		= 2,
+
+		/**
+		Indicates that this trace is the last part of a multipart trace.
+		*/
+		EMultipartLast			= 3,
+		};
+
+	/**
+	Enumeration of trace categories.
+	*/
+	enum TCategory
+		{
+		/**
+		Trace generated by all calls to RDebug::Printf.
+
+		The first 4 bytes of trace data contain the thread ID, RThread::Id(), for the
+		thread which caused this trace to be emitted. If the trace wasn't generated in
+		thread context, this id has the value KNullThreadId.
+
+		Subsequent bytes of data contain the ASCII text for the formatted string
+		generated by Kern::Printf.
+
+		These traces also contain a context ID, i.e. the EContextIdPresent flag is
+		set and a context ID value is present in the extended header.
+
+		If the trace text doesn't fit completely into one trace record, then
+		a multipart trace is generated. See enum TMultiPart.
+		*/
+		ERDebugPrintf = 0,
+
+		/**
+		Trace generated by all calls to Kern::Printf.
+		Trace records in this category have the same structure as ERDebugPrintf.
+		*/
+		EKernPrintf = 1,
+
+		/**
+		Trace generated by platform security diagnostic messages.
+		Trace records in this category have the same structure as ERDebugPrintf.
+		*/
+		EPlatsecPrintf = 2,
+
+		/**
+		Trace generated for the purpose of associating thread context ids with
+		the textual names of threads. These traces are usually generated when a
+		thread is created, renamed or destroyed.
+
+		If #Prime is called with this category, traces will be generated for all
+		threads currently extant.
+
+		@see enum TThreadIdentification
+		*/
+		EThreadIdentification = 3,
+
+		/**
+		Trace generated when the CPU usage changes state, e.g. at thread context switch
+		or during interrupt and DFC processing.
+
+		The purpose of this trace category is to profile CPU usage.
+
+		@see enum TCpuUsage
+		*/
+		ECpuUsage = 4,
+
+        /**
+        Category used for profiling device drivers, kernel extensions etc.
+        Used by PERF_LOG macro.
+        @prototype 9.3
+        */
+        EKernPerfLog = 5,
+
+        /**
+		@internalTechnology
+        @prototype 9.3
+        */
+        EClientServer = 6,
+
+        /**
+		@internalTechnology
+        @prototype 9.3
+        */
+        ERequests = 7,
+
+        /**
+		Trace generated when chunks are created and destroyed, and when memory
+		is committed and decommitted to and from chunks.
+
+		If #Prime is called with this category, traces will be generated for all
+		chunks currently extant.
+
+		@see TChunks
+        */
+        EChunks = 8,
+
+        /**
+		Trace generated when code segments are created and destroyed, mapped
+		into out of processes, and when memory is committed and decommitted to
+		and from them.
+
+		If #Prime is called with this category, traces will be generated for all
+		code segments currently extant.
+
+		@see TCodeSegs
+        */
+        ECodeSegs = 9,
+
+		/**
+		Trace generated by Demand Paging.
+		@prototype 9.3
+		*/
+		EPaging = 10,
+
+		/**
+		Trace generated when thread and process priorities are modified, whether
+		directly or through priority inheritance, aging or other mechanisms used
+		by the kernel.
+
+		The purpose of this category is to enable system-wide study of thread
+		priority usage.
+
+		If #Prime is called with this category, traces will be generated for all
+		threads currently extant.
+
+		@see enum TThreadPriority
+		@internalTechnology
+        @prototype 9.3
+		*/
+		EThreadPriority = 11,
+
+		/**
+		Trace generated by processing Paging requests in the Media subsystem and Media drivers.
+		@prototype 9.3
+		*/
+		EPagingMedia = 12,
+
+		/**
+		Trace generated by the kernel for memory regions which don't belong to any chunk.
+		@see enum TKernelMemory
+		@prototype 9.4
+		*/
+		EKernelMemory = 13,
+
+		/**
+		Trace generated by user-mode heap usage.
+
+		Unlike other trace categories, capturing heap trace involves an additional step
+		depending on how much trace is required. To enable heap trace for a single process
+		from the moment it starts, add the following line to the .exe's project (.mmp) file:
+
+			firstlib eexe_instrumented_heap.lib
+
+		This overrides the build tools default implicit link (for .exe projects) against eexe.lib.
+
+		Alternatively, to enable heap trace for all processes at once you can enable the
+		KUSERHEAPTRACE bit (#96) of the kernel trace flags. You can set this flag either at
+		ROM-building time (look for the 'kerneltrace' line generally in \epoc32\rom\<platform>\header.iby)
+		or at runtime by running the following at the Eshell command prompt:
+
+			trace 0 0 1
+
+		Note that changing this flag at runtime only affects processes created after the flag
+		is set or unset. It will not affect running processes.
+
+		@see enum THeap
+		@prototype 9.4
+		*/
+		EHeap = 14,
+
+		/**
+		Meta trace. Trace that is only useful to programs which use or display BTrace-based data.
+		@see enum TMetaTrace
+		@prototype 9.4
+		*/
+		EMetaTrace = 15,
+
+		/**
+		Trace generated by the ram allocator to allow the physical layout of RAM
+		to be tracked.
+		@internalTechnology
+		*/
+		ERamAllocator = 16,
+
+		/**
+		Trace generated by the Fast Mutex in the Nkern.
+		*/
+		EFastMutex = 17,
+
+
+		/**
+		Trace generated by any sampling profiler.
+		@see enum TProfiling
+		*/
+		EProfiling = 18,
+
+		/**
+        Trace generated by Power Resource Manager.
+        @prototype 9.5
+        */
+        EResourceManager = 19,
+
+
+        /**
+        Trace generated by Power Resource Manager User-Side API.
+        @prototype 9.5
+        */
+        EResourceManagerUs = 20,
+
+		/**
+		Trace generated by Raw Event subsystem APIs
+		@see enum TRawEventTrace
+		@prototype 9.5
+		*/
+		ERawEvent  =21,
+
+		/**
+		Trace generated by USB communications (Client, Host and OTG) where use
+		of standard logging (conditional Kern::Printf() calls) is sufficiently
+		time-consuming that the required device timings mandated by the core
+		USB standards cannot be achieved
+        @prototype 9.5
+		*/
+		EUsb = 22,
+
+		/**
+		Trace generated by Symbian OS kernel synchronization objects.
+        @prototype 9.5
+		*/
+		ESymbianKernelSync = 23,
+
+		/**
+		Trace generated by the flexible memory model.
+		*/
+		EFlexibleMemModel = 24,
+
+		/**
+        Trace generated by IIC bus.
+        @prototype 9.6
+        */
+        EIic = 25,
+
+		/**
+		First category value in the range reserved for platform specific use;
+		the end of this range is #EPlatformSpecificLast.
+		Symbian's code will not generate any traces with categories in this range.
+
+		It is strongly recommended that platforms reserve the first half of this range
+		(128..143) for definition and use by base-port (kernel-side) code. Any general
+		trace framework built on top of BTrace APIs should use the second half of the range.
+		This allows fast (primary filtered only) BTrace categories to be used in device drivers
+		and other base-port code, without clashing with more general trace frameworks implemented
+		for application layer code.
+		*/
+		EPlatformSpecificFirst = 128,
+
+		/**
+		Last category value in the range reserved for platform specific use.
+		@see EPlatformSpecificFirst
+		*/
+		EPlatformSpecificLast = 191,
+
+		/**
+		First category value in the range reserved for Symbian tools and future trace framework
+		implementations; the end of this range is #ESymbianExtentionsLast.
+		*/
+		ESymbianExtentionsFirst = 192,
+
+		/**
+		Last category value in the range reserved for Symbian tools and future trace framework
+		implementations.
+		@see ESymbianExtentionsFirst
+		*/
+		ESymbianExtentionsLast = 253,
+
+		/**
+		Used for testing purposes.
+
+		This may be used for ad-hoc testing purposes, e.g. special builds of components
+		with tracing enabled for diagnostic purposes.
+
+		This category is also used by the E32 BTrace unit tests.
+		@test
+		*/
+		ETest1 = 254,
+
+		/**
+		Used for testing purposes.
+
+		This may be used for ad-hoc testing purposes, e.g. special builds of components
+		with tracing enabled for diagnostic purposes.
+
+		This category is also used by the E32 BTrace unit tests.
+		@test
+		*/
+		ETest2 = 255
+		};
+
+	/**
+	Enumeration of sub-category values for trace category EThreadIdentification.
+	@see EThreadIdentification
+	*/
+	enum TThreadIdentification
+		{
+		/**
+		A nano-kernel thread (NThread) has been created.
+
+		Trace data format:
+		- 4 bytes containing the context id (an NThread*) for this thread.
+		*/
+		ENanoThreadCreate,
+
+		/**
+		A nano-kernel thread (NThread) has been destroyed.
+
+		Trace data format:
+		- 4 bytes containing the context id (an NThread*) for this thread.
+		*/
+		ENanoThreadDestroy,
+
+		/**
+		A thread (DThread) has been created.
+
+		Trace data format:
+		- 4 bytes containing the context id (an NThread*) for this thread.
+		- 4 bytes containing trace id (a DProcess*) for the process to which this thread belongs.
+		- Remaining data is the ASCII name of the thread.
+		*/
+		EThreadCreate,
+
+		/**
+		A thread (DThread) has been destroyed.
+
+		Trace data format:
+		- 4 bytes containing the context id (an NThread*) for this thread.
+		- 4 bytes containing trace id for the process to which this thread belongs.
+		- 4 bytes containing thread ID, as returned by RThread::Id().
+		*/
+		EThreadDestroy,
+
+		/**
+		A thread (DThread) has been renamed.
+		This trace may also be output by the tracing system at initialisation
+		in order to identify threads already in existence.
+
+		Trace data format:
+		- 4 bytes containing the context id (an NThread*) for this thread.
+		- 4 bytes containing trace id (a DProcess*) for the process to which this thread belongs.
+		- Remaining data is the ASCII name of the thread.
+		*/
+		EThreadName,
+
+		/**
+		A process has been renamed.
+		This trace may also be output together with EThreadCreate or EThreadName traces
+		to help identify the name of the process to which the thread belongs.
+
+		Trace data format:
+		- 4 bytes containing zero, or if this trace is generated together with EThreadName
+		  or EThreadCreate, this contains the context id (an NThread*) for the thread.
+		- 4 bytes containing trace id (a DProcess*) for process.
+		- Remaining data is the ASCII name of the process.
+		*/
+		EProcessName,
+
+		/**
+		Informational trace giving a threads ID, as returned by RThread::Id().
+		Trace data format:
+		- 4 bytes containing the context id (an NThread*) for this thread.
+		- 4 bytes containing trace id (a DProcess*) for the process to which this thread belongs.
+		- 4 bytes containing thread ID, as returned by RThread::Id().
+		*/
+		EThreadId,
+
+		/**
+		A process has been created.
+
+		Trace data format:
+		- 4 bytes containing trace id (a DProcess*) for the process.
+		*/
+		EProcessCreate,
+
+		/**
+		A process has been destroyed.
+
+		Trace data format:
+		- 4 bytes containing trace id (a DProcess*) for the process.
+		*/
+		EProcessDestroy
+
+		};
+
+	/**
+	Enumeration of sub-category values for trace category ECpuUsage.
+	@see ECpuUsage
+	*/
+	enum TCpuUsage
+		{
+		/**
+		Trace output at start of Interrupt (IRQ) dispatch.
+
+		On platforms which support nested interrupts, traces for these will also
+		be nested.
+		*/
+		EIrqStart,
+
+		/**
+		Trace output at end of Interrupt (IRQ) dispatch.
+
+		Note, this trace isn't generated if an Interrupt Service Routine queues
+		a DFC or causes a thread to be scheduled. In these cases, the traces for
+		these events (EIDFCStart or ENewThreadContext) should be taken to indicate
+		that interrupt servicing has ended.
+		*/
+		EIrqEnd,
+
+		/**
+		Trace output at start of Fast Interrupt (FIQ) dispatch.
+
+		On platforms which support nested interrupts, traces for these will also
+		be nested.
+		*/
+		EFiqStart,
+
+		/**
+		Trace output at end of Fast Interrupt (FIQ) dispatch.
+
+		Note, this trace isn't generated if an Interrupt Service Routine queues
+		a DFC or causes a thread to be scheduled. In these cases, the traces for
+		these events (EIDFCStart or ENewThreadContext) should be taken to indicate
+		that interrupt servicing has ended.
+		*/
+		EFiqEnd,
+
+		/**
+		Trace output at start of Immediate Delayed Function Call (IDFC) processing.
+		This processing also includes moving DFCs to their final queue, so the trace
+		does not necessarily indicate that any IDFCs have been executed.
+		*/
+		EIDFCStart,
+
+		/**
+		Trace output at end of Immediate Delayed Function Call (IDFC) processing.
+		*/
+		EIDFCEnd,
+
+		/**
+		Trace output when a thread is scheduled to run.
+		The context id (NThread*) in this trace is that of the thread being scheduled.
+		*/
+		ENewThreadContext
+		};
+
+    /**
+	@internalTechnology
+    @prototype 9.3
+    */
+	enum TClientServer
+		{
+		/**
+		Trace generated whenever a server is created.
+
+		Trace data format:
+		- 4 bytes containing the server id (a DServer*).
+		- 4 bytes containing undefined data
+		- Remaining data is the ASCII name of the server.
+
+		The context id (NThread*) in this trace is that of the thread creating the server.
+		*/
+		EServerCreate,
+
+		/**
+		Trace generated whenever a server is destroyed.
+
+		Trace data format:
+		- 4 bytes containing the server id (a DServer*).
+
+		*/
+		EServerDestroy,
+
+		/**
+		Trace generated whenever a new session is attached to a server.
+		I.e. a new session has been created.
+
+		Trace data format:
+		- 4 bytes containing the session id (a DSession*).
+		- 4 bytes containing the server id (a DServer*).
+
+		The context id (NThread*) in this trace is that of the thread creating the session.
+		*/
+		ESessionAttach,
+
+		/**
+		Trace generated whenever a server session is detached from a server.
+		I.e. a session has been closed.
+
+		Trace data format:
+		- 4 bytes containing the session id (a DSession*).
+		- 4 bytes containing the reasons (error code) for the session being closed.
+
+		*/
+		ESessionDetach,
+
+		/**
+		Trace generated whenever a new message is sent to a server.
+
+		Trace data format:
+		- 4 bytes containing the message handle.
+		- 4 bytes containing the iFunction value for the message.
+		- 4 bytes containing the session id (a DSession*).
+
+		The context id (NThread*) in this trace is that of the thread which sent the message.
+		*/
+		EMessageSend,
+
+		/**
+		Trace generated when a server receives a new message.
+
+		Trace data format:
+		- 4 bytes containing the message handle.
+		*/
+		EMessageReceive,
+
+		/**
+		Trace generated whenever a message is completed using RMessagePtr2::Complete.
+
+		Trace data format:
+		- 4 bytes containing the message handle.
+		- 4 bytes containing the completion reason, or object handle, value.
+		    (The object handle value is that which is delivered to the sender of the
+			message, not that supplied by the server actually completing the request.)
+
+		The context id (NThread*) in this trace is that of the thread which completed the message.
+		*/
+		EMessageComplete
+		};
+
+
+    /**
+	@internalTechnology
+    @prototype 9.3
+    */
+	enum TRequests
+		{
+		/**
+		Trace generated whenever a request status is completed.
+
+		Trace data format:
+		- 4 bytes containing the thread id (NThread*) of the thread being signalled.
+		- 4 bytes containing the address of the TRequestStatus object.
+		- 4 bytes containing the completion reason.
+
+		The context id (NThread*) in this trace is that of the thread which completed the request.
+		*/
+		ERequestComplete
+		};
+
+
+	/**
+	Enumeration of sub-category values for trace category EChunks.
+	@see EChunks
+	*/
+	enum TChunks
+		{
+		/**
+		Trace output when a chunk is created.
+
+		Trace data format:
+		- 4 bytes containing the chunk id (a DChunk*).
+		- 4 bytes containing the maximum size of the chunk.
+		- The ASCII name of the chunk.
+		*/
+		EChunkCreated,
+
+		/**
+		@internalTechnology
+
+		Trace output when a chunk is created containing extra chunk information.
+
+		Note that the meaning of the data in this trace is different between
+		memory models, and may change without warning.
+
+		Trace data format:
+		- 4 bytes containing the chunk id (a DChunk*).
+		- 4 bytes containing the chunk type.
+		- 4 bytes containing the chunk's attributes.
+		*/
+		EChunkInfo,
+
+		/**
+		Trace output when a chunk is destroyed.
+
+		Trace data format:
+		- 4 bytes containing the chunk id (a DChunk*)
+		*/
+		EChunkDestroyed,
+
+		/**
+		Trace output when memory is allocated and committed to a chunk.
+
+		Trace data format:
+		- 4 bytes containing the chunk id (a DChunk*).
+		- 4 bytes containing the offset into the chunk.
+		- 4 bytes containing the size of the memory committed.
+		*/
+		EChunkMemoryAllocated,
+
+		/**
+		Trace output when memory is decommitted from a chunk and deallocated.
+
+		Trace data format:
+		- 4 bytes containing the chunk id (a DChunk*).
+		- 4 bytes containing the offset into the chunk.
+		- 4 bytes containing the size of the memory decommitted.
+		*/
+		EChunkMemoryDeallocated,
+
+		/**
+		Trace output when un-owned memory is committed to a chunk.
+
+		Trace data format:
+		- 4 bytes containing the chunk id (a DChunk*).
+		- 4 bytes containing the offset into the chunk.
+		- 4 bytes containing the size of the memory committed.
+		*/
+		EChunkMemoryAdded,
+
+		/**
+		Trace output when un-owned memory is decommitted to a chunk.
+
+		Trace data format:
+		- 4 bytes containing the chunk id (a DChunk*).
+		- 4 bytes containing the offset into the chunk.
+		- 4 bytes containing the size of the memory decommitted.
+		*/
+		EChunkMemoryRemoved,
+
+		/**
+		Trace to indicate the owning process of a chunk - only for local (private) chunks.
+
+		Trace data format:
+		- 4 bytes containing the chunk id (a DChunk*).
+		- 4 bytes containing the process id of the owner (a DProcess*).
+		*/
+		EChunkOwner
+		};
+
+	/**
+	Enumeration of sub-category values for trace category ECodeSegs.
+	@see ECodeSegs
+	*/
+	enum TCodeSegs
+		{
+		/**
+		Trace output when a code segment is created to associate a code segment
+		id with a filename.
+
+		Trace data format:
+		- 4 bytes containing the code segment id (a DCodeSeg*).
+		- The ASCII filename.
+		*/
+		ECodeSegCreated,
+
+		/**
+		Trace output when a code segment is created.
+
+		Trace data format:
+		- 4 bytes containing the code segment id (a DCodeSeg*).
+		- 4 bytes containing the attributes.
+		- 4 bytes containing the code base address (.text).
+		- 4 bytes containing the size of the code section (.text).
+		- 4 bytes containing the base address of the constant data section (.rodata).
+		- 4 bytes containing the size of the constant data section (.rodata).
+		- 4 bytes containing the base address of the initialised data section (.data).
+		- 4 bytes containing the size of the initialised data section (.data).
+		- 4 bytes containing the base address of the uninitialised data section (.bss).
+		- 4 bytes containing the size of the uninitialised data section (.bss).
+		*/
+		ECodeSegInfo,
+
+		/**
+		Trace output when a code segment is destroyed.
+
+		Trace data format:
+		- 4 bytes containing the code segment id (a DCodeSeg*).
+		*/
+		ECodeSegDestroyed,
+
+		/**
+		Trace output when a code segment is mapped into a process.
+
+		Trace data format:
+		- 4 bytes containing the code segment id (a DCodeSeg*).
+		- 4 bytes containing the process id (a DProcess*).
+		*/
+		ECodeSegMapped,
+
+		/**
+		Trace output when a code segment is unmapped from a process.
+
+		Trace data format:
+		- 4 bytes containing the code segment id (a DCodeSeg*).
+		- 4 bytes containing the process id (a DProcess*).
+		*/
+		ECodeSegUnmapped,
+
+		/**
+		Trace output when memory is allocated to a code segment.
+
+		Under the multiple memory model, code segments for RAM-loaded user code
+		own the RAM pages the code occupies.  The pages are not owned by any
+		chunk, but are mapped into the code chunk of each process that uses the
+		code segment.
+
+		Trace data format:
+		- 4 bytes containing the code segment id (a DCodeSeg*).
+		- 4 bytes containing the size of the memory allocated.
+		*/
+		ECodeSegMemoryAllocated,
+
+		/**
+		Trace output when memory is deallocated from a code segment.
+
+		Under the multiple memory model, code segments for RAM-loaded user code
+		own the RAM pages the code occupies.  The pages are not owned by any
+		chunk, but are mapped into the code chunk of each process that uses the
+		code segment.
+
+		Trace data format:
+		- 4 bytes containing the code segment id (a DCodeSeg*).
+		- 4 bytes containing the size of the memory deallocated.
+		*/
+		ECodeSegMemoryDeallocated
+		};
+
+
+	/**
+	Enumeration of sub-category values for trace category EPaging.
+	@see EPaging
+	*/
+	enum TPaging
+		{
+		/**
+		This event indicates the beginning of the 'page in' activity.
+		The end of this activity is indicated by one of the following events:
+		- EPagingPageInUnneeded
+		- EPagingPageInROM
+		- EPagingPageInCode
+		- EPagingPageIn (flexible memory model)
+
+		Trace data format:
+		- 4 bytes containing the virtual address which was accessed, causing this paging event.
+		- 4 bytes containing the virtual address of the instruction which caused this paging event.
+		  (The PC value.)
+
+		On the flexible memory model, the following addition trace data is also present:
+		- 1 byte containing the required access permissions, as defined by TMappingPermissions.
+		- 3 spare bytes, currently zero
+
+		The context id (NThread*) in this trace is that of the thread caused this paging event.
+		*/
+		EPagingPageInBegin,
+
+		/**
+		Event which terminates the 'page in' activity when the required page was found to have been
+		paged in by another thread while the current thread was processing the fault (see
+		EPagingPageInBegin).
+
+		Trace data format:
+		- 0 bytes. (No extra data.)
+
+		The context id (NThread*) in this trace is that of the thread caused this paging event.
+		*/
+		EPagingPageInUnneeded,
+
+		/**
+		A ROM page has been paged in.
+		This event indicates the end of the 'page in' activity. (See EPagingPageInBegin.)
+
+		Trace data format:
+		- 4 bytes containing the physical address of the page 'paged in'.
+		- 4 bytes containing the virtual address of the page 'paged in'.
+
+		The context id (NThread*) in this trace is that of the thread caused this paging event.
+
+		This trace is not emitted on the flexible memory model - EPagingPageIn is used instead.
+		*/
+		EPagingPageInROM,
+
+		/**
+		A ROM page has been 'paged out'. I.e. removed from the live list to be either
+		reused or returned to free pool.
+
+		Trace data format:
+		- 4 bytes containing the physical address of the page being 'paged out'.
+		- 4 bytes containing the virtual address of the page being 'paged out'.
+
+		The context id (NThread*) in this trace is that of the thread caused this paging event.
+
+		This trace is not emitted on the flexible memory model - EPagingPageOut is used instead.
+		*/
+		EPagingPageOutROM,
+
+		/**
+		A Free page has been 'paged in'. I.e. added to the live list.
+
+		Trace data format:
+		- 4 bytes containing the physical address of the page being 'paged in'.
+
+		The context id (NThread*) in this trace is that of the thread caused this paging event.
+		*/
+		EPagingPageInFree,
+
+		/**
+		A Free page has been 'paged out'. I.e. removed from the live list to be either
+		reused or returned to free pool.
+
+		Trace data format:
+		- 4 bytes containing the physical address of the page being 'paged out'.
+
+		The context id (NThread*) in this trace is that of the thread caused this paging event.
+
+		This trace is not emitted on the flexible memory model - EPagingPageOut is used instead.
+		*/
+		EPagingPageOutFree,
+
+		/**
+		A page has been made 'young' again because it was accessed.
+
+		Trace data format:
+		- 4 bytes containing the physical address of the page being rejuvenated, (made young).
+		- 4 bytes containing the virtual address which was accessed, causing this paging event.
+		- 4 bytes containing the virtual address of the instruction which caused this paging event.
+		  (The PC value.)
+
+		The context id (NThread*) in this trace is that of the thread caused this paging event.
+		*/
+		EPagingRejuvenate,
+
+		/**
+		A page fault was found to have already been previously serviced.
+
+		Trace data format:
+		- 4 bytes containing the physical address of the page accessed.
+		- 4 bytes containing the virtual address which was accessed, causing this paging event.
+		- 4 bytes containing the virtual address of the instruction which caused this paging event.
+		  (The PC value.)
+
+		The context id (NThread*) in this trace is that of the thread caused this paging event.
+
+		This trace is not emitted on the flexible memory model.
+		*/
+		EPagingPageNop,
+
+		/**
+		A page has been locked.
+
+		Trace data format:
+		- 4 bytes containing the physical address of the page being locked.
+		- 4 bytes containing the value of the lock count after the paged was locked.
+
+		The context id (NThread*) in this trace is that of the thread caused this paging event.
+		*/
+		EPagingPageLock,
+
+		/**
+		A page has been unlocked.
+
+		Trace data format:
+		- 4 bytes containing the physical address of the page being unlocked.
+		- 4 bytes containing the value of the lock count before the paged was unlocked.
+
+		The context id (NThread*) in this trace is that of the thread caused this paging event.
+		*/
+		EPagingPageUnlock,
+
+		/**
+		A page containing RAM cache has been 'paged out'. I.e. removed from the live list to be
+		either reused or returned to free pool.
+
+		Trace data format:
+		- 4 bytes containing the physical address of the page being 'paged out'.
+		- 4 bytes containing the virtual address of the page being 'paged out'.
+
+		The context id (NThread*) in this trace is that of the thread caused this paging event.
+
+		This trace is not emitted on the flexible memory model - EPagingPageOut is used instead.
+		*/
+		EPagingPageOutCache,
+
+		/**
+		A page containing RAM-loaded code has been paged in.
+		This event indicates the end of the 'page in' activity. (See EPagingPageInBegin.)
+
+		Trace data format:
+		- 4 bytes containing the physical address of the page 'paged in'.
+		- 4 bytes containing the virtual address of the page 'paged in'.
+
+		The context id (NThread*) in this trace is that of the thread caused this paging event.
+
+		This trace is not emitted on the flexible memory model - EPagingPageIn is used instead.
+		*/
+		EPagingPageInCode,
+
+		/**
+		A page containing RAM-loaded code has been 'paged out'. I.e. removed from the live list to be
+		either reused or returned to free pool.
+
+		Trace data format:
+		- 4 bytes containing the physical address of the page being 'paged out'.
+		- 4 bytes containing the virtual address of the page being 'paged out'.
+
+		The context id (NThread*) in this trace is that of the thread caused this paging event.
+
+		This trace is not emitted on the flexible memory model - EPagingPageOut is used instead.
+		*/
+		EPagingPageOutCode,
+
+		/**
+		A page of RAM-loaded code was found to already be 'paged in' but not mapped in
+		the faulting process.
+
+		Trace data format:
+		- 4 bytes containing the physical address of the page 'paged in'.
+		- 4 bytes containing the virtual address which was accessed, causing this paging event.
+
+		The context id (NThread*) in this trace is that of the thread caused this paging event.
+
+		This trace is only emitted on the multiple memory model.
+		*/
+		EPagingMapCode,
+
+		/**
+		A page has been made 'old' because it was the last young page to be accessed.
+
+		This trace is only produced when the kernel is compiled with the #BTRACE_PAGING_VERBOSE
+		macro defined.
+
+		Trace data format:
+		- 4 bytes containing the physical address of the page being aged, (made old).
+
+		The context id (NThread*) in this trace is that of the thread caused this paging event.
+		*/
+		EPagingAged,
+
+		/**
+		Trace emitted at the start of decompression of demand paged data.
+
+		This trace is only produced when the kernel is compiled with the #BTRACE_PAGING_VERBOSE
+		macro defined.
+
+		Trace data format:
+		- 4 bytes containing an integer which indicates the compression type being used:
+			  0, no compression;
+			  1, bytepair compression.
+
+		The context id (NThread*) in this trace is that of the thread caused this paging event.
+		*/
+		EPagingDecompressStart,
+
+		/**
+		Trace emitted at the end of decompression of demand paged data.
+
+		This trace is only produced when the kernel is compiled with the #BTRACE_PAGING_VERBOSE
+		macro defined.
+
+		The context id (NThread*) in this trace is that of the thread caused this paging event.
+		*/
+		EPagingDecompressEnd,
+
+		/**
+		Information about the kernel's memory model.
+
+		Trace data format:
+		- 4 bytes containing the memory model as defined by TMemModelAttributes.
+		*/
+		EPagingMemoryModel,
+
+		/**
+		A page has been donated to the paging cache via RChunk::Unlock().
+
+		Trace data format:
+		- 4 bytes containing the chunk id (a DChunk*).
+		- 4 bytes containing the page index of the page within the chunk.
+
+		This trace is not emitted on the flexible memory model.
+		@see EPagingDonatePage
+		*/
+		EPagingChunkDonatePage,
+
+		/**
+		A page has been reclaimed from the paging cache via RChunk::Lock().
+
+		Trace data format:
+		- 4 bytes containing the chunk id (a DChunk*).
+		- 4 bytes containing the page index of the page within the chunk.
+
+		This trace is not emitted on the flexible memory model.
+		@see EPagingReclaimPage.
+		*/
+		EPagingChunkReclaimPage,
+
+		// Traces specific to the flexible memory model
+
+		/**
+		A page has been paged in.
+		This event indicates the end of the 'page in' activity. (See EPagingPageInBegin.)
+
+		Trace data format:
+		- 4 bytes containing the physical address of the page 'paged in'.
+		- 4 bytes containing the memory object id (DMemoryObject*).
+		- 4 bytes containing the page index of the page within the memory object.
+
+		The context id (NThread*) in this trace is that of the thread caused this paging event.
+
+		This trace is only emitted on the flexible memory model.
+		*/
+		EPagingPageIn,
+
+		/**
+		A page has been 'paged out'. I.e. removed from the live list to be either
+		reused or returned to free pool.
+
+		Trace data format:
+		- 4 bytes containing the physical address of the page being 'paged out'.
+
+		The context id (NThread*) in this trace is that of the thread caused this paging event.
+
+		This trace is only emitted on the flexible memory model.
+		*/
+		EPagingPageOut,
+
+		/**
+		Event which terminates the 'page in' activity when the required page was found to
+		already be paged in but not mapped in the faulting process (see EPagingPageInBegin).
+
+		Trace data format:
+		- 4 bytes containing the physical address of the page 'paged in'.
+
+		The context id (NThread*) in this trace is that of the thread caused this paging event.
+
+		This trace is only emitted on the flexible memory model.
+		*/
+		EPagingMapPage,
+
+		/**
+		A page has been donated to the paging cache via RChunk::Unlock().
+
+		Trace data format:
+		- 4 bytes containing the physical address of the page.
+		- 4 bytes containing the memory object id (DMemoryObject*).
+		- 4 bytes containing the page index of the page within the memory object.
+
+		This trace is only emitted on the flexible memory model.
+		@see EPagingChunkDonatePage.
+		*/
+		EPagingDonatePage,
+
+		/**
+		A page has been reclaimed from the paging cache via RChunk::Lock().
+
+		Trace data format:
+		- 4 bytes containing the physical address of the page.
+
+		This trace is only emitted on the flexible memory model.
+		@see EPagingChunkReclaimPage.
+		*/
+		EPagingReclaimPage,
+
+		/**
+		A page has been moved to the oldest clean list because it was the last old page and
+		it was clean.
+
+		This trace is only produced when the kernel is compiled with the #BTRACE_PAGING_VERBOSE
+		macro defined.
+
+		Trace data format:
+		- 4 bytes containing the physical address of the page being moved to the oldest clean list.
+
+		The context id (NThread*) in this trace is that of the thread caused this paging event.
+		*/
+		EPagingAgedClean,
+
+		/**
+		A page has been moved to the oldest dirty list because it was the last old page and
+		it was dirty.
+
+		This trace is only produced when the kernel is compiled with the #BTRACE_PAGING_VERBOSE
+		macro defined.
+
+		Trace data format:
+		- 4 bytes containing the physical address of the page being moved to the oldest dirty list.
+
+		The context id (NThread*) in this trace is that of the thread caused this paging event.
+		*/
+		EPagingAgedDirty,
+
+		/**
+		A page has been allocated to hold the MMU page tables required to map demand paged memory.
+
+		Trace data format:
+		- 4 bytes containing the physical address of the page allocated.
+
+		The context id (NThread*) in this trace is that of the thread caused this paging event.
+		
+		This trace is only emitted on the flexible memory model.
+		*/
+		EPagingPageTableAlloc,
+		};
+
+    /**
+	Enumeration of sub-category values for trace category EResourceManager.
+	@see EResourceManager
+    @prototype 9.5
+	*/
+	enum TResourceManager
+		{
+		/**
+		Trace output for resource registration.
+
+		Trace data format:
+		- 4 bytes containing the Resource Id.
+		- 4 bytes containing the Resource address.
+		- N bytes containing the Resource name, where 0 < N < 32
+		- 4 bytes containing the Resource Minimum Level
+		- 4 bytes containing the Resource Maximum Level
+		- 4 bytes containing the Resource Default Level
+		*/
+		ERegisterResource = 0,
+
+		/**
+		Trace output for client registration
+
+		Trace data format:
+		- 4 bytes containing clientId
+		- 4 bytes containing client address
+		- N bytes containing client name, where 0 < N < 32
+		*/
+		ERegisterClient,
+
+		/**
+		Trace output for client deregistration
+
+		Trace data format:
+		- 4 bytes containing clientId
+		- 4 bytes containing client address
+		- N bytes containing client name, where 0 < N < 32
+		*/
+		EDeRegisterClient,
+
+		/**
+		Trace output for resource state change start operation
+
+		Trace data format:
+		- 4 bytes containing clientId
+		- 4 bytes containing the Resource Id.
+		- N bytes containing client name, where 0 < N < 32
+		- N bytes containing the Resource name, where 0 < N < 32
+		- 4 bytes containing the Resource state
+		*/
+		ESetResourceStateStart,
+
+		/**
+		Trace output for resource state change end operation
+
+		Trace data format:
+		- 4 bytes containing clientId
+		- 4 bytes containing the Resource Id.
+		- N bytes containing client name, where 0 < N < 32
+		- N bytes containing the Resource name, where 0 < N < 32
+		- 4 bytes containing return value.
+		- 4 bytes containing the Resource state.
+		*/
+		ESetResourceStateEnd,
+
+		/**
+		Trace output for registration for post notification
+
+		Trace data format:
+		- 4 bytes containing clientId
+		- 4 bytes containing the Resource Id.
+		- 4 bytest containing the callback address
+		- 4 bytes containing return value.
+		*/
+		EPostNotificationRegister,
+
+		/**
+		Trace output for deregistration for post notification
+
+		Trace data format:
+		- 4 bytes containing clientId
+		- 4 bytes containing the Resource Id.
+		- 4 bytes containing the callback address
+		- 4 bytes containing the return value.
+		*/
+		EPostNotificationDeRegister,
+
+		/**
+		Trace output for post notification sent.
+
+		Trace data format:
+		- 4 bytes containing clientId
+		- 4 bytes containing the Resource Id.
+		*/
+		EPostNotificationSent,
+
+		/**
+		Trace output for Callback complete
+
+		Trace data format:
+		- 4 bytes containing clientId
+		- 4 bytes containing the Resource Id.
+		*/
+		ECallbackComplete,
+
+		/**
+		Trace output for resource manager memory usage
+
+		Trace data format:
+		- 4 bytes containing memory allocated in bytes.
+		*/
+		EMemoryUsage,
+
+		/**
+		Trace output for get resource state start operation
+
+		Trace data format:
+		- 4 bytes containing clientId
+		- 4 bytes containing the Resource Id.
+		- N bytes containing client name, where 0 < N < 32
+		- N bytes containing the Resource name, where 0 < N < 32
+		*/
+		EGetResourceStateStart,
+
+		/**
+		Trace output for get resource state end operation
+
+		Trace data format:
+		- 4 bytes containing clientId
+		- 4 bytes containing the Resource Id.
+		- N bytes containing client name, where 0 < N < 32
+		- N bytes containing the Resource name, where 0 < N < 32
+		- 4 bytes containing the Resource state
+		- 4 bytes containing return value.
+		*/
+		EGetResourceStateEnd,
+
+		/**
+		Trace output for cancellation of long latency operation
+
+		Trace data format:
+		- 4 bytes containing clientId
+		- 4 bytes containing the Resource Id.
+		- N bytes containing client name, where 0 < N < 32
+		- N bytes containing the Resource name, where 0 < N < 32
+		- 4 bytes containing return value
+		*/
+		ECancelLongLatencyOperation,
+
+		/**
+		Trace output for booting of resource manager
+
+		Trace data format:
+		- 4 bytes containing entry point
+		*/
+		EBooting,
+
+		/**
+		Trace output for PSL resource state change operation
+
+		Trace data format:
+		- 4 bytes containing clientId
+		- 4 bytes containing the Resource Id.
+		- N bytes containing the Resource name, where 0 < N < 32
+		- 4 bytes containing the Resource current state
+		- 4 bytes containing the resource requested state
+		*/
+		EPslChangeResourceStateStart,
+
+		/**
+		Trace output for PSL resource state change operation
+
+		Trace data format:
+		- 4 bytes containing clientId
+		- 4 bytes containing the Resource Id.
+		- N bytes containing the Resource name, where 0 < N < 32
+		- 4 bytes containing the Resource current state
+		- 4 bytes containing the resource requested state
+		- 4 bytes containing return value
+		*/
+		EPslChangeResourceStateEnd,
+
+		/**
+		Trace output for get resource state start operation in PSL
+
+		Trace data format:
+		- 4 bytes containing clientId
+		- 4 bytes containing the Resource Id.
+		- N bytes containing the Resource name, where 0 < N < 32
+		*/
+		EPslGetResourceStateStart,
+
+		/**
+		Trace output for get resource state end operation in PSL
+
+		Trace data format:
+		- 4 bytes containing clientId
+		- 4 bytes containing the Resource Id.
+		- N bytes containing the Resource name, where 0 < N < 32
+		- 4 bytes containing the Resource state
+		- 4 bytes containing return value.
+		*/
+		EPslGetResourceStateEnd,
+
+		/**
+		Trace output for resource creation
+
+		Trace data format:
+		- 4 bytes containing minimum value of resource
+		- 4 bytes containing maximum value of resource
+		- 4 bytes containing the default value of resource
+		- 4 bytes containing the properties of the resource
+		- N bytes containing the Resource name, where 0 < N < 32
+		*/
+		EPslResourceCreate,
+
+		/**
+		Trace output for static resource with dependency registration
+
+		Trace data format:
+		- 4 bytes containing the Resource Id
+		- 4 bytes containing the Resource address
+		- N bytes containing the Resource name, where 0 < N < 32
+		- 4 bytes containing the minimum value of resource
+		- 4 bytes containing the maximum value of resource
+		- 4 bytes containing the default value of resource
+		*/
+		ERegisterStaticResourceWithDependency,
+
+		/**
+		Trace output for dynamic resource registration
+
+		Trace data format:
+		- 4 bytes containing clientId
+		- 4 bytes containing the Resource Id
+		- N bytes containing the client name, where 0 < N < 32
+		- N bytes containing the resource name, where 0 < N < 32
+		- 4 bytes containing the resouce address
+		*/
+		ERegisterDynamicResource,
+
+		/**
+		Trace output for dynamic resource deregistration
+
+		Trace data format:
+		- 4 bytes containing clientId
+		- 4 bytes containing the Resource Id
+		- N bytes containing the client name, where 0 < N < 32
+		- N bytes containing the resource name, where 0 < N < 32
+		- 4 bytes containing the resource address
+		- 4 bytes containing the resource level.
+		*/
+		EDeRegisterDynamicResource,
+
+		/**
+		Trace output for resource dependency registration
+
+		Trace data format:
+		- 4 bytes containing clientId
+		- 4 bytes containing the Resource Id of first dependent resource
+		- N bytes containing the client name, where 0 < N < 32
+		- N bytes containing the resource name of first dependent resource, where 0 < N < 32
+		- 4 bytes containing the Resource Id of second dependent resource
+		- N bytes containing the resource name of second dependent resource, where 0 < N < 32
+		- 4 bytes containing the address of first dependent resource
+		- 4 bytes containing the address of second dependent resource
+		*/
+		ERegisterResourceDependency,
+
+		/**
+		Trace output for resource dependency deregistration
+
+		Trace data format:
+		- 4 bytes containing clientId
+		- 4 bytes containing the Resource Id of first dependent resource
+		- N bytes containing the client name, where 0 < N < 32
+		- N bytes containing the resource name of first dependent resource, where 0 < N < 32
+		- 4 bytes containing the resource id of second dependent resource
+		- N bytes containing the resource name of second dependent resource, where 0 < N < 32
+		- 4 bytes containing the address of first dependent resource
+		- 4 bytes containing the address of second dependent resource
+		*/
+		EDeRegisterResourceDependency
+		};
+    /**
+	Enumeration of sub-category values for trace category EResourceManagerUs.
+	@see EResourceManagerUs
+    @prototype 9.5
+	*/
+	enum TResourceManagerUs
+		{
+		/**
+		Trace output for the start of opening a channel to the Resource Controller.
+
+		Trace data format:
+		- 4 bytes unused (displays 0)
+		- 4 bytes containing the client thread identifier.
+		- N bytes containing the client name, where 0 < N < 32
+		*/
+		EOpenChannelUsStart = 0,
+		/**
+		Trace output for the end of opening a channel to the Resource Controller.
+
+		Trace data format:
+		- 4 bytes unused (displays 0)
+		- 4 bytes containing the client identifier provided by the Resource Controller
+		- N bytes containing the client name, where 0 < N < 32
+		*/
+		EOpenChannelUsEnd,
+		/**
+		Trace output for the start of registering a client with the Resource Controller.
+
+		Trace data format:
+		- 4 bytes the number of concurrent change resource state operations to be supported
+		- 4 bytes the number of concurrent notification requests to be supported
+		- N bytes containing the client name, where 0 < N < 32
+		- 4 bytes the number of concurrent get resource state operations to be supported
+		*/
+		ERegisterClientUsStart,
+		/**
+		Trace output for the end of registering a client with the Resource Controller.
+
+		Trace data format:
+		- 4 bytes containing the client identifier provided by the Resource Controller.
+		- 4 bytes specifying the value returned from the call to Resource Controller's AllocReserve method
+		*/
+		ERegisterClientUsEnd,
+		/**
+		Trace output for the start of de-registering a client with the Resource Controller.
+
+		Trace data format:
+		- 4 bytes unused (displays 0)
+		- 4 bytes containing the client identifier provided by the Resource Controller.
+		- N bytes containing the client name, where 0 < N < 32
+		*/
+		EDeRegisterClientUsStart,
+		/**
+		Trace output for the end of registering a client with the Resource Controller.
+
+		Trace data format:
+		- 4 bytes containing the client identifier provided by the Resource Controller.
+		*/
+		EDeRegisterClientUsEnd,
+		/**
+		Trace output for the start of a GetResourceState request to the Resource Controller.
+
+		Trace data format:
+		- 4 bytes specifying the resource ID
+		- 4 bytes containing the client identifier provided by the Resource Controller.
+		- N bytes containing the client name, where 0 < N < 32
+		*/
+		EGetResourceStateUsStart,
+		/**
+		Trace output for the end of a GetResourceState request to the Resource Controller.
+
+		Trace data format:
+		- 4 bytes specifying the resource ID
+		- 4 bytes specifying the resource level
+		- 4 bytes containing the client identifier
+		- 4 bytes specifying the success code returned by the Resource Controller.
+		*/
+		EGetResourceStateUsEnd,
+		/**
+		Trace output for the start of a ChangeResourceState request to the Resource Controller.
+
+		Trace data format:
+		- 4 bytes specifying the resource ID
+		- 4 bytes specifying the required state
+		- N bytes containing the client name, where 0 < N < 32
+		- 4 bytes containing the client identifier provided by the Resource Controller.
+		*/
+		ESetResourceStateUsStart,
+		/**
+		Trace output for the end of a ChangeResourceState request to the Resource Controller.
+
+		Trace data format:
+		- 4 bytes specifying the resource ID
+		- 4 bytes specifying the requested state
+		- 4 bytes containing the client identifier
+		- 4 bytes specifying the success code returned by the Resource Controller.
+		*/
+		ESetResourceStateUsEnd,
+		/**
+		Trace output for the start of a cancel GetResourceState request to the Resource Controller.
+
+		Trace data format:
+		- 4 bytes specifying the resource ID
+		- 4 bytes containing the client identifier provided by the Resource Controller.
+		- N bytes containing the client name, where 0 < N < 32
+		*/
+		ECancelGetResourceStateUsStart,
+		/**
+		Trace output for the end of a cancel GetResourceState request to the Resource Controller.
+
+		Trace data format:
+		- 4 bytes specifying the resource ID
+		- 4 bytes containing the client identifier provided by the Resource Controller.
+		- N bytes containing the client name, where 0 < N < 32
+		*/
+		ECancelGetResourceStateUsEnd,
+		/**
+		Trace output for the start of a cancel ChangeResourceState request to the Resource Controller.
+
+		Trace data format:
+		- 4 bytes specifying the resource ID
+		- 4 bytes containing the client identifier provided by the Resource Controller.
+		- N bytes containing the client name, where 0 < N < 32
+		*/
+		ECancelSetResourceStateUsStart,
+		/**
+		Trace output for the end of a cancel ChangeResourceState request to the Resource Controller.
+
+		Trace data format:
+		- 4 bytes specifying the resource ID
+		- 4 bytes containing the client identifier provided by the Resource Controller.
+		- N bytes containing the client name, where 0 < N < 32
+		*/
+		ECancelSetResourceStateUsEnd
+		};
+
+	/**
+	Enumeration of sub-category values for trace category EThreadPriority.
+	@see EThreadPriority
+	@internalTechnology
+    @prototype 9.3
+	*/
+	enum TThreadPriority
+		{
+		/**
+		Trace output when a nanothread priority is changed.
+
+		Trace data format:
+		- 4 bytes containing the context id (an NThread*) for the thread whose priority is changing.
+		- 4 bytes containing the new absolute priority.
+		*/
+		ENThreadPriority=0,
+
+		/**
+		Trace output when a DThread's default priority is set.
+
+		Trace data format:
+		- 4 bytes containing the context id (an NThread*) for the thread whose priority is changing.
+		- 4 bytes containing the iThreadPriority member - a value from enum ::TThrdPriority.
+		- 4 bytes containing the new default absolute priority.
+		*/
+		EDThreadPriority=1,
+
+		/**
+		Trace output when a DProcess priority is changed.
+
+		Trace data format:
+		- 4 bytes containing trace id (a DProcess*) for process.
+		- 4 bytes containing the new process priority, a value from enum ::TProcPriority
+		*/
+		EProcessPriority=2
+		};
+
+	/**
+	Enumeration of sub-category values for trace category EPagingMedia.
+	@see EPagingMedia
+	*/
+	enum TPagingMedia
+		{
+		/**
+		Event generated when a request to 'page in' data is received by the Local Media Subsystem.
+
+		Trace data format:
+		- 4 bytes containing the linear address of the buffer to where the data is to be written.
+		- 4 bytes containing the offset from start of the partition to where the data to be paged in resides.
+		- 4 bytes containing the number of bytes to be read off the media.
+		- 4 bytes containing local drive number for the drive where the data to be paged in resides (-1 if ROM paging).
+		- 4 bytes containing the linear address in memory where this request object resides.
+
+		The context id (NThread*) in this trace is that of the thread that took the page fault that caused this event.
+		*/
+		EPagingMediaLocMedPageInBegin,
+
+		/**
+		Event generated by the Local Media Subsystem when a request to page data in or out has completed.
+
+		Trace data format:
+		- 4 bytes containing the linear address in memory where this request object resides.
+		- 4 bytes containing the completion code to be returned.
+		- 4 bytes containing a code qualifying this request as either a ROM or Code 'page in' (see TPagingRequestId) or a data page-in/out.
+
+		The context id (NThread*) in this trace is that of the media driver thread that services this 'page in' request.
+		*/
+		EPagingMediaLocMedPageInPagedIn,
+
+		/**
+		Event generated by the Local Media Subsystem when a request to 'page in' data is deferred.
+
+		Trace data format:
+		- 4 bytes containing the linear address in memory where this request object resides.
+		- 4 bytes containing a code qualifying this request as either a ROM or Code 'page in' (see TPagingRequestId) or a data page-in/out..
+
+		The context id (NThread*) in this trace is that of the media driver thread that services this 'page in' request.
+		*/
+		EPagingMediaLocMedPageInDeferred,
+
+		/**
+		Event generated by the Local Media Subsystem when a request to 'page in' data that has been deferred is re-posted.
+
+		Trace data format:
+		- 4 bytes containing the linear address in memory where this request object resides.
+		- 4 bytes containing a code qualifying this request as either a ROM or Code 'page in' (see TPagingRequestId) or a data page-in/out..
+
+		The context id (NThread*) in this trace is that of the media driver thread that services this 'page in' request.
+		*/
+		EPagingMediaLocMedPageInDeferredReposted,
+
+		/**
+		Event generated by the Local Media Subsystem when a request to 'page in' data is re-deferred.
+
+		Trace data format:
+		- 4 bytes containing the linear address in memory where this request object resides.
+		- 4 bytes containing a code qualifying this request as either a ROM or Code 'page in' (see TPagingRequestId) or a data page-in/out..
+
+		The context id (NThread*) in this trace is that of the media driver thread that services this 'page in' request.
+		*/
+		EPagingMediaLocMedPageInReDeferred,
+
+		/**
+		Event generated by the Local Media Subsystem when a request to 'page in' data is issued when the media is not yet open.
+
+		Trace data format:
+		- 4 bytes containing the linear address in memory where this request object resides.
+		- 4 bytes containing the state of the media (one of TMediaState).
+		- 4 bytes containing a code qualifying this request as either a ROM or Code 'page in' (see TPagingRequestId) or a data page-in/out..
+
+		The context id (NThread*) in this trace is that of the media driver thread that services this 'page in' request.
+		*/
+		EPagingMediaLocMedPageInQuietlyDeferred,
+
+		/**
+		Event generated by the Local Media Subsystem when a fragment of a Write request is created and is ready to be sent to the Media
+		Driver thread .
+
+		Trace data format:
+		- 4 bytes containing the linear address in memory where this request object resides.
+		- 4 bytes containing the ID of this fragment (middle or last).
+		- 4 bytes containing the length of data in this request fragment.
+		- 4 bytes containing the offset within the original request to the start of data in this fragment.
+		- 4 bytes containing the offset from start of the partition to where the data in this fragment is to be written.
+		- 4 bytes containing the address of the DThread object representing the thread that issued the original Write request.
+
+		The context id (NThread*) in this trace is that of the File Server drive thread that issued the original Write request.
+		*/
+		EPagingMediaLocMedFragmentBegin,
+
+		/**
+		Event generated by the Local Media Subsystem when a Write fragment is completed .
+
+		Trace data format:
+		- 4 bytes containing the linear address in memory where this request object resides.
+		- 4 bytes containing the completion code to be returned.
+
+		The context id (NThread*) in this trace is that of the File Server drive thread that issued the original Write request.
+		*/
+		EPagingMediaLocMedFragmentEnd,
+
+		/**
+		Event generated when the Media Driver starts processing a request to 'page in' data in its specific Request(..) function.
+
+		Trace data format:
+		- 4 bytes containing a code describing the type of the media (one of TMediaDevice).
+		- 4 bytes containing the linear address in memory where this request object resides.
+
+		The context id (NThread*) in this trace is that of the media driver thread that services this 'page in' request.
+		*/
+		EPagingMediaPagingMedDrvBegin,
+
+		/**
+		Event generated by the Media Driver when the data read by a 'page in' request is written to the paging buffer.
+
+		Trace data format:
+		- 4 bytes containing a code describing the type of the media (one of TMediaDevice).
+		- 4 bytes containing the linear address in memory where this request object resides.
+		- 4 bytes containing the linear address of the buffer to where the data is to be written.
+		- 4 bytes containing the offset within the buffer to where the data will be written.
+		- 4 bytes containing the length of data to be written.
+
+		The context id (NThread*) in this trace is that of the media driver thread that services this 'page in' request.
+		*/
+		EPagingMediaMedDrvWriteBack,
+
+		/**
+		Event generated when a request to 'page in' data is put on hold because the Media Driver is performing some background
+		operation (not another request) and cannot service the request.
+
+		Trace data format:
+		- 4 bytes containing a code describing the type of the media (one of TMediaDevice).
+		- 4 bytes containing the linear address in memory where this request object resides.
+
+		The context id (NThread*) in this trace is that of the media driver thread that services this 'page in' request.
+		*/
+		EPagingMediaMedDrvOnHold,
+
+		/**
+		Event generated by the Media Driver when the data read by a 'page out' request is read from the paging buffer.
+
+		Trace data format:
+		- 4 bytes containing a code describing the type of the media (one of TMediaDevice).
+		- 4 bytes containing the linear address in memory where this request object resides.
+		- 4 bytes containing the linear address of the buffer to where the data is to be written.
+		- 4 bytes containing the offset within the buffer to where the data will be written.
+		- 4 bytes containing the length of data to be written.
+
+		The context id (NThread*) in this trace is that of the media driver thread that services this 'page in' request.
+		*/
+		EPagingMediaMedDrvRead,
+
+		/**
+		Event generated when a request to 'page out' data is received by the Local Media Subsystem.
+
+		Trace data format:
+		- 4 bytes containing the linear address of the buffer from where the data is to be read.
+		- 4 bytes containing the offset from start of the partition to where the data to be paged out resides.
+		- 4 bytes containing the number of bytes to be written to the media.
+		- 4 bytes containing the linear address in memory where this request object resides.
+
+		The context id (NThread*) in this trace is that of the thread that took the page fault that caused this event.
+		*/
+		EPagingMediaLocMedPageOutBegin,
+
+		/**
+		Event generated when a request to mark an area of the swap file as deleted is received by the Local Media Subsystem.
+
+		Trace data format:
+		- 4 bytes containing NULL
+		- 4 bytes containing the offset from start of the partition to where the data to be paged out resides.
+		- 4 bytes containing the number of bytes to be marked as deleted
+		- 4 bytes containing the linear address in memory where this request object resides.
+
+		The context id (NThread*) in this trace is that of the thread that took the page fault that caused this event.
+		*/
+		EPagingMediaLocMedDeleteNotifyBegin,
+
+		};
+
+	/**
+	Enumeration of sub-category values for trace category EKernelMemory.
+	@see EKernelMemory
+	*/
+	enum TKernelMemory
+		{
+		/**
+		Event recorded during startup and prime which details the initial amount of free RAM.
+
+		Trace data format:
+		- 4 bytes containing the number of bytes of RAM the system started with.
+		*/
+		EKernelMemoryInitialFree,
+
+		/**
+		Event recorded during prime which records the then-current amount of free RAM.
+
+		Trace data format:
+		- 4 bytes containing the number of bytes of free RAM.
+		*/
+		EKernelMemoryCurrentFree,
+
+		/**
+		Event recorded when a miscellaneous kernel allocation is made. These include:
+		- Memory for MMU page table contents
+		- Memory for MMU SPageTableInfos
+		- Memory for shadow pages
+
+		Trace data format:
+		- 4 bytes containing the size, in bytes, of the allocation.
+		*/
+		EKernelMemoryMiscAlloc,
+
+		/**
+		Event recorded when a miscellaneous kernel allocation (see EKernelMemoryMiscAlloc
+		above) is freed.
+
+		Trace data format:
+		- 4 bytes containing the size, in bytes, of the freed allocation.
+		*/
+		EKernelMemoryMiscFree,
+
+		/**
+		The amount of memory reserved for the minimum demand paging cache. The *actual* DP cache
+		also uses free memory, only this minimum amount is permanently reserved for that purpose.
+		This event is recorded during prime and when the amount changes.
+
+		Trace data format:
+		- 4 bytes containing the minimum size, in bytes, of the demand paging cache.
+		*/
+		EKernelMemoryDemandPagingCache,
+
+		/**
+		Physically contiguous memory allocated by device drivers via one of:
+			Epoc::AllocPhysicalRam()
+			Epoc::ZoneAllocPhysicalRam()
+			Epoc::ClaimPhysicalRam()
+			TRamDefragRequest::ClaimRamZone()
+
+		Trace data format:
+		- 4 bytes containing the size of the allocated memory.
+		- 4 bytes containing the physical base address of allocated memory.
+
+		NB: The prime function logs a EKernelMemoryDrvPhysAlloc record where the physical
+		address is -1 and should be ignored.
+		*/
+		EKernelMemoryDrvPhysAlloc,
+
+		/**
+		Memory freed by device drivers via calls to all versions of
+		Epoc::FreePhysicalRam().
+
+		Trace data format:
+		- 4 bytes containing the size of the freed memory.
+		- 4 bytes containing the physical base address of freed memory.
+		*/
+		EKernelMemoryDrvPhysFree,
+		};
+
+	/**
+	Enumeration of sub-category values for trace category EHeap.
+	@see EHeap
+	*/
+	enum THeap
+		{
+		/**
+		Event recorded during process startup which logs the point of heap creation.
+
+		Trace data format:
+		- 4 bytes containing the heap ID (The RAllocator*)
+		- 2 bytes containing the size of header overhead, per allocation (0xFFFF indicates a variable size)
+		- 2 bytes containing the size of footer overhead, per allocation (0xFFFF indicates a variable size)
+		*/
+		EHeapCreate,
+
+		/**
+		Event recorded during process startup which details the chunk being used as a heap.
+
+		Trace data format:
+		- 4 bytes containing the heap ID (The RAllocator*)
+		- 4 bytes containing the chunk ID (The RHandleBase* of the chunk)
+		*/
+		EHeapChunkCreate,
+
+		/**
+		Event recorded when RHeap::Alloc() is called.
+
+		Trace data format:
+		- 4 bytes containing the heap ID (The RAllocator*)
+		- 4 bytes containing the address of the allocation
+		- 4 bytes containing the size of the allocation
+		- 4 bytes containing the requested size of allocation
+		*/
+		EHeapAlloc,
+
+		/**
+		Event recorded when RHeap::ReAlloc() is called.
+
+		Trace data format:
+		- 4 bytes containing the heap ID (The RAllocator*)
+		- 4 bytes containing the address of the new allocation
+		- 4 bytes containing the size of the allocation
+		- 4 bytes containing the requested size of allocation
+		- 4 bytes containing the address of the old allocation
+		*/
+		EHeapReAlloc,
+
+		/**
+		Event recorded when RHeap::Free() is called.
+
+		Trace data format:
+		- 4 bytes containing the heap ID (The RAllocator*)
+		- 4 bytes containing the address of the free'd allocation
+		*/
+		EHeapFree,
+
+		/**
+		Event recorded when RHeap::Alloc() fails.
+
+		Trace data format:
+		- 4 bytes containing the heap ID (The RAllocator*)
+		- 4 bytes containing the requested size of allocation
+		*/
+		EHeapAllocFail,
+
+		/**
+		Event recorded when RHeap::ReAlloc() fails.
+
+		Trace data format:
+		- 4 bytes containing the heap ID (The RAllocator*)
+		- 4 bytes containing the address of the old allocation
+		- 4 bytes containing the requested size of allocation
+		 */
+		EHeapReAllocFail,
+
+		/**
+		Event recorded when heap memory corruption occurs.
+
+		Trace data format:
+		- 4 bytes containing the heap ID (The RAllocator*)
+		- 4 bytes containing address of the corrupted memory block
+		- 4 bytes containing length of the corrupted memory block
+		*/
+		EHeapCorruption,
+
+		/**
+		Trace to provide additional heap debugging information.
+
+		This trace (if present) is generated by Symbian OS memory debug tools, and
+		will follow one of the other THeap events (e.g. EHeapAlloc, EHeapFree, etc.).
+		It is intended to provide a stack trace for the preceding heap event,
+		to indicate how the previous heap event was generated.
+
+		On many systems exact stack frames are not available, and the values
+		will be extracted from the stack using heuristics, so there may be some
+		spurious values and some missing values.
+
+		Trace data format:
+		- 4 bytes containing the heap ID (the RAllocator*)
+		- sequence of 4-byte PC values representing the call stack, with the top-most
+		  (most recent call) first.
+		*/
+		EHeapCallStack,
+		};
+
+	/**
+	Enumeration of sub-category values for trace category EMetaTrace.
+	@see EMetaTrace
+	*/
+	enum TMetaTrace
+		{
+		/**
+		Information about timestamps used for tracing.
+
+		Trace data format:
+		- 4 bytes containing the period of the Timestamp value.
+		- 4 bytes containing the period of the Timestamp2 value.
+		- 4 bytes containing a set of bit flags with the following meaning:
+			- Bit 0, if true, indicates that Timestamp and Timestamp2 are two halves
+			  of a single 64bit timestamp value; Timestamp2 is the most significant part.
+			- All other bits are presently undefined.
+
+		The format of the timestamp period data is a period in seconds given using an exponent and mantissa
+		format, where the most significant 8 bits are the signed power-of-two value for the exponent, and
+		the least significant 24 bits are the integer value of the mantissa. The binary point is to the right
+		of the least significant mantissa bit, and the mantissa may not be in normalised form.
+
+		Example code for decoding the period:
+		@code
+			TInt32 period; // value from trace record
+			int exponent = (signed char)(period>>24);
+			int mantissa = period&0xffffff;
+			double periodInSeconds = (double)mantissa*pow(2,exponent);
+		@endcode
+		*/
+		EMetaTraceTimestampsInfo,
+
+		/**
+		Trace indicating the start of a test case being measured.
+
+		Trace data format:
+		- 4 bytes containing measurement specific value.
+		- 4 bytes containing a further measurement specific value.
+		- Remaining data is ASCII text providing human readable information.
+		*/
+		EMetaTraceMeasurementStart,
+
+		/**
+		Trace indicating the end of a test case being measured.
+
+		Trace data format:
+		- 4 bytes containing measurement specific identifying value.
+		- 4 bytes containing a further measurement specific identifying value.
+
+		The values contained in this trace must be identical to those in the corresponding
+		ETraceInfoMeasurementStart trace.
+		*/
+		EMetaTraceMeasurementEnd,
+
+		/**
+		Trace indicating a change in state of the primary filter.
+
+		Trace data format:
+		- 1 byte containing a trace category number.
+		- 1 byte containing the new filter state for the category. (0=off, 1=on).
+		- 2 byte padding. (Should be output as zeros.)
+		*/
+		EMetaTraceFilterChange,
+		};
+
+	/**
+	Enumeration of sub-category values for trace category ERamAllocator.
+	@see BTrace::ERamAllocator
+	*/
+	enum TRamAllocator
+		{
+		/**
+		The number of RAM zones.
+
+		Trace data format:
+		- 4 bytes containing the number of RAM zones.
+		*/
+		ERamAllocZoneCount,
+
+		/**
+		Information on the layout of a RAM zone.
+
+		Trace data format:
+		- 4 bytes containing the number of pages in the zone
+		- 4 bytes containing the physical base address of the zone
+		- 4 bytes containing the ID of the zone
+		- 1 bytes containing the preference of the zone
+		- 1 bytes containing the flags of the zone
+		- 2 bytes reserved for future use
+		*/
+		ERamAllocZoneConfig,
+
+		/**
+		This trace is sent for every contiguous block of RAM that was allocated
+		during the kernel boot process.
+
+		Trace data format:
+		- 4 bytes containing the number of contiguous pages allocated for the block
+		- 4 bytes containing the physical base address of the block
+		*/
+		ERamAllocBootAllocation,
+
+
+		/**
+		This trace marks the end of the boot allocations
+
+		Trace data format:
+		- no extra bytes are sent
+		*/
+		ERamAllocBootAllocationEnd,
+
+		/**
+		Event generated when a RAM zone's flags have been modified
+		This could occur when a RAM zone is blocked/unblocked from further
+		allocations from all/certain page types.
+
+		Trace data format:
+		- 4 bytes containing the ID of the zone
+		- 4 bytes containing the flags of the zone
+		*/
+		ERamAllocZoneFlagsModified,
+
+		/**
+		Event generated when DRamAllocator::ClaimPhysicalRam has successfully
+		claimed the specified RAM pages.
+
+		Trace data format:
+		- 4 bytes containing the number of contiguous pages
+		- 4 bytes containing the base address of the pages
+		*/
+		ERamAllocClaimRam,
+
+		/**
+		Event generated when DRamAllocator::MarkPageAllocated has successfully
+		marked the specified page as allocated.
+
+		Trace data format:
+		- 4 bytes containing the TZonePageType type of the page
+		- 4 bytes containing the address of the page
+		*/
+		ERamAllocMarkAllocated,
+
+		/**
+		Event generated when DRamAllocator::AllocContiguousRam successfully
+		allocates the requested number of pages.
+
+		Trace data format:
+		- 4 bytes containing the TZonePageType type of the pages
+		- 4 bytes containing the number of contiguous pages
+		- 4 bytes containing the base address of the pages
+		*/
+		ERamAllocContiguousRam,
+
+		/**
+		Event generated when DRamAllocator::FreePage has successfully freed
+		the specified RAM page.
+
+		Trace data format:
+		- 4 bytes containing the TZonePageType type of the page
+		- 4 bytes containing the address of the page
+		*/
+		ERamAllocFreePage,
+
+		/**
+		Event generated when DRamAllocator::FreePhysical successfully freed
+		the specified RAM page(s).
+
+		Trace data format:
+		- 4 bytes containing the number of contiguous pages
+		- 4 bytes containing the base address of the pages
+		*/
+		ERamAllocFreePhysical,
+
+		/**
+		Event generated for each contiguous block of pages when
+		DRamAllocator::AllocRamPages or DRamAllocator::ZoneAllocRamPages
+		are attempting to fulfil a request.
+
+		Trace data format:
+		- 4 bytes containing the TZonePageType type of the pages
+		- 4 bytes containing the number of contiguous pages
+		- 4 bytes containing the base address of the pages
+		*/
+		ERamAllocRamPages,
+
+		/**
+		Event generated for contiguous block of pages when
+		DRamAllocator::FreeRamPages is invoked.
+
+		Trace data format:
+		- 4 bytes containing the TZonePageType type of the pages
+		- 4 bytes containing the number of contiguous pages
+		- 4 bytes containing the base address of the pages
+		*/
+		ERamAllocFreePages,
+
+		/**
+		Event generated when DRamAllocator::AllocRamPages has successfully
+		allocated all the requested number of RAM pages.  If DRamAllocator::AllocRamPages
+		couldn't allocate all the requested pages then this event is not generated.
+
+		Trace data format:
+		- no extra bytes sent
+		*/
+		ERamAllocRamPagesEnd,
+
+		/**
+		Event generated when all ERamAllocFreePages events for a particular
+		call of DRamAllocator::FreeRamPages have been generated.
+
+		Trace data format:
+		- no extra bytes sent
+		*/
+		ERamAllocFreePagesEnd,
+
+		/**
+		Event generated when DRamAllocator::ChangePageType is has successfully
+		updated the type of the specified page.
+
+		Trace data format:
+		- 4 bytes containing the new TZonePageType type of the page
+		- 4 bytes containing the physical address of the page
+		*/
+		ERamAllocChangePageType,
+
+		/**
+		Event generated when DRamAllocator::ZoneAllocContiguousRam has
+		successfully allocated the required number of pages.
+
+		Trace data format:
+		- 4 bytes containing the TZonePageType type of the pages
+		- 4 bytes containing the number of contiguous pages
+		- 4 bytes containing the base address of the pages
+		*/
+		ERamAllocZoneContiguousRam,
+
+		/**
+		Event generated when DRamAllocator::ZoneAllocRamPages has successfully
+		allocated all the requested RAM pages.  If DRamAllocator::ZoneAllocRamPages
+		couldn't allocate all the requested pages then this event is not generated.
+
+		Trace data format:
+		- no extra bytes sent
+		*/
+		ERamAllocZoneRamPagesEnd,
+
+		/**
+		Event generated when Epoc::ClaimRamZone has successfully claimed
+		the requested zone.
+
+		Trace data format:
+		- 4 bytes containing the ID of the zone that has been claimed.
+		*/
+		ERamAllocClaimZone,
+		};
+
+	enum TFastMutex
+		{
+		/**
+		Event generated when a thread acquires a fast mutex, (waits on it).
+
+		Trace data format:
+		- 4 bytes containing the fast mutex id, (an NFastMutex*).
+		*/
+		EFastMutexWait,
+
+		/**
+		Event generated when a thread releases a fast mutex, (signals it).
+
+		Trace data format:
+		- 4 bytes containing the fast mutex id, (an NFastMutex*).
+		*/
+		EFastMutexSignal,
+
+		/**
+		Event generated when a fast mutex is 'flashed' (signalled then immediately
+		waited on again). E.g the operation performed by NKern::FlashSystem.
+
+		Trace data format:
+		- 4 bytes containing the fast mutex id, (an NFastMutex*).
+		*/
+		EFastMutexFlash,
+
+		/**
+		Trace to associate a fast mutex with a textual name.
+
+		Trace data format:
+		- 4 bytes containing the fast mutex id, (an NFastMutex*).
+		- 4 bytes containing unspecified data (should be output as zero).
+		- Remaining data is the ASCII name for the fast mutex.
+		*/
+		EFastMutexName,
+
+		/**
+		Event generated when a thread blocks on a fast mutex.
+
+		Trace data format:
+		- 4 bytes containing the fast mutex id, (an NFastMutex*).
+		*/
+		EFastMutexBlock,
+		};
+
+	/**
+	Enumeration of sub-category values for trace category EProfiling.
+	@see BTrace::EProfiling
+	*/
+	enum TProfiling
+		{
+		/**
+		CPU sample including program counter and thread context.
+
+		Trace data format:
+		- 4 bytes containing the program counter.
+		- 4 bytes containing thread context (an NThread*).
+		*/
+		ECpuFullSample = 0,
+
+		/**
+		Optimised CPU sample including program counter.
+		Doesn't include a thread context id as it hasn't changed since
+		the last sample.
+
+		Trace data format:
+		- 4 bytes containing the program counter.
+		*/
+		ECpuOptimisedSample,
+
+		/**
+		CPU sample from iDFC including program counter.
+
+		Trace data format:
+		- 4 bytes containing the program counter.
+		*/
+		ECpuIdfcSample,
+
+		/**
+		CPU sample from non-Symbian thread.
+
+  		Trace data format:
+		- no extra bytes are sent
+		*/
+		ECpuNonSymbianThreadSample
+
+		};
+
+	/**
+	Enumeration of sub-category values for trace category ERawEvent.
+	@see BTrace::ERawEvent
+	*/
+	enum TRawEventTrace
+		{
+
+		/**
+		For all the set Functions in the TRawEvent class.
+		Trace Data Format Varies depends which of the Overloaded Set Method from where its set .
+		Trace data format:
+		if there are only one 4 byte data
+
+		--The Following oder is folloed for data.
+		- 4 bytes containing the event type
+
+		if there are 2*4 byte data
+		- 4 bytes containing the event type
+		- 4 bytes containing the scan code
+
+		if there are  3*4 byte data
+		- 4 bytes containing the event type
+		--4 bytes containining the X co-ordinate
+		--4 bytes containining the Y co-ordinate
+
+		if there are  4*4 byte data
+		- 4 bytes containing the event type
+		--4 bytes containining the X co-ordinate
+		--4 bytes containining the Y co-ordinate
+		--4 bytes containining the Z co-ordinate
+
+		if there are  5*4 byte data
+		- 4 bytes containing the event type
+		--4 bytes containining the X co-ordinate
+		--4 bytes containining the Y co-ordinate
+		--4 bytes containining the Z co-ordinate
+		--4 bytes containining the PointerNumber
+
+  		if there are  7*4 byte data
+		- 4 bytes containing the event type
+		--4 bytes containining the X co-ordinate
+		--4 bytes containining the Y co-ordinate
+		--4 bytes containining the Z co-ordinate
+		--4 bytes containining the Phi polar coordinate.
+		--4 bytes containining the Theta polar coordinate.
+		--4 bytes containining the rotation angle(alpha)
+		*/
+
+		ESetEvent = 1,
+
+		/**
+		For  user side SetTip Events
+		Trace data format:
+		- 4 bytes to state containing Tip Info.
+		*/
+		ESetTipEvent,
+
+		/**
+		For  SetTilt Events
+		Trace data format:
+		- 4 bytes containing the event type
+		--4 bytes containining the Phi polar coordinate.
+		--4 bytes containining the Theta polar coordinate.
+		*/
+		ESetTiltEvent,
+
+		/**
+		For  SetRotation Events
+		Trace data format:
+		- 4 bytes containing the event type
+		--4 bytes containining the rotation angle (alpha)
+		*/
+		ESetRotationtEvent,
+
+		/**
+		For  SetPointerNumber Events
+		Trace data format:
+		- 4 bytes containing the Pointer Number
+		*/
+		ESetPointerNumberEvent,
+
+		/**
+		For  user side addevents (User::AddEvent)
+		Trace data format:
+		- 4 bytes containing the event type
+		*/
+		EUserAddEvent,
+
+		/**
+		For  kernal side addevents (Kern::AddEvent)
+		Trace data format:
+		- 4 bytes containing the event type
+		*/
+		EKernelAddEvent
+		};
+
+	enum TSymbianKernelSync
+		{
+		/**
+		A semaphore (DSemaphore) has been created.
+
+		Trace data format:
+		- 4 bytes containing trace id (a DSemaphore*) for this semaphore.
+		- 4 bytes containing the owning DThread* or DProcess*
+		- Remaining data is the ASCII name of the semaphore.
+		*/
+		ESemaphoreCreate=0x00,
+
+		/**
+		A semaphore (DSemaphore) has been destroyed.
+
+		Trace data format:
+		- 4 bytes containing trace id (a DSemaphore*) for this semaphore.
+		*/
+		ESemaphoreDestroy=0x01,
+
+		/**
+		A semaphore (DSemaphore) has been acquired.
+
+		Trace data format:
+		- 4 bytes containing trace id (a DSemaphore*) for this semaphore.
+		*/
+		ESemaphoreAcquire=0x02,
+
+		/**
+		A semaphore (DSemaphore) has been released.
+
+		Trace data format:
+		- 4 bytes containing trace id (a DSemaphore*) for this semaphore.
+		*/
+		ESemaphoreRelease=0x03,
+
+		/**
+		A thread has blocked on a semaphore (DSemaphore)
+
+		Trace data format:
+		- 4 bytes containing trace id (a DSemaphore*) for this semaphore.
+		*/
+		ESemaphoreBlock=0x04,
+
+
+		/**
+		A mutex (DMutex) has been created.
+
+		Trace data format:
+		- 4 bytes containing trace id (a DMutex*) for this mutex.
+		- 4 bytes containing the owning DThread* or DProcess*
+		- Remaining data is the ASCII name of the mutex.
+		*/
+		EMutexCreate=0x10,
+
+		/**
+		A mutex (DMutex) has been destroyed.
+
+		Trace data format:
+		- 4 bytes containing trace id (a DMutex*) for this mutex.
+		*/
+		EMutexDestroy=0x11,
+
+		/**
+		A mutex (DMutex) has been acquired.
+
+		Trace data format:
+		- 4 bytes containing trace id (a DMutex*) for this mutex.
+		*/
+		EMutexAcquire=0x12,
+
+		/**
+		A mutex (DMutex) has been released.
+
+		Trace data format:
+		- 4 bytes containing trace id (a DMutex*) for this mutex.
+		*/
+		EMutexRelease=0x13,
+
+		/**
+		A thread has blocked on a mutex (DMutex)
+
+		Trace data format:
+		- 4 bytes containing trace id (a DMutex*) for this mutex.
+		*/
+		EMutexBlock=0x14,
+
+
+		/**
+		A condition variable (DCondVar) has been created.
+
+		Trace data format:
+		- 4 bytes containing trace id (a DCondVar*) for this condition variable.
+		- 4 bytes containing the owning DThread* or DProcess*
+		- Remaining data is the ASCII name of the condition variable.
+		*/
+		ECondVarCreate=0x20,
+
+		/**
+		A condition variable (DCondVar) has been destroyed.
+
+		Trace data format:
+		- 4 bytes containing trace id (a DCondVar*) for this condition variable.
+		*/
+		ECondVarDestroy=0x21,
+
+		/**
+		A thread has blocked on a condition variable (DCondVar)
+
+		Trace data format:
+		- 4 bytes containing trace id (a DCondVar*) for this condition variable.
+		- 4 bytes containing trace id (DMutex*) for the associated mutex.
+		*/
+		ECondVarBlock=0x22,
+
+		/**
+		A thread has been released from a condition variable (DCondVar) wait
+
+		Trace data format:
+		- 4 bytes containing trace id (a DCondVar*) for this condition variable.
+		- 4 bytes containing trace id (DMutex*) for the associated mutex.
+		*/
+		ECondVarWakeUp=0x23,
+
+		/**
+		A condition variable (DCondVar) has been signalled
+
+		Trace data format:
+		- 4 bytes containing trace id (a DCondVar*) for this condition variable.
+		- 4 bytes containing trace id (DMutex*) for the associated mutex.
+		*/
+		ECondVarSignal=0x24,
+
+		/**
+		A condition variable (DCondVar) has been signalled in broadcast mode.
+
+		Trace data format:
+		- 4 bytes containing trace id (a DCondVar*) for this condition variable.
+		- 4 bytes containing trace id (DMutex*) for the associated mutex.
+		*/
+		ECondVarBroadcast=0x25,
+
+		};
+
+	enum TFlexibleMemModel
+		{
+		/**
+		A memory object has been created.
+
+		Trace data format:
+		- 4 bytes containing the memory object id (DMemoryObject*).
+		- 4 bytes containing the size of the memory in pages.
+		*/
+		EMemoryObjectCreate,
+
+		/**
+		A memory object has been destroyed.
+
+		Trace data format:
+		- 4 bytes containing the memory object id (DMemoryObject*).
+		*/
+		EMemoryObjectDestroy,
+
+		/**
+		A memory mapping has been created.
+
+		Trace data format:
+		- 4 bytes containing the memory mapping id (DMemoryMapping*).
+		- 4 bytes containing the memory object id (DMemoryObject*).
+		- 4 bytes containing the offset of the mapping into the memory object, in pages
+		- 4 bytes containing the size of the mapping in pages
+		- 2 bytes containing the ASID
+		- 2 spare bytes, currently zero
+		- 4 bytes containing the virtual address the mapping
+		*/
+		EMemoryMappingCreate,
+
+		/**
+		A memory mapping has been destroyed.
+
+		Trace data format:
+		- 4 bytes containing the memory mapping id (DMemoryMapping*).
+		*/
+		EMemoryMappingDestroy,
+
+		// The following traces associate memory model objects with the kernel objects that use them
+
+		/**
+	    A memory object is being used for the contents of a chunk.
+
+		Trace data format:
+		- 4 bytes containing the memory object id (a DMemoryObject*).
+		- 4 bytes containing the chunk id (a DChunk*)
+		*/
+		EMemoryObjectIsChunk,
+
+		/**
+	    A memory object is being used for the contents of a code segment.
+
+		Trace data format:
+		- 4 bytes containing the memory object id (a DMemoryObject*).
+		- 4 bytes containing the code segment id (a DCodeSeg*)
+		*/
+		EMemoryObjectIsCodeSeg,
+
+		/**
+	    A memory object is being used for process static data.
+
+		Trace data format:
+		- 4 bytes containing the memory object id (a DMemoryObject*).
+		- 4 bytes containing the process id (a DProcess*)
+		*/
+		EMemoryObjectIsProcessStaticData,
+
+		/**
+	    A memory object is being used for DLL static data.
+
+		Trace data format:
+		- 4 bytes containing the memory object id (a DMemoryObject*).
+		- 4 bytes containing the code segment id (a DCodeSeg*)
+		- 4 bytes containing the process id (a DProcess*)
+		*/
+		EMemoryObjectIsDllStaticData,
+
+		/**
+	    A memory object is being used for a thread's supervisor stack.
+
+		Trace data format:
+		- 4 bytes containing the memory object id (a DMemoryObject*).
+		- 4 bytes containing the thread id (a DThread*)
+		*/
+		EMemoryObjectIsSupervisorStack,
+
+		/**
+	    A memory object is being used for a thread's user stack.
+
+		Trace data format:
+		- 4 bytes containing the memory object id (a DMemoryObject*).
+		- 4 bytes containing the thread id (a DThread*)
+		*/
+		EMemoryObjectIsUserStack,
+
+		/**
+		Identifies the Address Space ID (ASID) used for a process.
+
+		Trace data format:
+		- 4 bytes containing the process id (a DProcess*)
+		- 2 bytes containing the ASID
+		- 2 spare bytes, currently zero
+		*/
+		EAddressSpaceId
+		};
+
+    /**
+	Enumeration of sub-category values for trace category EIic.
+	@see EIic
+    @prototype 9.6
+	*/
+	enum TIic
+		{
+		/**
+		Trace output for the invocation by the PSL of registering an array of pointers to channels with the IIC bus controller.
+
+		Trace data format:
+		- 4 bytes containing the address of the array
+		- 4 bytes containing the number of channels in the array
+		*/
+		ERegisterChansStartPsl = 0,
+
+		/**
+		Trace output for the start of the PIL registering an array of pointers to channels with the IIC bus controller.
+
+		Trace data format:
+		- 4 bytes containing the address of the array
+		- 4 bytes containing the number of channels in the array
+		- 4 bytes containing the number of channels registered with the controller prior to this point
+		*/
+		ERegisterChansStartPil = 1,
+
+		/**
+		Trace output for the end of the PIL registering an array of pointers to channels with the IIC bus controller.
+
+		Trace data format:
+		- 4 bytes containing the address of the array
+		- 4 bytes containing the number of channels now registered with the controller
+		*/
+		ERegisterChansEndPil = 2,
+
+		/**
+		Trace output for the end of the PSL registering an array of pointers to channels with the IIC bus controller.
+
+		Trace data format:
+		- 4 bytes containing the address of the array
+		- 4 bytes containing the number of channels in the array
+		- 4 bytes containing the error code returned by the IIC bus controller
+		*/
+		ERegisterChansEndPsl = 3,
+
+		/**
+		Trace output for the start of the PSL de-registering a channel with the IIC bus controller.
+
+		Trace data format:
+		- 4 bytes containing the address of the channel
+		*/
+		EDeRegisterChanStartPsl = 4,
+
+		/**
+		Trace output for the start of the PIL de-registering a channel with the IIC bus controller.
+
+		Trace data format:
+		- 4 bytes containing the address of the channel
+		- 4 bytes containing the number of channels registered with the controller prior to this point
+		*/
+		EDeRegisterChanStartPil = 5,
+
+		/**
+		Trace output for the end of the PSL de-registering a channel with the IIC bus controller.
+
+		Trace data format:
+		- 4 bytes containing the address of the channel
+		- 4 bytes containing the number of channels now registered with the controller
+		*/
+		EDeRegisterChanEndPil = 6,
+
+		/**
+		Trace output for the end of the PSL de-registering a channel with the IIC bus controller.
+
+		Trace data format:
+		- 4 bytes containing the address of the channel
+		- 4 bytes containing the error code returned by the IIC bus controller
+		*/
+		EDeRegisterChanEndPsl = 7,
+
+		/**
+		Trace output for the start of a synchronous queue transaction request in the PIL.
+
+		Trace data format:
+		- 4 bytes containing the bus realisation variability token
+		- 4 bytes containing the pointer to the transaction object
+		*/
+		EMQTransSyncStartPil = 8,
+
+		/**
+		Trace output for the end of a synchronous queue transaction request in the PIL.
+
+		Trace data format:
+		- 4 bytes containing the bus realisation variability token
+		- 4 bytes containing the error code returned by the controller
+		*/
+		EMQTransSyncEndPil = 9,
+
+		/**
+		Trace output for the start of a synchronous queue transaction request in the PIL.
+
+		Trace data format:
+		- 4 bytes containing the bus realisation variability token
+		- 4 bytes containing the pointer to the transaction object
+		- 4 bytes containing the pointer to the callback object
+		*/
+		EMQTransAsyncStartPil = 10,
+
+		/**
+		Trace output for the end of a synchronous queue transaction request in the PIL.
+
+		Trace data format:
+		- 4 bytes containing the bus realisation variability token
+		- 4 bytes containing the error code returned by the controller
+		*/
+		EMQTransAsyncEndPil = 11,
+
+		/**
+		Trace output for the start of cancelling an asynchronous queue transaction request in the PIL.
+
+		Trace data format:
+		- 4 bytes containing the bus realisation variability token
+		- 4 bytes containing the pointer to the transaction object
+		*/
+		EMCancelTransStartPil = 12,
+
+		/**
+		Trace output for the end of cancelling an asynchronous queue transaction request in the PIL.
+
+		Trace data format:
+		- 4 bytes containing the pointer to the transaction object
+		- 4 bytes containing the error code returned by the controller
+		*/
+		EMCancelTransEndPil = 13,
+
+		/**
+		Trace output for the start of processing a transaction request in the PIL.
+
+		Trace data format:
+		- 4 bytes containing the address of the channel
+		- 4 bytes containing the pointer to the transaction object
+		*/
+		EMProcessTransStartPil = 14,
+
+		/**
+		Trace output for the start of processing a transaction request in the PSL.
+
+		Trace data format:
+		- 4 bytes containing the pointer to the transaction object
+		*/
+		EMProcessTransStartPsl = 15,
+
+		/**
+		Trace output for the end of processing a transaction request in the PSL.
+
+		Trace data format:
+		- 4 bytes containing the result code
+		*/
+		EMProcessTransEndPsl = 16,
+
+		/**
+		Trace output for the end of processing a transaction request in the PIL.
+
+		Trace data format:
+		- 4 bytes containing the address of the channel
+		- 4 bytes containing the pointer to the transaction object
+		- 4 bytes containing the result code
+		- 4 bytes containing the pointer to the client callback object
+		*/
+		EMProcessTransEndPil = 17,
+
+		/**
+		Trace output for the start of synchronously capturing a Slave channel in the PIL.
+
+		Trace data format:
+		- 4 bytes containing the bus realisation variability
+		- 4 bytes containing a pointer to device specific configuration option applicable to all transactions
+		*/
+		ESCaptChanSyncStartPil = 18,
+
+		/**
+		Trace output for the start of synchronously capturing a Slave channel in the PSL.
+
+		Trace data format:
+		- 4 bytes containing the address of the channel
+		- 4 bytes containing a pointer to device specific configuration option applicable to all transactions
+		*/
+		ESCaptChanSyncStartPsl = 19,
+
+		/**
+		Trace output for the end of synchronously capturing a Slave channel in the PSL.
+
+		Trace data format:
+		- 4 bytes containing the address of the channel
+		- 4 bytes containing the result code
+		*/
+		ESCaptChanSyncEndPsl = 20,
+
+		/**
+		Trace output for the end of synchronously capturing a Slave channel in the PIL.
+
+		Trace data format:
+		- 4 bytes containing the bus realisation variability
+		- 4 bytes containing the platform-specific cookie that uniquely identifies the channel
+		- 4 bytes containing the result code
+		*/
+		ESCaptChanSyncEndPil = 21,
+
+		/**
+		Trace output for the start of asynchronously capturing a Slave channel in the PIL.
+
+		Trace data format:
+		- 4 bytes containing the bus realisation variability
+		- 4 bytes containing a pointer to device specific configuration option applicable to all transactions
+		- 4 bytes containing the pointer to the client callback object
+		*/
+		ESCaptChanASyncStartPil = 22,
+
+		/**
+		Trace output for the start of asynchronously capturing a Slave channel in the PSL.
+
+		Trace data format:
+		- 4 bytes containing a pointer to the channel object
+		- 4 bytes containing a pointer to device specific configuration option applicable to all transactions
+		*/
+		ESCaptChanASyncStartPsl = 23,
+
+		/**
+		Trace output for the end of asynchronously capturing a Slave channel in the PSL.
+
+		Trace data format:
+		- 4 bytes containing a pointer to the channel object
+		- 4 bytes containing the result code
+		*/
+		ESCaptChanASyncEndPsl = 24,
+
+		/**
+		Trace output for the end of asynchronously capturing a Slave channel in the PIL.
+
+		Trace data format:
+		- 4 bytes containing a pointer to the channel object
+		- 4 bytes containing the result code
+		*/
+		ESCaptChanASyncEndPil = 25,
+
+		/**
+		Trace output for the start of releasing a Slave channel in the PIL.
+
+		Trace data format:
+		- 4 bytes containing the channel identifier cookie
+		*/
+		ESRelChanStartPil = 26,
+
+		/**
+		Trace output for the start of releasing a Slave channel in the PSL.
+
+		Trace data format:
+		- 4 bytes containing a pointer to the channel object
+		*/
+		ESRelChanStartPsl = 27,
+
+		/**
+		Trace output for the end of releasing a Slave channel in the PSL.
+
+		Trace data format:
+		- 4 bytes containing a pointer to the channel object
+		- 4 bytes containing the result code
+		*/
+		ESRelChanEndPsl = 28,
+
+		/**
+		Trace output for the end of releasing a Slave channel in the PIL.
+
+		Trace data format:
+		- 4 bytes containing the channel identifier cookie
+		- 4 bytes containing the result code
+		*/
+		ESRelChanEndPil = 29,
+
+		/**
+		Trace output for the start of registering an Rx buffer for a Slave channel in the PIL.
+
+		Trace data format:
+		- 4 bytes containing a pointer to the receive buffer
+		- 4 bytes containing the number of buffer bytes used to store a word.
+		- 4 bytes containing the number of words expected to be received.
+		- 4 bytes containing offset from the start of the buffer where to store the received data.
+		*/
+		ESRegRxBufStartPil = 30,
+
+		/**
+		Trace output for the start of registering an Rx buffer for a Slave channel in the PSL.
+
+		Trace data format:
+		- 4 bytes containing a pointer to the channel object
+		- 4 bytes containing a pointer to the receive buffer
+		- 4 bytes containing the number of buffer bytes used to store a word.
+		- 4 bytes containing the number of words expected to be received.
+		- 4 bytes containing offset from the start of the buffer where to store the received data.
+		*/
+		ESRegRxBufStartPsl = 31,
+
+		/**
+		Trace output for the end of registering an Rx buffer for a Slave channel in the PSL.
+
+		Trace data format:
+		- 4 bytes containing a pointer to the channel object
+		- 4 bytes containing the result code
+		*/
+		ESRegRxBufEndPsl = 32,
+
+		/**
+		Trace output for the end of registering an Rx buffer for a Slave channel in the PIL.
+
+		Trace data format:
+		- 4 bytes containing the result code
+		*/
+		ESRegRxBufEndPil = 33,
+
+		/**
+		Trace output for the start of registering an Tx buffer for a Slave channel in the PIL.
+
+		Trace data format:
+		- 4 bytes containing a pointer to the transmit buffer
+		- 4 bytes containing the number of buffer bytes used to store a word.
+		- 4 bytes containing the number of words expected to be transmitted.
+		- 4 bytes containing offset from the start of the buffer from where to transmit data.
+		*/
+		ESRegTxBufStartPil = 34,
+
+		/**
+		Trace output for the start of registering an Tx buffer for a Slave channel in the PSL.
+
+		Trace data format:
+		- 4 bytes containing a pointer to the channel object
+		- 4 bytes containing a pointer to the transmit buffer
+		- 4 bytes containing the number of buffer bytes used to store a word.
+		- 4 bytes containing the number of words expected to be transmitted.
+		- 4 bytes containing offset from the start of the buffer from where to transmit data.
+		*/
+		ESRegTxBufStartPsl = 35,
+
+		/**
+		Trace output for the end of registering an Tx buffer for a Slave channel in the PSL.
+
+		Trace data format:
+		- 4 bytes containing a pointer to the channel object
+		- 4 bytes containing the result code
+		*/
+		ESRegTxBufEndPsl = 36,
+
+		/**
+		Trace output for the start of setting a notification for a Slave channel in the PIL.
+
+		Trace data format:
+		- 4 bytes containing the result code
+		*/
+		ESRegTxBufEndPil = 37,
+
+		/**
+		Trace output for the start of setting a notification for a Slave channel in the PIL.
+
+		Trace data format:
+		- 4 bytes containing the channel identifier cookie
+		- 4 bytes containing the trigger value
+		*/
+		ESNotifTrigStartPil = 38,
+
+		/**
+		Trace output for the start of setting a notification for a Slave channel in the PSL.
+		
+		Trace data format:
+		- 4 bytes containing the trigger value
+		*/
+		ESNotifTrigStartPsl = 39,
+
+		/**
+		Trace output for the end of setting a notification for a Slave channel in the PSL.
+		
+		Trace data format:
+		- 4 bytes containing the result code
+		*/
+		ESNotifTrigEndPsl = 40,
+
+		/**
+		Trace output for the end of setting a notification for a Slave channel in the PIL.
+
+		Trace data format:
+		- 4 bytes containing the channel identifier cookie
+		- 4 bytes containing the result code
+		*/
+		ESNotifTrigEndPil = 41,
+
+		/**
+		Trace output for the start of a StaticExtension operaton for a MasterSlave channel in the PIL.
+
+		Trace data format:
+		- 4 bytes containing a token containing the bus realisation variability or the channel identifier cookie for this client.
+		- 4 bytes containing a function identifier
+		- 4 bytes containing an argument to be passed to the function
+		- 4 bytes containing an argument to be passed to the function
+		*/
+		EMSStatExtStartPil = 42,
+
+		/**
+		Trace output for the end of a StaticExtension operation for a MasterSlave channel in the PIL.
+
+		Trace data format:
+		- 4 bytes containing a token containing the bus realisation variability or the channel identifier cookie for this client.
+		- 4 bytes containing a function identifier
+		- 4 bytes containing the result code
+		*/
+		EMSStatExtEndPil = 43,
+
+		/**
+		Trace output for the start of a StaticExtension operation for a Master channel in the PIL.
+
+		Trace data format:
+		- 4 bytes containing a token containing the bus realisation variability or the channel identifier cookie for this client.
+		- 4 bytes containing a function identifier
+		- 4 bytes containing an argument to be passed to the function
+		- 4 bytes containing an argument to be passed to the function
+		*/
+		EMStatExtStartPil = 44,
+
+		/**
+		Trace output for the start of a StaticExtension operation for a Master channel in the PSL.
+
+		Trace data format:
+		- 4 bytes containing a pointer to the channel object
+		- 4 bytes containing a function identifier
+		- 4 bytes containing an argument to be passed to the function
+		- 4 bytes containing an argument to be passed to the function
+		*/
+		EMStatExtStartPsl = 45,
+
+		/**
+		Trace output for the end of a StaticExtension operation for a Master channel in the PSL.
+
+		Trace data format:
+		- 4 bytes containing a pointer to the channel object
+		- 4 bytes containing a function identifier
+		- 4 bytes containing the result code
+		*/
+		EMStatExtEndPsl = 46,
+
+		/**
+		Trace output for the end of a StaticExtension operation for a Master channel in the PIL.
+
+		Trace data format:
+		- 4 bytes containing a token containing the bus realisation variability or the channel identifier cookie for this client.
+		- 4 bytes containing a function identifier
+		- 4 bytes containing the result code
+		*/
+		EMStatExtEndPil = 47,
+
+		/**
+		Trace output for the start of a StaticExtension operation for a Slave channel in the PIL.
+
+		Trace data format:
+		- 4 bytes containing a token containing the bus realisation variability or the channel identifier cookie for this client.
+		- 4 bytes containing a function identifier
+		- 4 bytes containing an argument to be passed to the function
+		- 4 bytes containing an argument to be passed to the function
+		*/
+		ESStatExtStartPil = 48,
+
+		/**
+		Trace output for the start of a StaticExtension operation for a Slave channel in the PSL.
+
+		Trace data format:
+		- 4 bytes containing a pointer to the channel object
+		- 4 bytes containing a function identifier
+		- 4 bytes containing an argument to be passed to the function
+		- 4 bytes containing an argument to be passed to the function
+		*/
+		ESStatExtStartPsl = 49,
+
+		/**
+		Trace output for the end of a StaticExtension operation for a Slave channel in the PSL.
+
+		Trace data format:
+		- 4 bytes containing a pointer to the channel object
+		- 4 bytes containing a function identifier
+		- 4 bytes containing the result code
+		*/
+		ESStatExtEndPsl = 50,
+		/**
+		Trace output for the end of a StaticExtension operation for a Slave channel in the PIL.
+
+		Trace data format:
+		- 4 bytes containing a token containing the bus realisation variability or the channel identifier cookie for this client.
+		- 4 bytes containing a function identifier
+		- 4 bytes containing the result code
+		*/
+		ESStatExtEndPil = 51
+		};
+
+	/**
+	Calculate the address of the next trace record.
+	@param aCurrentRecord A pointer to a trace record.
+	@return The address of the trace record which follows aCurrentRecord.
+	*/
+	inline static TUint8* NextRecord(TAny* aCurrentRecord);
+
+#ifdef __KERNEL_MODE__
+
+	/**
+	Create initial trace output required for the specified trace category.
+	E.g. For the EThreadIdentification category, this will cause traces which identify
+	all threads already in existence at this point.
+
+	@aCategory The trace category, or -1 to indicate all trace categories.
+
+	@publishedPartner
+	@released
+	*/
+	IMPORT_C static void Prime(TInt aCategory=-1);
+
+	/**
+	Prototype for function which is called to output trace records.
+	I.e. as set by SetHandler().
+
+	The handler function should output all values which are appropriate for the
+	trace as specified in aHeader.
+
+	@param aHeader	The 4 bytes for the trace header.
+	@param aHeader2	The second header word.
+					(If EHeader2Present is set in the header flags.)
+	@param aContext	The context id.
+					(If EContextIdPresent is set in the header flags.)
+	@param a1		The first four bytes of trace data.
+					(Only if the header size indicates that this is present.)
+	@param a2		The second four bytes of trace data.
+					(Only if the header size indicates that this is present.)
+	@param a3		This is either the third four bytes of trace data, if
+					the header size indicates there is between 9 and 12 bytes
+					of trace data. If more than 12 of trace data are indicated, then
+					a3 contains a pointer to the remaining trace data, bytes 8 trough to N.
+					This trace data is word aligned.
+	@param aExtra	The 'extra' value.
+					(If EExtraPresent is set in the header flags.)
+	@param aPc		The Program Counter value.
+					(If EPcPresent is set in the header flags.)
+
+	@return			True, if the trace handler is enabled and outputting trace.
+					False otherwise.
+
+	Here is an example implementation of a trace handler:
+
+	@code
+	TInt size = (aHeader>>BTrace::ESizeIndex*8)&0xff;
+	TInt flags = (aHeader>>BTrace::EFlagsIndex*8)&0xff;
+	Output(aHeader), size -= 4;
+	if(flags&BTrace::EHeader2Present)
+		Output(aHeader2), size -= 4;
+	if(flags&BTrace::EContextIdPresent)
+		Output(aContext), size -= 4;
+	if(flags&BTrace::EPcPresent)
+		Output(aPc), size -= 4;
+	if(flags&BTrace::EExtraPresent)
+		Output(aExtra), size -= 4;
+	if(size<=0)
+		return ETrue;
+	Output(a1), size -= 4;
+	if(size<=0)
+		return ETrue;
+	Output(a2), size -= 4;
+	if(size<=0)
+		return ETrue;
+	if(size<=4)
+		Output(a3);
+	else
+		{
+		TUint32* data = (TUint32*)a3;
+		TUint32* end = (TUint32*)(a3+size);
+		do Output(*data++); while(data<end);
+		}
+	return ETrue;
+	@endcode
+
+	The trace handler may add timestamp values to the trace it outputs, in which case
+	it should modify the flags and size in aHeader accordingly, before outputting this value.
+	The Timestamp and/or Timestamp2 should be output, in that order, between the Header2 and
+	Context ID values.
+
+	IMPORTANT NOTES.
+	-	The handler must not make use of any kernel APIs, apart from TDfc::RawAdd(). (This is
+		because kernel APIs may contain tracing and this would result in deadlock of the system.)
+	-	The trace handler must not access or modify arguments which are not indicated as
+		being present by their flag in aHeader or aHeader2.
+		In particular, on ARM CPUs, the values a2, a3, aExtra and aPc are stored on the stack
+		and the caller of this function may not have created these arguments before calling the
+		trace handler.
+	-	The handler may be called in any context and in a re-entrant manner. Implementations must
+		be designed to cope with this.
+	-	The interrupt disable status must not be reduced by the trace handler during its operation.
+		E.g. if IRQs are disabled on entry, the handler must not cause them to become enabled
+		at any point.
+
+	@pre Call in any context.
+	@post Interrupt enable status unchanged.
+
+	@publishedPartner
+	@released
+	*/
+	typedef TBool(*THandler)(TUint32 aHeader,TUint32 aHeader2,const TUint32 aContext,const TUint32 a1,const TUint32 a2,const TUint32 a3,const TUint32 aExtra,const TUint32 aPc);
+
+
+	/**
+	Set the function which will receive all trace records.
+	@return The handler function which existed before this function was called.
+	@publishedPartner
+	@released
+	*/
+	IMPORT_C static BTrace::THandler SetHandler(BTrace::THandler aHandler);
+
+
+	/**
+	Set the trace filter bit for the specified category.
+
+	@param aCategory A category value from enum BTrace::TCategory.
+	@param aValue The new filter value for the category.
+				  1 means traces of this category are output, 0 means they are suppressed.
+				  Other values must not be used.
+
+	@return The previous value of the filter for the category, 0 or 1.
+			Or KErrNotSupported if this category is not supported by this build of the kernel.
+	@publishedPartner
+	@released
+	*/
+	IMPORT_C static TInt SetFilter(TUint aCategory, TBool aValue);
+
+
+	/**
+	Modify the secondary trace filter to add or remove the specified UID.
+
+	This method can not be used to disable a UID key if SetFilter2(TInt aGlobalFilter)
+	has been used to set the filter to pass all traces. Such attempts result in a return
+	code of KErrNotSupported.
+
+	@param aUid   The UID to filter.
+	@param aValue The new filter value for the UID.
+				  1 means traces with this UID are output, 0 means they are suppressed.
+				  Other values must not be used.
+
+	@return The previous value of the filter for the UID, 0 or 1, if operation is successful.
+			Otherwise, a negative number representing a system wide error code.
+			(E.g. KErrNoMemory.)
+
+	@pre Call in a thread context.
+
+	@publishedPartner
+	@released
+	*/
+	IMPORT_C static TInt SetFilter2(TUint32 aUid, TBool aValue);
+
+
+	/**
+	Set the secondary trace filter to include only the specified UIDs.
+
+	@param aUids    Pointer to array of UIDs.
+	@param aNumUids Number of UID values pointer to by \a aUid.
+
+	@return KErrNone on success.
+			Otherwise, a negative number representing a system wide error code.
+			(E.g. KErrNoMemory.)
+
+	@pre Call in a thread context.
+
+	@publishedPartner
+	@released
+	*/
+	IMPORT_C static TInt SetFilter2(const TUint32* aUids, TInt aNumUids);
+
+
+	/**
+	Set the secondary trace filter to pass or reject every trace.
+
+	@param aGlobalFilter If 0, the secondary filter will reject
+						 all traces; if 1, all traces are passed
+						 by the filter.
+						 Other values have no effect.
+
+	@return The previous value of the global filter, or -1 if the global filter
+			was not previously set.
+
+	@pre Call in a thread context.
+
+	@publishedPartner
+	@released
+	*/
+	IMPORT_C static TInt SetFilter2(TInt aGlobalFilter);
+
+
+	/**
+	Get the contents of the secondary trace filter.
+
+	@param[out] aUids   Pointer to array of UIDs contained in the secondary filter.
+						Ownership of this array is passed to the caller of this
+						function, which is then responsible for deleting it.
+						If filter is empty, \a aUid equals zero.
+	@param[out] aGlobalFilter	Set to 1 if the secondary filter passes all traces.
+								Set to 0 if the secondary filter rejects all traces.
+								Set to -1 if the secondary filter operates by UIDs contained in traces.
+
+	@return Number of UIDs in returned array, if operation is successful.
+			Otherwise, a negative number representing a system wide error code.
+
+
+	@pre Call in a thread context.
+    @pre Calling thread must be in a critical section.
+
+	@publishedPartner
+	@released
+	*/
+	IMPORT_C static TInt Filter2(TUint32*& aUids, TInt& aGlobalFilter);
+
+
+	/**
+	Get the trace filter bit for the specified category.
+
+	@param aCategory A category value from enum BTrace::TCategory,
+	@return The value of the filter for the category, 0 or 1.
+			Or KErrNotSupported if this category is not supported by this build of the kernel.
+
+	@publishedPartner
+	@released
+	*/
+	inline static TInt Filter(TUint aCategory);
+
+	/**
+	Get a pointer to the spinlock used to serialise BTrace output on SMP systems.
+
+	@internalComponent
+	*/
+	IMPORT_C static TSpinLock* LockPtr();
+
+
+	/**
+	Enumeration of control functions which can be implemented by the BTrace handler.
+
+	These values are passed to #Control to indicate the requested operation and are
+	passed unaltered to the BTrace implementation's control function as specified by
+	SetHandlers().
+
+	@see #Control
+	@see #TControlFunction
+	*/
+	enum TControl
+		{
+		/**
+		Called to indicate that the system has crashed. Typical response to this call
+		is to disable tracing so that debug monitor activity doesn't generate any additional
+		trace.
+
+		As this function is called after the system is crashed its implementation must not
+		make use of any APIs which require a running system, it must also not re-enable
+		interrupts.
+
+		ControlFunction argument meaning: None, ignore.
+
+		ControlFunction returns nothing, ignore.
+		*/
+		ECtrlSystemCrashed,
+
+		/**
+		Called by crash monitor to request first block of data from any memory resident
+		trace buffer. A size of zero should be returned if the buffer is empty.
+
+		This should be a non-destructive operation if possible. I.e. the contents of the
+		buffer should be capable of being read multiple times by issuing repeated
+		ECtrlCrashReadFirst/ECtrlCrashReadNext sequences.
+
+		As this function is called after the system is crashed its implementation must not
+		make use of any APIs which require a running system, it must also not re-enable
+		interrupts.
+
+		ControlFunction argument meaning:
+		- aArg1 should be treated as a TUint8*& and set to the start address of the trace data.
+		- aArg2 should be treated as a TUint& and set to the length of the trace data.
+
+		ControlFunction returns KErrNone if successful, otherwise one of the other system wide
+		error codes.
+		*/
+		ECtrlCrashReadFirst,
+
+		/**
+		Called by crash monitor after using ECrashReadFirst, to request subsequent
+		blocks of data from the trace buffer. A size of zero should be returned if
+		the end of the buffer has been reached.
+
+		As this function is called after the system is crashed its implementation must not
+		make use of any APIs which require a running system, it must also not re-enable
+		interrupts.
+
+		ControlFunction argument meaning:
+		aArg1 should be treated as a TUint8** and set to the start address of the trace data.
+		aArg2 should be treated as a TUint* and set to the length of the trace data.
+
+		ControlFunction returns KErrNone if successful, otherwise one of the other system wide
+		error codes.
+		*/
+		ECtrlCrashReadNext
+		};
+
+	/**
+	Prototype for function callback called by #Control.
+	I.e. as set by SetHandlers().
+	*/
+	typedef TInt(*TControlFunction)(TControl aFunction, TAny* aArg1, TAny* aArg2);
+
+	/**
+	Call the BTrace handlers control function to perform the function.
+
+	@param aFunction	A value from TControl specifying the requested operation.
+	@param aArg1		First argument for the operation. See enum TControl.
+	@param aArg1		Second argument for the operation. See enum TControl.
+
+	@return KErrNone if successful,
+			KErrNotSupported if the function isn't supported.
+			otherwise one of the other system wide error codes.
+
+	@see TControl.
+	*/
+	IMPORT_C static TInt Control(TControl aFunction, TAny* aArg1=0, TAny* aArg2=0);
+
+	/**
+	Set both the function which will receive all trace records, and the
+	control function which will be called by each use of #Control.
+
+	@param aNewHandler The new handler to receive trace.
+	@param aNewControl The new handler for control functions.
+	@param aOldHandler The trace handler which existed prior to this function being called.
+	@param aOldControl The control handler which existed prior to this function being called.
+	*/
+	IMPORT_C static void SetHandlers(BTrace::THandler aNewHandler, BTrace::TControlFunction aNewControl, BTrace::THandler& aOldHandler, BTrace::TControlFunction& aOldControl);
+
+#endif //  __KERNEL_MODE__
+
+	/**
+	Check the trace filters to see if a trace with a given category
+	would be output.
+
+	@param aCategory  A category value from enum BTrace::TCategory.
+					  Only the 8 least significant bits in this value are used;
+					  other bits are ignored.
+
+	@return True if a trace with this specification would be passed by the filters.
+			False if a trace with this specification would be dropped by the filters.
+
+	@publishedPartner
+	@released
+	*/
+	IMPORT_C static TBool CheckFilter(TUint32 aCategory);
+
+	/**
+	Check the trace filters to see if a trace with a given category
+	and filter UID would be output.
+
+	@param aCategory  A category value from enum BTrace::TCategory.
+					  Only the 8 least significant bits in this value are used;
+					  other bits are ignored.
+	@param aUid       A UID to filter on.
+
+	@return True if a trace with this specification would be passed by the filters.
+			False if a trace with this specification would be dropped by the filters.
+
+	@publishedPartner
+	@released
+	*/
+	IMPORT_C static TBool CheckFilter2(TUint32 aCategory,TUint32 aUid);
+
+	/**
+	Common function for BTrace macros.
+	@internalComponent
+	*/
+	IMPORT_C static TBool Out(TUint32 a0,TUint32 a1,TUint32 a2,TUint32 a3);
+
+	/**
+	Common function for BTrace macros.
+	@internalComponent
+	*/
+	IMPORT_C static TBool OutX(TUint32 a0,TUint32 a1,TUint32 a2,TUint32 a3);
+
+	/**
+	Common function for BTrace macros.
+	@internalComponent
+	*/
+	IMPORT_C static TBool OutN(TUint32 a0, TUint32 a1, TUint32 a2, const TAny* aData, TInt aDataSize);
+
+	/**
+	Common function for BTrace macros.
+	@internalComponent
+	*/
+	IMPORT_C static TBool OutNX(TUint32 a0, TUint32 a1, TUint32 a2, const TAny* aData, TInt aDataSize);
+
+	/**
+	Common function for BTrace macros.
+	@internalComponent
+	*/
+	IMPORT_C static TBool OutBig(TUint32 a0, TUint32 a1, const TAny* aData, TInt aDataSize);
+
+	/**
+	Common function for BTrace macros.
+	@internalComponent
+	*/
+	IMPORT_C static TBool OutFiltered(TUint32 a0,TUint32 a1,TUint32 a2,TUint32 a3);
+
+	/**
+	Common function for BTrace macros.
+	@internalComponent
+	*/
+	IMPORT_C static TBool OutFilteredX(TUint32 a0,TUint32 a1,TUint32 a2,TUint32 a3);
+
+	/**
+	Common function for BTrace macros.
+	@internalComponent
+	*/
+	IMPORT_C static TBool OutFilteredN(TUint32 a0, TUint32 a1, TUint32 a2, const TAny* aData, TInt aDataSize);
+
+	/**
+	Common function for BTrace macros.
+	@internalComponent
+	*/
+	IMPORT_C static TBool OutFilteredNX(TUint32 a0, TUint32 a1, TUint32 a2, const TAny* aData, TInt aDataSize);
+
+	/**
+	Common function for BTrace macros.
+	@internalComponent
+	*/
+	IMPORT_C static TBool OutFilteredBig(TUint32 a0, TUint32 a1, const TAny* aData, TInt aDataSize);
+
+	/**
+	@internalComponent
+	*/
+	static void Init0();
+
+	/**
+	@internalComponent
+	*/
+	typedef TBool(*TBTrace1)(TUint32);
+
+	/**
+	@internalComponent
+	*/
+	typedef TBool(*TBTrace2)(TUint32,TUint32);
+
+	/**
+	@internalComponent
+	*/
+	typedef TBool(*TBTrace3)(TUint32,TUint32,TUint32);
+
+	/**
+	@internalComponent
+	*/
+	struct SExecExtension
+		{
+		TUint32	iA2;
+		TUint32	iA3;
+		TUint32	iPc;
+		};
+
+	/**
+	@internalComponent
+	*/
+	static TBool DoOutBig(TUint32 a0, TUint32 a1, const TAny* aData, TInt aDataSize, TUint32 aContext, TUint32 aPc);
+
+	/**
+	@internalComponent
+	*/
+	static TUint32 BigTraceId;
+
+	/**
+	@internalComponent
+	*/
+	static TBool IsSupported(TUint aCategory);
+
+	/**
+	Common function for UTrace calls, that need to set both program counter and format id as well as the normal parameters.
+
+	@param aHeader			The header (a0) of the trace record.
+	@param aModuleUid		A uid (a1) to filter on
+	@param aPc				A program counter
+	@param aFormatId		A format id
+	@param aData			The data to output
+	@param aDataSize		The size of the data
+
+	@return ETrue if a trace was successfully sent and dealt with by the handler.
+
+	@internalComponent
+	@prototype
+	*/
+	IMPORT_C static TBool OutFilteredPcFormatBig(TUint32 aHeader, TUint32 aModuleUid, TUint32 aPc, TUint16 aFormatId, const TAny* aData, TInt aDataSize);
+
+	};
+
+
+/**
+@internalComponent
+*/
+class DBTraceFilter2
+	{
+public:
+	TUint iNumUids;
+	TInt iAccessCount;
+	TUint32 iUids[1];
+
+	TBool Check(TUint32 aUid);
+
+	static DBTraceFilter2* New(TInt aNumUids);
+	static DBTraceFilter2* Open(DBTraceFilter2*volatile& aFilter2);
+	void Close();
+
+	DBTraceFilter2* iCleanupLink;
+	static DBTraceFilter2* iCleanupHead;
+	static void Cleanup();
+	};
+
+
+
+
+//
+// BTraceX macros
+//
+
+/**
+@internalComponent
+*/
+#define BTRACE_HEADER(aSize,aCategory,aSubCategory)			\
+	(((aSize)<<BTrace::ESizeIndex*8)							\
+	+((aCategory)<<BTrace::ECategoryIndex*8)					\
+	+((aSubCategory)<<BTrace::ESubCategoryIndex*8))
+
+/**
+@internalComponent
+*/
+#define BTRACE_HEADER_C(aSize,aCategory,aSubCategory)		\
+	((((aSize)+4)<<BTrace::ESizeIndex*8)						\
+	+((BTrace::EContextIdPresent)<<BTrace::EFlagsIndex*8)	\
+	+((aCategory)<<BTrace::ECategoryIndex*8)					\
+	+((aSubCategory)<<BTrace::ESubCategoryIndex*8))
+
+/**
+@internalComponent
+*/
+#define BTRACE_HEADER_P(aSize,aCategory,aSubCategory)		\
+	((((aSize)+4)<<BTrace::ESizeIndex*8)						\
+	+((BTrace::EPcPresent)<<BTrace::EFlagsIndex*8)		\
+	+((aCategory)<<BTrace::ECategoryIndex*8)					\
+	+((aSubCategory)<<BTrace::ESubCategoryIndex*8))
+
+/**
+@internalComponent
+*/
+#define BTRACE_HEADER_CP(aSize,aCategory,aSubCategory)								\
+	((((aSize)+8)<<BTrace::ESizeIndex*8)												\
+	+((BTrace::EContextIdPresent|BTrace::EPcPresent)<<BTrace::EFlagsIndex*8)	\
+	+((aCategory)<<BTrace::ECategoryIndex*8)											\
+	+((aSubCategory)<<BTrace::ESubCategoryIndex*8))
+
+
+
+/**
+Output a trace record of the specified category.
+
+The trace record data is 0 bytes in size.
+
+@param aCategory	A value from enum BTrace::TCategory,
+@param aSubCategory Sub-category value between 0 and 255.
+					The meaning of this is dependent on the Category.
+
+@return True if trace is enabled for aCategory, false otherwise.
+@publishedPartner
+@released
+*/
+#define BTrace0(aCategory,aSubCategory) \
+	((BTrace::TBTrace1)BTrace::Out) \
+		(BTRACE_HEADER(4,(aCategory),(aSubCategory)))
+
+/**
+Output a trace record of the specified category.
+
+The trace record data is 4 bytes in size.
+
+@param aCategory	A value from enum BTrace::TCategory,
+@param aSubCategory Sub-category value between 0 and 255.
+					The meaning of this is dependent on the Category.
+@param a1			The 32bit quantity which forms the data of this trace record.
+
+@return True if trace is enabled for aCategory, false otherwise.
+@publishedPartner
+@released
+*/
+#define BTrace4(aCategory,aSubCategory,a1) \
+	((BTrace::TBTrace2)BTrace::Out) \
+		(BTRACE_HEADER(8,(aCategory),(aSubCategory)),(TUint32)(a1))
+
+/**
+Output a trace record of the specified category.
+
+The trace record data is 8 bytes in size.
+
+@param aCategory	A value from enum BTrace::TCategory,
+@param aSubCategory Sub-category value between 0 and 255.
+					The meaning of this is dependent on the Category.
+@param a1			The first 32bit quantity which forms the data of this trace record.
+@param a2			The second 32bit quantity which forms the data of this trace record.
+
+@return True if trace is enabled for aCategory, false otherwise.
+@publishedPartner
+@released
+*/
+#define BTrace8(aCategory,aSubCategory,a1,a2) \
+	((BTrace::TBTrace3)BTrace::Out) \
+		(BTRACE_HEADER(12,(aCategory),(aSubCategory)),(TUint32)(a1),(TUint32)(a2))
+
+/**
+Output a trace record of the specified category.
+
+The trace record data is 12 bytes in size.
+
+@param aCategory	A value from enum BTrace::TCategory,
+@param aSubCategory Sub-category value between 0 and 255.
+					The meaning of this is dependent on the Category.
+@param a1			The first 32bit quantity which forms the data of this trace record.
+@param a2			The second 32bit quantity which forms the data of this trace record.
+@param a3			The third 32bit quantity which forms the data of this trace record.
+
+@return True if trace is enabled for aCategory, false otherwise.
+@publishedPartner
+@released
+*/
+#define BTrace12(aCategory,aSubCategory,a1,a2,a3) \
+	BTrace::Out \
+		(BTRACE_HEADER(16,(aCategory),(aSubCategory)),(TUint32)(a1),(TUint32)(a2),(TUint32)(a3))
+
+/**
+Output a trace record of the specified category.
+
+@param aCategory	A value from enum BTrace::TCategory,
+@param aSubCategory Sub-category value between 0 and 255.
+					The meaning of this is dependent on the Category.
+@param a1			The first 32bit quantity which forms the data of this trace record.
+@param a2			The second 32bit quantity which forms the data of this trace record.
+@param aData		Address of addition data to add to trace.
+					Must be word aligned, i.e. a multiple of 4.
+@param aDataSize	Number of bytes of additional data. If this value is greater than
+					KMaxBTraceDataArray then data is truncated to this size and the
+					flag ERecordTruncated is set in the record.
+
+@return True if trace is enabled for aCategory, false otherwise.
+@publishedPartner
+@released
+*/
+#define BTraceN(aCategory,aSubCategory,a1,a2,aData,aDataSize) \
+	BTrace::OutN \
+		(BTRACE_HEADER(12,(aCategory),(aSubCategory)),(TUint32)(a1),(TUint32)(a2),aData,aDataSize)
+
+/**
+Output a trace record of the specified category.
+
+If the specified data is too big to find into a single trace record, then a
+multipart trace is generated. See TMultiPart.
+
+@param aCategory	A value from enum BTrace::TCategory,
+@param aSubCategory Sub-category value between 0 and 255.
+					The meaning of this is dependent on the Category.
+@param a1			The first 32bit quantity which forms the data of this trace record.
+@param aData		Address of addition data to add to trace.
+					Must be word aligned, i.e. a multiple of 4.
+@param aDataSize	Number of bytes of additional data.
+
+@return True if trace is enabled for aCategory, false otherwise.
+@publishedPartner
+@released
+*/
+#define BTraceBig(aCategory,aSubCategory,a1,aData,aDataSize) \
+	BTrace::OutBig \
+		(BTRACE_HEADER(8,(aCategory),(aSubCategory)),(TUint32)(a1),aData,(TInt)(aDataSize))
+
+
+
+/**
+Output a trace record of the specified category.
+
+The trace record data is 0 bytes in size.
+
+@param aCategory	A value from enum BTrace::TCategory,
+@param aSubCategory Sub-category value between 0 and 255.
+					The meaning of this is dependent on the Category.
+
+@return True if trace is enabled for aCategory, false otherwise.
+@publishedPartner
+@released
+*/
+#define BTraceContext0(aCategory,aSubCategory) \
+	((BTrace::TBTrace1)BTrace::OutX) \
+		(BTRACE_HEADER_C(4,(aCategory),(aSubCategory)))
+
+/**
+Output a trace record of the specified category which also includes a Context ID.
+
+The trace record data is 4 bytes in size.
+
+@param aCategory	A value from enum BTrace::TCategory,
+@param aSubCategory Sub-category value between 0 and 255.
+					The meaning of this is dependent on the Category.
+@param a1			The 32bit quantity which forms the data of this trace record.
+
+@return True if trace is enabled for aCategory, false otherwise.
+@publishedPartner
+@released
+*/
+#define BTraceContext4(aCategory,aSubCategory,a1) \
+	((BTrace::TBTrace2)BTrace::OutX) \
+		(BTRACE_HEADER_C(8,(aCategory),(aSubCategory)),(TUint32)(a1))
+
+/**
+Output a trace record of the specified category which also includes a Context ID.
+
+The trace record data is 8 bytes in size.
+
+@param aCategory	A value from enum BTrace::TCategory,
+@param aSubCategory Sub-category value between 0 and 255.
+					The meaning of this is dependent on the Category.
+@param a1			The first 32bit quantity which forms the data of this trace record.
+@param a2			The second 32bit quantity which forms the data of this trace record.
+
+@return True if trace is enabled for aCategory, false otherwise.
+@publishedPartner
+@released
+*/
+#define BTraceContext8(aCategory,aSubCategory,a1,a2) \
+	((BTrace::TBTrace3)BTrace::OutX) \
+		(BTRACE_HEADER_C(12,(aCategory),(aSubCategory)),(TUint32)(a1),(TUint32)(a2))
+
+/**
+Output a trace record of the specified category which also includes a Context ID.
+
+The trace record data is 12 bytes in size.
+
+@param aCategory	A value from enum BTrace::TCategory,
+@param aSubCategory Sub-category value between 0 and 255.
+					The meaning of this is dependent on the Category.
+@param a1			The first 32bit quantity which forms the data of this trace record.
+@param a2			The second 32bit quantity which forms the data of this trace record.
+@param a3			The third 32bit quantity which forms the data of this trace record.
+
+@return True if trace is enabled for aCategory, false otherwise.
+@publishedPartner
+@released
+*/
+#define BTraceContext12(aCategory,aSubCategory,a1,a2,a3) \
+	BTrace::OutX \
+		(BTRACE_HEADER_C(16,(aCategory),(aSubCategory)),(TUint32)(a1),(TUint32)(a2),(TUint32)(a3))
+
+/**
+Output a trace record of the specified category which also includes a Context ID.
+
+@param aCategory	A value from enum BTrace::TCategory,
+@param aSubCategory Sub-category value between 0 and 255.
+					The meaning of this is dependent on the Category.
+@param a1			The first 32bit quantity which forms the data of this trace record.
+@param a2			The second 32bit quantity which forms the data of this trace record.
+@param aData		Address of addition data to add to trace.
+					Must be word aligned, i.e. a multiple of 4.
+@param aDataSize	Number of bytes of additional data. If this value is greater than
+					KMaxBTraceDataArray then data is truncated to this size and the
+					flag ERecordTruncated is set in the record.
+
+@return True if trace is enabled for aCategory, false otherwise.
+@publishedPartner
+@released
+*/
+#define BTraceContextN(aCategory,aSubCategory,a1,a2,aData,aDataSize) \
+	BTrace::OutNX \
+		(BTRACE_HEADER_C(12,(aCategory),(aSubCategory)),(TUint32)(a1),(TUint32)(a2),aData,aDataSize)
+
+/**
+Output a trace record of the specified category which also includes a Context ID.
+
+If the specified data is too big to find into a single trace record, then a
+multipart trace is generated. See TMultiPart.
+
+@param aCategory	A value from enum BTrace::TCategory,
+@param aSubCategory Sub-category value between 0 and 255.
+					The meaning of this is dependent on the Category.
+@param a1			The first 32bit quantity which forms the data of this trace record.
+@param aData		Address of addition data to add to trace.
+					Must be word aligned, i.e. a multiple of 4.
+@param aDataSize	Number of bytes of additional data.
+
+@return True if trace is enabled for aCategory, false otherwise.
+@publishedPartner
+@released
+*/
+#define BTraceContextBig(aCategory,aSubCategory,a1,aData,aDataSize) \
+	BTrace::OutBig \
+		(BTRACE_HEADER_C(8,(aCategory),(aSubCategory)),(TUint32)(a1),aData,(TInt)(aDataSize))
+
+
+
+/**
+Output a trace record of the specified category which also includes a Program Counter value.
+
+The trace record data is 0 bytes in size.
+
+@param aCategory	A value from enum BTrace::TCategory,
+@param aSubCategory Sub-category value between 0 and 255.
+					The meaning of this is dependent on the Category.
+
+@return True if trace is enabled for aCategory, false otherwise.
+@publishedPartner
+@released
+*/
+#define BTracePc0(aCategory,aSubCategory) \
+	((BTrace::TBTrace1)BTrace::Out) \
+		(BTRACE_HEADER_P(4,(aCategory),(aSubCategory)))
+
+/**
+Output a trace record of the specified category which also includes a Program Counter value.
+
+The trace record data is 4 bytes in size.
+
+@param aCategory	A value from enum BTrace::TCategory,
+@param aSubCategory Sub-category value between 0 and 255.
+					The meaning of this is dependent on the Category.
+@param a1			The 32bit quantity which forms the data of this trace record.
+
+@return True if trace is enabled for aCategory, false otherwise.
+@publishedPartner
+@released
+*/
+#define BTracePc4(aCategory,aSubCategory,a1)	\
+	((BTrace::TBTrace2)BTrace::Out) \
+		(BTRACE_HEADER_P(8,(aCategory),(aSubCategory)),(TUint32)(a1))
+
+/**
+Output a trace record of the specified category which also includes a Program Counter value.
+
+The trace record data is 8 bytes in size.
+
+@param aCategory	A value from enum BTrace::TCategory,
+@param aSubCategory Sub-category value between 0 and 255.
+					The meaning of this is dependent on the Category.
+@param a1			The first 32bit quantity which forms the data of this trace record.
+@param a2			The second 32bit quantity which forms the data of this trace record.
+
+@return True if trace is enabled for aCategory, false otherwise.
+@publishedPartner
+@released
+*/
+#define BTracePc8(aCategory,aSubCategory,a1,a2) \
+	((BTrace::TBTrace3)BTrace::Out) \
+		(BTRACE_HEADER_P(12,(aCategory),(aSubCategory)),(TUint32)(a1),(TUint32)(a2))
+
+/**
+Output a trace record of the specified category which also includes a Program Counter value.
+
+The trace record data is 12 bytes in size.
+
+@param aCategory	A value from enum BTrace::TCategory,
+@param aSubCategory Sub-category value between 0 and 255.
+					The meaning of this is dependent on the Category.
+@param a1			The first 32bit quantity which forms the data of this trace record.
+@param a2			The second 32bit quantity which forms the data of this trace record.
+@param a3			The third 32bit quantity which forms the data of this trace record.
+
+@return True if trace is enabled for aCategory, false otherwise.
+@publishedPartner
+@released
+*/
+#define BTracePc12(aCategory,aSubCategory,a1,a2,a3) \
+	BTrace::Out \
+		(BTRACE_HEADER_P(16,(aCategory),(aSubCategory)),(TUint32)(a1),(TUint32)(a2),(TUint32)(a3))
+
+/**
+Output a trace record of the specified category which also includes a Program Counter value.
+
+@param aCategory	A value from enum BTrace::TCategory,
+@param aSubCategory Sub-category value between 0 and 255.
+					The meaning of this is dependent on the Category.
+@param a1			The first 32bit quantity which forms the data of this trace record.
+@param a2			The second 32bit quantity which forms the data of this trace record.
+@param aData		Address of addition data to add to trace.
+					Must be word aligned, i.e. a multiple of 4.
+@param aDataSize	Number of bytes of additional data. If this value is greater than
+					KMaxBTraceDataArray then data is truncated to this size and the
+					flag ERecordTruncated is set in the record.
+
+@return True if trace is enabled for aCategory, false otherwise.
+@publishedPartner
+@released
+*/
+#define BTracePcN(aCategory,aSubCategory,a1,a2,aData,aDataSize) \
+	BTrace::OutN \
+		(BTRACE_HEADER_P(12,(aCategory),(aSubCategory)),(TUint32)(a1),(TUint32)(a2),aData,aDataSize)
+
+/**
+Output a trace record of the specified category which also includes a Program Counter value.
+
+If the specified data is too big to find into a single trace record, then a
+multipart trace is generated. See TMultiPart.
+
+@param aCategory	A value from enum BTrace::TCategory,
+@param aSubCategory Sub-category value between 0 and 255.
+					The meaning of this is dependent on the Category.
+@param a1			The first 32bit quantity which forms the data of this trace record.
+@param aData		Address of addition data to add to trace.
+					Must be word aligned, i.e. a multiple of 4.
+@param aDataSize	Number of bytes of additional data.
+
+@return True if trace is enabled for aCategory, false otherwise.
+@publishedPartner
+@released
+*/
+#define BTracePcBig(aCategory,aSubCategory,a1,aData,aDataSize) \
+	BTrace::OutBig \
+		(BTRACE_HEADER_P(8,(aCategory),(aSubCategory)),(TUint32)(a1),aData,(TInt)(aDataSize))
+
+
+
+
+/**
+Output a trace record of the specified category which also includes
+Context ID and Program Counter values.
+
+The trace record data is 0 bytes in size.
+
+@param aCategory	A value from enum BTrace::TCategory,
+@param aSubCategory Sub-category value between 0 and 255.
+					The meaning of this is dependent on the Category.
+
+@return True if trace is enabled for aCategory, false otherwise.
+@publishedPartner
+@released
+*/
+#define BTraceContextPc0(aCategory,aSubCategory)	\
+	((BTrace::TBTrace1)BTrace::OutX) \
+		(BTRACE_HEADER_CP(4,(aCategory),(aSubCategory)))
+
+/**
+Output a trace record of the specified category which also includes
+Context ID and Program Counter values.
+
+The trace record data is 4 bytes in size.
+
+@param aCategory	A value from enum BTrace::TCategory,
+@param aSubCategory Sub-category value between 0 and 255.
+					The meaning of this is dependent on the Category.
+@param a1			The 32bit quantity which forms the data of this trace record.
+
+@return True if trace is enabled for aCategory, false otherwise.
+@publishedPartner
+@released
+*/
+#define BTraceContextPc4(aCategory,aSubCategory,a1)	\
+	((BTrace::TBTrace2)BTrace::OutX) \
+		(BTRACE_HEADER_CP(8,(aCategory),(aSubCategory)),(TUint32)(a1))
+
+/**
+Output a trace record of the specified category which also includes
+Context ID and Program Counter values.
+
+The trace record data is 8 bytes in size.
+
+@param aCategory	A value from enum BTrace::TCategory,
+@param aSubCategory Sub-category value between 0 and 255.
+					The meaning of this is dependent on the Category.
+@param a1			The first 32bit quantity which forms the data of this trace record.
+@param a2			The second 32bit quantity which forms the data of this trace record.
+
+@return True if trace is enabled for aCategory, false otherwise.
+@publishedPartner
+@released
+*/
+#define BTraceContextPc8(aCategory,aSubCategory,a1,a2) \
+	((BTrace::TBTrace3)BTrace::OutX) \
+		(BTRACE_HEADER_CP(12,(aCategory),(aSubCategory)),(TUint32)(a1),(TUint32)(a2))
+
+/**
+Output a trace record of the specified category which also includes
+Context ID and Program Counter values.
+
+The trace record data is 12 bytes in size.
+
+@param aCategory	A value from enum BTrace::TCategory,
+@param aSubCategory Sub-category value between 0 and 255.
+					The meaning of this is dependent on the Category.
+@param a1			The first 32bit quantity which forms the data of this trace record.
+@param a2			The second 32bit quantity which forms the data of this trace record.
+@param a3			The third 32bit quantity which forms the data of this trace record.
+
+@return True if trace is enabled for aCategory, false otherwise.
+@publishedPartner
+@released
+*/
+#define BTraceContextPc12(aCategory,aSubCategory,a1,a2,a3) \
+	BTrace::OutX \
+		(BTRACE_HEADER_CP(16,(aCategory),(aSubCategory)),(TUint32)(a1),(TUint32)(a2),(TUint32)(a3))
+
+/**
+Output a trace record of the specified category which also includes
+Context ID and Program Counter values.
+
+@param aCategory	A value from enum BTrace::TCategory,
+@param aSubCategory Sub-category value between 0 and 255.
+					The meaning of this is dependent on the Category.
+@param a1			The first 32bit quantity which forms the data of this trace record.
+@param a2			The second 32bit quantity which forms the data of this trace record.
+@param aData		Address of addition data to add to trace.
+					Must be word aligned, i.e. a multiple of 4.
+@param aDataSize	Number of bytes of additional data. If this value is greater than
+					KMaxBTraceDataArray then data is truncated to this size and the
+					flag ERecordTruncated is set in the record.
+
+@return True if trace is enabled for aCategory, false otherwise.
+@publishedPartner
+@released
+*/
+#define BTraceContextPcN(aCategory,aSubCategory,a1,a2,aData,aDataSize) \
+	BTrace::OutNX \
+		(BTRACE_HEADER_CP(12,(aCategory),(aSubCategory)),(TUint32)(a1),(TUint32)(a2),aData,aDataSize)
+
+/**
+Output a trace record of the specified category which also includes
+Context ID and Program Counter values.
+
+If the specified data is too big to find into a single trace record, then a
+multipart trace is generated. See TMultiPart.
+
+@param aCategory	A value from enum BTrace::TCategory,
+@param aSubCategory Sub-category value between 0 and 255.
+					The meaning of this is dependent on the Category.
+@param a1			The first 32bit quantity which forms the data of this trace record.
+@param aData		Address of addition data to add to trace.
+					Must be word aligned, i.e. a multiple of 4.
+@param aDataSize	Number of bytes of additional data.
+
+@return True if trace is enabled for aCategory, false otherwise.
+@publishedPartner
+@released
+*/
+#define BTraceContextPcBig(aCategory,aSubCategory,a1,aData,aDataSize) \
+	BTrace::OutBig \
+		(BTRACE_HEADER_CP(8,(aCategory),(aSubCategory)),(TUint32)(a1),aData,(TInt)(aDataSize))
+
+
+
+/**
+Output a trace record of the specified category.
+
+The trace record data is 4 bytes in size.
+
+If the value of \a aUid is not contained in the secondary filter then the trace is discarded.
+
+@param aCategory	A value from enum BTrace::TCategory,
+@param aSubCategory Sub-category value between 0 and 255.
+					The meaning of this is dependent on the Category.
+@param aUid			The 32bit quantity which forms the data of this trace record.
+
+@return True if trace is enabled for aCategory and aUid, false otherwise.
+@publishedPartner
+@released
+*/
+#define BTraceFiltered4(aCategory,aSubCategory,aUid) \
+	((BTrace::TBTrace2)BTrace::OutFiltered) \
+		(BTRACE_HEADER(8,(aCategory),(aSubCategory)),(TUint32)(aUid))
+
+/**
+Output a trace record of the specified category.
+
+The trace record data is 8 bytes in size.
+
+If the value of \a aUid is not contained in the secondary filter then the trace is discarded.
+
+@param aCategory	A value from enum BTrace::TCategory,
+@param aSubCategory Sub-category value between 0 and 255.
+					The meaning of this is dependent on the Category.
+@param aUid			The first 32bit quantity which forms the data of this trace record.
+@param a1			The second 32bit quantity which forms the data of this trace record.
+
+@return True if trace is enabled for aCategory and aUid, false otherwise.
+@publishedPartner
+@released
+*/
+#define BTraceFiltered8(aCategory,aSubCategory,aUid,a1) \
+	((BTrace::TBTrace3)BTrace::OutFiltered) \
+		(BTRACE_HEADER(12,(aCategory),(aSubCategory)),(TUint32)(aUid),(TUint32)(a1))
+
+/**
+Output a trace record of the specified category.
+
+The trace record data is 12 bytes in size.
+
+If the value of \a aUid is not contained in the secondary filter then the trace is discarded.
+
+@param aCategory	A value from enum BTrace::TCategory,
+@param aSubCategory Sub-category value between 0 and 255.
+					The meaning of this is dependent on the Category.
+@param aUid			The first 32bit quantity which forms the data of this trace record.
+@param a1			The second 32bit quantity which forms the data of this trace record.
+@param a2			The third 32bit quantity which forms the data of this trace record.
+
+@return True if trace is enabled for aCategory and aUid, false otherwise.
+@publishedPartner
+@released
+*/
+#define BTraceFiltered12(aCategory,aSubCategory,aUid,a1,a2) \
+	BTrace::OutFiltered \
+		(BTRACE_HEADER(16,(aCategory),(aSubCategory)),(TUint32)(aUid),(TUint32)(a1),(TUint32)(a2))
+
+/**
+Output a trace record of the specified category.
+
+If the value of \a aUid is not contained in the secondary filter then the trace is discarded.
+
+@param aCategory	A value from enum BTrace::TCategory,
+@param aSubCategory Sub-category value between 0 and 255.
+					The meaning of this is dependent on the Category.
+@param aUid			The first 32bit quantity which forms the data of this trace record.
+@param a1			The second 32bit quantity which forms the data of this trace record.
+@param aData		Address of addition data to add to trace.
+					Must be word aligned, i.e. a multiple of 4.
+@param aDataSize	Number of bytes of additional data. If this value is greater than
+					KMaxBTraceDataArray then data is truncated to this size and the
+					flag ERecordTruncated is set in the record.
+
+@return True if trace is enabled for aCategory and aUid, false otherwise.
+@publishedPartner
+@released
+*/
+#define BTraceFilteredN(aCategory,aSubCategory,aUid,a1,aData,aDataSize) \
+	BTrace::OutFilteredN \
+		(BTRACE_HEADER(12,(aCategory),(aSubCategory)),(TUint32)(aUid),(TUint32)(a1),aData,aDataSize)
+
+/**
+Output a trace record of the specified category.
+
+If the specified data is too big to find into a single trace record, then a
+multipart trace is generated. See TMultiPart.
+
+If the value of \a aUid is not contained in the secondary filter then the trace is discarded.
+
+@param aCategory	A value from enum BTrace::TCategory,
+@param aSubCategory Sub-category value between 0 and 255.
+					The meaning of this is dependent on the Category.
+@param aUid			The first 32bit quantity which forms the data of this trace record.
+@param aData		Address of addition data to add to trace.
+					Must be word aligned, i.e. a multiple of 4.
+@param aDataSize	Number of bytes of additional data.
+
+@return True if trace is enabled for aCategory and aUid, false otherwise.
+@publishedPartner
+@released
+*/
+#define BTraceFilteredBig(aCategory,aSubCategory,aUid,aData,aDataSize) \
+	BTrace::OutFilteredBig \
+		(BTRACE_HEADER(8,(aCategory),(aSubCategory)),(TUint32)(aUid),aData,(TInt)(aDataSize))
+
+
+
+/**
+Output a trace record of the specified category which also includes a Context ID.
+
+The trace record data is 4 bytes in size.
+
+If the value of \a aUid is not contained in the secondary filter then the trace is discarded.
+
+@param aCategory	A value from enum BTrace::TCategory,
+@param aSubCategory Sub-category value between 0 and 255.
+					The meaning of this is dependent on the Category.
+@param aUid			The 32bit quantity which forms the data of this trace record.
+
+@return True if trace is enabled for aCategory and aUid, false otherwise.
+@publishedPartner
+@released
+*/
+#define BTraceFilteredContext4(aCategory,aSubCategory,aUid) \
+	((BTrace::TBTrace2)BTrace::OutFilteredX) \
+		(BTRACE_HEADER_C(8,(aCategory),(aSubCategory)),(TUint32)(aUid))
+
+/**
+Output a trace record of the specified category which also includes a Context ID.
+
+The trace record data is 8 bytes in size.
+
+If the value of \a aUid is not contained in the secondary filter then the trace is discarded.
+
+@param aCategory	A value from enum BTrace::TCategory,
+@param aSubCategory Sub-category value between 0 and 255.
+					The meaning of this is dependent on the Category.
+@param aUid			The first 32bit quantity which forms the data of this trace record.
+@param a1			The second 32bit quantity which forms the data of this trace record.
+
+@return True if trace is enabled for aCategory and aUid, false otherwise.
+@publishedPartner
+@released
+*/
+#define BTraceFilteredContext8(aCategory,aSubCategory,aUid,a1) \
+	((BTrace::TBTrace3)BTrace::OutFilteredX) \
+		(BTRACE_HEADER_C(12,(aCategory),(aSubCategory)),(TUint32)(aUid),(TUint32)(a1))
+
+/**
+Output a trace record of the specified category which also includes a Context ID.
+
+The trace record data is 12 bytes in size.
+
+If the value of \a aUid is not contained in the secondary filter then the trace is discarded.
+
+@param aCategory	A value from enum BTrace::TCategory,
+@param aSubCategory Sub-category value between 0 and 255.
+					The meaning of this is dependent on the Category.
+@param aUid			The first 32bit quantity which forms the data of this trace record.
+@param a1			The second 32bit quantity which forms the data of this trace record.
+@param a2			The third 32bit quantity which forms the data of this trace record.
+
+@return True if trace is enabled for aCategory and aUid, false otherwise.
+@publishedPartner
+@released
+*/
+#define BTraceFilteredContext12(aCategory,aSubCategory,aUid,a1,a2) \
+	BTrace::OutFilteredX \
+		(BTRACE_HEADER_C(16,(aCategory),(aSubCategory)),(TUint32)(aUid),(TUint32)(a1),(TUint32)(a2))
+
+/**
+Output a trace record of the specified category which also includes a Context ID.
+
+If the value of \a aUid is not contained in the secondary filter then the trace is discarded.
+
+@param aCategory	A value from enum BTrace::TCategory,
+@param aSubCategory Sub-category value between 0 and 255.
+					The meaning of this is dependent on the Category.
+@param aUid			The first 32bit quantity which forms the data of this trace record.
+@param a1			The second 32bit quantity which forms the data of this trace record.
+@param aData		Address of addition data to add to trace.
+					Must be word aligned, i.e. a multiple of 4.
+@param aDataSize	Number of bytes of additional data. If this value is greater than
+					KMaxBTraceDataArray then data is truncated to this size and the
+					flag ERecordTruncated is set in the record.
+
+@return True if trace is enabled for aCategory and aUid, false otherwise.
+@publishedPartner
+@released
+*/
+#define BTraceFilteredContextN(aCategory,aSubCategory,aUid,a1,aData,aDataSize) \
+	BTrace::OutFilteredNX \
+		(BTRACE_HEADER_C(12,(aCategory),(aSubCategory)),(TUint32)(aUid),(TUint32)(a1),aData,aDataSize)
+
+/**
+Output a trace record of the specified category which also includes a Context ID.
+
+If the specified data is too big to find into a single trace record, then a
+multipart trace is generated. See TMultiPart.
+
+If the value of \a aUid is not contained in the secondary filter then the trace is discarded.
+
+@param aCategory	A value from enum BTrace::TCategory,
+@param aSubCategory Sub-category value between 0 and 255.
+					The meaning of this is dependent on the Category.
+@param aUid			The first 32bit quantity which forms the data of this trace record.
+@param aData		Address of addition data to add to trace.
+					Must be word aligned, i.e. a multiple of 4.
+@param aDataSize	Number of bytes of additional data.
+
+@return True if trace is enabled for aCategory and aUid, false otherwise.
+@publishedPartner
+@released
+*/
+#define BTraceFilteredContextBig(aCategory,aSubCategory,aUid,aData,aDataSize) \
+	BTrace::OutFilteredBig \
+		(BTRACE_HEADER_C(8,(aCategory),(aSubCategory)),(TUint32)(aUid),aData,(TInt)(aDataSize))
+
+
+
+/**
+Output a trace record of the specified category which also includes a Program Counter value.
+
+The trace record data is 4 bytes in size.
+
+If the value of \a aUid is not contained in the secondary filter then the trace is discarded.
+
+@param aCategory	A value from enum BTrace::TCategory,
+@param aSubCategory Sub-category value between 0 and 255.
+					The meaning of this is dependent on the Category.
+@param aUid			The 32bit quantity which forms the data of this trace record.
+
+@return True if trace is enabled for aCategory and aUid, false otherwise.
+@publishedPartner
+@released
+*/
+#define BTraceFilteredPc4(aCategory,aSubCategory,aUid)	\
+	((BTrace::TBTrace2)BTrace::OutFiltered) \
+		(BTRACE_HEADER_P(8,(aCategory),(aSubCategory)),(TUint32)(aUid))
+
+/**
+Output a trace record of the specified category which also includes a Program Counter value.
+
+The trace record data is 8 bytes in size.
+
+If the value of \a aUid is not contained in the secondary filter then the trace is discarded.
+
+@param aCategory	A value from enum BTrace::TCategory,
+@param aSubCategory Sub-category value between 0 and 255.
+					The meaning of this is dependent on the Category.
+@param aUid			The first 32bit quantity which forms the data of this trace record.
+@param a1			The second 32bit quantity which forms the data of this trace record.
+
+@return True if trace is enabled for aCategory and aUid, false otherwise.
+@publishedPartner
+@released
+*/
+#define BTraceFilteredPc8(aCategory,aSubCategory,aUid,a1) \
+	((BTrace::TBTrace3)BTrace::OutFiltered) \
+		(BTRACE_HEADER_P(12,(aCategory),(aSubCategory)),(TUint32)(aUid),(TUint32)(a1))
+
+/**
+Output a trace record of the specified category which also includes a Program Counter value.
+
+The trace record data is 12 bytes in size.
+
+If the value of \a aUid is not contained in the secondary filter then the trace is discarded.
+
+@param aCategory	A value from enum BTrace::TCategory,
+@param aSubCategory Sub-category value between 0 and 255.
+					The meaning of this is dependent on the Category.
+@param aUid			The first 32bit quantity which forms the data of this trace record.
+@param a1			The second 32bit quantity which forms the data of this trace record.
+@param a2			The third 32bit quantity which forms the data of this trace record.
+
+@return True if trace is enabled for aCategory and aUid, false otherwise.
+@publishedPartner
+@released
+*/
+#define BTraceFilteredPc12(aCategory,aSubCategory,aUid,a1,a2) \
+	BTrace::OutFiltered \
+		(BTRACE_HEADER_P(16,(aCategory),(aSubCategory)),(TUint32)(aUid),(TUint32)(a1),(TUint32)(a2))
+
+/**
+Output a trace record of the specified category which also includes a Program Counter value.
+
+If the value of \a aUid is not contained in the secondary filter then the trace is discarded.
+
+@param aCategory	A value from enum BTrace::TCategory,
+@param aSubCategory Sub-category value between 0 and 255.
+					The meaning of this is dependent on the Category.
+@param aUid			The first 32bit quantity which forms the data of this trace record.
+@param a1			The second 32bit quantity which forms the data of this trace record.
+@param aData		Address of addition data to add to trace.
+					Must be word aligned, i.e. a multiple of 4.
+@param aDataSize	Number of bytes of additional data. If this value is greater than
+					KMaxBTraceDataArray then data is truncated to this size and the
+					flag ERecordTruncated is set in the record.
+
+@return True if trace is enabled for aCategory and aUid, false otherwise.
+@publishedPartner
+@released
+*/
+#define BTraceFilteredPcN(aCategory,aSubCategory,aUid,a1,aData,aDataSize) \
+	BTrace::OutFilteredN \
+		(BTRACE_HEADER_P(12,(aCategory),(aSubCategory)),(TUint32)(aUid),(TUint32)(a1),aData,aDataSize)
+
+/**
+Output a trace record of the specified category which also includes a Program Counter value.
+
+If the specified data is too big to find into a single trace record, then a
+multipart trace is generated. See TMultiPart.
+
+If the value of \a aUid is not contained in the secondary filter then the trace is discarded.
+
+@param aCategory	A value from enum BTrace::TCategory,
+@param aSubCategory Sub-category value between 0 and 255.
+					The meaning of this is dependent on the Category.
+@param aUid			The first 32bit quantity which forms the data of this trace record.
+@param aData		Address of addition data to add to trace.
+					Must be word aligned, i.e. a multiple of 4.
+@param aDataSize	Number of bytes of additional data.
+
+@return True if trace is enabled for aCategory and aUid, false otherwise.
+@publishedPartner
+@released
+*/
+#define BTraceFilteredPcBig(aCategory,aSubCategory,aUid,aData,aDataSize) \
+	BTrace::OutFilteredBig \
+		(BTRACE_HEADER_P(8,(aCategory),(aSubCategory)),(TUint32)(aUid),aData,(TInt)(aDataSize))
+
+
+
+
+/**
+Output a trace record of the specified category which also includes
+Context ID and Program Counter values.
+
+The trace record data is 4 bytes in size.
+
+If the value of \a aUid is not contained in the secondary filter then the trace is discarded.
+
+@param aCategory	A value from enum BTrace::TCategory,
+@param aSubCategory Sub-category value between 0 and 255.
+					The meaning of this is dependent on the Category.
+@param aUid			The 32bit quantity which forms the data of this trace record.
+
+@return True if trace is enabled for aCategory and aUid, false otherwise.
+@publishedPartner
+@released
+*/
+#define BTraceFilteredContextPc4(aCategory,aSubCategory,aUid)	\
+	((BTrace::TBTrace2)BTrace::OutFilteredX) \
+		(BTRACE_HEADER_CP(8,(aCategory),(aSubCategory)),(TUint32)(aUid))
+
+/**
+Output a trace record of the specified category which also includes
+Context ID and Program Counter values.
+
+The trace record data is 8 bytes in size.
+
+If the value of \a aUid is not contained in the secondary filter then the trace is discarded.
+
+@param aCategory	A value from enum BTrace::TCategory,
+@param aSubCategory Sub-category value between 0 and 255.
+					The meaning of this is dependent on the Category.
+@param aUid			The first 32bit quantity which forms the data of this trace record.
+@param a1			The second 32bit quantity which forms the data of this trace record.
+
+@return True if trace is enabled for aCategory and aUid, false otherwise.
+@publishedPartner
+@released
+*/
+#define BTraceFilteredContextPc8(aCategory,aSubCategory,aUid,a1) \
+	((BTrace::TBTrace3)BTrace::OutFilteredX) \
+		(BTRACE_HEADER_CP(12,(aCategory),(aSubCategory)),(TUint32)(aUid),(TUint32)(a1))
+
+/**
+Output a trace record of the specified category which also includes
+Context ID and Program Counter values.
+
+The trace record data is 12 bytes in size.
+
+If the value of \a aUid is not contained in the secondary filter then the trace is discarded.
+
+@param aCategory	A value from enum BTrace::TCategory,
+@param aSubCategory Sub-category value between 0 and 255.
+					The meaning of this is dependent on the Category.
+@param aUid			The first 32bit quantity which forms the data of this trace record.
+@param a1			The second 32bit quantity which forms the data of this trace record.
+@param a2			The third 32bit quantity which forms the data of this trace record.
+
+@return True if trace is enabled for aCategory and aUid, false otherwise.
+@publishedPartner
+@released
+*/
+#define BTraceFilteredContextPc12(aCategory,aSubCategory,aUid,a1,a2) \
+	BTrace::OutFilteredX \
+		(BTRACE_HEADER_CP(16,(aCategory),(aSubCategory)),(TUint32)(aUid),(TUint32)(a1),(TUint32)(a2))
+
+/**
+Output a trace record of the specified category which also includes
+Context ID and Program Counter values.
+
+If the value of \a aUid is not contained in the secondary filter then the trace is discarded.
+
+@param aCategory	A value from enum BTrace::TCategory,
+@param aSubCategory Sub-category value between 0 and 255.
+					The meaning of this is dependent on the Category.
+@param aUid			The first 32bit quantity which forms the data of this trace record.
+@param a1			The second 32bit quantity which forms the data of this trace record.
+@param aData		Address of addition data to add to trace.
+					Must be word aligned, i.e. a multiple of 4.
+@param aDataSize	Number of bytes of additional data. If this value is greater than
+					KMaxBTraceDataArray then data is truncated to this size and the
+					flag ERecordTruncated is set in the record.
+
+@return True if trace is enabled for aCategory and aUid, false otherwise.
+@publishedPartner
+@released
+*/
+#define BTraceFilteredContextPcN(aCategory,aSubCategory,aUid,a1,aData,aDataSize) \
+	BTrace::OutFilteredNX \
+		(BTRACE_HEADER_CP(12,(aCategory),(aSubCategory)),(TUint32)(aUid),(TUint32)(a1),aData,aDataSize)
+
+/**
+Output a trace record of the specified category which also includes
+Context ID and Program Counter values.
+
+If the specified data is too big to find into a single trace record, then a
+multipart trace is generated. See TMultiPart.
+
+If the value of \a aUid is not contained in the secondary filter then the trace is discarded.
+
+@param aCategory	A value from enum BTrace::TCategory,
+@param aSubCategory Sub-category value between 0 and 255.
+					The meaning of this is dependent on the Category.
+@param aUid			The first 32bit quantity which forms the data of this trace record.
+@param aData		Address of addition data to add to trace.
+					Must be word aligned, i.e. a multiple of 4.
+@param aDataSize	Number of bytes of additional data.
+
+@return True if trace is enabled for aCategory and aUid, false otherwise.
+@publishedPartner
+@released
+*/
+#define BTraceFilteredContextPcBig(aCategory,aSubCategory,aUid,aData,aDataSize) \
+	BTrace::OutFilteredBig \
+		(BTRACE_HEADER_CP(8,(aCategory),(aSubCategory)),(TUint32)(aUid),aData,(TInt)(aDataSize))
+
+
+
+//
+// Inline methods
+//
+
+inline TUint8* BTrace::NextRecord(TAny* aCurrentRecord)
+	{
+	TUint size = ((TUint8*)aCurrentRecord)[ESizeIndex];
+	*(TUint*)&aCurrentRecord += 3;
+	*(TUint*)&aCurrentRecord += size;
+	*(TUint*)&aCurrentRecord &= ~3;
+	return (TUint8*)aCurrentRecord;
+	}
+
+#ifdef __KERNEL_MODE__
+
+inline TInt BTrace::Filter(TUint aCategory)
+	{
+	return SetFilter(aCategory,-1);
+	}
+
+#endif
+
+/**
+The maximum permissible value for aDataSize in trace outputs.
+@see BTraceN BTracePcN BTraceContextN BTraceContextPcN
+@publishedPartner
+@released
+*/
+const TUint KMaxBTraceDataArray = 80;
+
+
+
+/**
+The maximum total number of bytes in a trace record.
+@publishedPartner
+@released
+*/
+const TInt KMaxBTraceRecordSize = 7*4+8+KMaxBTraceDataArray;
+
+
+#ifdef __MARM__
+#define BTRACE_MACHINE_CODED
+#endif
+
+#endif