# HG changeset patch # User msalter # Date 1032182320 0 # Node ID a253970d627bd50b21aee5a70ffdb34f12ad7df9 # Parent c9cbf5dfb306da25c0be733de1c33e26256d179d Fix baudrate setting for CYGPKG_REDBOOT_ANY_CONSOLE diff --git a/packages/redboot/current/ChangeLog b/packages/redboot/current/ChangeLog --- a/packages/redboot/current/ChangeLog +++ b/packages/redboot/current/ChangeLog @@ -1,3 +1,8 @@ +2002-09-16 Mark Salter + + * src/main.c (set_console_baud_rate): Handle CYGPKG_REDBOOT_ANY_CONSOLE. + (set_comm_baud_rate): New function. + 2002-09-13 Mark Salter * src/decompress.c: Move error handling back into gzip_close to diff --git a/packages/redboot/current/src/main.c b/packages/redboot/current/src/main.c --- a/packages/redboot/current/src/main.c +++ b/packages/redboot/current/src/main.c @@ -447,23 +447,41 @@ do_reset(int argc, char *argv[]) #include #endif +static int +set_comm_baud_rate(hal_virtual_comm_table_t *chan, int rate) +{ + int current_rate; + + current_rate = CYGACC_COMM_IF_CONTROL(*chan, __COMMCTL_SETBAUD, rate); + if (rate != current_rate) + return CYGACC_COMM_IF_CONTROL(*chan, __COMMCTL_SETBAUD, rate); + + return 0; +} + int set_console_baud_rate(int rate) { - hal_virtual_comm_table_t *__chan; - static int current_rate = CYGNUM_HAL_VIRTUAL_VECTOR_CONSOLE_CHANNEL_BAUD; - int ret = current_rate; + int ret; +#ifdef CYGPKG_REDBOOT_ANY_CONSOLE + if (!console_selected) { + int cur = CYGACC_CALL_IF_SET_CONSOLE_COMM(CYGNUM_CALL_IF_SET_COMM_ID_QUERY_CURRENT); + int i; + // Set baud for all channels + for (i = 0; i < CYGNUM_HAL_VIRTUAL_VECTOR_COMM_CHANNELS; i++) { + CYGACC_CALL_IF_SET_CONSOLE_COMM(i); + ret = set_comm_baud_rate(CYGACC_CALL_IF_CONSOLE_PROCS(), rate); + if (ret < 0) + break; + } + CYGACC_CALL_IF_SET_CONSOLE_COMM(cur); + } else +#endif + ret = set_comm_baud_rate(CYGACC_CALL_IF_CONSOLE_PROCS(), rate); - if (rate != current_rate) { - __chan = CYGACC_CALL_IF_CONSOLE_PROCS(); - ret = CYGACC_COMM_IF_CONTROL(*__chan, __COMMCTL_SETBAUD, rate); - if (ret < 0) { - diag_printf("Setting console baud rate to %d failed\n", rate); - return ret; - } - ret = current_rate; - current_rate = rate; - } + if (ret < 0) + diag_printf("Setting console baud rate to %d failed\n", rate); + return ret; }