# HG changeset patch # User Mychaela Falconia # Date 1506035221 0 # Node ID 8c011177adb9fbb75abbd3abb4940c652bfc16c7 # Parent d0a4c05d98dc6fd029403a9c7a20592d6780ab39 loadtools reworked to use factored-out libserial diff -r d0a4c05d98dc -r 8c011177adb9 libserial-orig/Makefile --- a/libserial-orig/Makefile Thu Sep 21 21:49:07 2017 +0000 +++ b/libserial-orig/Makefile Thu Sep 21 23:07:01 2017 +0000 @@ -1,6 +1,6 @@ CC= gcc CFLAGS= -O2 -OBJS= baudtab.o openport.o setbaud.o +OBJS= baudtab.o openport.o setbaud.o setbyname.o LIB= libserial.a all: ${LIB} diff -r d0a4c05d98dc -r 8c011177adb9 libserial-orig/setbyname.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/libserial-orig/setbyname.c Thu Sep 21 23:07:01 2017 +0000 @@ -0,0 +1,21 @@ +/* + * This module contains the wrapper function (used by loadtools) + * that looks up a baud rate by name and calls set_serial_baud(). + */ + +#include +#include +#include "baudrate.h" + +extern struct baudrate *find_baudrate_by_name(); + +set_fixed_baudrate(baudname) + char *baudname; +{ + struct baudrate *br; + + br = find_baudrate_by_name(baudname); + if (!br) + exit(1); /* error msg already printed */ + set_serial_baudrate(br); +} diff -r d0a4c05d98dc -r 8c011177adb9 loadtools/Makefile --- a/loadtools/Makefile Thu Sep 21 21:49:07 2017 +0000 +++ b/loadtools/Makefile Thu Sep 21 23:07:01 2017 +0000 @@ -7,43 +7,44 @@ EXTRA_OBJ= compalload.o -COMPALRAM_OBJS= compalload.o compalram.o defpath.o sercomm.o ttypassthru.o +COMPALRAM_OBJS= compalload.o compalram.o defpath.o ttypassthru.o IRAM_OBJS= defexitstub.o defpath.o flashstubs.o hexdecode.o hwparam.o \ - romload.o secondprog.o sercomm.o sertool.o srecreader.o \ - ttypassthru.o ${EXTRA_OBJ} + romload.o secondprog.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 \ labaud.o ltdispatch.o ltdump.o ltexit.o lthelp.o ltmain.o \ - ltmisc.o ltpassthru.o ltscript.o romload.o sercomm.o \ - srecreader.o tpinterf.o tpinterf2.o tpinterf3.o ${EXTRA_OBJ} + ltmisc.o ltpassthru.o ltscript.o romload.o 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 \ - secondprog.o sercomm.o srecreader.o tpinterf.o ttypassthru.o \ - ${EXTRA_OBJ} + secondprog.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 \ - sercomm.o srecreader.o tpinterf.o ${EXTRA_OBJ} + srecreader.o tpinterf.o ${EXTRA_OBJ} + +LIBSERIAL= ../libserial/libserial.a all: ${PROGS} -fc-compalram: ${COMPALRAM_OBJS} - ${CC} ${CFLAGS} -o $@ ${COMPALRAM_OBJS} +fc-compalram: ${COMPALRAM_OBJS} ${LIBSERIAL} + ${CC} ${CFLAGS} -o $@ ${COMPALRAM_OBJS} ${LIBSERIAL} -fc-iram: ${IRAM_OBJS} - ${CC} ${CFLAGS} -o $@ ${IRAM_OBJS} +fc-iram: ${IRAM_OBJS} ${LIBSERIAL} + ${CC} ${CFLAGS} -o $@ ${IRAM_OBJS} ${LIBSERIAL} -fc-loadtool: ${LOADTOOL_OBJS} - ${CC} ${CFLAGS} -o $@ ${LOADTOOL_OBJS} +fc-loadtool: ${LOADTOOL_OBJS} ${LIBSERIAL} + ${CC} ${CFLAGS} -o $@ ${LOADTOOL_OBJS} ${LIBSERIAL} -fc-xram: ${XRAM_OBJS} - ${CC} ${CFLAGS} -o $@ ${XRAM_OBJS} +fc-xram: ${XRAM_OBJS} ${LIBSERIAL} + ${CC} ${CFLAGS} -o $@ ${XRAM_OBJS} ${LIBSERIAL} -fc-buzplay: ${BUZPLAY_OBJS} - ${CC} ${CFLAGS} -o $@ ${BUZPLAY_OBJS} +fc-buzplay: ${BUZPLAY_OBJS} ${LIBSERIAL} + ${CC} ${CFLAGS} -o $@ ${BUZPLAY_OBJS} ${LIBSERIAL} install: mkdir -p ${INSTBIN} diff -r d0a4c05d98dc -r 8c011177adb9 loadtools/baudrate.h --- a/loadtools/baudrate.h Thu Sep 21 21:49:07 2017 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,7 +0,0 @@ -/* this header file defines the data structure for baud rate machinations */ - -struct baudrate { - char *name; - speed_t termios_code; - int bootrom_code; -}; diff -r d0a4c05d98dc -r 8c011177adb9 loadtools/bpmain.c --- a/loadtools/bpmain.c Thu Sep 21 21:49:07 2017 +0000 +++ b/loadtools/bpmain.c Thu Sep 21 23:07:01 2017 +0000 @@ -9,7 +9,8 @@ #include #include "srecreader.h" -extern char *target_ttydev; +char *target_ttydev; + extern struct srecreader iramimage; extern char default_buzplayer_image[]; extern void (*default_exit)(); @@ -70,11 +71,11 @@ if (!iramimage.filename) iramimage.filename = default_buzplayer_image; - open_target_serial(); + open_serial_port(target_ttydev); if (reattach) - switch_baud_rate(reattach); + set_serial_baudrate(reattach); else { - perform_compal_stage(1); + perform_compal_stage(); perform_romload(); putchar('\n'); if (tpinterf_pass_output(1) < 0) diff -r d0a4c05d98dc -r 8c011177adb9 loadtools/clmain.c --- a/loadtools/clmain.c Thu Sep 21 21:49:07 2017 +0000 +++ b/loadtools/clmain.c Thu Sep 21 23:07:01 2017 +0000 @@ -7,12 +7,12 @@ #include #include #include -#include #include -#include "baudrate.h" +#include "../libserial/baudrate.h" #include "srecreader.h" -extern char *target_ttydev; +char *target_ttydev; + extern struct srecreader iramimage; extern char default_loadagent_image[]; extern struct srecreader xramimage; @@ -92,8 +92,8 @@ passon_argc = argc - optind - 2; } - open_target_serial(); - perform_compal_stage(1); + open_serial_port(target_ttydev); + perform_compal_stage(); perform_romload(); /* loadagent should be running now */ if (tpinterf_pass_output(1) < 0) diff -r d0a4c05d98dc -r 8c011177adb9 loadtools/compalload.c --- a/loadtools/compalload.c Thu Sep 21 21:49:07 2017 +0000 +++ b/loadtools/compalload.c Thu Sep 21 23:07:01 2017 +0000 @@ -13,13 +13,11 @@ #include #include #include -#include #include extern char default_compalstage_dir[]; extern char *target_ttydev; extern int target_fd; -extern struct termios target_termios; static char compalstage_pathname[MAXPATHLEN]; static u_char *compalstage_imgbuf; @@ -153,7 +151,7 @@ } } -perform_compal_stage(for_boot_rom) +perform_compal_stage() { int fd; struct stat st; @@ -197,26 +195,12 @@ compute_checksum(); printf("Using Compal stage image %s\n", compalstage_pathname); - cfsetispeed(&target_termios, B115200); - cfsetospeed(&target_termios, B115200); - if (tcsetattr(target_fd, TCSAFLUSH, &target_termios) < 0) { - perror("tcsetattr to switch baud rate"); - exit(1); - } + set_fixed_baudrate("115200"); ioctl(target_fd, FIONBIO, &zero); printf("Waiting for PROMPT1 from target (%s) at 115200 baud\n", target_ttydev); read_loop(); free(compalstage_imgbuf); - if (for_boot_rom) { - cfsetispeed(&target_termios, B19200); - cfsetospeed(&target_termios, B19200); - if (tcsetattr(target_fd, TCSAFLUSH, &target_termios) < 0) { - perror("tcsetattr to switch baud rate"); - exit(1); - } - } - return(1); } diff -r d0a4c05d98dc -r 8c011177adb9 loadtools/compalram.c --- a/loadtools/compalram.c Thu Sep 21 21:49:07 2017 +0000 +++ b/loadtools/compalram.c Thu Sep 21 23:07:01 2017 +0000 @@ -7,7 +7,7 @@ #include #include -extern char *target_ttydev; +char *target_ttydev; main(argc, argv) char **argv; @@ -19,8 +19,8 @@ target_ttydev = argv[1]; set_compalstage_fullpath(argv[2]); - open_target_serial(); - perform_compal_stage(0); + open_serial_port(target_ttydev); + perform_compal_stage(); tty_passthru(); exit(0); } diff -r d0a4c05d98dc -r 8c011177adb9 loadtools/labaud.c --- a/loadtools/labaud.c Thu Sep 21 21:49:07 2017 +0000 +++ b/loadtools/labaud.c Thu Sep 21 23:07:01 2017 +0000 @@ -5,9 +5,8 @@ #include #include -#include #include -#include "baudrate.h" +#include "../libserial/baudrate.h" extern int target_fd; extern struct baudrate *current_baud_rate; @@ -26,7 +25,7 @@ tpinterf_make_cmd(argv); if (tpinterf_send_cmd() < 0) return(-1); - switch_baud_rate(newbr); + set_serial_baudrate(newbr); usleep(150000); write(target_fd, &U, 1); return tpinterf_pass_output(1); diff -r d0a4c05d98dc -r 8c011177adb9 loadtools/ltmain.c --- a/loadtools/ltmain.c Thu Sep 21 21:49:07 2017 +0000 +++ b/loadtools/ltmain.c Thu Sep 21 23:07:01 2017 +0000 @@ -9,7 +9,8 @@ #include #include "srecreader.h" -extern char *target_ttydev; +char *target_ttydev; + extern struct srecreader iramimage; extern char default_loadagent_image[]; extern char hw_init_script[]; @@ -76,11 +77,11 @@ if (!iramimage.filename) iramimage.filename = default_loadagent_image; - open_target_serial(); + open_serial_port(target_ttydev); if (reattach) - switch_baud_rate(reattach); + set_serial_baudrate(reattach); else { - perform_compal_stage(1); + perform_compal_stage(); perform_romload(); putchar('\n'); if (tpinterf_pass_output(1) < 0) diff -r d0a4c05d98dc -r 8c011177adb9 loadtools/romload.c --- a/loadtools/romload.c Thu Sep 21 21:49:07 2017 +0000 +++ b/loadtools/romload.c Thu Sep 21 23:07:01 2017 +0000 @@ -13,7 +13,7 @@ #include #include #include -#include "baudrate.h" +#include "../libserial/baudrate.h" #include "srecreader.h" extern int errno; @@ -179,6 +179,7 @@ if (open_srec_file(&iramimage) < 0) exit(1); + set_fixed_baudrate("19200"); ioctl(target_fd, FIONBIO, &zero); send_beacons(); printf("Got beacon response, attempting download\n"); @@ -203,7 +204,7 @@ } printf("

