#endif
static int hexMode = HEXMODE;
+static int decMode = 0;
static const char trbcmd_version[] = "Revision " TRBCMD_VERSION;
void usage(const char *progName)
{
fprintf(stdout, "Usage: %s [-h] [-f script-file] [-n number] [-s time] "
- "[-d level] [-H] [-V] <COMMAND>\n", progName);
+ "[-d level] [-H] [-D] [-V] <COMMAND>\n", progName);
fprintf(stdout, "Options:\n");
fprintf(stdout, " -h give this help\n");
fprintf(stdout, " -f execute commands given in script-file\n");
fprintf(stdout,
" -H hex-mode: all arguments will be interpreted "
"as hexadecimal-numbers\n");
+ fprintf(stdout,
+ " -D dec-mode: display register values as decimal numbers\n");
fprintf(stdout, " -V version number\n");
fprintf(stdout, "\nCommands:\n");
fprintf(stdout, " r <trbaddress> <register> -> "
int i;
#ifdef PEXOR
- const char optString[] = "+hf:n:d:s:HVD";
+ const char optString[] = "+hf:n:d:s:HDMV";
pexor_dma = 1;
#else
- const char optString[] = "+hf:n:d:s:HV";
+ const char optString[] = "+hf:n:d:s:HDV";
#endif
-
+
trb_debug = 0;
for (i = 0; i < CMD_MAX_ARGS; i++) {
cmd[i][0] = 0;
}
+
/* Parse Arguments */
optind = 1;
while ((opt = getopt(argc, argv, optString)) != -1) {
case 'H':
hexMode = 1;
break;
+ case 'D':
+ decMode = 1;
+ break;
case 'V':
printf("%s %s, using libtrbnet %s\n",
basename(argv[0]), trbcmd_version, trbnet_version);
return 0;
break;
#ifdef PEXOR
- case 'D':
+ case 'M':
pexor_dma = 0;
break;
#endif
return -1;
} else {
for (i = 0; i < status; i += 2) {
- fprintf(stdout, "0x%04x 0x%08x\n", buffer[i], buffer[i + 1]);
+ fprintf(stdout,
+ (decMode == 0 ? "0x%04x 0x%08x\n" : "0x%04x %d\n"),
+ buffer[i], buffer[i + 1]);
}
/* Check Status-Bits */
return -1;
} else {
for (i = 0; i < status; i += 3) {
- fprintf(stdout, "0x%04x 0x%08x 0x%04x\n",
+ fprintf(stdout,
+ (decMode == 0
+ ? "0x%04x 0x%08x 0x%04x\n"
+ : "0x%04x %d %d\n"),
buffer[i], buffer[i + 1], buffer[i + 2]);
}
len = (*p >> 16) & 0xffff;
fprintf(stdout, "H: 0x%04x 0x%04x\n", (*p++) & 0xffff, len);
for (i = 0; (i < len) && (p < end); i++) {
- fprintf(stdout, "0x%04x 0x%08x\n",
+ fprintf(stdout,
+ (decMode == 0 ? "0x%04x 0x%08x\n" : "0x%04x %d\n"),
(option == 0 ? reg_address + i : i),
*p++);
}
len = (*p >> 16) & 0xffff;
fprintf(stdout, "H: 0x%04x 0x%04x\n", (*p++) & 0xffff, len);
for (i = 0; (i < len) && ((p + 1) < end); i++) {
- fprintf(stdout, "0x%04x 0x%08x 0x%04x\n",
+ fprintf(stdout,
+ (decMode == 0
+ ? "0x%04x 0x%08x 0x%04x\n"
+ : "0x%04x %d %d\n"),
(option == 0 ? reg_address + i : i),
*p, *(p + 1));
p += 2;
/* reset DMA */
iowrite32_mb(PEXOR_TRB_DMA_RESET, priv->pexor.dma_control_stat);
udelay(1000);
- /* do we need to flush the fifo-buffer, no libtrbnet takes care */
+
+ /* sync current sg-entry back to CPU */
+ dma_sync_single_for_cpu(priv->class_dev,
+ sg_dma_address(&priv->dma.sglist[sg_ctr]),
+ sg_dma_len(&priv->dma.sglist[sg_ctr]),
+ DMA_FROM_DEVICE);
status = -201;
goto OUT_IOCTL;
}
}
- /* sync current sg-entry to CPU */
+ /* sync current sg-entry back to CPU */
dma_sync_single_for_cpu(priv->class_dev,
sg_dma_address(&priv->dma.sglist[sg_ctr]),
sg_dma_len(&priv->dma.sglist[sg_ctr]),