diff --git a/ArmVirtPkg/ArmVirtQemu.dsc b/ArmVirtPkg/ArmVirtQemu.dsc index e9eeeafce6..0212be4a33 100644 --- a/ArmVirtPkg/ArmVirtQemu.dsc +++ b/ArmVirtPkg/ArmVirtQemu.dsc @@ -438,7 +438,7 @@ gEfiMdePkgTokenSpaceGuid.PcdDebugPrintErrorLevel|0 } - OvmfPkg/VirtioKeyboardDxe/VirtioKeyboard.inf + OvmfPkg/VirtioInputDxe/VirtioInput.inf MdeModulePkg/Application/BootManagerMenuApp/BootManagerMenuApp.inf OvmfPkg/QemuKernelLoaderFsDxe/QemuKernelLoaderFsDxe.inf { diff --git a/OvmfPkg/Bhyve/BhyveX64.dsc b/OvmfPkg/Bhyve/BhyveX64.dsc index 1f346d96ca..1bbf65ed71 100644 --- a/OvmfPkg/Bhyve/BhyveX64.dsc +++ b/OvmfPkg/Bhyve/BhyveX64.dsc @@ -722,7 +722,7 @@ OvmfPkg/VirtioBlkDxe/VirtioBlk.inf OvmfPkg/VirtioScsiDxe/VirtioScsi.inf OvmfPkg/VirtioSerialDxe/VirtioSerial.inf - OvmfPkg/VirtioKeyboardDxe/VirtioKeyboard.inf + OvmfPkg/VirtioInputDxe/VirtioInput.inf MdeModulePkg/Universal/WatchdogTimerDxe/WatchdogTimer.inf MdeModulePkg/Universal/MonotonicCounterRuntimeDxe/MonotonicCounterRuntimeDxe.inf MdeModulePkg/Universal/CapsuleRuntimeDxe/CapsuleRuntimeDxe.inf diff --git a/OvmfPkg/Bhyve/BhyveX64.fdf b/OvmfPkg/Bhyve/BhyveX64.fdf index 0e894dca9b..41d0374acb 100644 --- a/OvmfPkg/Bhyve/BhyveX64.fdf +++ b/OvmfPkg/Bhyve/BhyveX64.fdf @@ -227,7 +227,7 @@ INF OvmfPkg/Virtio10Dxe/Virtio10.inf INF OvmfPkg/VirtioBlkDxe/VirtioBlk.inf INF OvmfPkg/VirtioScsiDxe/VirtioScsi.inf INF OvmfPkg/VirtioSerialDxe/VirtioSerial.inf -INF OvmfPkg/VirtioKeyboardDxe/VirtioKeyboard.inf +INF OvmfPkg/VirtioInputDxe/VirtioInput.inf !if $(SECURE_BOOT_ENABLE) == TRUE INF SecurityPkg/VariableAuthenticated/SecureBootConfigDxe/SecureBootConfigDxe.inf diff --git a/OvmfPkg/Library/PlatformBootManagerLib/BdsPlatform.c b/OvmfPkg/Library/PlatformBootManagerLib/BdsPlatform.c index b696f1b338..3edb92fabc 100644 --- a/OvmfPkg/Library/PlatformBootManagerLib/BdsPlatform.c +++ b/OvmfPkg/Library/PlatformBootManagerLib/BdsPlatform.c @@ -872,7 +872,7 @@ PrepareVirtioSerialDevicePath ( } EFI_STATUS -PrepareVirtioKeyboardDevicePath ( +PrepareVirtioInputDevicePath ( IN EFI_HANDLE DeviceHandle ) { @@ -1070,8 +1070,8 @@ DetectAndPreparePlatformPciDevicePath ( } if ((Pci->Hdr.VendorId == 0x1af4) && (Pci->Hdr.DeviceId == 0x1052)) { - DEBUG ((DEBUG_INFO, "Found virtio keyboard device\n")); - PrepareVirtioKeyboardDevicePath (Handle); + DEBUG ((DEBUG_INFO, "Found virtio input device\n")); + PrepareVirtioInputDevicePath (Handle); return EFI_SUCCESS; } diff --git a/OvmfPkg/OvmfPkgIa32X64.dsc b/OvmfPkg/OvmfPkgIa32X64.dsc index 2119527c1c..d546c3c9ac 100644 --- a/OvmfPkg/OvmfPkgIa32X64.dsc +++ b/OvmfPkg/OvmfPkgIa32X64.dsc @@ -821,7 +821,7 @@ OvmfPkg/VirtioBlkDxe/VirtioBlk.inf OvmfPkg/VirtioScsiDxe/VirtioScsi.inf OvmfPkg/VirtioSerialDxe/VirtioSerial.inf - OvmfPkg/VirtioKeyboardDxe/VirtioKeyboard.inf + OvmfPkg/VirtioInputDxe/VirtioInput.inf MdeModulePkg/Universal/WatchdogTimerDxe/WatchdogTimer.inf MdeModulePkg/Universal/MonotonicCounterRuntimeDxe/MonotonicCounterRuntimeDxe.inf MdeModulePkg/Universal/CapsuleRuntimeDxe/CapsuleRuntimeDxe.inf diff --git a/OvmfPkg/OvmfPkgIa32X64.fdf b/OvmfPkg/OvmfPkgIa32X64.fdf index adf98373e9..23731145a7 100644 --- a/OvmfPkg/OvmfPkgIa32X64.fdf +++ b/OvmfPkg/OvmfPkgIa32X64.fdf @@ -201,7 +201,7 @@ INF OvmfPkg/Virtio10Dxe/Virtio10.inf INF OvmfPkg/VirtioBlkDxe/VirtioBlk.inf INF OvmfPkg/VirtioScsiDxe/VirtioScsi.inf INF OvmfPkg/VirtioSerialDxe/VirtioSerial.inf -INF OvmfPkg/VirtioKeyboardDxe/VirtioKeyboard.inf +INF OvmfPkg/VirtioInputDxe/VirtioInput.inf !if $(SECURE_BOOT_ENABLE) == TRUE INF SecurityPkg/VariableAuthenticated/SecureBootConfigDxe/SecureBootConfigDxe.inf diff --git a/OvmfPkg/OvmfPkgX64.dsc b/OvmfPkg/OvmfPkgX64.dsc index 098c8cd464..d4a452c7e4 100644 --- a/OvmfPkg/OvmfPkgX64.dsc +++ b/OvmfPkg/OvmfPkgX64.dsc @@ -954,7 +954,7 @@ OvmfPkg/VirtioBlkDxe/VirtioBlk.inf OvmfPkg/VirtioScsiDxe/VirtioScsi.inf OvmfPkg/VirtioSerialDxe/VirtioSerial.inf - OvmfPkg/VirtioKeyboardDxe/VirtioKeyboard.inf + OvmfPkg/VirtioInputDxe/VirtioInput.inf MdeModulePkg/Universal/WatchdogTimerDxe/WatchdogTimer.inf MdeModulePkg/Universal/MonotonicCounterRuntimeDxe/MonotonicCounterRuntimeDxe.inf MdeModulePkg/Universal/CapsuleRuntimeDxe/CapsuleRuntimeDxe.inf diff --git a/OvmfPkg/OvmfPkgX64.fdf b/OvmfPkg/OvmfPkgX64.fdf index bf056fd139..3d1d33ed1d 100644 --- a/OvmfPkg/OvmfPkgX64.fdf +++ b/OvmfPkg/OvmfPkgX64.fdf @@ -214,7 +214,7 @@ INF OvmfPkg/Virtio10Dxe/Virtio10.inf INF OvmfPkg/VirtioBlkDxe/VirtioBlk.inf INF OvmfPkg/VirtioScsiDxe/VirtioScsi.inf INF OvmfPkg/VirtioSerialDxe/VirtioSerial.inf -INF OvmfPkg/VirtioKeyboardDxe/VirtioKeyboard.inf +INF OvmfPkg/VirtioInputDxe/VirtioInput.inf !if $(SECURE_BOOT_ENABLE) == TRUE INF SecurityPkg/VariableAuthenticated/SecureBootConfigDxe/SecureBootConfigDxe.inf diff --git a/OvmfPkg/VirtioKeyboardDxe/VirtioKeyboard.c b/OvmfPkg/VirtioInputDxe/VirtioInput.c similarity index 79% rename from OvmfPkg/VirtioKeyboardDxe/VirtioKeyboard.c rename to OvmfPkg/VirtioInputDxe/VirtioInput.c index 205869f239..2422b46269 100644 --- a/OvmfPkg/VirtioKeyboardDxe/VirtioKeyboard.c +++ b/OvmfPkg/VirtioInputDxe/VirtioInput.c @@ -1,6 +1,6 @@ /** @file - This driver produces EFI_SIMPLE_TEXT_INPUT_PROTOCOL for virtarm devices. + Driver for virtio input devices. Copyright (C) 2024, Red Hat, Inc. @@ -15,7 +15,7 @@ #include #include -#include +#include #include // ----------------------------------------------------------------------------- @@ -23,8 +23,8 @@ STATIC VOID * BufferPtr ( - IN VIRTIO_KBD_RING *Ring, - IN UINT32 BufferNr + IN VIRTIO_INPUT_RING *Ring, + IN UINT32 BufferNr ) { return Ring->Buffers + Ring->BufferSize * BufferNr; @@ -35,8 +35,8 @@ BufferPtr ( STATIC EFI_PHYSICAL_ADDRESS BufferAddr ( - IN VIRTIO_KBD_RING *Ring, - IN UINT32 BufferNr + IN VIRTIO_INPUT_RING *Ring, + IN UINT32 BufferNr ) { return Ring->DeviceAddress + Ring->BufferSize * BufferNr; @@ -46,7 +46,7 @@ BufferAddr ( STATIC UINT32 BufferNext ( - IN VIRTIO_KBD_RING *Ring + IN VIRTIO_INPUT_RING *Ring ) { return Ring->Indices.NextDescIdx % Ring->Ring.QueueSize; @@ -57,18 +57,18 @@ BufferNext ( STATIC EFI_STATUS EFIAPI -VirtioKeyboardRingSendBuffer ( - IN OUT VIRTIO_KBD_DEV *Dev, - IN UINT16 Index, - IN VOID *Data, - IN UINT32 DataSize, - IN BOOLEAN Notify +VirtioInputRingSendBuffer ( + IN OUT VIRTIO_INPUT_DEV *Dev, + IN UINT16 Index, + IN VOID *Data, + IN UINT32 DataSize, + IN BOOLEAN Notify ) { - VIRTIO_KBD_RING *Ring = Dev->Rings + Index; - UINT32 BufferNr = BufferNext (Ring); - UINT16 Idx = *Ring->Ring.Avail.Idx; - UINT16 Flags = 0; + VIRTIO_INPUT_RING *Ring = Dev->Rings + Index; + UINT32 BufferNr = BufferNext (Ring); + UINT16 Idx = *Ring->Ring.Avail.Idx; + UINT16 Flags = 0; ASSERT (DataSize <= Ring->BufferSize); @@ -110,14 +110,14 @@ VirtioKeyboardRingSendBuffer ( STATIC BOOLEAN EFIAPI -VirtioKeyboardRingGetBuffer ( - IN OUT VIRTIO_KBD_DEV *Dev, - IN UINT16 Index, - OUT VOID *Data, - OUT UINT32 *DataSize +VirtioInputRingGetBuffer ( + IN OUT VIRTIO_INPUT_DEV *Dev, + IN UINT16 Index, + OUT VOID *Data, + OUT UINT32 *DataSize ) { - VIRTIO_KBD_RING *Ring = Dev->Rings + Index; + VIRTIO_INPUT_RING *Ring = Dev->Rings + Index; UINT16 UsedIdx = *Ring->Ring.Used.Idx; volatile VRING_USED_ELEM *UsedElem; @@ -143,7 +143,7 @@ VirtioKeyboardRingGetBuffer ( if (Index % 2 == 0) { /* RX - re-queue buffer */ - VirtioKeyboardRingSendBuffer (Dev, Index, NULL, Ring->BufferSize, FALSE); + VirtioInputRingSendBuffer (Dev, Index, NULL, Ring->BufferSize, FALSE); } Ring->LastUsedIdx++; @@ -155,16 +155,16 @@ VirtioKeyboardRingGetBuffer ( STATIC EFI_STATUS EFIAPI -VirtioKeyboardInitRing ( - IN OUT VIRTIO_KBD_DEV *Dev, - IN UINT16 Index, - IN UINT32 BufferSize +VirtioInputInitRing ( + IN OUT VIRTIO_INPUT_DEV *Dev, + IN UINT16 Index, + IN UINT32 BufferSize ) { - VIRTIO_KBD_RING *Ring = Dev->Rings + Index; - EFI_STATUS Status; - UINT16 QueueSize; - UINT64 RingBaseShift; + VIRTIO_INPUT_RING *Ring = Dev->Rings + Index; + EFI_STATUS Status; + UINT16 QueueSize; + UINT64 RingBaseShift; // // step 4b -- allocate request virtqueue @@ -180,7 +180,7 @@ VirtioKeyboardInitRing ( } // - // VirtioKeyboard uses one descriptor + // VirtioInput uses one descriptor // if (QueueSize < 1) { Status = EFI_UNSUPPORTED; @@ -281,12 +281,12 @@ Failed: STATIC VOID EFIAPI -VirtioKeyboardUninitRing ( - IN OUT VIRTIO_KBD_DEV *Dev, - IN UINT16 Index +VirtioInputUninitRing ( + IN OUT VIRTIO_INPUT_DEV *Dev, + IN UINT16 Index ) { - VIRTIO_KBD_RING *Ring = Dev->Rings + Index; + VIRTIO_INPUT_RING *Ring = Dev->Rings + Index; if (Ring->BufferMap) { Dev->VirtIo->UnmapSharedBuffer (Dev->VirtIo, Ring->BufferMap); @@ -319,14 +319,14 @@ VirtioKeyboardUninitRing ( STATIC VOID EFIAPI -VirtioKeyboardUninitAllRings ( - IN OUT VIRTIO_KBD_DEV *Dev +VirtioInputUninitAllRings ( + IN OUT VIRTIO_INPUT_DEV *Dev ) { UINT16 Index; - for (Index = 0; Index < KEYBOARD_MAX_RINGS; Index++) { - VirtioKeyboardUninitRing (Dev, Index); + for (Index = 0; Index < MAX_RINGS; Index++) { + VirtioInputUninitRing (Dev, Index); } } @@ -334,16 +334,16 @@ VirtioKeyboardUninitAllRings ( // Mark all buffers as ready to write and push to device VOID EFIAPI -VirtioKeyboardRingFillRx ( - IN OUT VIRTIO_KBD_DEV *Dev, - IN UINT16 Index +VirtioInputRingFillRx ( + IN OUT VIRTIO_INPUT_DEV *Dev, + IN UINT16 Index ) { - VIRTIO_KBD_RING *Ring = Dev->Rings + Index; - UINT32 BufferNr; + VIRTIO_INPUT_RING *Ring = Dev->Rings + Index; + UINT32 BufferNr; for (BufferNr = 0; BufferNr < Ring->BufferCount; BufferNr++) { - VirtioKeyboardRingSendBuffer (Dev, Index, NULL, Ring->BufferSize, FALSE); + VirtioInputRingSendBuffer (Dev, Index, NULL, Ring->BufferSize, FALSE); } Dev->VirtIo->SetQueueNotify (Dev->VirtIo, Index); @@ -353,16 +353,16 @@ VirtioKeyboardRingFillRx ( STATIC VOID EFIAPI -VirtioKeyboardUninit ( - IN OUT VIRTIO_KBD_DEV *Dev +VirtioInputUninit ( + IN OUT VIRTIO_INPUT_DEV *Dev ); // Forward declaration of module Init function STATIC EFI_STATUS EFIAPI -VirtioKeyboardInit ( - IN OUT VIRTIO_KBD_DEV *Dev +VirtioInputInit ( + IN OUT VIRTIO_INPUT_DEV *Dev ); // ----------------------------------------------------------------------------- @@ -370,16 +370,16 @@ VirtioKeyboardInit ( STATIC EFI_STATUS EFIAPI -VirtioKeyboardSimpleTextInputReset ( +VirtioInputSimpleTextInputReset ( IN EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL *This, IN BOOLEAN ExtendedVerification ) { - VIRTIO_KBD_DEV *Dev; + VIRTIO_INPUT_DEV *Dev; - Dev = VIRTIO_KEYBOARD_FROM_THIS (This); - VirtioKeyboardUninit (Dev); - VirtioKeyboardInit (Dev); + Dev = VIRTIO_INPUT_FROM_THIS (This); + VirtioInputUninit (Dev); + VirtioInputInit (Dev); return EFI_SUCCESS; } @@ -389,19 +389,19 @@ VirtioKeyboardSimpleTextInputReset ( STATIC EFI_STATUS EFIAPI -VirtioKeyboardSimpleTextInputReadKeyStroke ( +VirtioInputSimpleTextInputReadKeyStroke ( IN EFI_SIMPLE_TEXT_INPUT_PROTOCOL *This, OUT EFI_INPUT_KEY *Key ) { - VIRTIO_KBD_DEV *Dev; - EFI_TPL OldTpl; + VIRTIO_INPUT_DEV *Dev; + EFI_TPL OldTpl; if (Key == NULL) { return EFI_INVALID_PARAMETER; } - Dev = VIRTIO_KEYBOARD_FROM_THIS (This); + Dev = VIRTIO_INPUT_FROM_THIS (This); OldTpl = gBS->RaiseTPL (TPL_NOTIFY); if (Dev->KeyReady) { @@ -425,10 +425,10 @@ VirtioKeyboardSimpleTextInputReadKeyStroke ( STATIC VOID EFIAPI -VirtioKeyboardConvertKeyCode ( - IN OUT VIRTIO_KBD_DEV *Dev, - IN UINT16 Code, - OUT EFI_INPUT_KEY *Key +VirtioInputConvertKeyCode ( + IN OUT VIRTIO_INPUT_DEV *Dev, + IN UINT16 Code, + OUT EFI_INPUT_KEY *Key ) { // Key mapping in between Linux and UEFI @@ -557,22 +557,22 @@ VirtioKeyboardConvertKeyCode ( } // ----------------------------------------------------------------------------- -// Main function processing virtio keyboard events +// Main function processing virtio input events STATIC VOID EFIAPI -VirtioKeyboardGetDeviceData ( - IN OUT VIRTIO_KBD_DEV *Dev +VirtioInputGetDeviceData ( + IN OUT VIRTIO_INPUT_DEV *Dev ) { - BOOLEAN HasData; - UINT8 Data[KEYBOARD_RX_BUFSIZE + 1]; - UINT32 DataSize; - VIRTIO_KBD_EVENT Event; - EFI_TPL OldTpl; + BOOLEAN HasData; + UINT8 Data[RX_BUFSIZE + 1]; + UINT32 DataSize; + VIRTIO_INPUT_EVENT Event; + EFI_TPL OldTpl; for ( ; ; ) { - HasData = VirtioKeyboardRingGetBuffer (Dev, 0, Data, &DataSize); + HasData = VirtioInputRingGetBuffer (Dev, 0, Data, &DataSize); // Exit if no new data if (!HasData) { @@ -605,7 +605,7 @@ VirtioKeyboardGetDeviceData ( Dev->KeyActive[(UINT8)Event.Code] = TRUE; // Evaluate key - VirtioKeyboardConvertKeyCode (Dev, Event.Code, &Dev->LastKey); + VirtioInputConvertKeyCode (Dev, Event.Code, &Dev->LastKey); // Flag that printable character is ready to be send Dev->KeyReady = TRUE; @@ -630,14 +630,14 @@ VirtioKeyboardGetDeviceData ( STATIC VOID EFIAPI -VirtioKeyboardTimer ( +VirtioInputTimer ( IN EFI_EVENT Event, IN VOID *Context ) { - VIRTIO_KBD_DEV *Dev = Context; + VIRTIO_INPUT_DEV *Dev = Context; - VirtioKeyboardGetDeviceData (Dev); + VirtioInputGetDeviceData (Dev); } // ----------------------------------------------------------------------------- @@ -645,12 +645,12 @@ VirtioKeyboardTimer ( STATIC VOID EFIAPI -VirtioKeyboardWaitForKey ( +VirtioInputWaitForKey ( IN EFI_EVENT Event, IN VOID *Context ) { - VIRTIO_KBD_DEV *Dev = (VIRTIO_KBD_DEV *)Context; + VIRTIO_INPUT_DEV *Dev = (VIRTIO_INPUT_DEV *)Context; // // Stall 1ms to give a chance to let other driver interrupt this routine @@ -665,7 +665,7 @@ VirtioKeyboardWaitForKey ( gBS->Stall (1000); // Use TimerEvent callback function to check whether there's any key pressed - VirtioKeyboardTimer (NULL, Dev); + VirtioInputTimer (NULL, Dev); // If there is a new key ready - send signal if (Dev->KeyReady) { @@ -678,16 +678,16 @@ VirtioKeyboardWaitForKey ( STATIC EFI_STATUS EFIAPI -VirtioKeyboardResetEx ( +VirtioInputResetEx ( IN EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL *This, IN BOOLEAN ExtendedVerification ) { - VIRTIO_KBD_DEV *Dev; - EFI_STATUS Status; - EFI_TPL OldTpl; + VIRTIO_INPUT_DEV *Dev; + EFI_STATUS Status; + EFI_TPL OldTpl; - Dev = VIRTIO_KEYBOARD_EX_FROM_THIS (This); + Dev = VIRTIO_INPUT_EX_FROM_THIS (This); // Call the reset function from SIMPLE_TEXT_INPUT protocol Status = Dev->Txt.Reset ( @@ -710,21 +710,21 @@ VirtioKeyboardResetEx ( STATIC EFI_STATUS EFIAPI -VirtioKeyboardReadKeyStrokeEx ( +VirtioInputReadKeyStrokeEx ( IN EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL *This, OUT EFI_KEY_DATA *KeyData ) { - VIRTIO_KBD_DEV *Dev; - EFI_STATUS Status; - EFI_INPUT_KEY Key; - EFI_KEY_STATE KeyState; + VIRTIO_INPUT_DEV *Dev; + EFI_STATUS Status; + EFI_INPUT_KEY Key; + EFI_KEY_STATE KeyState; if (KeyData == NULL) { return EFI_INVALID_PARAMETER; } - Dev = VIRTIO_KEYBOARD_EX_FROM_THIS (This); + Dev = VIRTIO_INPUT_EX_FROM_THIS (This); // Get the last pressed key Status = Dev->Txt.ReadKeyStroke (&Dev->Txt, &Key); @@ -775,7 +775,7 @@ VirtioKeyboardReadKeyStrokeEx ( STATIC EFI_STATUS EFIAPI -VirtioKeyboardSetState ( +VirtioInputSetState ( IN EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL *This, IN EFI_KEY_TOGGLE_STATE *KeyToggleState ) @@ -827,19 +827,19 @@ IsKeyRegistered ( STATIC EFI_STATUS EFIAPI -VirtioKeyboardRegisterKeyNotify ( +VirtioInputRegisterKeyNotify ( IN EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL *This, IN EFI_KEY_DATA *KeyData, IN EFI_KEY_NOTIFY_FUNCTION KeyNotificationFunction, OUT VOID **NotifyHandle ) { - EFI_STATUS Status; - VIRTIO_KBD_DEV *Dev; - EFI_TPL OldTpl; - LIST_ENTRY *Link; - VIRTIO_KBD_IN_EX_NOTIFY *NewNotify; - VIRTIO_KBD_IN_EX_NOTIFY *CurrentNotify; + EFI_STATUS Status; + VIRTIO_INPUT_DEV *Dev; + EFI_TPL OldTpl; + LIST_ENTRY *Link; + VIRTIO_INPUT_IN_EX_NOTIFY *NewNotify; + VIRTIO_INPUT_IN_EX_NOTIFY *CurrentNotify; if ((KeyData == NULL) || (NotifyHandle == NULL) || @@ -848,20 +848,20 @@ VirtioKeyboardRegisterKeyNotify ( return EFI_INVALID_PARAMETER; } - Dev = VIRTIO_KEYBOARD_EX_FROM_THIS (This); + Dev = VIRTIO_INPUT_EX_FROM_THIS (This); OldTpl = gBS->RaiseTPL (TPL_NOTIFY); // Check if the (KeyData, NotificationFunction) pair is already registered. - for (Link = Dev->NotifyList.ForwardLink; - Link != &Dev->NotifyList; + for (Link = Dev->KeyNotifyList.ForwardLink; + Link != &Dev->KeyNotifyList; Link = Link->ForwardLink) { CurrentNotify = CR ( Link, - VIRTIO_KBD_IN_EX_NOTIFY, + VIRTIO_INPUT_IN_EX_NOTIFY, NotifyEntry, - VIRTIO_KBD_SIG + VIRTIO_INPUT_SIG ); if (IsKeyRegistered (&CurrentNotify->KeyData, KeyData)) { if (CurrentNotify->KeyNotificationFn == KeyNotificationFunction) { @@ -872,16 +872,16 @@ VirtioKeyboardRegisterKeyNotify ( } } - NewNotify = (VIRTIO_KBD_IN_EX_NOTIFY *)AllocateZeroPool (sizeof (VIRTIO_KBD_IN_EX_NOTIFY)); + NewNotify = (VIRTIO_INPUT_IN_EX_NOTIFY *)AllocateZeroPool (sizeof (VIRTIO_INPUT_IN_EX_NOTIFY)); if (NewNotify == NULL) { Status = EFI_OUT_OF_RESOURCES; goto Exit; } - NewNotify->Signature = VIRTIO_KBD_SIG; + NewNotify->Signature = VIRTIO_INPUT_SIG; NewNotify->KeyNotificationFn = KeyNotificationFunction; CopyMem (&NewNotify->KeyData, KeyData, sizeof (EFI_KEY_DATA)); - InsertTailList (&Dev->NotifyList, &NewNotify->NotifyEntry); + InsertTailList (&Dev->KeyNotifyList, &NewNotify->NotifyEntry); *NotifyHandle = NewNotify; Status = EFI_SUCCESS; @@ -897,38 +897,38 @@ Exit: STATIC EFI_STATUS EFIAPI -VirtioKeyboardUnregisterKeyNotify ( +VirtioInputUnregisterKeyNotify ( IN EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL *This, IN VOID *NotificationHandle ) { - EFI_STATUS Status; - VIRTIO_KBD_DEV *Dev; - EFI_TPL OldTpl; - LIST_ENTRY *Link; - VIRTIO_KBD_IN_EX_NOTIFY *CurrentNotify; + EFI_STATUS Status; + VIRTIO_INPUT_DEV *Dev; + EFI_TPL OldTpl; + LIST_ENTRY *Link; + VIRTIO_INPUT_IN_EX_NOTIFY *CurrentNotify; if (NotificationHandle == NULL) { return EFI_INVALID_PARAMETER; } - if (((VIRTIO_KBD_IN_EX_NOTIFY *)NotificationHandle)->Signature != VIRTIO_KBD_SIG) { + if (((VIRTIO_INPUT_IN_EX_NOTIFY *)NotificationHandle)->Signature != VIRTIO_INPUT_SIG) { return EFI_INVALID_PARAMETER; } - Dev = VIRTIO_KEYBOARD_EX_FROM_THIS (This); + Dev = VIRTIO_INPUT_EX_FROM_THIS (This); OldTpl = gBS->RaiseTPL (TPL_NOTIFY); - for (Link = Dev->NotifyList.ForwardLink; - Link != &Dev->NotifyList; + for (Link = Dev->KeyNotifyList.ForwardLink; + Link != &Dev->KeyNotifyList; Link = Link->ForwardLink) { CurrentNotify = CR ( Link, - VIRTIO_KBD_IN_EX_NOTIFY, + VIRTIO_INPUT_IN_EX_NOTIFY, NotifyEntry, - VIRTIO_KBD_SIG + VIRTIO_INPUT_SIG ); if (CurrentNotify == NotificationHandle) { RemoveEntryList (&CurrentNotify->NotifyEntry); @@ -952,8 +952,8 @@ Exit: STATIC EFI_STATUS EFIAPI -VirtioKeyboardInit ( - IN OUT VIRTIO_KBD_DEV *Dev +VirtioInputInit ( + IN OUT VIRTIO_INPUT_DEV *Dev ) { UINT8 NextDevStat; @@ -1010,7 +1010,7 @@ VirtioKeyboardInit ( } } - Status = VirtioKeyboardInitRing (Dev, 0, KEYBOARD_RX_BUFSIZE); + Status = VirtioInputInitRing (Dev, 0, RX_BUFSIZE); if (EFI_ERROR (Status)) { goto Failed; } @@ -1044,8 +1044,8 @@ VirtioKeyboardInit ( // EFI_INPUT_READ_KEY ReadKeyStroke; // EFI_EVENT WaitForKey; // }; - Dev->Txt.Reset = (EFI_INPUT_RESET)VirtioKeyboardSimpleTextInputReset; - Dev->Txt.ReadKeyStroke = VirtioKeyboardSimpleTextInputReadKeyStroke; + Dev->Txt.Reset = (EFI_INPUT_RESET)VirtioInputSimpleTextInputReset; + Dev->Txt.ReadKeyStroke = VirtioInputSimpleTextInputReadKeyStroke; // struct _EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL { // EFI_INPUT_RESET_EX Reset; @@ -1055,12 +1055,12 @@ VirtioKeyboardInit ( // EFI_REGISTER_KEYSTROKE_NOTIFY RegisterKeyNotify; // EFI_UNREGISTER_KEYSTROKE_NOTIFY UnregisterKeyNotify; // } - Dev->TxtEx.Reset = (EFI_INPUT_RESET_EX)VirtioKeyboardResetEx; - Dev->TxtEx.ReadKeyStrokeEx = VirtioKeyboardReadKeyStrokeEx; - Dev->TxtEx.SetState = VirtioKeyboardSetState; - Dev->TxtEx.RegisterKeyNotify = VirtioKeyboardRegisterKeyNotify; - Dev->TxtEx.UnregisterKeyNotify = VirtioKeyboardUnregisterKeyNotify; - InitializeListHead (&Dev->NotifyList); + Dev->TxtEx.Reset = (EFI_INPUT_RESET_EX)VirtioInputResetEx; + Dev->TxtEx.ReadKeyStrokeEx = VirtioInputReadKeyStrokeEx; + Dev->TxtEx.SetState = VirtioInputSetState; + Dev->TxtEx.RegisterKeyNotify = VirtioInputRegisterKeyNotify; + Dev->TxtEx.UnregisterKeyNotify = VirtioInputUnregisterKeyNotify; + InitializeListHead (&Dev->KeyNotifyList); // // Setup the WaitForKey event @@ -1068,7 +1068,7 @@ VirtioKeyboardInit ( Status = gBS->CreateEvent ( EVT_NOTIFY_WAIT, TPL_NOTIFY, - VirtioKeyboardWaitForKey, + VirtioInputWaitForKey, Dev, &(Dev->Txt.WaitForKey) ); @@ -1082,7 +1082,7 @@ VirtioKeyboardInit ( Status = gBS->CreateEvent ( EVT_NOTIFY_WAIT, TPL_NOTIFY, - VirtioKeyboardWaitForKey, + VirtioInputWaitForKey, Dev, &(Dev->TxtEx.WaitForKeyEx) ); @@ -1090,7 +1090,7 @@ VirtioKeyboardInit ( goto Failed; } - VirtioKeyboardRingFillRx (Dev, 0); + VirtioInputRingFillRx (Dev, 0); // // Event for reading key in time intervals @@ -1098,18 +1098,18 @@ VirtioKeyboardInit ( Status = gBS->CreateEvent ( EVT_TIMER | EVT_NOTIFY_SIGNAL, TPL_NOTIFY, - VirtioKeyboardTimer, + VirtioInputTimer, Dev, - &Dev->KeyReadTimer + &Dev->PollTimer ); if (EFI_ERROR (Status)) { goto Failed; } Status = gBS->SetTimer ( - Dev->KeyReadTimer, + Dev->PollTimer, TimerPeriodic, - EFI_TIMER_PERIOD_MILLISECONDS (KEYBOARD_PROBE_TIME_MS) + EFI_TIMER_PERIOD_MILLISECONDS (PROBE_TIME_MS) ); if (EFI_ERROR (Status)) { goto Failed; @@ -1118,8 +1118,7 @@ VirtioKeyboardInit ( return EFI_SUCCESS; Failed: - VirtioKeyboardUninitAllRings (Dev); - // VirtualKeyboardFreeNotifyList (&VirtualKeyboardPrivate->NotifyList); + VirtioInputUninitAllRings (Dev); // // Notify the host about our failure to setup: virtio-0.9.5, 2.2.2.1 Device @@ -1136,11 +1135,11 @@ Failed: STATIC VOID EFIAPI -VirtioKeyboardUninit ( - IN OUT VIRTIO_KBD_DEV *Dev +VirtioInputUninit ( + IN OUT VIRTIO_INPUT_DEV *Dev ) { - gBS->CloseEvent (Dev->KeyReadTimer); + gBS->CloseEvent (Dev->PollTimer); gBS->CloseEvent (Dev->Txt.WaitForKey); gBS->CloseEvent (Dev->TxtEx.WaitForKeyEx); @@ -1151,7 +1150,7 @@ VirtioKeyboardUninit ( // Dev->VirtIo->SetDeviceStatus (Dev->VirtIo, 0); - VirtioKeyboardUninitAllRings (Dev); + VirtioInputUninitAllRings (Dev); } // ----------------------------------------------------------------------------- @@ -1159,12 +1158,12 @@ VirtioKeyboardUninit ( STATIC VOID EFIAPI -VirtioKeyboardExitBoot ( +VirtioInputExitBoot ( IN EFI_EVENT Event, IN VOID *Context ) { - VIRTIO_KBD_DEV *Dev; + VIRTIO_INPUT_DEV *Dev; DEBUG ((DEBUG_INFO, "%a: Context=0x%p\n", __func__, Context)); // @@ -1183,7 +1182,7 @@ VirtioKeyboardExitBoot ( STATIC EFI_STATUS EFIAPI -VirtioKeyboardBindingSupported ( +VirtioInputBindingSupported ( IN EFI_DRIVER_BINDING_PROTOCOL *This, IN EFI_HANDLE DeviceHandle, IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath @@ -1238,16 +1237,16 @@ VirtioKeyboardBindingSupported ( STATIC EFI_STATUS EFIAPI -VirtioKeyboardBindingStart ( +VirtioInputBindingStart ( IN EFI_DRIVER_BINDING_PROTOCOL *This, IN EFI_HANDLE DeviceHandle, IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath ) { - VIRTIO_KBD_DEV *Dev; - EFI_STATUS Status; + VIRTIO_INPUT_DEV *Dev; + EFI_STATUS Status; - Dev = (VIRTIO_KBD_DEV *)AllocateZeroPool (sizeof *Dev); + Dev = (VIRTIO_INPUT_DEV *)AllocateZeroPool (sizeof *Dev); if (Dev == NULL) { return EFI_OUT_OF_RESOURCES; } @@ -1261,13 +1260,13 @@ VirtioKeyboardBindingStart ( EFI_OPEN_PROTOCOL_BY_DRIVER ); if (EFI_ERROR (Status)) { - goto FreeVirtioKbd; + goto FreeVirtioInput; } // // VirtIo access granted, configure virtio keyboard device. // - Status = VirtioKeyboardInit (Dev); + Status = VirtioInputInit (Dev); if (EFI_ERROR (Status)) { goto CloseVirtIo; } @@ -1275,7 +1274,7 @@ VirtioKeyboardBindingStart ( Status = gBS->CreateEvent ( EVT_SIGNAL_EXIT_BOOT_SERVICES, TPL_CALLBACK, - &VirtioKeyboardExitBoot, + &VirtioInputExitBoot, Dev, &Dev->ExitBoot ); @@ -1287,7 +1286,7 @@ VirtioKeyboardBindingStart ( // Setup complete, attempt to export the driver instance's EFI_SIMPLE_TEXT_INPUT_PROTOCOL // interface. // - Dev->Signature = VIRTIO_KBD_SIG; + Dev->Signature = VIRTIO_INPUT_SIG; Status = gBS->InstallMultipleProtocolInterfaces ( &DeviceHandle, &gEfiSimpleTextInProtocolGuid, @@ -1306,7 +1305,7 @@ CloseExitBoot: gBS->CloseEvent (Dev->ExitBoot); UninitDev: - VirtioKeyboardUninit (Dev); + VirtioInputUninit (Dev); CloseVirtIo: gBS->CloseProtocol ( @@ -1316,7 +1315,7 @@ CloseVirtIo: DeviceHandle ); -FreeVirtioKbd: +FreeVirtioInput: FreePool (Dev); return Status; @@ -1327,7 +1326,7 @@ FreeVirtioKbd: STATIC EFI_STATUS EFIAPI -VirtioKeyboardBindingStop ( +VirtioInputBindingStop ( IN EFI_DRIVER_BINDING_PROTOCOL *This, IN EFI_HANDLE DeviceHandle, IN UINTN NumberOfChildren, @@ -1336,7 +1335,7 @@ VirtioKeyboardBindingStop ( { EFI_STATUS Status; EFI_SIMPLE_TEXT_INPUT_PROTOCOL *Txt; - VIRTIO_KBD_DEV *Dev; + VIRTIO_INPUT_DEV *Dev; Status = gBS->OpenProtocol ( DeviceHandle, // candidate device @@ -1350,7 +1349,7 @@ VirtioKeyboardBindingStop ( return Status; } - Dev = VIRTIO_KEYBOARD_FROM_THIS (Txt); + Dev = VIRTIO_INPUT_FROM_THIS (Txt); // // Handle Stop() requests for in-use driver instances gracefully. @@ -1369,7 +1368,7 @@ VirtioKeyboardBindingStop ( gBS->CloseEvent (Dev->ExitBoot); - VirtioKeyboardUninit (Dev); + VirtioInputUninit (Dev); gBS->CloseProtocol ( DeviceHandle, @@ -1392,8 +1391,8 @@ EFI_COMPONENT_NAME_PROTOCOL gComponentName; // Driver name to be displayed STATIC EFI_UNICODE_STRING_TABLE mDriverNameTable[] = { - { "eng;en", L"Virtio Keyboard Driver" }, - { NULL, NULL } + { "eng;en", L"Virtio Input Driver" }, + { NULL, NULL } }; // ----------------------------------------------------------------------------- @@ -1401,7 +1400,7 @@ EFI_UNICODE_STRING_TABLE mDriverNameTable[] = { STATIC EFI_STATUS EFIAPI -VirtioKeyboardGetDriverName ( +VirtioInputGetDriverName ( IN EFI_COMPONENT_NAME_PROTOCOL *This, IN CHAR8 *Language, OUT CHAR16 **DriverName @@ -1420,8 +1419,8 @@ VirtioKeyboardGetDriverName ( // Device name to be displayed STATIC EFI_UNICODE_STRING_TABLE mDeviceNameTable[] = { - { "eng;en", L"RHEL virtio virtual keyboard BOB (Basic Operation Board)" }, - { NULL, NULL } + { "eng;en", L"Red Hat Virtio Input device" }, + { NULL, NULL } }; // ----------------------------------------------------------------------------- @@ -1432,7 +1431,7 @@ EFI_COMPONENT_NAME_PROTOCOL gDeviceName; STATIC EFI_STATUS EFIAPI -VirtioKeyboardGetDeviceName ( +VirtioInputGetDeviceName ( IN EFI_COMPONENT_NAME_PROTOCOL *This, IN EFI_HANDLE DeviceHandle, IN EFI_HANDLE ChildHandle, @@ -1453,8 +1452,8 @@ VirtioKeyboardGetDeviceName ( // General driver UEFI interface for showing driver name STATIC EFI_COMPONENT_NAME_PROTOCOL gComponentName = { - &VirtioKeyboardGetDriverName, - &VirtioKeyboardGetDeviceName, + &VirtioInputGetDriverName, + &VirtioInputGetDeviceName, "eng" // SupportedLanguages, ISO 639-2 language codes }; @@ -1462,20 +1461,20 @@ EFI_COMPONENT_NAME_PROTOCOL gComponentName = { // General driver UEFI interface for showing driver name STATIC EFI_COMPONENT_NAME2_PROTOCOL gComponentName2 = { - (EFI_COMPONENT_NAME2_GET_DRIVER_NAME)&VirtioKeyboardGetDriverName, - (EFI_COMPONENT_NAME2_GET_CONTROLLER_NAME)&VirtioKeyboardGetDeviceName, + (EFI_COMPONENT_NAME2_GET_DRIVER_NAME)&VirtioInputGetDriverName, + (EFI_COMPONENT_NAME2_GET_CONTROLLER_NAME)&VirtioInputGetDeviceName, "en" // SupportedLanguages, RFC 4646 language codes }; // ----------------------------------------------------------------------------- // General driver UEFI interface for loading / unloading driver STATIC EFI_DRIVER_BINDING_PROTOCOL gDriverBinding = { - &VirtioKeyboardBindingSupported, - &VirtioKeyboardBindingStart, - &VirtioKeyboardBindingStop, + &VirtioInputBindingSupported, + &VirtioInputBindingStart, + &VirtioInputBindingStop, 0x10, // Version, must be in [0x10 .. 0xFFFFFFEF] for IHV-developed drivers NULL, // ImageHandle, to be overwritten by - // EfiLibInstallDriverBindingComponentName2() in VirtioKeyboardEntryPoint() + // EfiLibInstallDriverBindingComponentName2() in VirtioInputEntryPoint() NULL // DriverBindingHandle, ditto }; @@ -1483,12 +1482,12 @@ STATIC EFI_DRIVER_BINDING_PROTOCOL gDriverBinding = { // Driver entry point set in INF file, registers all driver functions into UEFI EFI_STATUS EFIAPI -VirtioKeyboardEntryPoint ( +VirtioInputEntryPoint ( IN EFI_HANDLE ImageHandle, IN EFI_SYSTEM_TABLE *SystemTable ) { - DEBUG ((DEBUG_INFO, "Virtio keyboard has been loaded.......................\n")); + DEBUG ((DEBUG_INFO, "Virtio input driver has been loaded.......................\n")); return EfiLibInstallDriverBindingComponentName2 ( ImageHandle, SystemTable, diff --git a/OvmfPkg/VirtioKeyboardDxe/VirtioKeyboard.h b/OvmfPkg/VirtioInputDxe/VirtioInput.h similarity index 73% rename from OvmfPkg/VirtioKeyboardDxe/VirtioKeyboard.h rename to OvmfPkg/VirtioInputDxe/VirtioInput.h index 242f005f74..11bb332692 100644 --- a/OvmfPkg/VirtioKeyboardDxe/VirtioKeyboard.h +++ b/OvmfPkg/VirtioInputDxe/VirtioInput.h @@ -1,6 +1,6 @@ /** @file - Private definitions of the VirtioKeyboard driver + Private definitions of the VirtioInput driver Copyright (C) 2024, Red Hat @@ -17,13 +17,13 @@ #include -#define VIRTIO_KBD_SIG SIGNATURE_32 ('V', 'K', 'B', 'D') +#define VIRTIO_INPUT_SIG SIGNATURE_32 ('V', 'I', 'N', 'P') -#define KEYBOARD_MAX_RINGS 2 -#define KEYBOARD_RX_BUFSIZE 64 +#define MAX_RINGS 2 +#define RX_BUFSIZE 64 -// Fetch new key from VirtIO every 50ms -#define KEYBOARD_PROBE_TIME_MS 50 +// Fetch new input from VirtIO every 50ms +#define PROBE_TIME_MS 50 // Max range of recognized keyboard codes #define MAX_KEYBOARD_CODE 255 @@ -33,14 +33,14 @@ typedef struct { EFI_KEY_DATA KeyData; EFI_KEY_NOTIFY_FUNCTION KeyNotificationFn; LIST_ENTRY NotifyEntry; -} VIRTIO_KBD_IN_EX_NOTIFY; +} VIRTIO_INPUT_IN_EX_NOTIFY; // Data structure representing payload delivered from VirtIo typedef struct { UINT16 Type; UINT16 Code; UINT32 Value; -} VIRTIO_KBD_EVENT; +} VIRTIO_INPUT_EVENT; // Data structure representing ring buffer typedef struct { @@ -57,7 +57,7 @@ typedef struct { EFI_PHYSICAL_ADDRESS DeviceAddress; BOOLEAN Ready; -} VIRTIO_KBD_RING; +} VIRTIO_INPUT_RING; // Declaration of data structure representing driver context typedef struct { @@ -90,13 +90,13 @@ typedef struct { VIRTIO_DEVICE_PROTOCOL *VirtIo; // Hook for ring buffer - VIRTIO_KBD_RING Rings[KEYBOARD_MAX_RINGS]; + VIRTIO_INPUT_RING Rings[MAX_RINGS]; - // Timer event for checking key presses from VirtIo - EFI_EVENT KeyReadTimer; + // Timer event for checking input from VirtIo + EFI_EVENT PollTimer; // List for notifications - LIST_ENTRY NotifyList; + LIST_ENTRY KeyNotifyList; // Last pressed key // typedef struct { @@ -110,13 +110,13 @@ typedef struct { // If key is ready BOOLEAN KeyReady; -} VIRTIO_KBD_DEV; +} VIRTIO_INPUT_DEV; -// Helper functions to extract VIRTIO_KBD_DEV structure pointers -#define VIRTIO_KEYBOARD_FROM_THIS(KbrPointer) \ - CR (KbrPointer, VIRTIO_KBD_DEV, Txt, VIRTIO_KBD_SIG) -#define VIRTIO_KEYBOARD_EX_FROM_THIS(KbrPointer) \ - CR (KbrPointer, VIRTIO_KBD_DEV, TxtEx, VIRTIO_KBD_SIG) +// Helper functions to extract VIRTIO_INPUT_DEV structure pointers +#define VIRTIO_INPUT_FROM_THIS(KbrPointer) \ + CR (KbrPointer, VIRTIO_INPUT_DEV, Txt, VIRTIO_INPUT_SIG) +#define VIRTIO_INPUT_EX_FROM_THIS(KbrPointer) \ + CR (KbrPointer, VIRTIO_INPUT_DEV, TxtEx, VIRTIO_INPUT_SIG) // Bellow candidates to be included as Linux header #define KEY_PRESSED 1 diff --git a/OvmfPkg/VirtioKeyboardDxe/VirtioKeyboard.inf b/OvmfPkg/VirtioInputDxe/VirtioInput.inf similarity index 72% rename from OvmfPkg/VirtioKeyboardDxe/VirtioKeyboard.inf rename to OvmfPkg/VirtioInputDxe/VirtioInput.inf index 6c35f2a4ce..d5575ac733 100644 --- a/OvmfPkg/VirtioKeyboardDxe/VirtioKeyboard.inf +++ b/OvmfPkg/VirtioInputDxe/VirtioInput.inf @@ -1,5 +1,5 @@ ## @file -# This driver produces EFI_SIMPLE_TEXT_INPUT_PROTOCOL for virt ARM devices. +# VirtIO Input DXE driver # # Copyright (C) 2024, Red Hat # @@ -9,15 +9,15 @@ [Defines] INF_VERSION = 1.29 - BASE_NAME = VirtioKeyboardDxe + BASE_NAME = VirtioInputDxe FILE_GUID = F141B1E5-9C7C-44CC-AFAA-E87D7689B113 MODULE_TYPE = UEFI_DRIVER VERSION_STRING = 1.0 - ENTRY_POINT = VirtioKeyboardEntryPoint + ENTRY_POINT = VirtioInputEntryPoint [Sources] - VirtioKeyboard.c - VirtioKeyboard.h + VirtioInput.c + VirtioInput.h VirtioKeyCodes.h [Packages] diff --git a/OvmfPkg/VirtioKeyboardDxe/VirtioKeyCodes.h b/OvmfPkg/VirtioInputDxe/VirtioKeyCodes.h similarity index 96% rename from OvmfPkg/VirtioKeyboardDxe/VirtioKeyCodes.h rename to OvmfPkg/VirtioInputDxe/VirtioKeyCodes.h index fe5ddc5a51..70d8c454ac 100644 --- a/OvmfPkg/VirtioKeyboardDxe/VirtioKeyCodes.h +++ b/OvmfPkg/VirtioInputDxe/VirtioKeyCodes.h @@ -1,6 +1,6 @@ /** @file - Key codes definitions for the VirtioKeyboard driver + Key codes definitions for the virtio input driver This is a fork of common Linux key codes: https://github.com/torvalds/linux/blob/master/include/uapi/linux/input-event-codes.h