aboutsummaryrefslogtreecommitdiff
path: root/stand/efi
diff options
context:
space:
mode:
authorWarner Losh <imp@FreeBSD.org>2023-05-24 22:34:31 +0000
committerWarner Losh <imp@FreeBSD.org>2023-05-25 04:33:53 +0000
commitf28dff43ad62ee7396abde1f8449ead1ece98053 (patch)
treefa23c7b3d70da0d830bb7f2b2b48d7b155081249 /stand/efi
parent2efbc8e2840f6c0b8255a46527f2cdb32ace1bd1 (diff)
downloadsrc-f28dff43ad62ee7396abde1f8449ead1ece98053.tar.gz
src-f28dff43ad62ee7396abde1f8449ead1ece98053.zip
Diffstat (limited to 'stand/efi')
-rw-r--r--stand/efi/libefi/eficom.c21
1 files changed, 16 insertions, 5 deletions
diff --git a/stand/efi/libefi/eficom.c b/stand/efi/libefi/eficom.c
index b1c84399a05d..ca08458c2ca2 100644
--- a/stand/efi/libefi/eficom.c
+++ b/stand/efi/libefi/eficom.c
@@ -332,9 +332,12 @@ comc_probe(struct console *sc)
env_setenv("efi_com_speed", EV_VOLATILE, value,
comc_speed_set, env_nounset);
- eficom.c_flags = 0;
if (comc_setup()) {
sc->c_flags = C_PRESENTIN | C_PRESENTOUT;
+ } else {
+ sc->c_flags &= ~(C_PRESENTIN | C_PRESENTOUT);
+ free(comc_port);
+ comc_port = NULL;
}
}
@@ -349,14 +352,20 @@ comc_probe_compat(struct console *sc)
}
#endif
+/*
+ * Called when the console is selected in cons_change. If we didn't detect the
+ * device, comc_port will be NULL, and comc_setup will fail. It may be called
+ * even when the device isn't present as a 'fallback' console or when listed
+ * specifically in console env, so we have to reset the c_flags in those case to
+ * say it's not present.
+ */
static int
comc_init(int arg __unused)
{
-
if (comc_setup())
return (CMD_OK);
- eficom.c_flags = 0;
+ eficom.c_flags &= ~(C_ACTIVEIN | C_ACTIVEOUT);
return (CMD_ERROR);
}
@@ -516,8 +525,10 @@ comc_setup(void)
EFI_STATUS status;
char *ev;
- /* port is not usable */
- if (comc_port->sio == NULL)
+ /*
+ * If the device isn't active, or there's no port present.
+ */
+ if ((eficom.c_flags & (C_ACTIVEIN | C_ACTIVEOUT)) == 0 || comc_port == NULL)
return (false);
if (comc_port->sio->Reset != NULL) {