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 |