# HG changeset patch # User Mychaela Falconia # Date 1493675698 0 # Node ID 064d4eedb3a6479965b7c756f55326bde9b4d664 # Parent f2dde45ba3787253ef46bf0e7a53206f7d69c674 loadtools: second program invokation support added to fc-iram like in fc-xram diff -r f2dde45ba378 -r 064d4eedb3a6 loadtools/Makefile --- a/loadtools/Makefile Mon May 01 21:21:13 2017 +0000 +++ b/loadtools/Makefile Mon May 01 21:54:58 2017 +0000 @@ -10,8 +10,8 @@ COMPALRAM_OBJS= compalload.o compalram.o defpath.o sercomm.o ttypassthru.o IRAM_OBJS= defexitstub.o defpath.o flashstubs.o hexdecode.o hwparam.o \ - romload.o sercomm.o sertool.o srecreader.o ttypassthru.o \ - ${EXTRA_OBJ} + romload.o secondprog.o sercomm.o sertool.o srecreader.o \ + ttypassthru.o ${EXTRA_OBJ} LOADTOOL_OBJS= crc32tab.o defpath.o flashops.o flcmplboot.o flmain.o flmisc.o \ flprogbin.o flprogsrec.o flutil.o hexdecode.o hwparam.o \ @@ -20,8 +20,9 @@ srecreader.o tpinterf.o tpinterf2.o tpinterf3.o ${EXTRA_OBJ} XRAM_OBJS= chainload.o clmain.o defexitstub.o defpath.o flashstubs.o \ - hexdecode.o hwparam.o initscript.o labaud.o romload.o sercomm.o\ - srecreader.o tpinterf.o ttypassthru.o ${EXTRA_OBJ} + hexdecode.o hwparam.o initscript.o labaud.o romload.o \ + secondprog.o sercomm.o srecreader.o tpinterf.o ttypassthru.o \ + ${EXTRA_OBJ} BUZPLAY_OBJS= bpdispatch.o bpmain.o buzplay.o defpath.o flashstubs.o \ hexdecode.o hwparam.o labaud.o ltexit.o ltpassthru.o romload.o \ diff -r f2dde45ba378 -r 064d4eedb3a6 loadtools/clmain.c --- a/loadtools/clmain.c Mon May 01 21:21:13 2017 +0000 +++ b/loadtools/clmain.c Mon May 01 21:54:58 2017 +0000 @@ -116,28 +116,3 @@ tty_passthru(); exit(0); } - -exec_2nd_prog() -{ - char **execp_argv; - char **sp, **dp; - extern int target_fd; - char desc_arg[16]; - - sprintf(desc_arg, "-d%d", target_fd); - execp_argv = (char **) malloc(sizeof(char *) * (passon_argc + 2)); - if (!execp_argv) { - perror("malloc argv for execvp"); - exit(1); - } - sp = passon_argv; - dp = execp_argv; - *dp++ = *sp++; - *dp++ = desc_arg; - while (*sp) - *dp++ = *sp++; - *dp = NULL; - execvp(execp_argv[0], execp_argv); - fprintf(stderr, "Unable to execvp %s\n", passon_argv[0]); - exit(1); -} diff -r f2dde45ba378 -r 064d4eedb3a6 loadtools/secondprog.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/loadtools/secondprog.c Mon May 01 21:54:58 2017 +0000 @@ -0,0 +1,36 @@ +/* + * This module contains the code for passing the serial channel to a + * second program, used by fc-iram and fc-xram. + */ + +#include +#include +#include + +extern char **passon_argv; +extern int passon_argc; + +exec_2nd_prog() +{ + char **execp_argv; + char **sp, **dp; + extern int target_fd; + char desc_arg[16]; + + sprintf(desc_arg, "-d%d", target_fd); + execp_argv = (char **) malloc(sizeof(char *) * (passon_argc + 2)); + if (!execp_argv) { + perror("malloc argv for execvp"); + exit(1); + } + sp = passon_argv; + dp = execp_argv; + *dp++ = *sp++; + *dp++ = desc_arg; + while (*sp) + *dp++ = *sp++; + *dp = NULL; + execvp(execp_argv[0], execp_argv); + fprintf(stderr, "Unable to execvp %s\n", passon_argv[0]); + exit(1); +} diff -r f2dde45ba378 -r 064d4eedb3a6 loadtools/sertool.c --- a/loadtools/sertool.c Mon May 01 21:21:13 2017 +0000 +++ b/loadtools/sertool.c Mon May 01 21:54:58 2017 +0000 @@ -16,6 +16,9 @@ extern struct srecreader iramimage; extern int gta_modem_poweron; +char **passon_argv; +int passon_argc; + main(argc, argv) char **argv; { @@ -52,14 +55,20 @@ "usage: fc-iram [options] ttyport iramimage.srec\n"); exit(1); } - if (argc - optind != 2) + if (argc - optind < 2) goto usage; target_ttydev = argv[optind]; iramimage.filename = argv[optind+1]; + if (argc - optind >= 3) { + passon_argv = argv + optind + 2; + passon_argc = argc - optind - 2; + } open_target_serial(); perform_compal_stage(1); perform_romload(); + if (passon_argv) + exec_2nd_prog(); tty_passthru(); exit(0); }