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

Subversion Repositories or1k

[/] [or1k/] [tags/] [tn_m001/] [or1ksim/] [toplevel.c] - Diff between revs 138 and 139

Go to most recent revision | Show entire file | Details | Blame | View Log

Rev 138 Rev 139
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;

powered by: WebSVN 2.1.0

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