dev,arch-x86: Implement some self test 8042 commands.

The self test in particular is used by bare metal software to ensure
that the keyboard controller is reset and ready to use.

Change-Id: I53c2a80c181b9d19617c75657637e06951c94433
Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/55806
Reviewed-by: Matthew Poremba <matthew.poremba@amd.com>
Maintainer: Gabe Black <gabe.black@gmail.com>
Tested-by: kokoro <noreply+kokoro@google.com>
This commit is contained in:
Gabe Black
2022-01-23 03:00:02 -08:00
parent e1e261c1d1
commit ccb5f8f8b3

View File

@@ -226,11 +226,26 @@ X86ISA::I8042::write(PacketPtr pkt)
commandByte.disableMouse = 0;
break;
case TestMouse:
panic("i8042 \"Test mouse\" command not implemented.\n");
// The response to this is from the 8042, not the mouse.
// Hard code no errors detected.
writeData(0x00);
break;
case SelfTest:
panic("i8042 \"Self test\" command not implemented.\n");
// Exactly what this does is essentially undocumented, but this:
// https://www.os2museum.com/wp/
// ibm-pcat-8042-keyboard-controller-commands/
// says that this should essentially reset some values.
commandByte.convertScanCodes = 1;
commandByte.disableMouse = 1;
commandByte.disableKeyboard = 1;
commandByte.passedSelfTest = 1;
statusReg.passedSelfTest = 1;
writeData(0x55); // Self test passed.
break;
case InterfaceTest:
panic("i8042 \"Interface test\" command not implemented.\n");
// Hard code no errors detected.
writeData(0x00);
break;
case DiagnosticDump:
panic("i8042 \"Diagnostic dump\" command not implemented.\n");
case DisableKeyboard: