1b725ae77Skettenis /*
2b725ae77Skettenis  * Copyright (C) 1995 Advanced RISC Machines Limited. All rights reserved.
3b725ae77Skettenis  *
4b725ae77Skettenis  * This software may be freely used, copied, modified, and distributed
5b725ae77Skettenis  * provided that the above copyright notice is preserved in all copies of the
6b725ae77Skettenis  * software.
7b725ae77Skettenis  */
8b725ae77Skettenis 
9b725ae77Skettenis /*
10b725ae77Skettenis  * ARM debugger toolbox : dbg_rdi.h
11b725ae77Skettenis  */
12b725ae77Skettenis 
13b725ae77Skettenis /*
14*63addd46Skettenis  * RCS $Revision: 1.3 $
15*63addd46Skettenis  * Checkin $Date: 2004/12/27 14:00:54 $
16b725ae77Skettenis  */
17b725ae77Skettenis 
18b725ae77Skettenis #ifndef dbg_rdi__h
19b725ae77Skettenis #define dbg_rdi__h
20b725ae77Skettenis 
21b725ae77Skettenis /***************************************************************************\
22b725ae77Skettenis *                            Other RDI values                               *
23b725ae77Skettenis \***************************************************************************/
24b725ae77Skettenis 
25b725ae77Skettenis #define RDISex_Little           0 /* the byte sex of the debuggee       */
26b725ae77Skettenis #define RDISex_Big              1
27b725ae77Skettenis #define RDISex_DontCare         2
28b725ae77Skettenis 
29b725ae77Skettenis #define RDIPoint_EQ             0 /* the different types of break/watchpoints */
30b725ae77Skettenis #define RDIPoint_GT             1
31b725ae77Skettenis #define RDIPoint_GE             2
32b725ae77Skettenis #define RDIPoint_LT             3
33b725ae77Skettenis #define RDIPoint_LE             4
34b725ae77Skettenis #define RDIPoint_IN             5
35b725ae77Skettenis #define RDIPoint_OUT            6
36b725ae77Skettenis #define RDIPoint_MASK           7
37b725ae77Skettenis 
38b725ae77Skettenis #define RDIPoint_16Bit          16  /* 16-bit breakpoint                */
39b725ae77Skettenis #define RDIPoint_Conditional    32
40b725ae77Skettenis 
41b725ae77Skettenis /* ORRed with point type in extended RDP break and watch messages       */
42b725ae77Skettenis #define RDIPoint_Inquiry        64
43b725ae77Skettenis #define RDIPoint_Handle         128 /* messages                         */
44b725ae77Skettenis 
45b725ae77Skettenis #define RDIWatch_ByteRead       1 /* types of data accesses to watch for*/
46b725ae77Skettenis #define RDIWatch_HalfRead       2
47b725ae77Skettenis #define RDIWatch_WordRead       4
48b725ae77Skettenis #define RDIWatch_ByteWrite      8
49b725ae77Skettenis #define RDIWatch_HalfWrite      16
50b725ae77Skettenis #define RDIWatch_WordWrite      32
51b725ae77Skettenis 
52b725ae77Skettenis #define RDIReg_R15              (1L << 15) /* mask values for CPU       */
53b725ae77Skettenis #define RDIReg_PC               (1L << 16)
54b725ae77Skettenis #define RDIReg_CPSR             (1L << 17)
55b725ae77Skettenis #define RDIReg_SPSR             (1L << 18)
56b725ae77Skettenis #define RDINumCPURegs           19
57b725ae77Skettenis 
58b725ae77Skettenis #define RDINumCPRegs            10 /* current maximum                   */
59b725ae77Skettenis 
60b725ae77Skettenis #define RDIMode_Curr            255
61b725ae77Skettenis 
62b725ae77Skettenis /* RDI_Info subcodes */
63b725ae77Skettenis /* rdp in parameters are all preceded by                                */
64b725ae77Skettenis /*   in byte = RDP_Info, word = info subcode                            */
65b725ae77Skettenis /*     out parameters are all preceded by                               */
66b725ae77Skettenis /*   out byte = RDP_Return                                              */
67b725ae77Skettenis 
68b725ae77Skettenis #define RDIInfo_Target          0
69b725ae77Skettenis /* rdi: out ARMword *targetflags, out ARMword *processor id             */
70b725ae77Skettenis /* rdp: in none, out word targetflags, word processorid, byte status    */
71b725ae77Skettenis /* the following bits are defined in targetflags                        */
72b725ae77Skettenis #  define RDITarget_LogSpeed                  0x0f
73b725ae77Skettenis #  define RDITarget_HW                        0x10    /* else emulator  */
74b725ae77Skettenis #  define RDITarget_AgentMaxLevel             0xe0
75b725ae77Skettenis #  define RDITarget_AgentLevelShift       5
76b725ae77Skettenis #  define RDITarget_DebuggerMinLevel         0x700
77b725ae77Skettenis #  define RDITarget_DebuggerLevelShift    8
78b725ae77Skettenis #  define RDITarget_CanReloadAgent           0x800
79b725ae77Skettenis #  define RDITarget_CanInquireLoadSize      0x1000
80b725ae77Skettenis #  define RDITarget_UnderstandsRDPInterrupt 0x2000
81b725ae77Skettenis #  define RDITarget_CanProfile              0x4000
82b725ae77Skettenis #  define RDITarget_Code16                  0x8000
83b725ae77Skettenis #  define RDITarget_HasCommsChannel        0x10000
84b725ae77Skettenis 
85b725ae77Skettenis #define RDIInfo_Points          1
86b725ae77Skettenis /* rdi: out ARMword *pointcapabilities                                  */
87b725ae77Skettenis /* rdp: in none, out word pointcapabilities, byte status                */
88b725ae77Skettenis /* the following bits are defined in pointcapabilities                  */
89b725ae77Skettenis #  define RDIPointCapability_Comparison   1
90b725ae77Skettenis #  define RDIPointCapability_Range        2
91b725ae77Skettenis /* 4 to 128 are RDIWatch_xx{Read,Write} left-shifted by two */
92b725ae77Skettenis #  define RDIPointCapability_Mask         0x100
93b725ae77Skettenis #  define RDIPointCapability_ThreadBreak  0x200
94b725ae77Skettenis #  define RDIPointCapability_ThreadWatch  0x400
95b725ae77Skettenis #  define RDIPointCapability_CondBreak    0x800
96b725ae77Skettenis #  define RDIPointCapability_Status       0x1000 /* status enquiries available */
97b725ae77Skettenis 
98b725ae77Skettenis #define RDIInfo_Step            2
99b725ae77Skettenis /* rdi: out ARMword *stepcapabilities                                   */
100b725ae77Skettenis /* rdp: in none, out word stepcapabilities, byte status                 */
101b725ae77Skettenis /* the following bits are defined in stepcapabilities                   */
102b725ae77Skettenis #  define RDIStep_Multiple      1
103b725ae77Skettenis #  define RDIStep_PCChange      2
104b725ae77Skettenis #  define RDIStep_Single        4
105b725ae77Skettenis 
106b725ae77Skettenis #define RDIInfo_MMU             3
107b725ae77Skettenis /* rdi: out ARMword *mmuidentity                                        */
108b725ae77Skettenis /* rdp: in none, out word mmuidentity, byte status                      */
109b725ae77Skettenis 
110b725ae77Skettenis #define RDIInfo_DownLoad        4
111b725ae77Skettenis /* Inquires whether configuration download and selection is available.  */
112b725ae77Skettenis /* rdp: in none, out byte status                                        */
113b725ae77Skettenis /* No argument, no return value. status == ok if available              */
114b725ae77Skettenis 
115b725ae77Skettenis #define RDIInfo_SemiHosting     5
116b725ae77Skettenis /* Inquires whether RDISemiHosting_* RDI_Info calls are available.      */
117b725ae77Skettenis /* rdp: in none, out byte status                                        */
118b725ae77Skettenis /* No argument, no return value. status == ok if available              */
119b725ae77Skettenis 
120b725ae77Skettenis #define RDIInfo_CoPro           6
121b725ae77Skettenis /* Inquires whether CoPro RDI_Info calls are available.                 */
122b725ae77Skettenis /* rdp: in none, out byte status                                        */
123b725ae77Skettenis /* No argument, no return value. status == ok if available              */
124b725ae77Skettenis 
125b725ae77Skettenis #define RDIInfo_Icebreaker      7
126b725ae77Skettenis /* Inquires whether debuggee controlled by IceBreaker.                  */
127b725ae77Skettenis /* rdp: in none, out byte status                                        */
128b725ae77Skettenis /* No argument, no return value. status == ok if available              */
129b725ae77Skettenis 
130b725ae77Skettenis #define RDIMemory_Access        8
131b725ae77Skettenis /* rdi: out RDI_MemAccessStats *p, in ARMword *handle                   */
132b725ae77Skettenis /* rdp: in word handle                                                  */
133b725ae77Skettenis /*      out word nreads, word nwrites, word sreads, word swrites,       */
134b725ae77Skettenis /*          word ns, word s, byte status                                */
135b725ae77Skettenis 
136b725ae77Skettenis /* Get memory access information for memory block with specified handle */
137b725ae77Skettenis 
138b725ae77Skettenis #define RDIMemory_Map           9
139b725ae77Skettenis /* rdi: in  RDI_MemDescr md[n], in ARMword *n                           */
140b725ae77Skettenis /* rdp: in word n, n * {                                                */
141b725ae77Skettenis /*           word handle, word start, word limit,                       */
142b725ae77Skettenis /*           byte width, byte access                                    */
143b725ae77Skettenis /*           word Nread_ns, word Nwrite_ns,                             */
144b725ae77Skettenis /*           word Sread_ns, word Swrite_ns}                             */
145b725ae77Skettenis /*      out byte status                                                 */
146b725ae77Skettenis /* Sets memory characteristics.                                         */
147b725ae77Skettenis 
148b725ae77Skettenis #define RDISet_CPUSpeed         10
149b725ae77Skettenis /* rdi: in  ARMword *speed                                              */
150b725ae77Skettenis /* rdp: in word speed, out byte status                                  */
151b725ae77Skettenis /* Sets CPU speed (in ns)                                               */
152b725ae77Skettenis 
153b725ae77Skettenis #define RDIRead_Clock           12
154b725ae77Skettenis /* rdi: out ARMword *ns, out ARMword *s                                 */
155b725ae77Skettenis /* rdp: in none, out word ns, word s, byte status                       */
156b725ae77Skettenis /* Reads simulated time                                                 */
157b725ae77Skettenis 
158b725ae77Skettenis #define RDIInfo_Memory_Stats    13
159b725ae77Skettenis /* Inquires whether RDI_Info codes 8-10 are available                   */
160b725ae77Skettenis /* rdp: in none, out byte status                                        */
161b725ae77Skettenis /* No argument, no return value. status == ok if available              */
162b725ae77Skettenis 
163b725ae77Skettenis /* The next two are only to be used if RDIInfo_DownLoad returned no     */
164b725ae77Skettenis /* error                                                                */
165b725ae77Skettenis #define RDIConfig_Count         14
166b725ae77Skettenis /* rdi: out ARMword *count                                              */
167b725ae77Skettenis /* rdp: out byte status, word count (if status == OK)                   */
168b725ae77Skettenis 
169b725ae77Skettenis /* In addition, the next one is only to be used if RDIConfig_Count      */
170b725ae77Skettenis /* returned no error                                                    */
171b725ae77Skettenis typedef struct { unsigned32 version; char name[32]; } RDI_ConfigDesc;
172b725ae77Skettenis #define RDIConfig_Nth           15
173b725ae77Skettenis /* rdi: in ARMword *n, out RDI_ConfigDesc *                             */
174b725ae77Skettenis /* rdp: in word n                                                       */
175b725ae77Skettenis /*      out word version, byte namelen, bytes * bytelen name,           */
176b725ae77Skettenis /*          byte status                                                 */
177b725ae77Skettenis 
178b725ae77Skettenis /* Set a front-end polling function to be used from within driver poll  */
179b725ae77Skettenis /* loops                                                                */
180b725ae77Skettenis typedef void RDI_PollProc(void *);
181b725ae77Skettenis typedef struct { RDI_PollProc *p; void *arg; } RDI_PollDesc;
182b725ae77Skettenis #define RDISet_PollProc         16
183b725ae77Skettenis /* rdi: in RDI_PollDesc const *from, RDI_PollDesc *to                   */
184b725ae77Skettenis /*      if from non-NULL, sets the polling function from it             */
185b725ae77Skettenis /*      if to non-NULL, returns the previous polling function to it     */
186b725ae77Skettenis /* No corresponding RDP operation                                       */
187b725ae77Skettenis 
188b725ae77Skettenis /* Called on debugger startup to see if the target is ready to execute  */
189b725ae77Skettenis #define RDIInfo_CanTargetExecute 20
190b725ae77Skettenis /* rdi: in  void
191b725ae77Skettenis  *      out byte status (RDIError_NoError => Yes, Otherwise No)
192b725ae77Skettenis  */
193b725ae77Skettenis 
194b725ae77Skettenis /* Called to set the top of target memory in an ICEman2 system
195b725ae77Skettenis  * This is then used by ICEman to tell the C Library via the INFOHEAP
196b725ae77Skettenis  * SWI where the stack should start.
197b725ae77Skettenis  * Note that only ICEman2 supports this call.  Other systems eg.
198b725ae77Skettenis  * Demon, Angel, will simply return an error, which means that setting
199b725ae77Skettenis  * the top of memory in this fashion is not supported.
200b725ae77Skettenis  */
201b725ae77Skettenis #define RDIInfo_SetTopMem        21
202b725ae77Skettenis /* rdi: in  word mem_top
203b725ae77Skettenis  *      out byte status (RDIError_NoError => Done, Other => Not supported
204b725ae77Skettenis  */
205b725ae77Skettenis 
206b725ae77Skettenis /* Called before performing a loadagent to determine the endianess of
207b725ae77Skettenis  * the debug agent, so that images of the wrong bytesex can be
208b725ae77Skettenis  * complained about
209b725ae77Skettenis  */
210b725ae77Skettenis #define RDIInfo_AgentEndianess   22
211b725ae77Skettenis /* rdi: in void
212b725ae77Skettenis  *      out byte status
213b725ae77Skettenis  *      status should be RDIError_LittleEndian or RDIError_BigEndian
214b725ae77Skettenis  *      any other value indicates the target does not support this
215b725ae77Skettenis  *      request, so the debugger will have to make a best guess, which
216b725ae77Skettenis  *      probably means only allow little endian loadagenting.
217b725ae77Skettenis  */
218b725ae77Skettenis 
219b725ae77Skettenis /* The next two are only to be used if the value returned by            */
220b725ae77Skettenis /* RDIInfo_Points has RDIPointCapability_Status set.                    */
221b725ae77Skettenis #define RDIPointStatus_Watch    0x80
222b725ae77Skettenis #define RDIPointStatus_Break    0x81
223b725ae77Skettenis /* rdi: inout ARMword * (in handle, out hwresource), out ARMword *type  */
224b725ae77Skettenis /* rdp: in word handle, out word hwresource, word type, byte status     */
225b725ae77Skettenis 
226b725ae77Skettenis #define RDISignal_Stop          0x100
227b725ae77Skettenis /* Requests that the debuggee stop                                      */
228b725ae77Skettenis /* No arguments, no return value                                        */
229b725ae77Skettenis /* rdp: no reply (when the debuggee stops, there will be a reply to the */
230b725ae77Skettenis /*      step or execute request which started it)                       */
231b725ae77Skettenis 
232b725ae77Skettenis #define RDIVector_Catch         0x180
233b725ae77Skettenis /* rdi: in ARMword *bitmap                                              */
234b725ae77Skettenis /* rdp: int word bitmap, out byte status                                */
235b725ae77Skettenis /* bit i in bitmap set to cause vector i to cause entry to debugger     */
236b725ae77Skettenis 
237b725ae77Skettenis /* The next four are only to be used if RDIInfo_Semihosting returned    */
238b725ae77Skettenis /* no error                                                             */
239b725ae77Skettenis #define RDISemiHosting_SetState 0x181
240b725ae77Skettenis /* rdi: in ARMword *semihostingstate                                    */
241b725ae77Skettenis /* rdp: in word semihostingstate, out byte status                       */
242b725ae77Skettenis #define RDISemiHosting_GetState 0x182
243b725ae77Skettenis /* rdi: out ARMword *semihostingstate                                   */
244b725ae77Skettenis /* rdp: in none, out word semihostingstate, byte status                 */
245b725ae77Skettenis #define RDISemiHosting_SetVector 0x183
246b725ae77Skettenis /* rdi: in ARMword *semihostingvector                                   */
247b725ae77Skettenis /* rdp: in word semihostingvector, out byte status                      */
248b725ae77Skettenis #define RDISemiHosting_GetVector 0x184
249b725ae77Skettenis /* rdi: out ARMword *semihostingvector                                  */
250b725ae77Skettenis /* rdp: in none, out word semihostingvector, byte status                */
251b725ae77Skettenis 
252b725ae77Skettenis /* The next two are only to be used if RDIInfo_Icebreaker returned      */
253b725ae77Skettenis /* no error                                                             */
254b725ae77Skettenis #define RDIIcebreaker_GetLocks  0x185
255b725ae77Skettenis /* rdi: out ARMword *lockedstate                                        */
256b725ae77Skettenis /* rdp: in none, out word lockedstate, byte status                      */
257b725ae77Skettenis 
258b725ae77Skettenis #define RDIIcebreaker_SetLocks  0x186
259b725ae77Skettenis /* rdi: in ARMword *lockedstate                                         */
260b725ae77Skettenis /* rdp: in word lockedstate, out byte status                            */
261b725ae77Skettenis 
262b725ae77Skettenis /* lockedstate is a bitmap of the icebreaker registers locked against   */
263b725ae77Skettenis /* use by IceMan (because explicitly written by the user)               */
264b725ae77Skettenis 
265b725ae77Skettenis #define RDIInfo_GetLoadSize     0x187
266b725ae77Skettenis /* rdi: out ARMword *maxloadsize                                        */
267b725ae77Skettenis /* rdp: in none, out word maxloadsize, byte status                      */
268b725ae77Skettenis /* Inquires the maximum length of data transfer the agent is prepared   */
269b725ae77Skettenis /* to receive                                                           */
270b725ae77Skettenis /* Only usable if RDIInfo_Target returned RDITarget_CanInquireLoadSize  */
271b725ae77Skettenis /* rdi: out ARMword *size                                               */
272b725ae77Skettenis 
273b725ae77Skettenis /* Only to be used if the value returned by RDIInfo_Target had          */
274b725ae77Skettenis /* RDITarget_HasCommsChannel set                                        */
275b725ae77Skettenis typedef void RDICCProc_ToHost(void *arg, ARMword data);
276b725ae77Skettenis typedef void RDICCProc_FromHost(void *arg, ARMword *data, int *valid);
277b725ae77Skettenis 
278b725ae77Skettenis #define RDICommsChannel_ToHost  0x188
279b725ae77Skettenis /* rdi: in RDICCProc_ToHost *, in void *arg                             */
280b725ae77Skettenis /* rdp: in byte connect, out byte status                                */
281b725ae77Skettenis #define RDICommsChannel_FromHost 0x189
282b725ae77Skettenis /* rdi: in RDICCProc_FromHost *, in void *arg                           */
283b725ae77Skettenis /* rdp: in byte connect, out byte status                                */
284b725ae77Skettenis 
285b725ae77Skettenis /* These 4 are only to be used if RDIInfo_Semihosting returns no error  */
286b725ae77Skettenis #define RDISemiHosting_SetARMSWI 0x190
287b725ae77Skettenis /* rdi: in ARMword ARM_SWI_number                                       */
288b725ae77Skettenis /* rdp: in ARMword ARM_SWI_number, out byte status                      */
289b725ae77Skettenis 
290b725ae77Skettenis #define RDISemiHosting_GetARMSWI 0x191
291b725ae77Skettenis /* rdi: out ARMword ARM_SWI_number                                      */
292b725ae77Skettenis /* rdp: out ARMword ARM_SWI_number, byte status                         */
293b725ae77Skettenis 
294b725ae77Skettenis #define RDISemiHosting_SetThumbSWI 0x192
295b725ae77Skettenis /* rdi: in ARMword Thumb_SWI_number                                     */
296b725ae77Skettenis /* rdp: in ARMword Thumb_SWI_number, out byte status                    */
297b725ae77Skettenis 
298b725ae77Skettenis #define RDISemiHosting_GetThumbSWI 0x193
299b725ae77Skettenis /* rdi: out ARMword ARM_Thumb_number                                    */
300b725ae77Skettenis /* rdp: out ARMword ARM_Thumb_number, byte status                       */
301b725ae77Skettenis 
302b725ae77Skettenis 
303b725ae77Skettenis #define RDICycles               0x200
304b725ae77Skettenis /* rdi: out ARMword cycles[12]                                          */
305b725ae77Skettenis /* rdp: in none, out 6 words cycles, byte status                        */
306b725ae77Skettenis /* the rdi result represents 6 big-endian doublewords; the rdp results  */
307b725ae77Skettenis /* return values for the ls halves of these                             */
308b725ae77Skettenis #  define RDICycles_Size        48
309b725ae77Skettenis 
310b725ae77Skettenis #define RDIErrorP               0x201
311b725ae77Skettenis /* rdi: out ARMaddress *errorp                                          */
312b725ae77Skettenis /* rdp: in none, out word errorp, byte status                           */
313b725ae77Skettenis /* Returns the error pointer associated with the last return from step  */
314b725ae77Skettenis /* or execute with status RDIError_Error.                               */
315b725ae77Skettenis 
316b725ae77Skettenis #define RDISet_Cmdline          0x300
317b725ae77Skettenis /* rdi: in char *commandline (a null-terminated string)                 */
318b725ae77Skettenis /* No corresponding RDP operation (cmdline is sent to the agent in      */
319b725ae77Skettenis /* response to SWI_GetEnv)                                              */
320b725ae77Skettenis 
321b725ae77Skettenis #define RDISet_RDILevel         0x301
322b725ae77Skettenis /* rdi: in ARMword *level                                               */
323b725ae77Skettenis /* rdp: in word level, out byte status                                  */
324b725ae77Skettenis /* Sets the RDI/RDP protocol level to be used (must lie between the     */
325b725ae77Skettenis /* limits returned by RDIInfo_Target).                                  */
326b725ae77Skettenis 
327b725ae77Skettenis #define RDISet_Thread           0x302
328b725ae77Skettenis /* rdi: in ARMword *threadhandle                                        */
329b725ae77Skettenis /* rdp: in word threadhandle, out byte status                           */
330b725ae77Skettenis /* Sets the thread context for subsequent thread-sensitive operations   */
331b725ae77Skettenis /* (null value sets no thread)                                          */
332b725ae77Skettenis 
333b725ae77Skettenis /* The next two are only to be used if RDI_read or RDI_write returned   */
334b725ae77Skettenis /* RDIError_LittleEndian or RDIError_BigEndian, to signify that the     */
335b725ae77Skettenis /* debugger has noticed.                                                */
336b725ae77Skettenis #define RDIInfo_AckByteSex  0x303
337b725ae77Skettenis /* rdi: in ARMword *sex (RDISex_Little or RDISex_Big)                   */
338b725ae77Skettenis 
339b725ae77Skettenis /* The next two are only to be used if RDIInfo_CoPro returned no error  */
340b725ae77Skettenis #define RDIInfo_DescribeCoPro   0x400
341b725ae77Skettenis /* rdi: in int *cpno, Dbg_CoProDesc *cpd                                */
342b725ae77Skettenis /* rdp: in byte cpno,                                                   */
343b725ae77Skettenis /*         cpd->entries * {                                             */
344b725ae77Skettenis /*           byte rmin, byte rmax, byte nbytes, byte access,            */
345b725ae77Skettenis /*           byte cprt_r_b0, cprt_r_b1, cprt_w_b0, cprt_w_b1}           */
346b725ae77Skettenis /*         byte = 255                                                   */
347b725ae77Skettenis /*      out byte status                                                 */
348b725ae77Skettenis 
349b725ae77Skettenis #define RDIInfo_RequestCoProDesc 0x401
350b725ae77Skettenis /* rdi: in int *cpno, out Dbg_CoProDesc *cpd                            */
351b725ae77Skettenis /* rpd: in byte cpno                                                    */
352b725ae77Skettenis /*      out nentries * {                                                */
353b725ae77Skettenis /*            byte rmin, byte rmax, byte nbytes, byte access,           */
354b725ae77Skettenis /*          }                                                           */
355b725ae77Skettenis /*          byte = 255, byte status                                     */
356b725ae77Skettenis 
357b725ae77Skettenis #define RDIInfo_Log             0x800
358b725ae77Skettenis /* rdi: out ARMword *logsetting                                         */
359b725ae77Skettenis /* No corresponding RDP operation                                       */
360b725ae77Skettenis #define RDIInfo_SetLog          0x801
361b725ae77Skettenis /* rdi: in ARMword *logsetting                                          */
362b725ae77Skettenis /* No corresponding RDP operation                                       */
363b725ae77Skettenis 
364b725ae77Skettenis #define RDIProfile_Stop         0x500
365b725ae77Skettenis /* No arguments, no return value                                        */
366b725ae77Skettenis /* rdp: in none, out byte status                                        */
367b725ae77Skettenis /* Requests that pc sampling stop                                       */
368b725ae77Skettenis 
369b725ae77Skettenis #define RDIProfile_Start        0x501
370b725ae77Skettenis /* rdi: in ARMword *interval                                            */
371b725ae77Skettenis /* rdp: in word interval, out byte status                               */
372b725ae77Skettenis /* Requests that pc sampling start, with period <interval> usec         */
373b725ae77Skettenis 
374b725ae77Skettenis #define RDIProfile_WriteMap     0x502
375b725ae77Skettenis /* rdi: in ARMword map[]                                                */
376b725ae77Skettenis /* map[0] is the length of the array, subsequent elements are sorted    */
377b725ae77Skettenis /* and are the base of ranges for pc sampling (so if the sampled pc     */
378b725ae77Skettenis /* lies between map[i] and map[i+1], count[i] is incremented).          */
379b725ae77Skettenis /* rdp: a number of messages, each of form:                             */
380b725ae77Skettenis /*        in word len, word size, word offset, <size> words map data    */
381b725ae77Skettenis /*        out status                                                    */
382b725ae77Skettenis /* len, size and offset are all word counts.                            */
383b725ae77Skettenis 
384b725ae77Skettenis #define RDIProfile_ReadMap      0x503
385b725ae77Skettenis /* rdi: in ARMword *len, out ARMword counts[len]                        */
386b725ae77Skettenis /* Requests that the counts array be set to the accumulated pc sample   */
387b725ae77Skettenis /* counts                                                               */
388b725ae77Skettenis /* rdp: a number of messages, each of form:                             */
389b725ae77Skettenis /*        in word offset, word size                                     */
390b725ae77Skettenis /*        out <size> words, status                                      */
391b725ae77Skettenis /* len, size and offset are all word counts.                            */
392b725ae77Skettenis 
393b725ae77Skettenis #define RDIProfile_ClearCounts  0x504
394b725ae77Skettenis /* No arguments, no return value                                        */
395b725ae77Skettenis /* rdp: in none, out byte status                                        */
396b725ae77Skettenis /* Requests that pc sample counts be set to zero                        */
397b725ae77Skettenis 
398b725ae77Skettenis #define RDIInfo_RequestReset    0x900
399b725ae77Skettenis /* Request reset of the target environment                              */
400b725ae77Skettenis /* No arguments, no return value                                        */
401b725ae77Skettenis /* No RDP equivalent, sends an RDP reset                                */
402b725ae77Skettenis 
403b725ae77Skettenis #define RDIInfo_CapabilityRequest 0x8000
404b725ae77Skettenis /* Request whether the interface supports the named capability. The     */
405b725ae77Skettenis /* capability is specified by or'ing the RDIInfo number with this, and  */
406b725ae77Skettenis /* sending that request                                                 */
407b725ae77Skettenis /* rdi: in none                                                         */
408b725ae77Skettenis /* rdp: in none, out byte status                                        */
409b725ae77Skettenis 
410b725ae77Skettenis typedef struct {
411b725ae77Skettenis   ARMword len;
412b725ae77Skettenis   ARMword map[1];
413b725ae77Skettenis } RDI_ProfileMap;
414b725ae77Skettenis 
415b725ae77Skettenis typedef unsigned32 PointHandle;
416b725ae77Skettenis typedef unsigned32 ThreadHandle;
417b725ae77Skettenis #define RDINoPointHandle        ((PointHandle)-1L)
418b725ae77Skettenis #define RDINoHandle             ((ThreadHandle)-1L)
419b725ae77Skettenis 
420b725ae77Skettenis struct Dbg_ConfigBlock;
421b725ae77Skettenis struct Dbg_HostosInterface;
422b725ae77Skettenis struct Dbg_MCState;
423b725ae77Skettenis typedef int rdi_open_proc(unsigned type, struct Dbg_ConfigBlock const *config,
424b725ae77Skettenis                           struct Dbg_HostosInterface const *i,
425b725ae77Skettenis                           struct Dbg_MCState *dbg_state);
426b725ae77Skettenis typedef int rdi_close_proc(void);
427b725ae77Skettenis typedef int rdi_read_proc(ARMword source, void *dest, unsigned *nbytes);
428b725ae77Skettenis typedef int rdi_write_proc(const void *source, ARMword dest, unsigned *nbytes);
429b725ae77Skettenis typedef int rdi_CPUread_proc(unsigned mode, unsigned32 mask, ARMword *state);
430b725ae77Skettenis typedef int rdi_CPUwrite_proc(unsigned mode, unsigned32 mask, ARMword const *state);
431b725ae77Skettenis typedef int rdi_CPread_proc(unsigned CPnum, unsigned32 mask, ARMword *state);
432b725ae77Skettenis typedef int rdi_CPwrite_proc(unsigned CPnum, unsigned32 mask, ARMword const *state);
433b725ae77Skettenis typedef int rdi_setbreak_proc(ARMword address, unsigned type, ARMword bound,
434b725ae77Skettenis                               PointHandle *handle);
435b725ae77Skettenis typedef int rdi_clearbreak_proc(PointHandle handle);
436b725ae77Skettenis typedef int rdi_setwatch_proc(ARMword address, unsigned type, unsigned datatype,
437b725ae77Skettenis                               ARMword bound, PointHandle *handle);
438b725ae77Skettenis typedef int rdi_clearwatch_proc(PointHandle handle);
439b725ae77Skettenis typedef int rdi_execute_proc(PointHandle *handle);
440b725ae77Skettenis typedef int rdi_step_proc(unsigned ninstr, PointHandle *handle);
441b725ae77Skettenis typedef int rdi_info_proc(unsigned type, ARMword *arg1, ARMword *arg2);
442b725ae77Skettenis typedef int rdi_pointinq_proc(ARMword *address, unsigned type,
443b725ae77Skettenis                               unsigned datatype, ARMword *bound);
444b725ae77Skettenis 
445b725ae77Skettenis typedef enum {
446b725ae77Skettenis     RDI_ConfigCPU,
447b725ae77Skettenis     RDI_ConfigSystem
448b725ae77Skettenis } RDI_ConfigAspect;
449b725ae77Skettenis 
450b725ae77Skettenis typedef enum {
451b725ae77Skettenis     RDI_MatchAny,
452b725ae77Skettenis     RDI_MatchExactly,
453b725ae77Skettenis     RDI_MatchNoEarlier
454b725ae77Skettenis } RDI_ConfigMatchType;
455b725ae77Skettenis 
456b725ae77Skettenis typedef int rdi_addconfig_proc(unsigned32 nbytes);
457b725ae77Skettenis typedef int rdi_loadconfigdata_proc(unsigned32 nbytes, char const *data);
458b725ae77Skettenis typedef int rdi_selectconfig_proc(RDI_ConfigAspect aspect, char const *name,
459b725ae77Skettenis                                   RDI_ConfigMatchType matchtype, unsigned versionreq,
460b725ae77Skettenis                                   unsigned *versionp);
461b725ae77Skettenis 
462b725ae77Skettenis typedef char *getbufferproc(void *getbarg, unsigned32 *sizep);
463b725ae77Skettenis typedef int rdi_loadagentproc(ARMword dest, unsigned32 size, getbufferproc *getb, void *getbarg);
464b725ae77Skettenis typedef int rdi_targetisdead(void);
465b725ae77Skettenis 
466b725ae77Skettenis typedef struct {
467b725ae77Skettenis     int itemmax;
468b725ae77Skettenis     char const * const *names;
469b725ae77Skettenis } RDI_NameList;
470b725ae77Skettenis 
471b725ae77Skettenis typedef RDI_NameList const *rdi_namelistproc(void);
472b725ae77Skettenis 
473b725ae77Skettenis typedef int rdi_errmessproc(char *buf, int buflen, int errnum);
474b725ae77Skettenis 
475b725ae77Skettenis struct RDIProcVec {
476b725ae77Skettenis     char rditypename[12];
477b725ae77Skettenis 
478b725ae77Skettenis     rdi_open_proc       *open;
479b725ae77Skettenis     rdi_close_proc      *close;
480b725ae77Skettenis     rdi_read_proc       *read;
481b725ae77Skettenis     rdi_write_proc      *write;
482b725ae77Skettenis     rdi_CPUread_proc    *CPUread;
483b725ae77Skettenis     rdi_CPUwrite_proc   *CPUwrite;
484b725ae77Skettenis     rdi_CPread_proc     *CPread;
485b725ae77Skettenis     rdi_CPwrite_proc    *CPwrite;
486b725ae77Skettenis     rdi_setbreak_proc   *setbreak;
487b725ae77Skettenis     rdi_clearbreak_proc *clearbreak;
488b725ae77Skettenis     rdi_setwatch_proc   *setwatch;
489b725ae77Skettenis     rdi_clearwatch_proc *clearwatch;
490b725ae77Skettenis     rdi_execute_proc    *execute;
491b725ae77Skettenis     rdi_step_proc       *step;
492b725ae77Skettenis     rdi_info_proc       *info;
493b725ae77Skettenis     /* V2 RDI */
494b725ae77Skettenis     rdi_pointinq_proc   *pointinquiry;
495b725ae77Skettenis 
496b725ae77Skettenis     /* These three useable only if RDIInfo_DownLoad returns no error */
497b725ae77Skettenis     rdi_addconfig_proc  *addconfig;
498b725ae77Skettenis     rdi_loadconfigdata_proc *loadconfigdata;
499b725ae77Skettenis     rdi_selectconfig_proc *selectconfig;
500b725ae77Skettenis 
501b725ae77Skettenis     rdi_namelistproc    *drivernames;
502b725ae77Skettenis     rdi_namelistproc    *cpunames;
503b725ae77Skettenis 
504b725ae77Skettenis     rdi_errmessproc     *errmess;
505b725ae77Skettenis 
506b725ae77Skettenis     /* Only if RDIInfo_Target returns a value with RDITarget_LoadAgent set */
507b725ae77Skettenis     rdi_loadagentproc   *loadagent;
508b725ae77Skettenis     rdi_targetisdead    *targetisdead;
509b725ae77Skettenis };
510b725ae77Skettenis 
511b725ae77Skettenis #endif
512