svn commit: r245848 - head/sys/boot/i386/libi386
Sergey Kandaurov
pluknet at freebsd.org
Mon Feb 4 09:43:44 UTC 2013
On 23 January 2013 22:34, John Baldwin <jhb at freebsd.org> wrote:
> Author: jhb
> Date: Wed Jan 23 18:34:21 2013
> New Revision: 245848
> URL: http://svnweb.freebsd.org/changeset/base/245848
>
> Log:
> Always update the hw.uart.console hint anytime a change is made to the
> comconsole setup. Previously the hint would be set when if you set a
> custom port, but it would not be updated if you later set a custom speed.
>
> Also, leave the hw.uart.console hint mutable so it can be overridden or
> unset by the user if needed.
>
> Reviewed by: kib (earlier version)
> MFC after: 1 week
Looks like this results in something wrong.
I have a serial console at COM2 (uart1), but it chooses uart0
(1016 == 0x3F8), compare .flags and the final hw.uart.console value.
hint.uart.0.at="isa"
hint.uart.0.irq="4"
hint.uart.0.port="0x3F8"
hint.uart.1.at="isa"
hint.uart.1.flags="0x10"
hint.uart.1.irq="3"
hint.uart.1.port="0x2F8"
hw.uart.console="io:1016,br:9600"
Or even:
hint.uart.0.at="isa"
hint.uart.0.disabled="1"
hint.uart.0.irq="4"
hint.uart.0.port="0x3F8"
hint.uart.1.at="isa"
hint.uart.1.flags="0x10"
hint.uart.1.irq="3"
hint.uart.1.port="0x2F8"
hw.uart.console="io:1016,br:9600"
>
> Modified:
> head/sys/boot/i386/libi386/comconsole.c
>
> Modified: head/sys/boot/i386/libi386/comconsole.c
> ==============================================================================
> --- head/sys/boot/i386/libi386/comconsole.c Wed Jan 23 18:19:50 2013 (r245847)
> +++ head/sys/boot/i386/libi386/comconsole.c Wed Jan 23 18:34:21 2013 (r245848)
> @@ -50,7 +50,6 @@ static int comc_init(int arg);
> static void comc_putchar(int c);
> static int comc_getchar(void);
> static int comc_getspeed(void);
> -static void set_hw_console_hint(void);
> static int comc_ischar(void);
> static int comc_parseint(const char *string);
> static uint32_t comc_parse_pcidev(const char *string);
> @@ -202,27 +201,14 @@ comc_port_set(struct env_var *ev, int fl
> }
>
> if ((comconsole.c_flags & (C_ACTIVEIN | C_ACTIVEOUT)) != 0 &&
> - comc_port != port) {
> + comc_port != port)
> comc_setup(comc_curspeed, port);
> - set_hw_console_hint();
> - }
>
> env_setenv(ev->ev_name, flags | EV_NOHOOK, value, NULL, NULL);
>
> return (CMD_OK);
> }
>
> -static void
> -set_hw_console_hint(void)
> -{
> - char intbuf[64];
> -
> - unsetenv("hw.uart.console");
> - sprintf(intbuf, "io:%d,br:%d", comc_port, comc_curspeed);
> - env_setenv("hw.uart.console", EV_VOLATILE, intbuf,
> - env_noset, env_nounset);
> -}
> -
> /*
> * Input: bus:dev:func[:bar]. If bar is not specified, it is 0x10.
> * Output: bar[24:16] bus[15:8] dev[7:3] func[2:0]
> @@ -288,7 +274,6 @@ comc_pcidev_handle(uint32_t locator)
> comc_port_set, env_nounset);
>
> comc_setup(comc_curspeed, port);
> - set_hw_console_hint();
> comc_locator = locator;
>
> return (CMD_OK);
> @@ -318,8 +303,10 @@ static void
> comc_setup(int speed, int port)
> {
> static int TRY_COUNT = 1000000;
> + char intbuf[64];
> int tries;
>
> + unsetenv("hw.uart.console");
> comc_curspeed = speed;
> comc_port = port;
>
> @@ -334,9 +321,11 @@ comc_setup(int speed, int port)
> inb(comc_port + com_data);
> while (inb(comc_port + com_lsr) & LSR_RXRDY && ++tries < TRY_COUNT);
>
> - if (tries < TRY_COUNT)
> + if (tries < TRY_COUNT) {
> comconsole.c_flags |= (C_PRESENTIN | C_PRESENTOUT);
> - else
> + sprintf(intbuf, "io:%d,br:%d", comc_port, comc_curspeed);
> + env_setenv("hw.uart.console", EV_VOLATILE, intbuf, NULL, NULL);
> + } else
> comconsole.c_flags &= ~(C_PRESENTIN | C_PRESENTOUT);
> }
>
--
wbr,
pluknet
More information about the svn-src-all
mailing list