FreeCalypso > hg > freecalypso-sw
diff rvinterf/etmsync/memops.c @ 977:ce0ded19a769
rvinterf: first attempt at TM3 memory read: omemdump command in fc-fsio
author | Mychaela Falconia <falcon@ivan.Harhan.ORG> |
---|---|
date | Thu, 10 Dec 2015 04:00:08 +0000 |
parents | 38c7078712ab |
children |
line wrap: on
line diff
--- a/rvinterf/etmsync/memops.c Sun Nov 29 05:22:41 2015 +0000 +++ b/rvinterf/etmsync/memops.c Thu Dec 10 04:00:08 2015 +0000 @@ -8,6 +8,7 @@ #include <string.h> #include <strings.h> #include "etm.h" +#include "tm3.h" #include "limits.h" #include "localtypes.h" #include "exitcodes.h" @@ -95,6 +96,47 @@ return(0); } +do_memory_read_tm3(memaddr, databuf, nbytes) + u32 memaddr; + u_char *databuf; +{ + u_char cmdpkt[11]; + int rc; + + if (nbytes > TM3_MEMREAD_MAX) { + printf("error: # of bytes to read may not exceed %d\n", + TM3_MEMREAD_MAX); + return(ERROR_USAGE); + } + cmdpkt[1] = MEM_READ; + cmdpkt[2] = memaddr; + cmdpkt[3] = memaddr >> 8; + cmdpkt[4] = memaddr >> 16; + cmdpkt[5] = memaddr >> 24; + cmdpkt[6] = nbytes; + cmdpkt[7] = 0; + cmdpkt[8] = 0; + cmdpkt[9] = 0; + rc = etm_pkt_exch(cmdpkt, 9); + if (rc) + return(rc); + if (rvi_msg[3]) { + printf("TM3 error response to mem read request: 0x%02X\n", + rvi_msg[3]); + return(ERROR_TARGET); + } + if (rvi_msg_len != nbytes + 9) { + printf("error: mem read response has wrong length\n"); + return(ERROR_TARGET); + } + if (rvi_msg[4] != nbytes || rvi_msg[5] || rvi_msg[6] || rvi_msg[7]) { + printf("error: mem read response has wrong length echo\n"); + return(ERROR_TARGET); + } + bcopy(rvi_msg + 8, databuf, nbytes); + return(0); +} + do_dieid_read(databuf) u_char *databuf; {