From f318d105a10a7e7abafbd4d0c98fdee701edbf6b Mon Sep 17 00:00:00 2001 From: hadaq Date: Mon, 25 Oct 2010 19:12:35 +0000 Subject: [PATCH] revised USER_BUFFER_SIZE --- libtrbnet/trbcmd.c | 127 ++++++++++++++++++++++++--------------------- 1 file changed, 68 insertions(+), 59 deletions(-) diff --git a/libtrbnet/trbcmd.c b/libtrbnet/trbcmd.c index dd3467a..9d1fd1f 100644 --- a/libtrbnet/trbcmd.c +++ b/libtrbnet/trbcmd.c @@ -25,7 +25,7 @@ static int hexMode = HEXMODE; -static const char trbcmd_version[] = "$Revision: 2.59 $"; +static const char trbcmd_version[] = "$Revision: 2.60 $"; #define BACKLOG 10 static uint16_t tcp_port = 55555; @@ -33,8 +33,8 @@ static int tcp_debug = 0; /* turn to 0 to suppress TCP/IP output */ /* ---- User Buffer Size ------------------------------------------------ */ -static const size_t NUM_ENDPOINTS = 1024; /* Maximum of 16KByte */ -static size_t USER_BUFFER_SIZE = 0; +static const size_t NUM_ENDPOINTS = 1024; /* Maximum of 16KByte */ +static size_t USER_BUFFER_MAX_SIZE = 1310720; /* *4Bytes = 5MByte */ /* ---- Error Handling -------------------------------------------------- */ @@ -174,12 +174,12 @@ void usage(const char *progName) } #define CMD_SIZE 256 -#define CMD_MAX_NUM 10 +#define CMD_MAX_ARGS 10 int start(int argc, char **argv) { char scriptFileName[256] = ""; - char cmd[CMD_MAX_NUM][CMD_SIZE]; + char cmd[CMD_MAX_ARGS][CMD_SIZE]; char *cmdLine = NULL; size_t cmdLineLen = 0; unsigned int cmdLen = 0; @@ -191,13 +191,10 @@ int start(int argc, char **argv) int opt; int i; - for (i = 0; i < CMD_MAX_NUM; i++) { + for (i = 0; i < CMD_MAX_ARGS; i++) { cmd[i][0] = 0; } - /* LowMem Settings, i.e. 3 MBye maximum */ - USER_BUFFER_SIZE = 786432; /* 0xc000 * 4 Byte */ - trb_debug = 0; /* Parse Arguments */ @@ -231,8 +228,8 @@ int start(int argc, char **argv) return 0; break; case 'M': - /* HighMem Setting, i.e. 20 MByte maximum 0x500000 * 4 */ - USER_BUFFER_SIZE = 5242880; + /* HighMem Setting */ + USER_BUFFER_MAX_SIZE = 5242880; /* *4Bytes = 20MByte */ break; default: break; @@ -264,7 +261,7 @@ int start(int argc, char **argv) /* Get command from function-call */ unsigned int i; cmdLen = argc - optind; - for (i = 0; (i < cmdLen) && (i < CMD_MAX_NUM); i++) { + for (i = 0; (i < cmdLen) && (i < CMD_MAX_ARGS); i++) { strncpy(cmd[i], argv[optind + i], CMD_SIZE); } scriptStatus = -1; @@ -275,7 +272,7 @@ int start(int argc, char **argv) /* Get next command from file */ lineCtr++; /* Initialize */ - for (i = 0; i < CMD_MAX_NUM; i++) { + for (i = 0; i < CMD_MAX_ARGS; i++) { cmd[i][0] = '\0'; } @@ -305,7 +302,7 @@ int start(int argc, char **argv) cmd[0], cmd[1], cmd[2], cmd[3], cmd[4], cmd[5], cmd[6], cmd[7], cmd[8], cmd[9]); - for (i = 0, cmdLen = 0; i < CMD_MAX_NUM; i++, cmdLen++) { + for (i = 0, cmdLen = 0; i < CMD_MAX_ARGS; i++, cmdLen++) { if (cmd[i][0] == '\0') break; } @@ -319,41 +316,7 @@ int start(int argc, char **argv) } } - if (strncmp(cmd[0], "w", CMD_SIZE) == 0) { - - /*******************************************/ - /* Register Write */ - /*******************************************/ - - uint32_t value = 0; - - if (cmdLen != 4) { - logError(ERROR, "Invalid command, try -h option\n"); - return -1; - } - - trb_address = strtoul(cmd[1], NULL, hexMode == 1 ? 16 : 0); - reg_address = strtoul(cmd[2], NULL, hexMode == 1 ? 16 : 0); - value = strtoul(cmd[3], NULL, hexMode == 1 ? 16 : 0); - - /* DEBUG Info */ - if (trb_debug > 0) { - fprintf(stderr, - "Command: WRITE: trb_address: 0x%04x, reg_address: 0x%04x, " - "value: 0x%08x\n", trb_address, reg_address, value); - } - - if (trb_register_write(trb_address, reg_address, value) == -1) { - logError(ERROR, "write_register failed %s\n", trb_termstr(trb_term)); - return -1; - } else { - if (trb_errno == TRB_STATUS_WARNING) { - logError(WARNING, "Status-Bit(s) have been set:\n%s\n", - trb_termstr(trb_term)); - } - } - - } else if (strncmp(cmd[0], "r", CMD_SIZE) == 0) { + if (strncmp(cmd[0], "r", CMD_SIZE) == 0) { /*******************************************/ /* Register Read */ @@ -424,12 +387,12 @@ int start(int argc, char **argv) "reg_address: 0x%04x\n", trb_address, reg_address); } - data = (uint32_t *) malloc(sizeof(uint32_t) * NUM_ENDPOINTS * 2); + data = (uint32_t *) malloc(sizeof(uint32_t) * NUM_ENDPOINTS * 3); if (data == NULL) abort(); status = trb_registertime_read(trb_address, reg_address, - data, NUM_ENDPOINTS * 2); + data, NUM_ENDPOINTS * 3); if (status == -1) { logError(ERROR, "read_register failed: %s\n", trb_strerror()); } else { @@ -446,6 +409,40 @@ int start(int argc, char **argv) } free(data); + } else if (strncmp(cmd[0], "w", CMD_SIZE) == 0) { + + /*******************************************/ + /* Register Write */ + /*******************************************/ + + uint32_t value = 0; + + if (cmdLen != 4) { + logError(ERROR, "Invalid command, try -h option\n"); + return -1; + } + + trb_address = strtoul(cmd[1], NULL, hexMode == 1 ? 16 : 0); + reg_address = strtoul(cmd[2], NULL, hexMode == 1 ? 16 : 0); + value = strtoul(cmd[3], NULL, hexMode == 1 ? 16 : 0); + + /* DEBUG Info */ + if (trb_debug > 0) { + fprintf(stderr, + "Command: WRITE: trb_address: 0x%04x, reg_address: 0x%04x, " + "value: 0x%08x\n", trb_address, reg_address, value); + } + + if (trb_register_write(trb_address, reg_address, value) == -1) { + logError(ERROR, "write_register failed %s\n", trb_termstr(trb_term)); + return -1; + } else { + if (trb_errno == TRB_STATUS_WARNING) { + logError(WARNING, "Status-Bit(s) have been set:\n%s\n", + trb_termstr(trb_term)); + } + } + } else if (strncmp(cmd[0], "rm", CMD_SIZE) == 0) { /*******************************************/ @@ -456,6 +453,7 @@ int start(int argc, char **argv) uint16_t size = 0; uint8_t option = 0; int status; + size_t USER_BUFFER_SIZE = 0; const uint32_t *p; const uint32_t *end = NULL; unsigned int len; @@ -470,7 +468,7 @@ int start(int argc, char **argv) reg_address = strtoul(cmd[2], NULL, hexMode == 1 ? 16 : 0); size = strtoul(cmd[3], NULL, hexMode == 1 ? 16 : 0); option = strtoul(cmd[4], NULL, hexMode == 1 ? 16 : 0); - + /* DEBUG Info */ if (trb_debug > 0) { fprintf(stderr, @@ -480,7 +478,12 @@ int start(int argc, char **argv) "size: 0x%04x, " "option: %d\n", trb_address, reg_address, size, option); } - + + USER_BUFFER_SIZE = + (NUM_ENDPOINTS * size + NUM_ENDPOINTS) < USER_BUFFER_MAX_SIZE + ? NUM_ENDPOINTS * size + NUM_ENDPOINTS + : USER_BUFFER_MAX_SIZE; + data = (uint32_t *) malloc(sizeof(uint32_t) * USER_BUFFER_SIZE); if (data == NULL) abort(); @@ -522,6 +525,7 @@ int start(int argc, char **argv) uint16_t size = 0; uint8_t option = 0; int status; + size_t USER_BUFFER_SIZE = 0; const uint32_t *p; const uint32_t *end = NULL; unsigned int len; @@ -546,7 +550,12 @@ int start(int argc, char **argv) "size: 0x%04x, " "option: %d\n", trb_address, reg_address, size, option); } - + + USER_BUFFER_SIZE = + (NUM_ENDPOINTS * size * 2 + NUM_ENDPOINTS) < USER_BUFFER_MAX_SIZE + ? NUM_ENDPOINTS * size * 2 + NUM_ENDPOINTS + : USER_BUFFER_MAX_SIZE; + data = (uint32_t *) malloc(sizeof(uint32_t) * USER_BUFFER_SIZE); if (data == NULL) abort(); @@ -970,13 +979,13 @@ int start(int argc, char **argv) "info: 0x%02x, " "number: 0x%04x\n", type, random, info, number); } - - buffer = (uint32_t *) malloc(sizeof(uint32_t) * USER_BUFFER_SIZE); + + buffer = (uint32_t *) malloc(sizeof(uint32_t) * USER_BUFFER_MAX_SIZE); if (buffer == NULL) abort(); status = trb_ipu_data_read(type, info, random, number, - buffer, USER_BUFFER_SIZE); + buffer, USER_BUFFER_MAX_SIZE); if (status == -1) { logError(ERROR, "read_ipu_data failed: %s\n", trb_strerror()); @@ -1115,7 +1124,7 @@ int start(int argc, char **argv) } else if (strncmp(cmd[0], "clearbit", CMD_SIZE) == 0) { /*******************************************/ - /* Register Clear Bits */ + /* Register Clear Bits */ /*******************************************/ int status = 0; @@ -1151,7 +1160,7 @@ int start(int argc, char **argv) } else if (strncmp(cmd[0], "loadbit", CMD_SIZE) == 0) { /*******************************************/ - /* Register Load Bits */ + /* Register Load Bits */ /*******************************************/ int status = 0; -- 2.43.0