debugsrv/runmodedebug/rmdriver/inc/rm_debug_kerneldriver.h
author hgs
Fri, 08 Oct 2010 14:56:39 +0300
changeset 56 aa2539c91954
parent 42 0ff24a8f6ca2
permissions -rw-r--r--
201041
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
42
hgs
parents:
diff changeset
     1
// Copyright (c) 2004-2009 Nokia Corporation and/or its subsidiary(-ies).
hgs
parents:
diff changeset
     2
// All rights reserved.
hgs
parents:
diff changeset
     3
// This component and the accompanying materials are made available
56
hgs
parents: 42
diff changeset
     4
// under the terms of "Eclipse Public License v1.0"
42
hgs
parents:
diff changeset
     5
// which accompanies this distribution, and is available
hgs
parents:
diff changeset
     6
// at the URL "http://www.eclipse.org/legal/epl-v10.html".
hgs
parents:
diff changeset
     7
//
hgs
parents:
diff changeset
     8
// Initial Contributors:
hgs
parents:
diff changeset
     9
// Nokia Corporation - initial contribution.
hgs
parents:
diff changeset
    10
//
hgs
parents:
diff changeset
    11
// Contributors:
hgs
parents:
diff changeset
    12
//
hgs
parents:
diff changeset
    13
// Description:
hgs
parents:
diff changeset
    14
//
hgs
parents:
diff changeset
    15
hgs
parents:
diff changeset
    16
hgs
parents:
diff changeset
    17
#ifndef __RM_DEBUG_KERNELDRIVER_H__
hgs
parents:
diff changeset
    18
#define __RM_DEBUG_KERNELDRIVER_H__
hgs
parents:
diff changeset
    19
hgs
parents:
diff changeset
    20
#include <rm_debug_api.h>
hgs
parents:
diff changeset
    21
hgs
parents:
diff changeset
    22
/**
hgs
parents:
diff changeset
    23
Used to store a value read from or written to an ARM register
hgs
parents:
diff changeset
    24
*/
hgs
parents:
diff changeset
    25
typedef TUint32 T4ByteRegisterValue;
hgs
parents:
diff changeset
    26
hgs
parents:
diff changeset
    27
hgs
parents:
diff changeset
    28
/** 
hgs
parents:
diff changeset
    29
Provides static methods for accessing the information stored in a TRegisterInfo
hgs
parents:
diff changeset
    30
object.
hgs
parents:
diff changeset
    31
*/
hgs
parents:
diff changeset
    32
class Register
hgs
parents:
diff changeset
    33
	{
hgs
parents:
diff changeset
    34
public:
hgs
parents:
diff changeset
    35
	static TBool IsCoreReg(const Debug::TRegisterInfo aRegister);
hgs
parents:
diff changeset
    36
	static TBool IsCoproReg(const Debug::TRegisterInfo aRegister);
hgs
parents:
diff changeset
    37
	static TUint32 GetCoreRegId(const Debug::TRegisterInfo aRegister);
hgs
parents:
diff changeset
    38
	static TUint32 GetCRm(const Debug::TRegisterInfo aRegister);
hgs
parents:
diff changeset
    39
	static TUint32 GetCRn(const Debug::TRegisterInfo aRegister);
hgs
parents:
diff changeset
    40
	static TUint32 GetOpcode1(const Debug::TRegisterInfo aRegister);
hgs
parents:
diff changeset
    41
	static TUint32 GetOpcode2(const Debug::TRegisterInfo aRegister);
hgs
parents:
diff changeset
    42
	static TUint32 GetCoproNum(const Debug::TRegisterInfo aRegister);
hgs
parents:
diff changeset
    43
	};
hgs
parents:
diff changeset
    44
hgs
parents:
diff changeset
    45
/**
hgs
parents:
diff changeset
    46
Identify whether aRegister is a core register
hgs
parents:
diff changeset
    47
@param aRegister register ID to analyse
hgs
parents:
diff changeset
    48
@return ETrue if core register, EFalse otherwise
hgs
parents:
diff changeset
    49
*/
hgs
parents:
diff changeset
    50
inline TBool Register::IsCoreReg(const Debug::TRegisterInfo aRegister)
hgs
parents:
diff changeset
    51
	{
hgs
parents:
diff changeset
    52
	return ((aRegister & 0xff) == 0x0);
hgs
parents:
diff changeset
    53
	}
hgs
parents:
diff changeset
    54
hgs
parents:
diff changeset
    55
/**
hgs
parents:
diff changeset
    56
Identify whether aRegister is a coprocessor register
hgs
parents:
diff changeset
    57
@param aRegister register ID to analyse
hgs
parents:
diff changeset
    58
@return ETrue if coprocessor register, EFalse otherwise
hgs
parents:
diff changeset
    59
*/
hgs
parents:
diff changeset
    60
inline TBool Register::IsCoproReg(const Debug::TRegisterInfo aRegister)
hgs
parents:
diff changeset
    61
	{
hgs
parents:
diff changeset
    62
	return ((aRegister & 0xff) == 0x1);
hgs
parents:
diff changeset
    63
	}
hgs
parents:
diff changeset
    64
hgs
parents:
diff changeset
    65
/**
hgs
parents:
diff changeset
    66
Get the ID of the core register
hgs
parents:
diff changeset
    67
@param aRegister register ID to analyse
hgs
parents:
diff changeset
    68
@return ID of the core register
hgs
parents:
diff changeset
    69
*/
hgs
parents:
diff changeset
    70
inline TUint32 Register::GetCoreRegId(const Debug::TRegisterInfo aRegister)
hgs
parents:
diff changeset
    71
	{
hgs
parents:
diff changeset
    72
	return ((aRegister >> 8) & 0xff);
hgs
parents:
diff changeset
    73
	}
hgs
parents:
diff changeset
    74
hgs
parents:
diff changeset
    75
/**
hgs
parents:
diff changeset
    76
Get the CRm value of a coprocessor register
hgs
parents:
diff changeset
    77
@param aRegister register ID to analyse
hgs
parents:
diff changeset
    78
@return the CRm value of a coprocessor register
hgs
parents:
diff changeset
    79
*/
hgs
parents:
diff changeset
    80
inline TUint32 Register::GetCRm(const Debug::TRegisterInfo aRegister)
hgs
parents:
diff changeset
    81
	{
hgs
parents:
diff changeset
    82
	return ((aRegister >> 16) & 0xf);
hgs
parents:
diff changeset
    83
	}
hgs
parents:
diff changeset
    84
hgs
parents:
diff changeset
    85
/**
hgs
parents:
diff changeset
    86
Get the CRm value of a coprocessor register
hgs
parents:
diff changeset
    87
@param aRegister register ID to analyse
hgs
parents:
diff changeset
    88
@return the CRm value of a coprocessor register
hgs
parents:
diff changeset
    89
*/
hgs
parents:
diff changeset
    90
inline TUint32 Register::GetCRn(const Debug::TRegisterInfo aRegister)
hgs
parents:
diff changeset
    91
	{
hgs
parents:
diff changeset
    92
	return ((aRegister >> 20) & 0xf);
hgs
parents:
diff changeset
    93
	}
hgs
parents:
diff changeset
    94
hgs
parents:
diff changeset
    95
/**
hgs
parents:
diff changeset
    96
Get the Opcode1 value of a coprocessor register
hgs
parents:
diff changeset
    97
@param aRegister register ID to analyse
hgs
parents:
diff changeset
    98
@return the Opcode1 value of a coprocessor register
hgs
parents:
diff changeset
    99
*/
hgs
parents:
diff changeset
   100
inline TUint32 Register::GetOpcode1(const Debug::TRegisterInfo aRegister)
hgs
parents:
diff changeset
   101
	{
hgs
parents:
diff changeset
   102
	return ((aRegister >> 24) & 0x8);
hgs
parents:
diff changeset
   103
	}
