From: Ludwig Maier Date: Fri, 29 Nov 2013 20:27:56 +0000 (+0100) Subject: added -D decimal output display option to trbcmd X-Git-Url: https://jspc29.x-matter.uni-frankfurt.de/git/?a=commitdiff_plain;h=8e92d7e304186b7b84378733182ccf01a89d0f4e;p=trbnettools.git added -D decimal output display option to trbcmd --- diff --git a/libtrbnet/trbcmd.c b/libtrbnet/trbcmd.c index c0b8265..ab462bb 100644 --- a/libtrbnet/trbcmd.c +++ b/libtrbnet/trbcmd.c @@ -29,6 +29,7 @@ extern int optind, opterr, optopt; #endif static int hexMode = HEXMODE; +static int decMode = 0; static const char trbcmd_version[] = "Revision " TRBCMD_VERSION; @@ -96,7 +97,7 @@ static void logError(int type, const char* format, ...) void usage(const char *progName) { fprintf(stdout, "Usage: %s [-h] [-f script-file] [-n number] [-s time] " - "[-d level] [-H] [-V] \n", progName); + "[-d level] [-H] [-D] [-V] \n", progName); fprintf(stdout, "Options:\n"); fprintf(stdout, " -h give this help\n"); fprintf(stdout, " -f execute commands given in script-file\n"); @@ -110,6 +111,8 @@ void usage(const char *progName) 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 -> " @@ -198,16 +201,17 @@ int start(int argc, char **argv) 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) { @@ -233,13 +237,16 @@ int start(int argc, char **argv) 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 @@ -365,7 +372,9 @@ int start(int argc, char **argv) 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 */ @@ -406,7 +415,10 @@ int start(int argc, char **argv) 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]); } @@ -499,7 +511,8 @@ int start(int argc, char **argv) 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++); } @@ -559,7 +572,10 @@ int start(int argc, char **argv) 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; diff --git a/pexor/kernel-module/pexor_trb.c b/pexor/kernel-module/pexor_trb.c index 3818b6d..f8d7fa2 100644 --- a/pexor/kernel-module/pexor_trb.c +++ b/pexor/kernel-module/pexor_trb.c @@ -1434,13 +1434,18 @@ int pexor_ioctl_trbnet_request(struct pexor_privdata* priv, /* 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]),