mirror of
https://git.FreeBSD.org/src.git
synced 2024-12-30 12:04:07 +00:00
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
This commit is contained in:
parent
75d774e36a
commit
44e54f208a
Notes:
svn2git
2020-12-20 02:59:44 +00:00
svn path=/head/; revision=245848
@ -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 flags, const void *value)
|
||||
}
|
||||
|
||||
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);
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user