hgs
parents:
diff changeset
   104
	
hgs
parents:
diff changeset
   105
/**
hgs
parents:
diff changeset
   106
Get the Opcode2 value of a coprocessor register
hgs
parents:
diff changeset
   107
@param aRegister register ID to analyse
hgs
parents:
diff changeset
   108
@return the Opcode2 value of a coprocessor register
hgs
parents:
diff changeset
   109
*/
hgs
parents:
diff changeset
   110
inline TUint32 Register::GetOpcode2(const Debug::TRegisterInfo aRegister)
hgs
parents:
diff changeset
   111
	{
hgs
parents:
diff changeset
   112
	return ((aRegister >> 27) & 0x8);
hgs
parents:
diff changeset
   113
	}
hgs
parents:
diff changeset
   114
hgs
parents:
diff changeset
   115
/**
hgs
parents:
diff changeset
   116
Get the coprocessor number of a coprocessor register
hgs
parents:
diff changeset
   117
@param aRegister register ID to analyse
hgs
parents:
diff changeset
   118
@return the coprocessor number of a coprocessor register
hgs
parents:
diff changeset
   119
*/
hgs
parents:
diff changeset
   120
inline TUint32 Register::GetCoproNum(const Debug::TRegisterInfo aRegister)
hgs
parents:
diff changeset
   121
	{
hgs
parents:
diff changeset
   122
	return ((aRegister >> 8) & 0xff);
hgs
parents:
diff changeset
   123
	}
hgs
parents:
diff changeset
   124
hgs
parents:
diff changeset
   125
//
hgs
parents:
diff changeset
   126
// class TCapsRM_DebugDriver
hgs
parents:
diff changeset
   127
//
hgs
parents:
diff changeset
   128
class TCapsRM_DebugDriver
hgs
parents:
diff changeset
   129
{
hgs
parents:
diff changeset
   130
public:
hgs
parents:
diff changeset
   131
	TVersion	iVersion;
hgs
parents:
diff changeset
   132
};
hgs
parents:
diff changeset
   133
hgs
parents:
diff changeset
   134
/**
hgs
parents:
diff changeset
   135
Stores listings information for passing between the DSS and the kernel driver
hgs
parents:
diff changeset
   136
*/
hgs
parents:
diff changeset
   137
class TListInformation
hgs
parents:
diff changeset
   138
{
hgs
parents:
diff changeset
   139
public:
hgs
parents:
diff changeset
   140
	inline TListInformation(const Debug::TListId aType=(Debug::TListId)NULL, const Debug::TListScope aListScope=(Debug::TListScope)NULL, TDes8* aBuffer=NULL, TUint32* aDataSize=NULL, TUint64 aTargetId=0)
hgs
parents:
diff changeset
   141
		: iType(aType),
hgs
parents:
diff changeset
   142
		  iListScope(aListScope),
hgs
parents:
diff changeset
   143
		  iBuffer(aBuffer),
hgs
parents:
diff changeset
   144
		  iDataSize(aDataSize),
hgs
parents:
diff changeset
   145
		  iTargetId(aTargetId) {};
hgs
parents:
diff changeset
   146
public:
hgs
parents:
diff changeset
   147
	Debug::TListId iType;
hgs
parents:
diff changeset
   148
	Debug::TListScope iListScope;
hgs
parents:
diff changeset
   149
	TDes8* iBuffer;
hgs
parents:
diff changeset
   150
	TUint32* iDataSize;
hgs
parents:
diff changeset
   151
	TUint64 iTargetId;
hgs
parents:
diff changeset
   152
};
hgs
parents:
diff changeset
   153
hgs
parents:
diff changeset
   154
/**
hgs
parents:
diff changeset
   155
Data structure to hold information to the crash flash
hgs
parents:
diff changeset
   156
(Possibly: Could be expanded to hold on configuration data too)
hgs
parents:
diff changeset
   157
*/
hgs
parents:
diff changeset
   158
class TFlashInfo
hgs
parents:
diff changeset
   159
{
hgs
parents:
diff changeset
   160
public:
hgs
parents:
diff changeset
   161
	inline TFlashInfo(TUint32 aPos, TUint32* aSize, TDes8* aData)
hgs
parents:
diff changeset
   162
		:iPos(aPos),
hgs
parents:
diff changeset
   163
		iSize(aSize),
hgs
parents:
diff changeset
   164
		iData(aData){};
hgs
parents:
diff changeset
   165
public:
hgs
parents:
diff changeset
   166
	TUint32 iPos;
hgs
parents:
diff changeset
   167
	TUint32* iSize;	
hgs
parents:
diff changeset
   168
	 TDes8* iData;	
hgs
parents:
diff changeset
   169
};
hgs
parents:
diff changeset
   170
//
hgs
parents:
diff changeset
   171
// class TRM_DebugMemoryInfo
hgs
parents:
diff changeset
   172
//
hgs
parents:
diff changeset
   173
class TRM_DebugMemoryInfo
hgs
parents:
diff changeset
   174
{
hgs
parents:
diff changeset
   175
public:
hgs
parents:
diff changeset
   176
hgs
parents:
diff changeset
   177
	inline TRM_DebugMemoryInfo(const TUint32 aAddress, const TUint32 aLength, TDesC8 *aData)
hgs
parents:
diff changeset
   178
				: iAddress(aAddress),
hgs
parents:
diff changeset
   179
				  iLength(aLength),
hgs
parents:
diff changeset
   180
				  iData(aData) {};
hgs
parents:
diff changeset
   181
	
hgs
parents:
diff changeset
   182
public:
hgs
parents:
diff changeset
   183
hgs
parents:
diff changeset
   184
	TUint32 iAddress;
hgs
parents:
diff changeset
   185
	TUint32	iLength;
hgs
parents:
diff changeset
   186
	TDesC8*	iData;
hgs
parents:
diff changeset
   187
};
hgs
parents:
diff changeset
   188
hgs
parents:
diff changeset
   189
hgs
parents:
diff changeset
   190
/**
hgs
parents:
diff changeset
   191
@deprecated
hgs
parents:
diff changeset
   192
This class is only used by TRK phase 1 functions.
hgs
parents:
diff changeset
   193
hgs
parents:
diff changeset
   194
@see TRM_DebugRegisterInformation which offers similar storage suitable for use
hgs
parents:
diff changeset
   195
with the TRK pahse 2 API.
hgs
parents:
diff changeset
   196
*/
hgs
parents:
diff changeset
   197
class TRM_DebugRegisterInfo
hgs
parents:
diff changeset
   198
{
hgs
parents:
diff changeset
   199
public:
hgs
parents:
diff changeset
   200
hgs
parents:
diff changeset
   201
	inline TRM_DebugRegisterInfo(const TInt16 aFirstRegister, const TInt16 aLastRegister, TDesC8 *aValues)
hgs
parents:
diff changeset
   202
				: iFirstRegister(aFirstRegister),
hgs
parents:
diff changeset
   203
				  iLastRegister(aLastRegister),
hgs
parents:
diff changeset
   204
				  iValues(aValues) {};
hgs
parents:
diff changeset
   205
	
hgs
parents:
diff changeset
   206
public:
hgs
parents:
diff changeset
   207
hgs
parents:
diff changeset
   208
	TInt16	iFirstRegister;
hgs
parents:
diff changeset
   209
	TInt16	iLastRegister;
hgs
parents:
diff changeset
   210
	TDesC8*	iValues;
hgs
parents:
diff changeset
   211
};
hgs
parents:
diff changeset
   212
hgs
parents:
diff changeset
   213
/**
hgs
parents:
diff changeset
   214
Structure used to store information about registers
hgs
parents:
diff changeset
   215
*/
hgs
parents:
diff changeset
   216
