diff options
Diffstat (limited to 'Kernel/Devices')
-rw-r--r-- | Kernel/Devices/DebugLogDevice.cpp | 28 | ||||
-rw-r--r-- | Kernel/Devices/DebugLogDevice.h | 17 |
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"; } +}; |