name); - switch_baud_rate(romload_baud_rate); + set_serial_baudrate(romload_baud_rate); usleep(SERIAL_FLUSH_DELAY * 1000); tcflush(target_fd, TCIFLUSH); diff -r d0a4c05d98dc -r 8c011177adb9 loadtools/sercomm.c --- a/loadtools/sercomm.c Thu Sep 21 21:49:07 2017 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,88 +0,0 @@ -/* - * This module handles the establishment of serial communication - * with the target, i.e., the host-side termios stuff. - */ - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include "baudrate.h" - -char *target_ttydev; -int target_fd; -struct termios target_termios; - -struct baudrate baud_rate_table[] = { - /* the first listed rate will be our default */ - {"115200", B115200, 0}, - {"57600", B57600, 1}, - {"38400", B38400, 2}, - {"19200", B19200, 4}, - /* non-standard high baud rates "remapped" by CP2102 usb2serial IC */ - {"812500", B921600, -1}, - {"406250", B460800, -1}, - {"203125", B230400, -1}, - /* table search terminator */ - {NULL, B0, -1}, -}; -struct baudrate *current_baud_rate; - -open_target_serial() -{ - target_fd = open(target_ttydev, O_RDWR|O_NONBLOCK); - if (target_fd < 0) { - perror(target_ttydev); - exit(1); - } - target_termios.c_iflag = IGNBRK; - target_termios.c_oflag = 0; - target_termios.c_cflag = CLOCAL|HUPCL|CREAD|CS8; - target_termios.c_lflag = 0; - target_termios.c_cc[VMIN] = 1; - target_termios.c_cc[VTIME] = 0; - /* start at B19200, as that's what we'll need to use initially */ - cfsetispeed(&target_termios, B19200); - cfsetospeed(&target_termios, B19200); - if (tcsetattr(target_fd, TCSAFLUSH, &target_termios) < 0) { - perror("initial tcsetattr on target"); - exit(1); - } - ioctl(target_fd, TIOCEXCL); - return 0; -} - -struct baudrate * -find_baudrate_by_name(srch_name) - char *srch_name; -{ - struct baudrate *br; - - for (br = baud_rate_table; br->name; br++) - if (!strcmp(br->name, srch_name)) - break; - if (br->name) - return(br); - else { - fprintf(stderr, "error: baud rate \"%s\" not known\n", - srch_name); - return(NULL); - } -} - -switch_baud_rate(br) - struct baudrate *br; -{ - cfsetispeed(&target_termios, br->termios_code); - cfsetospeed(&target_termios, br->termios_code); - if (tcsetattr(target_fd, TCSAFLUSH, &target_termios) < 0) { - perror("tcsetattr to switch baud rate"); - exit(1); - } - current_baud_rate = br; -} diff -r d0a4c05d98dc -r 8c011177adb9 loadtools/sertool.c --- a/loadtools/sertool.c Thu Sep 21 21:49:07 2017 +0000 +++ b/loadtools/sertool.c Thu Sep 21 23:07:01 2017 +0000 @@ -12,7 +12,8 @@ #include #include "srecreader.h" -extern char *target_ttydev; +char *target_ttydev; + extern struct srecreader iramimage; extern int gta_modem_poweron; @@ -64,8 +65,8 @@ passon_argc = argc - optind - 2; } - open_target_serial(); - perform_compal_stage(1); + open_serial_port(target_ttydev); + perform_compal_stage(); perform_romload(); if (passon_argv) exec_2nd_prog();