class TRM_DebugRegisterInformation
hgs
parents:
diff changeset
   217
{
hgs
parents:
diff changeset
   218
public:
hgs
parents:
diff changeset
   219
hgs
parents:
diff changeset
   220
	inline TRM_DebugRegisterInformation(const TDes8 *aRegisterIds=NULL, TDes8 *aRegisterValues=NULL, TDes8 *aRegisterFlags=NULL)
hgs
parents:
diff changeset
   221
		: iRegisterIds(aRegisterIds),
hgs
parents:
diff changeset
   222
		  iRegisterValues(aRegisterValues),
hgs
parents:
diff changeset
   223
		  iRegisterFlags(aRegisterFlags) {};
hgs
parents:
diff changeset
   224
	
hgs
parents:
diff changeset
   225
public:
hgs
parents:
diff changeset
   226
hgs
parents:
diff changeset
   227
	const TDes8* iRegisterIds;
hgs
parents:
diff changeset
   228
	TDes8* iRegisterValues;
hgs
parents:
diff changeset
   229
	TDes8* iRegisterFlags;
hgs
parents:
diff changeset
   230
};
hgs
parents:
diff changeset
   231
hgs
parents:
diff changeset
   232
//
hgs
parents:
diff changeset
   233
// class TRM_DebugTaskInfo
hgs
parents:
diff changeset
   234
//
hgs
parents:
diff changeset
   235
class TRM_DebugTaskInfo
hgs
parents:
diff changeset
   236
{
hgs
parents:
diff changeset
   237
public:
hgs
parents:
diff changeset
   238
hgs
parents:
diff changeset
   239
	inline TRM_DebugTaskInfo(TUint32 aOtherId)
hgs
parents:
diff changeset
   240
				: iId(0),
hgs
parents:
diff changeset
   241
				  iOtherId(aOtherId),
hgs
parents:
diff changeset
   242
				  iPriority(0) { iName.FillZ(); };
hgs
parents:
diff changeset
   243
hgs
parents:
diff changeset
   244
public:
hgs
parents:
diff changeset
   245
hgs
parents:
diff changeset
   246
	TUint32 iId;
hgs
parents:
diff changeset
   247
	TUint32 iOtherId;
hgs
parents:
diff changeset
   248
	TUint32 iPriority;	
hgs
parents:
diff changeset
   249
	TBuf8<KMaxName> iName;
hgs
parents:
diff changeset
   250
};
hgs
parents:
diff changeset
   251
hgs
parents:
diff changeset
   252
//
hgs
parents:
diff changeset
   253
// class TRM_DebugStepInfo
hgs
parents:
diff changeset
   254
//
hgs
parents:
diff changeset
   255
class TRM_DebugStepInfo
hgs
parents:
diff changeset
   256
{
hgs
parents:
diff changeset
   257
public:
hgs
parents:
diff changeset
   258
hgs
parents:
diff changeset
   259
	inline TRM_DebugStepInfo(const TUint32 aStartAddress, const TUint32 aStopAddress, const TBool aStepInto)
hgs
parents:
diff changeset
   260
				: iStartAddress(aStartAddress),
hgs
parents:
diff changeset
   261
				  iStopAddress(aStopAddress),
hgs
parents:
diff changeset
   262
				  iStepInto(aStepInto) {};
hgs
parents:
diff changeset
   263
hgs
parents:
diff changeset
   264
public:
hgs
parents:
diff changeset
   265
hgs
parents:
diff changeset
   266
	TUint32 iStartAddress;
hgs
parents:
diff changeset
   267
	TUint32 iStopAddress;
hgs
parents:
diff changeset
   268
	TBool iStepInto;
hgs
parents:
diff changeset
   269
};
hgs
parents:
diff changeset
   270
hgs
parents:
diff changeset
   271
hgs
parents:
diff changeset
   272
//
hgs
parents:
diff changeset
   273
// class TRM_DebugDriverInfo
hgs
parents:
diff changeset
   274
//
hgs
parents:
diff changeset
   275
class TRM_DebugDriverInfo
hgs
parents:
diff changeset
   276
{
hgs
parents:
diff changeset
   277
public:
hgs
parents:
diff changeset
   278
hgs
parents:
diff changeset
   279
	TUint32 iPanic1Address;
hgs
parents:
diff changeset
   280
	TUint32 iPanic2Address;
hgs
parents:
diff changeset
   281
	TUint32 iException1Address;
hgs
parents:
diff changeset
   282
	TUint32 iException2Address;
hgs
parents:
diff changeset
   283
	TUint32 iLibraryLoadedAddress;
hgs
parents:
diff changeset
   284
	TUint32 iUserLibraryEnd;
hgs
parents:
diff changeset
   285
};
hgs
parents:
diff changeset
   286
hgs
parents:
diff changeset
   287
hgs
parents:
diff changeset
   288
//
hgs
parents:
diff changeset
   289
// class TRM_DebugProcessInfo
hgs
parents:
diff changeset
   290
//
hgs
parents:
diff changeset
   291
class TRM_DebugProcessInfo
hgs
parents:
diff changeset
   292
{
hgs
parents:
diff changeset
   293
public:
hgs
parents:
diff changeset
   294
hgs
parents:
diff changeset
   295
	inline TRM_DebugProcessInfo(TUint32 *aCodeAddress, TUint32 *aDataAddress)
hgs
parents:
diff changeset
   296
				: iCodeAddress(aCodeAddress),
hgs
parents:
diff changeset
   297
				  iDataAddress(aDataAddress) {};
hgs
parents:
diff changeset
   298
hgs
parents:
diff changeset
   299
public:
hgs
parents:
diff changeset
   300
hgs
parents:
diff changeset
   301
	TUint32* iCodeAddress;
hgs
parents:
diff changeset
   302
	TUint32* iDataAddress;
hgs
parents:
diff changeset
   303
};
hgs
parents:
diff changeset
   304
hgs
parents:
diff changeset
   305
//
hgs
parents:
diff changeset
   306
// class TRM_DebugEventActionInfo
hgs
parents:
diff changeset
   307
//
hgs
parents:
diff changeset
   308
class TRM_DebugEventActionInfo
hgs
parents:
diff changeset
   309
{
hgs
parents:
diff changeset
   310
public:
hgs
parents:
diff changeset
   311
	inline TRM_DebugEventActionInfo(TUint32 aEvent, TUint32 aAction, TUint64 aAgentId)
hgs
parents:
diff changeset
   312
		: iEvent(aEvent),
hgs
parents:
diff changeset
   313
		iAction(aAction),
hgs
parents:
diff changeset
   314
		iAgentId(aAgentId) {};
hgs
parents:
diff changeset
   315
public:
hgs
parents:
diff changeset
   316
	TUint32 iEvent;
hgs
parents:
diff changeset
   317
	TUint32 iAction;
hgs
parents:
diff changeset
   318
	TUint64 iAgentId;
hgs
parents:
diff changeset
   319
};
hgs
parents:
diff changeset
   320
hgs
parents:
diff changeset
   321
//
hgs
parents:
diff changeset
   322
// class TRM_DebugEventInfo
hgs
parents:
diff changeset
   323
//
hgs
parents:
diff changeset
   324
class TRM_DebugEventInfo
hgs
parents:
diff changeset
   325
{
hgs
parents:
diff changeset
   326
public:
hgs
parents:
diff changeset
   327
	inline TRM_DebugEventInfo(TDesC8& aProcessName, TUint32& aBufSize)
hgs
parents:
diff changeset
   328
		: iProcessName(aProcessName),
hgs
parents:
diff changeset
   329
		iBufSize(aBufSize) {};
hgs
parents:
diff changeset
   330
hgs
parents:
diff changeset
   331
public:
hgs
parents:
diff changeset
   332
	TDesC8& iProcessName;
hgs
parents:
diff changeset
   333
	TUint32& iBufSize;
hgs
parents:
diff changeset
   334
};
hgs
parents:
diff changeset
   335
