summaryrefslogtreecommitdiff
path: root/Kernel/Devices
diff options
context:
space:
mode:
Diffstat (limited to 'Kernel/Devices')
-rw-r--r--Kernel/Devices/DebugLogDevice.cpp28
-rw-r--r--Kernel/Devices/DebugLogDevice.h17
2 files changed, 45 insertions, 0 deletions
diff --git a/Kernel/Devices/DebugLogDevice.cpp b/Kernel/Devices/DebugLogDevice.cpp
new file mode 100644
index 0000000000..321cd97d35
--- /dev/null
+++ b/Kernel/Devices/DebugLogDevice.cpp
@@ -0,0 +1,28 @@
+#include <Kernel/Devices/DebugLogDevice.h>
+#include <Kernel/IO.h>
+
+static DebugLogDevice* s_the;
+
+DebugLogDevice& DebugLogDevice::the()
+{
+ ASSERT(s_the);
+ return *s_the;
+}
+
+DebugLogDevice::DebugLogDevice()
+ : CharacterDevice(1, 18)
+{
+ s_the = this;
+}
+
+DebugLogDevice::~DebugLogDevice()
+{
+}
+
+ssize_t DebugLogDevice::write(Process&, const byte* data, ssize_t data_size)
+{
+ for (int i = 0; i < data_size; ++i)
+ IO::out8(0xe9, data[i]);
+ return data_size;
+}
+
diff --git a/Kernel/Devices/DebugLogDevice.h b/Kernel/Devices/DebugLogDevice.h
new file mode 100644
index 0000000000..dd6db9f4d2
--- /dev/null
+++ b/Kernel/Devices/DebugLogDevice.h
@@ -0,0 +1,17 @@
+#include <Kernel/Devices/CharacterDevice.h>
+
+class DebugLogDevice final : public CharacterDevice {
+public:
+ DebugLogDevice();
+ virtual ~DebugLogDevice() override;
+
+ static DebugLogDevice& the();
+
+private:
+ // ^CharacterDevice
+ virtual ssize_t read(Process&, byte*, ssize_t) override { return 0; }
+ virtual ssize_t write(Process&, const byte*, ssize_t) override;
+ virtual bool can_write(Process&) const override { return true; }
+ virtual bool can_read(Process&) const override { return true; }
+ virtual const char* class_name() const override { return "DebugLogDevice"; }
+};