Mercurial > ecos
diff packages/redboot/current/src/main.c @ 335:a253970d627b
Fix baudrate setting for CYGPKG_REDBOOT_ANY_CONSOLE
| author | msalter |
|---|---|
| date | Mon, 16 Sep 2002 13:18:40 +0000 |
| parents | 85c0eb753287 |
| children | 44f818173f96 |
line wrap: on
line diff
--- 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 <flash_config.h> #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; }
