49 #include <sys/ioctl.h>
53 #include <sys/utsname.h>
57 #define DEFAULT_OFNAME "out.core"
58 #define DEVNAME_TEMPLATE "/dev/ocs_%d"
108 #define OCS_IOCTL_CMD_BASE 'o'
109 #define OCS_IOCTL_CMD_DRIVER_INFO _IOWR(OCS_IOCTL_CMD_BASE, 4, ocs_ioctl_driver_info_t)
110 #define OCS_IOCTL_CMD_ECD_HELPER _IOWR(OCS_IOCTL_CMD_BASE, 5, ocs_ioctl_ecd_helper_t)
112 #if !defined(ARRAY_SIZE)
113 #define ARRAY_SIZE(x) (sizeof(x) / sizeof(x[0]))
118 #define helper_trace(fmt, ...) \
120 if (enable_helper_trace) \
121 printf(fmt, ##__VA_ARGS__); \
124 static void usage(
void);
126 int main(
int argc,
char *argv[])
132 uint32_t bufferLength;
133 char *test_template_ecdargs[] = {
"dead",
"testtemplate"};
134 char *be3_template_ecdargs[] = {
"dead",
"be3template"};
135 char **ecdargs = be3_template_ecdargs;
136 uint32_t ecdargs_count =
ARRAY_SIZE(be3_template_ecdargs);
137 struct utsname utsname;
142 char devname[FILENAME_MAX];
148 for (i = 1; i < argc; i ++)
150 switch (*(argv[i]+1)) {
157 devNum = atoi(argv[i]);
163 if (strcmp(argv[i],
"--test") == 0) {
164 ecdargs = test_template_ecdargs;
165 ecdargs_count =
ARRAY_SIZE(test_template_ecdargs);
167 else if (strcmp(argv[i],
"--be3") == 0) {
168 ecdargs = be3_template_ecdargs;
169 ecdargs_count =
ARRAY_SIZE(be3_template_ecdargs);
183 memset(&ctx, 0,
sizeof(ctx));
187 ctx.
fd = open(devname, O_RDWR);
189 printf(
"Error: can't open %s\n", devname);
194 bufferLength = 32*1024*1024;
195 buffer = malloc(bufferLength);
196 if (buffer == NULL) {
197 printf(
"Error: buffer malloc %d failed\n", bufferLength);
204 memset(¶ms, 0,
sizeof(params));
208 rc = uname(&utsname);
221 sscanf(utsname.release,
"%d.%d.%d", &major, &minor, &release);
228 printf(
"Error: OCS_IOCTL_CMD_DRIVER_INFO failed: %d\n", rc);
235 rc =
ecd_GetCoreDumpData(&ctx, fwState, ¶ms, buffer, bufferLength, ecdargs_count, ecdargs);
238 if ((rc > 0) && (ofname != NULL)) {
242 out = fopen(ofname,
"wb");
244 printf(
"Error: can't create %s\n", ofname);
246 rc = fwrite(buffer, 1, len, out);
248 printf(
"Error: fwrite failed: %d\n", rc);
258 static void usage(
void)
260 printf(
"Usage: ecdtest options\n");
261 printf(
" -o output-file # default out.core\n");
262 printf(
" -d device-instance # default 0\n");
263 printf(
" -t # enable helper funtion trace\n");
264 printf(
" --test # use test template\n");
265 printf(
" --be3 # use BE3 template (default)\n");
286 void os_assert(
char *message, uint32_t Line,
char *File)
288 ecd_log(
"%s(%d) %s\n", File, Line, message);
305 memset(&cmd, 0,
sizeof(cmd));
322 memset(&cmd, 0,
sizeof(cmd));
338 memset(&cmd, 0,
sizeof(cmd));
353 memset(&cmd, 0,
sizeof(cmd));
367 memset(&cmd, 0,
sizeof(cmd));
381 memset(&cmd, 0,
sizeof(cmd));
388 void os_bar_read8 (
void *ctx, uint32_t bar, uint32_t offset, uint32_t *pdata)
394 helper_trace(
"%-16s: bar %d offset x%x\n", __func__, bar, offset);
396 memset(&cmd, 0,
sizeof(cmd));
405 void os_bar_read16(
void *ctx, uint32_t bar, uint32_t offset, uint32_t *pdata)
411 helper_trace(
"%-16s: bar %d offset x%x\n", __func__, bar, offset);
413 memset(&cmd, 0,
sizeof(cmd));
422 void os_bar_read32(
void *ctx, uint32_t bar, uint32_t offset, uint32_t *pdata)
428 helper_trace(
"%-16s: bar %d offset x%x\n", __func__, bar, offset);
430 memset(&cmd, 0,
sizeof(cmd));
439 void os_bar_write8 (
void *ctx, uint32_t bar, uint32_t offset, uint32_t data)
444 helper_trace(
"%-16s: bar %d offset x%x\n", __func__, bar, offset);
446 memset(&cmd, 0,
sizeof(cmd));
459 helper_trace(
"%-16s: bar %d offset x%x\n", __func__, bar, offset);
461 memset(&cmd, 0,
sizeof(cmd));
475 helper_trace(
"%-16s: bar %d offset x%x\n", __func__, bar, offset);
477 memset(&cmd, 0,
sizeof(cmd));
void os_bar_write8(void *ctx, uint32_t bar, uint32_t offset, uint32_t data)
void os_assert(char *message, uint32_t Line, char *File)
void os_cfg_read16(void *ctx, uint32_t offset, uint32_t *pdata)
void os_bar_read16(void *ctx, uint32_t bar, uint32_t offset, uint32_t *pdata)
static int enable_helper_trace
void os_bar_read8(void *ctx, uint32_t bar, uint32_t offset, uint32_t *pdata)
#define OCS_IOCTL_CMD_ECD_HELPER
void os_cfg_write16(void *ctx, uint32_t offset, uint32_t data)
#define OCS_IOCTL_CMD_DRIVER_INFO
void os_bar_read32(void *ctx, uint32_t bar, uint32_t offset, uint32_t *pdata)
uint32_t ioctl_high_version
void os_stall(void *ctx, uint32_t usecTime)
void os_cfg_read32(void *ctx, uint32_t offset, uint32_t *pdata)
uint32_t ioctl_low_version
void os_bar_write16(void *ctx, uint32_t bar, uint32_t offset, uint32_t data)
void os_cfg_write32(void *ctx, uint32_t offset, uint32_t data)
#define helper_trace(fmt,...)
void os_free(void *ctx, void *ptr)
int main(int argc, char *argv[])
main elxsdkutil CLI functionality
user provided context passed to the helper functions
void os_bar_write32(void *ctx, uint32_t bar, uint32_t offset, uint32_t data)
DRIVER_INFO ioctl structure.
void usage()
Show program usage.
int ecd_GetCoreDumpData(void *dumpCtx, ecd_fwState_t fwState, ecd_get_params_t *params, void *dumpBuffer, int dumpBufferSize, int argc, char *argv[])
Fetch coreDump data.
void ecd_log(char *fmt,...)
OCS_IOCTL_CMD_ECD_HELPER ioctl structure.
void * os_malloc(void *ctx, uint32_t size)
void os_cfg_read8(void *ctx, uint32_t offset, uint32_t *pdata)
void os_cfg_write8(void *ctx, uint32_t offset, uint32_t data)