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

Subversion Repositories or1k

[/] [or1k/] [trunk/] [gdb-5.0/] [gdb/] [jtag.c] - Diff between revs 124 and 140

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

Rev 124 Rev 140
Line 358... Line 358...
  int result = 0;
  int result = 0;
  int fd = connection.device.fd;
  int fd = connection.device.fd;
  JTAGProxyWriteMessage xmit_write;
  JTAGProxyWriteMessage xmit_write;
  JTAGProxyReadMessage xmit_read;
  JTAGProxyReadMessage xmit_read;
  JTAGProxyChainMessage xmit_chain;
  JTAGProxyChainMessage xmit_chain;
 
  JTAGProxyBlockWriteMessage *xmit_bwrite;
 
  JTAGProxyBlockReadMessage xmit_bread;
  JTAGProxyWriteResponse recv_write;
  JTAGProxyWriteResponse recv_write;
  JTAGProxyReadResponse recv_read;
  JTAGProxyReadResponse recv_read;
  JTAGProxyChainResponse recv_chain;
  JTAGProxyChainResponse recv_chain;
 
  JTAGProxyBlockWriteResponse recv_bwrite;
 
  JTAGProxyBlockReadResponse recv_bread;
  unsigned long long data,* ret_val;
  unsigned long long data,* ret_val;
  uint32_t word1; /* Use word1 and word2 to ease portability to platforms */
  uint32_t word1; /* Use word1 and word2 to ease portability to platforms */
  uint32_t word2; /* without long long and for alignment reasons */
  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
#ifndef ANSI_PROTOTYPES
  int command;
  int command;
 
 
  va_start(ap);
  va_start(ap);
Line 410... Line 418...
            break;
            break;
          if(result = ReadResponse(fd,&recv_write,sizeof(recv_write)))
          if(result = ReadResponse(fd,&recv_write,sizeof(recv_write)))
            break;
            break;
          result = recv_write.status;
          result = recv_write.status;
          break;
          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:
        case JTAG_COMMAND_CHAIN:
          xmit_chain.command = htonl(command);
          xmit_chain.command = htonl(command);
          xmit_chain.length = htonl(sizeof(xmit_chain)-8);
          xmit_chain.length = htonl(sizeof(xmit_chain)-8);
          xmit_chain.chain = htonl(va_arg(ap,unsigned int));
          xmit_chain.chain = htonl(va_arg(ap,unsigned int));
          if(result = jtag_proxy_write(fd,&xmit_chain,sizeof(xmit_chain)))
          if(result = jtag_proxy_write(fd,&xmit_chain,sizeof(xmit_chain)))
Line 485... Line 534...
      sprintf(sTemp,"An error was reported by the proxy server. The command was:\n"
      sprintf(sTemp,"An error was reported by the proxy server. The command was:\n"
              "\"JTAG_COMMAND_CHAIN\",%u. The command returned %d.\n",
              "\"JTAG_COMMAND_CHAIN\",%u. The command returned %d.\n",
              va_arg(ap,unsigned int));
              va_arg(ap,unsigned int));
      error(sTemp);
      error(sTemp);
      break;
      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:
    default:
      sprintf(sTemp,"An error was reported by the proxy server. The command is "
      sprintf(sTemp,"An error was reported by the proxy server. The command was:\n"
              "currently unimplemented.\nThe command code was %d, and the result "
              "\"JTAG_COMMAND_BLOCK_WRITE\",0x%08x,0x%08x,%d\nThe command returned %d.\n",
              "code was %d.\n",command,result);
              va_arg(ap,unsigned long),va_arg(ap,unsigned long),va_arg(ap,int),result);
      error(sTemp);
      error(sTemp);
      break;
      break;
    }
    }
  va_end(ap);
  va_end(ap);
}
}
Line 649... Line 705...
    }
    }
 
 
  return data;  /* CZ */
  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.  */
/* Sets scan chain.  */
 
 
void
void
jtag_set_chain (chain)
jtag_set_chain (chain)
     int chain;
     int chain;

powered by: WebSVN 2.1.0

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