Serenity Operating System
1/*
2 * Copyright (c) 2022, the SerenityOS developers.
3 *
4 * SPDX-License-Identifier: BSD-2-Clause
5 */
6
7#pragma once
8
9#include <Kernel/Forward.h>
10#include <Kernel/Graphics/Console/GenericFramebufferConsole.h>
11
12namespace Kernel::Graphics {
13
14class BootFramebufferConsole : public GenericFramebufferConsoleImpl {
15public:
16 virtual void clear(size_t x, size_t y, size_t length) override;
17 virtual void write(size_t x, size_t y, char ch, Color background, Color foreground, bool critical = false) override;
18 using GenericFramebufferConsoleImpl::write;
19
20 virtual void enable() override;
21 virtual void disable() override;
22
23 virtual void flush(size_t, size_t, size_t, size_t) override { }
24 virtual void set_resolution(size_t, size_t, size_t) override { }
25
26 u8* unsafe_framebuffer_data() { return m_framebuffer_data; }
27
28 BootFramebufferConsole(PhysicalAddress framebuffer_addr, size_t width, size_t height, size_t pitch);
29
30private:
31 virtual void set_cursor(size_t x, size_t y) override;
32 virtual void hide_cursor() override;
33 virtual void show_cursor() override;
34
35protected:
36 virtual void clear_glyph(size_t x, size_t y) override;
37
38 virtual u8* framebuffer_data() override;
39
40 OwnPtr<Memory::Region> m_framebuffer;
41 u8* m_framebuffer_data {};
42 mutable Spinlock<LockRank::None> m_lock {};
43};
44
45}