Serenity Operating System
at master 43 lines 1.3 kB view raw
1/* 2 * Copyright (c) 2018-2020, Andreas Kling <kling@serenityos.org> 3 * 4 * SPDX-License-Identifier: BSD-2-Clause 5 */ 6 7#pragma once 8 9#include <AK/CircularQueue.h> 10#include <AK/Vector.h> 11#include <Kernel/Devices/CharacterDevice.h> 12 13namespace Kernel { 14 15extern Spinlock<LockRank::None> g_console_lock; 16 17class ConsoleDevice final : public CharacterDevice { 18 friend class DeviceManagement; 19 20public: 21 static NonnullLockRefPtr<ConsoleDevice> must_create(); 22 23 virtual ~ConsoleDevice() override; 24 25 // ^CharacterDevice 26 virtual bool can_read(Kernel::OpenFileDescription const&, u64) const override; 27 virtual bool can_write(Kernel::OpenFileDescription const&, u64) const override { return true; } 28 virtual ErrorOr<size_t> read(OpenFileDescription&, u64, Kernel::UserOrKernelBuffer&, size_t) override; 29 virtual ErrorOr<size_t> write(OpenFileDescription&, u64, Kernel::UserOrKernelBuffer const&, size_t) override; 30 virtual StringView class_name() const override { return "Console"sv; } 31 // ^Device 32 virtual bool is_openable_by_jailed_processes() const override { return true; } 33 34 void put_char(char); 35 36 CircularQueue<char, 16384> const& logbuffer() const { return m_logbuffer; } 37 38private: 39 ConsoleDevice(); 40 CircularQueue<char, 16384> m_logbuffer; 41}; 42 43}