hgs
parents:
diff changeset
   336
//
hgs
parents:
diff changeset
   337
// class TRMD_DebugAgentId
hgs
parents:
diff changeset
   338
//
hgs
parents:
diff changeset
   339
class TRM_DebugAgentId
hgs
parents:
diff changeset
   340
{
hgs
parents:
diff changeset
   341
public:
hgs
parents:
diff changeset
   342
	inline TRM_DebugAgentId(TUint64 aAgentId)
hgs
parents:
diff changeset
   343
		: iAgentId(aAgentId) {};
hgs
parents:
diff changeset
   344
hgs
parents:
diff changeset
   345
public:
hgs
parents:
diff changeset
   346
	TUint64 iAgentId;
hgs
parents:
diff changeset
   347
};
hgs
parents:
diff changeset
   348
hgs
parents:
diff changeset
   349
//
hgs
parents:
diff changeset
   350
// Class TRMD_DebugCancelInfo
hgs
parents:
diff changeset
   351
//
hgs
parents:
diff changeset
   352
class TRMD_DebugCancelInfo
hgs
parents:
diff changeset
   353
{
hgs
parents:
diff changeset
   354
public:
hgs
parents:
diff changeset
   355
	inline TRMD_DebugCancelInfo(TUint32 aCancelRequest,TDesC8& aProcessName, TUint64 aAgentId)
hgs
parents:
diff changeset
   356
		: iCancelRequest(aCancelRequest),
hgs
parents:
diff changeset
   357
		iProcessName(aProcessName),
hgs
parents:
diff changeset
   358
		iAgentId(aAgentId) {};
hgs
parents:
diff changeset
   359
hgs
parents:
diff changeset
   360
	inline TRMD_DebugCancelInfo(void)
hgs
parents:
diff changeset
   361
		: iCancelRequest(0),
hgs
parents:
diff changeset
   362
	iAgentId(0)
hgs
parents:
diff changeset
   363
	{
hgs
parents:
diff changeset
   364
	};
hgs
parents:
diff changeset
   365
hgs
parents:
diff changeset
   366
public:
hgs
parents:
diff changeset
   367
	TUint32 iCancelRequest;
hgs
parents:
diff changeset
   368
	TBuf8<KMaxName> iProcessName;
hgs
parents:
diff changeset
   369
	TUint64 iAgentId;
hgs
parents:
diff changeset
   370
};
hgs
parents:
diff changeset
   371
hgs
parents:
diff changeset
   372
class TEventMetaData
hgs
parents:
diff changeset
   373
	{
hgs
parents:
diff changeset
   374
public:
hgs
parents:
diff changeset
   375
	TBuf8<KMaxName> iTargetProcessName;
hgs
parents:
diff changeset
   376
	TUint64 iDebugAgentProcessId;
hgs
parents:
diff changeset
   377
	};
hgs
parents:
diff changeset
   378
hgs
parents:
diff changeset
   379
/**
hgs
parents:
diff changeset
   380
@internalComponent
hgs
parents:
diff changeset
   381
*/
hgs
parents:
diff changeset
   382
class TSetBreakInfo
hgs
parents:
diff changeset
   383
{
hgs
parents:
diff changeset
   384
public:
hgs
parents:
diff changeset
   385
hgs
parents:
diff changeset
   386
	inline TSetBreakInfo(Debug::TBreakId* aBreakId,
hgs
parents:
diff changeset
   387
		TUint64 aId,\
hgs
parents:
diff changeset
   388
		TUint32 aAddress,\
hgs
parents:
diff changeset
   389
		Debug::TArchitectureMode aMode,
hgs
parents:
diff changeset
   390
		TBool aThreadSpecific)
hgs
parents:
diff changeset
   391
				: iBreakId(aBreakId),
hgs
parents:
diff changeset
   392
				  iId(aId),
hgs
parents:
diff changeset
   393
				  iAddress(aAddress),
hgs
parents:
diff changeset
   394
				  iMode(aMode),
hgs
parents:
diff changeset
   395
       				  iThreadSpecific(aThreadSpecific) {};
hgs
parents:
diff changeset
   396
hgs
parents:
diff changeset
   397
inline TSetBreakInfo(void)
hgs
parents:
diff changeset
   398
			: iBreakId((Debug::TBreakId*)0),
hgs
parents:
diff changeset
   399
			  iId(0),
hgs
parents:
diff changeset
   400
			  iAddress(0),
hgs
parents:
diff changeset
   401
			  iMode(Debug::EArmMode),
hgs
parents:
diff changeset
   402
       			  iThreadSpecific(ETrue) {};
hgs
parents:
diff changeset
   403
hgs
parents:
diff changeset
   404
hgs
parents:
diff changeset
   405
public:
hgs
parents:
diff changeset
   406
	Debug::TBreakId* iBreakId;
hgs
parents:
diff changeset
   407
	TUint64 iId;
hgs
parents:
diff changeset
   408
	TUint32 iAddress;
hgs
parents:
diff changeset
   409
	Debug::TArchitectureMode iMode;
hgs
parents:
diff changeset
   410
	TBool iThreadSpecific;
hgs
parents:
diff changeset
   411
};
hgs
parents:
diff changeset
   412
hgs
parents:
diff changeset
   413
/**
hgs
parents:
diff changeset
   414
@internalComponent
hgs
parents:
diff changeset
   415
*/
hgs
parents:
diff changeset
   416
class TModifyBreakInfo
hgs
parents:
diff changeset
   417
{
hgs
parents:
diff changeset
   418
public:
hgs
parents:
diff changeset
   419
hgs
parents:
diff changeset
   420
	inline TModifyBreakInfo(Debug::TBreakId aBreakId,\
hgs
parents:
diff changeset
   421
		const TUint64 aThreadId,\
hgs
parents:
diff changeset
   422
		const TUint32 aAddress,\
hgs
parents:
diff changeset
   423
		const Debug::TArchitectureMode aMode)
hgs
parents:
diff changeset
   424
				: iBreakId(aBreakId),
hgs
parents:
diff changeset
   425
				  iThreadId(aThreadId),
hgs
parents:
diff changeset
   426
				  iAddress(aAddress),
hgs
parents:
diff changeset
   427
				  iMode(aMode) {};
hgs
parents:
diff changeset
   428
hgs
parents:
diff changeset
   429
public:
hgs
parents:
diff changeset
   430
	const Debug::TBreakId iBreakId;
hgs
parents:
diff changeset
   431
	const TUint64 iThreadId;
hgs
parents:
diff changeset
   432
	const TUint32 iAddress;
hgs
parents:
diff changeset
   433
	const Debug::TArchitectureMode iMode;
hgs
parents:
diff changeset
   434
};
hgs
parents:
diff changeset
   435
hgs
parents:
diff changeset
   436
/**
hgs
parents:
diff changeset
   437
@internalComponent
hgs
parents:
diff changeset
   438
*/
hgs
parents:
diff changeset
   439
class TModifyProcessBreakInfo
hgs
parents:
diff changeset
   440
{
hgs
parents:
diff changeset
   441
public:
hgs
parents:
diff changeset
   442
hgs
parents:
diff changeset
   443
	inline TModifyProcessBreakInfo(Debug::TBreakId aBreakId,\
hgs
parents:
diff changeset
   444
		const TUint64 aProcessId,\
hgs
parents:
diff changeset
   445
		const TUint32 aAddress,\
hgs
parents:
diff changeset
   446
		const Debug::TArchitectureMode aMode)
hgs
parents:
diff changeset
   447
				: iBreakId(aBreakId),
hgs
parents:
diff changeset
   448
				  iProcessId(aProcessId),
hgs
parents:
diff changeset
   449
				  iAddress(aAddress),
hgs
parents:
diff changeset
   450
				  iMode(aMode) {};
hgs
parents:
diff changeset
   451
hgs
parents:
diff changeset
   452
public:
hgs
parents:
diff changeset
   453
	const Debug::TBreakId iBreakId;
hgs
parents:
diff changeset
   454
	const TUint64 iProcessId;
hgs
parents:
diff changeset
   455
	const TUint32 iAddress;
hgs
parents:
diff changeset
   456
	const Debug::TArchitectureMode iMode;
hgs
parents:
diff changeset
   457
};
hgs
parents:
diff changeset
   458
