Line 77... |
Line 77... |
void BlockJTAG(void);
|
void BlockJTAG(void);
|
|
|
int GlobalMode = 0; /* Start off in the orginal mode */
|
int GlobalMode = 0; /* Start off in the orginal mode */
|
|
|
/* CVS revision number. */
|
/* CVS revision number. */
|
const char rcsrev[] = "$Revision: 1.18 $";
|
const char rcsrev[] = "$Revision: 1.19 $";
|
|
|
/* Continuos run versus single step tracing switch. */
|
/* Continuos run versus single step tracing switch. */
|
int cont_run;
|
int cont_run;
|
|
|
/* History of execution */
|
/* History of execution */
|
Line 1059... |
Line 1059... |
JTAGProxyReadMessage msg_read;
|
JTAGProxyReadMessage msg_read;
|
JTAGProxyChainMessage msg_chain;
|
JTAGProxyChainMessage msg_chain;
|
JTAGProxyWriteResponse resp_write;
|
JTAGProxyWriteResponse resp_write;
|
JTAGProxyReadResponse resp_read;
|
JTAGProxyReadResponse resp_read;
|
JTAGProxyChainResponse resp_chain;
|
JTAGProxyChainResponse resp_chain;
|
|
JTAGProxyBlockWriteMessage *msg_bwrite;
|
|
JTAGProxyBlockReadMessage msg_bread;
|
|
JTAGProxyBlockWriteResponse resp_bwrite;
|
|
JTAGProxyBlockReadResponse *resp_bread;
|
char *buf;
|
char *buf;
|
unsigned long long data;
|
unsigned long long data;
|
int err;
|
int err = 0;
|
uint32_t command,length;
|
uint32_t command,length;
|
|
int len,i;
|
|
|
/* First, we must read the incomming command */
|
/* First, we must read the incomming command */
|
if(gdb_read(&command,sizeof(uint32_t)) < 0)
|
if(gdb_read(&command,sizeof(uint32_t)) < 0)
|
{
|
{
|
if(gdb_fd)
|
if(gdb_fd)
|
Line 1156... |
Line 1161... |
gdb_fd = 0;
|
gdb_fd = 0;
|
}
|
}
|
return;
|
return;
|
}
|
}
|
break;
|
break;
|
|
case JTAG_COMMAND_BLOCK_WRITE:
|
|
if(length < sizeof(JTAGProxyBlockWriteMessage)-8)
|
|
{
|
|
ProtocolClean(length,JTAG_PROXY_PROTOCOL_ERROR);
|
|
return;
|
|
}
|
|
if(!(buf = (char*)malloc(8+length)))
|
|
{
|
|
ProtocolClean(length,JTAG_PROXY_OUT_OF_MEMORY);
|
|
return;
|
|
}
|
|
msg_bwrite = (JTAGProxyBlockWriteMessage*)buf;
|
|
if(gdb_read(&buf[8],length) < 0)
|
|
{
|
|
if(gdb_fd)
|
|
{
|
|
perror("gdb socket - 5");
|
|
close(gdb_fd);
|
|
gdb_fd = 0;
|
|
}
|
|
free(buf);
|
|
return;
|
|
}
|
|
msg_bwrite->address = ntohl(msg_bwrite->address);
|
|
msg_bwrite->nRegisters = ntohl(msg_bwrite->nRegisters);
|
|
for(i=0;i<msg_bwrite->nRegisters;i++)
|
|
{
|
|
int t_err;
|
|
|
|
msg_bwrite->data[i] = ntohl(msg_bwrite->data[i]);
|
|
t_err = DebugSetRegister(msg_bwrite->address+i,msg_bwrite->data[i]);
|
|
err = err ? err : t_err;
|
|
}
|
|
resp_bwrite.status = htonl(err);
|
|
free(buf);
|
|
buf = msg_bwrite = NULL;
|
|
if(gdb_write(&resp_bwrite,sizeof(resp_bwrite)) < 0)
|
|
{
|
|
if(gdb_fd)
|
|
{
|
|
perror("gdb socket - 4");
|
|
close(gdb_fd);
|
|
gdb_fd = 0;
|
|
}
|
|
return;
|
|
}
|
|
break;
|
|
case JTAG_COMMAND_BLOCK_READ:
|
|
if(length != sizeof(msg_bread) - 8)
|
|
{
|
|
ProtocolClean(length,JTAG_PROXY_PROTOCOL_ERROR);
|
|
return;
|
|
}
|
|
buf = (char*)&msg_bread;
|
|
if(gdb_read(&buf[8],length) < 0)
|
|
{
|
|
if(gdb_fd)
|
|
{
|
|
perror("gdb socket - 5");
|
|
close(gdb_fd);
|
|
gdb_fd = 0;
|
|
}
|
|
return;
|
|
}
|
|
msg_bread.address = ntohl(msg_bread.address);
|
|
msg_bread.nRegisters = ntohl(msg_bread.nRegisters);
|
|
len = sizeof(JTAGProxyBlockReadResponse) + 4*(msg_bread.nRegisters-1);
|
|
if(!(buf = (char*)malloc(len)))
|
|
{
|
|
ProtocolClean(0,JTAG_PROXY_OUT_OF_MEMORY);
|
|
return;
|
|
}
|
|
resp_bread = (JTAGProxyBlockReadResponse*)buf;
|
|
for(i=0;i<msg_bread.nRegisters;i++)
|
|
{
|
|
int t_err;
|
|
|
|
t_err = DebugGetRegister(msg_bread.address+i,&resp_bread->data[i]);
|
|
resp_bread->data[i] = htonl(resp_bread->data[i]);
|
|
err = err ? err : t_err;
|
|
}
|
|
resp_bread->status = htonl(err);
|
|
resp_bread->nRegisters = htonl(msg_bread.nRegisters);
|
|
if(gdb_write(resp_bread,len) < 0)
|
|
{
|
|
if(gdb_fd)
|
|
{
|
|
perror("gdb socket - 6");
|
|
close(gdb_fd);
|
|
gdb_fd = 0;
|
|
}
|
|
free(buf);
|
|
return;
|
|
}
|
|
free(buf);
|
|
buf = resp_bread = NULL;
|
|
break;
|
case JTAG_COMMAND_CHAIN:
|
case JTAG_COMMAND_CHAIN:
|
if(length != sizeof(msg_chain) - 8)
|
if(length != sizeof(msg_chain) - 8)
|
{
|
{
|
ProtocolClean(length,JTAG_PROXY_PROTOCOL_ERROR);
|
ProtocolClean(length,JTAG_PROXY_PROTOCOL_ERROR);
|
return;
|
return;
|