From 0eea7b9c025ebf430d3d1e5585ca61c015bb42db Mon Sep 17 00:00:00 2001 From: Paweł Poławski Date: Mon, 29 Jul 2024 10:50:55 +0200 Subject: OvmfPkg: Add virtio keyboard device hooks MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This commit adds: - missing virtio subsystem ID for input device - PrepareVirtioKeyboardDevicePath() handler to boot manager library Signed-off-by: Paweł Poławski --- OvmfPkg/Include/IndustryStandard/Virtio10.h | 1 + .../Library/PlatformBootManagerLib/BdsPlatform.c | 28 ++++++++++++++++++++++ 2 files changed, 29 insertions(+) diff --git a/OvmfPkg/Include/IndustryStandard/Virtio10.h b/OvmfPkg/Include/IndustryStandard/Virtio10.h index c47bcbd41a..c92bd66ca5 100644 --- a/OvmfPkg/Include/IndustryStandard/Virtio10.h +++ b/OvmfPkg/Include/IndustryStandard/Virtio10.h @@ -17,6 +17,7 @@ // Subsystem Device IDs (to be) introduced in VirtIo 1.0 // #define VIRTIO_SUBSYSTEM_GPU_DEVICE 16 +#define VIRTIO_SUBSYSTEM_INPUT 18 // // Subsystem Device IDs from the VirtIo spec at git commit 87fa6b5d8155; // . diff --git a/OvmfPkg/Library/PlatformBootManagerLib/BdsPlatform.c b/OvmfPkg/Library/PlatformBootManagerLib/BdsPlatform.c index 17e3bda967..e66693879d 100644 --- a/OvmfPkg/Library/PlatformBootManagerLib/BdsPlatform.c +++ b/OvmfPkg/Library/PlatformBootManagerLib/BdsPlatform.c @@ -1111,6 +1111,28 @@ PrepareVirtioSerialDevicePath ( return EFI_SUCCESS; } +EFI_STATUS +PrepareVirtioKeyboardDevicePath ( + IN EFI_HANDLE DeviceHandle + ) +{ + EFI_STATUS Status; + EFI_DEVICE_PATH_PROTOCOL *DevicePath; + + DevicePath = NULL; + Status = gBS->HandleProtocol ( + DeviceHandle, + &gEfiDevicePathProtocolGuid, + (VOID *)&DevicePath + ); + if (EFI_ERROR (Status)) { + return Status; + } + + EfiBootManagerUpdateConsoleVariable (ConIn, DevicePath, NULL); + return EFI_SUCCESS; +} + EFI_STATUS VisitAllInstancesOfProtocol ( IN EFI_GUID *Id, @@ -1287,6 +1309,12 @@ DetectAndPreparePlatformPciDevicePath ( return EFI_SUCCESS; } + if ((Pci->Hdr.VendorId == 0x1af4) && (Pci->Hdr.DeviceId == 0x1052)) { + DEBUG ((DEBUG_INFO, "Found virtio keyboard device\n")); + PrepareVirtioKeyboardDevicePath (Handle); + return EFI_SUCCESS; + } + return Status; } -- cgit