hgs
parents:
diff changeset
   459
/**
hgs
parents:
diff changeset
   460
@internalComponent
hgs
parents:
diff changeset
   461
*/
hgs
parents:
diff changeset
   462
class TGetBreakInfo
hgs
parents:
diff changeset
   463
{
hgs
parents:
diff changeset
   464
public:
hgs
parents:
diff changeset
   465
hgs
parents:
diff changeset
   466
	inline TGetBreakInfo(Debug::TBreakId aBreakId,\
hgs
parents:
diff changeset
   467
		TUint64& aId,\
hgs
parents:
diff changeset
   468
		TUint32& aAddress,\
hgs
parents:
diff changeset
   469
		Debug::TArchitectureMode& aMode,
hgs
parents:
diff changeset
   470
		TBool& aThreadSpecific)
hgs
parents:
diff changeset
   471
				: iBreakId(aBreakId),
hgs
parents:
diff changeset
   472
				  iId(&aId),
hgs
parents:
diff changeset
   473
				  iAddress(&aAddress),
hgs
parents:
diff changeset
   474
				  iMode(&aMode),
hgs
parents:
diff changeset
   475
       				  iThreadSpecific(&aThreadSpecific) {};
hgs
parents:
diff changeset
   476
hgs
parents:
diff changeset
   477
	inline TGetBreakInfo()
hgs
parents:
diff changeset
   478
				: iBreakId((Debug::TBreakId)0),
hgs
parents:
diff changeset
   479
				  iId((TUint64*)0),
hgs
parents:
diff changeset
   480
				  iAddress((TUint32*)0),
hgs
parents:
diff changeset
   481
				  iMode((Debug::TArchitectureMode*)0),
hgs
parents:
diff changeset
   482
       				  iThreadSpecific((TBool*)0)	{};
hgs
parents:
diff changeset
   483
hgs
parents:
diff changeset
   484
public:
hgs
parents:
diff changeset
   485
	const Debug::TBreakId iBreakId;
hgs
parents:
diff changeset
   486
	TUint64* iId;
hgs
parents:
diff changeset
   487
	TUint32* iAddress;
hgs
parents:
diff changeset
   488
	Debug::TArchitectureMode* iMode;
hgs
parents:
diff changeset
   489
	TBool* iThreadSpecific;
hgs
parents:
diff changeset
   490
};
hgs
parents:
diff changeset
   491
hgs
parents:
diff changeset
   492
//
hgs
parents:
diff changeset
   493
// class RRM_DebugDriver
hgs
parents:
diff changeset
   494
//
hgs
parents:
diff changeset
   495
class RRM_DebugDriver : public RBusLogicalChannel
hgs
parents:
diff changeset
   496
{
hgs
parents:
diff changeset
   497
public:
hgs
parents:
diff changeset
   498
hgs
parents:
diff changeset
   499
	enum TControl
hgs
parents:
diff changeset
   500
	{
hgs
parents:
diff changeset
   501
		EControlSetBreak = 0,
hgs
parents:
diff changeset
   502
		EControlClearBreak,
hgs
parents:
diff changeset
   503
		EControlModifyBreak,
hgs
parents:
diff changeset
   504
		EControlBreakInfo,
hgs
parents:
diff changeset
   505
		EControlSuspendThread,
hgs
parents:
diff changeset
   506
		EControlResumeThread,
hgs
parents:
diff changeset
   507
		EControlStepRange,
hgs
parents:
diff changeset
   508
		EControlReadMemory,
hgs
parents:
diff changeset
   509
		EControlWriteMemory,
hgs
parents:
diff changeset
   510
		EControlReadRegisters,
hgs
parents:
diff changeset
   511
		EControlWriteRegisters,
hgs
parents:
diff changeset
   512
		EControlGetStaticLibraryInfo,
hgs
parents:
diff changeset
   513
		EControlGetDebugFunctionalityBufSize,
hgs
parents:
diff changeset
   514
		EControlGetDebugFunctionality,
hgs
parents:
diff changeset
   515
		EControlReadRegistersLegacy,
hgs
parents:
diff changeset
   516
		EControlWriteRegistersLegacy,		
hgs
parents:
diff changeset
   517
		EControlGetMemoryOperationMaxBlockSize,		
hgs
parents:
diff changeset
   518
		EControlAttachProcess,
hgs
parents:
diff changeset
   519
		EControlDetachProcess,
hgs
parents:
diff changeset
   520
		EControlDetachAgent,
hgs
parents:
diff changeset
   521
		EControlSetEventAction,
hgs
parents:
diff changeset
   522
		EControlGetList,
hgs
parents:
diff changeset
   523
		EControlStep,
hgs
parents:
diff changeset
   524
		EControlIsDebuggable,
hgs
parents:
diff changeset
   525
		EControlKillProcess,		
hgs
parents:
diff changeset
   526
		EControlModifyProcessBreak,
hgs
parents:
diff changeset
   527
	};
hgs
parents:
diff changeset
   528
	
hgs
parents:
diff changeset
   529
	enum TRequest
hgs
parents:
diff changeset
   530
	{
hgs
parents:
diff changeset
   531
		ERequestGetEvent=0x0, ERequestGetEventCancel=0x1
hgs
parents:
diff changeset
   532
	};	
hgs
parents:
diff changeset
   533
		
hgs
parents:
diff changeset
   534
public:
hgs
parents:
diff changeset
   535
hgs
parents:
diff changeset
   536
	inline TInt Open(const TRM_DebugDriverInfo aDriverInfo);
hgs
parents:
diff changeset
   537
hgs
parents:
diff changeset
   538
	inline TInt	SetBreak(Debug::TBreakId &aBreakId,const TUint32 aThreadId, const TUint32 aAddress, const Debug::TArchitectureMode aThumbMode );
hgs
parents:
diff changeset
   539
	inline TInt	SetProcessBreak(Debug::TBreakId &aBreakId,const TUint32 aProcessId, const TUint32 aAddress, const Debug::TArchitectureMode aThumbMode );
hgs
parents:
diff changeset
   540
	
hgs
parents:
diff changeset
   541
	inline TInt	ClearBreak(const TInt32 aBreakId);
hgs
parents:
diff changeset
   542
	
hgs
parents:
diff changeset
   543
	inline TInt	ModifyBreak(const Debug::TBreakId aBreakId, const TUint32 aThreadId, const TUint32 aAddress, const Debug::TArchitectureMode aArchitectureMode );
hgs
parents:
diff changeset
   544
	inline TInt	ModifyProcessBreak(const Debug::TBreakId aBreakId, const TUint32 aProcessId, const TUint32 aAddress, const Debug::TArchitectureMode aArchitectureMode );
hgs
parents:
diff changeset
   545
	
hgs
parents:
diff changeset
   546
	inline TInt BreakInfo(const Debug::TBreakId aBreakId, TUint64& aId, TUint32& aAddress, Debug::TArchitectureMode& aMode, TBool& aThreadSpecific);
hgs
parents:
diff changeset
   547
	
hgs
parents:
diff changeset
   548
	inline TInt	SuspendThread(const TUint32 aThreadId);
hgs
parents:
diff changeset
   549
	inline TInt	ResumeThread(const TUint32 aThreadId);
hgs
parents:
diff changeset
   550
	inline TInt	StepRange(const TUint32 aThreadId, const TUint32 aStartAddress, const TUint32 aStopAddress, TBool aStepInto);
hgs
parents:
diff changeset
   551
	inline TInt ReadMemory(const TUint32 aThreadId, const TUint32 aAddress, const TUint32 aLength, TDes8 &aData);
hgs
parents:
diff changeset
   552
	inline TInt WriteMemory(const TUint32 aThreadId, const TUint32 aAddress, const TUint32 aLength, const TDesC8 &aData);
hgs
parents:
diff changeset
   553
	inline TInt ReadRegisters(const TUint32 aThreadId, const TDes8 &aRegisterIds, TDes8 &aRegisterValues, TDes8 &aRegisterFlags);
hgs
parents:
diff changeset
   554
	inline TInt WriteRegisters(const TUint32 aThreadId, const TDes8 &aRegisterIds, const TDes8 &aRegisterValues, TDes8 &aRegisterFlags);
hgs
parents:
diff changeset
   555
	inline TInt ReadRegisters(const TUint32 aThreadId, const TInt32 aFirstRegister, const TInt32 aLastRegister, TDes8 &aValues);
hgs
parents:
diff changeset
   556
	inline TInt WriteRegisters(const TUint32 aThreadId, const TInt32 aFirstRegister, const TInt32 aLastRegister, TDesC8 &aValues);
hgs
parents:
diff changeset
   557
	inline void GetEvent(TDesC8& aProcessName, TUint64 aAgentId, TRequestStatus &aStatus, Debug::TEventInfo &aEventInfo);
hgs
parents:
diff changeset
   558
	inline void CancelGetEvent(TDesC8& aProcessName, TUint64 aAgentId);
hgs
parents:
diff changeset
   559
//	inline TInt GetProcessInfo(const TInt aIndex, TRM_DebugTaskInfo &aInfo);
hgs
parents:
diff changeset
   560
//	inline TInt GetThreadInfo(const TInt aIndex, TRM_DebugTaskInfo &aInfo);
hgs
parents:
diff changeset
   561
	inline TInt GetStaticLibraryInfo(const TInt aIndex, Debug::TEventInfo &aInfo);
hgs
parents:
diff changeset
   562
	inline TInt GetDebugFunctionalityBufSize(TUint32 &aBufSize);
hgs
parents:
diff changeset
   563
	inline TInt GetDebugFunctionality(TDes8& aDebugFunctionality);
hgs
parents:
diff changeset
   564
	inline TInt GetMemoryOperationMaxBlockSize(TUint32 &aMaxSize);
hgs
parents:
diff changeset
   565
	inline TInt AttachProcess(TDesC8& aProcessName, TUint64 aAgentId);
hgs
parents:
diff changeset
   566
	inline TInt DetachProcess(TDesC8& aProcessName, TUint64 aAgentId);
hgs
parents:
diff changeset
   567
	inline TInt DetachAgent(TUint64 aAgentId);
hgs
parents:
diff changeset
   568
	inline TInt SetEventAction(TDesC8& aProcessName, Debug::TEventType aEvent, Debug::TKernelEventAction aEventAction, TUint64 aAgentId);
hgs
parents:
diff changeset
   569
	inline TInt GetList(const Debug::TListId aType, const Debug::TListScope aListScope, const TUint64 aTargetId, const TUint64 aDebugProcessId, TDes8& aBuffer, TUint32& aDataSize);
hgs
parents:
diff changeset
   570
	inline TInt Step(const TUint32 aThreadId, const TUint32 aNumSteps);
hgs
parents:
diff changeset
   571
	inline TInt IsDebuggable(const TUint32 aProcessId);
hgs
parents:
diff changeset
   572
	inline TInt KillProcess(const TUint32 aProcessId, const TInt32 aReason);
hgs
parents:
diff changeset
   573
};
hgs
parents:
diff changeset
   574
