summaryrefslogtreecommitdiff
path: root/src/dev/x86
diff options
context:
space:
mode:
authorJason Lowe-Power <jason@lowepower.com>2018-01-10 10:19:19 -0800
committerJason Lowe-Power <jason@lowepower.com>2018-02-09 00:52:09 +0000
commit3feeb994ae613fd6b3734c1a991285b2ecbd1946 (patch)
tree55e90a35ca28a2502cc0a01354425c240555562a /src/dev/x86
parent5a3b9ca5833815641c355833040197614f8b147d (diff)
downloadgem5-3feeb994ae613fd6b3734c1a991285b2ecbd1946.tar.xz
dev: Fix i8042 device errors
The patch that added M5_FALLTHROUGH (5c41076bd7610 misc: Updates for gcc7.2 for x86) incorrectly added breaks to the i8042 device without implementing the correct functions. This patch implements keyboard writes, but ignores output writes. Information on the PS2 controller can be found at https://wiki.osdev.org/%228042%22_PS/2_Controller Note: Without this patch Linux 4.14 won't boot. Change-Id: I7de137b46cef00e6c1f1c14335cb52107cd7fe5b Signed-off-by: Jason Lowe-Power <jason@lowepower.com> Reviewed-on: https://gem5-review.googlesource.com/7301 Reviewed-by: Gabe Black <gabeblack@google.com> Maintainer: Gabe Black <gabeblack@google.com>
Diffstat (limited to 'src/dev/x86')
-rw-r--r--src/dev/x86/i8042.cc19
1 files changed, 16 insertions, 3 deletions
diff --git a/src/dev/x86/i8042.cc b/src/dev/x86/i8042.cc
index 279c520c1..c884f71fe 100644
--- a/src/dev/x86/i8042.cc
+++ b/src/dev/x86/i8042.cc
@@ -35,6 +35,11 @@
#include "mem/packet.hh"
#include "mem/packet_access.hh"
+/**
+ * Note: For details on the implementation see
+ * https://wiki.osdev.org/%228042%22_PS/2_Controller
+ */
+
// The 8042 has a whopping 32 bytes of internal RAM.
const uint8_t RamSize = 32;
const uint8_t NumOutputBits = 14;
@@ -382,6 +387,17 @@ X86ISA::I8042::write(PacketPtr pkt)
"mouse output buffer\" command.\n", data);
writeData(data, true);
break;
+ case WriteKeyboardOutputBuff:
+ DPRINTF(I8042, "Got data %#02x for \"Write "
+ "keyboad output buffer\" command.\n", data);
+ writeData(data, false);
+ break;
+ case WriteOutputPort:
+ DPRINTF(I8042, "Got data %#02x for \"Write "
+ "output port\" command.\n", data);
+ panic_if(bits(data, 0) != 1, "Reset bit should be 1");
+ // Safe to ignore otherwise
+ break;
default:
panic("Data written for unrecognized "
"command %#02x\n", lastCommand);
@@ -453,12 +469,9 @@ X86ISA::I8042::write(PacketPtr pkt)
case ReadOutputPort:
panic("i8042 \"Read output port\" command not implemented.\n");
case WriteOutputPort:
- warn("i8042 \"Write output port\" command not implemented.\n");
lastCommand = WriteOutputPort;
break;
case WriteKeyboardOutputBuff:
- warn("i8042 \"Write keyboard output buffer\" "
- "command not implemented.\n");
lastCommand = WriteKeyboardOutputBuff;
break;
case WriteMouseOutputBuff: