OpenCores
URL https://opencores.org/ocsvn/or1k/or1k/trunk

Subversion Repositories or1k

Compare Revisions

  • This comparison shows the changes necessary to convert path
    /
    from Rev 139 to Rev 140
    Reverse comparison

Rev 139 → Rev 140

/trunk/gdb-5.0/gdb/jtag.c
360,12 → 360,20
JTAGProxyWriteMessage xmit_write;
JTAGProxyReadMessage xmit_read;
JTAGProxyChainMessage xmit_chain;
JTAGProxyBlockWriteMessage *xmit_bwrite;
JTAGProxyBlockReadMessage xmit_bread;
JTAGProxyWriteResponse recv_write;
JTAGProxyReadResponse recv_read;
JTAGProxyChainResponse recv_chain;
JTAGProxyBlockWriteResponse recv_bwrite;
JTAGProxyBlockReadResponse recv_bread;
unsigned long long data,* ret_val;
uint32_t word1; /* Use word1 and word2 to ease portability to platforms */
uint32_t word2; /* without long long and for alignment reasons */
unsigned long address;
unsigned long* b_data;
int nRegisters;
int len,i;
 
#ifndef ANSI_PROTOTYPES
int command;
412,6 → 420,47
break;
result = recv_write.status;
break;
case JTAG_COMMAND_BLOCK_WRITE:
address = va_arg(ap,unsigned long);
b_data = va_arg(ap,unsigned long*);
nRegisters = va_arg(ap,int);
len = sizeof(JTAGProxyBlockWriteMessage) + (nRegisters-1)*4;
xmit_bwrite = (JTAGProxyBlockWriteMessage*)malloc(len);
xmit_bwrite->command = htonl(command);
xmit_bwrite->length = htonl(len-8);
xmit_bwrite->address = htonl(address);
xmit_bwrite->nRegisters = htonl(nRegisters);
for(i=0;i<nRegisters;i++)
xmit_bwrite->data[i] = htonl(b_data[i]);
if(!(result = jtag_proxy_write(fd,xmit_bwrite,len)) &&
!(result = ReadResponse(fd,&recv_bwrite,sizeof(recv_bwrite))))
result = recv_bwrite.status;
free(xmit_bwrite);
xmit_bwrite = NULL;
break;
case JTAG_COMMAND_BLOCK_READ:
address = va_arg(ap,unsigned long);
b_data = va_arg(ap,unsigned long*);
nRegisters = va_arg(ap,int);
xmit_bread.command = htonl(command);
xmit_bread.length = htonl(sizeof(xmit_bread)-8);
xmit_bread.address = htonl(address);
xmit_bread.nRegisters = htonl(nRegisters);
if(result = jtag_proxy_write(fd,&xmit_bread,sizeof(xmit_bread)))
break;
if(result = ReadResponse(fd,&recv_bread,sizeof(recv_bread)))
break;
b_data[0] = ntohl(recv_bread.data[0]);
if(result = jtag_proxy_read(fd,&b_data[1],4*(recv_bread.nRegisters-1)))
break;
if(recv_bread.nRegisters != nRegisters)
result = JTAG_PROXY_PROTOCOL_ERROR;
else
{
for(i=1;i<nRegisters;i++)
b_data[i] = ntohl(b_data[i]);
}
break;
case JTAG_COMMAND_CHAIN:
xmit_chain.command = htonl(command);
xmit_chain.length = htonl(sizeof(xmit_chain)-8);
487,10 → 536,17
va_arg(ap,unsigned int));
error(sTemp);
break;
case JTAG_COMMAND_BLOCK_READ:
sprintf(sTemp,"An error was reported by the proxy server. The command was:\n"
"\"JTAG_COMMAND_BLOCK_READ\",0x%08x,0x%08x,%d\nThe command returned %d.\n",
va_arg(ap,unsigned long),va_arg(ap,unsigned long),va_arg(ap,int),result);
error(sTemp);
break;
case JTAG_COMMAND_BLOCK_WRITE:
default:
sprintf(sTemp,"An error was reported by the proxy server. The command is "
"currently unimplemented.\nThe command code was %d, and the result "
"code was %d.\n",command,result);
sprintf(sTemp,"An error was reported by the proxy server. The command was:\n"
"\"JTAG_COMMAND_BLOCK_WRITE\",0x%08x,0x%08x,%d\nThe command returned %d.\n",
va_arg(ap,unsigned long),va_arg(ap,unsigned long),va_arg(ap,int),result);
error(sTemp);
break;
}
651,6 → 707,60
return data; /* CZ */
}
 
int jtag_write_block(unsigned int regno,void* data,int nRegisters)
{
unsigned long* buffer = (unsigned long*)data;
int i,result;
 
err = 0;
switch(connection.location)
{
case JTAG_LOCAL: /* We can't do any better than this locally */
for(i=0;i<nRegisters;i++)
jtag_write_reg(regno+i,(ULONGEST)buffer[i]);
break;
case JTAG_REMOTE:
if(result = jtag_send_proxy(JTAG_COMMAND_BLOCK_WRITE,regno,data,nRegisters))
{
jtag_proxy_error(result,JTAG_COMMAND_BLOCK_WRITE,regno,data,nRegisters);
err = result;
}
break;
default:
error("jtag_write_reg called with no connection!");
break;
}
 
return err;
}
 
int jtag_read_block(unsigned int regno,void* data,int nRegisters)
{
unsigned long* buffer = (unsigned long*)data;
int i,result;
 
err = 0;
switch(connection.location)
{
case JTAG_LOCAL: /* We can't do any better than this locally */
for(i=0;i<nRegisters;i++)
buffer[i] = (unsigned long)jtag_read_reg(regno+i);
break;
case JTAG_REMOTE:
if(result = jtag_send_proxy(JTAG_COMMAND_BLOCK_READ,regno,data,nRegisters))
{
jtag_proxy_error(result,JTAG_COMMAND_BLOCK_READ,regno,data,nRegisters);
err = result;
}
break;
default:
error("jtag_write_reg called with no connection!");
break;
}
 
return err;
}
 
/* Sets scan chain. */
 
void

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.