hgs
parents:
diff changeset
   575
_LIT(KRM_DebugDriverName,"RM Debug Driver");
hgs
parents:
diff changeset
   576
hgs
parents:
diff changeset
   577
//priority set equal to that of KDfcThread0Priority defined in e32/kernel/sinit.cpp
hgs
parents:
diff changeset
   578
const TInt KRmDebugDriverThreadPriority = 27;
hgs
parents:
diff changeset
   579
hgs
parents:
diff changeset
   580
// Version information
hgs
parents:
diff changeset
   581
const TInt KMajorVersionNumber=2;
hgs
parents:
diff changeset
   582
const TInt KMinorVersionNumber=1;
hgs
parents:
diff changeset
   583
const TInt KBuildVersionNumber=0;
hgs
parents:
diff changeset
   584
hgs
parents:
diff changeset
   585
hgs
parents:
diff changeset
   586
inline TInt RRM_DebugDriver::Open(const TRM_DebugDriverInfo aDriverInfo)
hgs
parents:
diff changeset
   587
{
hgs
parents:
diff changeset
   588
	TBuf8<32> buf;
hgs
parents:
diff changeset
   589
	buf.Append((TUint8*)&aDriverInfo.iPanic1Address, 4);
hgs
parents:
diff changeset
   590
	buf.Append((TUint8*)&aDriverInfo.iPanic2Address, 4);
hgs
parents:
diff changeset
   591
	buf.Append((TUint8*)&aDriverInfo.iException1Address, 4);
hgs
parents:
diff changeset
   592
	buf.Append((TUint8*)&aDriverInfo.iException2Address, 4);
hgs
parents:
diff changeset
   593
	buf.Append((TUint8*)&aDriverInfo.iLibraryLoadedAddress, 4);
hgs
parents:
diff changeset
   594
	buf.Append((TUint8*)&aDriverInfo.iUserLibraryEnd, 4);
hgs
parents:
diff changeset
   595
	
hgs
parents:
diff changeset
   596
	#ifdef EKA2
hgs
parents:
diff changeset
   597
	return DoCreate(KRM_DebugDriverName, TVersion(KMajorVersionNumber, KMinorVersionNumber, KBuildVersionNumber), KNullUnit, NULL, &buf);
hgs
parents:
diff changeset
   598
	#else
hgs
parents:
diff changeset
   599
	return DoCreate(KRM_DebugDriverName, TVersion(KMajorVersionNumber, KMinorVersionNumber, KBuildVersionNumber), NULL, KNullUnit, NULL, &buf);
hgs
parents:
diff changeset
   600
	#endif
hgs
parents:
diff changeset
   601
}
hgs
parents:
diff changeset
   602
hgs
parents:
diff changeset
   603
inline TInt RRM_DebugDriver::SetBreak(Debug::TBreakId &aBreakId, const TUint32 aThreadId, const TUint32 aAddress, const Debug::TArchitectureMode aMode )
hgs
parents:
diff changeset
   604
{
hgs
parents:
diff changeset
   605
	TSetBreakInfo info(&aBreakId, aThreadId, aAddress, aMode, ETrue);
hgs
parents:
diff changeset
   606
	return DoSvControl(EControlSetBreak, reinterpret_cast<TAny*>(&info),0);
hgs
parents:
diff changeset
   607
}
hgs
parents:
diff changeset
   608
inline TInt RRM_DebugDriver::SetProcessBreak(Debug::TBreakId &aBreakId, const TUint32 aProcessId, const TUint32 aAddress, const Debug::TArchitectureMode aMode )
hgs
parents:
diff changeset
   609
{
hgs
parents:
diff changeset
   610
	TSetBreakInfo info(&aBreakId, aProcessId, aAddress, aMode, EFalse);
hgs
parents:
diff changeset
   611
	return DoSvControl(EControlSetBreak, reinterpret_cast<TAny*>(&info),0);
hgs
parents:
diff changeset
   612
}
hgs
parents:
diff changeset
   613
hgs
parents:
diff changeset
   614
