comparison rvinterf/etm/tmcore.c @ 189:a95d253ef952

fc-tmsh: some basic tmcore commands implemented
author Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
date Mon, 25 Nov 2013 03:10:41 +0000
parents 9f4f331ac24d
children 405f5b46cdc4
comparison
equal deleted inserted replaced
188:9f4f331ac24d 189:a95d253ef952
8 #include <string.h> 8 #include <string.h>
9 #include <strings.h> 9 #include <strings.h>
10 #include <stdlib.h> 10 #include <stdlib.h>
11 #include "../pktmux.h" 11 #include "../pktmux.h"
12 #include "../limits.h" 12 #include "../limits.h"
13 #include "localtypes.h"
13 #include "etm.h" 14 #include "etm.h"
14 15
15 extern u_char rvi_msg[]; 16 extern u_char rvi_msg[];
16 extern int rvi_msg_len; 17 extern int rvi_msg_len;
17 18
176 default: 177 default:
177 unknown: 178 unknown:
178 print_etm_pkt_raw("ETM_CORE resp"); 179 print_etm_pkt_raw("ETM_CORE resp");
179 } 180 }
180 } 181 }
182
183 void
184 cmd_r8(argc, argv)
185 char **argv;
186 {
187 u32 addr;
188 int count;
189 u_char cmdpkt[10];
190
191 addr = strtoul(argv[1], 0, 16);
192 if (argv[2])
193 count = strtoul(argv[2], 0, 0);
194 else
195 count = 1;
196 if (count < 1 || count > 253) {
197 printf("error: count argument outside valid range\n");
198 return;
199 }
200 cmdpkt[1] = ETM_CORE;
201 cmdpkt[2] = TMCORE_OPC_MEM;
202 cmdpkt[3] = 0x01;
203 cmdpkt[4] = count;
204 cmdpkt[5] = addr;
205 cmdpkt[6] = addr >> 8;
206 cmdpkt[7] = addr >> 16;
207 cmdpkt[8] = addr >> 24;
208 send_etm_cmd(cmdpkt, 8);
209 }
210
211 void
212 cmd_r16(argc, argv)
213 char **argv;
214 {
215 u32 addr;
216 int count;
217 u_char cmdpkt[10];
218
219 addr = strtoul(argv[1], 0, 16);
220 if (argv[2])
221 count = strtoul(argv[2], 0, 0);
222 else
223 count = 1;
224 if (addr & 1) {
225 printf("error: address not aligned\n");
226 return;
227 }
228 if (count < 1 || count > 126) {
229 printf("error: count argument outside valid range\n");
230 return;
231 }
232 cmdpkt[1] = ETM_CORE;
233 cmdpkt[2] = TMCORE_OPC_MEM;
234 cmdpkt[3] = 0x02;
235 cmdpkt[4] = count;
236 cmdpkt[5] = addr;
237 cmdpkt[6] = addr >> 8;
238 cmdpkt[7] = addr >> 16;
239 cmdpkt[8] = addr >> 24;
240 send_etm_cmd(cmdpkt, 8);
241 }
242
243 void
244 cmd_r32(argc, argv)
245 char **argv;
246 {
247 u32 addr;
248 int count;
249 u_char cmdpkt[10];
250
251 addr = strtoul(argv[1], 0, 16);
252 if (argv[2])
253 count = strtoul(argv[2], 0, 0);
254 else
255 count = 1;
256 if (addr & 3) {
257 printf("error: address not aligned\n");
258 return;
259 }
260 if (count < 1 || count > 63) {
261 printf("error: count argument outside valid range\n");
262 return;
263 }
264 cmdpkt[1] = ETM_CORE;
265 cmdpkt[2] = TMCORE_OPC_MEM;
266 cmdpkt[3] = 0x04;
267 cmdpkt[4] = count;
268 cmdpkt[5] = addr;
269 cmdpkt[6] = addr >> 8;
270 cmdpkt[7] = addr >> 16;
271 cmdpkt[8] = addr >> 24;
272 send_etm_cmd(cmdpkt, 8);
273 }
274
275 void
276 cmd_dieid(argc, argv)
277 char **argv;
278 {
279 u_char cmdpkt[4];
280
281 cmdpkt[1] = ETM_CORE;
282 cmdpkt[2] = TMCORE_OPC_DIEID;
283 send_etm_cmd(cmdpkt, 2);
284 }
285
286 void
287 cmd_ping(argc, argv)
288 char **argv;
289 {
290 int delay, size;
291 u_char cmdpkt[8];
292
293 if (argc > 1) {
294 delay = strtoul(argv[1], 0, 0);
295 if (delay > 65535) {
296 printf("error: ping delay argument too big\n");
297 return;
298 }
299 } else
300 delay = 0;
301 if (argc > 2) {
302 size = strtoul(argv[2], 0, 0);
303 if (size > 240) {
304 printf("error: ping size argument too big\n");
305 return;
306 }
307 } else
308 size = 1;
309 cmdpkt[1] = ETM_CORE;
310 cmdpkt[2] = TMCORE_OPC_ECHO;
311 cmdpkt[3] = delay;
312 cmdpkt[4] = delay >> 8;
313 cmdpkt[5] = size;
314 cmdpkt[6] = size >> 8;
315 send_etm_cmd(cmdpkt, 6);
316 }
317
318 void
319 cmd_tgtreset(argc, argv)
320 char **argv;
321 {
322 u_char cmdpkt[4];
323
324 cmdpkt[1] = ETM_CORE;
325 cmdpkt[2] = TMCORE_OPC_RESET;
326 send_etm_cmd(cmdpkt, 2);
327 }
328
329 void
330 cmd_version(argc, argv)
331 char **argv;
332 {
333 u32 arg;
334 u_char cmdpkt[8];
335
336 arg = strtoul(argv[1], 0, 16);
337 cmdpkt[1] = ETM_CORE;
338 cmdpkt[2] = TMCORE_OPC_VERSION;
339 cmdpkt[3] = arg;
340 cmdpkt[4] = arg >> 8;
341 cmdpkt[5] = arg >> 16;
342 cmdpkt[6] = arg >> 24;
343 send_etm_cmd(cmdpkt, 6);
344 }