OvmfPkg/PlatformBootManagerLib: connect consoles unconditionally
If both ConIn and ConOut exist, but ConIn references none of the PS/2 keyboard, the USB wild-card keyboard, and any serial ports, then PlatformInitializeConsole() currently allows the boot to proceed without any input devices at all. This makes for a bad user experience -- the firmware menu could only be entered through OsIndications, set by a guest OS. Do what ArmVirtQemu does already, namely connect the consoles, and add them to ConIn / ConOut / ErrOut, unconditionally. (The underlying EfiBootManagerUpdateConsoleVariable() function checks for duplicates.) The issue used to be masked by the EfiBootManagerConnectAll() call that got conditionalized in commit245c643cc8
. This patch is best viewed with "git show -b -W". Cc: Ard Biesheuvel <ard.biesheuvel@linaro.org> Cc: Jordan Justen <jordan.l.justen@intel.com> Fixes:245c643cc8
Ref: https://bugzilla.redhat.com/show_bug.cgi?id=1577546 Contributed-under: TianoCore Contribution Agreement 1.1 Signed-off-by: Laszlo Ersek <lersek@redhat.com> Reviewed-by: Ard Biesheuvel <ard.biesheuvel@linaro.org>
This commit is contained in:
@@ -26,7 +26,6 @@ VOID *mEfiDevPathNotifyReg;
|
|||||||
EFI_EVENT mEfiDevPathEvent;
|
EFI_EVENT mEfiDevPathEvent;
|
||||||
VOID *mEmuVariableEventReg;
|
VOID *mEmuVariableEventReg;
|
||||||
EFI_EVENT mEmuVariableEvent;
|
EFI_EVENT mEmuVariableEvent;
|
||||||
BOOLEAN mDetectVgaOnly;
|
|
||||||
UINT16 mHostBridgeDevId;
|
UINT16 mHostBridgeDevId;
|
||||||
|
|
||||||
//
|
//
|
||||||
@@ -830,7 +829,6 @@ DetectAndPreparePlatformPciDevicePath (
|
|||||||
);
|
);
|
||||||
ASSERT_EFI_ERROR (Status);
|
ASSERT_EFI_ERROR (Status);
|
||||||
|
|
||||||
if (!mDetectVgaOnly) {
|
|
||||||
//
|
//
|
||||||
// Here we decide whether it is LPC Bridge
|
// Here we decide whether it is LPC Bridge
|
||||||
//
|
//
|
||||||
@@ -859,7 +857,6 @@ DetectAndPreparePlatformPciDevicePath (
|
|||||||
PreparePciSerialDevicePath (Handle);
|
PreparePciSerialDevicePath (Handle);
|
||||||
return EFI_SUCCESS;
|
return EFI_SUCCESS;
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
//
|
//
|
||||||
// Here we decide which display device to enable in PCI bus
|
// Here we decide which display device to enable in PCI bus
|
||||||
@@ -877,26 +874,6 @@ DetectAndPreparePlatformPciDevicePath (
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
Do platform specific PCI Device check and add them to ConOut, ConIn, ErrOut
|
|
||||||
|
|
||||||
@param[in] DetectVgaOnly - Only detect VGA device if it's TRUE.
|
|
||||||
|
|
||||||
@retval EFI_SUCCESS - PCI Device check and Console variable update
|
|
||||||
successfully.
|
|
||||||
@retval EFI_STATUS - PCI Device check or Console variable update fail.
|
|
||||||
|
|
||||||
**/
|
|
||||||
EFI_STATUS
|
|
||||||
DetectAndPreparePlatformPciDevicePaths (
|
|
||||||
BOOLEAN DetectVgaOnly
|
|
||||||
)
|
|
||||||
{
|
|
||||||
mDetectVgaOnly = DetectVgaOnly;
|
|
||||||
return VisitAllPciInstances (DetectAndPreparePlatformPciDevicePath);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Connect the predefined platform default console device.
|
Connect the predefined platform default console device.
|
||||||
|
|
||||||
@@ -910,22 +887,12 @@ PlatformInitializeConsole (
|
|||||||
)
|
)
|
||||||
{
|
{
|
||||||
UINTN Index;
|
UINTN Index;
|
||||||
EFI_DEVICE_PATH_PROTOCOL *VarConout;
|
|
||||||
EFI_DEVICE_PATH_PROTOCOL *VarConin;
|
|
||||||
|
|
||||||
//
|
|
||||||
// Connect RootBridge
|
|
||||||
//
|
|
||||||
GetEfiGlobalVariable2 (EFI_CON_OUT_VARIABLE_NAME, (VOID **) &VarConout,
|
|
||||||
NULL);
|
|
||||||
GetEfiGlobalVariable2 (EFI_CON_IN_VARIABLE_NAME, (VOID **) &VarConin, NULL);
|
|
||||||
|
|
||||||
if (VarConout == NULL || VarConin == NULL) {
|
|
||||||
//
|
//
|
||||||
// Do platform specific PCI Device check and add them to ConOut, ConIn,
|
// Do platform specific PCI Device check and add them to ConOut, ConIn,
|
||||||
// ErrOut
|
// ErrOut
|
||||||
//
|
//
|
||||||
DetectAndPreparePlatformPciDevicePaths (FALSE);
|
VisitAllPciInstances (DetectAndPreparePlatformPciDevicePath);
|
||||||
|
|
||||||
//
|
//
|
||||||
// Have chance to connect the platform default console,
|
// Have chance to connect the platform default console,
|
||||||
@@ -949,12 +916,6 @@ PlatformInitializeConsole (
|
|||||||
PlatformConsole[Index].DevicePath, NULL);
|
PlatformConsole[Index].DevicePath, NULL);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
|
||||||
//
|
|
||||||
// Only detect VGA device and add them to ConOut
|
|
||||||
//
|
|
||||||
DetectAndPreparePlatformPciDevicePaths (TRUE);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user