inline TInt RRM_DebugDriver::ClearBreak(const Debug::TBreakId aBreakId)
hgs
parents:
diff changeset
   615
{
hgs
parents:
diff changeset
   616
	return DoSvControl(EControlClearBreak, reinterpret_cast<TAny*>(aBreakId), 0);
hgs
parents:
diff changeset
   617
}
hgs
parents:
diff changeset
   618
hgs
parents:
diff changeset
   619
inline TInt RRM_DebugDriver::ModifyBreak(const Debug::TBreakId aBreakId, const TUint32 aThreadId, const TUint32 aAddress, const Debug::TArchitectureMode aMode)
hgs
parents:
diff changeset
   620
{
hgs
parents:
diff changeset
   621
	TModifyBreakInfo info(aBreakId, aThreadId, aAddress, aMode);
hgs
parents:
diff changeset
   622
	return DoControl(EControlModifyBreak, reinterpret_cast<TAny*>(&info), 0);
hgs
parents:
diff changeset
   623
}
hgs
parents:
diff changeset
   624
hgs
parents:
diff changeset
   625
inline TInt RRM_DebugDriver::ModifyProcessBreak(const Debug::TBreakId aBreakId, const TUint32 aProcessId, const TUint32 aAddress, const Debug::TArchitectureMode aMode)
hgs
parents:
diff changeset
   626
{
hgs
parents:
diff changeset
   627
	TModifyProcessBreakInfo info(aBreakId, aProcessId, aAddress, aMode);
hgs
parents:
diff changeset
   628
	return DoControl(EControlModifyProcessBreak, reinterpret_cast<TAny*>(&info), 0);
hgs
parents:
diff changeset
   629
}
hgs
parents:
diff changeset
   630
hgs
parents:
diff changeset
   631
inline TInt RRM_DebugDriver::BreakInfo(const Debug::TBreakId aBreakId, TUint64& aId, TUint32& aAddress, Debug::TArchitectureMode& aMode, TBool& aThreadSpecific)
hgs
parents:
diff changeset
   632
{
hgs
parents:
diff changeset
   633
	TGetBreakInfo info(aBreakId, aId, aAddress, aMode, aThreadSpecific);
hgs
parents:
diff changeset
   634
	return DoControl(EControlBreakInfo, reinterpret_cast<TAny*>(&info), 0);
hgs
parents:
diff changeset
   635
}
hgs
parents:
diff changeset
   636
hgs
parents:
diff changeset
   637
inline TInt RRM_DebugDriver::SuspendThread(const TUint32 aThreadId)
hgs
parents:
diff changeset
   638
{
hgs
parents:
diff changeset
   639
	return DoControl(EControlSuspendThread, reinterpret_cast<TAny*>(aThreadId));
hgs
parents:
diff changeset
   640
}
hgs
parents:
diff changeset
   641
hgs
parents:
diff changeset
   642
inline TInt RRM_DebugDriver::ResumeThread(const TUint32 aThreadId)
hgs
parents:
diff changeset
   643
{
hgs
parents:
diff changeset
   644
	return DoSvControl(EControlResumeThread, reinterpret_cast<TAny*>(aThreadId));
hgs
parents:
diff changeset
   645
}
hgs
parents:
diff changeset
   646
hgs
parents:
diff changeset
   647
inline TInt RRM_DebugDriver::StepRange(const TUint32 aThreadId, const TUint32 aStartAddress, const TUint32 aStopAddress, TBool aStepInto)
hgs
parents:
diff changeset
   648
{
hgs
parents:
diff changeset
   649
	TRM_DebugStepInfo info(aStartAddress, aStopAddress, aStepInto);
hgs
parents:
diff changeset
   650
	return DoSvControl(EControlStepRange, reinterpret_cast<TAny*>(aThreadId), (TAny*)&info);
hgs
parents:
diff changeset
   651
}
hgs
parents:
diff changeset
   652
hgs
parents:
diff changeset
   653
inline TInt RRM_DebugDriver::ReadMemory(const TUint32 aThreadId, const TUint32 aAddress, const TUint32 aLength, TDes8 &aData)
hgs
parents:
diff changeset
   654
{
hgs
parents:
diff changeset
   655
	TRM_DebugMemoryInfo info(aAddress, aLength, &aData);
hgs
parents:
diff changeset
   656
	return DoControl(EControlReadMemory, reinterpret_cast<TAny*>(aThreadId), (TAny*)&info);
hgs
parents:
diff changeset
   657
}
hgs
parents:
diff changeset
   658
hgs
parents:
diff changeset
   659
inline TInt RRM_DebugDriver::WriteMemory(const TUint32 aThreadId, const TUint32 aAddress, const TUint32 aLength, const TDesC8 &aData)
hgs
parents:
diff changeset
   660
{
hgs
parents:
diff changeset
   661
	TRM_DebugMemoryInfo info(aAddress, aLength, (TDesC8*)&aData);
hgs
parents:
diff changeset
   662
	return DoControl(EControlWriteMemory, reinterpret_cast<TAny*>(aThreadId), (TAny*)&info);
hgs
parents:
diff changeset
   663
}
hgs
parents:
diff changeset
   664
hgs
parents:
diff changeset
   665
inline TInt RRM_DebugDriver::ReadRegisters(const TUint32 aThreadId, const TDes8 &aRegisterIds, TDes8 &aRegisterValues, TDes8 &aRegisterFlags)
hgs
parents:
diff changeset
   666
	{
hgs
parents:
diff changeset
   667
	TRM_DebugRegisterInformation info(&aRegisterIds, &aRegisterValues, &aRegisterFlags);
hgs
parents:
diff changeset
   668
	return DoControl(EControlReadRegisters, reinterpret_cast<TAny*>(aThreadId), (TAny*)&info);	
hgs
parents:
diff changeset
   669
	}
hgs
parents:
diff changeset
   670
hgs
parents:
diff changeset
   671
inline TInt RRM_DebugDriver::WriteRegisters(const TUint32 aThreadId, const TDes8 &aRegisterIds, const TDes8 &aRegisterValues, TDes8 &aRegisterFlags)
hgs
parents:
diff changeset
   672
	{
hgs
parents:
diff changeset
   673
	TRM_DebugRegisterInformation info(&aRegisterIds, (TDes8*)&aRegisterValues, &aRegisterFlags);
hgs
parents:
diff changeset
   674
	return DoControl(EControlWriteRegisters, reinterpret_cast<TAny*>(aThreadId), (TAny*)&info);
hgs
parents:
diff changeset
   675
	}
hgs
parents:
diff changeset
   676
hgs
parents:
diff changeset
   677
inline TInt RRM_DebugDriver::ReadRegisters(const TUint32 aThreadId, const TInt32 aFirstRegister, const TInt32 aLastRegister, TDes8 &aValues)
hgs
parents:
diff changeset
   678
{
hgs
parents:
diff changeset
   679
	TRM_DebugRegisterInfo info(aFirstRegister, aLastRegister, &aValues);
hgs
parents:
diff changeset
   680
	return DoControl(EControlReadRegistersLegacy, reinterpret_cast<TAny*>(aThreadId), (TAny*)&info);
hgs
parents:
diff changeset
   681
}
hgs
parents:
diff changeset
   682
hgs
parents:
diff changeset
   683
inline TInt RRM_DebugDriver::WriteRegisters(const TUint32 aThreadId, const TInt32 aFirstRegister, const TInt32 aLastRegister, TDesC8 &aValues)
hgs
parents:
diff changeset
   684
{
hgs
parents:
diff changeset
   685
	TRM_DebugRegisterInfo info(aFirstRegister, aLastRegister, &aValues);
hgs
parents:
diff changeset
   686
	return DoControl(EControlWriteRegistersLegacy, reinterpret_cast<TAny*>(aThreadId), (TAny*)&info);
hgs
parents:
diff changeset
   687
}
hgs
parents:
diff changeset
   688
