Hello!
In latest VirualBox (7.1.4) keyboard (and apparently mouse too) is't working.
While debugging I found the cause of this issue which is as follows.
When ACPI driver enumerate children in AcpipEnumerateDeviceChildren, AcpipCreateOsDevice (drvsup.c, line 269) return STATUS_DEVICE_NOT_CONNECTED, cos AcpipGetDeviceHardwareId can't found _HID method one of the devices. After this the enumeration ends halfway and eventually due to this IopProcessReportedChildren unloads all current child device drivers including the ps/2 driver.
Seems this is a device IVRS (AMD IOMMU (AMD-Vi), I/O Virtualization Reporting Structure), see in
$VirtualBoxRepo/src/VBox/Devices/PC/vbox.dsl
and down below. This was added in VirualBox rev. 85349 (4 year ago)
According to ACPI spec _HID is optional, so ACPI driver parse this device incorrect.
// AMD IOMMU (AMD-Vi), I/O Virtualization Reporting Structure
Device (IVRS)
{
Method(_ADR, 0, NotSerialized)
{
Return (IOMA)
}
Method (_STA, 0, NotSerialized)
{
if (LEqual (IOMA, Zero)) {
Return (0x00)
}
else {
Return (0x0F)
}
}
}
Hello!
In latest VirualBox (7.1.4) keyboard (and apparently mouse too) is't working.
While debugging I found the cause of this issue which is as follows.
When ACPI driver enumerate children in AcpipEnumerateDeviceChildren, AcpipCreateOsDevice (drvsup.c, line 269) return STATUS_DEVICE_NOT_CONNECTED, cos AcpipGetDeviceHardwareId can't found _HID method one of the devices. After this the enumeration ends halfway and eventually due to this IopProcessReportedChildren unloads all current child device drivers including the ps/2 driver.
Seems this is a device IVRS (AMD IOMMU (AMD-Vi), I/O Virtualization Reporting Structure), see in
$VirtualBoxRepo/src/VBox/Devices/PC/vbox.dsl
and down below. This was added in VirualBox rev. 85349 (4 year ago)
According to ACPI spec _HID is optional, so ACPI driver parse this device incorrect.
// AMD IOMMU (AMD-Vi), I/O Virtualization Reporting Structure
Device (IVRS)
{
Method(_ADR, 0, NotSerialized)
{
Return (IOMA)
}
Method (_STA, 0, NotSerialized)
{
if (LEqual (IOMA, Zero)) {
Return (0x00)
}
else {
Return (0x0F)
}
}
}