1
1
mirror of https://github.com/systemd/systemd-stable.git synced 2025-01-06 13:17:44 +03:00

boot: Use EFI_BOOT_MANAGER_POLICY_PROTOCOL to connect console devices

(cherry picked from commit b99bf58118)
This commit is contained in:
Jan Janssen 2022-11-27 13:38:18 +01:00 committed by Zbigniew Jędrzejewski-Szmek
parent b89be71bf4
commit 989f0c52e1
2 changed files with 35 additions and 0 deletions

View File

@ -12,6 +12,20 @@
#define VERTICAL_MAX_OK 1080
#define VIEWPORT_RATIO 10
static EFI_STATUS console_connect(void) {
EFI_BOOT_MANAGER_POLICY_PROTOCOL *boot_policy;
EFI_STATUS err;
/* This should make console devices appear/fully initialize on fastboot firmware. */
err = BS->LocateProtocol(
&(EFI_GUID) EFI_BOOT_MANAGER_POLICY_PROTOCOL_GUID, NULL, (void **) &boot_policy);
if (err != EFI_SUCCESS)
return err;
return boot_policy->ConnectDeviceClass(boot_policy, &(EFI_GUID) EFI_BOOT_MANAGER_POLICY_CONSOLE_GUID);
}
static inline void event_closep(EFI_EVENT *event) {
if (!*event)
return;
@ -47,6 +61,8 @@ EFI_STATUS console_key_read(uint64_t *key, uint64_t timeout_usec) {
assert(key);
if (!checked) {
console_connect();
/* Get the *first* TextInputEx device.*/
err = BS->LocateProtocol(&SimpleTextInputExProtocol, NULL, (void **) &extraInEx);
if (err != EFI_SUCCESS || BS->CheckEvent(extraInEx->WaitForKeyEx) == EFI_INVALID_PARAMETER)

View File

@ -398,3 +398,22 @@ typedef struct {
void *StdErr;
} EFI_SHELL_PARAMETERS_PROTOCOL;
#endif
#ifndef EFI_BOOT_MANAGER_POLICY_PROTOCOL_GUID
#define EFI_BOOT_MANAGER_POLICY_PROTOCOL_GUID \
{ 0xFEDF8E0C, 0xE147, 0x11E3, { 0x99, 0x03, 0xB8, 0xE8, 0x56, 0x2C, 0xBA, 0xFA } }
#define EFI_BOOT_MANAGER_POLICY_CONSOLE_GUID \
{ 0xCAB0E94C, 0xE15F, 0x11E3, { 0x91, 0x8D, 0xB8, 0xE8, 0x56, 0x2C, 0xBA, 0xFA } }
typedef struct EFI_BOOT_MANAGER_POLICY_PROTOCOL EFI_BOOT_MANAGER_POLICY_PROTOCOL;
struct EFI_BOOT_MANAGER_POLICY_PROTOCOL {
UINT64 Revision;
EFI_STATUS (EFIAPI *ConnectDevicePath)(
EFI_BOOT_MANAGER_POLICY_PROTOCOL *This,
EFI_DEVICE_PATH *DevicePath,
BOOLEAN Recursive);
EFI_STATUS (EFIAPI *ConnectDeviceClass)(
EFI_BOOT_MANAGER_POLICY_PROTOCOL *This,
EFI_GUID *Class);
};
#endif