hgs
parents:
diff changeset
   689
inline void RRM_DebugDriver::GetEvent(TDesC8& aProcessName, TUint64 aAgentId, TRequestStatus &aStatus, Debug::TEventInfo &aEventInfo)
hgs
parents:
diff changeset
   690
{
hgs
parents:
diff changeset
   691
	// temporary object not needed beyond the DoRequest call
hgs
parents:
diff changeset
   692
	TEventMetaData eventMetaData;
hgs
parents:
diff changeset
   693
	eventMetaData.iTargetProcessName.Copy(aProcessName);
hgs
parents:
diff changeset
   694
	eventMetaData.iDebugAgentProcessId = aAgentId;
hgs
parents:
diff changeset
   695
	DoRequest(ERequestGetEvent, aStatus, (TAny*)&aEventInfo, (TAny*)&eventMetaData);
hgs
parents:
diff changeset
   696
}
hgs
parents:
diff changeset
   697
hgs
parents:
diff changeset
   698
inline void RRM_DebugDriver::CancelGetEvent(TDesC8& aProcessName, TUint64 aAgentId)
hgs
parents:
diff changeset
   699
{
hgs
parents:
diff changeset
   700
	TRMD_DebugCancelInfo info(ERequestGetEventCancel,aProcessName,aAgentId);
hgs
parents:
diff changeset
   701
	DoCancel(reinterpret_cast<TInt>(&info));
hgs
parents:
diff changeset
   702
}
hgs
parents:
diff changeset
   703
hgs
parents:
diff changeset
   704
inline TInt RRM_DebugDriver::GetStaticLibraryInfo(const TInt aIndex, Debug::TEventInfo &aInfo)
hgs
parents:
diff changeset
   705
{
hgs
parents:
diff changeset
   706
	return DoControl(EControlGetStaticLibraryInfo, reinterpret_cast<TAny*>(aIndex), (TAny*)&aInfo);
hgs
parents:
diff changeset
   707
}
hgs
parents:
diff changeset
   708
hgs
parents:
diff changeset
   709
inline TInt RRM_DebugDriver::GetDebugFunctionalityBufSize(TUint32 &aBufSize)
hgs
parents:
diff changeset
   710
{
hgs
parents:
diff changeset
   711
	return DoControl(EControlGetDebugFunctionalityBufSize, reinterpret_cast<TAny*>(&aBufSize));
hgs
parents:
diff changeset
   712
}
hgs
parents:
diff changeset
   713
hgs
parents:
diff changeset
   714
inline TInt RRM_DebugDriver::GetDebugFunctionality(TDes8& aDebugFunctionality)
hgs
parents:
diff changeset
   715
{
hgs
parents:
diff changeset
   716
	return DoControl(EControlGetDebugFunctionality,reinterpret_cast<TAny*>(&aDebugFunctionality));
hgs
parents:
diff changeset
   717
}
hgs
parents:
diff changeset
   718
hgs
parents:
diff changeset
   719
inline TInt RRM_DebugDriver::GetMemoryOperationMaxBlockSize(TUint32 &aMaxSize)
hgs
parents:
diff changeset
   720
{
hgs
parents:
diff changeset
   721
	return DoControl(EControlGetMemoryOperationMaxBlockSize, reinterpret_cast<TAny*>(&aMaxSize));
hgs
parents:
diff changeset
   722
}
hgs
parents:
diff changeset
   723
hgs
parents:
diff changeset
   724
inline TInt RRM_DebugDriver::AttachProcess(TDesC8& aProcessName, TUint64 aAgentId)
hgs
parents:
diff changeset
   725
{
hgs
parents:
diff changeset
   726
	TRM_DebugAgentId info(aAgentId);
hgs
parents:
diff changeset
   727
	return DoControl(EControlAttachProcess,reinterpret_cast<TAny*>(&aProcessName),reinterpret_cast<TAny*>(&info));
hgs
parents:
diff changeset
   728
}
hgs
parents:
diff changeset
   729
hgs
parents:
diff changeset
   730
inline TInt RRM_DebugDriver::DetachProcess(TDesC8& aProcessName, TUint64 aAgentId)
hgs
parents:
diff changeset
   731
{
hgs
parents:
diff changeset
   732
	TRM_DebugAgentId info(aAgentId);
hgs
parents:
diff changeset
   733
	return DoControl(EControlDetachProcess,reinterpret_cast<TAny*>(&aProcessName),reinterpret_cast<TAny*>(&info));
hgs
parents:
diff changeset
   734
}
hgs
parents:
diff changeset
   735
hgs
parents:
diff changeset
   736
inline TInt RRM_DebugDriver::DetachAgent(TUint64 aAgentId)
hgs
parents:
diff changeset
   737
{
hgs
parents:
diff changeset
   738
	TRM_DebugAgentId info(aAgentId);
hgs
parents:
diff changeset
   739
	return DoControl(EControlDetachAgent,reinterpret_cast<TAny*>(&info),0);
hgs
parents:
diff changeset
   740
}
hgs
parents:
diff changeset
   741
hgs
parents:
diff changeset
   742
inline TInt RRM_DebugDriver::SetEventAction(TDesC8& aProcessName, Debug::TEventType aEvent, Debug::TKernelEventAction aEventAction, TUint64 aAgentId)
hgs
parents:
diff changeset
   743
{
hgs
parents:
diff changeset
   744
	TRM_DebugEventActionInfo info (aEvent,aEventAction, aAgentId);
hgs
parents:
diff changeset
   745
	return DoControl(EControlSetEventAction,reinterpret_cast<TAny*>(&aProcessName),(TAny*)&info);
hgs
parents:
diff changeset
   746
}
hgs
parents:
diff changeset
   747
hgs
parents:
diff changeset
   748
inline TInt RRM_DebugDriver::GetList(const Debug::TListId aType, const Debug::TListScope aListScope, const TUint64 aTargetId, const TUint64 aDebugProcessId, TDes8& aBuffer, TUint32& aDataSize)
hgs
parents:
diff changeset
   749
{
hgs
parents:
diff changeset
   750
	TListInformation info(aType, aListScope, &aBuffer, &aDataSize, aTargetId);
hgs
parents:
diff changeset
   751
	return DoControl(EControlGetList, (TAny*)&info);
hgs
parents:
diff changeset
   752
}
hgs
parents:
diff changeset
   753
hgs
parents:
diff changeset
   754
inline TInt RRM_DebugDriver::Step(const TUint32 aThreadId, const TUint32 aNumSteps)
hgs
parents:
diff changeset
   755
{
hgs
parents:
diff changeset
   756
	return DoControl(EControlStep,reinterpret_cast<TAny*>(aThreadId),reinterpret_cast<TAny*>(aNumSteps));
hgs
parents:
diff changeset
   757
}
hgs
parents:
diff changeset
   758
hgs
parents:
diff changeset
   759
inline TInt RRM_DebugDriver::IsDebuggable(const TUint32 aProcessId)
hgs
parents:
diff changeset
   760
{
hgs
parents:
diff changeset
   761
	return DoControl(EControlIsDebuggable,reinterpret_cast<TAny*>(aProcessId),NULL);
hgs
parents:
diff changeset
   762
}
hgs
parents:
diff changeset
   763
hgs
parents:
diff changeset
   764
inline TInt RRM_DebugDriver::KillProcess(const TUint32 aProcessId, const TInt32 aReason)
hgs
parents:
diff changeset
   765
{
hgs
parents:
diff changeset
   766
	return DoControl(EControlKillProcess,reinterpret_cast<TAny*>(aProcessId),reinterpret_cast<TAny*>(aReason));
hgs
parents:
diff changeset
   767
}
hgs
parents:
diff changeset
   768
hgs
parents:
diff changeset
   769
#endif // __RM_DEBUG_KERNELDRIVER_H__
hgs
parents:
diff changeset
   770